Initial content from private repository
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..24d30bd
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,258 @@
+OpenVX conformance tests change log:
+
+RELEASE: CTS-1.2-20171220
+* Fixes for compiling with Windows Visual Studio
+
+RELEASE: CTS-1.2-20171020
+* First conformance test suite for OpenVX 1.2
+* Optional tests for Neural-Network and Import-Export KHR extensions
+
+RELEASE: CTS-1.1-20170301
+
+2017-02-15
+* Fixed an incorrect 'return' from a function returning a value
+* Include string.h in test_mem.c
+* Clean/clarify the dangling refs management
+2017-02-14
+* Remove include "vx_compatibility.h"
+* Make ownCopyImage static
+* Remove negative tests for vx_convolution object
+2017-01-27
+* 16202 - Added API in test_utils to get path to the test images
+2017-01-26
+* 16203 - Adding wrapper for malloc/free/memset
+* 16177 - Remove user kernel at end of take10_kernel in test_graph.c
+2017-01-24
+* 16116 - Replaced access/commit in test_array and test_vximage with copy or map/unmap
+2017-01-11
+* Replace controversial error code checking by a more generic error checking
+2016-12-20
+* 16160 - Fix Histogram.OnRandom/0/Immediate/U8 by writing the Distribution intead of reading it
+* VX_REF_ATTRIBUTE_<name> -> VX_REFERENCE_<name> change
+2016-12-08
+* 16146 - Fixed the ScaleImage/Bilinear conformance test
+2016-07-18
+* 15932 - Remove include of string.h from vx_types.h
+
+RELEASE: CTS-1.1-20160617
+
+2016-06-17
+* fixed conformance test build under cygwin
+2016-06-16
+* fixed build conformance test test-module as a package
+2016-06-15
+* fix warnings on windows build
+* Apply patch for fixing the pb with valid regions in pyramid tests
+2016-06-14
+* Change testRegisterAutoAging to check data content instead of references
+* Make concerto-built conformance-test-program-name match cmake and README
+* 15901 - excluded test for read-only VX_IMAGE_RANGE attribute
+* fix conformance test test_vximage
+* 15899 - fixed build of conformance tests with pre-built OpenVX libraries
+* 15896 - fix for Scalar conformance test
+* Doesn't check VX_DISTRIBUTION_WINDOW when it is specified as invalid (when the range is not a multiple of nbins)
+2016-06-10
+* 15887 - fixed test_vximage
+2016-06-03
+* 15780 - fixed VX_NOGAP_X use in vxMapLUT calls in tests
+2016-06-02
+* 15862 - fixed type of parameter in vxSetReferenceName test and sample impl
+* 15863 - fixed sobel3x3 kernel validator and conformance test
+* 15793 - fixed inclusion of extra files
+* 15867 - removed dev specific path
+* 15868 - fixed #if/else in vx_test.c
+2016-05-31
+* 15860 - fix setting of valid rectangle callback
+* 15793 - fix conformance test for vxUnloadKernels
+* fix compilation warning on windows and linux for concerto build
+2016-05-28
+* 15857 - apply patch to fix issues with C98 compiler
+* 15718 - remove overlooked line with negative test
+* deprecated funcs replaced with new ones for modules extra and debug
+2016-05-26
+* 15718 - redesign conformance test according to the latest specification
+* 13719 - fixed crash in Smoke test
+2016-05-20
+* 14615 - changed copyright date
+* 15791 - changed license notice
+* 13337 - new attribute and callback to manage user kernel valid rectangle
+* 12667 - graph and nodes status attributes
+* 14205 - fixed vxVerifyGraph semantic
+* 14351 - add smoke test for check required params
+* 14561 - fixed non settable attributes
+* 15793 - updated sample implementation and fixed test for vxUnloadKernels
+* 15670 - change all internal identifier' prefix from 'vx' to 'own'
+2016-05-13
+* 13797 - fix support for pyramids in the image processing functions
+* 12667 - Graph and Node status attributes do not reflect execution status
+* 14238 - Array of images and references support
+* 15222 - Add VX_CONTEXT_ENABLE_PERFORMANCE_COUNTERS attribute
+* 15806 - Graph conformance test checks operation of performance
+*         counters without first enabling them
+2016-05-06
+* 10584 - add vxCreateImageFromChannel and tests
+* 13198 - add vxSetReferenceName and conformance tests
+* 15618 - deprecated vxAccess/Commit funcs in tests
+* 15718 - conformance test fixed
+* 15803 - fixed test and vxMap/UnmapImagePatch funcs
+* fixed build warnings
+2016-04-29
+* sync with svn r32728
+* 13196 - add vxCopyArrayRange, vxMapArrayRange, vxUnmapArrayRange and tests
+* 13196 - add vxCopyLUT, vxMapLUT, vxUnmapLUT and tests
+* 13196 - add vxCopyMatrix, vxCopyConvolutionCoefficients,
+*         vxCopyScalar and tests
+* 13313 - improved test for auto aging delay
+* 13811 - fixed sample implementation and test for delay as an output param
+* 15618 - vxAccessImagePatch/vxCommitImagePatch and
+*         vxReadScalarValue/vxWriteScalarValue deprecated in conformance tests
+*         and test engine
+* 15758 - removed test for VX_KERNEL_INVALID
+2016-04-22
+* sync with svn r32696
+* fixed sampl build issues (sync sample with changed attributes name)
+* 13196 - add vxCopyImagePatch, vxMapImagePatch, vxUnmapImagePatch and tests
+*         add vxCopyDistribution, vxMapDistributionm vxUnmapDistribution
+*         and tests
+* 13016 - fixed test (order of vxRemoveKernel call)
+* 13821 - improved conformance test
+* 15744 - fixed vxSwapImageHandle test
+* 15743 - fixed ColorConvert sample impl and test
+* 15641 - fixed typo in vxMultiply test
+* 15706 - fixed vxLaplacianReconstruct test
+* 15650 - fixed sample impl and test (delay semantics)
+2016-04-15
+* sync with svn r32635 and restore codebase compilation
+* 12972 - ignore threshold TRUE and FALSE vals in vxCannyEdgeDetectorNode
+* 13399 - improve tests for vxSwapImageHandle
+* 13309 - add new func vxSetMetaFormatFromReference and tests
+* 14960 - change attribute names
+* 13016 - add new func vxUnloadKernels and tests
+* 14432 - consistent error management in getter funcs
+* 13200 - add new func vxNonlinearFilterNode and tests
+* 15291 - extended conformance test
+2016-03-30
+* sync with svn r32583 and restore codebase compilation
+* 14072 - the vxHint mechanism extended to allow arguments
+* 12431 - adopted new type vx_pixel_value_t
+* 14500 - removed attribute
+* 13422 - hint was removed
+* 14211 - canny tests extended for INT16 threshold
+* 14493 - canny tests extended for INT16 threshold
+* 11676 - check every vxAddReference for status
+* 15558 - fixed optical flow conformance test (zero stride)
+2016-03-17
+* sync with svn r32541 and restore codebase compilation
+* (changed sources to match changes in headers)
+* 11676  check every vxAddReference
+2016-01-14
+* 14019: fixed double call of vxReleaseGraph in Canny, HarrisCorners,
+*        GaussianPyramid, LaplacianPyramid, LaplacianReconstruct and
+*        HalfScaleGaussian kernels.
+*        Also sync cmake script for sample/vxu folder
+2015-12-25
+* 9600:  improved tests for vxSetNodeTarget, vxSetImmediateNodeTarget
+* 13338: fixed vxReleaseReference func for different reference types
+* 13399: improved tests for vxSwapImageHandle
+* 12652: fixed sobel dx kernels
+* 10847: fixed tests for vxLaplacianPyramid, vxLaplacianReconstruct
+2015-12-17
+* 9600:  add tests for vxSetNodeTarget and vxSetImmediateModeTarget
+* 15303: fixed rectangle in vxCommitImagePatch for MeanStdDev kernel
+* 13340: add test for image containment/overlapping relationship
+* 14019: fixed resource leaks at vxVerifyGraph for vxHalfScaleGaussianNode,
+*        vxHarrisCornersNode, vxCannyEdgeDetectorNode, vxGaussianPyramidNode,
+*        vxLaplacianPyramidNode, vxLaplacianReconstructNode
+2015-11-28
+* 15178: fixed type of convolution attributes
+* 15176: fixed too strong check in convolution input validator
+* 13797: implemented with creation of actual hidden nodes. No array of object support and no propagation of changes in parameters or attributes.
+*        implemented support for replicate add/sub/mul/lut nodes.
+*        remove reference to object arrays in func description (support of object arrays not implemented yet)
+*        fixed warnings 'passing argument from incompatible pointer type'
+* 13725: implemented unsupported border mode policy
+* 12972: restored default value 255 for vx_true_e
+* 10847: replace 16x16 size with 128x128 for laplacian reconstruct immediate mode
+*        remove 16x16 size from test (too small for laplacian pyramid with 5x5 filter kernel)
+*        fixed undefined border bounds computation in test
+*        add VX_API_CALL to vxLaplacianReconstructNode impl
+*        add missed VX_API_CALL for vxLaplacianReconstructNode func
+*        fixed vxRegisterAutoAging declaration. fixed roi computation for laplacian pyramid tests
+*        fix comparison of ref and tst images (exclude border pixels because of undfined border mode)
+*        fixed typo after hand-merge of conflicts
+*        added setNodeTarget calls to 2 new vxu functions
+*        extended laplacian pyramid bitdepth from U8 to S16 to avoid overflows. this also involved add S16 support to vxScaleImage function (as not documented feature of sample implementation)
+*        add vxLaplacianReconstructNode, vxuLaplacianReconstruct and tests
+*        add vxLaplacianPyramidNode, vxuLaplacianPyramid functions and tests
+* 9600:  implemented node affinity capability feature
+*        fix build of vxu.dll
+*        clean sources
+2015-11-13
+* 14654: implemented new user-kernel validation callback
+*        fixed typo in comment
+*        fixed explicit checks for function return value
+* 13932: added kernel_size=1 to HalfScaleGaussian
+* 13399: add vxSwapImageHandle and test. also fixed compilation warning in histogram test.
+*        fixed typo
+*        strenghten bad params check
+* 13338: improved SmokeTest.vxReleaseReference test
+* 13197: added SmokeTest.vxRetainReference test
+2015-10-29:
+* 14733: changed SobelMxN output to F32 to get rid of 7x7 overflow, enabled HarrisCorners GRADIENT_SIZE=7 tests
+* 14439: implemented a note #2 on vxCreateImageFromHandle:
+*        2- In the vx_imagepatch_addressing_t structures of the 'addr[]' parameter
+*          2.1- Only dim_x, dim_y, stride_x and stride_y fields must be provided by the application. Other fields (step_x, step_y, scale_x & scale_y) are ignored by the vxCreateImageFromHandle function.
+*          2.2- the layout of the imported memory must follow a row-major order. In other words, stride_x should be sufficiently large so that there is no overlap between data elements corresponding to different pixels, and stride_y >= stride_x * dim_x.
+* 14193: vxCreateImageFromHandle - added const keyword
+* 13795: added support for VX_TYPE_INT16, LUT non-zero offset; added S16 tests
+* 13338: add vxReleaseReference func and smoke test
+* 13313: add vxRegisterAutoAging func and simple test
+* 13197: implemented vxRetainReference function
+* 12972: threshold, canny kernels and conformance tests changed to use attributes TRUE_VALUE and FALSE_VALUE
+2015-10-13:
+* 14830: changed accumulation of result - int32 to uint32, as proposed in bug description
+* 14298: added VX_VERSION changes made in 14823
+*        provided backward compatibility with 1.0 (vx_khr_opencl.h)
+*        implemented semantics of the 'new' histogram formula - see 14298, 12483, 14342
+* 13812: implemented vxSetMetaFormatFromReference func
+2015-09-29:
+* 14109: improvements in HarrisCorners conformance tests
+* 14652: fixed vxHint to accept all openvx data object types
+* 14649: fixed wrong parameter check in UserNode.Simple test
+* 14793: fixed typo in vx_threshold_t members description 
+2015-09-16:
+* 14037: clarified ambiguity of "disabled" test in conformance test log
+* 14067: fixed missing vxReleaseKernel after vxFinalizeNode in test_usernode.c
+* 13911: removed references to sample implementation examples in public header
+         files
+* 13400: replace VX_ID_KHRONOS with VX_ID_DEFAULT in example
+* 13398: change the type of num_corners in vxFastCorners
+* 12567: add initialization for unused fields of vx_keypoint_t data structure
+* 14112: tighten RGB/YUV conversion conformance
+* 13856: fixed signed/unsigned mismatch in vxEuclideanNonMaxSuppression
+
+2015-05-13:
+* updated vx_uint32/vx_size type policy
+* updated kernel names
+* removed GraphCallback.testRestart test
+* AccumulateSquare: S16 input without negative values
+* Dilate/Erode: boolean images with 0/255 values
+
+2015-04-15:
+* added Array tests
+* added Image CopyWrite/CopyRead tests
+* added AbsDiff S16 tests
+* Scale image test: replaced exact check from some tests
+* HarrisCorners test uses normalization
+
+2014-12-19:
+* fix OpticalFlow check for lost points
+
+2014-12-17:
+* removed Scale tests with BILINEAR interpolation and bit-exact checks
+* fix tolerance check in GaussianPyramid tests
+* tests for OpticalFlow with pre-calculated reference input pyramids
+
+2014-12-08:
+* disabled tests for REPLICATE and CONSTANT borders for filter tests
+* added tests package version information to #REPORT string
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..6a6caac
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,172 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+cmake_minimum_required(VERSION 2.8.12) #2.8.11.2 fails
+
+set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) #instead of manually added -fPIC
+
+project(openvx_conformance C)
+
+if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode)
+  option(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" ON)
+endif()
+
+# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
+if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
+  message(STATUS "Build type is not specified, use: Release")
+  set(CMAKE_BUILD_TYPE "Release" CACHE INTERNAL "" FORCE)
+endif()
+
+# DEBUG/NDEBUG preprocessor definition
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+  add_definitions(-DDEBUG)
+else()
+  add_definitions(-DNDEBUG)
+endif()
+
+macro(status_separator)
+  message(STATUS "============================================")
+endmacro()
+
+status_separator()
+message(STATUS "=       Conformance Tests for OpenVX       =")
+status_separator()
+
+# Default options for the CMake GUI
+option( OPENVX_USE_IX ON )
+option( OPENVX_USE_NN ON )
+option( OPENVX_USE_NN_16 ON )
+
+message( "-- Selected OpenVX Extensions:")
+if (OPENVX_USE_IX)
+    add_definitions( -DOPENVX_USE_IX )
+    message( "--    Offical Import-Export extension")
+endif (OPENVX_USE_IX)
+if (OPENVX_USE_NN)
+    add_definitions( -DOPENVX_USE_NN )
+    message( "--    Offical NeuralNet extension")
+endif (OPENVX_USE_NN)
+if (OPENVX_USE_NN_16)
+    add_definitions( -DOPENVX_USE_NN_16 )
+    message( "--    Offical NeuralNet 16 bits extension")
+endif (OPENVX_USE_NN_16)
+message( "--" )
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_PDB_OUTPUT_DIRECTORY     ${CMAKE_BINARY_DIR}/lib)
+
+if (CMAKE_VERSION VERSION_LESS "3.0.0")
+  if (NOT EXISTS "${CMAKE_BINARY_DIR}/dummy.c")
+    file(WRITE "${CMAKE_BINARY_DIR}/dummy.c" "")
+  endif()
+  add_library(openvx-interface STATIC "${CMAKE_BINARY_DIR}/dummy.c")
+else()
+  add_library(openvx-interface INTERFACE)
+endif()
+
+if (DEFINED OPENVX_LIBRARIES)
+  message(STATUS "OpenVX: Prebuild Version")
+  message(STATUS "Compiler: ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} (ver ${CMAKE_C_COMPILER_VERSION})")
+  if (CMAKE_BUILD_TYPE)
+    message(STATUS "Configuration: ${CMAKE_BUILD_TYPE}")
+  endif()
+  message(STATUS)
+
+  message(STATUS "OPENVX_LIBRARIES: \t${OPENVX_LIBRARIES}")
+  set_target_properties(openvx-interface PROPERTIES INTERFACE_LINK_LIBRARIES "${OPENVX_LIBRARIES}")
+
+  if (DEFINED OPENVX_INCLUDES)
+    message(STATUS "OPENVX_INCLUDES: \t${OPENVX_INCLUDES}")
+    set_target_properties(openvx-interface PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OPENVX_INCLUDES}")
+  else()
+    message(STATUS "OPENVX_INCLUDES: \t<empty>")
+  endif()
+
+  if (DEFINED OPENVX_DEFINITIONS)
+    message(STATUS "OPENVX_DEFINITIONS: \t${OPENVX_DEFINITIONS}")
+    set_target_properties(openvx-interface PROPERTIES INTERFACE_COMPILE_DEFINITIONS "${OPENVX_DEFINITIONS}")
+  else()
+    message(STATUS "OPENVX_DEFINITIONS: \t<empty>")
+  endif()
+
+  if (DEFINED OPENVX_CFLAGS)
+    message(STATUS "OPENVX_CFLAGS: \t${OPENVX_CFLAGS}")
+    set_target_properties(openvx-interface PROPERTIES INTERFACE_COMPILE_OPTIONS "${OPENVX_CFLAGS}")
+  else()
+    message(STATUS "OPENVX_CFLAGS: \t<empty>")
+  endif()
+else()
+  message(STATUS "OpenVX: Khronos Sample Implementation")
+  message(STATUS "Compiler: ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} (ver ${CMAKE_C_COMPILER_VERSION})")
+  if (CMAKE_BUILD_TYPE)
+    message(STATUS "Configuration: ${CMAKE_BUILD_TYPE}")
+  endif()
+  include(cmake/openvx.cmake)
+  target_link_libraries(openvx-interface INTERFACE openvx vxu)
+endif()
+status_separator()
+
+if(CMAKE_COMPILER_IS_GNUCC)
+  string(REPLACE "-std=gnu99" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
+endif()
+#TODO: enable C99 features for non-gnu platforms (MSVC - ???)
+
+add_custom_target(generate_version_file
+    ${CMAKE_COMMAND} -DOUTPUT_DIR="${CMAKE_CURRENT_BINARY_DIR}" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/vcs_version.cmake"
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+)
+add_definitions(-DHAVE_VCS_VERSION_INC)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/openvx_cts_version.inc")
+  add_definitions(-DHAVE_VERSION_INC)
+  include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+endif()
+
+if(NOT CT_DISABLE_TIME_SUPPORT)
+  include(CheckIncludeFile)
+  include(CheckCSourceCompiles)
+
+  check_include_file(sys/time.h HAVE_SYS_TIME_H)
+  if(HAVE_SYS_TIME_H)
+    add_definitions(-DHAVE_SYS_TIME_H)
+    set(CMAKE_REQUIRED_DEFINITIONS "-DHAVE_SYS_TIME_H")
+  endif()
+
+  # _XOPEN_SOURCE=700 -> use POSIX 2008 (SUS v4)
+  add_definitions(-D_XOPEN_SOURCE=700)
+  set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_XOPEN_SOURCE=700")
+
+  file(READ "${CMAKE_SOURCE_DIR}/cmake/checks/time_duration.c" TIME_DURATION_SOURCE)
+  check_c_source_compiles("${TIME_DURATION_SOURCE}" CT_TEST_TIME)
+  if(CT_TEST_TIME)
+    add_definitions(-DCT_TEST_TIME)
+  endif()
+endif()
+
+add_subdirectory(test_engine)
+add_subdirectory(test_conformance)
+
+option(BUILD_TEST_DATA_GENERATORS "Build generators for test data" OFF)
+if(BUILD_TEST_DATA_GENERATORS)
+  message(STATUS "Build with test data generators")
+  add_subdirectory(test_data_generator)
+endif()
diff --git a/README b/README
new file mode 100644
index 0000000..63d110b
--- /dev/null
+++ b/README
@@ -0,0 +1,131 @@
+The OpenVX conformance tests README
+===================================
+
+Building the conformance tests
+------------------------------
+
+The included CMake script provides support for linking the tests with your
+pre-built OpenVX library binaries.
+
+The following CMake variables are supported:
+
+* OPENVX_USE_IX      - Compile export/import test case or not.
+
+* OPENVX_USE_NN      - Compile neural network test case or not.
+
+* OPENVX_LIBRARIES   - semicolon separated list of shared/static libraries to link
+                       with. If there are link order dependencies between your
+                       libraries, then the libraries have to be specified in
+                       correct order. Use absolute paths if your librarieas are
+                       not in system path.
+
+* OPENVX_INCLUDES    - absolute path to the OpenVX headers (excluding the "VX"
+                       sub-folder).
+
+* OPENVX_DEFINITIONS - semicolon separated list of preprocessor definitions
+                       required to compile the suite for target platform.
+
+* OPENVX_CFLAGS      - semicolon separated list of extra compiler flags
+                       required to compile/link the suite for target platform.
+
+Examples for Linux:
+
+Use the following commands to build the test suite for the OpenVX baseline only:
+
+    export OPENVX_DIR=<path to prebuilt OpenVX>
+    cd <build dir>
+    cmake \
+        -DOPENVX_INCLUDES=$OPENVX_DIR/include \
+        -DOPENVX_LIBRARIES=$OPENVX_DIR/lib/libopenvx.so\;$OPENVX_DIR/lib/libvxu.so\;pthread\;dl\;m\;rt \
+        ../conformance_tests/
+    cmake --build .
+
+
+Use the following commands to build the test suite with import-export and
+neural network KHR extensions activated:
+
+    export OPENVX_DIR=<path to prebuilt OpenVX>
+    cd <build dir>
+    cmake \
+        -DOPENVX_INCLUDES=$OPENVX_DIR/include \
+        -DOPENVX_LIBRARIES=$OPENVX_DIR/lib/libopenvx.so\;$OPENVX_DIR/lib/libvxu.so\;pthread\;dl\;m\;rt \
+        -DOPENVX_USE_IX=ON \
+        -DOPENVX_USE_NN=ON \
+        ../conformance_tests/
+    cmake --build .
+
+
+Running the tests
+-----------------
+
+1. Set your VX_TEST_DATA_PATH environment variable to point to the
+   "<conformance_tests>/test_data" directory.
+
+2. For Linux/Mac OS X you might need to set the LD_LIBRARY_PATH
+
+3. To run the tests:
+
+    Usage:
+
+    <build binary path>/vx_test_conformance [--filter=<filter>]
+        [--run_disabled] [--global_context=0|1] [--check_any_size=0|1]
+        [--show_test_duration=0|1] [--verbose] [--testid=<testid>]
+        [--list_tests] [--quiet]
+
+    Options:
+
+        --filter=<filter> - selects only matching tests for execution
+
+                 <filter> - specifies a filter as in Google Test: "a
+                            ':'-separated list of wildcard patterns (called the
+                            positive patterns) optionally followed by a '-' and
+                            another ':'-separated pattern list (called the
+                            negative patterns). A test matches the filter if and
+                            only if it matches any of the positive patterns but
+                            does not match any of the negative patterns."
+
+        --run_disabled    - include a set of tests that are disabled by default,
+                            which are not part of the conformance suite
+
+        --global_context  - create new a vx_context for every test (default, "=0")
+                            or execute all the tests inside single vx_context ("=1")
+
+        --check_any_size  - use a restricted set of image sizes (usually VGA) for
+                            testing nodes and immediate mode functions (default,
+                            "=0") or include other sizes as well ("=1").
+                            Conformance only requires the default, restricted set.
+
+        --show_test_duration - enable/disable test time in the test log.  If
+                               this option is not selected (default) no timing
+                               information will be printed.
+
+        --list_tests      - list the tests without running them
+
+        --testid=<testid> - specifies report custom identifier for tests run
+
+        --verbose         - enable extra output
+
+        --quiet           - minimize extra/headers output
+
+
+In order to pass the conformance test, the tests should be run with all the
+options set to their default values, so you can run without specifying any
+options, i.e., just:
+
+     <build binary path>/vx_test_conformance
+
+with no options.  The options are for information and debug purposes only.
+
+
+Test data
+---------
+
+The test data directory contains:
+- several natural images (VGA resolution) used as inputs for tested algorithms;
+- generated reference output data provided by OpenCV 2.4.7 algorithms.
+
+All the required test data is included in the conformance tests package.
+You do NOT need to regenerate this data in most cases.
+
+Refer to the README from the "test_data_generator" directory for more
+information.
diff --git a/android/README_ANDROID b/android/README_ANDROID
new file mode 100644
index 0000000..0a40c99
--- /dev/null
+++ b/android/README_ANDROID
@@ -0,0 +1,46 @@
+How to build and run conformance tests on Android
+=================================================
+
+This guide assumes the following:
+- adb is installed and configured (connected to device);
+- Android NDK is installed and configured;
+- you have Android build of tested OpenVX implementation;
+- you use Linux bash or equivalent shell;
+
+Also commands below assume that tested package of OpenVX implementation contains:
+  * 'include' subdirectory that contains OpenVX header files;
+  * 'lib' subdirectory that contains implementation binaries (libopenvx.so and libvxu.so);
+If it is not, then commands below should be updated to actual state.
+
+
+1. Set Android ABI:
+
+    export ANDROID_ABI=armeabi-v7a
+    # or ANDROID_ABI=x86
+    # or ANDROID_ABI=mips
+
+This ABI must be equal to ABI of OpenVX implementation binaries.
+
+2. Change directory:
+
+    cd conformance_tests/android
+
+3. Build conformance tests binaries:
+
+    export OPENVX_DIR=<path to tested OpenVX implementation package>
+    ndk-build OPENVX_INCLUDES=${OPENVX_DIR}/include/ OPENVX_LIBRARIES="-L ${OPENVX_DIR}/lib/ -lopenvx -lvxu" APP_ABI=${ANDROID_ABI}
+
+4. Deploy files on device and run conformance tests. Use commands below as a sample:
+
+    # Upload test executable to device
+    adb push `pwd`/libs/${ANDROID_ABI}/vx_test_conformance /data/local/tmp/openvx/
+    adb shell chmod 777 /data/local/tmp/openvx/vx_test_conformance
+
+    # Upload shared libraries to device (OPTIONAL step, refer to OpenVX implementation documentation)
+    (cd ${OPENVX_DIR}/lib; find ./ -name '*.so' -exec adb push {} /data/local/tmp/openvx/lib/{} \;)
+
+    # Upload test data to device
+    (cd ../test_data; find ./ -exec adb push {} /data/local/tmp/openvx/test_data/{} \;)
+
+    # Run test on device
+    adb shell 'export LD_LIBRARY_PATH=/data/local/tmp/openvx/lib/:${LD_LIBRARY_PATH}; export VX_TEST_DATA_PATH=/data/local/tmp/openvx/test_data/; /data/local/tmp/openvx/vx_test_conformance'
diff --git a/android/jni/Android.mk b/android/jni/Android.mk
new file mode 100644
index 0000000..9a7623f
--- /dev/null
+++ b/android/jni/Android.mk
@@ -0,0 +1,39 @@
+#
+
+# Copyright (c) 2014-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+CTS_VERSION_FILE := $(strip $(wildcard $(LOCAL_PATH)/../../openvx_cts_version.inc))
+ifdef CTS_VERSION_FILE
+    LOCAL_CFLAGS += -DHAVE_VERSION_INC
+endif
+
+FILE_LIST := $(wildcard $(LOCAL_PATH)/../../test_engine/*.c) $(wildcard $(LOCAL_PATH)/../../test_conformance/*.c)
+LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
+LOCAL_C_INCLUDES := $(OPENVX_INCLUDES) $(LOCAL_PATH)/../../ $(LOCAL_PATH)/../../test_conformance
+LOCAL_LDLIBS := $(OPENVX_LIBRARIES)
+LOCAL_MODULE := vx_test_conformance
+ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+    LOCAL_CFLAGS += -DHAVE_NEON=1 -march=armv7-a -mfpu=neon -ftree-vectorize -ffast-math -mfloat-abi=softfp
+endif
+ifneq ($(CT_DISABLE_TIME_SUPPORT),1)
+    LOCAL_CFLAGS += -DCT_TEST_TIME
+endif
+$(info ${LOCAL_CFLAGS})
+include $(BUILD_EXECUTABLE)
diff --git a/cmake/checks/time_duration.c b/cmake/checks/time_duration.c
new file mode 100644
index 0000000..50ff3b0
--- /dev/null
+++ b/cmake/checks/time_duration.c
@@ -0,0 +1,80 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h> // gettimeofday
+#endif
+#include <time.h>
+#if defined __MACH__ && defined __APPLE__
+#include <mach/mach_time.h>
+#endif
+
+#if defined WIN32 || defined _WIN32 || defined WINCE
+#include <windows.h> // QueryPerformanceFrequency / QueryPerformanceCounter
+#endif
+
+static int64_t CT_getTickCount(void)
+{
+#if defined WIN32 || defined _WIN32 || defined WINCE
+    LARGE_INTEGER counter;
+    QueryPerformanceCounter(&counter);
+    return (int64_t)counter.QuadPart;
+#elif defined __linux || defined __linux__
+    struct timespec tp;
+    clock_gettime(CLOCK_MONOTONIC, &tp);
+    return (int64_t)tp.tv_sec * 1e9 + tp.tv_nsec;
+#elif defined __MACH__ && defined __APPLE__
+    return (int64_t)mach_absolute_time();
+#else
+    struct timeval tv;
+    struct timezone tz;
+    gettimeofday(&tv, &tz);
+    return (int64_t)tv.tv_sec * 1e6 + tv.tv_usec;
+#endif
+}
+
+static double CT_getTickFrequency(void)
+{
+#if defined WIN32 || defined _WIN32 || defined WINCE
+    LARGE_INTEGER freq;
+    QueryPerformanceFrequency(&freq);
+    return (double)freq.QuadPart;
+#elif defined __linux || defined __linux__
+    return 1e9;
+#elif defined __MACH__ && defined __APPLE__
+    static double freq = 0;
+    if(freq == 0)
+    {
+        mach_timebase_info_data_t sTimebaseInfo;
+        mach_timebase_info(&sTimebaseInfo);
+        freq = sTimebaseInfo.denom * 1e9 / sTimebaseInfo.numer;
+    }
+    return freq;
+#else
+    return 1e6;
+#endif
+}
+
+int main()
+{
+    double f = CT_getTickFrequency();
+    int64_t v = CT_getTickCount();
+    return (f > 0. && v > 0) ? 0 : 1; // result is not used
+}
diff --git a/cmake/openvx.cmake b/cmake/openvx.cmake
new file mode 100644
index 0000000..5547b81
--- /dev/null
+++ b/cmake/openvx.cmake
@@ -0,0 +1,172 @@
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+set(KHRONOS_SRC_DIR ..)
+set(OVX_TARGET_NAME c_model)
+set(OVX_TARGET_CORES 4) #TODO: determine number of CPU cores for target platform
+
+include(CheckCCompilerFlag)
+
+macro(add_c_flag flag)
+  string(TOUPPER "HAS${flag}" _HAS_VAR)
+  check_c_compiler_flag(${flag} ${_HAS_VAR})
+  if (${_HAS_VAR})
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
+  endif()
+endmacro()
+
+add_c_flag(-Wno-attributes)
+add_c_flag(-std=gnu99) #sample implementation does use non-ansi extensions
+
+if(CMAKE_COMPILER_IS_GNUCC)
+  foreach(flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_DEBUG)
+    string(REPLACE "-O3" "-O2" ${flags} "${${flags}}")
+  endforeach()
+endif()
+
+# dirty hack to avoid early termination of sample implementation
+add_definitions(-DDEBUG_BREAK=rand)
+
+macro(openvx_target_setup target)
+  if (WIN32)
+    set_target_properties(${target} PROPERTIES PREFIX "")
+  endif()
+  target_include_directories(${target} PRIVATE ${KHRONOS_SRC_DIR}/include)
+  target_compile_definitions(${target} PRIVATE OPENVX_BUILDING
+                                               TARGET_NUM_CORES=${OVX_TARGET_CORES}
+                            )
+  if (WIN32)
+    target_compile_definitions(${target} PRIVATE WINVER=0x501 _WIN32_WINNT=0x0600 "VX_API_ENTRY=__declspec(dllexport)")
+  else()
+    # _XOPEN_SOURCE=700 -> use POSIX 2008 (SUS v4)
+    # _BSD_SOURCE=1     -> functionality derived from 4.3 BSD Unix is included as well as the ISO C, POSIX.1, and POSIX.2 material.
+    # _GNU_SOURCE=1     -> If you define this macro, everything is included: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions. In the cases where POSIX.1 conflicts with BSD, the POSIX definitions take precedence.
+    # _BSD_SOURCE is deprecated alias for _DEFAULT_SOURCE
+    target_compile_definitions(${target} PRIVATE _XOPEN_SOURCE=700 _BSD_SOURCE=1 _GNU_SOURCE=1 _DEFAULT_SOURCE=1)
+    if(APPLE)
+        target_link_libraries(${target} PUBLIC pthread dl m)
+    elseif(ANDROID)
+        target_link_libraries(${target} PUBLIC dl m log)
+    else()
+        target_link_libraries(${target} PUBLIC pthread dl m rt)
+    endif()
+  endif()
+  set_target_properties(${target} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+                                             LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+                                             RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
+                                             PDB_OUTPUT_DIRECTORY     "${CMAKE_BINARY_DIR}/lib")
+  if(ENABLE_SOLUTION_FOLDERS)
+    set_target_properties(${target} PROPERTIES FOLDER "OpenVX - ${target}")
+  endif()
+
+  math(EXPR ARCH_BITS "${CMAKE_SIZEOF_VOID_P}*8")
+  target_compile_definitions(${target} PRIVATE ARCH_${ARCH_BITS})
+
+  if (MSVC)
+    target_compile_options(${target} PRIVATE /wd4996 /wd4018 /wd4244 /wd4267)
+  endif()
+endmacro()
+
+project(openvx-helper C)
+file(GLOB OVX_SRC_HELPER "${KHRONOS_SRC_DIR}/helper/*.c" )
+add_library(openvx-helper STATIC ${OVX_SRC_HELPER})
+openvx_target_setup(openvx-helper)
+
+project(vx_debug C)
+file(GLOB OVX_SRC_DEBUG "${KHRONOS_SRC_DIR}/debug/*.c" )
+add_library(vx_debug STATIC ${OVX_SRC_DEBUG})
+target_include_directories(vx_debug PUBLIC ${KHRONOS_SRC_DIR}/debug)
+openvx_target_setup(vx_debug)
+
+project(openvx C)
+file(GLOB OVX_SRC_FRAMEWORK "${KHRONOS_SRC_DIR}/sample/framework/*.c" )
+add_library(openvx SHARED ${OVX_SRC_FRAMEWORK} "${KHRONOS_SRC_DIR}/sample/framework/openvx.def")
+target_link_libraries(openvx PRIVATE openvx-helper vx_debug)
+target_include_directories(openvx PUBLIC ${KHRONOS_SRC_DIR}/include PRIVATE ${KHRONOS_SRC_DIR}/sample/include)
+openvx_target_setup(openvx)
+
+project(vxu C)
+file(GLOB OVX_SRC_VXU "${KHRONOS_SRC_DIR}/sample/vxu/*.c" )
+add_library(vxu SHARED ${OVX_SRC_VXU} "${KHRONOS_SRC_DIR}/sample/vxu/vx_utility.def")
+target_link_libraries(vxu PRIVATE openvx openvx-helper vx_debug)
+target_include_directories(vxu PUBLIC ${KHRONOS_SRC_DIR}/include PRIVATE ${KHRONOS_SRC_DIR}/sample/include)
+openvx_target_setup(vxu)
+
+project(openvx-c_model-lib C)
+file(GLOB OVX_SRC_KERNELS_C_MODEL "${KHRONOS_SRC_DIR}/kernels/c_model/*.c")
+add_library(openvx-c_model-lib STATIC ${OVX_SRC_KERNELS_C_MODEL})
+target_link_libraries(openvx-c_model-lib PUBLIC openvx PRIVATE vx_debug)
+target_include_directories(openvx-c_model-lib PRIVATE ${KHRONOS_SRC_DIR}/kernels/c_model)
+openvx_target_setup(openvx-c_model-lib)
+
+project(openvx-extras_k-lib C)
+file(GLOB OVX_SRC_KERNELS_EXTRAS "${KHRONOS_SRC_DIR}/kernels/extras/*.c" )
+add_library(openvx-extras_k-lib STATIC ${OVX_SRC_KERNELS_EXTRAS})
+target_include_directories(openvx-extras_k-lib PUBLIC ${KHRONOS_SRC_DIR}/kernels/extras)
+openvx_target_setup(openvx-extras_k-lib)
+
+project(openvx-debug_k-lib C)
+file(GLOB OVX_SRC_KERNELS_DEBUG "${KHRONOS_SRC_DIR}/kernels/debug/*.c" )
+add_library(openvx-debug_k-lib STATIC ${OVX_SRC_KERNELS_DEBUG})
+target_include_directories(openvx-debug_k-lib PUBLIC ${KHRONOS_SRC_DIR}/kernels/debug)
+openvx_target_setup(openvx-debug_k-lib)
+
+project(openvx-extras-lib C)
+add_library(openvx-extras-lib STATIC "${KHRONOS_SRC_DIR}/libraries/extras/vx_extras_lib.c")
+target_link_libraries(openvx-extras-lib PUBLIC openvx-helper)
+openvx_target_setup(openvx-extras-lib)
+
+project(openvx-extras C)
+file(GLOB OVX_SRC_LIB_EXTRAS "${KHRONOS_SRC_DIR}/libraries/extras/*.c" )
+list(REMOVE_ITEM OVX_SRC_LIB_EXTRAS "${CMAKE_CURRENT_SOURCE_DIR}/${KHRONOS_SRC_DIR}/libraries/extras/vx_extras_lib.c")
+add_library(openvx-extras SHARED ${OVX_SRC_LIB_EXTRAS} "${KHRONOS_SRC_DIR}/libraries/extras/openvx-extras.def")
+target_link_libraries(openvx-extras PRIVATE openvx-helper openvx-extras_k-lib PUBLIC openvx)
+target_include_directories(openvx-extras PRIVATE ${KHRONOS_SRC_DIR}/libraries/extras)
+openvx_target_setup(openvx-extras)
+
+project(openvx-debug-lib C)
+add_library(openvx-debug-lib STATIC "${KHRONOS_SRC_DIR}/libraries/debug/vx_debug_lib.c")
+openvx_target_setup(openvx-debug-lib)
+
+project(openvx-debug C)
+file(GLOB OVX_SRC_LIB_DEBUG "${KHRONOS_SRC_DIR}/libraries/debug/*.c" )
+list(REMOVE_ITEM OVX_SRC_LIB_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/${KHRONOS_SRC_DIR}/libraries/debug/vx_debug_lib.c")
+add_library(openvx-debug SHARED ${OVX_SRC_LIB_DEBUG} "${KHRONOS_SRC_DIR}/libraries/debug/openvx-debug.def")
+target_link_libraries(openvx-debug PRIVATE openvx-helper openvx-debug_k-lib PUBLIC openvx)
+target_include_directories(openvx-debug PRIVATE ${KHRONOS_SRC_DIR}/libraries/debug)
+openvx_target_setup(openvx-debug)
+
+project(openvx-c_model C)
+file(GLOB OVX_SRC_TARGETS_C_MODEL "${KHRONOS_SRC_DIR}/sample/targets/c_model/*.c")
+add_library(openvx-c_model SHARED ${OVX_SRC_TARGETS_C_MODEL} "${KHRONOS_SRC_DIR}/sample/targets/c_model/openvx-target.def")
+target_link_libraries(openvx-c_model PRIVATE openvx-debug-lib openvx-extras-lib openvx-helper openvx-c_model-lib PUBLIC openvx vxu)
+target_include_directories(openvx-c_model PRIVATE ${KHRONOS_SRC_DIR}/sample/include ${KHRONOS_SRC_DIR}/kernels/c_model ${KHRONOS_SRC_DIR}/sample/targets/c_model ${KHRONOS_SRC_DIR}/debug)
+openvx_target_setup(openvx-c_model)
+
+if (MSVC)
+  # compile that file as C++ because MSVC in not C99 compliant
+  set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${KHRONOS_SRC_DIR}/sample/targets/c_model/vx_optpyrlk.c"
+                              PROPERTIES COMPILE_FLAGS /TP)
+endif()
+
+if (0)
+  project(vx_conformance C)
+  file(GLOB OVX_CONFORMANCE "${KHRONOS_SRC_DIR}/conformance/*.c")
+  add_executable(vx_conformance ${OVX_CONFORMANCE})
+  target_include_directories(vx_conformance PRIVATE "${KHRONOS_SRC_DIR}/conformance")
+  target_link_libraries(vx_conformance PRIVATE openvx-debug-lib openvx-helper openvx vxu)
+  openvx_target_setup(vx_conformance)
+endif()
diff --git a/cmake/vcs_version.cmake b/cmake/vcs_version.cmake
new file mode 100644
index 0000000..bc8d7b7
--- /dev/null
+++ b/cmake/vcs_version.cmake
@@ -0,0 +1,59 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+message(STATUS "Get version information")
+function(fill_version)
+  find_package(Git QUIET)
+
+  if(GIT_FOUND)
+    execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tags --always --dirty
+      WORKING_DIRECTORY "."
+      OUTPUT_VARIABLE VCSVERSION
+      RESULT_VARIABLE GIT_RESULT
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if(NOT GIT_RESULT EQUAL 0)
+      unset(VCSVERSION)
+    endif()
+  else()
+    # We don't have git:
+    unset(VCSVERSION)
+  endif()
+
+  if(DEFINED VCSVERSION)
+    set(VERSION "${VCSVERSION}")
+  else()
+    set(VERSION "unknown")
+  endif()
+
+  message(STATUS "Version: ${VERSION}")
+
+  set(RESULT "#define VCS_VERSION_STR \"${VERSION}\"")
+  set(OUTPUT ${OUTPUT_DIR}/vcs_version.inc)
+
+  if(EXISTS "${OUTPUT}")
+    file(READ "${OUTPUT}" lines)
+  endif()
+  if("${lines}" STREQUAL "${RESULT}")
+    #message(STATUS "${OUTPUT} contains same content")
+  else()
+    file(WRITE "${OUTPUT}" "${RESULT}")
+  endif()
+endfunction()
+fill_version()
diff --git a/openvx_cts_version.inc b/openvx_cts_version.inc
new file mode 100644
index 0000000..9eeb118
--- /dev/null
+++ b/openvx_cts_version.inc
@@ -0,0 +1,2 @@
+// <Specification version>-<package release date:YYYYMMDD>
+#define VERSION_STR "1.2"
diff --git a/run_tests.py b/run_tests.py
new file mode 100644
index 0000000..1a5e1db
--- /dev/null
+++ b/run_tests.py
@@ -0,0 +1,218 @@
+#!/bin/env python
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+import os
+import sys
+import traceback
+
+import datetime
+import time
+
+import subprocess
+import threading
+
+import re
+
+from pprint import pprint
+
+class BackgroundProcess(threading.Thread):
+    def __init__(self, **args):
+        self.args = args
+        self.stdout = None
+        self.stderr = None
+        self.process = None
+        threading.Thread.__init__(self)
+
+    def run(self):
+        self.process = subprocess.Popen(
+            stderr=subprocess.PIPE,
+            **self.args)
+        self.stdout, self.stderr = self.process.communicate()
+
+report_re = re.compile(
+        r'#REPORT:'
+        r' (?P<timestamp>.{14})'
+        r' (?P<testid>.*)'
+        r' (?P<total>\d+)'
+        r' (?P<disabled>\d+)'
+        r' (?P<started>\d+)'
+        r' (?P<completed>\d+)'
+        r' (?P<passed>\d+)'
+        r' (?P<failed>\d+)'
+        r' (?P<version>[^$]+)'
+)
+
+class TestRunner(object):
+
+    tests = []
+
+    timeout = float(os.environ.get('VX_TEST_TIMEOUT', '65'))  # seconds
+
+    testid = '?'
+    total_tests = 0
+    total_disabled_tests = 0
+    total_started_tests = 0
+    total_completed_tests = 0
+    total_passed_tests = 0
+    total_failed_tests = 0
+    tests_version = 'unknown'
+
+    def get_test_list(self):
+        p = subprocess.Popen(
+                             args=self.launch_args + ['--quiet', '--list_tests', '--run_disabled'],
+                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        stdout, stderr = p.communicate()
+        if p.returncode != 0:
+            raise Exception("Can't get list of tests")
+
+        lines = stdout.replace('\r\n', '\n').split('\n');
+        for line in lines:
+            if line == "":
+                continue
+            self.tests.append(line)
+
+        m = re.search(report_re, stderr)
+        if m:
+            self.testid = m.group('testid')
+
+    def run_test(self, test):
+        self.total_started_tests += 1
+
+        bp = BackgroundProcess(
+                args=self.launch_args + ['--quiet', '--filter=%s' % test.replace(':', '*')]
+                )
+        bp.start()
+
+        bp.join(self.timeout)
+        if bp.is_alive():
+            print('#TIMEOUT on test "%s". TERMINATING' % test)
+            sys.stdout.flush()
+            try:
+                bp.process.terminate()
+            except:
+                pass
+            bp.join()
+
+        m = re.search(report_re, bp.stderr)
+        if m:
+            timestamp = m.group('timestamp')
+            testid = m.group('testid')
+            total = m.group('total')
+            disabled = m.group('disabled')
+            started = m.group('started')
+            completed = m.group('completed')
+            passed = m.group('passed')
+            failed = m.group('failed')
+            if m.group('version'):
+                self.tests_version = m.group('version')
+            if str(started) == '0' and str(disabled) == '0':
+                print("#CHECK FILTER: %s" % test)
+                self.total_failed_tests += 1
+            if str(disabled) != '0':
+                 self.total_disabled_tests += 1
+                 self.total_started_tests -= 1
+            if str(completed) != '0':
+                 self.total_completed_tests += 1
+            if str(passed) != '0':
+                 self.total_passed_tests += 1
+            if str(failed) != '0':
+                 self.total_failed_tests += 1
+        else:
+            self.total_failed_tests += 1
+            sys.stdout.write(bp.stderr)
+            if bp.process.returncode != 0:
+                print('Process exit code: %d' % bp.process.returncode)
+
+    def printUsage(self):
+        print('''\
+Usage:
+    run_tests.py <vx_test_conformance executable> <filter and other parameters>
+
+Environment variables:
+    VX_TEST_DATA_PATH - path to test_data directory (used by vx_test_conformance)
+    VX_TEST_TIMEOUT - single test timeout (in seconds)
+
+Example:
+    run_tests.py ./bin/vx_test_conformance
+    run_tests.py ./bin/vx_test_conformance --filter=*Canny*\
+''')
+
+    def run(self):
+        try:
+            if len(sys.argv) < 2:
+                print("Missed executable path")
+                self.printUsage()
+                return 2
+            if sys.argv[1] in ['-h', '--help', '/?']:
+                self.printUsage()
+                return 0
+
+            self.launch_args = sys.argv[1:]
+
+            self.get_test_list()
+
+            self.launch_args = [a for a in self.launch_args if not a.startswith('--filter=')]
+
+            self.total_tests = len(self.tests)
+
+            print('#FOUND %d tests' % self.total_tests)
+            print('Test timeout=%s' % self.timeout)
+            print('')
+            sys.stdout.flush()
+
+            prev = 0
+            i = 0
+            for t in self.tests:
+                if (self.total_tests >= 500):
+                    next = i * 100 / self.total_tests
+                    if int(next) != prev:
+                        print('# %02d%%' % next)
+                        prev = next
+                i += 1
+                sys.stdout.flush()
+                sys.stderr.flush()
+                try:
+                    self.run_test(t)
+                except KeyboardInterrupt:
+                    break
+                except:
+                    print traceback.format_exc()
+
+            print('')
+            print('ALL DONE')
+
+            timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
+
+            print('')
+            print('#REPORT: %s %s %d %d %d %d %d %d %s' % (
+                    timestamp, self.testid,
+                    self.total_tests,
+                    self.total_disabled_tests,
+                    self.total_started_tests,
+                    self.total_completed_tests,
+                    self.total_passed_tests,
+                    self.total_failed_tests,
+                    self.tests_version))
+
+            return 0 if (self.total_tests == (self.total_started_tests + self.total_disabled_tests) and self.total_failed_tests == 0) else 1
+        except:
+            print traceback.format_exc()
+
+if __name__ == "__main__":
+    sys.exit(TestRunner().run())
diff --git a/test_conformance/CMakeLists.txt b/test_conformance/CMakeLists.txt
new file mode 100644
index 0000000..8f1fbef
--- /dev/null
+++ b/test_conformance/CMakeLists.txt
@@ -0,0 +1,35 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+project(vx_test_conformance C)
+set(target vx_test_conformance)
+
+file(GLOB SOURCES "./*.c")
+file(GLOB HEADERS "./*.h")
+file(GLOB NETWORK_SOURCES "./Networks/src/*")
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+add_subdirectory(Networks)
+
+add_executable(${target} ${SOURCES} ${HEADERS} ${NETWORK_SOURCES})
+target_link_libraries(${target} test_engine openvx-interface)
+
+set(TESTMODULE_FOLDER TestModule)
+
+add_subdirectory(test_module)
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv1_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv1_bias.bin
new file mode 100644
index 0000000..84253ef
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv1_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:651901ab77fd02ea8f247a65d720973ca4ef1ebe32bc137476aea2653c203721
+size 192
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv1_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv1_weights.bin
new file mode 100644
index 0000000..920ae6c
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv1_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d03a5b3c10d0becdf43e1a54138923856cabfd75d5e118d98593ef9858dfff7
+size 69696
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv2_0_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv2_0_bias.bin
new file mode 100644
index 0000000..751b636
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv2_0_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c31d2a814a6839f24f33460a8276f7a3525717abce8dc70711a9b0356a55f4ab
+size 256
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv2_0_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv2_0_weights.bin
new file mode 100644
index 0000000..8f3cb73
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv2_0_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e5c60939d1c1398fc01e6b205ac8a5325acf834335c7f36091b5c7f6e4fdf4c
+size 307200
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv2_1_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv2_1_bias.bin
new file mode 100644
index 0000000..f719f88
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv2_1_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1db72b141e92e3ceba5b800506953919abaa8943a61fc78ba652f197105c95ba
+size 256
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv2_1_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv2_1_weights.bin
new file mode 100644
index 0000000..4961cf0
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv2_1_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:132c5e0a7bdadcf0bb3415a7972ad0f7c599e6cb6fb2d9f69a7446f322fb29f7
+size 307200
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv3_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv3_bias.bin
new file mode 100644
index 0000000..5ab7039
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv3_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b6bdf2519bd8c378e6f8021ae2a711d64f853d73e2dc2508927c38b87875021
+size 768
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv3_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv3_weights.bin
new file mode 100644
index 0000000..c04d4ac
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv3_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4d25226b2caaa401700ba0b52ae747f6d9c248714f48437bfc61a2bd310cf83
+size 1769472
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv4_0_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv4_0_bias.bin
new file mode 100644
index 0000000..f0da4f6
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv4_0_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:74cfffcf14a89d14e826b2906a2fffac84c74b70a52c57e03c83a7dc097aa150
+size 384
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv4_0_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv4_0_weights.bin
new file mode 100644
index 0000000..31eaace
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv4_0_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1572227ea6ef4d36cbd8dfc4549f32dd5dfb8d08abd4502c348547cfa4b10816
+size 663552
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv4_1_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv4_1_bias.bin
new file mode 100644
index 0000000..8ff95a6
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv4_1_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:725a9a53d728068bce9114b4ea04f4967052a173586cb791349010e213d9ab7c
+size 384
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv4_1_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv4_1_weights.bin
new file mode 100644
index 0000000..181af64
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv4_1_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59cfc5664d8b8ab4558dd4dfb7bd3e348976076e06f0553cfff1d2fb29faa3c4
+size 663552
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv5_0_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv5_0_bias.bin
new file mode 100644
index 0000000..e39aec8
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv5_0_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8921da62a66287995a9c5a2f91adbbabf4e1108fb4f3e764b7548627cd2db2b
+size 256
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv5_0_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv5_0_weights.bin
new file mode 100644
index 0000000..ddee35d
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv5_0_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cdb591208f05cef256573e268a735c29b2f304bf3be300d735ab937d4e701571
+size 442368
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv5_1_bias.bin b/test_conformance/Networks/Binaries/Alexnet/conv5_1_bias.bin
new file mode 100644
index 0000000..2752553
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv5_1_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a6cb34b5a87036afa765ae6059f0de49d0dcac17970d867c0fe36508a0d559b
+size 256
diff --git a/test_conformance/Networks/Binaries/Alexnet/conv5_1_weights.bin b/test_conformance/Networks/Binaries/Alexnet/conv5_1_weights.bin
new file mode 100644
index 0000000..c9ad1c1
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/conv5_1_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20b715f7ba977efcef8e0475e5545dc432f99e1e74bdf2aed69755dff9b5cf62
+size 442368
diff --git a/test_conformance/Networks/Binaries/Alexnet/fc6_bias.bin b/test_conformance/Networks/Binaries/Alexnet/fc6_bias.bin
new file mode 100644
index 0000000..5f06051
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/fc6_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0b99c1bf9219fc6ef03b749106023794c5cdd633b0288f8104e2e615f33944d
+size 8192
diff --git a/test_conformance/Networks/Binaries/Alexnet/fc6_weights.bin b/test_conformance/Networks/Binaries/Alexnet/fc6_weights.bin
new file mode 100644
index 0000000..c3779a4
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/fc6_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:14375f5ebbfe0fd8b11370e9c3923ef6fc0634beb8b4cd4c30e4eddb3e2814ce
+size 75497472
diff --git a/test_conformance/Networks/Binaries/Alexnet/fc7_bias.bin b/test_conformance/Networks/Binaries/Alexnet/fc7_bias.bin
new file mode 100644
index 0000000..ada38e9
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/fc7_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cfedadf9cda181c3b37d219a70b978b34722f8ca77925bb23ac87599392c48f9
+size 8192
diff --git a/test_conformance/Networks/Binaries/Alexnet/fc7_weights.bin b/test_conformance/Networks/Binaries/Alexnet/fc7_weights.bin
new file mode 100644
index 0000000..3469a93
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/fc7_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db24c744d9584c8a894612e8d6b21b38f05a88d65079c699fb4f77e608d48aae
+size 33554432
diff --git a/test_conformance/Networks/Binaries/Alexnet/fc8_bias.bin b/test_conformance/Networks/Binaries/Alexnet/fc8_bias.bin
new file mode 100644
index 0000000..88ffb0f
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/fc8_bias.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b9272c509e993d5485e2eb2ccf2d96cd19303550da5467f314b01ff088b9902
+size 2000
diff --git a/test_conformance/Networks/Binaries/Alexnet/fc8_weights.bin b/test_conformance/Networks/Binaries/Alexnet/fc8_weights.bin
new file mode 100644
index 0000000..4eb6c08
--- /dev/null
+++ b/test_conformance/Networks/Binaries/Alexnet/fc8_weights.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:881ce6abafe70a72f9a3d4de3670f70245d2750056ca7554a5df91f8611c3570
+size 8192000
diff --git a/test_conformance/Networks/CMakeLists.txt b/test_conformance/Networks/CMakeLists.txt
new file mode 100644
index 0000000..febd4f0
--- /dev/null
+++ b/test_conformance/Networks/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(src)
diff --git a/test_conformance/Networks/src/CMakeLists.txt b/test_conformance/Networks/src/CMakeLists.txt
new file mode 100644
index 0000000..571d6ac
--- /dev/null
+++ b/test_conformance/Networks/src/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required (VERSION 2.6)
+project (networks)
+
+set (OPENVX_LIB_NAME openvx)
+set (OPENVXU_LIB_NAME vxu)
+set (CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-std=c99") 
+
+
+set (OPENVX_INCLUDE_FOLDER $ENV{OPENVX_FOLDER}/include)
+set (OPENVX_LIB_FOLDER $ENV{OPENVX_FOLDER}/bin $ENV{OPENVX_FOLDER}/lib)
+
+
+include_directories(${OPENVX_INCLUDE_FOLDER} .)
+link_directories(${OPENVX_LIB_FOLDER})
+ 
+#add_executable(networks main.c graph_alexnet.c graph_googlenet.c common.c load_weights.c graph_process.c utilities.c precisionConverter.c)
+
+if( BUILD_ARCH STREQUAL "x86" )
+    set_target_properties(networks PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
+endif()
+
+#target_link_libraries (networks -lm ${OPENVX_LIB_NAME} ${OPENVXU_LIB_NAME})
+
+file(GLOB PROJECT_BINARY_FILES "../../Binaries/*.bin")
+file(COPY ${PROJECT_BINARY_FILES} DESTINATION ${CMAKE_BINARY_DIR})
diff --git a/test_conformance/Networks/src/build.sh b/test_conformance/Networks/src/build.sh
new file mode 100644
index 0000000..87c96b4
--- /dev/null
+++ b/test_conformance/Networks/src/build.sh
@@ -0,0 +1,48 @@
+#!/bin/bash 
+# Arg 1: Build type: Release/Debug
+# Arg 2: Architecture: x86/x64
+
+if [ "$#" -eq 0 ] || [ "$#" -eq 1 ]
+then
+echo "Invalid number of parameters. First must be \"Debug\" or \"Release\". Second must be \"x86\" or \"x64\""
+exit 1
+fi
+
+buildType=$1
+arch=$2
+
+if [ "$arch" != "x86" ] && [ "$arch" != "x64" ]
+then
+echo "Architecture $arch is not supported"
+exit 1
+fi
+
+if [ "$buildType" != "Release" ] && [ "$buildType" != "Debug" ]
+then
+echo "Build Tape $buildType is not supported"
+exit 1
+fi
+
+# Check environment requirements
+command -v cmake >/dev/null 2>&1 || { echo "CMake is not installed!" >&2; exit 1; }
+
+if [ -z "$OPENVX_FOLDER" ]
+then
+echo "OPENVX_FOLDER environment variable not set. Make sure set it to the location of your OpenVX installation folder. E.g. \"export OPENVX_FOLDER=/home/openvx/x64/Release\""
+exit 1
+fi
+
+# Start build
+
+mkdir -p _build
+cd _build
+mkdir -p $arch
+cd $arch
+mkdir -p $buildType
+cd $buildType
+
+echo "Starting build... $arch $buildType"
+
+cmake -DCMAKE_BUILD_TYPE=$buildType -DBUILD_ARCH=$arch ../../.. 
+cmake --build .
+
diff --git a/test_conformance/Networks/src/common.c b/test_conformance/Networks/src/common.c
new file mode 100644
index 0000000..96c6604
--- /dev/null
+++ b/test_conformance/Networks/src/common.c
@@ -0,0 +1,249 @@
+/** @file common.c
+ *  @brief 
+ *  This file contains the implementation of the generated utility functions 
+ */
+
+#include "common.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include <VX/vx_khr_nn.h>
+#include <VX/vx_types.h>
+
+void ReleaseObjects(ObjectRefContainerType* pObjectContainer)
+{
+    if(pObjectContainer)
+    {
+        for(unsigned int i = 0; i < pObjectContainer->count; ++i)
+        {
+            ObjectRefType* pObj = pObjectContainer->pObjects + i;
+
+            if(pObj->ref)
+            {
+                if(pObj->type == VX_TYPE_IMAGE)
+                    vxReleaseImage((vx_image*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_ARRAY)
+                    vxReleaseArray((vx_array*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_SCALAR)
+                    vxReleaseScalar((vx_scalar*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_REMAP)
+                    vxReleaseRemap((vx_remap*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_CONVOLUTION)
+                    vxReleaseConvolution((vx_convolution*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_MATRIX)
+                    vxReleaseMatrix((vx_matrix*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_THRESHOLD)
+                    vxReleaseThreshold((vx_threshold*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_PYRAMID)
+                    vxReleasePyramid((vx_pyramid*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_DISTRIBUTION)
+                    vxReleaseDistribution((vx_distribution*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_LUT)
+                    vxReleaseLUT((vx_lut*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_OBJECT_ARRAY)
+                    vxReleaseObjectArray((vx_object_array*)&(pObj->ref));
+				else if(pObj->type == VX_TYPE_TENSOR)
+                    vxReleaseTensor((vx_tensor*)&(pObj->ref));
+                else if(pObj->type == VX_TYPE_DELAY)
+                    vxReleaseDelay((vx_delay*)&(pObj->ref));
+            }
+            else if(pObj->pMem)
+            {
+                free(pObj->pMem);
+            }
+
+            if(pObj->uniqueRef)
+                free(pObj->uniqueRef);
+
+            // Release of VX_TYPE_KERNEL and VX_TYPE_NODE ignored for now
+        }
+    }
+}
+
+void AddVXObject(ObjectRefContainerType* pObjectContainer, vx_reference ref, vx_enum type, const char* uniqueRef)
+{
+    if(MAX_REFERENCE_OBJECTS == pObjectContainer->count)
+    {
+        WriteLog("ERROR: cannot add object to reference pool. Max items [%d] reached\n", MAX_REFERENCE_OBJECTS);
+        return;
+    }
+
+    ObjectRefType* pNewObj = &pObjectContainer->pObjects[pObjectContainer->count];
+    pNewObj->type = type;
+    pNewObj->ref  = ref;
+    pNewObj->pMem = 0;
+
+    if(uniqueRef)
+    {
+        size_t buflen = strlen(uniqueRef)+1;
+        pNewObj->uniqueRef = (char*)malloc(buflen);
+        memcpy(pNewObj->uniqueRef, uniqueRef, buflen);
+    }
+    else
+    {
+        pNewObj->uniqueRef = 0;
+    }
+    pObjectContainer->count++;
+}
+
+void AddObject(ObjectRefContainerType* pObjectContainer, void* pMem)
+{
+    if(MAX_REFERENCE_OBJECTS == pObjectContainer->count)
+    {
+        WriteLog("ERROR: cannot add object to reference pool. Max items [%d] reached\n", MAX_REFERENCE_OBJECTS);
+        return;
+    }
+
+    (pObjectContainer->pObjects + pObjectContainer->count)->type = (vx_enum)0;
+    (pObjectContainer->pObjects + pObjectContainer->count)->ref  = 0;
+    (pObjectContainer->pObjects + pObjectContainer->count)->pMem = pMem;
+    (pObjectContainer->pObjects + pObjectContainer->count)->uniqueRef = 0;
+
+    pObjectContainer->count++;
+}
+
+vx_reference GetObjectRef(ObjectRefContainerType* pObjectContainer, const char* uniqueRef)
+{
+    unsigned int i;
+
+    if(pObjectContainer)
+    {
+        for(i = 0; i < pObjectContainer->count; ++i)
+        {
+            ObjectRefType* pObj = pObjectContainer->pObjects + i;
+
+            if(pObj->ref && pObj->uniqueRef && (0 == strcmp(uniqueRef, pObj->uniqueRef)))
+            {
+                return pObj->ref;
+            }
+        }
+    }
+
+    return 0;
+}
+
+void VXLog(vx_context context, vx_reference ref, vx_status status, const vx_char string[])
+{
+    WriteLog("VXLOG: %s (sts=%s) \n", string, getVxStatusDesc(status));
+}
+
+vx_status AssignNodeParameter(vx_node node, const char* nodeName, vx_uint32 index, vx_reference parameter)
+{
+    if(node)
+    {
+        vx_status status = vxSetParameterByIndex(node, index, parameter);
+        if(status != VX_SUCCESS)
+        {
+            WriteLog("ERROR: cannot set parameter at index %d for '%s' node (vx_status=%s)\n", index, nodeName, getVxStatusDesc(status));
+            return status;
+        }
+        return status;
+    }
+    return VX_SUCCESS;
+}
+
+vx_status CreateNode(vx_graph graph, vx_kernel kernel, ObjectRefContainerType* pObjectContainer, const char* nodeName, char* filteredNodesList[], size_t filteredNodesCount, vx_node* node)
+{
+    bool bCreateNode = true;
+    // Check if the node is filtered out
+    if(filteredNodesList && filteredNodesCount > 0)
+    {
+        bCreateNode = false;
+        for(unsigned int i = 0; i < filteredNodesCount; i++)
+        {
+            if(0 == strcmp(nodeName, filteredNodesList[i]))
+            {
+                bCreateNode = true;                
+                break;
+            }
+        }
+    }
+
+    if(bCreateNode)
+    {
+        WriteLog("    - %s\n", nodeName);
+        *node = vxCreateGenericNode(graph, kernel);
+        vx_status status = vxGetStatus((vx_reference)*node);
+        if(status != VX_SUCCESS)
+        {
+            WriteLog("ERROR: failed to create node '%s'\n", nodeName);
+            return status;
+        }
+        AddVXObject(pObjectContainer, (vx_reference)*node, VX_TYPE_NODE, nodeName);
+    }    
+    else
+    {
+        *node = NULL;
+    }
+    return VX_SUCCESS;    
+}
+
+int WriteLog(const char* format, ...)
+{
+    char buffer[1024];
+    va_list args;
+    va_start(args, format);
+    int retVal = vsprintf (buffer,format, args);
+    printf("%s", buffer);
+    va_end(args);
+    return retVal;
+}
+
+char** getAllVxStatusEnums()
+{
+    static char allVxStatusEnumsContainer[1024];
+    static char* statusArray[VX_SUCCESS - VX_STATUS_MIN + 1];
+	static bool firstTime = true;
+	if (firstTime)
+	{
+        size_t index = 0;
+        for (int i = VX_STATUS_MIN; i <= VX_SUCCESS; ++i)
+        {
+            if (i == VX_ERROR_REFERENCE_NONZERO) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_REFERENCE_NONZERO");
+            else if (i == VX_ERROR_MULTIPLE_WRITERS) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_MULTIPLE_WRITERS");
+            else if (i == VX_ERROR_GRAPH_ABANDONED) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_GRAPH_ABANDONED");
+            else if (i == VX_ERROR_GRAPH_SCHEDULED) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_GRAPH_SCHEDULED");
+            else if (i == VX_ERROR_INVALID_SCOPE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_SCOPE");
+            else if (i == VX_ERROR_INVALID_NODE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_NODE");
+            else if (i == VX_ERROR_INVALID_GRAPH) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_GRAPH");
+		    else if (i == VX_ERROR_INVALID_TYPE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_TYPE");
+            else if (i == VX_ERROR_INVALID_VALUE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_VALUE");
+            else if (i == VX_ERROR_INVALID_DIMENSION) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_DIMENSION");
+            else if (i == VX_ERROR_INVALID_FORMAT) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_FORMAT");
+            else if (i == VX_ERROR_INVALID_LINK) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_LINK");
+            else if (i == VX_ERROR_INVALID_REFERENCE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_REFERENCE");
+            else if (i == VX_ERROR_INVALID_MODULE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_MODULE");
+            else if (i == VX_ERROR_INVALID_PARAMETERS) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_INVALID_PARAMETERS");
+            else if (i == VX_ERROR_OPTIMIZED_AWAY) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_OPTIMIZED_AWAY");
+            else if (i == VX_ERROR_NO_MEMORY) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NO_MEMORY");
+            else if (i == VX_ERROR_NO_RESOURCES) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NO_RESOURCES");
+            else if (i == VX_ERROR_NOT_COMPATIBLE) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NOT_COMPATIBLE");
+            else if (i == VX_ERROR_NOT_ALLOCATED) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NOT_ALLOCATED");
+            else if (i == VX_ERROR_NOT_SUFFICIENT) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NOT_SUFFICIENT");
+            else if (i == VX_ERROR_NOT_SUPPORTED) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NOT_SUPPORTED");
+            else if (i == VX_ERROR_NOT_IMPLEMENTED) strcpy(allVxStatusEnumsContainer + index, "VX_ERROR_NOT_IMPLEMENTED");
+            else if (i == VX_FAILURE) strcpy(allVxStatusEnumsContainer + index, "VX_FAILURE");
+            else if (i == VX_SUCCESS) strcpy(allVxStatusEnumsContainer + index, "VX_SUCCESS");
+            else strcpy(allVxStatusEnumsContainer + index, "Unknown error");
+            statusArray[i - VX_STATUS_MIN] = allVxStatusEnumsContainer + index;
+            index += strlen(allVxStatusEnumsContainer + index) + 1;
+	    }
+		firstTime = false;
+    }
+    return statusArray;
+}
+
+const char* getVxStatusDesc(int vxStatus)
+{
+    char** statusContainer = getAllVxStatusEnums();
+    static char invalidStatus[30];
+    if (vxStatus < VX_STATUS_MIN || vxStatus > VX_SUCCESS)
+    {
+        sprintf(invalidStatus, "%d - unknown error", vxStatus);
+        return invalidStatus;
+    }
+    return statusContainer[vxStatus - VX_STATUS_MIN];
+}
diff --git a/test_conformance/Networks/src/common.h b/test_conformance/Networks/src/common.h
new file mode 100644
index 0000000..16b9512
--- /dev/null
+++ b/test_conformance/Networks/src/common.h
@@ -0,0 +1,142 @@
+/** @file common.h
+ *  @brief 
+ *  This file contains the definitions of the generated utility functions and common structures
+ */
+#ifndef COMMON_H
+#define COMMON_H
+
+#include <VX/vx.h>
+
+/** The number of references to be created in the graph (generated automatically) */
+#define MAX_REFERENCE_OBJECTS 963
+
+#ifdef __cplusplus 
+extern "C" {
+#endif
+
+/** Defines a record that will be used to access and to release an OpenVX reference */ 
+typedef struct {
+    vx_enum type;
+    vx_reference   ref;
+    void*          pMem;
+    char*          uniqueRef;
+} ObjectRefType;
+
+/** Define a container of OpenVX references created in graph */
+typedef struct {
+    unsigned int   count;
+    ObjectRefType* pObjects;
+} ObjectRefContainerType;
+
+typedef struct _pooling_params
+{
+	vx_size pooling_size_x;
+	vx_size pooling_size_y;
+	vx_size pooling_padding_x;
+	vx_size pooling_padding_y;
+	vx_enum rounding;
+} pooling_params;
+
+
+typedef struct _activation_params
+{
+	vx_enum function;
+	vx_float32 a;
+	vx_float32 b;
+} activation_params;
+typedef struct _normalization_params
+{
+	vx_enum type;
+	vx_size normalization_size;
+	vx_float32 alpha;
+	vx_float32 beta;
+} normalization_params;
+/** @brief Releases all OpenVX references in graph.
+ *
+ *  @param pObjectContainer The pointer to object container.
+ *  @return Void.
+ */
+void ReleaseObjects(ObjectRefContainerType* pObjectContainer);
+
+/** @brief Add OpenVX reference to a container
+ *
+ *  @param pObjectContainer The pointer to object container.
+ *  @param ref The OpenVX reference to add
+ *  @param type The type of the OpenVX reference
+ *  @param uniqueRef Unique string ID of the reference (used to access the reference)
+ *  @return Void.
+ */
+void AddVXObject(ObjectRefContainerType* pObjectContainer, vx_reference ref, vx_enum type, const char* uniqueRef);
+
+/** @brief Add object to container
+ *
+ *  @param pObjectContainer The pointer to object container.
+ *  @param pMem The pointer to the object memory to add
+ *  @return Void.
+ */
+void AddObject(ObjectRefContainerType* pObjectContainer, void* pMem);
+
+/** @brief Get OpenVX reference by its unique ID
+ *
+ *  @param pObjectContainer The pointer to object container
+ *  @param uniqueRef Unique string ID of the reference
+ *  @return OpenVX reference.
+ */
+vx_reference GetObjectRef(ObjectRefContainerType* pObjectContainer, const char* uniqueRef);
+
+/** @brief Callback function for OpenVX log
+ *
+ *  @param context The OpenVX context
+ *  @param ref OpenVX reference that the log message is associated with
+ *  @param status vx_status associated with the log message
+ *  @param string The log messages
+ *  @return Void.
+ */
+void VXLog(vx_context context, vx_reference ref, vx_status status, const vx_char string[]);
+
+/** @brief Factory method to create a graph node
+ *
+ *  @param graph The OpenVX graph
+ *  @param kernel The kernel to instantiate
+ *  @param pObjectContainer The pointer to object container.
+ *  @param nodeName The node name
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @param node Pointer to the node to create
+ *  @return vx_status code.
+ */
+vx_status CreateNode(vx_graph graph, vx_kernel kernel, ObjectRefContainerType* pObjectContainer, const char* nodeName, char* filteredNodesList[], size_t filteredNodesCount, vx_node* node);
+
+/** @brief Assign node parameter
+ *
+ *  @param node The node to assign to
+ *  @param nodeName The unique name of the node
+ *  @param index The index of the port to assign to
+ *  @param nodeName The parameter to assign
+ *  @return vx_status code.
+*/ 
+vx_status AssignNodeParameter(vx_node node, const char* nodeName, vx_uint32 index, vx_reference parameter);
+
+
+/** @brief Write log message
+ *
+ *  This message might be modified to redirect all log messages to any destination.
+ *  By default, all messages are printed to stdout
+ *
+ *  @param format The format of the log message
+ *  @return Number of logged arguments
+ */
+int WriteLog(const char* format, ...);
+
+/** @brief Get enum description of vx_status
+ *
+ *  @param vxStatus vx_status value
+ *  @return enum description of the vxStatus
+ */
+const char* getVxStatusDesc(int vxStatus);
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* COMMON_H */
diff --git a/test_conformance/Networks/src/concerto.mak b/test_conformance/Networks/src/concerto.mak
new file mode 100644
index 0000000..19a8442
--- /dev/null
+++ b/test_conformance/Networks/src/concerto.mak
@@ -0,0 +1,26 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+ifneq (,$(findstring OPENVX_USE_NN_16,$(SYSDEFS)))
+
+_MODULE     := network
+include $(PRELUDE)
+TARGET      := network
+TARGETTYPE  := library
+CSOURCES    := $(call all-c-files)
+include $(FINALE)
+
+endif
diff --git a/test_conformance/Networks/src/graph.h b/test_conformance/Networks/src/graph.h
new file mode 100644
index 0000000..6ce06ee
--- /dev/null
+++ b/test_conformance/Networks/src/graph.h
@@ -0,0 +1,32 @@
+/** @file graph.h
+ *  @brief 
+ *  This file contains the definition of the generated graph factory function
+ */
+ 
+#ifndef GRAPH_H
+#define GRAPH_H
+
+#include <VX/vx.h>
+#include "common.h"
+
+#ifdef __cplusplus 
+extern "C" {
+#endif
+
+/** @brief Constructs OpenVX graph
+ *
+ *  @param context The OpenVX context
+ *  @param graph The OpenVX graph
+ *  @param pContainer The pointer to object container.
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @return vx_status code.
+ */
+vx_status _GraphFactoryAlexnet(vx_context context, vx_graph graph, ObjectRefContainerType* pContainer, char* filteredNodesList[], size_t filteredNodesCount);
+vx_status _GraphFactoryGooglenet(vx_context context, vx_graph graph, ObjectRefContainerType* pContainer, char* filteredNodesList[], size_t filteredNodesCount);
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* GRAPH_H */
diff --git a/test_conformance/Networks/src/graph_alexnet.c b/test_conformance/Networks/src/graph_alexnet.c
new file mode 100644
index 0000000..870a0c8
--- /dev/null
+++ b/test_conformance/Networks/src/graph_alexnet.c
@@ -0,0 +1,2220 @@
+/** @file graph.h
+ *  @brief 
+ *  This file contains the implementation of the generated graph factory function
+ */
+
+#ifdef OPENVX_USE_NN
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <VX/vx_khr_nn.h>
+#include "graph.h"
+
+
+
+/** @brief Constructs OpenVX graph and connects to the input/output references
+ *
+ *  @param context The OpenVX context
+ *  @param graph The OpenVX graph
+ *  @param pObjectContainer The pointer to object container.
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @return vx_status code.
+ */
+static vx_status Graph(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount, vx_tensor org_khronos_nn_extension_convolution_layer_0_p0, vx_tensor org_khronos_nn_extension_convolution_layer_0_p1, vx_tensor org_khronos_nn_extension_convolution_layer_0_p2, vx_scalar org_khronos_nn_extension_convolution_layer_0_p3, vx_scalar org_khronos_nn_extension_convolution_layer_0_p4, vx_scalar org_khronos_nn_extension_convolution_layer_0_p5, vx_scalar org_khronos_nn_extension_convolution_layer_0_p6, vx_scalar org_khronos_nn_extension_convolution_layer_0_p7, vx_tensor org_khronos_nn_extension_convolution_layer_0_p8);
+
+/** @brief Implements the OpenVX graph factory
+ *
+ *  @param context The OpenVX context
+ *  @param graph The OpenVX graph
+ *  @param pObjectContainer The pointer to object container.
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @return vx_status code.
+ */
+vx_status _GraphFactoryAlexnet(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount)
+{
+    vx_status status = VX_SUCCESS;
+
+    //
+    // Primitive Declarations
+    //
+
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p0;
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_0_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_0_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_0_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_0_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p8;
+
+    //
+    // Other Declarations
+    //
+
+    vx_size org_khronos_nn_extension_convolution_layer_0_p0Dimensions[4] = {227,227,3,1};
+    vx_size org_khronos_nn_extension_convolution_layer_0_p1Dimensions[4] = {11,11,3,96};
+    vx_size org_khronos_nn_extension_convolution_layer_0_p2Dimensions[1] = {96};
+    vx_size org_khronos_nn_extension_convolution_layer_0_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_0_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_0_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_0_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_0_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_0_p8Dimensions[4] = {55,55,96,1};
+
+    //
+    // Source Primitives Assignments
+    // ( source primitives are created here. These are used as inputs to Graph(), which will query the primitives for their respective attribute values )
+    //
+
+    org_khronos_nn_extension_convolution_layer_0_p0 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_0_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p0);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p0, VX_TYPE_TENSOR, "cnn_input");
+
+    org_khronos_nn_extension_convolution_layer_0_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p1, VX_TYPE_TENSOR, "conv1_weights");
+
+    org_khronos_nn_extension_convolution_layer_0_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_0_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p2, VX_TYPE_TENSOR, "conv1_bias");
+
+    org_khronos_nn_extension_convolution_layer_0_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_0_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p3, VX_TYPE_SCALAR, "conv1_3");
+
+    org_khronos_nn_extension_convolution_layer_0_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_0_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p4, VX_TYPE_SCALAR, "conv1_4");
+
+    org_khronos_nn_extension_convolution_layer_0_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_0_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p5, VX_TYPE_SCALAR, "conv1_5");
+
+    org_khronos_nn_extension_convolution_layer_0_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_0_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p6);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p6, VX_TYPE_SCALAR, "conv1_6");
+
+    org_khronos_nn_extension_convolution_layer_0_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_0_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p7);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p7, VX_TYPE_SCALAR, "conv1_7");
+
+    org_khronos_nn_extension_convolution_layer_0_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_0_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p8);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p8, VX_TYPE_TENSOR, "conv1_8");
+
+
+    //
+    // All nodes and primitives (except primitives associated with source nodes) of the graph are setup in Graph()
+    //
+
+    status = Graph(context, graph, pObjectContainer, filteredNodeList, filteredNodeCount, org_khronos_nn_extension_convolution_layer_0_p0, org_khronos_nn_extension_convolution_layer_0_p1, org_khronos_nn_extension_convolution_layer_0_p2, org_khronos_nn_extension_convolution_layer_0_p3, org_khronos_nn_extension_convolution_layer_0_p4, org_khronos_nn_extension_convolution_layer_0_p5, org_khronos_nn_extension_convolution_layer_0_p6, org_khronos_nn_extension_convolution_layer_0_p7, org_khronos_nn_extension_convolution_layer_0_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create graph workload [Graph()]\n");
+        return VX_FAILURE;
+    }
+
+    return status;
+}
+
+static vx_status Graph(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount, vx_tensor org_khronos_nn_extension_convolution_layer_0_p0, vx_tensor org_khronos_nn_extension_convolution_layer_0_p1, vx_tensor org_khronos_nn_extension_convolution_layer_0_p2, vx_scalar org_khronos_nn_extension_convolution_layer_0_p3, vx_scalar org_khronos_nn_extension_convolution_layer_0_p4, vx_scalar org_khronos_nn_extension_convolution_layer_0_p5, vx_scalar org_khronos_nn_extension_convolution_layer_0_p6, vx_scalar org_khronos_nn_extension_convolution_layer_0_p7, vx_tensor org_khronos_nn_extension_convolution_layer_0_p8)
+{
+    vx_status status = VX_SUCCESS;    
+
+    //
+    // Kernel Declarations
+    //
+
+    vx_kernel org_khronos_nn_extension_convolution_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_activation_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_normalization_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_pooling_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_fully_connected_layer_Kernel;
+    vx_kernel com_cnn_helpers_scalemddata_Kernel;
+    vx_kernel org_khronos_nn_extension_softmax_layer_Kernel;
+
+    //
+    // Node Declarations
+    //
+
+    vx_node org_khronos_nn_extension_convolution_layer_0;
+    vx_node org_khronos_nn_extension_activation_layer_0;
+    vx_node org_khronos_nn_extension_normalization_layer_0;
+    vx_node org_khronos_nn_extension_pooling_layer_0;
+    vx_node org_khronos_nn_extension_convolution_layer_2;
+    vx_node org_khronos_nn_extension_convolution_layer_1;
+    vx_node org_khronos_nn_extension_activation_layer_1;
+    vx_node org_khronos_nn_extension_normalization_layer_1;
+    vx_node org_khronos_nn_extension_pooling_layer_1;
+    vx_node org_khronos_nn_extension_convolution_layer_3;
+    vx_node org_khronos_nn_extension_activation_layer_2;
+    vx_node org_khronos_nn_extension_convolution_layer_5;
+    vx_node org_khronos_nn_extension_convolution_layer_4;
+    vx_node org_khronos_nn_extension_activation_layer_3;
+    vx_node org_khronos_nn_extension_convolution_layer_7;
+    vx_node org_khronos_nn_extension_convolution_layer_6;
+    vx_node org_khronos_nn_extension_activation_layer_4;
+    vx_node org_khronos_nn_extension_pooling_layer_2;
+    vx_node org_khronos_nn_extension_fully_connected_layer_0;
+    vx_node org_khronos_nn_extension_activation_layer_5;
+    vx_node org_khronos_nn_extension_fully_connected_layer_1;
+    vx_node org_khronos_nn_extension_activation_layer_6;
+    vx_node org_khronos_nn_extension_fully_connected_layer_2;
+    vx_node com_cnn_helpers_scalemddata_0;
+    vx_node org_khronos_nn_extension_softmax_layer_0;
+
+    //
+    // Primitive Declarations
+    //
+
+    vx_tensor outputAllocators_MergeTensor_2_p0;
+    vx_tensor outputAllocators_MergeTensor_1_p0;
+    vx_tensor outputAllocators_MergeTensor_0_p0;
+    vx_scalar org_khronos_nn_extension_activation_layer_0_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_0_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_0_p4;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p1;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p4;
+    vx_tensor org_khronos_nn_extension_normalization_layer_0_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_0_p7;
+    vx_tensor outputAllocators_SplitTensor_0_p1;
+    vx_tensor outputAllocators_SplitTensor_0_p2;
+    vx_tensor org_khronos_nn_extension_convolution_layer_2_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_2_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_1_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_1_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_1_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_1_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_1_p4;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p1;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p4;
+    vx_tensor org_khronos_nn_extension_normalization_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_1_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_3_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_3_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_3_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_2_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_2_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_2_p4;
+    vx_tensor outputAllocators_SplitTensor_1_p1;
+    vx_tensor outputAllocators_SplitTensor_1_p2;
+    vx_tensor org_khronos_nn_extension_convolution_layer_5_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_5_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_5_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_4_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_4_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_4_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_3_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_3_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_3_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_3_p4;
+    vx_tensor outputAllocators_SplitTensor_2_p1;
+    vx_tensor outputAllocators_SplitTensor_2_p2;
+    vx_tensor org_khronos_nn_extension_convolution_layer_7_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_7_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_7_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_6_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_6_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_6_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_4_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_4_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_4_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_4_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_2_p7;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_0_p1;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_0_p4;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_0_p5;
+    vx_scalar org_khronos_nn_extension_activation_layer_5_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_5_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_5_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_5_p4;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_1_p1;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_1_p4;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_activation_layer_6_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_6_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_6_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_6_p4;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_2_p1;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_2_p3;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_2_p4;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_2_p5;
+    vx_scalar com_cnn_helpers_scalemddata_0_p1;
+    vx_tensor com_cnn_helpers_scalemddata_0_p2;
+    vx_tensor org_khronos_nn_extension_softmax_layer_0_p1;
+
+    //
+    // Other Declarations
+    //
+
+    vx_size outputAllocators_MergeTensor_2_p0Dimensions[4] = {13,13,256,1};
+    vx_size outputAllocators_MergeTensor_1_p0Dimensions[4] = {13,13,384,1};
+    vx_size outputAllocators_MergeTensor_0_p0Dimensions[4] = {27,27,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_0_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_0_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_0_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_0_p4Dimensions[4] = {55,55,96,1};
+    vx_enum org_khronos_nn_extension_normalization_layer_0_scalar_p1 = VX_NN_NORMALIZATION_ACROSS_MAPS;
+    vx_size org_khronos_nn_extension_normalization_layer_0_scalar_p2 = 5;
+    vx_float32 org_khronos_nn_extension_normalization_layer_0_scalar_p3 = 0.0063999998;
+    vx_float32 org_khronos_nn_extension_normalization_layer_0_scalar_p4 = 0.750000;
+    vx_size org_khronos_nn_extension_normalization_layer_0_p5Dimensions[4] = {55,55,96,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_0_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_0_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_0_p7Dimensions[4] = {27,27,96,1};
+    vx_size org_khronos_nn_extension_pooling_layer_0_p7_view1_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_pooling_layer_0_p7_view1_view_end[4] = {27,27,48,1};
+    vx_size org_khronos_nn_extension_pooling_layer_0_p7_view2_view_start[4] = {0,0,48,0};
+    vx_size org_khronos_nn_extension_pooling_layer_0_p7_view2_view_end[4] = {27,27,96,1};
+    vx_size org_khronos_nn_extension_convolution_layer_2_p1Dimensions[4] = {5,5,48,128};
+    vx_size org_khronos_nn_extension_convolution_layer_2_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_2_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_2_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_2_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_2_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_2_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_2_p8_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_convolution_layer_2_p8_view_view_end[4] = {27,27,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_1_p1Dimensions[4] = {5,5,48,128};
+    vx_size org_khronos_nn_extension_convolution_layer_1_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_1_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_1_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_1_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_1_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_1_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_1_p8_view_view_start[4] = {0,0,128,0};
+    vx_size org_khronos_nn_extension_convolution_layer_1_p8_view_view_end[4] = {27,27,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_1_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_1_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_1_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_1_p4Dimensions[4] = {27,27,256,1};
+    vx_enum org_khronos_nn_extension_normalization_layer_1_scalar_p1 = VX_NN_NORMALIZATION_ACROSS_MAPS;
+    vx_size org_khronos_nn_extension_normalization_layer_1_scalar_p2 = 5;
+    vx_float32 org_khronos_nn_extension_normalization_layer_1_scalar_p3 = 0.0063999998;
+    vx_float32 org_khronos_nn_extension_normalization_layer_1_scalar_p4 = 0.750000;
+    vx_size org_khronos_nn_extension_normalization_layer_1_p5Dimensions[4] = {27,27,256,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_1_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_1_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_1_p7Dimensions[4] = {13,13,256,1};
+    vx_size org_khronos_nn_extension_convolution_layer_3_p1Dimensions[4] = {3,3,256,384};
+    vx_size org_khronos_nn_extension_convolution_layer_3_p2Dimensions[1] = {384};
+    vx_size org_khronos_nn_extension_convolution_layer_3_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_3_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_3_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_3_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_3_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_3_p8Dimensions[4] = {13,13,384,1};
+    vx_enum org_khronos_nn_extension_activation_layer_2_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_2_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_2_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_2_p4Dimensions[4] = {13,13,384,1};
+    vx_size org_khronos_nn_extension_activation_layer_2_p4_view1_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_2_p4_view1_view_end[4] = {13,13,192,1};
+    vx_size org_khronos_nn_extension_activation_layer_2_p4_view2_view_start[4] = {0,0,192,0};
+    vx_size org_khronos_nn_extension_activation_layer_2_p4_view2_view_end[4] = {13,13,384,1};
+    vx_size org_khronos_nn_extension_convolution_layer_5_p1Dimensions[4] = {3,3,192,192};
+    vx_size org_khronos_nn_extension_convolution_layer_5_p2Dimensions[1] = {192};
+    vx_size org_khronos_nn_extension_convolution_layer_5_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_5_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_5_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_5_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_5_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_5_p8_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_convolution_layer_5_p8_view_view_end[4] = {13,13,192,1};
+    vx_size org_khronos_nn_extension_convolution_layer_4_p1Dimensions[4] = {3,3,192,192};
+    vx_size org_khronos_nn_extension_convolution_layer_4_p2Dimensions[1] = {192};
+    vx_size org_khronos_nn_extension_convolution_layer_4_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_4_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_4_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_4_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_4_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_4_p8_view_view_start[4] = {0,0,192,0};
+    vx_size org_khronos_nn_extension_convolution_layer_4_p8_view_view_end[4] = {13,13,384,1};
+    vx_enum org_khronos_nn_extension_activation_layer_3_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_3_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_3_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_3_p4Dimensions[4] = {13,13,384,1};
+    vx_size org_khronos_nn_extension_activation_layer_3_p4_view1_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_3_p4_view1_view_end[4] = {13,13,192,1};
+    vx_size org_khronos_nn_extension_activation_layer_3_p4_view2_view_start[4] = {0,0,192,0};
+    vx_size org_khronos_nn_extension_activation_layer_3_p4_view2_view_end[4] = {13,13,384,1};
+    vx_size org_khronos_nn_extension_convolution_layer_7_p1Dimensions[4] = {3,3,192,128};
+    vx_size org_khronos_nn_extension_convolution_layer_7_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_7_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_7_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_7_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_7_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_7_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_7_p8_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_convolution_layer_7_p8_view_view_end[4] = {13,13,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_6_p1Dimensions[4] = {3,3,192,128};
+    vx_size org_khronos_nn_extension_convolution_layer_6_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_6_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_6_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_6_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_6_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_6_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_6_p8_view_view_start[4] = {0,0,128,0};
+    vx_size org_khronos_nn_extension_convolution_layer_6_p8_view_view_end[4] = {13,13,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_4_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_4_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_4_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_4_p4Dimensions[4] = {13,13,256,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_2_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_2_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_2_p7Dimensions[4] = {6,6,256,1};
+    vx_size org_khronos_nn_extension_fully_connected_layer_0_p1Dimensions[4] = {6,6,256,4096};
+    vx_size org_khronos_nn_extension_fully_connected_layer_0_p2Dimensions[1] = {4096};
+    vx_enum org_khronos_nn_extension_fully_connected_layer_0_scalar_p3 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_fully_connected_layer_0_scalar_p4 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_size org_khronos_nn_extension_fully_connected_layer_0_p5Dimensions[2] = {4096,1};
+    vx_enum org_khronos_nn_extension_activation_layer_5_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_5_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_5_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_5_p4Dimensions[2] = {4096,1};
+    vx_size org_khronos_nn_extension_fully_connected_layer_1_p1Dimensions[2] = {4096,4096};
+    vx_size org_khronos_nn_extension_fully_connected_layer_1_p2Dimensions[1] = {4096};
+    vx_enum org_khronos_nn_extension_fully_connected_layer_1_scalar_p3 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_fully_connected_layer_1_scalar_p4 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_size org_khronos_nn_extension_fully_connected_layer_1_p5Dimensions[2] = {4096,1};
+    vx_enum org_khronos_nn_extension_activation_layer_6_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_6_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_6_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_6_p4Dimensions[2] = {4096,1};
+    vx_size org_khronos_nn_extension_fully_connected_layer_2_p1Dimensions[2] = {4096,1000};
+    vx_size org_khronos_nn_extension_fully_connected_layer_2_p2Dimensions[1] = {1000};
+    vx_enum org_khronos_nn_extension_fully_connected_layer_2_scalar_p3 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_fully_connected_layer_2_scalar_p4 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_size org_khronos_nn_extension_fully_connected_layer_2_p5Dimensions[2] = {1000,1};
+    vx_float32 com_cnn_helpers_scalemddata_0_scalar_p1 = 8;
+    vx_size com_cnn_helpers_scalemddata_0_p2Dimensions[2] = {1000,1};
+    vx_size org_khronos_nn_extension_softmax_layer_0_p1Dimensions[2] = {1000,1};
+
+
+	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// Manual types
+	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	pooling_params pool_params = { 3, 3, 0, 0, VX_NN_DS_SIZE_ROUNDING_FLOOR };
+	activation_params relu_params = { VX_NN_ACTIVATION_RELU, 0, 0 };
+	vx_nn_convolution_params_t conv_params[3] = { { 0, 0, VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_ZERO, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0 },
+	{ 2, 2, VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_ZERO, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0 },
+	{ 1, 1, VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_ZERO, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0 } };
+	normalization_params norm_params = { VX_NN_NORMALIZATION_ACROSS_MAPS, 5, 0.0001f * 64, 0.75f };
+
+	vx_enum overflowPolicy = VX_CONVERT_POLICY_SATURATE;
+	vx_scalar overflowPolicy_scalar = vxCreateScalar(context, VX_TYPE_ENUM, &overflowPolicy);
+    status = vxGetStatus((vx_reference)overflowPolicy_scalar);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter overflowPolicy_scalar (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)overflowPolicy_scalar, VX_TYPE_SCALAR, "overflowPolicy_scalar");
+	vx_enum roundingPolicy = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+	vx_scalar roundingPolicy_scalar = vxCreateScalar(context, VX_TYPE_ENUM, &roundingPolicy);
+    status = vxGetStatus((vx_reference)roundingPolicy_scalar);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter roundingPolicy_scalar (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)roundingPolicy_scalar, VX_TYPE_SCALAR, "roundingPolicy_scalar");
+
+
+
+    //
+    // Primitive Assignments
+    //
+    outputAllocators_MergeTensor_2_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_2_p0Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_2_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_2_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_2_p0, VX_TYPE_TENSOR, "relu5_0");
+
+    outputAllocators_MergeTensor_1_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_1_p0Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_1_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_1_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_1_p0, VX_TYPE_TENSOR, "relu4_0");
+
+    outputAllocators_MergeTensor_0_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_0_p0Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_0_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_0_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_0_p0, VX_TYPE_TENSOR, "relu2_0");
+
+    org_khronos_nn_extension_activation_layer_0_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_0_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p1, VX_TYPE_SCALAR, "relu1_1");
+
+    org_khronos_nn_extension_activation_layer_0_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_0_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p2, VX_TYPE_SCALAR, "relu1_2");
+
+    org_khronos_nn_extension_activation_layer_0_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_0_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p3, VX_TYPE_SCALAR, "relu1_2");
+
+    org_khronos_nn_extension_activation_layer_0_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_0_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p4, VX_TYPE_TENSOR, "relu1_4");
+
+    org_khronos_nn_extension_normalization_layer_0_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p1, VX_TYPE_SCALAR, "norm1_1");
+
+    org_khronos_nn_extension_normalization_layer_0_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p2, VX_TYPE_SCALAR, "norm1_2");
+
+    org_khronos_nn_extension_normalization_layer_0_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p3, VX_TYPE_SCALAR, "norm1_3");
+
+    org_khronos_nn_extension_normalization_layer_0_p4 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p4, VX_TYPE_SCALAR, "norm1_4");
+
+    org_khronos_nn_extension_normalization_layer_0_p5 = vxCreateTensor(context, 4, org_khronos_nn_extension_normalization_layer_0_p5Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p5, VX_TYPE_TENSOR, "norm1_5");
+
+    org_khronos_nn_extension_pooling_layer_0_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p1, VX_TYPE_SCALAR, "pool1_1");
+
+    org_khronos_nn_extension_pooling_layer_0_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p2, VX_TYPE_SCALAR, "pool1_2");
+
+    org_khronos_nn_extension_pooling_layer_0_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p3, VX_TYPE_SCALAR, "pool1_3");
+
+    org_khronos_nn_extension_pooling_layer_0_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p4, VX_TYPE_SCALAR, "pool1_4");
+
+    org_khronos_nn_extension_pooling_layer_0_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p5, VX_TYPE_SCALAR, "pool1_5");
+
+    org_khronos_nn_extension_pooling_layer_0_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p6, VX_TYPE_SCALAR, "pool1_6");
+
+    org_khronos_nn_extension_pooling_layer_0_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_0_p7Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p7, VX_TYPE_TENSOR, "pool1_7");
+
+    outputAllocators_SplitTensor_0_p1 = vxCreateTensorFromView(org_khronos_nn_extension_pooling_layer_0_p7, 4, org_khronos_nn_extension_pooling_layer_0_p7_view1_view_start, org_khronos_nn_extension_pooling_layer_0_p7_view1_view_end);    
+    status = vxGetStatus((vx_reference)outputAllocators_SplitTensor_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_SplitTensor_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_SplitTensor_0_p1, VX_TYPE_TENSOR, "conv2_0_0");
+
+    outputAllocators_SplitTensor_0_p2 = vxCreateTensorFromView(org_khronos_nn_extension_pooling_layer_0_p7, 4, org_khronos_nn_extension_pooling_layer_0_p7_view2_view_start, org_khronos_nn_extension_pooling_layer_0_p7_view2_view_end);    
+    status = vxGetStatus((vx_reference)outputAllocators_SplitTensor_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_SplitTensor_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_SplitTensor_0_p2, VX_TYPE_TENSOR, "conv2_1_0");
+
+    org_khronos_nn_extension_convolution_layer_2_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_2_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p1, VX_TYPE_TENSOR, "conv2_0_weights");
+
+    org_khronos_nn_extension_convolution_layer_2_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_2_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p2, VX_TYPE_TENSOR, "conv2_0_bias");
+
+    org_khronos_nn_extension_convolution_layer_2_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p3, VX_TYPE_SCALAR, "conv2_0_3");
+
+    org_khronos_nn_extension_convolution_layer_2_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p4, VX_TYPE_SCALAR, "conv2_0_4");
+
+    org_khronos_nn_extension_convolution_layer_2_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p5, VX_TYPE_SCALAR, "conv2_0_5");
+
+    org_khronos_nn_extension_convolution_layer_2_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p6, VX_TYPE_SCALAR, "conv2_0_6");
+
+    org_khronos_nn_extension_convolution_layer_2_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p7, VX_TYPE_SCALAR, "conv2_0_7");
+
+    org_khronos_nn_extension_convolution_layer_2_p8 = vxCreateTensorFromView(outputAllocators_MergeTensor_0_p0, 4, org_khronos_nn_extension_convolution_layer_2_p8_view_view_start, org_khronos_nn_extension_convolution_layer_2_p8_view_view_end);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p8, VX_TYPE_TENSOR, "conv2_0_8");
+
+    org_khronos_nn_extension_convolution_layer_1_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_1_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p1, VX_TYPE_TENSOR, "conv2_1_weights");
+
+    org_khronos_nn_extension_convolution_layer_1_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_1_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p2, VX_TYPE_TENSOR, "conv2_1_bias");
+
+    org_khronos_nn_extension_convolution_layer_1_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p3, VX_TYPE_SCALAR, "conv2_1_3");
+
+    org_khronos_nn_extension_convolution_layer_1_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p4, VX_TYPE_SCALAR, "conv2_1_4");
+
+    org_khronos_nn_extension_convolution_layer_1_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p5, VX_TYPE_SCALAR, "conv2_1_5");
+
+    org_khronos_nn_extension_convolution_layer_1_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p6, VX_TYPE_SCALAR, "conv2_1_6");
+
+    org_khronos_nn_extension_convolution_layer_1_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p7, VX_TYPE_SCALAR, "conv2_1_7");
+
+    org_khronos_nn_extension_convolution_layer_1_p8 = vxCreateTensorFromView(outputAllocators_MergeTensor_0_p0, 4, org_khronos_nn_extension_convolution_layer_1_p8_view_view_start, org_khronos_nn_extension_convolution_layer_1_p8_view_view_end);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p8, VX_TYPE_TENSOR, "conv2_1_8");
+
+    org_khronos_nn_extension_activation_layer_1_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_1_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p1, VX_TYPE_SCALAR, "relu2_1");
+
+    org_khronos_nn_extension_activation_layer_1_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_1_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p2, VX_TYPE_SCALAR, "relu2_2");
+
+    org_khronos_nn_extension_activation_layer_1_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_1_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p3, VX_TYPE_SCALAR, "relu2_2");
+
+    org_khronos_nn_extension_activation_layer_1_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_1_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p4, VX_TYPE_TENSOR, "relu2_4");
+
+    org_khronos_nn_extension_normalization_layer_1_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p1, VX_TYPE_SCALAR, "norm2_1");
+
+    org_khronos_nn_extension_normalization_layer_1_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p2, VX_TYPE_SCALAR, "norm2_2");
+
+    org_khronos_nn_extension_normalization_layer_1_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p3, VX_TYPE_SCALAR, "norm2_3");
+
+    org_khronos_nn_extension_normalization_layer_1_p4 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p4, VX_TYPE_SCALAR, "norm2_4");
+
+    org_khronos_nn_extension_normalization_layer_1_p5 = vxCreateTensor(context, 4, org_khronos_nn_extension_normalization_layer_1_p5Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p5, VX_TYPE_TENSOR, "norm2_5");
+
+    org_khronos_nn_extension_pooling_layer_1_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p1, VX_TYPE_SCALAR, "pool2_1");
+
+    org_khronos_nn_extension_pooling_layer_1_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p2, VX_TYPE_SCALAR, "pool2_2");
+
+    org_khronos_nn_extension_pooling_layer_1_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p3, VX_TYPE_SCALAR, "pool2_3");
+
+    org_khronos_nn_extension_pooling_layer_1_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p4, VX_TYPE_SCALAR, "pool2_4");
+
+    org_khronos_nn_extension_pooling_layer_1_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p5, VX_TYPE_SCALAR, "pool2_5");
+
+    org_khronos_nn_extension_pooling_layer_1_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p6, VX_TYPE_SCALAR, "pool2_6");
+
+    org_khronos_nn_extension_pooling_layer_1_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_1_p7Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7, VX_TYPE_TENSOR, "pool2_7");
+
+    org_khronos_nn_extension_convolution_layer_3_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_3_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p1, VX_TYPE_TENSOR, "conv3_weights");
+
+    org_khronos_nn_extension_convolution_layer_3_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_3_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p2, VX_TYPE_TENSOR, "conv3_bias");
+
+    org_khronos_nn_extension_convolution_layer_3_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p3, VX_TYPE_SCALAR, "conv3_3");
+
+    org_khronos_nn_extension_convolution_layer_3_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p4, VX_TYPE_SCALAR, "conv3_4");
+
+    org_khronos_nn_extension_convolution_layer_3_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p5, VX_TYPE_SCALAR, "conv3_5");
+
+    org_khronos_nn_extension_convolution_layer_3_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p6, VX_TYPE_SCALAR, "conv3_6");
+
+    org_khronos_nn_extension_convolution_layer_3_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p7, VX_TYPE_SCALAR, "conv3_7");
+
+    org_khronos_nn_extension_convolution_layer_3_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_3_p8Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p8, VX_TYPE_TENSOR, "conv3_8");
+
+    org_khronos_nn_extension_activation_layer_2_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_2_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p1, VX_TYPE_SCALAR, "relu3_1");
+
+    org_khronos_nn_extension_activation_layer_2_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_2_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p2, VX_TYPE_SCALAR, "relu3_2");
+
+    org_khronos_nn_extension_activation_layer_2_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_2_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p3, VX_TYPE_SCALAR, "relu3_2");
+
+    org_khronos_nn_extension_activation_layer_2_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_2_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p4, VX_TYPE_TENSOR, "relu3_4");
+
+    outputAllocators_SplitTensor_1_p1 = vxCreateTensorFromView(org_khronos_nn_extension_activation_layer_2_p4, 4, org_khronos_nn_extension_activation_layer_2_p4_view1_view_start, org_khronos_nn_extension_activation_layer_2_p4_view1_view_end);    
+    status = vxGetStatus((vx_reference)outputAllocators_SplitTensor_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_SplitTensor_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_SplitTensor_1_p1, VX_TYPE_TENSOR, "conv4_0_0");
+
+    outputAllocators_SplitTensor_1_p2 = vxCreateTensorFromView(org_khronos_nn_extension_activation_layer_2_p4, 4, org_khronos_nn_extension_activation_layer_2_p4_view2_view_start, org_khronos_nn_extension_activation_layer_2_p4_view2_view_end);    
+    status = vxGetStatus((vx_reference)outputAllocators_SplitTensor_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_SplitTensor_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_SplitTensor_1_p2, VX_TYPE_TENSOR, "conv4_1_0");
+
+    org_khronos_nn_extension_convolution_layer_5_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_5_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p1, VX_TYPE_TENSOR, "conv4_0_weights");
+
+    org_khronos_nn_extension_convolution_layer_5_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_5_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p2, VX_TYPE_TENSOR, "conv4_0_bias");
+
+    org_khronos_nn_extension_convolution_layer_5_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p3, VX_TYPE_SCALAR, "conv4_0_3");
+
+    org_khronos_nn_extension_convolution_layer_5_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p4, VX_TYPE_SCALAR, "conv4_0_4");
+
+    org_khronos_nn_extension_convolution_layer_5_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p5, VX_TYPE_SCALAR, "conv4_0_5");
+
+    org_khronos_nn_extension_convolution_layer_5_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p6, VX_TYPE_SCALAR, "conv4_0_6");
+
+    org_khronos_nn_extension_convolution_layer_5_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p7, VX_TYPE_SCALAR, "conv4_0_7");
+
+    org_khronos_nn_extension_convolution_layer_5_p8 = vxCreateTensorFromView(outputAllocators_MergeTensor_1_p0, 4, org_khronos_nn_extension_convolution_layer_5_p8_view_view_start, org_khronos_nn_extension_convolution_layer_5_p8_view_view_end);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p8, VX_TYPE_TENSOR, "conv4_0_8");
+
+    org_khronos_nn_extension_convolution_layer_4_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_4_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p1, VX_TYPE_TENSOR, "conv4_1_weights");
+
+    org_khronos_nn_extension_convolution_layer_4_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_4_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p2, VX_TYPE_TENSOR, "conv4_1_bias");
+
+    org_khronos_nn_extension_convolution_layer_4_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p3, VX_TYPE_SCALAR, "conv4_1_3");
+
+    org_khronos_nn_extension_convolution_layer_4_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p4, VX_TYPE_SCALAR, "conv4_1_4");
+
+    org_khronos_nn_extension_convolution_layer_4_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p5, VX_TYPE_SCALAR, "conv4_1_5");
+
+    org_khronos_nn_extension_convolution_layer_4_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p6, VX_TYPE_SCALAR, "conv4_1_6");
+
+    org_khronos_nn_extension_convolution_layer_4_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p7, VX_TYPE_SCALAR, "conv4_1_7");
+
+    org_khronos_nn_extension_convolution_layer_4_p8 = vxCreateTensorFromView(outputAllocators_MergeTensor_1_p0, 4, org_khronos_nn_extension_convolution_layer_4_p8_view_view_start, org_khronos_nn_extension_convolution_layer_4_p8_view_view_end);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p8, VX_TYPE_TENSOR, "conv4_1_8");
+
+    org_khronos_nn_extension_activation_layer_3_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_3_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p1, VX_TYPE_SCALAR, "relu4_1");
+
+    org_khronos_nn_extension_activation_layer_3_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_3_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p2, VX_TYPE_SCALAR, "relu4_2");
+
+    org_khronos_nn_extension_activation_layer_3_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_3_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p3, VX_TYPE_SCALAR, "relu4_2");
+
+    org_khronos_nn_extension_activation_layer_3_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_3_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p4, VX_TYPE_TENSOR, "relu4_4");
+
+    outputAllocators_SplitTensor_2_p1 = vxCreateTensorFromView(org_khronos_nn_extension_activation_layer_3_p4, 4, org_khronos_nn_extension_activation_layer_3_p4_view1_view_start, org_khronos_nn_extension_activation_layer_3_p4_view1_view_end);    
+    status = vxGetStatus((vx_reference)outputAllocators_SplitTensor_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_SplitTensor_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_SplitTensor_2_p1, VX_TYPE_TENSOR, "conv5_0_0");
+
+    outputAllocators_SplitTensor_2_p2 = vxCreateTensorFromView(org_khronos_nn_extension_activation_layer_3_p4, 4, org_khronos_nn_extension_activation_layer_3_p4_view2_view_start, org_khronos_nn_extension_activation_layer_3_p4_view2_view_end);    
+    status = vxGetStatus((vx_reference)outputAllocators_SplitTensor_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_SplitTensor_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_SplitTensor_2_p2, VX_TYPE_TENSOR, "conv5_1_0");
+
+    org_khronos_nn_extension_convolution_layer_7_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_7_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p1, VX_TYPE_TENSOR, "conv5_0_weights");
+
+    org_khronos_nn_extension_convolution_layer_7_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_7_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p2, VX_TYPE_TENSOR, "conv5_0_bias");
+
+    org_khronos_nn_extension_convolution_layer_7_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p3, VX_TYPE_SCALAR, "conv5_0_3");
+
+    org_khronos_nn_extension_convolution_layer_7_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p4, VX_TYPE_SCALAR, "conv5_0_4");
+
+    org_khronos_nn_extension_convolution_layer_7_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p5, VX_TYPE_SCALAR, "conv5_0_5");
+
+    org_khronos_nn_extension_convolution_layer_7_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p6, VX_TYPE_SCALAR, "conv5_0_6");
+
+    org_khronos_nn_extension_convolution_layer_7_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p7, VX_TYPE_SCALAR, "conv5_0_7");
+
+    org_khronos_nn_extension_convolution_layer_7_p8 = vxCreateTensorFromView(outputAllocators_MergeTensor_2_p0, 4, org_khronos_nn_extension_convolution_layer_7_p8_view_view_start, org_khronos_nn_extension_convolution_layer_7_p8_view_view_end);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p8, VX_TYPE_TENSOR, "conv5_0_8");
+
+    org_khronos_nn_extension_convolution_layer_6_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_6_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p1, VX_TYPE_TENSOR, "conv5_1_weights");
+
+    org_khronos_nn_extension_convolution_layer_6_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_6_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p2, VX_TYPE_TENSOR, "conv5_1_bias");
+
+    org_khronos_nn_extension_convolution_layer_6_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p3, VX_TYPE_SCALAR, "conv5_1_3");
+
+    org_khronos_nn_extension_convolution_layer_6_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p4, VX_TYPE_SCALAR, "conv5_1_4");
+
+    org_khronos_nn_extension_convolution_layer_6_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p5, VX_TYPE_SCALAR, "conv5_1_5");
+
+    org_khronos_nn_extension_convolution_layer_6_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p6, VX_TYPE_SCALAR, "conv5_1_6");
+
+    org_khronos_nn_extension_convolution_layer_6_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p7);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p7, VX_TYPE_SCALAR, "conv5_1_7");
+
+    org_khronos_nn_extension_convolution_layer_6_p8 = vxCreateTensorFromView(outputAllocators_MergeTensor_2_p0, 4, org_khronos_nn_extension_convolution_layer_6_p8_view_view_start, org_khronos_nn_extension_convolution_layer_6_p8_view_view_end);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p8, VX_TYPE_TENSOR, "conv5_1_8");
+
+    org_khronos_nn_extension_activation_layer_4_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_4_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p1, VX_TYPE_SCALAR, "relu5_1");
+
+    org_khronos_nn_extension_activation_layer_4_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_4_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p2, VX_TYPE_SCALAR, "relu5_2");
+
+    org_khronos_nn_extension_activation_layer_4_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_4_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p3, VX_TYPE_SCALAR, "relu5_2");
+
+    org_khronos_nn_extension_activation_layer_4_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_4_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p4, VX_TYPE_TENSOR, "relu5_4");
+
+    org_khronos_nn_extension_pooling_layer_2_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p1, VX_TYPE_SCALAR, "pool5_1");
+
+    org_khronos_nn_extension_pooling_layer_2_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p2, VX_TYPE_SCALAR, "pool5_2");
+
+    org_khronos_nn_extension_pooling_layer_2_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p3, VX_TYPE_SCALAR, "pool5_3");
+
+    org_khronos_nn_extension_pooling_layer_2_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p4, VX_TYPE_SCALAR, "pool5_4");
+
+    org_khronos_nn_extension_pooling_layer_2_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p5);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p5, VX_TYPE_SCALAR, "pool5_5");
+
+    org_khronos_nn_extension_pooling_layer_2_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p6);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p6, VX_TYPE_SCALAR, "pool5_6");
+
+    org_khronos_nn_extension_pooling_layer_2_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_2_p7Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p7, VX_TYPE_TENSOR, "pool5_7");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_fully_connected_layer_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p1, VX_TYPE_TENSOR, "fc6_weights");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_fully_connected_layer_0_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p2, VX_TYPE_TENSOR, "fc6_bias");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p3 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_0_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p3, VX_TYPE_SCALAR, "fc6_3");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p4 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_0_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p4, VX_TYPE_SCALAR, "fc6_4");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p5 = vxCreateTensor(context, 2, org_khronos_nn_extension_fully_connected_layer_0_p5Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p5, VX_TYPE_TENSOR, "fc6_5");
+
+    org_khronos_nn_extension_activation_layer_5_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_5_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p1, VX_TYPE_SCALAR, "relu6_1");
+
+    org_khronos_nn_extension_activation_layer_5_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_5_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p2, VX_TYPE_SCALAR, "relu6_2");
+
+    org_khronos_nn_extension_activation_layer_5_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_5_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p3, VX_TYPE_SCALAR, "relu6_2");
+
+    org_khronos_nn_extension_activation_layer_5_p4 = vxCreateTensor(context, 2, org_khronos_nn_extension_activation_layer_5_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p4, VX_TYPE_TENSOR, "relu6_4");
+
+    org_khronos_nn_extension_fully_connected_layer_1_p1 = vxCreateTensor(context, 2, org_khronos_nn_extension_fully_connected_layer_1_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p1, VX_TYPE_TENSOR, "fc7_weights");
+
+    org_khronos_nn_extension_fully_connected_layer_1_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_fully_connected_layer_1_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p2, VX_TYPE_TENSOR, "fc7_bias");
+
+    org_khronos_nn_extension_fully_connected_layer_1_p3 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_1_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p3, VX_TYPE_SCALAR, "fc7_3");
+
+    org_khronos_nn_extension_fully_connected_layer_1_p4 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_1_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p4, VX_TYPE_SCALAR, "fc7_4");
+
+    org_khronos_nn_extension_fully_connected_layer_1_p5 = vxCreateTensor(context, 2, org_khronos_nn_extension_fully_connected_layer_1_p5Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_1_p5, VX_TYPE_TENSOR, "fc7_5");
+
+    org_khronos_nn_extension_activation_layer_6_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_6_scalar_p1);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p1, VX_TYPE_SCALAR, "relu7_1");
+
+    org_khronos_nn_extension_activation_layer_6_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_6_scalar_p2);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p2, VX_TYPE_SCALAR, "relu7_2");
+
+    org_khronos_nn_extension_activation_layer_6_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_6_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p3, VX_TYPE_SCALAR, "relu7_2");
+
+    org_khronos_nn_extension_activation_layer_6_p4 = vxCreateTensor(context, 2, org_khronos_nn_extension_activation_layer_6_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p4, VX_TYPE_TENSOR, "relu7_4");
+
+    org_khronos_nn_extension_fully_connected_layer_2_p1 = vxCreateTensor(context, 2, org_khronos_nn_extension_fully_connected_layer_2_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p1, VX_TYPE_TENSOR, "fc8_weights");
+
+    org_khronos_nn_extension_fully_connected_layer_2_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_fully_connected_layer_2_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p2, VX_TYPE_TENSOR, "fc8_bias");
+
+    org_khronos_nn_extension_fully_connected_layer_2_p3 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_2_scalar_p3);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p3, VX_TYPE_SCALAR, "fc8_3");
+
+    org_khronos_nn_extension_fully_connected_layer_2_p4 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_2_scalar_p4);    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p4, VX_TYPE_SCALAR, "fc8_4");
+
+    org_khronos_nn_extension_fully_connected_layer_2_p5 = vxCreateTensor(context, 2, org_khronos_nn_extension_fully_connected_layer_2_p5Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_2_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_2_p5, VX_TYPE_TENSOR, "fc8_5");
+
+    com_cnn_helpers_scalemddata_0_p1 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&com_cnn_helpers_scalemddata_0_scalar_p1);
+    status = vxGetStatus((vx_reference)com_cnn_helpers_scalemddata_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter com_cnn_helpers_scalemddata_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)com_cnn_helpers_scalemddata_0_p1, VX_TYPE_SCALAR, "Power0_1");
+
+    com_cnn_helpers_scalemddata_0_p2 = vxCreateTensor(context, 2, com_cnn_helpers_scalemddata_0_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)com_cnn_helpers_scalemddata_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter com_cnn_helpers_scalemddata_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)com_cnn_helpers_scalemddata_0_p2, VX_TYPE_TENSOR, "Power0_2");
+
+    org_khronos_nn_extension_softmax_layer_0_p1 = vxCreateTensor(context, 2, org_khronos_nn_extension_softmax_layer_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_softmax_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_softmax_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_softmax_layer_0_p1, VX_TYPE_TENSOR, "cnn_output");
+
+
+	//
+	// Node Assignments
+	//
+	WriteLog("Adding graph nodes...\n");
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_0);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_0 = vxConvolutionLayer(graph, org_khronos_nn_extension_convolution_layer_0_p0, org_khronos_nn_extension_convolution_layer_0_p1,
+		org_khronos_nn_extension_convolution_layer_0_p2, &conv_params[0], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_0_p8);
+	status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_0\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_0");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_0);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_0 = vxActivationLayer(graph, org_khronos_nn_extension_convolution_layer_0_p8, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_0_p4);
+	status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_0\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_0");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_normalization_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_normalization_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_normalization_layer_0);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_normalization_layer_0 = vxNormalizationLayer(graph, org_khronos_nn_extension_activation_layer_0_p4, norm_params.type, norm_params.normalization_size, norm_params.alpha, norm_params.beta,
+		org_khronos_nn_extension_normalization_layer_0_p5);
+	status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_normalization_layer_0\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_normalization_layer_0");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_0);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_pooling_layer_0 = vxPoolingLayer(graph, org_khronos_nn_extension_normalization_layer_0_p5, VX_NN_POOLING_MAX, pool_params.pooling_size_x, pool_params.pooling_size_y, pool_params.pooling_padding_x,
+		pool_params.pooling_padding_y, pool_params.rounding, org_khronos_nn_extension_pooling_layer_0_p7);
+	status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_pooling_layer_0\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_pooling_layer_0");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_2);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_2 = vxConvolutionLayer(graph, outputAllocators_SplitTensor_0_p1, org_khronos_nn_extension_convolution_layer_2_p1, org_khronos_nn_extension_convolution_layer_2_p2,
+		&conv_params[1], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_2_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_2\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_2");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_1);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_1 = vxConvolutionLayer(graph, outputAllocators_SplitTensor_0_p2, org_khronos_nn_extension_convolution_layer_1_p1, org_khronos_nn_extension_convolution_layer_1_p2,
+		&conv_params[1], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_1_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_1\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_1");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_1);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_1 = vxActivationLayer(graph, outputAllocators_MergeTensor_0_p0, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_1_p4);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_1\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_1");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_normalization_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_normalization_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_normalization_layer_1);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_normalization_layer_1 = vxNormalizationLayer(graph, org_khronos_nn_extension_activation_layer_1_p4, norm_params.type, norm_params.normalization_size, norm_params.alpha,
+		norm_params.beta, org_khronos_nn_extension_normalization_layer_1_p5);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_normalization_layer_1\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1, VX_TYPE_NODE, "org_khronos_nn_extension_normalization_layer_1");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_1);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_pooling_layer_1 = vxPoolingLayer(graph, org_khronos_nn_extension_normalization_layer_1_p5, VX_NN_POOLING_MAX, pool_params.pooling_size_x, pool_params.pooling_size_y, pool_params.pooling_padding_x,
+		pool_params.pooling_padding_y, pool_params.rounding, org_khronos_nn_extension_pooling_layer_1_p7);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_pooling_layer_1\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1, VX_TYPE_NODE, "org_khronos_nn_extension_pooling_layer_1");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_3", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_3);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_3 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_1_p7, org_khronos_nn_extension_convolution_layer_3_p1, org_khronos_nn_extension_convolution_layer_3_p2,
+		&conv_params[2], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_3_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_3\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_3");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_2);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_2 = vxActivationLayer(graph, org_khronos_nn_extension_convolution_layer_3_p8, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_2_p4);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_2\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_2");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_5", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_5);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_5 = vxConvolutionLayer(graph, outputAllocators_SplitTensor_1_p1, org_khronos_nn_extension_convolution_layer_5_p1, org_khronos_nn_extension_convolution_layer_5_p2,
+		&conv_params[2], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_5_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_5\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_5");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_4", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_4);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_4 = vxConvolutionLayer(graph, outputAllocators_SplitTensor_1_p2, org_khronos_nn_extension_convolution_layer_4_p1, org_khronos_nn_extension_convolution_layer_4_p2,
+		&conv_params[2], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_4_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_4\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_4");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_3", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_3);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_3 = vxActivationLayer(graph, outputAllocators_MergeTensor_1_p0, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_3_p4);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_3\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_3");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_7", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_7);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_7 = vxConvolutionLayer(graph, outputAllocators_SplitTensor_2_p1, org_khronos_nn_extension_convolution_layer_7_p1, org_khronos_nn_extension_convolution_layer_7_p2,
+		&conv_params[2], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_7_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_7\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_7");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_6", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_6);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_convolution_layer_6 = vxConvolutionLayer(graph, outputAllocators_SplitTensor_2_p2, org_khronos_nn_extension_convolution_layer_6_p1, org_khronos_nn_extension_convolution_layer_6_p2,
+		&conv_params[2], sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_6_p8);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_6\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_6");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_4", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_4);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_4 = vxActivationLayer(graph, outputAllocators_MergeTensor_2_p0, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_4_p4);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_4\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_4");
+
+
+	//status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_2);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_pooling_layer_2 = vxPoolingLayer(graph, org_khronos_nn_extension_activation_layer_4_p4, VX_NN_POOLING_MAX, pool_params.pooling_size_x, pool_params.pooling_size_y, pool_params.pooling_padding_x,
+		pool_params.pooling_padding_y, pool_params.rounding, org_khronos_nn_extension_pooling_layer_2_p7);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_pooling_layer_2\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2, VX_TYPE_NODE, "org_khronos_nn_extension_pooling_layer_2");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_fully_connected_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_fully_connected_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_fully_connected_layer_0);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_fully_connected_layer_0 = vxFullyConnectedLayer(graph, org_khronos_nn_extension_pooling_layer_2_p7, org_khronos_nn_extension_fully_connected_layer_0_p1,
+		org_khronos_nn_extension_fully_connected_layer_0_p2, VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_ZERO, org_khronos_nn_extension_fully_connected_layer_0_p5);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_fully_connected_layer_0\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_fully_connected_layer_0");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_5", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_5);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_5 = vxActivationLayer(graph, org_khronos_nn_extension_fully_connected_layer_0_p5, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_5_p4);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_5\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_5");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_fully_connected_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_fully_connected_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_fully_connected_layer_1);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_fully_connected_layer_1 = vxFullyConnectedLayer(graph, org_khronos_nn_extension_activation_layer_5_p4, org_khronos_nn_extension_fully_connected_layer_1_p1,
+		org_khronos_nn_extension_fully_connected_layer_1_p2, VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_ZERO, org_khronos_nn_extension_fully_connected_layer_1_p5);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_fully_connected_layer_1\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_1, VX_TYPE_NODE, "org_khronos_nn_extension_fully_connected_layer_1");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_6", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_6);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_activation_layer_6 = vxActivationLayer(graph, org_khronos_nn_extension_fully_connected_layer_1_p5, relu_params.function, relu_params.a, relu_params.b, org_khronos_nn_extension_activation_layer_6_p4);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_activation_layer_5\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6, VX_TYPE_NODE, "org_khronos_nn_extension_activation_layer_6");
+
+	//status = CreateNode(graph, org_khronos_nn_extension_fully_connected_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_fully_connected_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_fully_connected_layer_2);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_fully_connected_layer_2 = vxFullyConnectedLayer(graph, org_khronos_nn_extension_activation_layer_6_p4, org_khronos_nn_extension_fully_connected_layer_2_p1,
+		org_khronos_nn_extension_fully_connected_layer_2_p2, VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_ZERO, org_khronos_nn_extension_fully_connected_layer_2_p5);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_fully_connected_layer_2\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_2, VX_TYPE_NODE, "org_khronos_nn_extension_fully_connected_layer_2");
+
+
+	{
+
+		const vx_size unit_tensor_view_start[2] = { 0, 0 };
+		const vx_size unit_tensor_dims[2] = { 1000, 1 };
+		const vx_size unit_tensor_strides[2] = { sizeof(vx_int16), sizeof(vx_int16) * 1000 };
+		vx_int16 unit_tensor_data[1000];
+		for (int i = 0; i < 1000; ++i) unit_tensor_data[i] = 1 << 8; // 1 in Q78
+
+		vx_tensor unit_tensor = vxCreateTensor(context, 2, unit_tensor_dims, VX_TYPE_INT16, 8);
+		status = vxGetStatus((vx_reference)unit_tensor);
+		if (status != VX_SUCCESS) return status;
+
+		status = vxCopyTensorPatch(unit_tensor, 2, unit_tensor_view_start, unit_tensor_dims, unit_tensor_strides, &unit_tensor_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+		if (status != VX_SUCCESS)
+		{
+			vxReleaseTensor(&unit_tensor);
+			return status;
+		}
+
+		vx_node node = vxTensorMultiplyNode(
+			graph,
+			org_khronos_nn_extension_fully_connected_layer_2_p5,
+			unit_tensor,
+			com_cnn_helpers_scalemddata_0_p1,
+			VX_CONVERT_POLICY_SATURATE,
+			VX_ROUND_POLICY_TO_ZERO,
+			com_cnn_helpers_scalemddata_0_p2);
+		status = vxGetStatus((vx_reference)node);
+		if (status != VX_SUCCESS) return status;
+
+		status = vxReleaseNode(&node);
+		if (status != VX_SUCCESS) return status;
+
+		status = vxReleaseTensor(&unit_tensor);
+		if (status != VX_SUCCESS) return status;
+	}
+
+	//status = CreateNode(graph, org_khronos_nn_extension_softmax_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_softmax_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_softmax_layer_0);
+	//if(status != VX_SUCCESS)
+	//    return status;
+	org_khronos_nn_extension_softmax_layer_0 = vxSoftmaxLayer(graph, com_cnn_helpers_scalemddata_0_p2, org_khronos_nn_extension_softmax_layer_0_p1);
+	if (status != VX_SUCCESS)
+	{
+		WriteLog("ERROR: failed to create node org_khronos_nn_extension_softmax_layer_0\n");
+		return status;
+	}
+	AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_softmax_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_softmax_layer_0");
+        
+ 
+
+    return status;
+}
+
+#endif
diff --git a/test_conformance/Networks/src/graph_alexnet.h b/test_conformance/Networks/src/graph_alexnet.h
new file mode 100644
index 0000000..aa709ee
--- /dev/null
+++ b/test_conformance/Networks/src/graph_alexnet.h
@@ -0,0 +1,31 @@
+/** @file graph.h
+ *  @brief 
+ *  This file contains the definition of the generated graph factory function
+ */
+ 
+#ifndef GRAPH_H
+#define GRAPH_H
+
+#include <VX/vx.h>
+#include "common.h"
+
+#ifdef __cplusplus 
+extern "C" {
+#endif
+
+/** @brief Constructs OpenVX graph
+ *
+ *  @param context The OpenVX context
+ *  @param graph The OpenVX graph
+ *  @param pContainer The pointer to object container.
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @return vx_status code.
+ */
+vx_status _GraphFactoryAlexnet(vx_context context, vx_graph graph, ObjectRefContainerType* pContainer, char* filteredNodesList[], size_t filteredNodesCount);
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* GRAPH_H */
diff --git a/test_conformance/Networks/src/graph_googlenet.c b/test_conformance/Networks/src/graph_googlenet.c
new file mode 100644
index 0000000..8781968
--- /dev/null
+++ b/test_conformance/Networks/src/graph_googlenet.c
@@ -0,0 +1,14251 @@
+/** @file graph.h
+ *  @brief 
+ *  This file contains the implementation of the generated graph factory function
+ */
+
+#ifdef OPENVX_USE_NN
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "graph.h"
+#include <VX/vx_khr_nn.h>
+
+
+
+/** @brief Constructs OpenVX graph and connects to the input/output references
+ *
+ *  @param context The OpenVX context
+ *  @param graph The OpenVX graph
+ *  @param pObjectContainer The pointer to object container.
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @return vx_status code.
+ */
+static vx_status Graph(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount, vx_tensor org_khronos_nn_extension_convolution_layer_0_p0, vx_tensor org_khronos_nn_extension_convolution_layer_0_p1, vx_tensor org_khronos_nn_extension_convolution_layer_0_p2, vx_nn_convolution_params_t org_khronos_nn_extension_convolution_layer_0_p3, vx_tensor org_khronos_nn_extension_convolution_layer_0_p8);
+//static vx_status Graph(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount, vx_tensor org_khronos_nn_extension_convolution_layer_0_p0, vx_tensor org_khronos_nn_extension_convolution_layer_0_p1, vx_tensor org_khronos_nn_extension_convolution_layer_0_p2, vx_scalar org_khronos_nn_extension_convolution_layer_0_p3, vx_scalar org_khronos_nn_extension_convolution_layer_0_p4, vx_scalar org_khronos_nn_extension_convolution_layer_0_p5, vx_scalar org_khronos_nn_extension_convolution_layer_0_p6, vx_scalar org_khronos_nn_extension_convolution_layer_0_p7, vx_tensor org_khronos_nn_extension_convolution_layer_0_p8);
+
+/** @brief Implements the OpenVX graph factory
+ *
+ *  @param context The OpenVX context
+ *  @param graph The OpenVX graph
+ *  @param pObjectContainer The pointer to object container.
+ *  @param filteredNodesList The list of filtered nodes to create in the graph (can be empty)
+ *  @param filteredNodesCount The number of filtered nodes to create in the graph
+ *  @return vx_status code.
+ */
+vx_status _GraphFactoryGooglenet(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount)
+{
+    vx_status status = VX_SUCCESS;
+
+    //
+    // Primitive Declarations
+    //
+
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p0;
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p2;
+    vx_tensor org_khronos_nn_extension_convolution_layer_0_p8;
+
+    //
+    // Other Declarations
+    //
+
+    vx_size org_khronos_nn_extension_convolution_layer_0_p0Dimensions[4] = {224,224,3,1};
+    vx_size org_khronos_nn_extension_convolution_layer_0_p1Dimensions[4] = {7,7,3,64};
+    vx_size org_khronos_nn_extension_convolution_layer_0_p2Dimensions[1] = {64};
+//    vx_size org_khronos_nn_extension_convolution_layer_0_scalar_p3 = 3;
+//    vx_size org_khronos_nn_extension_convolution_layer_0_scalar_p4 = 3;
+//    vx_enum org_khronos_nn_extension_convolution_layer_0_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+//    vx_enum org_khronos_nn_extension_convolution_layer_0_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+//    vx_enum org_khronos_nn_extension_convolution_layer_0_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_0_p8Dimensions[4] = {112,112,64,1};
+    vx_nn_convolution_params_t org_khronos_nn_extension_convolution_layer_0_p3 = {3,3,VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_NEAREST_EVEN, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0};
+
+    //
+    // Source Primitives Assignments
+    // ( source primitives are created here. These are used as inputs to Graph(), which will query the primitives for their respective attribute values )
+    //
+
+    org_khronos_nn_extension_convolution_layer_0_p0 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_0_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p0);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p0, VX_TYPE_TENSOR, "cnn_input");
+
+    org_khronos_nn_extension_convolution_layer_0_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p1, VX_TYPE_TENSOR, "conv1_7x7_s2_weights");
+
+    org_khronos_nn_extension_convolution_layer_0_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_0_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p2, VX_TYPE_TENSOR, "conv1_7x7_s2_bias");
+
+    org_khronos_nn_extension_convolution_layer_0_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_0_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0_p8);
+    if(status != VX_SUCCESS)
+    {
+		WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_0_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p8, VX_TYPE_TENSOR, "conv1_7x7_s2_8");
+
+
+    //
+    // All nodes and primitives (except primitives associated with source nodes) of the graph are setup in Graph()
+    //
+
+    status = Graph(context, graph, pObjectContainer, filteredNodeList, filteredNodeCount, org_khronos_nn_extension_convolution_layer_0_p0, org_khronos_nn_extension_convolution_layer_0_p1, org_khronos_nn_extension_convolution_layer_0_p2, org_khronos_nn_extension_convolution_layer_0_p3, org_khronos_nn_extension_convolution_layer_0_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create graph workload [Graph()]\n");
+        return VX_FAILURE;
+    }
+
+    return status;
+}
+
+static vx_status Graph(vx_context context, vx_graph graph, ObjectRefContainerType* pObjectContainer, char* filteredNodeList[], size_t filteredNodeCount, vx_tensor org_khronos_nn_extension_convolution_layer_0_p0, vx_tensor org_khronos_nn_extension_convolution_layer_0_p1, vx_tensor org_khronos_nn_extension_convolution_layer_0_p2, vx_nn_convolution_params_t org_khronos_nn_extension_convolution_layer_0_p3, vx_tensor org_khronos_nn_extension_convolution_layer_0_p8)
+{
+    vx_status status = VX_SUCCESS;    
+
+    //
+    // Kernel Declarations
+    //
+
+    vx_kernel org_khronos_nn_extension_convolution_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_activation_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_pooling_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_normalization_layer_Kernel;
+    vx_kernel org_khronos_nn_extension_fully_connected_layer_Kernel;
+    vx_kernel org_khronos_openvx_tensor_multiply_Kernel;
+    vx_kernel org_khronos_nn_extension_softmax_layer_Kernel;
+
+    //
+    // Node Declarations
+    //
+
+    vx_node org_khronos_nn_extension_convolution_layer_0;
+    vx_node org_khronos_nn_extension_activation_layer_0;
+    vx_node org_khronos_nn_extension_pooling_layer_0;
+    vx_node org_khronos_nn_extension_normalization_layer_0;
+    vx_node org_khronos_nn_extension_convolution_layer_1;
+    vx_node org_khronos_nn_extension_activation_layer_1;
+    vx_node org_khronos_nn_extension_convolution_layer_2;
+    vx_node org_khronos_nn_extension_activation_layer_2;
+    vx_node org_khronos_nn_extension_normalization_layer_1;
+    vx_node org_khronos_nn_extension_pooling_layer_1;
+    vx_node org_khronos_nn_extension_convolution_layer_8;
+    vx_node org_khronos_nn_extension_convolution_layer_6;
+    vx_node org_khronos_nn_extension_convolution_layer_4;
+    vx_node org_khronos_nn_extension_pooling_layer_2;
+    vx_node org_khronos_nn_extension_activation_layer_8;
+    vx_node org_khronos_nn_extension_activation_layer_6;
+    vx_node org_khronos_nn_extension_activation_layer_4;
+    vx_node org_khronos_nn_extension_convolution_layer_3;
+    vx_node org_khronos_nn_extension_convolution_layer_7;
+    vx_node org_khronos_nn_extension_convolution_layer_5;
+    vx_node org_khronos_nn_extension_activation_layer_3;
+    vx_node org_khronos_nn_extension_activation_layer_7;
+    vx_node org_khronos_nn_extension_activation_layer_5;
+    vx_node org_khronos_nn_extension_convolution_layer_14;
+    vx_node org_khronos_nn_extension_convolution_layer_12;
+    vx_node org_khronos_nn_extension_convolution_layer_10;
+    vx_node org_khronos_nn_extension_pooling_layer_3;
+    vx_node org_khronos_nn_extension_activation_layer_14;
+    vx_node org_khronos_nn_extension_activation_layer_12;
+    vx_node org_khronos_nn_extension_activation_layer_10;
+    vx_node org_khronos_nn_extension_convolution_layer_9;
+    vx_node org_khronos_nn_extension_convolution_layer_13;
+    vx_node org_khronos_nn_extension_convolution_layer_11;
+    vx_node org_khronos_nn_extension_activation_layer_9;
+    vx_node org_khronos_nn_extension_activation_layer_13;
+    vx_node org_khronos_nn_extension_activation_layer_11;
+    vx_node org_khronos_nn_extension_pooling_layer_4;
+    vx_node org_khronos_nn_extension_convolution_layer_20;
+    vx_node org_khronos_nn_extension_convolution_layer_18;
+    vx_node org_khronos_nn_extension_convolution_layer_16;
+    vx_node org_khronos_nn_extension_pooling_layer_5;
+    vx_node org_khronos_nn_extension_activation_layer_20;
+    vx_node org_khronos_nn_extension_activation_layer_18;
+    vx_node org_khronos_nn_extension_activation_layer_16;
+    vx_node org_khronos_nn_extension_convolution_layer_15;
+    vx_node org_khronos_nn_extension_convolution_layer_19;
+    vx_node org_khronos_nn_extension_convolution_layer_17;
+    vx_node org_khronos_nn_extension_activation_layer_15;
+    vx_node org_khronos_nn_extension_activation_layer_19;
+    vx_node org_khronos_nn_extension_activation_layer_17;
+    vx_node org_khronos_nn_extension_convolution_layer_26;
+    vx_node org_khronos_nn_extension_convolution_layer_24;
+    vx_node org_khronos_nn_extension_convolution_layer_22;
+    vx_node org_khronos_nn_extension_pooling_layer_6;
+    vx_node org_khronos_nn_extension_activation_layer_26;
+    vx_node org_khronos_nn_extension_activation_layer_24;
+    vx_node org_khronos_nn_extension_activation_layer_22;
+    vx_node org_khronos_nn_extension_convolution_layer_21;
+    vx_node org_khronos_nn_extension_convolution_layer_25;
+    vx_node org_khronos_nn_extension_convolution_layer_23;
+    vx_node org_khronos_nn_extension_activation_layer_21;
+    vx_node org_khronos_nn_extension_activation_layer_25;
+    vx_node org_khronos_nn_extension_activation_layer_23;
+    vx_node org_khronos_nn_extension_convolution_layer_32;
+    vx_node org_khronos_nn_extension_convolution_layer_30;
+    vx_node org_khronos_nn_extension_convolution_layer_28;
+    vx_node org_khronos_nn_extension_pooling_layer_7;
+    vx_node org_khronos_nn_extension_activation_layer_32;
+    vx_node org_khronos_nn_extension_activation_layer_30;
+    vx_node org_khronos_nn_extension_activation_layer_28;
+    vx_node org_khronos_nn_extension_convolution_layer_27;
+    vx_node org_khronos_nn_extension_convolution_layer_31;
+    vx_node org_khronos_nn_extension_convolution_layer_29;
+    vx_node org_khronos_nn_extension_activation_layer_27;
+    vx_node org_khronos_nn_extension_activation_layer_31;
+    vx_node org_khronos_nn_extension_activation_layer_29;
+    vx_node org_khronos_nn_extension_convolution_layer_38;
+    vx_node org_khronos_nn_extension_convolution_layer_36;
+    vx_node org_khronos_nn_extension_convolution_layer_34;
+    vx_node org_khronos_nn_extension_pooling_layer_8;
+    vx_node org_khronos_nn_extension_activation_layer_38;
+    vx_node org_khronos_nn_extension_activation_layer_36;
+    vx_node org_khronos_nn_extension_activation_layer_34;
+    vx_node org_khronos_nn_extension_convolution_layer_33;
+    vx_node org_khronos_nn_extension_convolution_layer_37;
+    vx_node org_khronos_nn_extension_convolution_layer_35;
+    vx_node org_khronos_nn_extension_activation_layer_33;
+    vx_node org_khronos_nn_extension_activation_layer_37;
+    vx_node org_khronos_nn_extension_activation_layer_35;
+    vx_node org_khronos_nn_extension_convolution_layer_44;
+    vx_node org_khronos_nn_extension_convolution_layer_42;
+    vx_node org_khronos_nn_extension_convolution_layer_40;
+    vx_node org_khronos_nn_extension_pooling_layer_9;
+    vx_node org_khronos_nn_extension_activation_layer_44;
+    vx_node org_khronos_nn_extension_activation_layer_42;
+    vx_node org_khronos_nn_extension_activation_layer_40;
+    vx_node org_khronos_nn_extension_convolution_layer_39;
+    vx_node org_khronos_nn_extension_convolution_layer_43;
+    vx_node org_khronos_nn_extension_convolution_layer_41;
+    vx_node org_khronos_nn_extension_activation_layer_39;
+    vx_node org_khronos_nn_extension_activation_layer_43;
+    vx_node org_khronos_nn_extension_activation_layer_41;
+    vx_node org_khronos_nn_extension_pooling_layer_10;
+    vx_node org_khronos_nn_extension_convolution_layer_50;
+    vx_node org_khronos_nn_extension_convolution_layer_48;
+    vx_node org_khronos_nn_extension_convolution_layer_46;
+    vx_node org_khronos_nn_extension_pooling_layer_11;
+    vx_node org_khronos_nn_extension_activation_layer_50;
+    vx_node org_khronos_nn_extension_activation_layer_48;
+    vx_node org_khronos_nn_extension_activation_layer_46;
+    vx_node org_khronos_nn_extension_convolution_layer_45;
+    vx_node org_khronos_nn_extension_convolution_layer_49;
+    vx_node org_khronos_nn_extension_convolution_layer_47;
+    vx_node org_khronos_nn_extension_activation_layer_45;
+    vx_node org_khronos_nn_extension_activation_layer_49;
+    vx_node org_khronos_nn_extension_activation_layer_47;
+    vx_node org_khronos_nn_extension_convolution_layer_56;
+    vx_node org_khronos_nn_extension_convolution_layer_54;
+    vx_node org_khronos_nn_extension_convolution_layer_52;
+    vx_node org_khronos_nn_extension_pooling_layer_12;
+    vx_node org_khronos_nn_extension_activation_layer_56;
+    vx_node org_khronos_nn_extension_activation_layer_54;
+    vx_node org_khronos_nn_extension_activation_layer_52;
+    vx_node org_khronos_nn_extension_convolution_layer_51;
+    vx_node org_khronos_nn_extension_convolution_layer_55;
+    vx_node org_khronos_nn_extension_convolution_layer_53;
+    vx_node org_khronos_nn_extension_activation_layer_51;
+    vx_node org_khronos_nn_extension_activation_layer_55;
+    vx_node org_khronos_nn_extension_activation_layer_53;
+    vx_node org_khronos_nn_extension_pooling_layer_13;
+    vx_node org_khronos_nn_extension_fully_connected_layer_0;
+    vx_node org_khronos_openvx_tensor_multiply_0;
+    vx_node org_khronos_nn_extension_softmax_layer_0;
+
+    //
+    // Primitive Declarations
+    //
+
+    vx_tensor outputAllocators_MergeTensor_8_p0;
+    vx_tensor outputAllocators_MergeTensor_7_p0;
+    vx_tensor outputAllocators_MergeTensor_6_p0;
+    vx_tensor outputAllocators_MergeTensor_5_p0;
+    vx_tensor outputAllocators_MergeTensor_4_p0;
+    vx_tensor outputAllocators_MergeTensor_3_p0;
+    vx_tensor outputAllocators_MergeTensor_2_p0;
+    vx_tensor outputAllocators_MergeTensor_1_p0;
+    vx_tensor outputAllocators_MergeTensor_0_p0;
+    vx_scalar org_khronos_nn_extension_activation_layer_0_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_0_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_0_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_0_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_0_p7;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p1;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_normalization_layer_0_p4;
+    vx_tensor org_khronos_nn_extension_normalization_layer_0_p5;
+    vx_tensor org_khronos_nn_extension_convolution_layer_1_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_1_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_1_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_1_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_1_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_1_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_2_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_2_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_2_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_2_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_2_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_2_p4;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p1;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_normalization_layer_1_p4;
+    vx_tensor org_khronos_nn_extension_normalization_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_1_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_1_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_8_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_8_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_8_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_8_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_8_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_8_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_8_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_8_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_6_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_6_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_6_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_6_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_4_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_4_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_4_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_4_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_2_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_2_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_8_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_8_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_8_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_8_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_6_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_6_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_6_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_6_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_4_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_4_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_4_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_4_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_3_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_3_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_3_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_3_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_7_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_7_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_7_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_7_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_5_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_5_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_5_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_5_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_3_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_3_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_3_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_3_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_7_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_7_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_7_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_7_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_5_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_5_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_5_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_5_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_14_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_14_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_14_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_14_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_14_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_14_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_14_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_14_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_12_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_12_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_12_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_12_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_12_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_12_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_12_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_12_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_10_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_10_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_10_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_10_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_10_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_10_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_10_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_10_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_3_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_3_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_3_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_3_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_3_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_3_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_3_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_14_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_14_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_14_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_14_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_12_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_12_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_12_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_12_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_10_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_10_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_10_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_10_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_9_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_9_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_9_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_9_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_9_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_9_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_9_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_9_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_13_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_13_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_13_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_13_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_13_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_13_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_13_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_13_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_11_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_11_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_11_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_11_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_11_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_11_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_11_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_11_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_9_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_9_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_9_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_9_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_13_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_13_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_13_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_13_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_11_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_11_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_11_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_11_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_4_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_4_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_4_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_4_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_4_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_4_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_4_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_20_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_20_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_20_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_20_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_20_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_20_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_20_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_20_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_18_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_18_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_18_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_18_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_18_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_18_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_18_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_18_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_16_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_16_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_16_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_16_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_16_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_16_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_16_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_16_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_5_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_5_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_5_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_5_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_5_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_5_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_5_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_20_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_20_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_20_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_20_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_18_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_18_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_18_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_18_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_16_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_16_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_16_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_16_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_15_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_15_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_15_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_15_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_15_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_15_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_15_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_15_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_19_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_19_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_19_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_19_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_19_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_19_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_19_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_19_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_17_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_17_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_17_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_17_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_17_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_17_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_17_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_17_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_15_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_15_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_15_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_15_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_19_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_19_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_19_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_19_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_17_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_17_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_17_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_17_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_26_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_26_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_26_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_26_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_26_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_26_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_26_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_26_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_24_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_24_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_24_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_24_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_24_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_24_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_24_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_24_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_22_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_22_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_22_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_22_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_22_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_22_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_22_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_22_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_6_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_6_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_6_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_6_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_6_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_6_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_6_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_26_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_26_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_26_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_26_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_24_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_24_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_24_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_24_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_22_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_22_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_22_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_22_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_21_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_21_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_21_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_21_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_21_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_21_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_21_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_21_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_25_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_25_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_25_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_25_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_25_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_25_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_25_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_25_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_23_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_23_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_23_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_23_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_23_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_23_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_23_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_23_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_21_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_21_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_21_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_21_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_25_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_25_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_25_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_25_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_23_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_23_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_23_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_23_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_32_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_32_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_32_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_32_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_32_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_32_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_32_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_32_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_30_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_30_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_30_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_30_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_30_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_30_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_30_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_30_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_28_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_28_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_28_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_28_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_28_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_28_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_28_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_28_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_7_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_7_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_7_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_7_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_7_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_7_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_7_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_32_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_32_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_32_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_32_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_30_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_30_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_30_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_30_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_28_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_28_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_28_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_28_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_27_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_27_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_27_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_27_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_27_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_27_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_27_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_27_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_31_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_31_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_31_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_31_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_31_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_31_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_31_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_31_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_29_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_29_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_29_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_29_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_29_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_29_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_29_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_29_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_27_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_27_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_27_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_27_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_31_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_31_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_31_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_31_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_29_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_29_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_29_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_29_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_38_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_38_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_38_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_38_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_38_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_38_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_38_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_38_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_36_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_36_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_36_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_36_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_36_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_36_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_36_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_36_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_34_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_34_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_34_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_34_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_34_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_34_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_34_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_34_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_8_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_8_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_8_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_8_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_8_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_8_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_8_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_38_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_38_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_38_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_38_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_36_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_36_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_36_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_36_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_34_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_34_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_34_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_34_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_33_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_33_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_33_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_33_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_33_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_33_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_33_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_33_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_37_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_37_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_37_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_37_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_37_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_37_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_37_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_37_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_35_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_35_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_35_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_35_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_35_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_35_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_35_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_35_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_33_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_33_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_33_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_33_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_37_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_37_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_37_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_37_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_35_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_35_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_35_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_35_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_44_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_44_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_44_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_44_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_44_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_44_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_44_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_44_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_42_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_42_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_42_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_42_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_42_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_42_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_42_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_42_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_40_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_40_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_40_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_40_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_40_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_40_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_40_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_40_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_9_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_9_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_9_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_9_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_9_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_9_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_9_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_44_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_44_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_44_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_44_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_42_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_42_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_42_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_42_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_40_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_40_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_40_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_40_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_39_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_39_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_39_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_39_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_39_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_39_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_39_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_39_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_43_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_43_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_43_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_43_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_43_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_43_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_43_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_43_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_41_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_41_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_41_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_41_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_41_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_41_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_41_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_41_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_39_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_39_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_39_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_39_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_43_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_43_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_43_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_43_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_41_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_41_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_41_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_41_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_10_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_10_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_10_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_10_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_10_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_10_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_10_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_50_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_50_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_50_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_50_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_50_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_50_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_50_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_50_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_48_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_48_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_48_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_48_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_48_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_48_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_48_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_48_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_46_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_46_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_46_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_46_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_46_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_46_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_46_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_46_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_11_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_11_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_11_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_11_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_11_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_11_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_11_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_50_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_50_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_50_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_50_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_48_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_48_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_48_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_48_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_46_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_46_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_46_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_46_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_45_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_45_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_45_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_45_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_45_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_45_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_45_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_45_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_49_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_49_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_49_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_49_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_49_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_49_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_49_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_49_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_47_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_47_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_47_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_47_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_47_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_47_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_47_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_47_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_45_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_45_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_45_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_45_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_49_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_49_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_49_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_49_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_47_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_47_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_47_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_47_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_56_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_56_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_56_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_56_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_56_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_56_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_56_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_56_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_54_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_54_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_54_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_54_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_54_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_54_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_54_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_54_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_52_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_52_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_52_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_52_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_52_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_52_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_52_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_52_p8;
+    vx_scalar org_khronos_nn_extension_pooling_layer_12_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_12_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_12_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_12_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_12_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_12_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_12_p7;
+    vx_scalar org_khronos_nn_extension_activation_layer_56_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_56_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_56_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_56_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_54_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_54_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_54_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_54_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_52_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_52_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_52_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_52_p4;
+    vx_tensor org_khronos_nn_extension_convolution_layer_51_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_51_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_51_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_51_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_51_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_51_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_51_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_51_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_55_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_55_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_55_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_55_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_55_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_55_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_55_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_55_p8;
+    vx_tensor org_khronos_nn_extension_convolution_layer_53_p1;
+    vx_tensor org_khronos_nn_extension_convolution_layer_53_p2;
+    vx_scalar org_khronos_nn_extension_convolution_layer_53_p3;
+    vx_scalar org_khronos_nn_extension_convolution_layer_53_p4;
+    vx_scalar org_khronos_nn_extension_convolution_layer_53_p5;
+    vx_scalar org_khronos_nn_extension_convolution_layer_53_p6;
+    vx_scalar org_khronos_nn_extension_convolution_layer_53_p7;
+    vx_tensor org_khronos_nn_extension_convolution_layer_53_p8;
+    vx_scalar org_khronos_nn_extension_activation_layer_51_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_51_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_51_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_51_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_55_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_55_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_55_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_55_p4;
+    vx_scalar org_khronos_nn_extension_activation_layer_53_p1;
+    vx_scalar org_khronos_nn_extension_activation_layer_53_p2;
+    vx_scalar org_khronos_nn_extension_activation_layer_53_p3;
+    vx_tensor org_khronos_nn_extension_activation_layer_53_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_13_p1;
+    vx_scalar org_khronos_nn_extension_pooling_layer_13_p2;
+    vx_scalar org_khronos_nn_extension_pooling_layer_13_p3;
+    vx_scalar org_khronos_nn_extension_pooling_layer_13_p4;
+    vx_scalar org_khronos_nn_extension_pooling_layer_13_p5;
+    vx_scalar org_khronos_nn_extension_pooling_layer_13_p6;
+    vx_tensor org_khronos_nn_extension_pooling_layer_13_p7;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_0_p1;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_0_p2;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_0_p3;
+    vx_scalar org_khronos_nn_extension_fully_connected_layer_0_p4;
+    vx_tensor org_khronos_nn_extension_fully_connected_layer_0_p5;
+    vx_tensor org_khronos_openvx_tensor_multiply_0_p1;
+    vx_scalar org_khronos_openvx_tensor_multiply_0_p2;
+    vx_scalar org_khronos_openvx_tensor_multiply_0_p3;
+    vx_scalar org_khronos_openvx_tensor_multiply_0_p4;
+    vx_tensor org_khronos_openvx_tensor_multiply_0_p5;
+    vx_tensor org_khronos_nn_extension_softmax_layer_0_p1;
+
+    //
+    // Other Declarations
+    //
+
+    vx_size outputAllocators_MergeTensor_8_p0Dimensions[4] = {7,7,1024,1};
+    vx_size outputAllocators_MergeTensor_7_p0Dimensions[4] = {7,7,832,1};
+    vx_size outputAllocators_MergeTensor_6_p0Dimensions[4] = {14,14,832,1};
+    vx_size outputAllocators_MergeTensor_5_p0Dimensions[4] = {14,14,528,1};
+    vx_size outputAllocators_MergeTensor_4_p0Dimensions[4] = {14,14,512,1};
+    vx_size outputAllocators_MergeTensor_3_p0Dimensions[4] = {14,14,512,1};
+    vx_size outputAllocators_MergeTensor_2_p0Dimensions[4] = {14,14,512,1};
+    vx_size outputAllocators_MergeTensor_1_p0Dimensions[4] = {28,28,480,1};
+    vx_size outputAllocators_MergeTensor_0_p0Dimensions[4] = {28,28,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_0_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_0_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_0_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_0_p4Dimensions[4] = {112,112,64,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_0_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_0_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_0_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_0_p7Dimensions[4] = {56,56,64,1};
+    vx_enum org_khronos_nn_extension_normalization_layer_0_scalar_p1 = VX_NN_NORMALIZATION_ACROSS_MAPS;
+    vx_size org_khronos_nn_extension_normalization_layer_0_scalar_p2 = 5;
+    vx_float32 org_khronos_nn_extension_normalization_layer_0_scalar_p3 = 0.0063999998;
+    vx_float32 org_khronos_nn_extension_normalization_layer_0_scalar_p4 = 0.750000;
+    vx_size org_khronos_nn_extension_normalization_layer_0_p5Dimensions[4] = {56,56,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_1_p1Dimensions[4] = {1,1,64,64};
+    vx_size org_khronos_nn_extension_convolution_layer_1_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_1_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_1_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_1_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_1_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_1_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_1_p8Dimensions[4] = {56,56,64,1};
+    vx_enum org_khronos_nn_extension_activation_layer_1_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_1_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_1_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_1_p4Dimensions[4] = {56,56,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_2_p1Dimensions[4] = {3,3,64,192};
+    vx_size org_khronos_nn_extension_convolution_layer_2_p2Dimensions[1] = {192};
+    vx_size org_khronos_nn_extension_convolution_layer_2_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_2_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_2_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_2_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_2_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_2_p8Dimensions[4] = {56,56,192,1};
+    vx_enum org_khronos_nn_extension_activation_layer_2_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_2_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_2_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_2_p4Dimensions[4] = {56,56,192,1};
+    vx_enum org_khronos_nn_extension_normalization_layer_1_scalar_p1 = VX_NN_NORMALIZATION_ACROSS_MAPS;
+    vx_size org_khronos_nn_extension_normalization_layer_1_scalar_p2 = 5;
+    vx_float32 org_khronos_nn_extension_normalization_layer_1_scalar_p3 = 0.0063999998;
+    vx_float32 org_khronos_nn_extension_normalization_layer_1_scalar_p4 = 0.750000;
+    vx_size org_khronos_nn_extension_normalization_layer_1_p5Dimensions[4] = {56,56,192,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_1_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_1_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_1_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_1_p7Dimensions[4] = {28,28,192,1};
+    vx_size org_khronos_nn_extension_convolution_layer_8_p1Dimensions[4] = {1,1,192,64};
+    vx_size org_khronos_nn_extension_convolution_layer_8_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_8_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_8_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_8_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_8_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_8_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_8_p8Dimensions[4] = {28,28,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_6_p1Dimensions[4] = {1,1,192,96};
+    vx_size org_khronos_nn_extension_convolution_layer_6_p2Dimensions[1] = {96};
+    vx_size org_khronos_nn_extension_convolution_layer_6_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_6_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_6_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_6_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_6_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_6_p8Dimensions[4] = {28,28,96,1};
+    vx_size org_khronos_nn_extension_convolution_layer_4_p1Dimensions[4] = {1,1,192,16};
+    vx_size org_khronos_nn_extension_convolution_layer_4_p2Dimensions[1] = {16};
+    vx_size org_khronos_nn_extension_convolution_layer_4_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_4_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_4_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_4_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_4_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_4_p8Dimensions[4] = {28,28,16,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_2_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_2_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_2_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_2_p7Dimensions[4] = {28,28,192,1};
+    vx_enum org_khronos_nn_extension_activation_layer_8_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_8_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_8_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_8_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_8_p4_view_view_end[4] = {28,28,64,1};
+    vx_enum org_khronos_nn_extension_activation_layer_6_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_6_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_6_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_6_p4Dimensions[4] = {28,28,96,1};
+    vx_enum org_khronos_nn_extension_activation_layer_4_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_4_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_4_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_4_p4Dimensions[4] = {28,28,16,1};
+    vx_size org_khronos_nn_extension_convolution_layer_3_p1Dimensions[4] = {1,1,192,32};
+    vx_size org_khronos_nn_extension_convolution_layer_3_p2Dimensions[1] = {32};
+    vx_size org_khronos_nn_extension_convolution_layer_3_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_3_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_3_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_3_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_3_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_3_p8Dimensions[4] = {28,28,32,1};
+    vx_size org_khronos_nn_extension_convolution_layer_7_p1Dimensions[4] = {3,3,96,128};
+    vx_size org_khronos_nn_extension_convolution_layer_7_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_7_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_7_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_7_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_7_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_7_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_7_p8Dimensions[4] = {28,28,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_5_p1Dimensions[4] = {5,5,16,32};
+    vx_size org_khronos_nn_extension_convolution_layer_5_p2Dimensions[1] = {32};
+    vx_size org_khronos_nn_extension_convolution_layer_5_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_5_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_5_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_5_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_5_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_5_p8Dimensions[4] = {28,28,32,1};
+    vx_enum org_khronos_nn_extension_activation_layer_3_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_3_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_3_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_3_p4_view_view_start[4] = {0,0,224,0};
+    vx_size org_khronos_nn_extension_activation_layer_3_p4_view_view_end[4] = {28,28,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_7_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_7_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_7_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_7_p4_view_view_start[4] = {0,0,64,0};
+    vx_size org_khronos_nn_extension_activation_layer_7_p4_view_view_end[4] = {28,28,192,1};
+    vx_enum org_khronos_nn_extension_activation_layer_5_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_5_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_5_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_5_p4_view_view_start[4] = {0,0,192,0};
+    vx_size org_khronos_nn_extension_activation_layer_5_p4_view_view_end[4] = {28,28,224,1};
+    vx_size org_khronos_nn_extension_convolution_layer_14_p1Dimensions[4] = {1,1,256,128};
+    vx_size org_khronos_nn_extension_convolution_layer_14_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_14_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_14_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_14_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_14_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_14_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_14_p8Dimensions[4] = {28,28,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_12_p1Dimensions[4] = {1,1,256,128};
+    vx_size org_khronos_nn_extension_convolution_layer_12_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_12_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_12_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_12_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_12_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_12_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_12_p8Dimensions[4] = {28,28,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_10_p1Dimensions[4] = {1,1,256,32};
+    vx_size org_khronos_nn_extension_convolution_layer_10_p2Dimensions[1] = {32};
+    vx_size org_khronos_nn_extension_convolution_layer_10_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_10_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_10_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_10_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_10_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_10_p8Dimensions[4] = {28,28,32,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_3_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_3_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_3_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_3_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_3_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_3_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_3_p7Dimensions[4] = {28,28,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_14_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_14_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_14_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_14_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_14_p4_view_view_end[4] = {28,28,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_12_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_12_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_12_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_12_p4Dimensions[4] = {28,28,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_10_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_10_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_10_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_10_p4Dimensions[4] = {28,28,32,1};
+    vx_size org_khronos_nn_extension_convolution_layer_9_p1Dimensions[4] = {1,1,256,64};
+    vx_size org_khronos_nn_extension_convolution_layer_9_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_9_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_9_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_9_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_9_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_9_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_9_p8Dimensions[4] = {28,28,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_13_p1Dimensions[4] = {3,3,128,192};
+    vx_size org_khronos_nn_extension_convolution_layer_13_p2Dimensions[1] = {192};
+    vx_size org_khronos_nn_extension_convolution_layer_13_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_13_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_13_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_13_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_13_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_13_p8Dimensions[4] = {28,28,192,1};
+    vx_size org_khronos_nn_extension_convolution_layer_11_p1Dimensions[4] = {5,5,32,96};
+    vx_size org_khronos_nn_extension_convolution_layer_11_p2Dimensions[1] = {96};
+    vx_size org_khronos_nn_extension_convolution_layer_11_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_11_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_11_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_11_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_11_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_11_p8Dimensions[4] = {28,28,96,1};
+    vx_enum org_khronos_nn_extension_activation_layer_9_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_9_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_9_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_9_p4_view_view_start[4] = {0,0,416,0};
+    vx_size org_khronos_nn_extension_activation_layer_9_p4_view_view_end[4] = {28,28,480,1};
+    vx_enum org_khronos_nn_extension_activation_layer_13_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_13_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_13_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_13_p4_view_view_start[4] = {0,0,128,0};
+    vx_size org_khronos_nn_extension_activation_layer_13_p4_view_view_end[4] = {28,28,320,1};
+    vx_enum org_khronos_nn_extension_activation_layer_11_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_11_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_11_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_11_p4_view_view_start[4] = {0,0,320,0};
+    vx_size org_khronos_nn_extension_activation_layer_11_p4_view_view_end[4] = {28,28,416,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_4_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_4_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_4_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_4_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_4_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_4_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_4_p7Dimensions[4] = {14,14,480,1};
+    vx_size org_khronos_nn_extension_convolution_layer_20_p1Dimensions[4] = {1,1,480,192};
+    vx_size org_khronos_nn_extension_convolution_layer_20_p2Dimensions[1] = {192};
+    vx_size org_khronos_nn_extension_convolution_layer_20_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_20_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_20_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_20_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_20_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_20_p8Dimensions[4] = {14,14,192,1};
+    vx_size org_khronos_nn_extension_convolution_layer_18_p1Dimensions[4] = {1,1,480,96};
+    vx_size org_khronos_nn_extension_convolution_layer_18_p2Dimensions[1] = {96};
+    vx_size org_khronos_nn_extension_convolution_layer_18_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_18_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_18_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_18_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_18_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_18_p8Dimensions[4] = {14,14,96,1};
+    vx_size org_khronos_nn_extension_convolution_layer_16_p1Dimensions[4] = {1,1,480,16};
+    vx_size org_khronos_nn_extension_convolution_layer_16_p2Dimensions[1] = {16};
+    vx_size org_khronos_nn_extension_convolution_layer_16_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_16_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_16_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_16_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_16_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_16_p8Dimensions[4] = {14,14,16,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_5_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_5_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_5_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_5_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_5_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_5_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_5_p7Dimensions[4] = {14,14,480,1};
+    vx_enum org_khronos_nn_extension_activation_layer_20_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_20_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_20_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_20_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_20_p4_view_view_end[4] = {14,14,192,1};
+    vx_enum org_khronos_nn_extension_activation_layer_18_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_18_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_18_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_18_p4Dimensions[4] = {14,14,96,1};
+    vx_enum org_khronos_nn_extension_activation_layer_16_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_16_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_16_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_16_p4Dimensions[4] = {14,14,16,1};
+    vx_size org_khronos_nn_extension_convolution_layer_15_p1Dimensions[4] = {1,1,480,64};
+    vx_size org_khronos_nn_extension_convolution_layer_15_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_15_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_15_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_15_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_15_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_15_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_15_p8Dimensions[4] = {14,14,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_19_p1Dimensions[4] = {3,3,96,208};
+    vx_size org_khronos_nn_extension_convolution_layer_19_p2Dimensions[1] = {208};
+    vx_size org_khronos_nn_extension_convolution_layer_19_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_19_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_19_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_19_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_19_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_19_p8Dimensions[4] = {14,14,208,1};
+    vx_size org_khronos_nn_extension_convolution_layer_17_p1Dimensions[4] = {5,5,16,48};
+    vx_size org_khronos_nn_extension_convolution_layer_17_p2Dimensions[1] = {48};
+    vx_size org_khronos_nn_extension_convolution_layer_17_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_17_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_17_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_17_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_17_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_17_p8Dimensions[4] = {14,14,48,1};
+    vx_enum org_khronos_nn_extension_activation_layer_15_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_15_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_15_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_15_p4_view_view_start[4] = {0,0,448,0};
+    vx_size org_khronos_nn_extension_activation_layer_15_p4_view_view_end[4] = {14,14,512,1};
+    vx_enum org_khronos_nn_extension_activation_layer_19_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_19_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_19_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_19_p4_view_view_start[4] = {0,0,192,0};
+    vx_size org_khronos_nn_extension_activation_layer_19_p4_view_view_end[4] = {14,14,400,1};
+    vx_enum org_khronos_nn_extension_activation_layer_17_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_17_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_17_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_17_p4_view_view_start[4] = {0,0,400,0};
+    vx_size org_khronos_nn_extension_activation_layer_17_p4_view_view_end[4] = {14,14,448,1};
+    vx_size org_khronos_nn_extension_convolution_layer_26_p1Dimensions[4] = {1,1,512,160};
+    vx_size org_khronos_nn_extension_convolution_layer_26_p2Dimensions[1] = {160};
+    vx_size org_khronos_nn_extension_convolution_layer_26_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_26_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_26_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_26_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_26_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_26_p8Dimensions[4] = {14,14,160,1};
+    vx_size org_khronos_nn_extension_convolution_layer_24_p1Dimensions[4] = {1,1,512,112};
+    vx_size org_khronos_nn_extension_convolution_layer_24_p2Dimensions[1] = {112};
+    vx_size org_khronos_nn_extension_convolution_layer_24_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_24_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_24_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_24_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_24_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_24_p8Dimensions[4] = {14,14,112,1};
+    vx_size org_khronos_nn_extension_convolution_layer_22_p1Dimensions[4] = {1,1,512,24};
+    vx_size org_khronos_nn_extension_convolution_layer_22_p2Dimensions[1] = {24};
+    vx_size org_khronos_nn_extension_convolution_layer_22_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_22_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_22_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_22_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_22_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_22_p8Dimensions[4] = {14,14,24,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_6_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_6_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_6_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_6_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_6_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_6_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_6_p7Dimensions[4] = {14,14,512,1};
+    vx_enum org_khronos_nn_extension_activation_layer_26_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_26_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_26_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_26_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_26_p4_view_view_end[4] = {14,14,160,1};
+    vx_enum org_khronos_nn_extension_activation_layer_24_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_24_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_24_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_24_p4Dimensions[4] = {14,14,112,1};
+    vx_enum org_khronos_nn_extension_activation_layer_22_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_22_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_22_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_22_p4Dimensions[4] = {14,14,24,1};
+    vx_size org_khronos_nn_extension_convolution_layer_21_p1Dimensions[4] = {1,1,512,64};
+    vx_size org_khronos_nn_extension_convolution_layer_21_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_21_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_21_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_21_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_21_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_21_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_21_p8Dimensions[4] = {14,14,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_25_p1Dimensions[4] = {3,3,112,224};
+    vx_size org_khronos_nn_extension_convolution_layer_25_p2Dimensions[1] = {224};
+    vx_size org_khronos_nn_extension_convolution_layer_25_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_25_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_25_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_25_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_25_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_25_p8Dimensions[4] = {14,14,224,1};
+    vx_size org_khronos_nn_extension_convolution_layer_23_p1Dimensions[4] = {5,5,24,64};
+    vx_size org_khronos_nn_extension_convolution_layer_23_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_23_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_23_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_23_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_23_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_23_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_23_p8Dimensions[4] = {14,14,64,1};
+    vx_enum org_khronos_nn_extension_activation_layer_21_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_21_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_21_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_21_p4_view_view_start[4] = {0,0,448,0};
+    vx_size org_khronos_nn_extension_activation_layer_21_p4_view_view_end[4] = {14,14,512,1};
+    vx_enum org_khronos_nn_extension_activation_layer_25_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_25_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_25_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_25_p4_view_view_start[4] = {0,0,160,0};
+    vx_size org_khronos_nn_extension_activation_layer_25_p4_view_view_end[4] = {14,14,384,1};
+    vx_enum org_khronos_nn_extension_activation_layer_23_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_23_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_23_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_23_p4_view_view_start[4] = {0,0,384,0};
+    vx_size org_khronos_nn_extension_activation_layer_23_p4_view_view_end[4] = {14,14,448,1};
+    vx_size org_khronos_nn_extension_convolution_layer_32_p1Dimensions[4] = {1,1,512,128};
+    vx_size org_khronos_nn_extension_convolution_layer_32_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_32_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_32_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_32_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_32_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_32_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_32_p8Dimensions[4] = {14,14,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_30_p1Dimensions[4] = {1,1,512,128};
+    vx_size org_khronos_nn_extension_convolution_layer_30_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_30_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_30_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_30_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_30_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_30_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_30_p8Dimensions[4] = {14,14,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_28_p1Dimensions[4] = {1,1,512,24};
+    vx_size org_khronos_nn_extension_convolution_layer_28_p2Dimensions[1] = {24};
+    vx_size org_khronos_nn_extension_convolution_layer_28_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_28_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_28_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_28_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_28_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_28_p8Dimensions[4] = {14,14,24,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_7_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_7_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_7_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_7_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_7_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_7_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_7_p7Dimensions[4] = {14,14,512,1};
+    vx_enum org_khronos_nn_extension_activation_layer_32_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_32_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_32_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_32_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_32_p4_view_view_end[4] = {14,14,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_30_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_30_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_30_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_30_p4Dimensions[4] = {14,14,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_28_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_28_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_28_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_28_p4Dimensions[4] = {14,14,24,1};
+    vx_size org_khronos_nn_extension_convolution_layer_27_p1Dimensions[4] = {1,1,512,64};
+    vx_size org_khronos_nn_extension_convolution_layer_27_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_27_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_27_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_27_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_27_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_27_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_27_p8Dimensions[4] = {14,14,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_31_p1Dimensions[4] = {3,3,128,256};
+    vx_size org_khronos_nn_extension_convolution_layer_31_p2Dimensions[1] = {256};
+    vx_size org_khronos_nn_extension_convolution_layer_31_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_31_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_31_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_31_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_31_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_31_p8Dimensions[4] = {14,14,256,1};
+    vx_size org_khronos_nn_extension_convolution_layer_29_p1Dimensions[4] = {5,5,24,64};
+    vx_size org_khronos_nn_extension_convolution_layer_29_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_29_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_29_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_29_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_29_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_29_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_29_p8Dimensions[4] = {14,14,64,1};
+    vx_enum org_khronos_nn_extension_activation_layer_27_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_27_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_27_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_27_p4_view_view_start[4] = {0,0,448,0};
+    vx_size org_khronos_nn_extension_activation_layer_27_p4_view_view_end[4] = {14,14,512,1};
+    vx_enum org_khronos_nn_extension_activation_layer_31_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_31_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_31_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_31_p4_view_view_start[4] = {0,0,128,0};
+    vx_size org_khronos_nn_extension_activation_layer_31_p4_view_view_end[4] = {14,14,384,1};
+    vx_enum org_khronos_nn_extension_activation_layer_29_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_29_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_29_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_29_p4_view_view_start[4] = {0,0,384,0};
+    vx_size org_khronos_nn_extension_activation_layer_29_p4_view_view_end[4] = {14,14,448,1};
+    vx_size org_khronos_nn_extension_convolution_layer_38_p1Dimensions[4] = {1,1,512,112};
+    vx_size org_khronos_nn_extension_convolution_layer_38_p2Dimensions[1] = {112};
+    vx_size org_khronos_nn_extension_convolution_layer_38_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_38_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_38_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_38_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_38_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_38_p8Dimensions[4] = {14,14,112,1};
+    vx_size org_khronos_nn_extension_convolution_layer_36_p1Dimensions[4] = {1,1,512,144};
+    vx_size org_khronos_nn_extension_convolution_layer_36_p2Dimensions[1] = {144};
+    vx_size org_khronos_nn_extension_convolution_layer_36_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_36_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_36_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_36_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_36_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_36_p8Dimensions[4] = {14,14,144,1};
+    vx_size org_khronos_nn_extension_convolution_layer_34_p1Dimensions[4] = {1,1,512,32};
+    vx_size org_khronos_nn_extension_convolution_layer_34_p2Dimensions[1] = {32};
+    vx_size org_khronos_nn_extension_convolution_layer_34_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_34_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_34_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_34_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_34_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_34_p8Dimensions[4] = {14,14,32,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_8_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_8_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_8_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_8_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_8_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_8_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_8_p7Dimensions[4] = {14,14,512,1};
+    vx_enum org_khronos_nn_extension_activation_layer_38_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_38_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_38_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_38_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_38_p4_view_view_end[4] = {14,14,112,1};
+    vx_enum org_khronos_nn_extension_activation_layer_36_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_36_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_36_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_36_p4Dimensions[4] = {14,14,144,1};
+    vx_enum org_khronos_nn_extension_activation_layer_34_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_34_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_34_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_34_p4Dimensions[4] = {14,14,32,1};
+    vx_size org_khronos_nn_extension_convolution_layer_33_p1Dimensions[4] = {1,1,512,64};
+    vx_size org_khronos_nn_extension_convolution_layer_33_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_33_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_33_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_33_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_33_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_33_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_33_p8Dimensions[4] = {14,14,64,1};
+    vx_size org_khronos_nn_extension_convolution_layer_37_p1Dimensions[4] = {3,3,144,288};
+    vx_size org_khronos_nn_extension_convolution_layer_37_p2Dimensions[1] = {288};
+    vx_size org_khronos_nn_extension_convolution_layer_37_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_37_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_37_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_37_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_37_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_37_p8Dimensions[4] = {14,14,288,1};
+    vx_size org_khronos_nn_extension_convolution_layer_35_p1Dimensions[4] = {5,5,32,64};
+    vx_size org_khronos_nn_extension_convolution_layer_35_p2Dimensions[1] = {64};
+    vx_size org_khronos_nn_extension_convolution_layer_35_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_35_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_35_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_35_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_35_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_35_p8Dimensions[4] = {14,14,64,1};
+    vx_enum org_khronos_nn_extension_activation_layer_33_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_33_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_33_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_33_p4_view_view_start[4] = {0,0,464,0};
+    vx_size org_khronos_nn_extension_activation_layer_33_p4_view_view_end[4] = {14,14,528,1};
+    vx_enum org_khronos_nn_extension_activation_layer_37_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_37_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_37_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_37_p4_view_view_start[4] = {0,0,112,0};
+    vx_size org_khronos_nn_extension_activation_layer_37_p4_view_view_end[4] = {14,14,400,1};
+    vx_enum org_khronos_nn_extension_activation_layer_35_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_35_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_35_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_35_p4_view_view_start[4] = {0,0,400,0};
+    vx_size org_khronos_nn_extension_activation_layer_35_p4_view_view_end[4] = {14,14,464,1};
+    vx_size org_khronos_nn_extension_convolution_layer_44_p1Dimensions[4] = {1,1,528,256};
+    vx_size org_khronos_nn_extension_convolution_layer_44_p2Dimensions[1] = {256};
+    vx_size org_khronos_nn_extension_convolution_layer_44_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_44_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_44_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_44_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_44_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_44_p8Dimensions[4] = {14,14,256,1};
+    vx_size org_khronos_nn_extension_convolution_layer_42_p1Dimensions[4] = {1,1,528,160};
+    vx_size org_khronos_nn_extension_convolution_layer_42_p2Dimensions[1] = {160};
+    vx_size org_khronos_nn_extension_convolution_layer_42_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_42_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_42_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_42_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_42_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_42_p8Dimensions[4] = {14,14,160,1};
+    vx_size org_khronos_nn_extension_convolution_layer_40_p1Dimensions[4] = {1,1,528,32};
+    vx_size org_khronos_nn_extension_convolution_layer_40_p2Dimensions[1] = {32};
+    vx_size org_khronos_nn_extension_convolution_layer_40_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_40_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_40_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_40_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_40_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_40_p8Dimensions[4] = {14,14,32,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_9_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_9_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_9_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_9_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_9_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_9_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_9_p7Dimensions[4] = {14,14,528,1};
+    vx_enum org_khronos_nn_extension_activation_layer_44_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_44_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_44_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_44_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_44_p4_view_view_end[4] = {14,14,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_42_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_42_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_42_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_42_p4Dimensions[4] = {14,14,160,1};
+    vx_enum org_khronos_nn_extension_activation_layer_40_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_40_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_40_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_40_p4Dimensions[4] = {14,14,32,1};
+    vx_size org_khronos_nn_extension_convolution_layer_39_p1Dimensions[4] = {1,1,528,128};
+    vx_size org_khronos_nn_extension_convolution_layer_39_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_39_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_39_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_39_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_39_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_39_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_39_p8Dimensions[4] = {14,14,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_43_p1Dimensions[4] = {3,3,160,320};
+    vx_size org_khronos_nn_extension_convolution_layer_43_p2Dimensions[1] = {320};
+    vx_size org_khronos_nn_extension_convolution_layer_43_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_43_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_43_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_43_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_43_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_43_p8Dimensions[4] = {14,14,320,1};
+    vx_size org_khronos_nn_extension_convolution_layer_41_p1Dimensions[4] = {5,5,32,128};
+    vx_size org_khronos_nn_extension_convolution_layer_41_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_41_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_41_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_41_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_41_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_41_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_41_p8Dimensions[4] = {14,14,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_39_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_39_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_39_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_39_p4_view_view_start[4] = {0,0,704,0};
+    vx_size org_khronos_nn_extension_activation_layer_39_p4_view_view_end[4] = {14,14,832,1};
+    vx_enum org_khronos_nn_extension_activation_layer_43_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_43_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_43_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_43_p4_view_view_start[4] = {0,0,256,0};
+    vx_size org_khronos_nn_extension_activation_layer_43_p4_view_view_end[4] = {14,14,576,1};
+    vx_enum org_khronos_nn_extension_activation_layer_41_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_41_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_41_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_41_p4_view_view_start[4] = {0,0,576,0};
+    vx_size org_khronos_nn_extension_activation_layer_41_p4_view_view_end[4] = {14,14,704,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_10_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_10_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_10_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_10_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_10_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_10_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_10_p7Dimensions[4] = {7,7,832,1};
+    vx_size org_khronos_nn_extension_convolution_layer_50_p1Dimensions[4] = {1,1,832,256};
+    vx_size org_khronos_nn_extension_convolution_layer_50_p2Dimensions[1] = {256};
+    vx_size org_khronos_nn_extension_convolution_layer_50_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_50_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_50_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_50_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_50_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_50_p8Dimensions[4] = {7,7,256,1};
+    vx_size org_khronos_nn_extension_convolution_layer_48_p1Dimensions[4] = {1,1,832,160};
+    vx_size org_khronos_nn_extension_convolution_layer_48_p2Dimensions[1] = {160};
+    vx_size org_khronos_nn_extension_convolution_layer_48_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_48_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_48_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_48_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_48_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_48_p8Dimensions[4] = {7,7,160,1};
+    vx_size org_khronos_nn_extension_convolution_layer_46_p1Dimensions[4] = {1,1,832,32};
+    vx_size org_khronos_nn_extension_convolution_layer_46_p2Dimensions[1] = {32};
+    vx_size org_khronos_nn_extension_convolution_layer_46_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_46_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_46_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_46_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_46_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_46_p8Dimensions[4] = {7,7,32,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_11_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_11_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_11_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_11_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_11_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_11_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_11_p7Dimensions[4] = {7,7,832,1};
+    vx_enum org_khronos_nn_extension_activation_layer_50_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_50_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_50_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_50_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_50_p4_view_view_end[4] = {7,7,256,1};
+    vx_enum org_khronos_nn_extension_activation_layer_48_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_48_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_48_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_48_p4Dimensions[4] = {7,7,160,1};
+    vx_enum org_khronos_nn_extension_activation_layer_46_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_46_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_46_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_46_p4Dimensions[4] = {7,7,32,1};
+    vx_size org_khronos_nn_extension_convolution_layer_45_p1Dimensions[4] = {1,1,832,128};
+    vx_size org_khronos_nn_extension_convolution_layer_45_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_45_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_45_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_45_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_45_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_45_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_45_p8Dimensions[4] = {7,7,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_49_p1Dimensions[4] = {3,3,160,320};
+    vx_size org_khronos_nn_extension_convolution_layer_49_p2Dimensions[1] = {320};
+    vx_size org_khronos_nn_extension_convolution_layer_49_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_49_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_49_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_49_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_49_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_49_p8Dimensions[4] = {7,7,320,1};
+    vx_size org_khronos_nn_extension_convolution_layer_47_p1Dimensions[4] = {5,5,32,128};
+    vx_size org_khronos_nn_extension_convolution_layer_47_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_47_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_47_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_47_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_47_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_47_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_47_p8Dimensions[4] = {7,7,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_45_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_45_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_45_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_45_p4_view_view_start[4] = {0,0,704,0};
+    vx_size org_khronos_nn_extension_activation_layer_45_p4_view_view_end[4] = {7,7,832,1};
+    vx_enum org_khronos_nn_extension_activation_layer_49_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_49_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_49_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_49_p4_view_view_start[4] = {0,0,256,0};
+    vx_size org_khronos_nn_extension_activation_layer_49_p4_view_view_end[4] = {7,7,576,1};
+    vx_enum org_khronos_nn_extension_activation_layer_47_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_47_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_47_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_47_p4_view_view_start[4] = {0,0,576,0};
+    vx_size org_khronos_nn_extension_activation_layer_47_p4_view_view_end[4] = {7,7,704,1};
+    vx_size org_khronos_nn_extension_convolution_layer_56_p1Dimensions[4] = {1,1,832,384};
+    vx_size org_khronos_nn_extension_convolution_layer_56_p2Dimensions[1] = {384};
+    vx_size org_khronos_nn_extension_convolution_layer_56_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_56_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_56_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_56_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_56_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_56_p8Dimensions[4] = {7,7,384,1};
+    vx_size org_khronos_nn_extension_convolution_layer_54_p1Dimensions[4] = {1,1,832,192};
+    vx_size org_khronos_nn_extension_convolution_layer_54_p2Dimensions[1] = {192};
+    vx_size org_khronos_nn_extension_convolution_layer_54_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_54_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_54_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_54_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_54_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_54_p8Dimensions[4] = {7,7,192,1};
+    vx_size org_khronos_nn_extension_convolution_layer_52_p1Dimensions[4] = {1,1,832,48};
+    vx_size org_khronos_nn_extension_convolution_layer_52_p2Dimensions[1] = {48};
+    vx_size org_khronos_nn_extension_convolution_layer_52_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_52_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_52_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_52_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_52_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_52_p8Dimensions[4] = {7,7,48,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_12_scalar_p1 = VX_NN_POOLING_MAX;
+    vx_size org_khronos_nn_extension_pooling_layer_12_scalar_p2 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_12_scalar_p3 = 3;
+    vx_size org_khronos_nn_extension_pooling_layer_12_scalar_p4 = 1;
+    vx_size org_khronos_nn_extension_pooling_layer_12_scalar_p5 = 1;
+    vx_enum org_khronos_nn_extension_pooling_layer_12_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_12_p7Dimensions[4] = {7,7,832,1};
+    vx_enum org_khronos_nn_extension_activation_layer_56_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_56_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_56_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_56_p4_view_view_start[4] = {0,0,0,0};
+    vx_size org_khronos_nn_extension_activation_layer_56_p4_view_view_end[4] = {7,7,384,1};
+    vx_enum org_khronos_nn_extension_activation_layer_54_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_54_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_54_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_54_p4Dimensions[4] = {7,7,192,1};
+    vx_enum org_khronos_nn_extension_activation_layer_52_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_52_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_52_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_52_p4Dimensions[4] = {7,7,48,1};
+    vx_size org_khronos_nn_extension_convolution_layer_51_p1Dimensions[4] = {1,1,832,128};
+    vx_size org_khronos_nn_extension_convolution_layer_51_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_51_scalar_p3 = 0;
+    vx_size org_khronos_nn_extension_convolution_layer_51_scalar_p4 = 0;
+    vx_enum org_khronos_nn_extension_convolution_layer_51_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_51_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_51_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_51_p8Dimensions[4] = {7,7,128,1};
+    vx_size org_khronos_nn_extension_convolution_layer_55_p1Dimensions[4] = {3,3,192,384};
+    vx_size org_khronos_nn_extension_convolution_layer_55_p2Dimensions[1] = {384};
+    vx_size org_khronos_nn_extension_convolution_layer_55_scalar_p3 = 1;
+    vx_size org_khronos_nn_extension_convolution_layer_55_scalar_p4 = 1;
+    vx_enum org_khronos_nn_extension_convolution_layer_55_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_55_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_55_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_55_p8Dimensions[4] = {7,7,384,1};
+    vx_size org_khronos_nn_extension_convolution_layer_53_p1Dimensions[4] = {5,5,48,128};
+    vx_size org_khronos_nn_extension_convolution_layer_53_p2Dimensions[1] = {128};
+    vx_size org_khronos_nn_extension_convolution_layer_53_scalar_p3 = 2;
+    vx_size org_khronos_nn_extension_convolution_layer_53_scalar_p4 = 2;
+    vx_enum org_khronos_nn_extension_convolution_layer_53_scalar_p5 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_convolution_layer_53_scalar_p6 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_enum org_khronos_nn_extension_convolution_layer_53_scalar_p7 = VX_NN_DS_SIZE_ROUNDING_FLOOR;
+    vx_size org_khronos_nn_extension_convolution_layer_53_p8Dimensions[4] = {7,7,128,1};
+    vx_enum org_khronos_nn_extension_activation_layer_51_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_51_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_51_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_51_p4_view_view_start[4] = {0,0,896,0};
+    vx_size org_khronos_nn_extension_activation_layer_51_p4_view_view_end[4] = {7,7,1024,1};
+    vx_enum org_khronos_nn_extension_activation_layer_55_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_55_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_55_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_55_p4_view_view_start[4] = {0,0,384,0};
+    vx_size org_khronos_nn_extension_activation_layer_55_p4_view_view_end[4] = {7,7,768,1};
+    vx_enum org_khronos_nn_extension_activation_layer_53_scalar_p1 = VX_NN_ACTIVATION_RELU;
+    vx_float32 org_khronos_nn_extension_activation_layer_53_scalar_p2 = 1.0;
+    vx_float32 org_khronos_nn_extension_activation_layer_53_scalar_p3 = 0.0;
+    vx_size org_khronos_nn_extension_activation_layer_53_p4_view_view_start[4] = {0,0,768,0};
+    vx_size org_khronos_nn_extension_activation_layer_53_p4_view_view_end[4] = {7,7,896,1};
+    vx_enum org_khronos_nn_extension_pooling_layer_13_scalar_p1 = VX_NN_POOLING_AVG;
+    vx_size org_khronos_nn_extension_pooling_layer_13_scalar_p2 = 7;
+    vx_size org_khronos_nn_extension_pooling_layer_13_scalar_p3 = 7;
+    vx_size org_khronos_nn_extension_pooling_layer_13_scalar_p4 = 0;
+    vx_size org_khronos_nn_extension_pooling_layer_13_scalar_p5 = 0;
+    vx_enum org_khronos_nn_extension_pooling_layer_13_scalar_p6 = VX_NN_DS_SIZE_ROUNDING_CEILING;
+    vx_size org_khronos_nn_extension_pooling_layer_13_p7Dimensions[4] = {1,1,1024,1};
+    vx_size org_khronos_nn_extension_fully_connected_layer_0_p1Dimensions[4] = {1,1,1024,1000};
+    vx_size org_khronos_nn_extension_fully_connected_layer_0_p2Dimensions[1] = {1000};
+    vx_enum org_khronos_nn_extension_fully_connected_layer_0_scalar_p3 = VX_CONVERT_POLICY_WRAP;
+    vx_enum org_khronos_nn_extension_fully_connected_layer_0_scalar_p4 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_size org_khronos_nn_extension_fully_connected_layer_0_p5Dimensions[2] = {1000,1};
+    vx_size org_khronos_openvx_tensor_multiply_0_p1Dimensions[2] = {1,1};
+    vx_float32 org_khronos_openvx_tensor_multiply_0_scalar_p2 = 8;
+    vx_enum org_khronos_openvx_tensor_multiply_0_scalar_p3 = VX_CONVERT_POLICY_SATURATE;
+    vx_enum org_khronos_openvx_tensor_multiply_0_scalar_p4 = VX_ROUND_POLICY_TO_NEAREST_EVEN;
+    vx_size org_khronos_openvx_tensor_multiply_0_p5Dimensions[2] = {1000,1};
+    vx_size org_khronos_nn_extension_softmax_layer_0_p1Dimensions[2] = {1000,1};
+    vx_nn_convolution_params_t org_khronos_nn_extension_convolution_0_p3 = {0,0,VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_NEAREST_EVEN, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0};
+    vx_nn_convolution_params_t org_khronos_nn_extension_convolution_1_p3 = {1,1,VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_NEAREST_EVEN, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0};
+    vx_nn_convolution_params_t org_khronos_nn_extension_convolution_2_p3 = {2,2,VX_CONVERT_POLICY_WRAP, VX_ROUND_POLICY_TO_NEAREST_EVEN, VX_NN_DS_SIZE_ROUNDING_FLOOR, 0, 0};
+
+
+    //
+    // Kernel Assignments
+    //
+//    org_khronos_nn_extension_convolution_layer_Kernel = vxGetKernelByName(context, "org.khronos.nn_extension.convolution_layer");
+//    if(!org_khronos_nn_extension_convolution_layer_Kernel)
+//    {
+//        WriteLog("ERROR: cannot get kernel org.khronos.nn_extension.convolution_layer\n");
+//        return VX_FAILURE;
+//    }
+//    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_Kernel, VX_TYPE_KERNEL, 0);
+    org_khronos_nn_extension_activation_layer_Kernel = vxGetKernelByName(context, "org.khronos.nn_extension.activation_layer");
+    if(!org_khronos_nn_extension_activation_layer_Kernel)
+    {
+        WriteLog("ERROR: cannot get kernel org.khronos.nn_extension.activation_layer\n");
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_Kernel, VX_TYPE_KERNEL, 0);
+    org_khronos_nn_extension_pooling_layer_Kernel = vxGetKernelByName(context, "org.khronos.nn_extension.pooling_layer");
+    if(!org_khronos_nn_extension_pooling_layer_Kernel)
+    {
+        WriteLog("ERROR: cannot get kernel org.khronos.nn_extension.pooling_layer\n");
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_Kernel, VX_TYPE_KERNEL, 0);
+    org_khronos_nn_extension_normalization_layer_Kernel = vxGetKernelByName(context, "org.khronos.nn_extension.normalization_layer");
+    if(!org_khronos_nn_extension_normalization_layer_Kernel)
+    {
+        WriteLog("ERROR: cannot get kernel org.khronos.nn_extension.normalization_layer\n");
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_Kernel, VX_TYPE_KERNEL, 0);
+    org_khronos_nn_extension_fully_connected_layer_Kernel = vxGetKernelByName(context, "org.khronos.nn_extension.fully_connected_layer");
+    if(!org_khronos_nn_extension_fully_connected_layer_Kernel)
+    {
+        WriteLog("ERROR: cannot get kernel org.khronos.nn_extension.fully_connected_layer\n");
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_Kernel, VX_TYPE_KERNEL, 0);
+    org_khronos_openvx_tensor_multiply_Kernel = vxGetKernelByName(context, "org.khronos.openvx.tensor_multiply");
+    if(!org_khronos_openvx_tensor_multiply_Kernel)
+    {
+        WriteLog("ERROR: cannot get kernel org.khronos.openvx.tensor_multiply\n");
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_openvx_tensor_multiply_Kernel, VX_TYPE_KERNEL, 0);
+    org_khronos_nn_extension_softmax_layer_Kernel = vxGetKernelByName(context, "org.khronos.nn_extension.softmax_layer");
+    if(!org_khronos_nn_extension_softmax_layer_Kernel)
+    {
+        WriteLog("ERROR: cannot get kernel org.khronos.nn_extension.softmax_layer\n");
+        return VX_FAILURE;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_softmax_layer_Kernel, VX_TYPE_KERNEL, 0);
+
+
+    //
+    // Primitive Assignments
+    //
+    outputAllocators_MergeTensor_8_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_8_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_8_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_8_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_8_p0, VX_TYPE_TENSOR, "pool5_7x7_s1_0");
+
+    outputAllocators_MergeTensor_7_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_7_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_7_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_7_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_7_p0, VX_TYPE_TENSOR, "inception_5b_1x1_0");
+
+    outputAllocators_MergeTensor_6_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_6_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_6_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_6_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_6_p0, VX_TYPE_TENSOR, "pool4_3x3_s2_0");
+
+    outputAllocators_MergeTensor_5_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_5_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_5_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_5_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_5_p0, VX_TYPE_TENSOR, "inception_4e_1x1_0");
+
+    outputAllocators_MergeTensor_4_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_4_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_4_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_4_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_4_p0, VX_TYPE_TENSOR, "inception_4d_1x1_0");
+
+    outputAllocators_MergeTensor_3_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_3_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_3_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_3_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_3_p0, VX_TYPE_TENSOR, "inception_4c_1x1_0");
+
+    outputAllocators_MergeTensor_2_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_2_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_2_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_2_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_2_p0, VX_TYPE_TENSOR, "inception_4b_1x1_0");
+
+    outputAllocators_MergeTensor_1_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_1_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_1_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_1_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_1_p0, VX_TYPE_TENSOR, "pool3_3x3_s2_0");
+
+    outputAllocators_MergeTensor_0_p0 = vxCreateTensor(context, 4, outputAllocators_MergeTensor_0_p0Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)outputAllocators_MergeTensor_0_p0);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter outputAllocators_MergeTensor_0_p0 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)outputAllocators_MergeTensor_0_p0, VX_TYPE_TENSOR, "inception_3b_1x1_0");
+
+    org_khronos_nn_extension_activation_layer_0_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_0_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p1, VX_TYPE_SCALAR, "conv1_relu_7x7_1");
+
+    org_khronos_nn_extension_activation_layer_0_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_0_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p2, VX_TYPE_SCALAR, "conv1_relu_7x7_2");
+
+    org_khronos_nn_extension_activation_layer_0_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_0_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p3, VX_TYPE_SCALAR, "conv1_relu_7x7_2");
+
+    org_khronos_nn_extension_activation_layer_0_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_0_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_0_p4, VX_TYPE_TENSOR, "conv1_relu_7x7_4");
+
+    org_khronos_nn_extension_pooling_layer_0_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p1, VX_TYPE_SCALAR, "pool1_3x3_s2_1");
+
+    org_khronos_nn_extension_pooling_layer_0_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p2, VX_TYPE_SCALAR, "pool1_3x3_s2_2");
+
+    org_khronos_nn_extension_pooling_layer_0_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p3, VX_TYPE_SCALAR, "pool1_3x3_s2_3");
+
+    org_khronos_nn_extension_pooling_layer_0_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p4, VX_TYPE_SCALAR, "pool1_3x3_s2_4");
+
+    org_khronos_nn_extension_pooling_layer_0_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p5, VX_TYPE_SCALAR, "pool1_3x3_s2_5");
+
+    org_khronos_nn_extension_pooling_layer_0_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_0_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p6, VX_TYPE_SCALAR, "pool1_3x3_s2_6");
+
+    org_khronos_nn_extension_pooling_layer_0_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_0_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_0_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_0_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p7, VX_TYPE_TENSOR, "pool1_3x3_s2_7");
+
+    org_khronos_nn_extension_normalization_layer_0_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p1, VX_TYPE_SCALAR, "pool1_norm1_1");
+
+    org_khronos_nn_extension_normalization_layer_0_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p2, VX_TYPE_SCALAR, "pool1_norm1_2");
+
+    org_khronos_nn_extension_normalization_layer_0_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p3, VX_TYPE_SCALAR, "pool1_norm1_3");
+
+    org_khronos_nn_extension_normalization_layer_0_p4 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_0_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p4, VX_TYPE_SCALAR, "pool1_norm1_4");
+
+    org_khronos_nn_extension_normalization_layer_0_p5 = vxCreateTensor(context, 4, org_khronos_nn_extension_normalization_layer_0_p5Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p5, VX_TYPE_TENSOR, "pool1_norm1_5");
+
+    org_khronos_nn_extension_convolution_layer_1_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_1_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p1, VX_TYPE_TENSOR, "conv2_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_1_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_1_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p2, VX_TYPE_TENSOR, "conv2_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_1_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p3, VX_TYPE_SCALAR, "conv2_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_1_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p4, VX_TYPE_SCALAR, "conv2_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_1_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p5, VX_TYPE_SCALAR, "conv2_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_1_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p6, VX_TYPE_SCALAR, "conv2_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_1_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_1_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p7, VX_TYPE_SCALAR, "conv2_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_1_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_1_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_1_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p8, VX_TYPE_TENSOR, "conv2_3x3_reduce_8");
+
+    org_khronos_nn_extension_activation_layer_1_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_1_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p1, VX_TYPE_SCALAR, "conv2_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_1_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_1_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p2, VX_TYPE_SCALAR, "conv2_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_1_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_1_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p3, VX_TYPE_SCALAR, "conv2_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_1_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_1_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_1_p4, VX_TYPE_TENSOR, "conv2_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_2_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_2_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p1, VX_TYPE_TENSOR, "conv2_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_2_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_2_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p2, VX_TYPE_TENSOR, "conv2_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_2_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p3, VX_TYPE_SCALAR, "conv2_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_2_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p4, VX_TYPE_SCALAR, "conv2_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_2_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p5, VX_TYPE_SCALAR, "conv2_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_2_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p6, VX_TYPE_SCALAR, "conv2_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_2_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_2_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p7, VX_TYPE_SCALAR, "conv2_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_2_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_2_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_2_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p8, VX_TYPE_TENSOR, "conv2_3x3_8");
+
+    org_khronos_nn_extension_activation_layer_2_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_2_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p1, VX_TYPE_SCALAR, "conv2_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_2_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_2_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p2, VX_TYPE_SCALAR, "conv2_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_2_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_2_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p3, VX_TYPE_SCALAR, "conv2_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_2_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_2_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_2_p4, VX_TYPE_TENSOR, "conv2_relu_3x3_4");
+
+    org_khronos_nn_extension_normalization_layer_1_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p1, VX_TYPE_SCALAR, "conv2_norm2_1");
+
+    org_khronos_nn_extension_normalization_layer_1_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p2, VX_TYPE_SCALAR, "conv2_norm2_2");
+
+    org_khronos_nn_extension_normalization_layer_1_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p3, VX_TYPE_SCALAR, "conv2_norm2_3");
+
+    org_khronos_nn_extension_normalization_layer_1_p4 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_normalization_layer_1_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p4, VX_TYPE_SCALAR, "conv2_norm2_4");
+
+    org_khronos_nn_extension_normalization_layer_1_p5 = vxCreateTensor(context, 4, org_khronos_nn_extension_normalization_layer_1_p5Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_normalization_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_normalization_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p5, VX_TYPE_TENSOR, "conv2_norm2_5");
+
+    org_khronos_nn_extension_pooling_layer_1_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p1, VX_TYPE_SCALAR, "pool2_3x3_s2_1");
+
+    org_khronos_nn_extension_pooling_layer_1_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p2, VX_TYPE_SCALAR, "pool2_3x3_s2_2");
+
+    org_khronos_nn_extension_pooling_layer_1_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p3, VX_TYPE_SCALAR, "pool2_3x3_s2_3");
+
+    org_khronos_nn_extension_pooling_layer_1_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p4, VX_TYPE_SCALAR, "pool2_3x3_s2_4");
+
+    org_khronos_nn_extension_pooling_layer_1_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p5, VX_TYPE_SCALAR, "pool2_3x3_s2_5");
+
+    org_khronos_nn_extension_pooling_layer_1_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_1_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p6, VX_TYPE_SCALAR, "pool2_3x3_s2_6");
+
+    org_khronos_nn_extension_pooling_layer_1_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_1_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_1_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7, VX_TYPE_TENSOR, "pool2_3x3_s2_7");
+
+    org_khronos_nn_extension_convolution_layer_8_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_8_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p1, VX_TYPE_TENSOR, "inception_3a_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_8_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_8_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p2, VX_TYPE_TENSOR, "inception_3a_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_8_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_8_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p3, VX_TYPE_SCALAR, "inception_3a_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_8_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_8_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p4, VX_TYPE_SCALAR, "inception_3a_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_8_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_8_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p5, VX_TYPE_SCALAR, "inception_3a_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_8_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_8_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p6, VX_TYPE_SCALAR, "inception_3a_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_8_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_8_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p7, VX_TYPE_SCALAR, "inception_3a_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_8_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_8_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_8_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p8, VX_TYPE_TENSOR, "inception_3a_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_6_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_6_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p1, VX_TYPE_TENSOR, "inception_3a_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_6_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_6_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p2, VX_TYPE_TENSOR, "inception_3a_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_6_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p3, VX_TYPE_SCALAR, "inception_3a_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_6_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p4, VX_TYPE_SCALAR, "inception_3a_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_6_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p5, VX_TYPE_SCALAR, "inception_3a_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_6_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p6, VX_TYPE_SCALAR, "inception_3a_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_6_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_6_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p7, VX_TYPE_SCALAR, "inception_3a_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_6_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_6_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_6_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p8, VX_TYPE_TENSOR, "inception_3a_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_4_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_4_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p1, VX_TYPE_TENSOR, "inception_3a_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_4_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_4_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p2, VX_TYPE_TENSOR, "inception_3a_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_4_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p3, VX_TYPE_SCALAR, "inception_3a_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_4_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p4, VX_TYPE_SCALAR, "inception_3a_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_4_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p5, VX_TYPE_SCALAR, "inception_3a_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_4_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p6, VX_TYPE_SCALAR, "inception_3a_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_4_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_4_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p7, VX_TYPE_SCALAR, "inception_3a_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_4_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_4_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_4_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p8, VX_TYPE_TENSOR, "inception_3a_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_2_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p1, VX_TYPE_SCALAR, "inception_3a_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_2_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p2, VX_TYPE_SCALAR, "inception_3a_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_2_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p3, VX_TYPE_SCALAR, "inception_3a_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_2_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p4, VX_TYPE_SCALAR, "inception_3a_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_2_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p5, VX_TYPE_SCALAR, "inception_3a_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_2_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_2_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p6, VX_TYPE_SCALAR, "inception_3a_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_2_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_2_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_2_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_2_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p7, VX_TYPE_TENSOR, "inception_3a_pool_7");
+
+    org_khronos_nn_extension_activation_layer_8_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_8_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_8_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_8_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_8_p1, VX_TYPE_SCALAR, "inception_3a_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_8_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_8_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_8_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_8_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_8_p2, VX_TYPE_SCALAR, "inception_3a_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_8_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_8_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_8_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_8_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_8_p3, VX_TYPE_SCALAR, "inception_3a_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_8_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_0_p0, 4, org_khronos_nn_extension_activation_layer_8_p4_view_view_start, org_khronos_nn_extension_activation_layer_8_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_8_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_8_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_8_p4, VX_TYPE_TENSOR, "inception_3a_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_6_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_6_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p1, VX_TYPE_SCALAR, "inception_3a_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_6_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_6_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p2, VX_TYPE_SCALAR, "inception_3a_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_6_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_6_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p3, VX_TYPE_SCALAR, "inception_3a_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_6_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_6_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_6_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_6_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_6_p4, VX_TYPE_TENSOR, "inception_3a_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_4_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_4_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p1, VX_TYPE_SCALAR, "inception_3a_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_4_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_4_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p2, VX_TYPE_SCALAR, "inception_3a_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_4_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_4_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p3, VX_TYPE_SCALAR, "inception_3a_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_4_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_4_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_4_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_4_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_4_p4, VX_TYPE_TENSOR, "inception_3a_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_3_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_3_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p1, VX_TYPE_TENSOR, "inception_3a_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_3_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_3_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p2, VX_TYPE_TENSOR, "inception_3a_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_3_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p3, VX_TYPE_SCALAR, "inception_3a_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_3_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p4, VX_TYPE_SCALAR, "inception_3a_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_3_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p5, VX_TYPE_SCALAR, "inception_3a_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_3_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p6, VX_TYPE_SCALAR, "inception_3a_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_3_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_3_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p7, VX_TYPE_SCALAR, "inception_3a_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_3_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_3_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_3_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p8, VX_TYPE_TENSOR, "inception_3a_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_7_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_7_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p1, VX_TYPE_TENSOR, "inception_3a_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_7_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_7_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p2, VX_TYPE_TENSOR, "inception_3a_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_7_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p3, VX_TYPE_SCALAR, "inception_3a_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_7_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p4, VX_TYPE_SCALAR, "inception_3a_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_7_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p5, VX_TYPE_SCALAR, "inception_3a_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_7_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p6, VX_TYPE_SCALAR, "inception_3a_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_7_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_7_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p7, VX_TYPE_SCALAR, "inception_3a_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_7_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_7_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_7_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p8, VX_TYPE_TENSOR, "inception_3a_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_5_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_5_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p1, VX_TYPE_TENSOR, "inception_3a_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_5_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_5_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p2, VX_TYPE_TENSOR, "inception_3a_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_5_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p3, VX_TYPE_SCALAR, "inception_3a_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_5_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p4, VX_TYPE_SCALAR, "inception_3a_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_5_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p5, VX_TYPE_SCALAR, "inception_3a_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_5_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p6, VX_TYPE_SCALAR, "inception_3a_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_5_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_5_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p7, VX_TYPE_SCALAR, "inception_3a_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_5_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_5_p8Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_5_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p8, VX_TYPE_TENSOR, "inception_3a_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_3_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_3_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p1, VX_TYPE_SCALAR, "inception_3a_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_3_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_3_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p2, VX_TYPE_SCALAR, "inception_3a_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_3_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_3_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p3, VX_TYPE_SCALAR, "inception_3a_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_3_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_0_p0, 4, org_khronos_nn_extension_activation_layer_3_p4_view_view_start, org_khronos_nn_extension_activation_layer_3_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_3_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_3_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_3_p4, VX_TYPE_TENSOR, "inception_3a_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_7_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_7_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_7_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_7_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_7_p1, VX_TYPE_SCALAR, "inception_3a_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_7_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_7_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_7_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_7_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_7_p2, VX_TYPE_SCALAR, "inception_3a_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_7_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_7_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_7_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_7_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_7_p3, VX_TYPE_SCALAR, "inception_3a_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_7_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_0_p0, 4, org_khronos_nn_extension_activation_layer_7_p4_view_view_start, org_khronos_nn_extension_activation_layer_7_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_7_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_7_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_7_p4, VX_TYPE_TENSOR, "inception_3a_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_5_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_5_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p1, VX_TYPE_SCALAR, "inception_3a_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_5_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_5_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p2, VX_TYPE_SCALAR, "inception_3a_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_5_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_5_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p3, VX_TYPE_SCALAR, "inception_3a_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_5_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_0_p0, 4, org_khronos_nn_extension_activation_layer_5_p4_view_view_start, org_khronos_nn_extension_activation_layer_5_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_5_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_5_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_5_p4, VX_TYPE_TENSOR, "inception_3a_relu_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_14_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_14_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p1, VX_TYPE_TENSOR, "inception_3b_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_14_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_14_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p2, VX_TYPE_TENSOR, "inception_3b_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_14_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_14_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p3, VX_TYPE_SCALAR, "inception_3b_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_14_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_14_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p4, VX_TYPE_SCALAR, "inception_3b_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_14_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_14_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p5, VX_TYPE_SCALAR, "inception_3b_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_14_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_14_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p6, VX_TYPE_SCALAR, "inception_3b_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_14_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_14_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p7, VX_TYPE_SCALAR, "inception_3b_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_14_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_14_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_14_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p8, VX_TYPE_TENSOR, "inception_3b_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_12_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_12_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p1, VX_TYPE_TENSOR, "inception_3b_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_12_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_12_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p2, VX_TYPE_TENSOR, "inception_3b_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_12_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_12_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p3, VX_TYPE_SCALAR, "inception_3b_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_12_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_12_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p4, VX_TYPE_SCALAR, "inception_3b_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_12_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_12_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p5, VX_TYPE_SCALAR, "inception_3b_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_12_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_12_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p6, VX_TYPE_SCALAR, "inception_3b_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_12_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_12_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p7, VX_TYPE_SCALAR, "inception_3b_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_12_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_12_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_12_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p8, VX_TYPE_TENSOR, "inception_3b_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_10_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_10_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p1, VX_TYPE_TENSOR, "inception_3b_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_10_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_10_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p2, VX_TYPE_TENSOR, "inception_3b_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_10_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_10_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p3, VX_TYPE_SCALAR, "inception_3b_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_10_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_10_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p4, VX_TYPE_SCALAR, "inception_3b_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_10_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_10_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p5, VX_TYPE_SCALAR, "inception_3b_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_10_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_10_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p6, VX_TYPE_SCALAR, "inception_3b_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_10_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_10_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p7, VX_TYPE_SCALAR, "inception_3b_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_10_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_10_p8Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_10_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p8, VX_TYPE_TENSOR, "inception_3b_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_3_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_3_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p1, VX_TYPE_SCALAR, "inception_3b_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_3_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_3_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p2, VX_TYPE_SCALAR, "inception_3b_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_3_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_3_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p3, VX_TYPE_SCALAR, "inception_3b_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_3_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_3_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p4, VX_TYPE_SCALAR, "inception_3b_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_3_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_3_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p5, VX_TYPE_SCALAR, "inception_3b_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_3_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_3_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p6, VX_TYPE_SCALAR, "inception_3b_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_3_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_3_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_3_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_3_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p7, VX_TYPE_TENSOR, "inception_3b_pool_7");
+
+    org_khronos_nn_extension_activation_layer_14_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_14_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_14_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_14_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_14_p1, VX_TYPE_SCALAR, "inception_3b_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_14_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_14_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_14_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_14_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_14_p2, VX_TYPE_SCALAR, "inception_3b_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_14_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_14_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_14_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_14_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_14_p3, VX_TYPE_SCALAR, "inception_3b_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_14_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_1_p0, 4, org_khronos_nn_extension_activation_layer_14_p4_view_view_start, org_khronos_nn_extension_activation_layer_14_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_14_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_14_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_14_p4, VX_TYPE_TENSOR, "inception_3b_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_12_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_12_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_12_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_12_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_12_p1, VX_TYPE_SCALAR, "inception_3b_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_12_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_12_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_12_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_12_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_12_p2, VX_TYPE_SCALAR, "inception_3b_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_12_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_12_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_12_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_12_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_12_p3, VX_TYPE_SCALAR, "inception_3b_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_12_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_12_p4Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_12_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_12_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_12_p4, VX_TYPE_TENSOR, "inception_3b_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_10_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_10_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_10_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_10_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_10_p1, VX_TYPE_SCALAR, "inception_3b_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_10_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_10_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_10_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_10_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_10_p2, VX_TYPE_SCALAR, "inception_3b_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_10_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_10_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_10_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_10_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_10_p3, VX_TYPE_SCALAR, "inception_3b_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_10_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_10_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_10_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_10_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_10_p4, VX_TYPE_TENSOR, "inception_3b_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_9_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_9_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p1, VX_TYPE_TENSOR, "inception_3b_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_9_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_9_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p2, VX_TYPE_TENSOR, "inception_3b_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_9_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_9_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p3, VX_TYPE_SCALAR, "inception_3b_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_9_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_9_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p4, VX_TYPE_SCALAR, "inception_3b_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_9_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_9_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p5, VX_TYPE_SCALAR, "inception_3b_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_9_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_9_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p6, VX_TYPE_SCALAR, "inception_3b_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_9_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_9_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p7, VX_TYPE_SCALAR, "inception_3b_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_9_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_9_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_9_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p8, VX_TYPE_TENSOR, "inception_3b_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_13_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_13_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p1, VX_TYPE_TENSOR, "inception_3b_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_13_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_13_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p2, VX_TYPE_TENSOR, "inception_3b_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_13_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_13_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p3, VX_TYPE_SCALAR, "inception_3b_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_13_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_13_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p4, VX_TYPE_SCALAR, "inception_3b_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_13_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_13_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p5, VX_TYPE_SCALAR, "inception_3b_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_13_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_13_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p6, VX_TYPE_SCALAR, "inception_3b_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_13_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_13_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p7, VX_TYPE_SCALAR, "inception_3b_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_13_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_13_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_13_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p8, VX_TYPE_TENSOR, "inception_3b_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_11_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_11_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p1, VX_TYPE_TENSOR, "inception_3b_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_11_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_11_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p2, VX_TYPE_TENSOR, "inception_3b_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_11_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_11_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p3, VX_TYPE_SCALAR, "inception_3b_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_11_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_11_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p4, VX_TYPE_SCALAR, "inception_3b_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_11_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_11_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p5, VX_TYPE_SCALAR, "inception_3b_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_11_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_11_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p6, VX_TYPE_SCALAR, "inception_3b_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_11_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_11_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p7, VX_TYPE_SCALAR, "inception_3b_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_11_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_11_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_11_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p8, VX_TYPE_TENSOR, "inception_3b_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_9_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_9_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_9_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_9_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_9_p1, VX_TYPE_SCALAR, "inception_3b_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_9_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_9_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_9_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_9_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_9_p2, VX_TYPE_SCALAR, "inception_3b_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_9_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_9_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_9_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_9_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_9_p3, VX_TYPE_SCALAR, "inception_3b_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_9_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_1_p0, 4, org_khronos_nn_extension_activation_layer_9_p4_view_view_start, org_khronos_nn_extension_activation_layer_9_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_9_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_9_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_9_p4, VX_TYPE_TENSOR, "inception_3b_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_13_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_13_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_13_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_13_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_13_p1, VX_TYPE_SCALAR, "inception_3b_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_13_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_13_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_13_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_13_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_13_p2, VX_TYPE_SCALAR, "inception_3b_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_13_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_13_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_13_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_13_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_13_p3, VX_TYPE_SCALAR, "inception_3b_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_13_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_1_p0, 4, org_khronos_nn_extension_activation_layer_13_p4_view_view_start, org_khronos_nn_extension_activation_layer_13_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_13_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_13_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_13_p4, VX_TYPE_TENSOR, "inception_3b_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_11_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_11_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_11_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_11_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_11_p1, VX_TYPE_SCALAR, "inception_3b_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_11_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_11_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_11_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_11_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_11_p2, VX_TYPE_SCALAR, "inception_3b_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_11_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_11_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_11_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_11_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_11_p3, VX_TYPE_SCALAR, "inception_3b_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_11_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_1_p0, 4, org_khronos_nn_extension_activation_layer_11_p4_view_view_start, org_khronos_nn_extension_activation_layer_11_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_11_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_11_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_11_p4, VX_TYPE_TENSOR, "inception_3b_relu_5x5_4");
+
+    org_khronos_nn_extension_pooling_layer_4_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_4_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p1, VX_TYPE_SCALAR, "pool3_3x3_s2_1");
+
+    org_khronos_nn_extension_pooling_layer_4_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_4_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p2, VX_TYPE_SCALAR, "pool3_3x3_s2_2");
+
+    org_khronos_nn_extension_pooling_layer_4_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_4_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p3, VX_TYPE_SCALAR, "pool3_3x3_s2_3");
+
+    org_khronos_nn_extension_pooling_layer_4_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_4_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p4, VX_TYPE_SCALAR, "pool3_3x3_s2_4");
+
+    org_khronos_nn_extension_pooling_layer_4_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_4_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p5, VX_TYPE_SCALAR, "pool3_3x3_s2_5");
+
+    org_khronos_nn_extension_pooling_layer_4_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_4_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p6, VX_TYPE_SCALAR, "pool3_3x3_s2_6");
+
+    org_khronos_nn_extension_pooling_layer_4_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_4_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_4_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_4_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p7, VX_TYPE_TENSOR, "pool3_3x3_s2_7");
+
+    org_khronos_nn_extension_convolution_layer_20_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_20_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p1, VX_TYPE_TENSOR, "inception_4a_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_20_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_20_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p2, VX_TYPE_TENSOR, "inception_4a_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_20_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_20_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p3, VX_TYPE_SCALAR, "inception_4a_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_20_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_20_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p4, VX_TYPE_SCALAR, "inception_4a_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_20_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_20_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p5, VX_TYPE_SCALAR, "inception_4a_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_20_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_20_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p6, VX_TYPE_SCALAR, "inception_4a_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_20_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_20_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p7, VX_TYPE_SCALAR, "inception_4a_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_20_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_20_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_20_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p8, VX_TYPE_TENSOR, "inception_4a_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_18_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_18_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p1, VX_TYPE_TENSOR, "inception_4a_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_18_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_18_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p2, VX_TYPE_TENSOR, "inception_4a_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_18_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_18_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p3, VX_TYPE_SCALAR, "inception_4a_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_18_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_18_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p4, VX_TYPE_SCALAR, "inception_4a_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_18_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_18_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p5, VX_TYPE_SCALAR, "inception_4a_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_18_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_18_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p6, VX_TYPE_SCALAR, "inception_4a_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_18_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_18_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p7, VX_TYPE_SCALAR, "inception_4a_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_18_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_18_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_18_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p8, VX_TYPE_TENSOR, "inception_4a_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_16_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_16_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p1, VX_TYPE_TENSOR, "inception_4a_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_16_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_16_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p2, VX_TYPE_TENSOR, "inception_4a_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_16_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_16_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p3, VX_TYPE_SCALAR, "inception_4a_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_16_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_16_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p4, VX_TYPE_SCALAR, "inception_4a_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_16_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_16_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p5, VX_TYPE_SCALAR, "inception_4a_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_16_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_16_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p6, VX_TYPE_SCALAR, "inception_4a_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_16_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_16_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p7, VX_TYPE_SCALAR, "inception_4a_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_16_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_16_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_16_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p8, VX_TYPE_TENSOR, "inception_4a_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_5_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_5_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p1, VX_TYPE_SCALAR, "inception_4a_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_5_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_5_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p2, VX_TYPE_SCALAR, "inception_4a_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_5_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_5_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p3, VX_TYPE_SCALAR, "inception_4a_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_5_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_5_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p4, VX_TYPE_SCALAR, "inception_4a_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_5_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_5_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p5, VX_TYPE_SCALAR, "inception_4a_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_5_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_5_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p6, VX_TYPE_SCALAR, "inception_4a_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_5_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_5_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_5_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_5_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p7, VX_TYPE_TENSOR, "inception_4a_pool_7");
+
+    org_khronos_nn_extension_activation_layer_20_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_20_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_20_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_20_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_20_p1, VX_TYPE_SCALAR, "inception_4a_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_20_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_20_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_20_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_20_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_20_p2, VX_TYPE_SCALAR, "inception_4a_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_20_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_20_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_20_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_20_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_20_p3, VX_TYPE_SCALAR, "inception_4a_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_20_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_2_p0, 4, org_khronos_nn_extension_activation_layer_20_p4_view_view_start, org_khronos_nn_extension_activation_layer_20_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_20_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_20_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_20_p4, VX_TYPE_TENSOR, "inception_4a_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_18_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_18_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_18_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_18_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_18_p1, VX_TYPE_SCALAR, "inception_4a_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_18_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_18_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_18_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_18_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_18_p2, VX_TYPE_SCALAR, "inception_4a_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_18_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_18_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_18_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_18_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_18_p3, VX_TYPE_SCALAR, "inception_4a_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_18_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_18_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_18_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_18_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_18_p4, VX_TYPE_TENSOR, "inception_4a_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_16_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_16_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_16_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_16_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_16_p1, VX_TYPE_SCALAR, "inception_4a_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_16_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_16_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_16_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_16_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_16_p2, VX_TYPE_SCALAR, "inception_4a_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_16_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_16_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_16_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_16_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_16_p3, VX_TYPE_SCALAR, "inception_4a_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_16_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_16_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_16_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_16_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_16_p4, VX_TYPE_TENSOR, "inception_4a_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_15_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_15_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p1, VX_TYPE_TENSOR, "inception_4a_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_15_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_15_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p2, VX_TYPE_TENSOR, "inception_4a_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_15_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_15_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p3, VX_TYPE_SCALAR, "inception_4a_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_15_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_15_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p4, VX_TYPE_SCALAR, "inception_4a_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_15_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_15_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p5, VX_TYPE_SCALAR, "inception_4a_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_15_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_15_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p6, VX_TYPE_SCALAR, "inception_4a_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_15_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_15_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p7, VX_TYPE_SCALAR, "inception_4a_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_15_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_15_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_15_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p8, VX_TYPE_TENSOR, "inception_4a_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_19_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_19_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p1, VX_TYPE_TENSOR, "inception_4a_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_19_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_19_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p2, VX_TYPE_TENSOR, "inception_4a_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_19_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_19_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p3, VX_TYPE_SCALAR, "inception_4a_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_19_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_19_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p4, VX_TYPE_SCALAR, "inception_4a_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_19_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_19_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p5, VX_TYPE_SCALAR, "inception_4a_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_19_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_19_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p6, VX_TYPE_SCALAR, "inception_4a_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_19_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_19_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p7, VX_TYPE_SCALAR, "inception_4a_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_19_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_19_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_19_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p8, VX_TYPE_TENSOR, "inception_4a_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_17_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_17_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p1, VX_TYPE_TENSOR, "inception_4a_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_17_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_17_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p2, VX_TYPE_TENSOR, "inception_4a_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_17_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_17_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p3, VX_TYPE_SCALAR, "inception_4a_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_17_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_17_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p4, VX_TYPE_SCALAR, "inception_4a_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_17_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_17_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p5, VX_TYPE_SCALAR, "inception_4a_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_17_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_17_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p6, VX_TYPE_SCALAR, "inception_4a_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_17_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_17_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p7, VX_TYPE_SCALAR, "inception_4a_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_17_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_17_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_17_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p8, VX_TYPE_TENSOR, "inception_4a_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_15_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_15_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_15_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_15_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_15_p1, VX_TYPE_SCALAR, "inception_4a_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_15_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_15_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_15_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_15_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_15_p2, VX_TYPE_SCALAR, "inception_4a_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_15_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_15_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_15_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_15_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_15_p3, VX_TYPE_SCALAR, "inception_4a_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_15_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_2_p0, 4, org_khronos_nn_extension_activation_layer_15_p4_view_view_start, org_khronos_nn_extension_activation_layer_15_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_15_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_15_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_15_p4, VX_TYPE_TENSOR, "inception_4a_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_19_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_19_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_19_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_19_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_19_p1, VX_TYPE_SCALAR, "inception_4a_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_19_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_19_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_19_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_19_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_19_p2, VX_TYPE_SCALAR, "inception_4a_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_19_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_19_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_19_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_19_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_19_p3, VX_TYPE_SCALAR, "inception_4a_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_19_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_2_p0, 4, org_khronos_nn_extension_activation_layer_19_p4_view_view_start, org_khronos_nn_extension_activation_layer_19_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_19_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_19_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_19_p4, VX_TYPE_TENSOR, "inception_4a_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_17_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_17_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_17_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_17_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_17_p1, VX_TYPE_SCALAR, "inception_4a_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_17_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_17_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_17_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_17_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_17_p2, VX_TYPE_SCALAR, "inception_4a_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_17_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_17_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_17_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_17_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_17_p3, VX_TYPE_SCALAR, "inception_4a_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_17_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_2_p0, 4, org_khronos_nn_extension_activation_layer_17_p4_view_view_start, org_khronos_nn_extension_activation_layer_17_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_17_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_17_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_17_p4, VX_TYPE_TENSOR, "inception_4a_relu_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_26_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_26_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p1, VX_TYPE_TENSOR, "inception_4b_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_26_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_26_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p2, VX_TYPE_TENSOR, "inception_4b_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_26_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_26_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p3, VX_TYPE_SCALAR, "inception_4b_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_26_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_26_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p4, VX_TYPE_SCALAR, "inception_4b_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_26_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_26_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p5, VX_TYPE_SCALAR, "inception_4b_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_26_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_26_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p6, VX_TYPE_SCALAR, "inception_4b_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_26_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_26_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p7, VX_TYPE_SCALAR, "inception_4b_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_26_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_26_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_26_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p8, VX_TYPE_TENSOR, "inception_4b_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_24_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_24_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p1, VX_TYPE_TENSOR, "inception_4b_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_24_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_24_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p2, VX_TYPE_TENSOR, "inception_4b_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_24_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_24_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p3, VX_TYPE_SCALAR, "inception_4b_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_24_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_24_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p4, VX_TYPE_SCALAR, "inception_4b_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_24_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_24_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p5, VX_TYPE_SCALAR, "inception_4b_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_24_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_24_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p6, VX_TYPE_SCALAR, "inception_4b_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_24_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_24_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p7, VX_TYPE_SCALAR, "inception_4b_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_24_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_24_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_24_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p8, VX_TYPE_TENSOR, "inception_4b_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_22_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_22_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p1, VX_TYPE_TENSOR, "inception_4b_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_22_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_22_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p2, VX_TYPE_TENSOR, "inception_4b_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_22_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_22_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p3, VX_TYPE_SCALAR, "inception_4b_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_22_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_22_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p4, VX_TYPE_SCALAR, "inception_4b_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_22_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_22_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p5, VX_TYPE_SCALAR, "inception_4b_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_22_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_22_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p6, VX_TYPE_SCALAR, "inception_4b_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_22_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_22_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p7, VX_TYPE_SCALAR, "inception_4b_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_22_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_22_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_22_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p8, VX_TYPE_TENSOR, "inception_4b_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_6_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_6_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p1, VX_TYPE_SCALAR, "inception_4b_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_6_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_6_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p2, VX_TYPE_SCALAR, "inception_4b_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_6_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_6_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p3, VX_TYPE_SCALAR, "inception_4b_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_6_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_6_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p4, VX_TYPE_SCALAR, "inception_4b_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_6_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_6_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p5, VX_TYPE_SCALAR, "inception_4b_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_6_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_6_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p6, VX_TYPE_SCALAR, "inception_4b_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_6_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_6_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_6_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_6_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p7, VX_TYPE_TENSOR, "inception_4b_pool_7");
+
+    org_khronos_nn_extension_activation_layer_26_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_26_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_26_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_26_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_26_p1, VX_TYPE_SCALAR, "inception_4b_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_26_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_26_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_26_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_26_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_26_p2, VX_TYPE_SCALAR, "inception_4b_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_26_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_26_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_26_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_26_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_26_p3, VX_TYPE_SCALAR, "inception_4b_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_26_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_3_p0, 4, org_khronos_nn_extension_activation_layer_26_p4_view_view_start, org_khronos_nn_extension_activation_layer_26_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_26_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_26_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_26_p4, VX_TYPE_TENSOR, "inception_4b_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_24_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_24_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_24_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_24_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_24_p1, VX_TYPE_SCALAR, "inception_4b_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_24_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_24_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_24_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_24_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_24_p2, VX_TYPE_SCALAR, "inception_4b_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_24_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_24_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_24_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_24_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_24_p3, VX_TYPE_SCALAR, "inception_4b_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_24_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_24_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_24_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_24_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_24_p4, VX_TYPE_TENSOR, "inception_4b_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_22_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_22_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_22_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_22_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_22_p1, VX_TYPE_SCALAR, "inception_4b_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_22_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_22_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_22_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_22_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_22_p2, VX_TYPE_SCALAR, "inception_4b_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_22_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_22_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_22_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_22_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_22_p3, VX_TYPE_SCALAR, "inception_4b_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_22_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_22_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_22_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_22_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_22_p4, VX_TYPE_TENSOR, "inception_4b_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_21_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_21_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p1, VX_TYPE_TENSOR, "inception_4b_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_21_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_21_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p2, VX_TYPE_TENSOR, "inception_4b_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_21_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_21_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p3, VX_TYPE_SCALAR, "inception_4b_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_21_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_21_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p4, VX_TYPE_SCALAR, "inception_4b_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_21_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_21_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p5, VX_TYPE_SCALAR, "inception_4b_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_21_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_21_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p6, VX_TYPE_SCALAR, "inception_4b_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_21_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_21_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p7, VX_TYPE_SCALAR, "inception_4b_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_21_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_21_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_21_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p8, VX_TYPE_TENSOR, "inception_4b_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_25_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_25_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p1, VX_TYPE_TENSOR, "inception_4b_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_25_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_25_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p2, VX_TYPE_TENSOR, "inception_4b_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_25_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_25_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p3, VX_TYPE_SCALAR, "inception_4b_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_25_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_25_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p4, VX_TYPE_SCALAR, "inception_4b_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_25_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_25_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p5, VX_TYPE_SCALAR, "inception_4b_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_25_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_25_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p6, VX_TYPE_SCALAR, "inception_4b_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_25_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_25_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p7, VX_TYPE_SCALAR, "inception_4b_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_25_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_25_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_25_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p8, VX_TYPE_TENSOR, "inception_4b_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_23_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_23_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p1, VX_TYPE_TENSOR, "inception_4b_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_23_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_23_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p2, VX_TYPE_TENSOR, "inception_4b_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_23_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_23_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p3, VX_TYPE_SCALAR, "inception_4b_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_23_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_23_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p4, VX_TYPE_SCALAR, "inception_4b_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_23_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_23_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p5, VX_TYPE_SCALAR, "inception_4b_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_23_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_23_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p6, VX_TYPE_SCALAR, "inception_4b_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_23_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_23_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p7, VX_TYPE_SCALAR, "inception_4b_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_23_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_23_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_23_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p8, VX_TYPE_TENSOR, "inception_4b_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_21_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_21_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_21_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_21_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_21_p1, VX_TYPE_SCALAR, "inception_4b_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_21_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_21_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_21_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_21_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_21_p2, VX_TYPE_SCALAR, "inception_4b_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_21_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_21_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_21_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_21_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_21_p3, VX_TYPE_SCALAR, "inception_4b_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_21_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_3_p0, 4, org_khronos_nn_extension_activation_layer_21_p4_view_view_start, org_khronos_nn_extension_activation_layer_21_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_21_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_21_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_21_p4, VX_TYPE_TENSOR, "inception_4b_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_25_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_25_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_25_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_25_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_25_p1, VX_TYPE_SCALAR, "inception_4b_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_25_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_25_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_25_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_25_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_25_p2, VX_TYPE_SCALAR, "inception_4b_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_25_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_25_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_25_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_25_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_25_p3, VX_TYPE_SCALAR, "inception_4b_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_25_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_3_p0, 4, org_khronos_nn_extension_activation_layer_25_p4_view_view_start, org_khronos_nn_extension_activation_layer_25_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_25_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_25_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_25_p4, VX_TYPE_TENSOR, "inception_4b_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_23_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_23_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_23_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_23_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_23_p1, VX_TYPE_SCALAR, "inception_4b_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_23_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_23_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_23_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_23_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_23_p2, VX_TYPE_SCALAR, "inception_4b_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_23_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_23_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_23_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_23_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_23_p3, VX_TYPE_SCALAR, "inception_4b_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_23_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_3_p0, 4, org_khronos_nn_extension_activation_layer_23_p4_view_view_start, org_khronos_nn_extension_activation_layer_23_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_23_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_23_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_23_p4, VX_TYPE_TENSOR, "inception_4b_relu_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_32_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_32_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p1, VX_TYPE_TENSOR, "inception_4c_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_32_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_32_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p2, VX_TYPE_TENSOR, "inception_4c_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_32_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_32_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p3, VX_TYPE_SCALAR, "inception_4c_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_32_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_32_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p4, VX_TYPE_SCALAR, "inception_4c_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_32_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_32_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p5, VX_TYPE_SCALAR, "inception_4c_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_32_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_32_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p6, VX_TYPE_SCALAR, "inception_4c_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_32_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_32_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p7, VX_TYPE_SCALAR, "inception_4c_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_32_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_32_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_32_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p8, VX_TYPE_TENSOR, "inception_4c_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_30_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_30_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p1, VX_TYPE_TENSOR, "inception_4c_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_30_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_30_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p2, VX_TYPE_TENSOR, "inception_4c_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_30_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_30_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p3, VX_TYPE_SCALAR, "inception_4c_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_30_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_30_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p4, VX_TYPE_SCALAR, "inception_4c_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_30_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_30_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p5, VX_TYPE_SCALAR, "inception_4c_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_30_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_30_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p6, VX_TYPE_SCALAR, "inception_4c_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_30_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_30_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p7, VX_TYPE_SCALAR, "inception_4c_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_30_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_30_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_30_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p8, VX_TYPE_TENSOR, "inception_4c_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_28_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_28_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p1, VX_TYPE_TENSOR, "inception_4c_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_28_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_28_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p2, VX_TYPE_TENSOR, "inception_4c_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_28_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_28_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p3, VX_TYPE_SCALAR, "inception_4c_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_28_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_28_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p4, VX_TYPE_SCALAR, "inception_4c_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_28_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_28_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p5, VX_TYPE_SCALAR, "inception_4c_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_28_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_28_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p6, VX_TYPE_SCALAR, "inception_4c_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_28_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_28_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p7, VX_TYPE_SCALAR, "inception_4c_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_28_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_28_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_28_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p8, VX_TYPE_TENSOR, "inception_4c_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_7_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_7_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p1, VX_TYPE_SCALAR, "inception_4c_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_7_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_7_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p2, VX_TYPE_SCALAR, "inception_4c_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_7_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_7_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p3, VX_TYPE_SCALAR, "inception_4c_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_7_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_7_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p4, VX_TYPE_SCALAR, "inception_4c_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_7_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_7_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p5, VX_TYPE_SCALAR, "inception_4c_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_7_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_7_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p6, VX_TYPE_SCALAR, "inception_4c_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_7_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_7_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_7_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_7_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p7, VX_TYPE_TENSOR, "inception_4c_pool_7");
+
+    org_khronos_nn_extension_activation_layer_32_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_32_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_32_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_32_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_32_p1, VX_TYPE_SCALAR, "inception_4c_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_32_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_32_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_32_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_32_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_32_p2, VX_TYPE_SCALAR, "inception_4c_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_32_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_32_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_32_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_32_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_32_p3, VX_TYPE_SCALAR, "inception_4c_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_32_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_4_p0, 4, org_khronos_nn_extension_activation_layer_32_p4_view_view_start, org_khronos_nn_extension_activation_layer_32_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_32_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_32_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_32_p4, VX_TYPE_TENSOR, "inception_4c_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_30_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_30_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_30_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_30_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_30_p1, VX_TYPE_SCALAR, "inception_4c_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_30_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_30_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_30_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_30_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_30_p2, VX_TYPE_SCALAR, "inception_4c_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_30_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_30_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_30_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_30_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_30_p3, VX_TYPE_SCALAR, "inception_4c_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_30_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_30_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_30_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_30_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_30_p4, VX_TYPE_TENSOR, "inception_4c_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_28_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_28_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_28_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_28_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_28_p1, VX_TYPE_SCALAR, "inception_4c_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_28_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_28_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_28_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_28_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_28_p2, VX_TYPE_SCALAR, "inception_4c_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_28_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_28_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_28_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_28_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_28_p3, VX_TYPE_SCALAR, "inception_4c_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_28_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_28_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_28_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_28_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_28_p4, VX_TYPE_TENSOR, "inception_4c_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_27_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_27_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p1, VX_TYPE_TENSOR, "inception_4c_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_27_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_27_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p2, VX_TYPE_TENSOR, "inception_4c_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_27_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_27_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p3, VX_TYPE_SCALAR, "inception_4c_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_27_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_27_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p4, VX_TYPE_SCALAR, "inception_4c_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_27_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_27_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p5, VX_TYPE_SCALAR, "inception_4c_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_27_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_27_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p6, VX_TYPE_SCALAR, "inception_4c_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_27_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_27_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p7, VX_TYPE_SCALAR, "inception_4c_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_27_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_27_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_27_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p8, VX_TYPE_TENSOR, "inception_4c_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_31_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_31_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p1, VX_TYPE_TENSOR, "inception_4c_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_31_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_31_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p2, VX_TYPE_TENSOR, "inception_4c_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_31_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_31_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p3, VX_TYPE_SCALAR, "inception_4c_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_31_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_31_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p4, VX_TYPE_SCALAR, "inception_4c_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_31_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_31_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p5, VX_TYPE_SCALAR, "inception_4c_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_31_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_31_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p6, VX_TYPE_SCALAR, "inception_4c_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_31_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_31_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p7, VX_TYPE_SCALAR, "inception_4c_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_31_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_31_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_31_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p8, VX_TYPE_TENSOR, "inception_4c_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_29_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_29_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p1, VX_TYPE_TENSOR, "inception_4c_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_29_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_29_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p2, VX_TYPE_TENSOR, "inception_4c_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_29_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_29_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p3, VX_TYPE_SCALAR, "inception_4c_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_29_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_29_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p4, VX_TYPE_SCALAR, "inception_4c_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_29_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_29_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p5, VX_TYPE_SCALAR, "inception_4c_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_29_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_29_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p6, VX_TYPE_SCALAR, "inception_4c_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_29_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_29_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p7, VX_TYPE_SCALAR, "inception_4c_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_29_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_29_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_29_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p8, VX_TYPE_TENSOR, "inception_4c_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_27_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_27_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_27_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_27_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_27_p1, VX_TYPE_SCALAR, "inception_4c_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_27_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_27_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_27_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_27_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_27_p2, VX_TYPE_SCALAR, "inception_4c_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_27_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_27_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_27_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_27_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_27_p3, VX_TYPE_SCALAR, "inception_4c_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_27_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_4_p0, 4, org_khronos_nn_extension_activation_layer_27_p4_view_view_start, org_khronos_nn_extension_activation_layer_27_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_27_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_27_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_27_p4, VX_TYPE_TENSOR, "inception_4c_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_31_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_31_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_31_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_31_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_31_p1, VX_TYPE_SCALAR, "inception_4c_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_31_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_31_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_31_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_31_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_31_p2, VX_TYPE_SCALAR, "inception_4c_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_31_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_31_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_31_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_31_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_31_p3, VX_TYPE_SCALAR, "inception_4c_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_31_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_4_p0, 4, org_khronos_nn_extension_activation_layer_31_p4_view_view_start, org_khronos_nn_extension_activation_layer_31_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_31_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_31_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_31_p4, VX_TYPE_TENSOR, "inception_4c_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_29_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_29_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_29_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_29_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_29_p1, VX_TYPE_SCALAR, "inception_4c_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_29_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_29_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_29_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_29_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_29_p2, VX_TYPE_SCALAR, "inception_4c_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_29_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_29_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_29_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_29_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_29_p3, VX_TYPE_SCALAR, "inception_4c_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_29_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_4_p0, 4, org_khronos_nn_extension_activation_layer_29_p4_view_view_start, org_khronos_nn_extension_activation_layer_29_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_29_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_29_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_29_p4, VX_TYPE_TENSOR, "inception_4c_relu_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_38_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_38_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p1, VX_TYPE_TENSOR, "inception_4d_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_38_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_38_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p2, VX_TYPE_TENSOR, "inception_4d_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_38_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_38_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p3, VX_TYPE_SCALAR, "inception_4d_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_38_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_38_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p4, VX_TYPE_SCALAR, "inception_4d_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_38_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_38_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p5, VX_TYPE_SCALAR, "inception_4d_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_38_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_38_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p6, VX_TYPE_SCALAR, "inception_4d_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_38_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_38_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p7, VX_TYPE_SCALAR, "inception_4d_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_38_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_38_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_38_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p8, VX_TYPE_TENSOR, "inception_4d_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_36_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_36_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p1, VX_TYPE_TENSOR, "inception_4d_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_36_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_36_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p2, VX_TYPE_TENSOR, "inception_4d_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_36_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_36_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p3, VX_TYPE_SCALAR, "inception_4d_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_36_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_36_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p4, VX_TYPE_SCALAR, "inception_4d_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_36_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_36_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p5, VX_TYPE_SCALAR, "inception_4d_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_36_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_36_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p6, VX_TYPE_SCALAR, "inception_4d_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_36_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_36_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p7, VX_TYPE_SCALAR, "inception_4d_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_36_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_36_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_36_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p8, VX_TYPE_TENSOR, "inception_4d_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_34_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_34_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p1, VX_TYPE_TENSOR, "inception_4d_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_34_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_34_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p2, VX_TYPE_TENSOR, "inception_4d_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_34_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_34_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p3, VX_TYPE_SCALAR, "inception_4d_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_34_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_34_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p4, VX_TYPE_SCALAR, "inception_4d_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_34_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_34_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p5, VX_TYPE_SCALAR, "inception_4d_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_34_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_34_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p6, VX_TYPE_SCALAR, "inception_4d_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_34_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_34_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p7, VX_TYPE_SCALAR, "inception_4d_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_34_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_34_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_34_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p8, VX_TYPE_TENSOR, "inception_4d_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_8_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_8_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p1, VX_TYPE_SCALAR, "inception_4d_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_8_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_8_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p2, VX_TYPE_SCALAR, "inception_4d_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_8_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_8_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p3, VX_TYPE_SCALAR, "inception_4d_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_8_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_8_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p4, VX_TYPE_SCALAR, "inception_4d_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_8_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_8_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p5, VX_TYPE_SCALAR, "inception_4d_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_8_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_8_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p6, VX_TYPE_SCALAR, "inception_4d_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_8_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_8_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_8_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_8_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p7, VX_TYPE_TENSOR, "inception_4d_pool_7");
+
+    org_khronos_nn_extension_activation_layer_38_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_38_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_38_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_38_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_38_p1, VX_TYPE_SCALAR, "inception_4d_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_38_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_38_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_38_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_38_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_38_p2, VX_TYPE_SCALAR, "inception_4d_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_38_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_38_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_38_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_38_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_38_p3, VX_TYPE_SCALAR, "inception_4d_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_38_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_5_p0, 4, org_khronos_nn_extension_activation_layer_38_p4_view_view_start, org_khronos_nn_extension_activation_layer_38_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_38_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_38_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_38_p4, VX_TYPE_TENSOR, "inception_4d_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_36_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_36_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_36_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_36_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_36_p1, VX_TYPE_SCALAR, "inception_4d_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_36_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_36_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_36_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_36_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_36_p2, VX_TYPE_SCALAR, "inception_4d_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_36_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_36_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_36_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_36_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_36_p3, VX_TYPE_SCALAR, "inception_4d_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_36_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_36_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_36_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_36_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_36_p4, VX_TYPE_TENSOR, "inception_4d_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_34_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_34_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_34_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_34_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_34_p1, VX_TYPE_SCALAR, "inception_4d_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_34_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_34_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_34_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_34_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_34_p2, VX_TYPE_SCALAR, "inception_4d_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_34_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_34_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_34_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_34_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_34_p3, VX_TYPE_SCALAR, "inception_4d_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_34_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_34_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_34_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_34_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_34_p4, VX_TYPE_TENSOR, "inception_4d_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_33_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_33_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p1, VX_TYPE_TENSOR, "inception_4d_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_33_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_33_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p2, VX_TYPE_TENSOR, "inception_4d_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_33_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_33_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p3, VX_TYPE_SCALAR, "inception_4d_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_33_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_33_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p4, VX_TYPE_SCALAR, "inception_4d_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_33_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_33_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p5, VX_TYPE_SCALAR, "inception_4d_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_33_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_33_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p6, VX_TYPE_SCALAR, "inception_4d_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_33_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_33_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p7, VX_TYPE_SCALAR, "inception_4d_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_33_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_33_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_33_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p8, VX_TYPE_TENSOR, "inception_4d_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_37_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_37_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p1, VX_TYPE_TENSOR, "inception_4d_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_37_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_37_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p2, VX_TYPE_TENSOR, "inception_4d_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_37_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_37_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p3, VX_TYPE_SCALAR, "inception_4d_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_37_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_37_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p4, VX_TYPE_SCALAR, "inception_4d_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_37_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_37_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p5, VX_TYPE_SCALAR, "inception_4d_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_37_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_37_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p6, VX_TYPE_SCALAR, "inception_4d_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_37_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_37_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p7, VX_TYPE_SCALAR, "inception_4d_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_37_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_37_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_37_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p8, VX_TYPE_TENSOR, "inception_4d_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_35_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_35_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p1, VX_TYPE_TENSOR, "inception_4d_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_35_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_35_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p2, VX_TYPE_TENSOR, "inception_4d_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_35_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_35_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p3, VX_TYPE_SCALAR, "inception_4d_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_35_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_35_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p4, VX_TYPE_SCALAR, "inception_4d_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_35_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_35_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p5, VX_TYPE_SCALAR, "inception_4d_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_35_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_35_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p6, VX_TYPE_SCALAR, "inception_4d_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_35_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_35_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p7, VX_TYPE_SCALAR, "inception_4d_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_35_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_35_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_35_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p8, VX_TYPE_TENSOR, "inception_4d_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_33_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_33_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_33_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_33_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_33_p1, VX_TYPE_SCALAR, "inception_4d_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_33_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_33_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_33_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_33_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_33_p2, VX_TYPE_SCALAR, "inception_4d_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_33_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_33_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_33_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_33_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_33_p3, VX_TYPE_SCALAR, "inception_4d_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_33_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_5_p0, 4, org_khronos_nn_extension_activation_layer_33_p4_view_view_start, org_khronos_nn_extension_activation_layer_33_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_33_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_33_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_33_p4, VX_TYPE_TENSOR, "inception_4d_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_37_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_37_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_37_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_37_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_37_p1, VX_TYPE_SCALAR, "inception_4d_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_37_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_37_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_37_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_37_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_37_p2, VX_TYPE_SCALAR, "inception_4d_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_37_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_37_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_37_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_37_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_37_p3, VX_TYPE_SCALAR, "inception_4d_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_37_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_5_p0, 4, org_khronos_nn_extension_activation_layer_37_p4_view_view_start, org_khronos_nn_extension_activation_layer_37_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_37_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_37_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_37_p4, VX_TYPE_TENSOR, "inception_4d_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_35_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_35_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_35_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_35_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_35_p1, VX_TYPE_SCALAR, "inception_4d_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_35_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_35_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_35_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_35_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_35_p2, VX_TYPE_SCALAR, "inception_4d_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_35_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_35_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_35_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_35_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_35_p3, VX_TYPE_SCALAR, "inception_4d_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_35_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_5_p0, 4, org_khronos_nn_extension_activation_layer_35_p4_view_view_start, org_khronos_nn_extension_activation_layer_35_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_35_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_35_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_35_p4, VX_TYPE_TENSOR, "inception_4d_relu_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_44_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_44_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p1, VX_TYPE_TENSOR, "inception_4e_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_44_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_44_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p2, VX_TYPE_TENSOR, "inception_4e_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_44_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_44_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p3, VX_TYPE_SCALAR, "inception_4e_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_44_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_44_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p4, VX_TYPE_SCALAR, "inception_4e_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_44_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_44_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p5, VX_TYPE_SCALAR, "inception_4e_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_44_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_44_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p6, VX_TYPE_SCALAR, "inception_4e_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_44_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_44_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p7, VX_TYPE_SCALAR, "inception_4e_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_44_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_44_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_44_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p8, VX_TYPE_TENSOR, "inception_4e_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_42_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_42_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p1, VX_TYPE_TENSOR, "inception_4e_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_42_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_42_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p2, VX_TYPE_TENSOR, "inception_4e_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_42_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_42_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p3, VX_TYPE_SCALAR, "inception_4e_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_42_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_42_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p4, VX_TYPE_SCALAR, "inception_4e_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_42_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_42_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p5, VX_TYPE_SCALAR, "inception_4e_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_42_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_42_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p6, VX_TYPE_SCALAR, "inception_4e_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_42_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_42_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p7, VX_TYPE_SCALAR, "inception_4e_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_42_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_42_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_42_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p8, VX_TYPE_TENSOR, "inception_4e_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_40_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_40_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p1, VX_TYPE_TENSOR, "inception_4e_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_40_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_40_p2Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p2, VX_TYPE_TENSOR, "inception_4e_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_40_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_40_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p3, VX_TYPE_SCALAR, "inception_4e_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_40_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_40_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p4, VX_TYPE_SCALAR, "inception_4e_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_40_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_40_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p5, VX_TYPE_SCALAR, "inception_4e_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_40_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_40_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p6, VX_TYPE_SCALAR, "inception_4e_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_40_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_40_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p7, VX_TYPE_SCALAR, "inception_4e_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_40_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_40_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_40_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p8, VX_TYPE_TENSOR, "inception_4e_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_9_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_9_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p1, VX_TYPE_SCALAR, "inception_4e_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_9_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_9_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p2, VX_TYPE_SCALAR, "inception_4e_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_9_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_9_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p3, VX_TYPE_SCALAR, "inception_4e_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_9_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_9_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p4, VX_TYPE_SCALAR, "inception_4e_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_9_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_9_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p5, VX_TYPE_SCALAR, "inception_4e_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_9_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_9_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p6, VX_TYPE_SCALAR, "inception_4e_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_9_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_9_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_9_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_9_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p7, VX_TYPE_TENSOR, "inception_4e_pool_7");
+
+    org_khronos_nn_extension_activation_layer_44_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_44_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_44_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_44_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_44_p1, VX_TYPE_SCALAR, "inception_4e_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_44_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_44_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_44_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_44_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_44_p2, VX_TYPE_SCALAR, "inception_4e_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_44_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_44_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_44_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_44_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_44_p3, VX_TYPE_SCALAR, "inception_4e_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_44_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_6_p0, 4, org_khronos_nn_extension_activation_layer_44_p4_view_view_start, org_khronos_nn_extension_activation_layer_44_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_44_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_44_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_44_p4, VX_TYPE_TENSOR, "inception_4e_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_42_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_42_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_42_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_42_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_42_p1, VX_TYPE_SCALAR, "inception_4e_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_42_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_42_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_42_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_42_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_42_p2, VX_TYPE_SCALAR, "inception_4e_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_42_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_42_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_42_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_42_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_42_p3, VX_TYPE_SCALAR, "inception_4e_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_42_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_42_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_42_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_42_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_42_p4, VX_TYPE_TENSOR, "inception_4e_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_40_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_40_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_40_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_40_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_40_p1, VX_TYPE_SCALAR, "inception_4e_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_40_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_40_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_40_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_40_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_40_p2, VX_TYPE_SCALAR, "inception_4e_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_40_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_40_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_40_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_40_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_40_p3, VX_TYPE_SCALAR, "inception_4e_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_40_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_40_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_40_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_40_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_40_p4, VX_TYPE_TENSOR, "inception_4e_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_39_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_39_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p1, VX_TYPE_TENSOR, "inception_4e_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_39_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_39_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p2, VX_TYPE_TENSOR, "inception_4e_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_39_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_39_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p3, VX_TYPE_SCALAR, "inception_4e_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_39_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_39_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p4, VX_TYPE_SCALAR, "inception_4e_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_39_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_39_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p5, VX_TYPE_SCALAR, "inception_4e_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_39_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_39_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p6, VX_TYPE_SCALAR, "inception_4e_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_39_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_39_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p7, VX_TYPE_SCALAR, "inception_4e_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_39_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_39_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_39_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p8, VX_TYPE_TENSOR, "inception_4e_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_43_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_43_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p1, VX_TYPE_TENSOR, "inception_4e_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_43_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_43_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p2, VX_TYPE_TENSOR, "inception_4e_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_43_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_43_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p3, VX_TYPE_SCALAR, "inception_4e_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_43_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_43_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p4, VX_TYPE_SCALAR, "inception_4e_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_43_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_43_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p5, VX_TYPE_SCALAR, "inception_4e_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_43_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_43_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p6, VX_TYPE_SCALAR, "inception_4e_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_43_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_43_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p7, VX_TYPE_SCALAR, "inception_4e_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_43_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_43_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_43_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p8, VX_TYPE_TENSOR, "inception_4e_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_41_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_41_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p1, VX_TYPE_TENSOR, "inception_4e_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_41_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_41_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p2, VX_TYPE_TENSOR, "inception_4e_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_41_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_41_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p3, VX_TYPE_SCALAR, "inception_4e_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_41_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_41_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p4, VX_TYPE_SCALAR, "inception_4e_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_41_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_41_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p5, VX_TYPE_SCALAR, "inception_4e_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_41_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_41_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p6, VX_TYPE_SCALAR, "inception_4e_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_41_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_41_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p7, VX_TYPE_SCALAR, "inception_4e_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_41_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_41_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_41_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p8, VX_TYPE_TENSOR, "inception_4e_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_39_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_39_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_39_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_39_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_39_p1, VX_TYPE_SCALAR, "inception_4e_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_39_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_39_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_39_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_39_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_39_p2, VX_TYPE_SCALAR, "inception_4e_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_39_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_39_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_39_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_39_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_39_p3, VX_TYPE_SCALAR, "inception_4e_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_39_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_6_p0, 4, org_khronos_nn_extension_activation_layer_39_p4_view_view_start, org_khronos_nn_extension_activation_layer_39_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_39_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_39_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_39_p4, VX_TYPE_TENSOR, "inception_4e_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_43_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_43_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_43_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_43_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_43_p1, VX_TYPE_SCALAR, "inception_4e_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_43_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_43_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_43_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_43_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_43_p2, VX_TYPE_SCALAR, "inception_4e_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_43_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_43_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_43_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_43_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_43_p3, VX_TYPE_SCALAR, "inception_4e_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_43_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_6_p0, 4, org_khronos_nn_extension_activation_layer_43_p4_view_view_start, org_khronos_nn_extension_activation_layer_43_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_43_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_43_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_43_p4, VX_TYPE_TENSOR, "inception_4e_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_41_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_41_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_41_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_41_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_41_p1, VX_TYPE_SCALAR, "inception_4e_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_41_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_41_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_41_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_41_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_41_p2, VX_TYPE_SCALAR, "inception_4e_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_41_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_41_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_41_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_41_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_41_p3, VX_TYPE_SCALAR, "inception_4e_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_41_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_6_p0, 4, org_khronos_nn_extension_activation_layer_41_p4_view_view_start, org_khronos_nn_extension_activation_layer_41_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_41_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_41_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_41_p4, VX_TYPE_TENSOR, "inception_4e_relu_5x5_4");
+
+    org_khronos_nn_extension_pooling_layer_10_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_10_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p1, VX_TYPE_SCALAR, "pool4_3x3_s2_1");
+
+    org_khronos_nn_extension_pooling_layer_10_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_10_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p2, VX_TYPE_SCALAR, "pool4_3x3_s2_2");
+
+    org_khronos_nn_extension_pooling_layer_10_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_10_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p3, VX_TYPE_SCALAR, "pool4_3x3_s2_3");
+
+    org_khronos_nn_extension_pooling_layer_10_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_10_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p4, VX_TYPE_SCALAR, "pool4_3x3_s2_4");
+
+    org_khronos_nn_extension_pooling_layer_10_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_10_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p5, VX_TYPE_SCALAR, "pool4_3x3_s2_5");
+
+    org_khronos_nn_extension_pooling_layer_10_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_10_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p6, VX_TYPE_SCALAR, "pool4_3x3_s2_6");
+
+    org_khronos_nn_extension_pooling_layer_10_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_10_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_10_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_10_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p7, VX_TYPE_TENSOR, "pool4_3x3_s2_7");
+
+    org_khronos_nn_extension_convolution_layer_50_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_50_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p1, VX_TYPE_TENSOR, "inception_5a_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_50_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_50_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p2, VX_TYPE_TENSOR, "inception_5a_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_50_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_50_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p3, VX_TYPE_SCALAR, "inception_5a_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_50_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_50_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p4, VX_TYPE_SCALAR, "inception_5a_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_50_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_50_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p5, VX_TYPE_SCALAR, "inception_5a_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_50_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_50_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p6, VX_TYPE_SCALAR, "inception_5a_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_50_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_50_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p7, VX_TYPE_SCALAR, "inception_5a_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_50_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_50_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_50_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p8, VX_TYPE_TENSOR, "inception_5a_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_48_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_48_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p1, VX_TYPE_TENSOR, "inception_5a_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_48_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_48_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p2, VX_TYPE_TENSOR, "inception_5a_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_48_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_48_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p3, VX_TYPE_SCALAR, "inception_5a_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_48_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_48_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p4, VX_TYPE_SCALAR, "inception_5a_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_48_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_48_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p5, VX_TYPE_SCALAR, "inception_5a_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_48_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_48_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p6, VX_TYPE_SCALAR, "inception_5a_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_48_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_48_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p7, VX_TYPE_SCALAR, "inception_5a_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_48_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_48_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_48_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p8, VX_TYPE_TENSOR, "inception_5a_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_46_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_46_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p1, VX_TYPE_TENSOR, "inception_5a_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_46_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_46_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p2, VX_TYPE_TENSOR, "inception_5a_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_46_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_46_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p3, VX_TYPE_SCALAR, "inception_5a_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_46_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_46_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p4, VX_TYPE_SCALAR, "inception_5a_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_46_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_46_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p5, VX_TYPE_SCALAR, "inception_5a_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_46_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_46_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p6, VX_TYPE_SCALAR, "inception_5a_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_46_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_46_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p7, VX_TYPE_SCALAR, "inception_5a_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_46_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_46_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_46_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p8, VX_TYPE_TENSOR, "inception_5a_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_11_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_11_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p1, VX_TYPE_SCALAR, "inception_5a_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_11_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_11_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p2, VX_TYPE_SCALAR, "inception_5a_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_11_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_11_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p3, VX_TYPE_SCALAR, "inception_5a_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_11_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_11_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p4, VX_TYPE_SCALAR, "inception_5a_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_11_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_11_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p5, VX_TYPE_SCALAR, "inception_5a_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_11_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_11_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p6, VX_TYPE_SCALAR, "inception_5a_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_11_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_11_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_11_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_11_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p7, VX_TYPE_TENSOR, "inception_5a_pool_7");
+
+    org_khronos_nn_extension_activation_layer_50_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_50_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_50_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_50_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_50_p1, VX_TYPE_SCALAR, "inception_5a_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_50_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_50_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_50_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_50_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_50_p2, VX_TYPE_SCALAR, "inception_5a_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_50_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_50_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_50_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_50_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_50_p3, VX_TYPE_SCALAR, "inception_5a_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_50_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_7_p0, 4, org_khronos_nn_extension_activation_layer_50_p4_view_view_start, org_khronos_nn_extension_activation_layer_50_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_50_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_50_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_50_p4, VX_TYPE_TENSOR, "inception_5a_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_48_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_48_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_48_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_48_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_48_p1, VX_TYPE_SCALAR, "inception_5a_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_48_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_48_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_48_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_48_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_48_p2, VX_TYPE_SCALAR, "inception_5a_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_48_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_48_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_48_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_48_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_48_p3, VX_TYPE_SCALAR, "inception_5a_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_48_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_48_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_48_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_48_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_48_p4, VX_TYPE_TENSOR, "inception_5a_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_46_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_46_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_46_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_46_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_46_p1, VX_TYPE_SCALAR, "inception_5a_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_46_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_46_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_46_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_46_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_46_p2, VX_TYPE_SCALAR, "inception_5a_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_46_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_46_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_46_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_46_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_46_p3, VX_TYPE_SCALAR, "inception_5a_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_46_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_46_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_46_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_46_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_46_p4, VX_TYPE_TENSOR, "inception_5a_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_45_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_45_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p1, VX_TYPE_TENSOR, "inception_5a_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_45_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_45_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p2, VX_TYPE_TENSOR, "inception_5a_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_45_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_45_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p3, VX_TYPE_SCALAR, "inception_5a_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_45_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_45_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p4, VX_TYPE_SCALAR, "inception_5a_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_45_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_45_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p5, VX_TYPE_SCALAR, "inception_5a_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_45_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_45_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p6, VX_TYPE_SCALAR, "inception_5a_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_45_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_45_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p7, VX_TYPE_SCALAR, "inception_5a_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_45_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_45_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_45_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p8, VX_TYPE_TENSOR, "inception_5a_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_49_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_49_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p1, VX_TYPE_TENSOR, "inception_5a_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_49_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_49_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p2, VX_TYPE_TENSOR, "inception_5a_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_49_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_49_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p3, VX_TYPE_SCALAR, "inception_5a_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_49_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_49_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p4, VX_TYPE_SCALAR, "inception_5a_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_49_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_49_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p5, VX_TYPE_SCALAR, "inception_5a_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_49_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_49_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p6, VX_TYPE_SCALAR, "inception_5a_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_49_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_49_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p7, VX_TYPE_SCALAR, "inception_5a_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_49_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_49_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_49_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p8, VX_TYPE_TENSOR, "inception_5a_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_47_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_47_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p1, VX_TYPE_TENSOR, "inception_5a_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_47_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_47_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p2, VX_TYPE_TENSOR, "inception_5a_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_47_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_47_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p3, VX_TYPE_SCALAR, "inception_5a_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_47_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_47_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p4, VX_TYPE_SCALAR, "inception_5a_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_47_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_47_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p5, VX_TYPE_SCALAR, "inception_5a_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_47_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_47_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p6, VX_TYPE_SCALAR, "inception_5a_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_47_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_47_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p7, VX_TYPE_SCALAR, "inception_5a_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_47_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_47_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_47_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p8, VX_TYPE_TENSOR, "inception_5a_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_45_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_45_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_45_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_45_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_45_p1, VX_TYPE_SCALAR, "inception_5a_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_45_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_45_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_45_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_45_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_45_p2, VX_TYPE_SCALAR, "inception_5a_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_45_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_45_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_45_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_45_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_45_p3, VX_TYPE_SCALAR, "inception_5a_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_45_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_7_p0, 4, org_khronos_nn_extension_activation_layer_45_p4_view_view_start, org_khronos_nn_extension_activation_layer_45_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_45_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_45_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_45_p4, VX_TYPE_TENSOR, "inception_5a_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_49_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_49_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_49_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_49_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_49_p1, VX_TYPE_SCALAR, "inception_5a_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_49_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_49_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_49_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_49_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_49_p2, VX_TYPE_SCALAR, "inception_5a_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_49_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_49_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_49_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_49_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_49_p3, VX_TYPE_SCALAR, "inception_5a_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_49_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_7_p0, 4, org_khronos_nn_extension_activation_layer_49_p4_view_view_start, org_khronos_nn_extension_activation_layer_49_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_49_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_49_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_49_p4, VX_TYPE_TENSOR, "inception_5a_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_47_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_47_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_47_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_47_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_47_p1, VX_TYPE_SCALAR, "inception_5a_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_47_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_47_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_47_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_47_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_47_p2, VX_TYPE_SCALAR, "inception_5a_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_47_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_47_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_47_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_47_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_47_p3, VX_TYPE_SCALAR, "inception_5a_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_47_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_7_p0, 4, org_khronos_nn_extension_activation_layer_47_p4_view_view_start, org_khronos_nn_extension_activation_layer_47_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_47_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_47_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_47_p4, VX_TYPE_TENSOR, "inception_5a_relu_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_56_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_56_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p1, VX_TYPE_TENSOR, "inception_5b_1x1_weights");
+
+    org_khronos_nn_extension_convolution_layer_56_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_56_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p2, VX_TYPE_TENSOR, "inception_5b_1x1_bias");
+
+    org_khronos_nn_extension_convolution_layer_56_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_56_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p3, VX_TYPE_SCALAR, "inception_5b_1x1_3");
+
+    org_khronos_nn_extension_convolution_layer_56_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_56_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p4, VX_TYPE_SCALAR, "inception_5b_1x1_4");
+
+    org_khronos_nn_extension_convolution_layer_56_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_56_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p5, VX_TYPE_SCALAR, "inception_5b_1x1_5");
+
+    org_khronos_nn_extension_convolution_layer_56_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_56_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p6, VX_TYPE_SCALAR, "inception_5b_1x1_6");
+
+    org_khronos_nn_extension_convolution_layer_56_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_56_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p7, VX_TYPE_SCALAR, "inception_5b_1x1_7");
+
+    org_khronos_nn_extension_convolution_layer_56_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_56_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_56_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p8, VX_TYPE_TENSOR, "inception_5b_1x1_8");
+
+    org_khronos_nn_extension_convolution_layer_54_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_54_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p1, VX_TYPE_TENSOR, "inception_5b_3x3_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_54_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_54_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p2, VX_TYPE_TENSOR, "inception_5b_3x3_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_54_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_54_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p3, VX_TYPE_SCALAR, "inception_5b_3x3_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_54_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_54_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p4, VX_TYPE_SCALAR, "inception_5b_3x3_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_54_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_54_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p5, VX_TYPE_SCALAR, "inception_5b_3x3_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_54_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_54_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p6, VX_TYPE_SCALAR, "inception_5b_3x3_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_54_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_54_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p7, VX_TYPE_SCALAR, "inception_5b_3x3_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_54_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_54_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_54_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p8, VX_TYPE_TENSOR, "inception_5b_3x3_reduce_8");
+
+    org_khronos_nn_extension_convolution_layer_52_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_52_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p1, VX_TYPE_TENSOR, "inception_5b_5x5_reduce_weights");
+
+    org_khronos_nn_extension_convolution_layer_52_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_52_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p2, VX_TYPE_TENSOR, "inception_5b_5x5_reduce_bias");
+
+    org_khronos_nn_extension_convolution_layer_52_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_52_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p3, VX_TYPE_SCALAR, "inception_5b_5x5_reduce_3");
+
+    org_khronos_nn_extension_convolution_layer_52_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_52_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p4, VX_TYPE_SCALAR, "inception_5b_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_52_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_52_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p5, VX_TYPE_SCALAR, "inception_5b_5x5_reduce_5");
+
+    org_khronos_nn_extension_convolution_layer_52_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_52_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p6, VX_TYPE_SCALAR, "inception_5b_5x5_reduce_6");
+
+    org_khronos_nn_extension_convolution_layer_52_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_52_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p7, VX_TYPE_SCALAR, "inception_5b_5x5_reduce_7");
+
+    org_khronos_nn_extension_convolution_layer_52_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_52_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_52_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p8, VX_TYPE_TENSOR, "inception_5b_5x5_reduce_8");
+
+    org_khronos_nn_extension_pooling_layer_12_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_12_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p1, VX_TYPE_SCALAR, "inception_5b_pool_1");
+
+    org_khronos_nn_extension_pooling_layer_12_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_12_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p2, VX_TYPE_SCALAR, "inception_5b_pool_2");
+
+    org_khronos_nn_extension_pooling_layer_12_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_12_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p3, VX_TYPE_SCALAR, "inception_5b_pool_3");
+
+    org_khronos_nn_extension_pooling_layer_12_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_12_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p4, VX_TYPE_SCALAR, "inception_5b_pool_4");
+
+    org_khronos_nn_extension_pooling_layer_12_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_12_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p5, VX_TYPE_SCALAR, "inception_5b_pool_5");
+
+    org_khronos_nn_extension_pooling_layer_12_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_12_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p6, VX_TYPE_SCALAR, "inception_5b_pool_6");
+
+    org_khronos_nn_extension_pooling_layer_12_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_12_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_12_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_12_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p7, VX_TYPE_TENSOR, "inception_5b_pool_7");
+
+    org_khronos_nn_extension_activation_layer_56_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_56_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_56_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_56_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_56_p1, VX_TYPE_SCALAR, "inception_5b_relu_1x1_1");
+
+    org_khronos_nn_extension_activation_layer_56_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_56_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_56_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_56_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_56_p2, VX_TYPE_SCALAR, "inception_5b_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_56_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_56_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_56_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_56_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_56_p3, VX_TYPE_SCALAR, "inception_5b_relu_1x1_2");
+
+    org_khronos_nn_extension_activation_layer_56_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_8_p0, 4, org_khronos_nn_extension_activation_layer_56_p4_view_view_start, org_khronos_nn_extension_activation_layer_56_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_56_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_56_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_56_p4, VX_TYPE_TENSOR, "inception_5b_relu_1x1_4");
+
+    org_khronos_nn_extension_activation_layer_54_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_54_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_54_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_54_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_54_p1, VX_TYPE_SCALAR, "inception_5b_relu_3x3_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_54_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_54_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_54_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_54_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_54_p2, VX_TYPE_SCALAR, "inception_5b_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_54_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_54_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_54_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_54_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_54_p3, VX_TYPE_SCALAR, "inception_5b_relu_3x3_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_54_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_54_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_54_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_54_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_54_p4, VX_TYPE_TENSOR, "inception_5b_relu_3x3_reduce_4");
+
+    org_khronos_nn_extension_activation_layer_52_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_52_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_52_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_52_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_52_p1, VX_TYPE_SCALAR, "inception_5b_relu_5x5_reduce_1");
+
+    org_khronos_nn_extension_activation_layer_52_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_52_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_52_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_52_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_52_p2, VX_TYPE_SCALAR, "inception_5b_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_52_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_52_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_52_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_52_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_52_p3, VX_TYPE_SCALAR, "inception_5b_relu_5x5_reduce_2");
+
+    org_khronos_nn_extension_activation_layer_52_p4 = vxCreateTensor(context, 4, org_khronos_nn_extension_activation_layer_52_p4Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_52_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_52_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_52_p4, VX_TYPE_TENSOR, "inception_5b_relu_5x5_reduce_4");
+
+    org_khronos_nn_extension_convolution_layer_51_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_51_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p1, VX_TYPE_TENSOR, "inception_5b_pool_proj_weights");
+
+    org_khronos_nn_extension_convolution_layer_51_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_51_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p2, VX_TYPE_TENSOR, "inception_5b_pool_proj_bias");
+
+    org_khronos_nn_extension_convolution_layer_51_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_51_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p3, VX_TYPE_SCALAR, "inception_5b_pool_proj_3");
+
+    org_khronos_nn_extension_convolution_layer_51_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_51_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p4, VX_TYPE_SCALAR, "inception_5b_pool_proj_4");
+
+    org_khronos_nn_extension_convolution_layer_51_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_51_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p5, VX_TYPE_SCALAR, "inception_5b_pool_proj_5");
+
+    org_khronos_nn_extension_convolution_layer_51_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_51_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p6, VX_TYPE_SCALAR, "inception_5b_pool_proj_6");
+
+    org_khronos_nn_extension_convolution_layer_51_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_51_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p7, VX_TYPE_SCALAR, "inception_5b_pool_proj_7");
+
+    org_khronos_nn_extension_convolution_layer_51_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_51_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_51_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p8, VX_TYPE_TENSOR, "inception_5b_pool_proj_8");
+
+    org_khronos_nn_extension_convolution_layer_55_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_55_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p1, VX_TYPE_TENSOR, "inception_5b_3x3_weights");
+
+    org_khronos_nn_extension_convolution_layer_55_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_55_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p2, VX_TYPE_TENSOR, "inception_5b_3x3_bias");
+
+    org_khronos_nn_extension_convolution_layer_55_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_55_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p3, VX_TYPE_SCALAR, "inception_5b_3x3_3");
+
+    org_khronos_nn_extension_convolution_layer_55_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_55_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p4, VX_TYPE_SCALAR, "inception_5b_3x3_4");
+
+    org_khronos_nn_extension_convolution_layer_55_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_55_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p5, VX_TYPE_SCALAR, "inception_5b_3x3_5");
+
+    org_khronos_nn_extension_convolution_layer_55_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_55_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p6, VX_TYPE_SCALAR, "inception_5b_3x3_6");
+
+    org_khronos_nn_extension_convolution_layer_55_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_55_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p7, VX_TYPE_SCALAR, "inception_5b_3x3_7");
+
+    org_khronos_nn_extension_convolution_layer_55_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_55_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_55_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p8, VX_TYPE_TENSOR, "inception_5b_3x3_8");
+
+    org_khronos_nn_extension_convolution_layer_53_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_53_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p1, VX_TYPE_TENSOR, "inception_5b_5x5_weights");
+
+    org_khronos_nn_extension_convolution_layer_53_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_convolution_layer_53_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p2, VX_TYPE_TENSOR, "inception_5b_5x5_bias");
+
+    org_khronos_nn_extension_convolution_layer_53_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_53_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p3, VX_TYPE_SCALAR, "inception_5b_5x5_3");
+
+    org_khronos_nn_extension_convolution_layer_53_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_convolution_layer_53_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p4, VX_TYPE_SCALAR, "inception_5b_5x5_4");
+
+    org_khronos_nn_extension_convolution_layer_53_p5 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_53_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p5, VX_TYPE_SCALAR, "inception_5b_5x5_5");
+
+    org_khronos_nn_extension_convolution_layer_53_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_53_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p6, VX_TYPE_SCALAR, "inception_5b_5x5_6");
+
+    org_khronos_nn_extension_convolution_layer_53_p7 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_convolution_layer_53_scalar_p7);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p7, VX_TYPE_SCALAR, "inception_5b_5x5_7");
+
+    org_khronos_nn_extension_convolution_layer_53_p8 = vxCreateTensor(context, 4, org_khronos_nn_extension_convolution_layer_53_p8Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53_p8);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_convolution_layer_53_p8 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p8, VX_TYPE_TENSOR, "inception_5b_5x5_8");
+
+    org_khronos_nn_extension_activation_layer_51_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_51_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_51_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_51_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_51_p1, VX_TYPE_SCALAR, "inception_5b_relu_pool_proj_1");
+
+    org_khronos_nn_extension_activation_layer_51_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_51_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_51_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_51_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_51_p2, VX_TYPE_SCALAR, "inception_5b_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_51_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_51_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_51_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_51_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_51_p3, VX_TYPE_SCALAR, "inception_5b_relu_pool_proj_2");
+
+    org_khronos_nn_extension_activation_layer_51_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_8_p0, 4, org_khronos_nn_extension_activation_layer_51_p4_view_view_start, org_khronos_nn_extension_activation_layer_51_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_51_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_51_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_51_p4, VX_TYPE_TENSOR, "inception_5b_relu_pool_proj_4");
+
+    org_khronos_nn_extension_activation_layer_55_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_55_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_55_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_55_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_55_p1, VX_TYPE_SCALAR, "inception_5b_relu_3x3_1");
+
+    org_khronos_nn_extension_activation_layer_55_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_55_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_55_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_55_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_55_p2, VX_TYPE_SCALAR, "inception_5b_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_55_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_55_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_55_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_55_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_55_p3, VX_TYPE_SCALAR, "inception_5b_relu_3x3_2");
+
+    org_khronos_nn_extension_activation_layer_55_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_8_p0, 4, org_khronos_nn_extension_activation_layer_55_p4_view_view_start, org_khronos_nn_extension_activation_layer_55_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_55_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_55_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_55_p4, VX_TYPE_TENSOR, "inception_5b_relu_3x3_4");
+
+    org_khronos_nn_extension_activation_layer_53_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_activation_layer_53_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_53_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_53_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_53_p1, VX_TYPE_SCALAR, "inception_5b_relu_5x5_1");
+
+    org_khronos_nn_extension_activation_layer_53_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_53_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_53_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_53_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_53_p2, VX_TYPE_SCALAR, "inception_5b_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_53_p3 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_nn_extension_activation_layer_53_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_53_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_53_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_53_p3, VX_TYPE_SCALAR, "inception_5b_relu_5x5_2");
+
+    org_khronos_nn_extension_activation_layer_53_p4 = vxCreateTensorFromView(outputAllocators_MergeTensor_8_p0, 4, org_khronos_nn_extension_activation_layer_53_p4_view_view_start, org_khronos_nn_extension_activation_layer_53_p4_view_view_end);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_activation_layer_53_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_activation_layer_53_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_activation_layer_53_p4, VX_TYPE_TENSOR, "inception_5b_relu_5x5_4");
+
+    org_khronos_nn_extension_pooling_layer_13_p1 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_13_scalar_p1);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p1, VX_TYPE_SCALAR, "pool5_7x7_s1_1");
+
+    org_khronos_nn_extension_pooling_layer_13_p2 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_13_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p2, VX_TYPE_SCALAR, "pool5_7x7_s1_2");
+
+    org_khronos_nn_extension_pooling_layer_13_p3 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_13_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p3, VX_TYPE_SCALAR, "pool5_7x7_s1_3");
+
+    org_khronos_nn_extension_pooling_layer_13_p4 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_13_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p4, VX_TYPE_SCALAR, "pool5_7x7_s1_4");
+
+    org_khronos_nn_extension_pooling_layer_13_p5 = vxCreateScalar(context, VX_TYPE_SIZE, (void*)&org_khronos_nn_extension_pooling_layer_13_scalar_p5);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p5, VX_TYPE_SCALAR, "pool5_7x7_s1_5");
+
+    org_khronos_nn_extension_pooling_layer_13_p6 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_pooling_layer_13_scalar_p6);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p6);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p6 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p6, VX_TYPE_SCALAR, "pool5_7x7_s1_6");
+
+    org_khronos_nn_extension_pooling_layer_13_p7 = vxCreateTensor(context, 4, org_khronos_nn_extension_pooling_layer_13_p7Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_pooling_layer_13_p7);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_pooling_layer_13_p7 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p7, VX_TYPE_TENSOR, "pool5_7x7_s1_7");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p1 = vxCreateTensor(context, 4, org_khronos_nn_extension_fully_connected_layer_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p1, VX_TYPE_TENSOR, "loss3_classifier_weights");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p2 = vxCreateTensor(context, 1, org_khronos_nn_extension_fully_connected_layer_0_p2Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p2, VX_TYPE_TENSOR, "loss3_classifier_bias");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p3 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_0_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p3, VX_TYPE_SCALAR, "loss3_classifier_3");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p4 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_nn_extension_fully_connected_layer_0_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p4, VX_TYPE_SCALAR, "loss3_classifier_4");
+
+    org_khronos_nn_extension_fully_connected_layer_0_p5 = vxCreateTensor(context, 2, org_khronos_nn_extension_fully_connected_layer_0_p5Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_fully_connected_layer_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p5, VX_TYPE_TENSOR, "loss3_classifier_5");
+
+    org_khronos_openvx_tensor_multiply_0_p1 = vxCreateTensor(context, 2, org_khronos_openvx_tensor_multiply_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_openvx_tensor_multiply_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_openvx_tensor_multiply_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_openvx_tensor_multiply_0_p1, VX_TYPE_TENSOR, "Power0_scale");
+
+    org_khronos_openvx_tensor_multiply_0_p2 = vxCreateScalar(context, VX_TYPE_FLOAT32, (void*)&org_khronos_openvx_tensor_multiply_0_scalar_p2);
+    status = vxGetStatus((vx_reference)org_khronos_openvx_tensor_multiply_0_p2);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_openvx_tensor_multiply_0_p2 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_openvx_tensor_multiply_0_p2, VX_TYPE_SCALAR, "Power0_2");
+
+    org_khronos_openvx_tensor_multiply_0_p3 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_openvx_tensor_multiply_0_scalar_p3);
+    status = vxGetStatus((vx_reference)org_khronos_openvx_tensor_multiply_0_p3);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_openvx_tensor_multiply_0_p3 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_openvx_tensor_multiply_0_p3, VX_TYPE_SCALAR, "Power0_3");
+
+    org_khronos_openvx_tensor_multiply_0_p4 = vxCreateScalar(context, VX_TYPE_ENUM, (void*)&org_khronos_openvx_tensor_multiply_0_scalar_p4);
+    status = vxGetStatus((vx_reference)org_khronos_openvx_tensor_multiply_0_p4);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_openvx_tensor_multiply_0_p4 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_openvx_tensor_multiply_0_p4, VX_TYPE_SCALAR, "Power0_4");
+
+    org_khronos_openvx_tensor_multiply_0_p5 = vxCreateTensor(context, 2, org_khronos_openvx_tensor_multiply_0_p5Dimensions ,VX_TYPE_INT16, 8 );
+
+    status = vxGetStatus((vx_reference)org_khronos_openvx_tensor_multiply_0_p5);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_openvx_tensor_multiply_0_p5 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_openvx_tensor_multiply_0_p5, VX_TYPE_TENSOR, "Power0_5");
+
+    org_khronos_nn_extension_softmax_layer_0_p1 = vxCreateTensor(context, 2, org_khronos_nn_extension_softmax_layer_0_p1Dimensions ,VX_TYPE_INT16, 8 );
+    
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_softmax_layer_0_p1);
+    if(status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot create parameter org_khronos_nn_extension_softmax_layer_0_p1 (vx_status=%s)\n", getVxStatusDesc(status));
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_softmax_layer_0_p1, VX_TYPE_TENSOR, "cnn_output");
+
+
+    //
+    // Node Assignments
+    //
+    WriteLog("Adding graph nodes...\n");
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_0);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_0 = vxConvolutionLayer(graph, org_khronos_nn_extension_convolution_layer_0_p0, org_khronos_nn_extension_convolution_layer_0_p1,
+        org_khronos_nn_extension_convolution_layer_0_p2, &org_khronos_nn_extension_convolution_layer_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_0_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_0);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_0\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_0, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_0");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_0);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_0);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_normalization_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_normalization_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_normalization_layer_0);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_1);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_1 = vxConvolutionLayer(graph, org_khronos_nn_extension_normalization_layer_0_p5, org_khronos_nn_extension_convolution_layer_1_p1,
+            org_khronos_nn_extension_convolution_layer_1_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_1_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_1);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_1\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_1, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_1");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_1);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_2);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_2 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_1_p4, org_khronos_nn_extension_convolution_layer_2_p1,
+        org_khronos_nn_extension_convolution_layer_2_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_2_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_2);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_2\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_2, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_2");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_2);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_normalization_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_normalization_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_normalization_layer_1);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_1", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_1);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_8", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_8);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_8 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_1_p7, org_khronos_nn_extension_convolution_layer_8_p1,
+        org_khronos_nn_extension_convolution_layer_8_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_8_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_8);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_8\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_8, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_8");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_6", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_6);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_6 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_1_p7, org_khronos_nn_extension_convolution_layer_6_p1,
+        org_khronos_nn_extension_convolution_layer_6_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_6_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_6);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_6\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_6, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_6");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_4", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_4);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_4 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_1_p7, org_khronos_nn_extension_convolution_layer_4_p1,
+        org_khronos_nn_extension_convolution_layer_4_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_4_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_4);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_4\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_4, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_4");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_2", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_2);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_8", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_8);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_6", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_6);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_4", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_4);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_3", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_3);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_3 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_2_p7, org_khronos_nn_extension_convolution_layer_3_p1,
+        org_khronos_nn_extension_convolution_layer_3_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_3_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_3);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_3\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_3, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_3");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_7", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_7);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_7 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_6_p4, org_khronos_nn_extension_convolution_layer_7_p1,
+        org_khronos_nn_extension_convolution_layer_7_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_7_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_7);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_7\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_7, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_7");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_5", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_5);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_5 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_4_p4, org_khronos_nn_extension_convolution_layer_5_p1,
+        org_khronos_nn_extension_convolution_layer_5_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_5_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_5);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_5\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_5, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_5");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_3", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_3);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_7", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_7);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_5", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_5);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_14", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_14);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_14 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_0_p0, org_khronos_nn_extension_convolution_layer_14_p1,
+        org_khronos_nn_extension_convolution_layer_14_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_14_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_14);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_14\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_14, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_14");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_12", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_12);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_12 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_0_p0, org_khronos_nn_extension_convolution_layer_12_p1,
+        org_khronos_nn_extension_convolution_layer_12_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_12_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_12);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_12\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_12, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_12");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_10", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_10);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_10 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_0_p0, org_khronos_nn_extension_convolution_layer_10_p1,
+        org_khronos_nn_extension_convolution_layer_10_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_10_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_10);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_10\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_10, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_10");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_3", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_3);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_14", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_14);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_12", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_12);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_10", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_10);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_9", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_9);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_9 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_3_p7, org_khronos_nn_extension_convolution_layer_9_p1,
+        org_khronos_nn_extension_convolution_layer_9_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_9_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_9);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_9\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_9, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_9");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_13", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_13);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_13 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_12_p4, org_khronos_nn_extension_convolution_layer_13_p1,
+        org_khronos_nn_extension_convolution_layer_13_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_13_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_13);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_13\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_13, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_13");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_11", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_11);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_11 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_10_p4, org_khronos_nn_extension_convolution_layer_11_p1,
+        org_khronos_nn_extension_convolution_layer_11_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_11_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_11);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_11\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_11, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_11");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_9", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_9);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_13", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_13);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_11", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_11);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_4", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_4);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_20", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_20);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_20 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_4_p7, org_khronos_nn_extension_convolution_layer_20_p1,
+        org_khronos_nn_extension_convolution_layer_20_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_20_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_20);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_20\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_20, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_20");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_18", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_18);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_18 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_4_p7, org_khronos_nn_extension_convolution_layer_18_p1,
+        org_khronos_nn_extension_convolution_layer_18_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_18_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_18);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_18\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_18, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_18");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_16", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_16);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_16 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_4_p7, org_khronos_nn_extension_convolution_layer_16_p1,
+        org_khronos_nn_extension_convolution_layer_16_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_16_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_16);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_16\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_16, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_16");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_5", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_5);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_20", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_20);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_18", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_18);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_16", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_16);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_15", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_15);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_15 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_5_p7, org_khronos_nn_extension_convolution_layer_15_p1,
+        org_khronos_nn_extension_convolution_layer_15_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_15_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_15);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_15\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_15, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_15");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_19", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_19);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_19 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_18_p4, org_khronos_nn_extension_convolution_layer_19_p1,
+        org_khronos_nn_extension_convolution_layer_19_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_19_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_19);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_19\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_19, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_19");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_17", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_17);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_17 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_16_p4, org_khronos_nn_extension_convolution_layer_17_p1,
+        org_khronos_nn_extension_convolution_layer_17_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_17_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_17);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_17\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_17, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_17");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_15", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_15);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_19", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_19);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_17", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_17);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_26", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_26);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_26 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_2_p0, org_khronos_nn_extension_convolution_layer_26_p1,
+        org_khronos_nn_extension_convolution_layer_26_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_26_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_26);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_26\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_26, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_26");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_24", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_24);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_24 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_2_p0, org_khronos_nn_extension_convolution_layer_24_p1,
+        org_khronos_nn_extension_convolution_layer_24_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_24_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_24);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_24\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_24, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_24");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_22", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_22);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_22 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_2_p0, org_khronos_nn_extension_convolution_layer_22_p1,
+        org_khronos_nn_extension_convolution_layer_22_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_22_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_22);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_22\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_22, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_22");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_6", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_6);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_26", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_26);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_24", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_24);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_22", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_22);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_21", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_21);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_21 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_6_p7, org_khronos_nn_extension_convolution_layer_21_p1,
+        org_khronos_nn_extension_convolution_layer_21_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_21_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_21);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_21\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_21, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_21");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_25", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_25);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_25 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_24_p4, org_khronos_nn_extension_convolution_layer_25_p1,
+        org_khronos_nn_extension_convolution_layer_25_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_25_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_25);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_25\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_25, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_25");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_23", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_23);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_23 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_22_p4, org_khronos_nn_extension_convolution_layer_23_p1,
+        org_khronos_nn_extension_convolution_layer_23_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_23_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_23);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_23\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_23, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_23");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_21", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_21);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_25", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_25);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_23", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_23);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_32", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_32);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_32 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_3_p0, org_khronos_nn_extension_convolution_layer_32_p1,
+        org_khronos_nn_extension_convolution_layer_32_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_32_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_32);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_32\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_32, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_32");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_30", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_30);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_30 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_3_p0, org_khronos_nn_extension_convolution_layer_30_p1,
+        org_khronos_nn_extension_convolution_layer_30_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_30_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_30);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_30\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_30, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_30");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_28", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_28);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_28 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_3_p0, org_khronos_nn_extension_convolution_layer_28_p1,
+        org_khronos_nn_extension_convolution_layer_28_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_28_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_28);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_28\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_28, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_28");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_7", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_7);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_32", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_32);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_30", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_30);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_28", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_28);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_27", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_27);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_27 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_7_p7, org_khronos_nn_extension_convolution_layer_27_p1,
+        org_khronos_nn_extension_convolution_layer_27_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_27_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_27);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_27\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_27, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_27");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_31", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_31);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_31 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_30_p4, org_khronos_nn_extension_convolution_layer_31_p1,
+        org_khronos_nn_extension_convolution_layer_31_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_31_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_31);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_31\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_31, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_31");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_29", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_29);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_29 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_28_p4, org_khronos_nn_extension_convolution_layer_29_p1,
+        org_khronos_nn_extension_convolution_layer_29_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_29_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_29);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_29\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_29, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_29");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_27", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_27);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_31", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_31);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_29", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_29);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_38", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_38);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_38 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_4_p0, org_khronos_nn_extension_convolution_layer_38_p1,
+        org_khronos_nn_extension_convolution_layer_38_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_38_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_38);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_38\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_38, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_38");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_36", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_36);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_36 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_4_p0, org_khronos_nn_extension_convolution_layer_36_p1,
+        org_khronos_nn_extension_convolution_layer_36_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_36_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_36);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_36\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_36, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_36");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_34", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_34);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_34 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_4_p0, org_khronos_nn_extension_convolution_layer_34_p1,
+        org_khronos_nn_extension_convolution_layer_34_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_34_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_34);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_34\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_34, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_34");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_8", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_8);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_38", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_38);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_36", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_36);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_34", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_34);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_33", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_33);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_33 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_8_p7, org_khronos_nn_extension_convolution_layer_33_p1,
+        org_khronos_nn_extension_convolution_layer_33_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_33_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_33);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_33\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_33, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_33");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_37", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_37);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_37 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_36_p4, org_khronos_nn_extension_convolution_layer_37_p1,
+        org_khronos_nn_extension_convolution_layer_37_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_37_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_37);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_37\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_37, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_37");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_35", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_35);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_35 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_34_p4, org_khronos_nn_extension_convolution_layer_35_p1,
+        org_khronos_nn_extension_convolution_layer_35_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_35_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_35);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_35\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_35, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_35");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_33", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_33);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_37", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_37);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_35", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_35);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_44", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_44);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_44 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_5_p0, org_khronos_nn_extension_convolution_layer_44_p1,
+        org_khronos_nn_extension_convolution_layer_44_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_44_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_44);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_44\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_44, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_44");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_42", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_42);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_42 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_5_p0, org_khronos_nn_extension_convolution_layer_42_p1,
+        org_khronos_nn_extension_convolution_layer_42_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_42_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_42);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_42\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_42, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_42");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_40", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_40);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_40 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_5_p0, org_khronos_nn_extension_convolution_layer_40_p1,
+        org_khronos_nn_extension_convolution_layer_40_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_40_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_40);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_40\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_40, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_40");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_9", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_9);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_44", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_44);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_42", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_42);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_40", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_40);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_39", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_39);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_39 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_9_p7, org_khronos_nn_extension_convolution_layer_39_p1,
+        org_khronos_nn_extension_convolution_layer_39_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_39_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_39);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_39\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_39, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_39");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_43", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_43);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_43 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_42_p4, org_khronos_nn_extension_convolution_layer_43_p1,
+        org_khronos_nn_extension_convolution_layer_43_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_43_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_43);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_43\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_43, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_43");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_41", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_41);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_41 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_40_p4, org_khronos_nn_extension_convolution_layer_41_p1,
+        org_khronos_nn_extension_convolution_layer_41_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_41_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_41);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_41\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_41, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_41");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_39", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_39);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_43", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_43);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_41", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_41);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_10", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_10);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_50", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_50);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_50 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_10_p7, org_khronos_nn_extension_convolution_layer_50_p1,
+        org_khronos_nn_extension_convolution_layer_50_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_50_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_50);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_50\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_50, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_50");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_48", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_48);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_48 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_10_p7, org_khronos_nn_extension_convolution_layer_48_p1,
+        org_khronos_nn_extension_convolution_layer_48_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_48_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_48);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_48\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_48, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_48");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_46", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_46);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_46 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_10_p7, org_khronos_nn_extension_convolution_layer_46_p1,
+        org_khronos_nn_extension_convolution_layer_46_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_46_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_46);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_46\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_46, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_46");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_11", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_11);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_50", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_50);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_48", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_48);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_46", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_46);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_45", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_45);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_45 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_11_p7, org_khronos_nn_extension_convolution_layer_45_p1,
+        org_khronos_nn_extension_convolution_layer_45_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_45_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_45);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_45\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_45, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_45");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_49", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_49);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_49 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_48_p4, org_khronos_nn_extension_convolution_layer_49_p1,
+        org_khronos_nn_extension_convolution_layer_49_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_49_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_49);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_49\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_49, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_49");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_47", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_47);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_47 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_46_p4, org_khronos_nn_extension_convolution_layer_47_p1,
+        org_khronos_nn_extension_convolution_layer_47_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_47_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_47);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_47\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_47, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_47");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_45", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_45);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_49", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_49);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_47", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_47);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_56", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_56);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_56 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_7_p0, org_khronos_nn_extension_convolution_layer_56_p1,
+        org_khronos_nn_extension_convolution_layer_56_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_56_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_56);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_56\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_56, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_56");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_54", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_54);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_54 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_7_p0, org_khronos_nn_extension_convolution_layer_54_p1,
+        org_khronos_nn_extension_convolution_layer_54_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_54_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_54);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_54\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_54, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_54");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_52", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_52);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_52 = vxConvolutionLayer(graph, outputAllocators_MergeTensor_7_p0, org_khronos_nn_extension_convolution_layer_52_p1,
+        org_khronos_nn_extension_convolution_layer_52_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_52_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_52);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_52\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_52, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_52");
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_12", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_12);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_56", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_56);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_54", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_54);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_52", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_52);
+    if(status != VX_SUCCESS)
+        return status;
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_51", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_51);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_51 = vxConvolutionLayer(graph, org_khronos_nn_extension_pooling_layer_12_p7, org_khronos_nn_extension_convolution_layer_51_p1,
+        org_khronos_nn_extension_convolution_layer_51_p2, &org_khronos_nn_extension_convolution_0_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_51_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_51);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_51\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_51, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_51");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_55", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_55);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_55 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_54_p4, org_khronos_nn_extension_convolution_layer_55_p1,
+        org_khronos_nn_extension_convolution_layer_55_p2, &org_khronos_nn_extension_convolution_1_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_55_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_55);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_55\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_55, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_55");
+
+//    status = CreateNode(graph, org_khronos_nn_extension_convolution_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_convolution_layer_53", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_convolution_layer_53);
+//    if(status != VX_SUCCESS)
+//        return status;
+    org_khronos_nn_extension_convolution_layer_53 = vxConvolutionLayer(graph, org_khronos_nn_extension_activation_layer_52_p4, org_khronos_nn_extension_convolution_layer_53_p1,
+        org_khronos_nn_extension_convolution_layer_53_p2, &org_khronos_nn_extension_convolution_2_p3, sizeof(vx_nn_convolution_params_t), org_khronos_nn_extension_convolution_layer_53_p8);
+    status = vxGetStatus((vx_reference)org_khronos_nn_extension_convolution_layer_53);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: failed to create node org_khronos_nn_extension_convolution_layer_53\n");
+        return status;
+    }
+    AddVXObject(pObjectContainer, (vx_reference)org_khronos_nn_extension_convolution_layer_53, VX_TYPE_NODE, "org_khronos_nn_extension_convolution_layer_53");
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_51", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_51);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_55", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_55);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_activation_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_activation_layer_53", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_activation_layer_53);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_pooling_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_pooling_layer_13", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_pooling_layer_13);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_fully_connected_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_fully_connected_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_fully_connected_layer_0);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_openvx_tensor_multiply_Kernel, pObjectContainer, "org_khronos_openvx_tensor_multiply_0", filteredNodeList, filteredNodeCount, &org_khronos_openvx_tensor_multiply_0);
+    if(status != VX_SUCCESS)
+        return status;
+
+    status = CreateNode(graph, org_khronos_nn_extension_softmax_layer_Kernel, pObjectContainer, "org_khronos_nn_extension_softmax_layer_0", filteredNodeList, filteredNodeCount, &org_khronos_nn_extension_softmax_layer_0);
+    if(status != VX_SUCCESS)
+        return status;
+
+
+    //
+    // Assign Primitives to nodes
+    //
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_0, "org_khronos_nn_extension_convolution_layer_0", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_0, "org_khronos_nn_extension_activation_layer_0", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_0_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_0, "org_khronos_nn_extension_activation_layer_0", 1, (vx_reference)org_khronos_nn_extension_activation_layer_0_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_0, "org_khronos_nn_extension_activation_layer_0", 2, (vx_reference)org_khronos_nn_extension_activation_layer_0_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_0, "org_khronos_nn_extension_activation_layer_0", 3, (vx_reference)org_khronos_nn_extension_activation_layer_0_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_0, "org_khronos_nn_extension_activation_layer_0", 4, (vx_reference)org_khronos_nn_extension_activation_layer_0_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 0, (vx_reference)org_khronos_nn_extension_activation_layer_0_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_0, "org_khronos_nn_extension_pooling_layer_0", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_0, "org_khronos_nn_extension_normalization_layer_0", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_0_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_0, "org_khronos_nn_extension_normalization_layer_0", 1, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_0, "org_khronos_nn_extension_normalization_layer_0", 2, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_0, "org_khronos_nn_extension_normalization_layer_0", 3, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_0, "org_khronos_nn_extension_normalization_layer_0", 4, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_0, "org_khronos_nn_extension_normalization_layer_0", 5, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 0, (vx_reference)org_khronos_nn_extension_normalization_layer_0_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_1, "org_khronos_nn_extension_convolution_layer_1", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_1, "org_khronos_nn_extension_activation_layer_1", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_1_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_1, "org_khronos_nn_extension_activation_layer_1", 1, (vx_reference)org_khronos_nn_extension_activation_layer_1_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_1, "org_khronos_nn_extension_activation_layer_1", 2, (vx_reference)org_khronos_nn_extension_activation_layer_1_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_1, "org_khronos_nn_extension_activation_layer_1", 3, (vx_reference)org_khronos_nn_extension_activation_layer_1_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_1, "org_khronos_nn_extension_activation_layer_1", 4, (vx_reference)org_khronos_nn_extension_activation_layer_1_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 0, (vx_reference)org_khronos_nn_extension_activation_layer_1_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_2, "org_khronos_nn_extension_convolution_layer_2", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_2, "org_khronos_nn_extension_activation_layer_2", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_2_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_2, "org_khronos_nn_extension_activation_layer_2", 1, (vx_reference)org_khronos_nn_extension_activation_layer_2_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_2, "org_khronos_nn_extension_activation_layer_2", 2, (vx_reference)org_khronos_nn_extension_activation_layer_2_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_2, "org_khronos_nn_extension_activation_layer_2", 3, (vx_reference)org_khronos_nn_extension_activation_layer_2_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_2, "org_khronos_nn_extension_activation_layer_2", 4, (vx_reference)org_khronos_nn_extension_activation_layer_2_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_1, "org_khronos_nn_extension_normalization_layer_1", 0, (vx_reference)org_khronos_nn_extension_activation_layer_2_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_1, "org_khronos_nn_extension_normalization_layer_1", 1, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_1, "org_khronos_nn_extension_normalization_layer_1", 2, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_1, "org_khronos_nn_extension_normalization_layer_1", 3, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_1, "org_khronos_nn_extension_normalization_layer_1", 4, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_normalization_layer_1, "org_khronos_nn_extension_normalization_layer_1", 5, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 0, (vx_reference)org_khronos_nn_extension_normalization_layer_1_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_1, "org_khronos_nn_extension_pooling_layer_1", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_8, "org_khronos_nn_extension_convolution_layer_8", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_6, "org_khronos_nn_extension_convolution_layer_6", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_4, "org_khronos_nn_extension_convolution_layer_4", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_1_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_2, "org_khronos_nn_extension_pooling_layer_2", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_8, "org_khronos_nn_extension_activation_layer_8", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_8_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_8, "org_khronos_nn_extension_activation_layer_8", 1, (vx_reference)org_khronos_nn_extension_activation_layer_8_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_8, "org_khronos_nn_extension_activation_layer_8", 2, (vx_reference)org_khronos_nn_extension_activation_layer_8_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_8, "org_khronos_nn_extension_activation_layer_8", 3, (vx_reference)org_khronos_nn_extension_activation_layer_8_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_8, "org_khronos_nn_extension_activation_layer_8", 4, (vx_reference)org_khronos_nn_extension_activation_layer_8_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_6, "org_khronos_nn_extension_activation_layer_6", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_6_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_6, "org_khronos_nn_extension_activation_layer_6", 1, (vx_reference)org_khronos_nn_extension_activation_layer_6_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_6, "org_khronos_nn_extension_activation_layer_6", 2, (vx_reference)org_khronos_nn_extension_activation_layer_6_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_6, "org_khronos_nn_extension_activation_layer_6", 3, (vx_reference)org_khronos_nn_extension_activation_layer_6_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_6, "org_khronos_nn_extension_activation_layer_6", 4, (vx_reference)org_khronos_nn_extension_activation_layer_6_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_4, "org_khronos_nn_extension_activation_layer_4", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_4_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_4, "org_khronos_nn_extension_activation_layer_4", 1, (vx_reference)org_khronos_nn_extension_activation_layer_4_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_4, "org_khronos_nn_extension_activation_layer_4", 2, (vx_reference)org_khronos_nn_extension_activation_layer_4_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_4, "org_khronos_nn_extension_activation_layer_4", 3, (vx_reference)org_khronos_nn_extension_activation_layer_4_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_4, "org_khronos_nn_extension_activation_layer_4", 4, (vx_reference)org_khronos_nn_extension_activation_layer_4_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_2_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_3, "org_khronos_nn_extension_convolution_layer_3", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 0, (vx_reference)org_khronos_nn_extension_activation_layer_6_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_7, "org_khronos_nn_extension_convolution_layer_7", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 0, (vx_reference)org_khronos_nn_extension_activation_layer_4_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_5, "org_khronos_nn_extension_convolution_layer_5", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_3, "org_khronos_nn_extension_activation_layer_3", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_3_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_3, "org_khronos_nn_extension_activation_layer_3", 1, (vx_reference)org_khronos_nn_extension_activation_layer_3_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_3, "org_khronos_nn_extension_activation_layer_3", 2, (vx_reference)org_khronos_nn_extension_activation_layer_3_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_3, "org_khronos_nn_extension_activation_layer_3", 3, (vx_reference)org_khronos_nn_extension_activation_layer_3_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_3, "org_khronos_nn_extension_activation_layer_3", 4, (vx_reference)org_khronos_nn_extension_activation_layer_3_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_7, "org_khronos_nn_extension_activation_layer_7", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_7_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_7, "org_khronos_nn_extension_activation_layer_7", 1, (vx_reference)org_khronos_nn_extension_activation_layer_7_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_7, "org_khronos_nn_extension_activation_layer_7", 2, (vx_reference)org_khronos_nn_extension_activation_layer_7_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_7, "org_khronos_nn_extension_activation_layer_7", 3, (vx_reference)org_khronos_nn_extension_activation_layer_7_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_7, "org_khronos_nn_extension_activation_layer_7", 4, (vx_reference)org_khronos_nn_extension_activation_layer_7_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_5, "org_khronos_nn_extension_activation_layer_5", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_5_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_5, "org_khronos_nn_extension_activation_layer_5", 1, (vx_reference)org_khronos_nn_extension_activation_layer_5_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_5, "org_khronos_nn_extension_activation_layer_5", 2, (vx_reference)org_khronos_nn_extension_activation_layer_5_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_5, "org_khronos_nn_extension_activation_layer_5", 3, (vx_reference)org_khronos_nn_extension_activation_layer_5_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_5, "org_khronos_nn_extension_activation_layer_5", 4, (vx_reference)org_khronos_nn_extension_activation_layer_5_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 0, (vx_reference)outputAllocators_MergeTensor_0_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_14, "org_khronos_nn_extension_convolution_layer_14", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 0, (vx_reference)outputAllocators_MergeTensor_0_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_12, "org_khronos_nn_extension_convolution_layer_12", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 0, (vx_reference)outputAllocators_MergeTensor_0_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_10, "org_khronos_nn_extension_convolution_layer_10", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 0, (vx_reference)outputAllocators_MergeTensor_0_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_3, "org_khronos_nn_extension_pooling_layer_3", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_14, "org_khronos_nn_extension_activation_layer_14", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_14_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_14, "org_khronos_nn_extension_activation_layer_14", 1, (vx_reference)org_khronos_nn_extension_activation_layer_14_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_14, "org_khronos_nn_extension_activation_layer_14", 2, (vx_reference)org_khronos_nn_extension_activation_layer_14_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_14, "org_khronos_nn_extension_activation_layer_14", 3, (vx_reference)org_khronos_nn_extension_activation_layer_14_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_14, "org_khronos_nn_extension_activation_layer_14", 4, (vx_reference)org_khronos_nn_extension_activation_layer_14_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_12, "org_khronos_nn_extension_activation_layer_12", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_12_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_12, "org_khronos_nn_extension_activation_layer_12", 1, (vx_reference)org_khronos_nn_extension_activation_layer_12_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_12, "org_khronos_nn_extension_activation_layer_12", 2, (vx_reference)org_khronos_nn_extension_activation_layer_12_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_12, "org_khronos_nn_extension_activation_layer_12", 3, (vx_reference)org_khronos_nn_extension_activation_layer_12_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_12, "org_khronos_nn_extension_activation_layer_12", 4, (vx_reference)org_khronos_nn_extension_activation_layer_12_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_10, "org_khronos_nn_extension_activation_layer_10", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_10_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_10, "org_khronos_nn_extension_activation_layer_10", 1, (vx_reference)org_khronos_nn_extension_activation_layer_10_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_10, "org_khronos_nn_extension_activation_layer_10", 2, (vx_reference)org_khronos_nn_extension_activation_layer_10_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_10, "org_khronos_nn_extension_activation_layer_10", 3, (vx_reference)org_khronos_nn_extension_activation_layer_10_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_10, "org_khronos_nn_extension_activation_layer_10", 4, (vx_reference)org_khronos_nn_extension_activation_layer_10_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_3_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_9, "org_khronos_nn_extension_convolution_layer_9", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 0, (vx_reference)org_khronos_nn_extension_activation_layer_12_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_13, "org_khronos_nn_extension_convolution_layer_13", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 0, (vx_reference)org_khronos_nn_extension_activation_layer_10_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_11, "org_khronos_nn_extension_convolution_layer_11", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_9, "org_khronos_nn_extension_activation_layer_9", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_9_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_9, "org_khronos_nn_extension_activation_layer_9", 1, (vx_reference)org_khronos_nn_extension_activation_layer_9_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_9, "org_khronos_nn_extension_activation_layer_9", 2, (vx_reference)org_khronos_nn_extension_activation_layer_9_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_9, "org_khronos_nn_extension_activation_layer_9", 3, (vx_reference)org_khronos_nn_extension_activation_layer_9_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_9, "org_khronos_nn_extension_activation_layer_9", 4, (vx_reference)org_khronos_nn_extension_activation_layer_9_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_13, "org_khronos_nn_extension_activation_layer_13", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_13_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_13, "org_khronos_nn_extension_activation_layer_13", 1, (vx_reference)org_khronos_nn_extension_activation_layer_13_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_13, "org_khronos_nn_extension_activation_layer_13", 2, (vx_reference)org_khronos_nn_extension_activation_layer_13_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_13, "org_khronos_nn_extension_activation_layer_13", 3, (vx_reference)org_khronos_nn_extension_activation_layer_13_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_13, "org_khronos_nn_extension_activation_layer_13", 4, (vx_reference)org_khronos_nn_extension_activation_layer_13_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_11, "org_khronos_nn_extension_activation_layer_11", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_11_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_11, "org_khronos_nn_extension_activation_layer_11", 1, (vx_reference)org_khronos_nn_extension_activation_layer_11_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_11, "org_khronos_nn_extension_activation_layer_11", 2, (vx_reference)org_khronos_nn_extension_activation_layer_11_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_11, "org_khronos_nn_extension_activation_layer_11", 3, (vx_reference)org_khronos_nn_extension_activation_layer_11_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_11, "org_khronos_nn_extension_activation_layer_11", 4, (vx_reference)org_khronos_nn_extension_activation_layer_11_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 0, (vx_reference)outputAllocators_MergeTensor_1_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_4, "org_khronos_nn_extension_pooling_layer_4", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_20, "org_khronos_nn_extension_convolution_layer_20", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_18, "org_khronos_nn_extension_convolution_layer_18", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_16, "org_khronos_nn_extension_convolution_layer_16", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_4_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_5, "org_khronos_nn_extension_pooling_layer_5", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_20, "org_khronos_nn_extension_activation_layer_20", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_20_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_20, "org_khronos_nn_extension_activation_layer_20", 1, (vx_reference)org_khronos_nn_extension_activation_layer_20_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_20, "org_khronos_nn_extension_activation_layer_20", 2, (vx_reference)org_khronos_nn_extension_activation_layer_20_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_20, "org_khronos_nn_extension_activation_layer_20", 3, (vx_reference)org_khronos_nn_extension_activation_layer_20_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_20, "org_khronos_nn_extension_activation_layer_20", 4, (vx_reference)org_khronos_nn_extension_activation_layer_20_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_18, "org_khronos_nn_extension_activation_layer_18", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_18_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_18, "org_khronos_nn_extension_activation_layer_18", 1, (vx_reference)org_khronos_nn_extension_activation_layer_18_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_18, "org_khronos_nn_extension_activation_layer_18", 2, (vx_reference)org_khronos_nn_extension_activation_layer_18_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_18, "org_khronos_nn_extension_activation_layer_18", 3, (vx_reference)org_khronos_nn_extension_activation_layer_18_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_18, "org_khronos_nn_extension_activation_layer_18", 4, (vx_reference)org_khronos_nn_extension_activation_layer_18_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_16, "org_khronos_nn_extension_activation_layer_16", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_16_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_16, "org_khronos_nn_extension_activation_layer_16", 1, (vx_reference)org_khronos_nn_extension_activation_layer_16_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_16, "org_khronos_nn_extension_activation_layer_16", 2, (vx_reference)org_khronos_nn_extension_activation_layer_16_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_16, "org_khronos_nn_extension_activation_layer_16", 3, (vx_reference)org_khronos_nn_extension_activation_layer_16_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_16, "org_khronos_nn_extension_activation_layer_16", 4, (vx_reference)org_khronos_nn_extension_activation_layer_16_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_5_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_15, "org_khronos_nn_extension_convolution_layer_15", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 0, (vx_reference)org_khronos_nn_extension_activation_layer_18_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_19, "org_khronos_nn_extension_convolution_layer_19", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 0, (vx_reference)org_khronos_nn_extension_activation_layer_16_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_17, "org_khronos_nn_extension_convolution_layer_17", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_15, "org_khronos_nn_extension_activation_layer_15", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_15_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_15, "org_khronos_nn_extension_activation_layer_15", 1, (vx_reference)org_khronos_nn_extension_activation_layer_15_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_15, "org_khronos_nn_extension_activation_layer_15", 2, (vx_reference)org_khronos_nn_extension_activation_layer_15_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_15, "org_khronos_nn_extension_activation_layer_15", 3, (vx_reference)org_khronos_nn_extension_activation_layer_15_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_15, "org_khronos_nn_extension_activation_layer_15", 4, (vx_reference)org_khronos_nn_extension_activation_layer_15_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_19, "org_khronos_nn_extension_activation_layer_19", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_19_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_19, "org_khronos_nn_extension_activation_layer_19", 1, (vx_reference)org_khronos_nn_extension_activation_layer_19_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_19, "org_khronos_nn_extension_activation_layer_19", 2, (vx_reference)org_khronos_nn_extension_activation_layer_19_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_19, "org_khronos_nn_extension_activation_layer_19", 3, (vx_reference)org_khronos_nn_extension_activation_layer_19_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_19, "org_khronos_nn_extension_activation_layer_19", 4, (vx_reference)org_khronos_nn_extension_activation_layer_19_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_17, "org_khronos_nn_extension_activation_layer_17", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_17_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_17, "org_khronos_nn_extension_activation_layer_17", 1, (vx_reference)org_khronos_nn_extension_activation_layer_17_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_17, "org_khronos_nn_extension_activation_layer_17", 2, (vx_reference)org_khronos_nn_extension_activation_layer_17_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_17, "org_khronos_nn_extension_activation_layer_17", 3, (vx_reference)org_khronos_nn_extension_activation_layer_17_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_17, "org_khronos_nn_extension_activation_layer_17", 4, (vx_reference)org_khronos_nn_extension_activation_layer_17_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 0, (vx_reference)outputAllocators_MergeTensor_2_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_26, "org_khronos_nn_extension_convolution_layer_26", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 0, (vx_reference)outputAllocators_MergeTensor_2_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_24, "org_khronos_nn_extension_convolution_layer_24", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 0, (vx_reference)outputAllocators_MergeTensor_2_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_22, "org_khronos_nn_extension_convolution_layer_22", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 0, (vx_reference)outputAllocators_MergeTensor_2_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_6, "org_khronos_nn_extension_pooling_layer_6", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_26, "org_khronos_nn_extension_activation_layer_26", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_26_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_26, "org_khronos_nn_extension_activation_layer_26", 1, (vx_reference)org_khronos_nn_extension_activation_layer_26_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_26, "org_khronos_nn_extension_activation_layer_26", 2, (vx_reference)org_khronos_nn_extension_activation_layer_26_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_26, "org_khronos_nn_extension_activation_layer_26", 3, (vx_reference)org_khronos_nn_extension_activation_layer_26_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_26, "org_khronos_nn_extension_activation_layer_26", 4, (vx_reference)org_khronos_nn_extension_activation_layer_26_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_24, "org_khronos_nn_extension_activation_layer_24", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_24_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_24, "org_khronos_nn_extension_activation_layer_24", 1, (vx_reference)org_khronos_nn_extension_activation_layer_24_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_24, "org_khronos_nn_extension_activation_layer_24", 2, (vx_reference)org_khronos_nn_extension_activation_layer_24_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_24, "org_khronos_nn_extension_activation_layer_24", 3, (vx_reference)org_khronos_nn_extension_activation_layer_24_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_24, "org_khronos_nn_extension_activation_layer_24", 4, (vx_reference)org_khronos_nn_extension_activation_layer_24_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_22, "org_khronos_nn_extension_activation_layer_22", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_22_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_22, "org_khronos_nn_extension_activation_layer_22", 1, (vx_reference)org_khronos_nn_extension_activation_layer_22_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_22, "org_khronos_nn_extension_activation_layer_22", 2, (vx_reference)org_khronos_nn_extension_activation_layer_22_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_22, "org_khronos_nn_extension_activation_layer_22", 3, (vx_reference)org_khronos_nn_extension_activation_layer_22_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_22, "org_khronos_nn_extension_activation_layer_22", 4, (vx_reference)org_khronos_nn_extension_activation_layer_22_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_6_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_21, "org_khronos_nn_extension_convolution_layer_21", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 0, (vx_reference)org_khronos_nn_extension_activation_layer_24_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_25, "org_khronos_nn_extension_convolution_layer_25", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 0, (vx_reference)org_khronos_nn_extension_activation_layer_22_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_23, "org_khronos_nn_extension_convolution_layer_23", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_21, "org_khronos_nn_extension_activation_layer_21", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_21_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_21, "org_khronos_nn_extension_activation_layer_21", 1, (vx_reference)org_khronos_nn_extension_activation_layer_21_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_21, "org_khronos_nn_extension_activation_layer_21", 2, (vx_reference)org_khronos_nn_extension_activation_layer_21_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_21, "org_khronos_nn_extension_activation_layer_21", 3, (vx_reference)org_khronos_nn_extension_activation_layer_21_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_21, "org_khronos_nn_extension_activation_layer_21", 4, (vx_reference)org_khronos_nn_extension_activation_layer_21_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_25, "org_khronos_nn_extension_activation_layer_25", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_25_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_25, "org_khronos_nn_extension_activation_layer_25", 1, (vx_reference)org_khronos_nn_extension_activation_layer_25_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_25, "org_khronos_nn_extension_activation_layer_25", 2, (vx_reference)org_khronos_nn_extension_activation_layer_25_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_25, "org_khronos_nn_extension_activation_layer_25", 3, (vx_reference)org_khronos_nn_extension_activation_layer_25_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_25, "org_khronos_nn_extension_activation_layer_25", 4, (vx_reference)org_khronos_nn_extension_activation_layer_25_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_23, "org_khronos_nn_extension_activation_layer_23", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_23_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_23, "org_khronos_nn_extension_activation_layer_23", 1, (vx_reference)org_khronos_nn_extension_activation_layer_23_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_23, "org_khronos_nn_extension_activation_layer_23", 2, (vx_reference)org_khronos_nn_extension_activation_layer_23_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_23, "org_khronos_nn_extension_activation_layer_23", 3, (vx_reference)org_khronos_nn_extension_activation_layer_23_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_23, "org_khronos_nn_extension_activation_layer_23", 4, (vx_reference)org_khronos_nn_extension_activation_layer_23_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 0, (vx_reference)outputAllocators_MergeTensor_3_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_32, "org_khronos_nn_extension_convolution_layer_32", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 0, (vx_reference)outputAllocators_MergeTensor_3_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_30, "org_khronos_nn_extension_convolution_layer_30", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 0, (vx_reference)outputAllocators_MergeTensor_3_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_28, "org_khronos_nn_extension_convolution_layer_28", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 0, (vx_reference)outputAllocators_MergeTensor_3_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_7, "org_khronos_nn_extension_pooling_layer_7", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_32, "org_khronos_nn_extension_activation_layer_32", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_32_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_32, "org_khronos_nn_extension_activation_layer_32", 1, (vx_reference)org_khronos_nn_extension_activation_layer_32_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_32, "org_khronos_nn_extension_activation_layer_32", 2, (vx_reference)org_khronos_nn_extension_activation_layer_32_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_32, "org_khronos_nn_extension_activation_layer_32", 3, (vx_reference)org_khronos_nn_extension_activation_layer_32_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_32, "org_khronos_nn_extension_activation_layer_32", 4, (vx_reference)org_khronos_nn_extension_activation_layer_32_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_30, "org_khronos_nn_extension_activation_layer_30", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_30_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_30, "org_khronos_nn_extension_activation_layer_30", 1, (vx_reference)org_khronos_nn_extension_activation_layer_30_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_30, "org_khronos_nn_extension_activation_layer_30", 2, (vx_reference)org_khronos_nn_extension_activation_layer_30_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_30, "org_khronos_nn_extension_activation_layer_30", 3, (vx_reference)org_khronos_nn_extension_activation_layer_30_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_30, "org_khronos_nn_extension_activation_layer_30", 4, (vx_reference)org_khronos_nn_extension_activation_layer_30_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_28, "org_khronos_nn_extension_activation_layer_28", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_28_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_28, "org_khronos_nn_extension_activation_layer_28", 1, (vx_reference)org_khronos_nn_extension_activation_layer_28_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_28, "org_khronos_nn_extension_activation_layer_28", 2, (vx_reference)org_khronos_nn_extension_activation_layer_28_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_28, "org_khronos_nn_extension_activation_layer_28", 3, (vx_reference)org_khronos_nn_extension_activation_layer_28_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_28, "org_khronos_nn_extension_activation_layer_28", 4, (vx_reference)org_khronos_nn_extension_activation_layer_28_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_7_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_27, "org_khronos_nn_extension_convolution_layer_27", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 0, (vx_reference)org_khronos_nn_extension_activation_layer_30_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_31, "org_khronos_nn_extension_convolution_layer_31", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 0, (vx_reference)org_khronos_nn_extension_activation_layer_28_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_29, "org_khronos_nn_extension_convolution_layer_29", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_27, "org_khronos_nn_extension_activation_layer_27", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_27_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_27, "org_khronos_nn_extension_activation_layer_27", 1, (vx_reference)org_khronos_nn_extension_activation_layer_27_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_27, "org_khronos_nn_extension_activation_layer_27", 2, (vx_reference)org_khronos_nn_extension_activation_layer_27_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_27, "org_khronos_nn_extension_activation_layer_27", 3, (vx_reference)org_khronos_nn_extension_activation_layer_27_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_27, "org_khronos_nn_extension_activation_layer_27", 4, (vx_reference)org_khronos_nn_extension_activation_layer_27_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_31, "org_khronos_nn_extension_activation_layer_31", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_31_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_31, "org_khronos_nn_extension_activation_layer_31", 1, (vx_reference)org_khronos_nn_extension_activation_layer_31_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_31, "org_khronos_nn_extension_activation_layer_31", 2, (vx_reference)org_khronos_nn_extension_activation_layer_31_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_31, "org_khronos_nn_extension_activation_layer_31", 3, (vx_reference)org_khronos_nn_extension_activation_layer_31_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_31, "org_khronos_nn_extension_activation_layer_31", 4, (vx_reference)org_khronos_nn_extension_activation_layer_31_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_29, "org_khronos_nn_extension_activation_layer_29", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_29_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_29, "org_khronos_nn_extension_activation_layer_29", 1, (vx_reference)org_khronos_nn_extension_activation_layer_29_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_29, "org_khronos_nn_extension_activation_layer_29", 2, (vx_reference)org_khronos_nn_extension_activation_layer_29_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_29, "org_khronos_nn_extension_activation_layer_29", 3, (vx_reference)org_khronos_nn_extension_activation_layer_29_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_29, "org_khronos_nn_extension_activation_layer_29", 4, (vx_reference)org_khronos_nn_extension_activation_layer_29_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 0, (vx_reference)outputAllocators_MergeTensor_4_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_38, "org_khronos_nn_extension_convolution_layer_38", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 0, (vx_reference)outputAllocators_MergeTensor_4_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_36, "org_khronos_nn_extension_convolution_layer_36", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 0, (vx_reference)outputAllocators_MergeTensor_4_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_34, "org_khronos_nn_extension_convolution_layer_34", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 0, (vx_reference)outputAllocators_MergeTensor_4_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_8, "org_khronos_nn_extension_pooling_layer_8", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_38, "org_khronos_nn_extension_activation_layer_38", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_38_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_38, "org_khronos_nn_extension_activation_layer_38", 1, (vx_reference)org_khronos_nn_extension_activation_layer_38_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_38, "org_khronos_nn_extension_activation_layer_38", 2, (vx_reference)org_khronos_nn_extension_activation_layer_38_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_38, "org_khronos_nn_extension_activation_layer_38", 3, (vx_reference)org_khronos_nn_extension_activation_layer_38_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_38, "org_khronos_nn_extension_activation_layer_38", 4, (vx_reference)org_khronos_nn_extension_activation_layer_38_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_36, "org_khronos_nn_extension_activation_layer_36", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_36_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_36, "org_khronos_nn_extension_activation_layer_36", 1, (vx_reference)org_khronos_nn_extension_activation_layer_36_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_36, "org_khronos_nn_extension_activation_layer_36", 2, (vx_reference)org_khronos_nn_extension_activation_layer_36_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_36, "org_khronos_nn_extension_activation_layer_36", 3, (vx_reference)org_khronos_nn_extension_activation_layer_36_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_36, "org_khronos_nn_extension_activation_layer_36", 4, (vx_reference)org_khronos_nn_extension_activation_layer_36_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_34, "org_khronos_nn_extension_activation_layer_34", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_34_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_34, "org_khronos_nn_extension_activation_layer_34", 1, (vx_reference)org_khronos_nn_extension_activation_layer_34_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_34, "org_khronos_nn_extension_activation_layer_34", 2, (vx_reference)org_khronos_nn_extension_activation_layer_34_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_34, "org_khronos_nn_extension_activation_layer_34", 3, (vx_reference)org_khronos_nn_extension_activation_layer_34_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_34, "org_khronos_nn_extension_activation_layer_34", 4, (vx_reference)org_khronos_nn_extension_activation_layer_34_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_8_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_33, "org_khronos_nn_extension_convolution_layer_33", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 0, (vx_reference)org_khronos_nn_extension_activation_layer_36_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_37, "org_khronos_nn_extension_convolution_layer_37", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 0, (vx_reference)org_khronos_nn_extension_activation_layer_34_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_35, "org_khronos_nn_extension_convolution_layer_35", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_33, "org_khronos_nn_extension_activation_layer_33", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_33_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_33, "org_khronos_nn_extension_activation_layer_33", 1, (vx_reference)org_khronos_nn_extension_activation_layer_33_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_33, "org_khronos_nn_extension_activation_layer_33", 2, (vx_reference)org_khronos_nn_extension_activation_layer_33_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_33, "org_khronos_nn_extension_activation_layer_33", 3, (vx_reference)org_khronos_nn_extension_activation_layer_33_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_33, "org_khronos_nn_extension_activation_layer_33", 4, (vx_reference)org_khronos_nn_extension_activation_layer_33_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_37, "org_khronos_nn_extension_activation_layer_37", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_37_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_37, "org_khronos_nn_extension_activation_layer_37", 1, (vx_reference)org_khronos_nn_extension_activation_layer_37_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_37, "org_khronos_nn_extension_activation_layer_37", 2, (vx_reference)org_khronos_nn_extension_activation_layer_37_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_37, "org_khronos_nn_extension_activation_layer_37", 3, (vx_reference)org_khronos_nn_extension_activation_layer_37_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_37, "org_khronos_nn_extension_activation_layer_37", 4, (vx_reference)org_khronos_nn_extension_activation_layer_37_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_35, "org_khronos_nn_extension_activation_layer_35", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_35_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_35, "org_khronos_nn_extension_activation_layer_35", 1, (vx_reference)org_khronos_nn_extension_activation_layer_35_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_35, "org_khronos_nn_extension_activation_layer_35", 2, (vx_reference)org_khronos_nn_extension_activation_layer_35_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_35, "org_khronos_nn_extension_activation_layer_35", 3, (vx_reference)org_khronos_nn_extension_activation_layer_35_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_35, "org_khronos_nn_extension_activation_layer_35", 4, (vx_reference)org_khronos_nn_extension_activation_layer_35_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 0, (vx_reference)outputAllocators_MergeTensor_5_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_44, "org_khronos_nn_extension_convolution_layer_44", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 0, (vx_reference)outputAllocators_MergeTensor_5_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_42, "org_khronos_nn_extension_convolution_layer_42", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 0, (vx_reference)outputAllocators_MergeTensor_5_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_40, "org_khronos_nn_extension_convolution_layer_40", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 0, (vx_reference)outputAllocators_MergeTensor_5_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_9, "org_khronos_nn_extension_pooling_layer_9", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_44, "org_khronos_nn_extension_activation_layer_44", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_44_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_44, "org_khronos_nn_extension_activation_layer_44", 1, (vx_reference)org_khronos_nn_extension_activation_layer_44_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_44, "org_khronos_nn_extension_activation_layer_44", 2, (vx_reference)org_khronos_nn_extension_activation_layer_44_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_44, "org_khronos_nn_extension_activation_layer_44", 3, (vx_reference)org_khronos_nn_extension_activation_layer_44_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_44, "org_khronos_nn_extension_activation_layer_44", 4, (vx_reference)org_khronos_nn_extension_activation_layer_44_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_42, "org_khronos_nn_extension_activation_layer_42", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_42_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_42, "org_khronos_nn_extension_activation_layer_42", 1, (vx_reference)org_khronos_nn_extension_activation_layer_42_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_42, "org_khronos_nn_extension_activation_layer_42", 2, (vx_reference)org_khronos_nn_extension_activation_layer_42_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_42, "org_khronos_nn_extension_activation_layer_42", 3, (vx_reference)org_khronos_nn_extension_activation_layer_42_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_42, "org_khronos_nn_extension_activation_layer_42", 4, (vx_reference)org_khronos_nn_extension_activation_layer_42_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_40, "org_khronos_nn_extension_activation_layer_40", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_40_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_40, "org_khronos_nn_extension_activation_layer_40", 1, (vx_reference)org_khronos_nn_extension_activation_layer_40_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_40, "org_khronos_nn_extension_activation_layer_40", 2, (vx_reference)org_khronos_nn_extension_activation_layer_40_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_40, "org_khronos_nn_extension_activation_layer_40", 3, (vx_reference)org_khronos_nn_extension_activation_layer_40_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_40, "org_khronos_nn_extension_activation_layer_40", 4, (vx_reference)org_khronos_nn_extension_activation_layer_40_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_9_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_39, "org_khronos_nn_extension_convolution_layer_39", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 0, (vx_reference)org_khronos_nn_extension_activation_layer_42_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_43, "org_khronos_nn_extension_convolution_layer_43", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 0, (vx_reference)org_khronos_nn_extension_activation_layer_40_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_41, "org_khronos_nn_extension_convolution_layer_41", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_39, "org_khronos_nn_extension_activation_layer_39", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_39_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_39, "org_khronos_nn_extension_activation_layer_39", 1, (vx_reference)org_khronos_nn_extension_activation_layer_39_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_39, "org_khronos_nn_extension_activation_layer_39", 2, (vx_reference)org_khronos_nn_extension_activation_layer_39_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_39, "org_khronos_nn_extension_activation_layer_39", 3, (vx_reference)org_khronos_nn_extension_activation_layer_39_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_39, "org_khronos_nn_extension_activation_layer_39", 4, (vx_reference)org_khronos_nn_extension_activation_layer_39_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_43, "org_khronos_nn_extension_activation_layer_43", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_43_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_43, "org_khronos_nn_extension_activation_layer_43", 1, (vx_reference)org_khronos_nn_extension_activation_layer_43_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_43, "org_khronos_nn_extension_activation_layer_43", 2, (vx_reference)org_khronos_nn_extension_activation_layer_43_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_43, "org_khronos_nn_extension_activation_layer_43", 3, (vx_reference)org_khronos_nn_extension_activation_layer_43_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_43, "org_khronos_nn_extension_activation_layer_43", 4, (vx_reference)org_khronos_nn_extension_activation_layer_43_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_41, "org_khronos_nn_extension_activation_layer_41", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_41_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_41, "org_khronos_nn_extension_activation_layer_41", 1, (vx_reference)org_khronos_nn_extension_activation_layer_41_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_41, "org_khronos_nn_extension_activation_layer_41", 2, (vx_reference)org_khronos_nn_extension_activation_layer_41_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_41, "org_khronos_nn_extension_activation_layer_41", 3, (vx_reference)org_khronos_nn_extension_activation_layer_41_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_41, "org_khronos_nn_extension_activation_layer_41", 4, (vx_reference)org_khronos_nn_extension_activation_layer_41_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 0, (vx_reference)outputAllocators_MergeTensor_6_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_10, "org_khronos_nn_extension_pooling_layer_10", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_50, "org_khronos_nn_extension_convolution_layer_50", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_48, "org_khronos_nn_extension_convolution_layer_48", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_46, "org_khronos_nn_extension_convolution_layer_46", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_10_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_11, "org_khronos_nn_extension_pooling_layer_11", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_50, "org_khronos_nn_extension_activation_layer_50", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_50_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_50, "org_khronos_nn_extension_activation_layer_50", 1, (vx_reference)org_khronos_nn_extension_activation_layer_50_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_50, "org_khronos_nn_extension_activation_layer_50", 2, (vx_reference)org_khronos_nn_extension_activation_layer_50_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_50, "org_khronos_nn_extension_activation_layer_50", 3, (vx_reference)org_khronos_nn_extension_activation_layer_50_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_50, "org_khronos_nn_extension_activation_layer_50", 4, (vx_reference)org_khronos_nn_extension_activation_layer_50_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_48, "org_khronos_nn_extension_activation_layer_48", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_48_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_48, "org_khronos_nn_extension_activation_layer_48", 1, (vx_reference)org_khronos_nn_extension_activation_layer_48_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_48, "org_khronos_nn_extension_activation_layer_48", 2, (vx_reference)org_khronos_nn_extension_activation_layer_48_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_48, "org_khronos_nn_extension_activation_layer_48", 3, (vx_reference)org_khronos_nn_extension_activation_layer_48_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_48, "org_khronos_nn_extension_activation_layer_48", 4, (vx_reference)org_khronos_nn_extension_activation_layer_48_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_46, "org_khronos_nn_extension_activation_layer_46", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_46_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_46, "org_khronos_nn_extension_activation_layer_46", 1, (vx_reference)org_khronos_nn_extension_activation_layer_46_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_46, "org_khronos_nn_extension_activation_layer_46", 2, (vx_reference)org_khronos_nn_extension_activation_layer_46_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_46, "org_khronos_nn_extension_activation_layer_46", 3, (vx_reference)org_khronos_nn_extension_activation_layer_46_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_46, "org_khronos_nn_extension_activation_layer_46", 4, (vx_reference)org_khronos_nn_extension_activation_layer_46_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_11_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_45, "org_khronos_nn_extension_convolution_layer_45", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 0, (vx_reference)org_khronos_nn_extension_activation_layer_48_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_49, "org_khronos_nn_extension_convolution_layer_49", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 0, (vx_reference)org_khronos_nn_extension_activation_layer_46_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_47, "org_khronos_nn_extension_convolution_layer_47", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_45, "org_khronos_nn_extension_activation_layer_45", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_45_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_45, "org_khronos_nn_extension_activation_layer_45", 1, (vx_reference)org_khronos_nn_extension_activation_layer_45_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_45, "org_khronos_nn_extension_activation_layer_45", 2, (vx_reference)org_khronos_nn_extension_activation_layer_45_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_45, "org_khronos_nn_extension_activation_layer_45", 3, (vx_reference)org_khronos_nn_extension_activation_layer_45_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_45, "org_khronos_nn_extension_activation_layer_45", 4, (vx_reference)org_khronos_nn_extension_activation_layer_45_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_49, "org_khronos_nn_extension_activation_layer_49", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_49_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_49, "org_khronos_nn_extension_activation_layer_49", 1, (vx_reference)org_khronos_nn_extension_activation_layer_49_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_49, "org_khronos_nn_extension_activation_layer_49", 2, (vx_reference)org_khronos_nn_extension_activation_layer_49_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_49, "org_khronos_nn_extension_activation_layer_49", 3, (vx_reference)org_khronos_nn_extension_activation_layer_49_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_49, "org_khronos_nn_extension_activation_layer_49", 4, (vx_reference)org_khronos_nn_extension_activation_layer_49_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_47, "org_khronos_nn_extension_activation_layer_47", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_47_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_47, "org_khronos_nn_extension_activation_layer_47", 1, (vx_reference)org_khronos_nn_extension_activation_layer_47_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_47, "org_khronos_nn_extension_activation_layer_47", 2, (vx_reference)org_khronos_nn_extension_activation_layer_47_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_47, "org_khronos_nn_extension_activation_layer_47", 3, (vx_reference)org_khronos_nn_extension_activation_layer_47_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_47, "org_khronos_nn_extension_activation_layer_47", 4, (vx_reference)org_khronos_nn_extension_activation_layer_47_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 0, (vx_reference)outputAllocators_MergeTensor_7_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_56, "org_khronos_nn_extension_convolution_layer_56", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 0, (vx_reference)outputAllocators_MergeTensor_7_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_54, "org_khronos_nn_extension_convolution_layer_54", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 0, (vx_reference)outputAllocators_MergeTensor_7_p0);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_52, "org_khronos_nn_extension_convolution_layer_52", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 0, (vx_reference)outputAllocators_MergeTensor_7_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_12, "org_khronos_nn_extension_pooling_layer_12", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_56, "org_khronos_nn_extension_activation_layer_56", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_56_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_56, "org_khronos_nn_extension_activation_layer_56", 1, (vx_reference)org_khronos_nn_extension_activation_layer_56_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_56, "org_khronos_nn_extension_activation_layer_56", 2, (vx_reference)org_khronos_nn_extension_activation_layer_56_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_56, "org_khronos_nn_extension_activation_layer_56", 3, (vx_reference)org_khronos_nn_extension_activation_layer_56_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_56, "org_khronos_nn_extension_activation_layer_56", 4, (vx_reference)org_khronos_nn_extension_activation_layer_56_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_54, "org_khronos_nn_extension_activation_layer_54", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_54_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_54, "org_khronos_nn_extension_activation_layer_54", 1, (vx_reference)org_khronos_nn_extension_activation_layer_54_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_54, "org_khronos_nn_extension_activation_layer_54", 2, (vx_reference)org_khronos_nn_extension_activation_layer_54_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_54, "org_khronos_nn_extension_activation_layer_54", 3, (vx_reference)org_khronos_nn_extension_activation_layer_54_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_54, "org_khronos_nn_extension_activation_layer_54", 4, (vx_reference)org_khronos_nn_extension_activation_layer_54_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_52, "org_khronos_nn_extension_activation_layer_52", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_52_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_52, "org_khronos_nn_extension_activation_layer_52", 1, (vx_reference)org_khronos_nn_extension_activation_layer_52_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_52, "org_khronos_nn_extension_activation_layer_52", 2, (vx_reference)org_khronos_nn_extension_activation_layer_52_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_52, "org_khronos_nn_extension_activation_layer_52", 3, (vx_reference)org_khronos_nn_extension_activation_layer_52_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_52, "org_khronos_nn_extension_activation_layer_52", 4, (vx_reference)org_khronos_nn_extension_activation_layer_52_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_12_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_51, "org_khronos_nn_extension_convolution_layer_51", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 0, (vx_reference)org_khronos_nn_extension_activation_layer_54_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_55, "org_khronos_nn_extension_convolution_layer_55", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 0, (vx_reference)org_khronos_nn_extension_activation_layer_52_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 1, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p1);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 2, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p2);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 3, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p3);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 4, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p4);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 5, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p5);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 6, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p6);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 7, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p7);
+//    if(status != VX_SUCCESS)
+//        return status;
+//
+//    status = AssignNodeParameter(org_khronos_nn_extension_convolution_layer_53, "org_khronos_nn_extension_convolution_layer_53", 8, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p8);
+//    if(status != VX_SUCCESS)
+//        return status;
+
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_51, "org_khronos_nn_extension_activation_layer_51", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_51_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_51, "org_khronos_nn_extension_activation_layer_51", 1, (vx_reference)org_khronos_nn_extension_activation_layer_51_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_51, "org_khronos_nn_extension_activation_layer_51", 2, (vx_reference)org_khronos_nn_extension_activation_layer_51_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_51, "org_khronos_nn_extension_activation_layer_51", 3, (vx_reference)org_khronos_nn_extension_activation_layer_51_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_51, "org_khronos_nn_extension_activation_layer_51", 4, (vx_reference)org_khronos_nn_extension_activation_layer_51_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_55, "org_khronos_nn_extension_activation_layer_55", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_55_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_55, "org_khronos_nn_extension_activation_layer_55", 1, (vx_reference)org_khronos_nn_extension_activation_layer_55_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_55, "org_khronos_nn_extension_activation_layer_55", 2, (vx_reference)org_khronos_nn_extension_activation_layer_55_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_55, "org_khronos_nn_extension_activation_layer_55", 3, (vx_reference)org_khronos_nn_extension_activation_layer_55_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_55, "org_khronos_nn_extension_activation_layer_55", 4, (vx_reference)org_khronos_nn_extension_activation_layer_55_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_53, "org_khronos_nn_extension_activation_layer_53", 0, (vx_reference)org_khronos_nn_extension_convolution_layer_53_p8);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_53, "org_khronos_nn_extension_activation_layer_53", 1, (vx_reference)org_khronos_nn_extension_activation_layer_53_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_53, "org_khronos_nn_extension_activation_layer_53", 2, (vx_reference)org_khronos_nn_extension_activation_layer_53_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_53, "org_khronos_nn_extension_activation_layer_53", 3, (vx_reference)org_khronos_nn_extension_activation_layer_53_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_activation_layer_53, "org_khronos_nn_extension_activation_layer_53", 4, (vx_reference)org_khronos_nn_extension_activation_layer_53_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 0, (vx_reference)outputAllocators_MergeTensor_8_p0);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 1, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 2, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 3, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 4, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 5, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 6, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p6);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_pooling_layer_13, "org_khronos_nn_extension_pooling_layer_13", 7, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_fully_connected_layer_0, "org_khronos_nn_extension_fully_connected_layer_0", 0, (vx_reference)org_khronos_nn_extension_pooling_layer_13_p7);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_fully_connected_layer_0, "org_khronos_nn_extension_fully_connected_layer_0", 1, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_fully_connected_layer_0, "org_khronos_nn_extension_fully_connected_layer_0", 2, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_fully_connected_layer_0, "org_khronos_nn_extension_fully_connected_layer_0", 3, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_fully_connected_layer_0, "org_khronos_nn_extension_fully_connected_layer_0", 4, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_fully_connected_layer_0, "org_khronos_nn_extension_fully_connected_layer_0", 5, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_openvx_tensor_multiply_0, "org_khronos_openvx_tensor_multiply_0", 0, (vx_reference)org_khronos_nn_extension_fully_connected_layer_0_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_openvx_tensor_multiply_0, "org_khronos_openvx_tensor_multiply_0", 1, (vx_reference)org_khronos_openvx_tensor_multiply_0_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_openvx_tensor_multiply_0, "org_khronos_openvx_tensor_multiply_0", 2, (vx_reference)org_khronos_openvx_tensor_multiply_0_p2);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_openvx_tensor_multiply_0, "org_khronos_openvx_tensor_multiply_0", 3, (vx_reference)org_khronos_openvx_tensor_multiply_0_p3);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_openvx_tensor_multiply_0, "org_khronos_openvx_tensor_multiply_0", 4, (vx_reference)org_khronos_openvx_tensor_multiply_0_p4);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_openvx_tensor_multiply_0, "org_khronos_openvx_tensor_multiply_0", 5, (vx_reference)org_khronos_openvx_tensor_multiply_0_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_softmax_layer_0, "org_khronos_nn_extension_softmax_layer_0", 0, (vx_reference)org_khronos_openvx_tensor_multiply_0_p5);
+    if(status != VX_SUCCESS)
+        return status;
+        
+    status = AssignNodeParameter(org_khronos_nn_extension_softmax_layer_0, "org_khronos_nn_extension_softmax_layer_0", 1, (vx_reference)org_khronos_nn_extension_softmax_layer_0_p1);
+    if(status != VX_SUCCESS)
+        return status;
+        
+ 
+
+    return status;
+}
+#endif
diff --git a/test_conformance/Networks/src/graph_process.c b/test_conformance/Networks/src/graph_process.c
new file mode 100644
index 0000000..e05580b
--- /dev/null
+++ b/test_conformance/Networks/src/graph_process.c
@@ -0,0 +1,275 @@
+/** @file graph_process.c
+ *  @brief 
+ *  This file contains the implementation of the graph inputs/outputs processing functions
+ */
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <VX/vx_khr_nn.h>
+#include "common.h"
+#include "graph_process.h"
+#include "utilities.h"
+#include "./precisionConverter.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef _MSC_VER
+#include <direct.h>
+#define mkdir(dir, flags) _mkdir(dir)
+#else
+#include <sys/stat.h>
+#endif
+
+#define VX_MAX_TENSOR_DIMENSIONS    6
+
+float* ResizeImage(vx_size dims[VX_MAX_TENSOR_DIMENSIONS], int chans, int width,
+        int height, vx_tensor input, unsigned char* image) {
+    float* resized_image = (float*) malloc(
+            dims[0] * dims[1] * chans * sizeof(float));
+    unsigned char* resized_image_uint = (unsigned char*) malloc(
+            dims[0] * dims[1] * chans);
+    vx_rectangle_t rect = { 0, 0, 0, 0 };
+    rect.end_x = width;
+    rect.end_y = height;
+    vx_rectangle_t rect_resized = { 0, 0, 0, 0 };
+    rect_resized.end_x = dims[0];
+    rect_resized.end_y = dims[1];
+    vx_context context = vxGetContext((vx_reference) input);
+    vx_image images[3];
+    vx_image resized_images[3];
+    vx_imagepatch_addressing_t addr = { 0 };
+    vx_imagepatch_addressing_t addr_resized = { 0 };
+    addr.dim_x = width;
+    addr.dim_y = height;
+    addr.stride_x = 3;
+    addr.stride_y = 3 * width;
+    addr.step_x = 1;
+    addr.step_y = 1;
+    addr_resized.dim_x = dims[0];
+    addr_resized.dim_y = dims[1];
+    addr_resized.stride_x = 3;
+    addr_resized.stride_y = 3 * dims[0];
+    addr_resized.step_x = 1;
+    addr_resized.step_y = 1;
+    for (int i = 0; i < 3; i++) {
+        images[i] = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
+        resized_images[i] = vxCreateImage(context, dims[0], dims[1],
+                VX_DF_IMAGE_U8);
+        vxCopyImagePatch(images[i], &rect, 0, &addr, image + i, VX_WRITE_ONLY,
+                VX_MEMORY_TYPE_HOST);
+        vxuScaleImage(context, images[i], resized_images[i],
+                VX_INTERPOLATION_BILINEAR);
+        vxReleaseImage(&images[i]);
+        vxCopyImagePatch(resized_images[i], &rect_resized, 0, &addr_resized,
+                resized_image_uint + i, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+        vxReleaseImage(&resized_images[i]);
+    }
+    size_t imageSize = dims[0] * dims[1] * chans;
+    for (size_t i = 0; i < imageSize; ++i) {
+        resized_image[i] = (float) resized_image_uint[i];
+    }
+    free(resized_image_uint);
+    return resized_image;
+}
+
+float* CropImage(vx_size dims[VX_MAX_TENSOR_DIMENSIONS], int chans, int width,
+        int height, vx_tensor input, unsigned char* image) {
+    float* resized_image = (float*) malloc(
+            dims[0] * dims[1] * chans * sizeof(float));
+    unsigned char* resized_image_uint = (unsigned char*) malloc(
+            dims[0] * dims[1] * chans);
+    vx_rectangle_t rect = { 0, 0, 0, 0 };
+    rect.end_x = width;
+    rect.end_y = height;
+    vx_rectangle_t rect_resized = { 0, 0, 0, 0 };
+    rect_resized.end_x = dims[0];
+    rect_resized.end_y = dims[1];
+    vx_context context = vxGetContext((vx_reference) input);
+    vx_image images[3];
+    vx_image resized_images[3];
+    vx_imagepatch_addressing_t addr = { 0 };
+    vx_imagepatch_addressing_t addr_resized = { 0 };
+    addr.dim_x = width;
+    addr.dim_y = height;
+    addr.stride_x = 3;
+    addr.stride_y = 3 * width;
+    addr.step_x = 1;
+    addr.step_y = 1;
+    addr_resized.dim_x = dims[0];
+    addr_resized.dim_y = dims[1];
+    addr_resized.stride_x = 3;
+    addr_resized.stride_y = 3 * dims[0];
+    addr_resized.step_x = 1;
+    addr_resized.step_y = 1;
+    vx_rectangle_t rect_croped;
+    rect_croped.start_x = (width - dims[0])/2;
+    rect_croped.start_y = (height - dims[1])/2;
+    rect_croped.end_x = rect_croped.start_x + dims[0];
+    rect_croped.end_y = rect_croped.start_y + dims[1];
+
+    for (int i = 0; i < 3; i++) {
+        images[i] = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
+        vxCopyImagePatch(images[i], &rect, 0, &addr, image + i, VX_WRITE_ONLY,
+                VX_MEMORY_TYPE_HOST);
+        resized_images[i] = vxCreateImageFromROI(images[i], &rect_croped);
+        vxReleaseImage(&images[i]);
+        vxCopyImagePatch(resized_images[i], &rect_resized, 0, &addr_resized,
+                resized_image_uint + i, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+        vxReleaseImage(&resized_images[i]);
+    }
+    size_t imageSize = dims[0] * dims[1] * chans;
+    for (size_t i = 0; i < imageSize; ++i) {
+        resized_image[i] = (float) resized_image_uint[i];
+    }
+    free(resized_image_uint);
+    return resized_image;
+}
+
+vx_status preprocess(vx_tensor input, const char * fName)
+{
+    //1. Load image 
+    //2. Normalize the image pixels the same way you used in the training process (i.e, mean substraction, scaling, etc)
+    //3. Scale each pixel with the scale factor ModelOptimizer reported
+    //4. Convert each pixel to the required precision (Q78, FP16, etc)
+    //5. Fill the input tensor with the pre-processed pixels
+
+    int width, height, chans;
+    vx_size dims_num = 0;
+
+    vx_size dims[VX_MAX_TENSOR_DIMENSIONS];
+
+
+    vx_status status = vxQueryTensor(input, VX_TENSOR_NUMBER_OF_DIMS, &dims_num, sizeof(dims_num));
+    status |= vxQueryTensor(input, VX_TENSOR_DIMS, dims, sizeof(dims));
+    unsigned char * image = loadImageFromFileUInt(fName, &width, &height, &chans);
+    float* resized_image = ResizeImage(dims, chans, width, height, input,
+            image);
+    float scaleFactor = 1.f / 8;
+    float meanValues[] = { 104.f, 117.f, 123.f };
+
+    subtractMeanImageAndScale(resized_image, dims[0], dims[1], chans, meanValues, scaleFactor);
+
+
+    status = imageToMDData(input, resized_image, dims[0], dims[1], chans);
+    freeImage(resized_image);
+    free (image);
+    return status;
+
+
+}
+
+vx_status postprocess(vx_tensor output, /*OUT*/ int* detected_class)
+{
+    //1. Find top-N probabilities indices in the output tensor. 
+    //2. Probabilities must be converted back to floating point number in order to be interpreted as percentages 
+
+    //getProbabilitiesFromMDData(...)
+    vx_int16 mem[1000] = {0};
+    float prob[1000] = {0};
+
+    const vx_size view_start[2] = { 0, 0 };
+    const vx_size view_end[2] = { 1000, 1 };
+    const vx_size strides[2] = { sizeof(vx_int16), sizeof(vx_int16) * 1000 };
+    vx_status status = vxCopyTensorPatch(output, 2, view_start, view_end, strides, &mem[0], VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    if (status != VX_SUCCESS) { WriteLog("failed to read out the results form the graph"); return status; }
+
+
+    {
+
+        float max_prob = 0;
+        int res = 0;
+
+        //TODO: is there some define for this 1000??
+        for (int i = 0; i < 1000; ++i)
+        {
+            float prob = Q78ToFloat((char*)&mem[i]);
+            if (max_prob < prob)
+            {
+                max_prob = prob;
+                res = i;
+            }
+        }
+
+        *detected_class = res;
+
+    }
+
+    return VX_SUCCESS;
+}
+
+static vx_status saveTensorData(vx_tensor tensor, const char * fn)
+{
+    if (!tensor) return VX_FAILURE;
+
+    FILE * f = fopen(fn, "wb");
+
+    vx_size dims_num;
+    vx_status status = vxQueryTensor(tensor, VX_TENSOR_NUMBER_OF_DIMS, &dims_num, sizeof(dims_num));
+
+    vx_size *dims = (vx_size*)malloc(dims_num * sizeof(vx_size));
+    if (!dims) 
+    {
+        fclose(f); 
+        return VX_ERROR_NO_MEMORY; 
+    }
+
+    status = vxQueryTensor(tensor, VX_TENSOR_DIMS, dims, sizeof(vx_size) * dims_num);
+    if (status != VX_SUCCESS) 
+    {
+        fclose(f); 
+        free(dims);
+        return status; 
+    }
+
+    vx_size count = 1;
+    for (vx_size i = 0; i < dims_num; ++i) count *= dims[i];
+
+    vx_size strides[VX_MAX_TENSOR_DIMENSIONS] = { sizeof(vx_int16) };
+    for (vx_size i = 0; i < dims_num - 1; ++i)
+        strides[i+1] = strides[i] * dims[i];
+
+    vx_int16 * buffer = malloc(count * sizeof(*buffer));
+
+    vx_size view_start[VX_MAX_TENSOR_DIMENSIONS] = { 0 };
+    status = vxCopyTensorPatch(tensor, dims_num, view_start, dims, strides, buffer, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    if (status == VX_SUCCESS)
+    {
+        fwrite((vx_int16*)buffer, sizeof(int16_t), count, f);
+    }
+
+    fclose(f);
+    free(buffer);
+    free(dims);
+    return status;
+}
+
+vx_status debugDumpLayers(ObjectRefContainerType * vxObjectsContainer)
+{
+    mkdir("output", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+    FILE * f = fopen("output/layers_dimensions.txt", "wt");
+
+    for (vx_size i = 0; i < vxObjectsContainer->count; ++i)
+    {
+        if (vxObjectsContainer->pObjects[i].type == VX_TYPE_TENSOR)
+        {
+            {
+                vx_size dims[VX_MAX_TENSOR_DIMENSIONS];
+                for (int i = 0; i < VX_MAX_TENSOR_DIMENSIONS; ++i) dims[i] = 0;
+
+                char fileName[256];
+                sprintf(fileName, "output/%s.tensor",vxObjectsContainer->pObjects[i].uniqueRef);
+                vx_status status = vxQueryTensor((vx_tensor)(vxObjectsContainer->pObjects[i].ref), VX_TENSOR_DIMS, &dims, sizeof(dims));
+                if (status != VX_SUCCESS) { printf("unable to get dims from tensor??\n"); return status; }
+                fprintf(f, "%s ", vxObjectsContainer->pObjects[i].uniqueRef);
+                for (vx_size j = 0; j < VX_MAX_TENSOR_DIMENSIONS; ++j)
+                    fprintf(f, "%zu ", dims[j]);
+                fprintf(f, "\n");
+                saveTensorData((vx_tensor)vxObjectsContainer->pObjects[i].ref, fileName);
+            }
+        }
+    }
+
+    fclose(f);
+    
+    return VX_SUCCESS;
+}
diff --git a/test_conformance/Networks/src/graph_process.h b/test_conformance/Networks/src/graph_process.h
new file mode 100644
index 0000000..be27c63
--- /dev/null
+++ b/test_conformance/Networks/src/graph_process.h
@@ -0,0 +1,35 @@
+/** @file graph_process.h
+ *  @brief
+ *  This file contains the definitions of the graph inputs/outputs processing functions
+ */
+#ifndef GRAPH_PROCESS_H
+#define GRAPH_PROCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @brief Pre-process the OpenVX graph inputs
+ *
+ *  @param input The input Tensor obejct to initialize
+ *  @param path The jpeg filename to load
+ *  @return vx_status code.
+ */
+vx_status preprocess(vx_tensor input, const char * path);
+
+/** @brief Post-process the OpenVX graph outputs
+ *
+ *  @param output The output Tensor obejct to process
+ *  @param detected_class The class detected for the image
+ *  @return vx_status code.
+ */
+vx_status postprocess(vx_tensor output, /*OUT*/ int* detected_class);
+
+vx_status debugDumpLayers(ObjectRefContainerType * vxObjectsContainer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRAPH_PROCESS_H */
diff --git a/test_conformance/Networks/src/load_weights.c b/test_conformance/Networks/src/load_weights.c
new file mode 100644
index 0000000..8e4a461
--- /dev/null
+++ b/test_conformance/Networks/src/load_weights.c
@@ -0,0 +1,275 @@
+/** @file load_weights.c
+ *  @brief 
+ *  This file contains the implementation of the weight and biases loading functions
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vx_khr_nn.h>
+#define VX_MAX_TENSOR_DIMS_CT 6
+
+#include "common.h"
+
+#include "load_weights.h"
+
+vx_status initAllWeightsAlexnet(ObjectRefContainerType* pContainer, const char* pFileDir)
+{
+    vx_status status = VX_SUCCESS;
+
+    WriteLog("Loading weights and biases from '%s'...\n", pFileDir);
+
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv1_weights"), pFileDir, "conv1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv1_bias"), pFileDir, "conv1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv2_0_weights"), pFileDir, "conv2_0_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv2_0_bias"), pFileDir, "conv2_0_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv2_1_weights"), pFileDir, "conv2_1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv2_1_bias"), pFileDir, "conv2_1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv3_weights"), pFileDir, "conv3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv3_bias"), pFileDir, "conv3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv4_0_weights"), pFileDir, "conv4_0_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv4_0_bias"), pFileDir, "conv4_0_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv4_1_weights"), pFileDir, "conv4_1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv4_1_bias"), pFileDir, "conv4_1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv5_0_weights"), pFileDir, "conv5_0_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv5_0_bias"), pFileDir, "conv5_0_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv5_1_weights"), pFileDir, "conv5_1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv5_1_bias"), pFileDir, "conv5_1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "fc6_weights"), pFileDir, "fc6_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"fc6_bias"), pFileDir, "fc6_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "fc7_weights"), pFileDir, "fc7_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"fc7_bias"), pFileDir, "fc7_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "fc8_weights"), pFileDir, "fc8_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"fc8_bias"), pFileDir, "fc8_bias.bin");
+
+    return status;
+}
+
+vx_status initAllWeightsGooglenet(ObjectRefContainerType* pContainer, const char* pFileDir)
+{
+    vx_status status = VX_SUCCESS;
+
+    WriteLog("Loading weights and biases from '%s'...\n", pFileDir);
+
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "Power0_scale"), pFileDir, "Power0_scale.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv1_7x7_s2_weights"), pFileDir, "conv1_7x7_s2_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv1_7x7_s2_bias"), pFileDir, "conv1_7x7_s2_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv2_3x3_weights"), pFileDir, "conv2_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv2_3x3_bias"), pFileDir, "conv2_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "conv2_3x3_reduce_weights"), pFileDir, "conv2_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"conv2_3x3_reduce_bias"), pFileDir, "conv2_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3a_1x1_weights"), pFileDir, "inception_3a_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3a_1x1_bias"), pFileDir, "inception_3a_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3a_3x3_weights"), pFileDir, "inception_3a_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3a_3x3_bias"), pFileDir, "inception_3a_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3a_3x3_reduce_weights"), pFileDir, "inception_3a_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3a_3x3_reduce_bias"), pFileDir, "inception_3a_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3a_5x5_weights"), pFileDir, "inception_3a_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3a_5x5_bias"), pFileDir, "inception_3a_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3a_5x5_reduce_weights"), pFileDir, "inception_3a_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3a_5x5_reduce_bias"), pFileDir, "inception_3a_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3a_pool_proj_weights"), pFileDir, "inception_3a_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3a_pool_proj_bias"), pFileDir, "inception_3a_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3b_1x1_weights"), pFileDir, "inception_3b_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3b_1x1_bias"), pFileDir, "inception_3b_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3b_3x3_weights"), pFileDir, "inception_3b_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3b_3x3_bias"), pFileDir, "inception_3b_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3b_3x3_reduce_weights"), pFileDir, "inception_3b_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3b_3x3_reduce_bias"), pFileDir, "inception_3b_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3b_5x5_weights"), pFileDir, "inception_3b_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3b_5x5_bias"), pFileDir, "inception_3b_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3b_5x5_reduce_weights"), pFileDir, "inception_3b_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3b_5x5_reduce_bias"), pFileDir, "inception_3b_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_3b_pool_proj_weights"), pFileDir, "inception_3b_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_3b_pool_proj_bias"), pFileDir, "inception_3b_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4a_1x1_weights"), pFileDir, "inception_4a_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4a_1x1_bias"), pFileDir, "inception_4a_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4a_3x3_weights"), pFileDir, "inception_4a_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4a_3x3_bias"), pFileDir, "inception_4a_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4a_3x3_reduce_weights"), pFileDir, "inception_4a_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4a_3x3_reduce_bias"), pFileDir, "inception_4a_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4a_5x5_weights"), pFileDir, "inception_4a_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4a_5x5_bias"), pFileDir, "inception_4a_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4a_5x5_reduce_weights"), pFileDir, "inception_4a_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4a_5x5_reduce_bias"), pFileDir, "inception_4a_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4a_pool_proj_weights"), pFileDir, "inception_4a_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4a_pool_proj_bias"), pFileDir, "inception_4a_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4b_1x1_weights"), pFileDir, "inception_4b_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4b_1x1_bias"), pFileDir, "inception_4b_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4b_3x3_weights"), pFileDir, "inception_4b_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4b_3x3_bias"), pFileDir, "inception_4b_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4b_3x3_reduce_weights"), pFileDir, "inception_4b_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4b_3x3_reduce_bias"), pFileDir, "inception_4b_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4b_5x5_weights"), pFileDir, "inception_4b_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4b_5x5_bias"), pFileDir, "inception_4b_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4b_5x5_reduce_weights"), pFileDir, "inception_4b_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4b_5x5_reduce_bias"), pFileDir, "inception_4b_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4b_pool_proj_weights"), pFileDir, "inception_4b_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4b_pool_proj_bias"), pFileDir, "inception_4b_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4c_1x1_weights"), pFileDir, "inception_4c_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4c_1x1_bias"), pFileDir, "inception_4c_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4c_3x3_weights"), pFileDir, "inception_4c_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4c_3x3_bias"), pFileDir, "inception_4c_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4c_3x3_reduce_weights"), pFileDir, "inception_4c_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4c_3x3_reduce_bias"), pFileDir, "inception_4c_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4c_5x5_weights"), pFileDir, "inception_4c_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4c_5x5_bias"), pFileDir, "inception_4c_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4c_5x5_reduce_weights"), pFileDir, "inception_4c_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4c_5x5_reduce_bias"), pFileDir, "inception_4c_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4c_pool_proj_weights"), pFileDir, "inception_4c_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4c_pool_proj_bias"), pFileDir, "inception_4c_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4d_1x1_weights"), pFileDir, "inception_4d_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4d_1x1_bias"), pFileDir, "inception_4d_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4d_3x3_weights"), pFileDir, "inception_4d_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4d_3x3_bias"), pFileDir, "inception_4d_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4d_3x3_reduce_weights"), pFileDir, "inception_4d_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4d_3x3_reduce_bias"), pFileDir, "inception_4d_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4d_5x5_weights"), pFileDir, "inception_4d_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4d_5x5_bias"), pFileDir, "inception_4d_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4d_5x5_reduce_weights"), pFileDir, "inception_4d_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4d_5x5_reduce_bias"), pFileDir, "inception_4d_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4d_pool_proj_weights"), pFileDir, "inception_4d_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4d_pool_proj_bias"), pFileDir, "inception_4d_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4e_1x1_weights"), pFileDir, "inception_4e_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4e_1x1_bias"), pFileDir, "inception_4e_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4e_3x3_weights"), pFileDir, "inception_4e_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4e_3x3_bias"), pFileDir, "inception_4e_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4e_3x3_reduce_weights"), pFileDir, "inception_4e_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4e_3x3_reduce_bias"), pFileDir, "inception_4e_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4e_5x5_weights"), pFileDir, "inception_4e_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4e_5x5_bias"), pFileDir, "inception_4e_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4e_5x5_reduce_weights"), pFileDir, "inception_4e_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4e_5x5_reduce_bias"), pFileDir, "inception_4e_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_4e_pool_proj_weights"), pFileDir, "inception_4e_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_4e_pool_proj_bias"), pFileDir, "inception_4e_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5a_1x1_weights"), pFileDir, "inception_5a_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5a_1x1_bias"), pFileDir, "inception_5a_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5a_3x3_weights"), pFileDir, "inception_5a_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5a_3x3_bias"), pFileDir, "inception_5a_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5a_3x3_reduce_weights"), pFileDir, "inception_5a_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5a_3x3_reduce_bias"), pFileDir, "inception_5a_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5a_5x5_weights"), pFileDir, "inception_5a_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5a_5x5_bias"), pFileDir, "inception_5a_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5a_5x5_reduce_weights"), pFileDir, "inception_5a_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5a_5x5_reduce_bias"), pFileDir, "inception_5a_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5a_pool_proj_weights"), pFileDir, "inception_5a_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5a_pool_proj_bias"), pFileDir, "inception_5a_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5b_1x1_weights"), pFileDir, "inception_5b_1x1_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5b_1x1_bias"), pFileDir, "inception_5b_1x1_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5b_3x3_weights"), pFileDir, "inception_5b_3x3_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5b_3x3_bias"), pFileDir, "inception_5b_3x3_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5b_3x3_reduce_weights"), pFileDir, "inception_5b_3x3_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5b_3x3_reduce_bias"), pFileDir, "inception_5b_3x3_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5b_5x5_weights"), pFileDir, "inception_5b_5x5_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5b_5x5_bias"), pFileDir, "inception_5b_5x5_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5b_5x5_reduce_weights"), pFileDir, "inception_5b_5x5_reduce_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5b_5x5_reduce_bias"), pFileDir, "inception_5b_5x5_reduce_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "inception_5b_pool_proj_weights"), pFileDir, "inception_5b_pool_proj_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"inception_5b_pool_proj_bias"), pFileDir, "inception_5b_pool_proj_bias.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer, "loss3_classifier_weights"), pFileDir, "loss3_classifier_weights.bin");
+    status |= loadTensorFromFile((vx_tensor)GetObjectRef(pContainer,"loss3_classifier_bias"), pFileDir, "loss3_classifier_bias.bin");
+
+    return status;
+}
+
+	vx_status loadTensorFromFile(vx_tensor tensor, const char* pFileDir, const char* pFileName)
+	{
+		vx_status status = VX_SUCCESS;
+
+		char filePath[1024];
+		strcpy(filePath, pFileDir);
+		strcat(filePath, "/");
+		strcat(filePath, pFileName);
+
+		if (tensor == NULL)
+		{
+			WriteLog("ERROR: invalid tensor object!\n");
+			return VX_FAILURE;
+		}
+
+		WriteLog("    - %s\n", pFileName);
+		FILE* fp = fopen(filePath, "rb");
+		if (fp == NULL)
+		{
+			WriteLog("ERROR: cannot open weights file\n");
+			return VX_FAILURE;
+		}
+
+		fseek(fp, 0, SEEK_END); // seek to end of file
+		long fileSize = ftell(fp); // get current file pointer
+		fseek(fp, 0, SEEK_SET); // seek back to beginning of file
+
+		void* ptr = malloc(fileSize);
+
+		if (ptr == NULL)
+		{
+			WriteLog("ERROR: cannot allocate memory for reading the weights file\n");
+			fclose(fp);
+			return VX_FAILURE;
+		}
+
+		size_t nRead = fread(ptr, 1, fileSize, fp);
+		fclose(fp);
+
+    if(nRead != fileSize)
+		{
+			WriteLog("ERROR: read error on weights file\n");
+			free(ptr);
+			return VX_FAILURE;
+		}
+
+		vx_enum dataFormat;
+		status |= vxQueryTensor(tensor, VX_TENSOR_DATA_TYPE, &dataFormat, sizeof(dataFormat));
+
+		vx_size tensorNumDims;
+		status |= vxQueryTensor(tensor, VX_TENSOR_NUMBER_OF_DIMS, &tensorNumDims, sizeof(tensorNumDims));
+
+		vx_size tensorDims[VX_MAX_TENSOR_DIMS_CT];
+		status |= vxQueryTensor(tensor, VX_TENSOR_DIMS, tensorDims, sizeof(tensorDims));
+
+		if (status != VX_SUCCESS)
+		{
+			WriteLog("ERROR: cannot query tensor properties\n");
+			free(ptr);
+			return VX_FAILURE;
+		}
+
+		vx_size viewStart[VX_MAX_TENSOR_DIMS_CT];
+		memset(viewStart, 0, VX_MAX_TENSOR_DIMS_CT * sizeof(vx_size));
+
+		vx_size userStrides[VX_MAX_TENSOR_DIMS_CT];
+		userStrides[0] = dataFormat == VX_TYPE_FLOAT32 ? sizeof(vx_float32) : sizeof(vx_int16);
+
+		vx_size i = 1;
+		for (; i < VX_MAX_TENSOR_DIMS_CT; i++)
+		{
+			userStrides[i] = userStrides[i - 1] * tensorDims[i - 1];
+		}
+
+		if (tensorDims[tensorNumDims - 1] * userStrides[tensorNumDims - 1] != fileSize)
+		{
+			WriteLog("ERROR: inconsistent tensor and weight file sizes!\n");
+			free(ptr);
+			return status;
+		}
+
+		vx_size vxSizeTensorDims[VX_MAX_TENSOR_DIMS_CT];
+		i = 0;
+		for (; i < tensorNumDims; i++)
+		{
+			vxSizeTensorDims[i] = tensorDims[i];
+		}
+
+		status |= vxCopyTensorPatch(tensor, (vx_size)tensorNumDims, viewStart, vxSizeTensorDims, userStrides, ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+
+		if (status != VX_SUCCESS)
+		{
+			WriteLog("ERROR: cannot copy tensor patch!\n");
+			free(ptr);
+			return status;
+		}
+
+		free(ptr);
+
+		return VX_SUCCESS;
+	}
diff --git a/test_conformance/Networks/src/load_weights.h b/test_conformance/Networks/src/load_weights.h
new file mode 100644
index 0000000..883b3ba
--- /dev/null
+++ b/test_conformance/Networks/src/load_weights.h
@@ -0,0 +1,37 @@
+
+/** @file load_weights.h
+ *  @brief 
+ *  This file contains the definitions of the weight and biases loading functions
+ */
+#ifndef LOAD_WEIGHTS_H
+#define LOAD_WEIGHTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @brief Init all weights and biases
+ *
+ *  @param pObjectContainer The pointer to object container.
+ *  @param pFileDir The path to the binary files location
+ *  @return vx_status code.
+ */
+vx_status loadTensorFromFile(vx_tensor input, const char* pFileDir, const char* pFileName);
+/** @brief Load Tensor object from file
+ *
+ *  @param input The Tensor reference to load.
+ *  @param pFileDir The path to the binary files location
+ *  @param pFileName The file name
+ *  @return vx_status code.
+ */
+
+vx_status initAllWeightsAlexnet(ObjectRefContainerType* pContainer, const char* pFileDir);
+vx_status initAllWeightsGooglenet(ObjectRefContainerType* pContainer, const char* pFileDir);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOAD_WEIGHTS_H */
diff --git a/test_conformance/Networks/src/precisionConverter.c b/test_conformance/Networks/src/precisionConverter.c
new file mode 100644
index 0000000..702c2de
--- /dev/null
+++ b/test_conformance/Networks/src/precisionConverter.c
@@ -0,0 +1,217 @@
+#include "precisionConverter.h"
+#include <limits.h>
+#include <memory.h>
+
+
+// F32: exp_bias:127 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM.
+// F16: exp_bias:15  SEEEEEMM MMMMMMMM
+#define EXP_MASK_F32 0x7F800000U
+#define EXP_MASK_F16     0x7C00U
+
+//small helper function to represent uint32_t value as float32
+float asfloat(uint32_t v)
+{
+    return *(float*)&v;
+}
+
+
+/** @brief Converts FP32 to FP16 with rounding to nearest value to minimize error
+*    the denormal values are converted to 0.
+*  @param x - value in FP32 format
+*  @return value in FP16 format
+**************************************************************/
+uint16_t FP32ToFP16(float x)
+{
+    //create minimal positive normal f16 value in f32 format
+    //exp:-14,mantissa:0 -> 2^-14 * 1.0
+    static uint32_t min16_i = (127 - 14) << 23;
+    float min16 = asfloat(min16_i);
+
+    //create maximal positive normal f16 value in f32 and f16 formats
+    //exp:15,mantissa:11111 -> 2^15 * 1.(11111)
+    static uint32_t max16_i = ((127 + 15) << 23) | 0x007FE000;
+    float    max16 = asfloat(max16_i);
+    static uint32_t max16f16 = ((15 + 15) << 10) | 0x3FF;
+
+    // define and declare variable for intermidiate and output result
+    // the union is used to simplify representation changing
+    union
+    {
+        float f;
+        uint32_t u;
+    } v;
+    v.f = x;
+
+    // get sign in 16bit format
+    uint32_t    s = (v.u >> 16) & 0x8000; // sign 16:  00000000 00000000 10000000 00000000
+
+                                          // make it abs
+    v.u &= 0x7FFFFFFF;                    // abs mask: 01111111 11111111 11111111 11111111
+
+                                          // check NAN and INF
+    if ((v.u & EXP_MASK_F32) == EXP_MASK_F32)
+    {
+        if (v.u & 0x007FFFFF)
+            return s | (v.u >> (23 - 10)) | 0x0200; // return NAN f16
+        else
+            return s | (v.u >> (23 - 10)); // return INF f16
+    }
+
+    // to make f32 round to nearest f16
+    // create halfULP for f16 and add it to origin value
+    float halfULP = asfloat(v.u & EXP_MASK_F32) * asfloat((127 - 11) << 23);
+    v.f += halfULP;
+
+    // if input value is not fit normalized f16 then return 0
+    // denormals are not covered by this code and just converted to 0
+    if (v.f < min16*0.5F)
+        return s;
+
+    // if input value between min16/2 and min16 then return min16
+    if (v.f < min16)
+        return s | (1 << 10);
+
+    // if input value more than maximal allowed value for f16
+    // then return this maximal value
+    if (v.f >= max16)
+        return max16f16 | s;
+
+    // change exp bias from 127 to 15
+    v.u -= ((127 - 15) << 23);
+
+    // round to f16
+    v.u >>= (23 - 10);
+
+    return v.u | s;
+}
+
+/** @brief Converts FP16 to FP32 
+*  @param x - value in FP16 format
+*  @return value in FP32 format
+**************************************************************/
+float FP16ToFP32(uint16_t x)
+{
+    // this is storage for output result
+    uint32_t u = x;
+
+    // get sign in 32bit format
+    uint32_t s = ((u & 0x8000) << 16);
+
+    // check for NAN and INF
+    if ((u & EXP_MASK_F16) == EXP_MASK_F16)
+    {
+        //keep mantissa only
+        u &= 0x03FF;
+
+        // check if it is NAN and raise 10 bit to be align with intrin
+        if (u)
+            u |= 0x0200;
+
+        u <<= (23 - 10);
+        u |= EXP_MASK_F32;
+        u |= s;
+    }
+    // check for zero and denormals. both are converted to zero
+    else if ((x & EXP_MASK_F16) == 0)
+    {
+        u = s;
+    }
+    else
+    {
+        //abs
+        u = (u & 0x7FFF);
+
+        // shift mantissa and exp from f16 to f32 position
+        u <<= (23 - 10);
+
+        //new bias for exp (f16 bias is 15 and f32 bias is 127)
+        u += ((127 - 15) << 23);
+
+        //add sign
+        u |= s;
+    }
+
+    //finaly represent result as float and return
+    return asfloat(u);
+}
+
+/** @brief Converts S16 (signed int16) to a float 
+*  @param s16Pixel - A pointer to a value in S16 format.
+*  @return float value
+***************************************************************/
+float S16ToFloat(const char* s16Pixel)
+{
+    int16_t value = *((int16_t*)s16Pixel);
+    return (float)value;
+}
+
+/** @brief Converts Q78 to a float 
+*  @param q78Pixel - A pointer to a value in Q78 format.
+*  @return float value
+**************************************************************/
+float Q78ToFloat(const char* q78Pixel)
+{
+    int16_t value = *((int16_t*)q78Pixel);
+    return ((float)value) / 256.0;
+}
+
+/** @brief Converts FP16 to a float 
+*  @param fp16Pixel - A pointer to a value in FP16 format.
+*  @return float value
+**************************************************************/
+float FP16ToFloat(const char* fp16Pixel)
+{
+    uint16_t value = *((uint16_t*)fp16Pixel);
+    return FP16ToFP32(value);
+}
+
+/** @brief Converts FP32 to a float. It just copies the value from the input pointer.
+*  @param fp32Pixel - A pointer to a value in FP32 format.
+*  @return float value
+**************************************************************/
+float FP32ToFloat(const char* fp32Pixel)
+{
+    return *((float*)fp32Pixel);
+}
+
+/** @brief Converts float to S16 format and copy it to the input pointer
+*  @param s16Pixel - A pointer where to copy the converted value
+*  @return void
+**************************************************************/
+void floatToS16(float floatValue, char* s16Pixel)
+{
+    int16_t value = (int16_t)floatValue;
+    memcpy(s16Pixel, &value, sizeof(int16_t));
+}
+
+/** @brief Converts float to Q78 format and copy it to the input pointer
+*  @param q78Pixel - A pointer where to copy the converted value
+*  @return void
+**************************************************************/
+void floatToQ78(float floatValue, char* q78Pixel)
+{
+    float r = floatValue < 0.0 ? -0.5 : 0.5;
+    int tmpValue = (int)((floatValue * 256.0 + r));
+    int16_t value = tmpValue > SHRT_MAX ? SHRT_MAX : (tmpValue < SHRT_MIN ? SHRT_MIN : (int16_t)tmpValue);
+    memcpy(q78Pixel, &value, sizeof(int16_t));
+}
+
+/** @brief Converts float to FP16 format and copy it to the input pointer
+*  @param fp16Pixel - A pointer where to copy the converted value
+*  @return void
+**************************************************************/
+void floatToFP16(float floatValue, char* fp16Pixel)
+{
+    uint16_t value = FP32ToFP16(floatValue);
+    memcpy(fp16Pixel, &value, sizeof(uint16_t));
+}
+
+/** @brief Converts float copy the float value to the input pointer
+*  @param fp32Pixel - A pointer where to copy the float value
+*  @return void
+**************************************************************/
+void floatToFP32(float floatValue, char* fp32Pixel)
+{
+    memcpy(fp32Pixel, &floatValue, sizeof(float));
+}
+
diff --git a/test_conformance/Networks/src/precisionConverter.h b/test_conformance/Networks/src/precisionConverter.h
new file mode 100644
index 0000000..0d8f43d
--- /dev/null
+++ b/test_conformance/Networks/src/precisionConverter.h
@@ -0,0 +1,65 @@
+#pragma once
+#include <stdint.h>
+
+
+/** @brief Converts FP32 to FP16 with rounding to nearest value to minimize error
+*    the denormal values are converted to 0.
+*  @param x - value in FP32 format
+*  @return value in FP16 format
+*/
+uint16_t FP32ToFP16(float x);
+
+/** @brief Converts FP16 to FP32 
+*  @param x - value in FP16 format
+*  @return value in FP32 format
+*/
+float FP16ToFP32(uint16_t x);
+
+/** @brief Converts S16 (signed int16) to a float 
+*  @param s16Pixel - A pointer to a value in S16 format.
+*  @return float value
+*/
+float S16ToFloat(const char* s16Pixel);
+
+/** @brief Converts Q78 to a float 
+*  @param q78Pixel - A pointer to a value in Q78 format.
+*  @return float value
+*/
+float Q78ToFloat(const char* q78Pixel);
+
+/** @brief Converts FP16 to a float 
+*  @param fp16Pixel - A pointer to a value in FP16 format.
+*  @return float value
+*/
+float FP16ToFloat(const char* fp16Pixel);
+
+/** @brief Converts FP32 to a float. It just copies the value from the input pointer.
+*  @param fp32Pixel - A pointer to a value in FP32 format.
+*  @return float value
+*/
+float FP32ToFloat(const char* fp32Pixel);
+
+/** @brief Converts float to S16 format and copy it to the input pointer
+*  @param s16Pixel - A pointer where to copy the converted value
+*  @return void
+*/
+void floatToS16(float floatValue, char* s16Pixel);
+
+/** @brief Converts float to Q78 format and copy it to the input pointer
+*  @param q78Pixel - A pointer where to copy the converted value
+*  @return void
+*/
+void floatToQ78(float floatValue, char* q78Pixel);
+
+/** @brief Converts float to FP16 format and copy it to the input pointer
+*  @param fp16Pixel - A pointer where to copy the converted value
+*  @return void
+*/
+void floatToFP16(float floatValue, char* fp16Pixel);
+
+/** @brief Converts float copy the float value to the input pointer
+*  @param fp32Pixel - A pointer where to copy the float value
+*  @return void
+*/
+void floatToFP32(float floatValue, char* fp32Pixel);
+
diff --git a/test_conformance/Networks/src/stb_image.h b/test_conformance/Networks/src/stb_image.h
new file mode 100644
index 0000000..ca63291
--- /dev/null
+++ b/test_conformance/Networks/src/stb_image.h
@@ -0,0 +1,7100 @@
+/* stb_image - v2.13 - public domain image loader - http://nothings.org/stb_image.h
+                                     no warranty implied; use at your own risk
+
+   Do this:
+      #define STB_IMAGE_IMPLEMENTATION
+   before you include this file in *one* C or C++ file to create the implementation.
+
+   // i.e. it should look like this:
+   #include ...
+   #include ...
+   #include ...
+   #define STB_IMAGE_IMPLEMENTATION
+   #include "stb_image.h"
+
+   You can #define STBI_ASSERT(x) before the #include to avoid using assert.h.
+   And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free
+
+
+   QUICK NOTES:
+      Primarily of interest to game developers and other people who can
+          avoid problematic images and only need the trivial interface
+
+      JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib)
+      PNG 1/2/4/8-bit-per-channel (16 bpc not supported)
+
+      TGA (not sure what subset, if a subset)
+      BMP non-1bpp, non-RLE
+      PSD (composited view only, no extra channels, 8/16 bit-per-channel)
+
+      GIF (*comp always reports as 4-channel)
+      HDR (radiance rgbE format)
+      PIC (Softimage PIC)
+      PNM (PPM and PGM binary only)
+
+      Animated GIF still needs a proper API, but here's one way to do it:
+          http://gist.github.com/urraka/685d9a6340b26b830d49
+
+      - decode from memory or through FILE (define STBI_NO_STDIO to remove code)
+      - decode from arbitrary I/O callbacks
+      - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON)
+
+   Full documentation under "DOCUMENTATION" below.
+
+
+   Revision 2.00 release notes:
+
+      - Progressive JPEG is now supported.
+
+      - PPM and PGM binary formats are now supported, thanks to Ken Miller.
+
+      - x86 platforms now make use of SSE2 SIMD instructions for
+        JPEG decoding, and ARM platforms can use NEON SIMD if requested.
+        This work was done by Fabian "ryg" Giesen. SSE2 is used by
+        default, but NEON must be enabled explicitly; see docs.
+
+        With other JPEG optimizations included in this version, we see
+        2x speedup on a JPEG on an x86 machine, and a 1.5x speedup
+        on a JPEG on an ARM machine, relative to previous versions of this
+        library. The same results will not obtain for all JPGs and for all
+        x86/ARM machines. (Note that progressive JPEGs are significantly
+        slower to decode than regular JPEGs.) This doesn't mean that this
+        is the fastest JPEG decoder in the land; rather, it brings it
+        closer to parity with standard libraries. If you want the fastest
+        decode, look elsewhere. (See "Philosophy" section of docs below.)
+
+        See final bullet items below for more info on SIMD.
+
+      - Added STBI_MALLOC, STBI_REALLOC, and STBI_FREE macros for replacing
+        the memory allocator. Unlike other STBI libraries, these macros don't
+        support a context parameter, so if you need to pass a context in to
+        the allocator, you'll have to store it in a global or a thread-local
+        variable.
+
+      - Split existing STBI_NO_HDR flag into two flags, STBI_NO_HDR and
+        STBI_NO_LINEAR.
+            STBI_NO_HDR:     suppress implementation of .hdr reader format
+            STBI_NO_LINEAR:  suppress high-dynamic-range light-linear float API
+
+      - You can suppress implementation of any of the decoders to reduce
+        your code footprint by #defining one or more of the following
+        symbols before creating the implementation.
+
+            STBI_NO_JPEG
+            STBI_NO_PNG
+            STBI_NO_BMP
+            STBI_NO_PSD
+            STBI_NO_TGA
+            STBI_NO_GIF
+            STBI_NO_HDR
+            STBI_NO_PIC
+            STBI_NO_PNM   (.ppm and .pgm)
+
+      - You can request *only* certain decoders and suppress all other ones
+        (this will be more forward-compatible, as addition of new decoders
+        doesn't require you to disable them explicitly):
+
+            STBI_ONLY_JPEG
+            STBI_ONLY_PNG
+            STBI_ONLY_BMP
+            STBI_ONLY_PSD
+            STBI_ONLY_TGA
+            STBI_ONLY_GIF
+            STBI_ONLY_HDR
+            STBI_ONLY_PIC
+            STBI_ONLY_PNM   (.ppm and .pgm)
+
+         Note that you can define multiples of these, and you will get all
+         of them ("only x" and "only y" is interpreted to mean "only x&y").
+
+       - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
+         want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
+
+      - Compilation of all SIMD code can be suppressed with
+            #define STBI_NO_SIMD
+        It should not be necessary to disable SIMD unless you have issues
+        compiling (e.g. using an x86 compiler which doesn't support SSE
+        intrinsics or that doesn't support the method used to detect
+        SSE2 support at run-time), and even those can be reported as
+        bugs so I can refine the built-in compile-time checking to be
+        smarter.
+
+      - The old STBI_SIMD system which allowed installing a user-defined
+        IDCT etc. has been removed. If you need this, don't upgrade. My
+        assumption is that almost nobody was doing this, and those who
+        were will find the built-in SIMD more satisfactory anyway.
+
+      - RGB values computed for JPEG images are slightly different from
+        previous versions of stb_image. (This is due to using less
+        integer precision in SIMD.) The C code has been adjusted so
+        that the same RGB values will be computed regardless of whether
+        SIMD support is available, so your app should always produce
+        consistent results. But these results are slightly different from
+        previous versions. (Specifically, about 3% of available YCbCr values
+        will compute different RGB results from pre-1.49 versions by +-1;
+        most of the deviating values are one smaller in the G channel.)
+
+      - If you must produce consistent results with previous versions of
+        stb_image, #define STBI_JPEG_OLD and you will get the same results
+        you used to; however, you will not get the SIMD speedups for
+        the YCbCr-to-RGB conversion step (although you should still see
+        significant JPEG speedup from the other changes).
+
+        Please note that STBI_JPEG_OLD is a temporary feature; it will be
+        removed in future versions of the library. It is only intended for
+        near-term back-compatibility use.
+
+
+   Latest revision history:
+      2.13  (2016-12-04) experimental 16-bit API, only for PNG so far; fixes
+      2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes
+      2.11  (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64
+                         RGB-format JPEG; remove white matting in PSD;
+                         allocate large structures on the stack; 
+                         correct channel count for PNG & BMP
+      2.10  (2016-01-22) avoid warning introduced in 2.09
+      2.09  (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED
+      2.08  (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA
+      2.07  (2015-09-13) partial animated GIF support
+                         limited 16-bit PSD support
+                         minor bugs, code cleanup, and compiler warnings
+
+   See end of file for full revision history.
+
+
+ ============================    Contributors    =========================
+
+ Image formats                          Extensions, features
+    Sean Barrett (jpeg, png, bmp)          Jetro Lauha (stbi_info)
+    Nicolas Schulz (hdr, psd)              Martin "SpartanJ" Golini (stbi_info)
+    Jonathan Dummer (tga)                  James "moose2000" Brown (iPhone PNG)
+    Jean-Marc Lienher (gif)                Ben "Disch" Wenger (io callbacks)
+    Tom Seddon (pic)                       Omar Cornut (1/2/4-bit PNG)
+    Thatcher Ulrich (psd)                  Nicolas Guillemot (vertical flip)
+    Ken Miller (pgm, ppm)                  Richard Mitton (16-bit PSD)
+    urraka@github (animated gif)           Junggon Kim (PNM comments)
+                                           Daniel Gibson (16-bit TGA)
+
+ Optimizations & bugfixes
+    Fabian "ryg" Giesen
+    Arseny Kapoulkine
+
+ Bug & warning fixes
+    Marc LeBlanc            David Woo          Guillaume George   Martins Mozeiko
+    Christpher Lloyd        Martin Golini      Jerry Jansson      Joseph Thomson
+    Dave Moore              Roy Eltham         Hayaki Saito       Phil Jordan
+    Won Chun                Luke Graham        Johan Duparc       Nathan Reed
+    the Horde3D community   Thomas Ruf         Ronny Chevalier    Nick Verigakis
+    Janez Zemva             John Bartholomew   Michal Cichon      svdijk@github
+    Jonathan Blow           Ken Hamada         Tero Hanninen      Baldur Karlsson
+    Laurent Gomila          Cort Stratton      Sergio Gonzalez    romigrou@github
+    Aruelien Pocheville     Thibault Reuille   Cass Everitt       Matthew Gregan
+    Ryamond Barbiero        Paul Du Bois       Engin Manap        snagar@github
+    Michaelangel007@github  Oriol Ferrer Mesia socks-the-fox      Zelex@github
+    Philipp Wiesemann       Josh Tobin         rlyeh@github       grim210@github
+    Blazej Dariusz Roszkowski                  
+
+
+LICENSE
+
+This software is dual-licensed to the public domain and under the following
+license: you are granted a perpetual, irrevocable license to copy, modify,
+publish, and distribute this file as you see fit.
+
+*/
+
+#ifndef STBI_INCLUDE_STB_IMAGE_H
+#define STBI_INCLUDE_STB_IMAGE_H
+
+// DOCUMENTATION
+//
+// Limitations:
+//    - no 16-bit-per-channel PNG
+//    - no 12-bit-per-channel JPEG
+//    - no JPEGs with arithmetic coding
+//    - no 1-bit BMP
+//    - GIF always returns *comp=4
+//
+// Basic usage (see HDR discussion below for HDR usage):
+//    int x,y,n;
+//    unsigned char *data = stbi_load(filename, &x, &y, &n, 0);
+//    // ... process data if not NULL ...
+//    // ... x = width, y = height, n = # 8-bit components per pixel ...
+//    // ... replace '0' with '1'..'4' to force that many components per pixel
+//    // ... but 'n' will always be the number that it would have been if you said 0
+//    stbi_image_free(data)
+//
+// Standard parameters:
+//    int *x                 -- outputs image width in pixels
+//    int *y                 -- outputs image height in pixels
+//    int *channels_in_file  -- outputs # of image components in image file
+//    int desired_channels   -- if non-zero, # of image components requested in result
+//
+// The return value from an image loader is an 'unsigned char *' which points
+// to the pixel data, or NULL on an allocation failure or if the image is
+// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels,
+// with each pixel consisting of N interleaved 8-bit components; the first
+// pixel pointed to is top-left-most in the image. There is no padding between
+// image scanlines or between pixels, regardless of format. The number of
+// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise.
+// If req_comp is non-zero, *comp has the number of components that _would_
+// have been output otherwise. E.g. if you set req_comp to 4, you will always
+// get RGBA output, but you can check *comp to see if it's trivially opaque
+// because e.g. there were only 3 channels in the source image.
+//
+// An output image with N components has the following components interleaved
+// in this order in each pixel:
+//
+//     N=#comp     components
+//       1           grey
+//       2           grey, alpha
+//       3           red, green, blue
+//       4           red, green, blue, alpha
+//
+// If image loading fails for any reason, the return value will be NULL,
+// and *x, *y, *comp will be unchanged. The function stbi_failure_reason()
+// can be queried for an extremely brief, end-user unfriendly explanation
+// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid
+// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly
+// more user-friendly ones.
+//
+// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized.
+//
+// ===========================================================================
+//
+// Philosophy
+//
+// stb libraries are designed with the following priorities:
+//
+//    1. easy to use
+//    2. easy to maintain
+//    3. good performance
+//
+// Sometimes I let "good performance" creep up in priority over "easy to maintain",
+// and for best performance I may provide less-easy-to-use APIs that give higher
+// performance, in addition to the easy to use ones. Nevertheless, it's important
+// to keep in mind that from the standpoint of you, a client of this library,
+// all you care about is #1 and #3, and stb libraries do not emphasize #3 above all.
+//
+// Some secondary priorities arise directly from the first two, some of which
+// make more explicit reasons why performance can't be emphasized.
+//
+//    - Portable ("ease of use")
+//    - Small footprint ("easy to maintain")
+//    - No dependencies ("ease of use")
+//
+// ===========================================================================
+//
+// I/O callbacks
+//
+// I/O callbacks allow you to read from arbitrary sources, like packaged
+// files or some other source. Data read from callbacks are processed
+// through a small internal buffer (currently 128 bytes) to try to reduce
+// overhead.
+//
+// The three functions you must define are "read" (reads some bytes of data),
+// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end).
+//
+// ===========================================================================
+//
+// SIMD support
+//
+// The JPEG decoder will try to automatically use SIMD kernels on x86 when
+// supported by the compiler. For ARM Neon support, you must explicitly
+// request it.
+//
+// (The old do-it-yourself SIMD API is no longer supported in the current
+// code.)
+//
+// On x86, SSE2 will automatically be used when available based on a run-time
+// test; if not, the generic C versions are used as a fall-back. On ARM targets,
+// the typical path is to have separate builds for NEON and non-NEON devices
+// (at least this is true for iOS and Android). Therefore, the NEON support is
+// toggled by a build flag: define STBI_NEON to get NEON loops.
+//
+// The output of the JPEG decoder is slightly different from versions where
+// SIMD support was introduced (that is, for versions before 1.49). The
+// difference is only +-1 in the 8-bit RGB channels, and only on a small
+// fraction of pixels. You can force the pre-1.49 behavior by defining
+// STBI_JPEG_OLD, but this will disable some of the SIMD decoding path
+// and hence cost some performance.
+//
+// If for some reason you do not want to use any of SIMD code, or if
+// you have issues compiling it, you can disable it entirely by
+// defining STBI_NO_SIMD.
+//
+// ===========================================================================
+//
+// HDR image support   (disable by defining STBI_NO_HDR)
+//
+// stb_image now supports loading HDR images in general, and currently
+// the Radiance .HDR file format, although the support is provided
+// generically. You can still load any file through the existing interface;
+// if you attempt to load an HDR file, it will be automatically remapped to
+// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1;
+// both of these constants can be reconfigured through this interface:
+//
+//     stbi_hdr_to_ldr_gamma(2.2f);
+//     stbi_hdr_to_ldr_scale(1.0f);
+//
+// (note, do not use _inverse_ constants; stbi_image will invert them
+// appropriately).
+//
+// Additionally, there is a new, parallel interface for loading files as
+// (linear) floats to preserve the full dynamic range:
+//
+//    float *data = stbi_loadf(filename, &x, &y, &n, 0);
+//
+// If you load LDR images through this interface, those images will
+// be promoted to floating point values, run through the inverse of
+// constants corresponding to the above:
+//
+//     stbi_ldr_to_hdr_scale(1.0f);
+//     stbi_ldr_to_hdr_gamma(2.2f);
+//
+// Finally, given a filename (or an open file or memory block--see header
+// file for details) containing image data, you can query for the "most
+// appropriate" interface to use (that is, whether the image is HDR or
+// not), using:
+//
+//     stbi_is_hdr(char *filename);
+//
+// ===========================================================================
+//
+// iPhone PNG support:
+//
+// By default we convert iphone-formatted PNGs back to RGB, even though
+// they are internally encoded differently. You can disable this conversion
+// by by calling stbi_convert_iphone_png_to_rgb(0), in which case
+// you will always just get the native iphone "format" through (which
+// is BGR stored in RGB).
+//
+// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per
+// pixel to remove any premultiplied alpha *only* if the image file explicitly
+// says there's premultiplied data (currently only happens in iPhone images,
+// and only if iPhone convert-to-rgb processing is on).
+//
+
+
+#ifndef STBI_NO_STDIO
+#include <stdio.h>
+#endif // STBI_NO_STDIO
+
+#define STBI_VERSION 1
+
+enum
+{
+   STBI_default = 0, // only used for req_comp
+
+   STBI_grey       = 1,
+   STBI_grey_alpha = 2,
+   STBI_rgb        = 3,
+   STBI_rgb_alpha  = 4
+};
+
+typedef unsigned char stbi_uc;
+typedef unsigned short stbi_us;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef STB_IMAGE_STATIC
+#define STBIDEF static
+#else
+#define STBIDEF extern
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// PRIMARY API - works on images of any type
+//
+
+//
+// load image by filename, open file, or memory buffer
+//
+
+typedef struct
+{
+   int      (*read)  (void *user,char *data,int size);   // fill 'data' with 'size' bytes.  return number of bytes actually read
+   void     (*skip)  (void *user,int n);                 // skip the next 'n' bytes, or 'unget' the last -n bytes if negative
+   int      (*eof)   (void *user);                       // returns nonzero if we are at end of file/data
+} stbi_io_callbacks;
+
+////////////////////////////////////
+//
+// 8-bits-per-channel interface
+//
+
+STBIDEF stbi_uc *stbi_load               (char              const *filename,           int *x, int *y, int *channels_in_file, int desired_channels);
+STBIDEF stbi_uc *stbi_load_from_memory   (stbi_uc           const *buffer, int len   , int *x, int *y, int *channels_in_file, int desired_channels);
+STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk  , void *user, int *x, int *y, int *channels_in_file, int desired_channels);
+
+#ifndef STBI_NO_STDIO
+STBIDEF stbi_uc *stbi_load_from_file   (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);
+// for stbi_load_from_file, file pointer is left pointing immediately after image
+#endif
+
+////////////////////////////////////
+//
+// 16-bits-per-channel interface
+//
+
+STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);
+#ifndef STBI_NO_STDIO
+STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);
+#endif
+// @TODO the other variants
+
+////////////////////////////////////
+//
+// float-per-channel interface
+//
+#ifndef STBI_NO_LINEAR
+   STBIDEF float *stbi_loadf                 (char const *filename,           int *x, int *y, int *channels_in_file, int desired_channels);
+   STBIDEF float *stbi_loadf_from_memory     (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels);
+   STBIDEF float *stbi_loadf_from_callbacks  (stbi_io_callbacks const *clbk, void *user, int *x, int *y,  int *channels_in_file, int desired_channels);
+
+   #ifndef STBI_NO_STDIO
+   STBIDEF float *stbi_loadf_from_file  (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels);
+   #endif
+#endif
+
+#ifndef STBI_NO_HDR
+   STBIDEF void   stbi_hdr_to_ldr_gamma(float gamma);
+   STBIDEF void   stbi_hdr_to_ldr_scale(float scale);
+#endif // STBI_NO_HDR
+
+#ifndef STBI_NO_LINEAR
+   STBIDEF void   stbi_ldr_to_hdr_gamma(float gamma);
+   STBIDEF void   stbi_ldr_to_hdr_scale(float scale);
+#endif // STBI_NO_LINEAR
+
+// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR
+STBIDEF int    stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user);
+STBIDEF int    stbi_is_hdr_from_memory(stbi_uc const *buffer, int len);
+#ifndef STBI_NO_STDIO
+STBIDEF int      stbi_is_hdr          (char const *filename);
+STBIDEF int      stbi_is_hdr_from_file(FILE *f);
+#endif // STBI_NO_STDIO
+
+
+// get a VERY brief reason for failure
+// NOT THREADSAFE
+STBIDEF const char *stbi_failure_reason  (void);
+
+// free the loaded image -- this is just free()
+STBIDEF void     stbi_image_free      (void *retval_from_stbi_load);
+
+// get image dimensions & components without fully decoding
+STBIDEF int      stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp);
+STBIDEF int      stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp);
+
+#ifndef STBI_NO_STDIO
+STBIDEF int      stbi_info            (char const *filename,     int *x, int *y, int *comp);
+STBIDEF int      stbi_info_from_file  (FILE *f,                  int *x, int *y, int *comp);
+
+#endif
+
+
+
+// for image formats that explicitly notate that they have premultiplied alpha,
+// we just return the colors as stored in the file. set this flag to force
+// unpremultiplication. results are undefined if the unpremultiply overflow.
+STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply);
+
+// indicate whether we should process iphone images back to canonical format,
+// or just pass them through "as-is"
+STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert);
+
+// flip the image vertically, so the first pixel in the output array is the bottom left
+STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip);
+
+// ZLIB client - used by PNG, available for other purposes
+
+STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen);
+STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header);
+STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen);
+STBIDEF int   stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);
+
+STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen);
+STBIDEF int   stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+//
+//
+////   end header file   /////////////////////////////////////////////////////
+#endif // STBI_INCLUDE_STB_IMAGE_H
+
+#ifdef STB_IMAGE_IMPLEMENTATION
+
+#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \
+  || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \
+  || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \
+  || defined(STBI_ONLY_ZLIB)
+   #ifndef STBI_ONLY_JPEG
+   #define STBI_NO_JPEG
+   #endif
+   #ifndef STBI_ONLY_PNG
+   #define STBI_NO_PNG
+   #endif
+   #ifndef STBI_ONLY_BMP
+   #define STBI_NO_BMP
+   #endif
+   #ifndef STBI_ONLY_PSD
+   #define STBI_NO_PSD
+   #endif
+   #ifndef STBI_ONLY_TGA
+   #define STBI_NO_TGA
+   #endif
+   #ifndef STBI_ONLY_GIF
+   #define STBI_NO_GIF
+   #endif
+   #ifndef STBI_ONLY_HDR
+   #define STBI_NO_HDR
+   #endif
+   #ifndef STBI_ONLY_PIC
+   #define STBI_NO_PIC
+   #endif
+   #ifndef STBI_ONLY_PNM
+   #define STBI_NO_PNM
+   #endif
+#endif
+
+#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB)
+#define STBI_NO_ZLIB
+#endif
+
+
+#include <stdarg.h>
+#include <stddef.h> // ptrdiff_t on osx
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR)
+#include <math.h>  // ldexp
+#endif
+
+#ifndef STBI_NO_STDIO
+#include <stdio.h>
+#endif
+
+#ifndef STBI_ASSERT
+#include <assert.h>
+#define STBI_ASSERT(x) assert(x)
+#endif
+
+
+#ifndef _MSC_VER
+   #ifdef __cplusplus
+   #define stbi_inline inline
+   #else
+   #define stbi_inline
+   #endif
+#else
+   #define stbi_inline __forceinline
+#endif
+
+
+#ifdef _MSC_VER
+typedef unsigned short stbi__uint16;
+typedef   signed short stbi__int16;
+typedef unsigned int   stbi__uint32;
+typedef   signed int   stbi__int32;
+#else
+#include <stdint.h>
+typedef uint16_t stbi__uint16;
+typedef int16_t  stbi__int16;
+typedef uint32_t stbi__uint32;
+typedef int32_t  stbi__int32;
+#endif
+
+// should produce compiler error if size is wrong
+typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
+
+#ifdef _MSC_VER
+#define STBI_NOTUSED(v)  (void)(v)
+#else
+#define STBI_NOTUSED(v)  (void)sizeof(v)
+#endif
+
+#ifdef _MSC_VER
+#define STBI_HAS_LROTL
+#endif
+
+#ifdef STBI_HAS_LROTL
+   #define stbi_lrot(x,y)  _lrotl(x,y)
+#else
+   #define stbi_lrot(x,y)  (((x) << (y)) | ((x) >> (32 - (y))))
+#endif
+
+#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED))
+// ok
+#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED)
+// ok
+#else
+#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)."
+#endif
+
+#ifndef STBI_MALLOC
+#define STBI_MALLOC(sz)           malloc(sz)
+#define STBI_REALLOC(p,newsz)     realloc(p,newsz)
+#define STBI_FREE(p)              free(p)
+#endif
+
+#ifndef STBI_REALLOC_SIZED
+#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz)
+#endif
+
+// x86/x64 detection
+#if defined(__x86_64__) || defined(_M_X64)
+#define STBI__X64_TARGET
+#elif defined(__i386) || defined(_M_IX86)
+#define STBI__X86_TARGET
+#endif
+
+#if defined(__GNUC__) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)
+// NOTE: not clear do we actually need this for the 64-bit path?
+// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
+// (but compiling with -msse2 allows the compiler to use SSE2 everywhere;
+// this is just broken and gcc are jerks for not fixing it properly
+// http://www.virtualdub.org/blog/pivot/entry.php?id=363 )
+#define STBI_NO_SIMD
+#endif
+
+#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD)
+// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET
+//
+// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the
+// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant.
+// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not
+// simultaneously enabling "-mstackrealign".
+//
+// See https://github.com/nothings/stb/issues/81 for more information.
+//
+// So default to no SSE2 on 32-bit MinGW. If you've read this far and added
+// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2.
+#define STBI_NO_SIMD
+#endif
+
+#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET))
+#define STBI_SSE2
+#include <emmintrin.h>
+
+#ifdef _MSC_VER
+
+#if _MSC_VER >= 1400  // not VC6
+#include <intrin.h> // __cpuid
+static int stbi__cpuid3(void)
+{
+   int info[4];
+   __cpuid(info,1);
+   return info[3];
+}
+#else
+static int stbi__cpuid3(void)
+{
+   int res;
+   __asm {
+      mov  eax,1
+      cpuid
+      mov  res,edx
+   }
+   return res;
+}
+#endif
+
+#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name
+
+static int stbi__sse2_available()
+{
+   int info3 = stbi__cpuid3();
+   return ((info3 >> 26) & 1) != 0;
+}
+#else // assume GCC-style if not VC++
+#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16)))
+
+static int stbi__sse2_available()
+{
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later
+   // GCC 4.8+ has a nice way to do this
+   return __builtin_cpu_supports("sse2");
+#else
+   // portable way to do this, preferably without using GCC inline ASM?
+   // just bail for now.
+   return 0;
+#endif
+}
+#endif
+#endif
+
+// ARM NEON
+#if defined(STBI_NO_SIMD) && defined(STBI_NEON)
+#undef STBI_NEON
+#endif
+
+#ifdef STBI_NEON
+#include <arm_neon.h>
+// assume GCC or Clang on ARM targets
+#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16)))
+#endif
+
+#ifndef STBI_SIMD_ALIGN
+#define STBI_SIMD_ALIGN(type, name) type name
+#endif
+
+///////////////////////////////////////////////
+//
+//  stbi__context struct and start_xxx functions
+
+// stbi__context structure is our basic context used by all images, so it
+// contains all the IO context, plus some basic image information
+typedef struct
+{
+   stbi__uint32 img_x, img_y;
+   int img_n, img_out_n;
+
+   stbi_io_callbacks io;
+   void *io_user_data;
+
+   int read_from_callbacks;
+   int buflen;
+   stbi_uc buffer_start[128];
+
+   stbi_uc *img_buffer, *img_buffer_end;
+   stbi_uc *img_buffer_original, *img_buffer_original_end;
+} stbi__context;
+
+
+static void stbi__refill_buffer(stbi__context *s);
+
+// initialize a memory-decode context
+static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len)
+{
+   s->io.read = NULL;
+   s->read_from_callbacks = 0;
+   s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer;
+   s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len;
+}
+
+// initialize a callback-based context
+static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user)
+{
+   s->io = *c;
+   s->io_user_data = user;
+   s->buflen = sizeof(s->buffer_start);
+   s->read_from_callbacks = 1;
+   s->img_buffer_original = s->buffer_start;
+   stbi__refill_buffer(s);
+   s->img_buffer_original_end = s->img_buffer_end;
+}
+
+#ifndef STBI_NO_STDIO
+
+static int stbi__stdio_read(void *user, char *data, int size)
+{
+   return (int) fread(data,1,size,(FILE*) user);
+}
+
+static void stbi__stdio_skip(void *user, int n)
+{
+   fseek((FILE*) user, n, SEEK_CUR);
+}
+
+static int stbi__stdio_eof(void *user)
+{
+   return feof((FILE*) user);
+}
+
+static stbi_io_callbacks stbi__stdio_callbacks =
+{
+   stbi__stdio_read,
+   stbi__stdio_skip,
+   stbi__stdio_eof,
+};
+
+static void stbi__start_file(stbi__context *s, FILE *f)
+{
+   stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f);
+}
+
+//static void stop_file(stbi__context *s) { }
+
+#endif // !STBI_NO_STDIO
+
+static void stbi__rewind(stbi__context *s)
+{
+   // conceptually rewind SHOULD rewind to the beginning of the stream,
+   // but we just rewind to the beginning of the initial buffer, because
+   // we only use it after doing 'test', which only ever looks at at most 92 bytes
+   s->img_buffer = s->img_buffer_original;
+   s->img_buffer_end = s->img_buffer_original_end;
+}
+
+enum
+{
+   STBI_ORDER_RGB,
+   STBI_ORDER_BGR
+};
+
+typedef struct
+{
+   int bits_per_channel;
+   int num_channels;
+   int channel_order;
+} stbi__result_info;
+
+#ifndef STBI_NO_JPEG
+static int      stbi__jpeg_test(stbi__context *s);
+static void    *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PNG
+static int      stbi__png_test(stbi__context *s);
+static void    *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__png_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_BMP
+static int      stbi__bmp_test(stbi__context *s);
+static void    *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_TGA
+static int      stbi__tga_test(stbi__context *s);
+static void    *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__tga_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PSD
+static int      stbi__psd_test(stbi__context *s);
+static void    *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc);
+static int      stbi__psd_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_HDR
+static int      stbi__hdr_test(stbi__context *s);
+static float   *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PIC
+static int      stbi__pic_test(stbi__context *s);
+static void    *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__pic_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_GIF
+static int      stbi__gif_test(stbi__context *s);
+static void    *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__gif_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PNM
+static int      stbi__pnm_test(stbi__context *s);
+static void    *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri);
+static int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+// this is not threadsafe
+static const char *stbi__g_failure_reason;
+
+STBIDEF const char *stbi_failure_reason(void)
+{
+   return stbi__g_failure_reason;
+}
+
+static int stbi__err(const char *str)
+{
+   stbi__g_failure_reason = str;
+   return 0;
+}
+
+static void *stbi__malloc(size_t size)
+{
+    return STBI_MALLOC(size);
+}
+
+// stb_image uses ints pervasively, including for offset calculations.
+// therefore the largest decoded image size we can support with the
+// current code, even on 64-bit targets, is INT_MAX. this is not a
+// significant limitation for the intended use case.
+//
+// we do, however, need to make sure our size calculations don't
+// overflow. hence a few helper functions for size calculations that
+// multiply integers together, making sure that they're non-negative
+// and no overflow occurs.
+
+// return 1 if the sum is valid, 0 on overflow.
+// negative terms are considered invalid.
+static int stbi__addsizes_valid(int a, int b)
+{
+   if (b < 0) return 0;
+   // now 0 <= b <= INT_MAX, hence also
+   // 0 <= INT_MAX - b <= INTMAX.
+   // And "a + b <= INT_MAX" (which might overflow) is the
+   // same as a <= INT_MAX - b (no overflow)
+   return a <= INT_MAX - b;
+}
+
+// returns 1 if the product is valid, 0 on overflow.
+// negative factors are considered invalid.
+static int stbi__mul2sizes_valid(int a, int b)
+{
+   if (a < 0 || b < 0) return 0;
+   if (b == 0) return 1; // mul-by-0 is always safe
+   // portable way to check for no overflows in a*b
+   return a <= INT_MAX/b;
+}
+
+// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow
+static int stbi__mad2sizes_valid(int a, int b, int add)
+{
+   return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add);
+}
+
+// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow
+static int stbi__mad3sizes_valid(int a, int b, int c, int add)
+{
+   return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) &&
+      stbi__addsizes_valid(a*b*c, add);
+}
+
+// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow
+static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)
+{
+   return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) &&
+      stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add);
+}
+
+// mallocs with size overflow checking
+static void *stbi__malloc_mad2(int a, int b, int add)
+{
+   if (!stbi__mad2sizes_valid(a, b, add)) return NULL;
+   return stbi__malloc(a*b + add);
+}
+
+static void *stbi__malloc_mad3(int a, int b, int c, int add)
+{
+   if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL;
+   return stbi__malloc(a*b*c + add);
+}
+
+static void *stbi__malloc_mad4(int a, int b, int c, int d, int add)
+{
+   if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL;
+   return stbi__malloc(a*b*c*d + add);
+}
+
+// stbi__err - error
+// stbi__errpf - error returning pointer to float
+// stbi__errpuc - error returning pointer to unsigned char
+
+#ifdef STBI_NO_FAILURE_STRINGS
+   #define stbi__err(x,y)  0
+#elif defined(STBI_FAILURE_USERMSG)
+   #define stbi__err(x,y)  stbi__err(y)
+#else
+   #define stbi__err(x,y)  stbi__err(x)
+#endif
+
+#define stbi__errpf(x,y)   ((float *)(size_t) (stbi__err(x,y)?NULL:NULL))
+#define stbi__errpuc(x,y)  ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL))
+
+STBIDEF void stbi_image_free(void *retval_from_stbi_load)
+{
+   STBI_FREE(retval_from_stbi_load);
+}
+
+#ifndef STBI_NO_LINEAR
+static float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp);
+#endif
+
+#ifndef STBI_NO_HDR
+static stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp);
+#endif
+
+static int stbi__vertically_flip_on_load = 0;
+
+STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip)
+{
+    stbi__vertically_flip_on_load = flag_true_if_should_flip;
+}
+
+static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc)
+{
+   memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields
+   ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed
+   ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order
+   ri->num_channels = 0;
+
+   #ifndef STBI_NO_JPEG
+   if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri);
+   #endif
+   #ifndef STBI_NO_PNG
+   if (stbi__png_test(s))  return stbi__png_load(s,x,y,comp,req_comp, ri);
+   #endif
+   #ifndef STBI_NO_BMP
+   if (stbi__bmp_test(s))  return stbi__bmp_load(s,x,y,comp,req_comp, ri);
+   #endif
+   #ifndef STBI_NO_GIF
+   if (stbi__gif_test(s))  return stbi__gif_load(s,x,y,comp,req_comp, ri);
+   #endif
+   #ifndef STBI_NO_PSD
+   if (stbi__psd_test(s))  return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc);
+   #endif
+   #ifndef STBI_NO_PIC
+   if (stbi__pic_test(s))  return stbi__pic_load(s,x,y,comp,req_comp, ri);
+   #endif
+   #ifndef STBI_NO_PNM
+   if (stbi__pnm_test(s))  return stbi__pnm_load(s,x,y,comp,req_comp, ri);
+   #endif
+
+   #ifndef STBI_NO_HDR
+   if (stbi__hdr_test(s)) {
+      float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri);
+      return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp);
+   }
+   #endif
+
+   #ifndef STBI_NO_TGA
+   // test tga last because it's a crappy test!
+   if (stbi__tga_test(s))
+      return stbi__tga_load(s,x,y,comp,req_comp, ri);
+   #endif
+
+   return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt");
+}
+
+static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels)
+{
+   int i;
+   int img_len = w * h * channels;
+   stbi_uc *reduced;
+
+   reduced = (stbi_uc *) stbi__malloc(img_len);
+   if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory");
+
+   for (i = 0; i < img_len; ++i)
+      reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling
+
+   STBI_FREE(orig);
+   return reduced;
+}
+
+static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels)
+{
+   int i;
+   int img_len = w * h * channels;
+   stbi__uint16 *enlarged;
+
+   enlarged = (stbi__uint16 *) stbi__malloc(img_len*2);
+   if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory");
+
+   for (i = 0; i < img_len; ++i)
+      enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff
+
+   STBI_FREE(orig);
+   return enlarged;
+}
+
+static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__result_info ri;
+   void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8);
+
+   if (result == NULL)
+      return NULL;
+
+   if (ri.bits_per_channel != 8) {
+      STBI_ASSERT(ri.bits_per_channel == 16);
+      result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp);
+      ri.bits_per_channel = 8;
+   }
+
+   // @TODO: move stbi__convert_format to here
+
+   if (stbi__vertically_flip_on_load) {
+      int w = *x, h = *y;
+      int channels = req_comp ? req_comp : *comp;
+      int row,col,z;
+      stbi_uc *image = (stbi_uc *) result;
+
+      // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once
+      for (row = 0; row < (h>>1); row++) {
+         for (col = 0; col < w; col++) {
+            for (z = 0; z < channels; z++) {
+               stbi_uc temp = image[(row * w + col) * channels + z];
+               image[(row * w + col) * channels + z] = image[((h - row - 1) * w + col) * channels + z];
+               image[((h - row - 1) * w + col) * channels + z] = temp;
+            }
+         }
+      }
+   }
+
+   return (unsigned char *) result;
+}
+
+static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__result_info ri;
+   void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16);
+
+   if (result == NULL)
+      return NULL;
+
+   if (ri.bits_per_channel != 16) {
+      STBI_ASSERT(ri.bits_per_channel == 8);
+      result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp);
+      ri.bits_per_channel = 16;
+   }
+
+   // @TODO: move stbi__convert_format16 to here
+   // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision
+
+   if (stbi__vertically_flip_on_load) {
+      int w = *x, h = *y;
+      int channels = req_comp ? req_comp : *comp;
+      int row,col,z;
+      stbi__uint16 *image = (stbi__uint16 *) result;
+
+      // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once
+      for (row = 0; row < (h>>1); row++) {
+         for (col = 0; col < w; col++) {
+            for (z = 0; z < channels; z++) {
+               stbi__uint16 temp = image[(row * w + col) * channels + z];
+               image[(row * w + col) * channels + z] = image[((h - row - 1) * w + col) * channels + z];
+               image[((h - row - 1) * w + col) * channels + z] = temp;
+            }
+         }
+      }
+   }
+
+   return (stbi__uint16 *) result;
+}
+
+#ifndef STBI_NO_HDR
+static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp)
+{
+   if (stbi__vertically_flip_on_load && result != NULL) {
+      int w = *x, h = *y;
+      int depth = req_comp ? req_comp : *comp;
+      int row,col,z;
+      float temp;
+
+      // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once
+      for (row = 0; row < (h>>1); row++) {
+         for (col = 0; col < w; col++) {
+            for (z = 0; z < depth; z++) {
+               temp = result[(row * w + col) * depth + z];
+               result[(row * w + col) * depth + z] = result[((h - row - 1) * w + col) * depth + z];
+               result[((h - row - 1) * w + col) * depth + z] = temp;
+            }
+         }
+      }
+   }
+}
+#endif
+
+#ifndef STBI_NO_STDIO
+
+static FILE *stbi__fopen(char const *filename, char const *mode)
+{
+   FILE *f;
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+   if (0 != fopen_s(&f, filename, mode))
+      f=0;
+#else
+   f = fopen(filename, mode);
+#endif
+   return f;
+}
+
+
+STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp)
+{
+   FILE *f = stbi__fopen(filename, "rb");
+   unsigned char *result;
+   if (!f) return stbi__errpuc("can't fopen", "Unable to open file");
+   result = stbi_load_from_file(f,x,y,comp,req_comp);
+   fclose(f);
+   return result;
+}
+
+STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)
+{
+   unsigned char *result;
+   stbi__context s;
+   stbi__start_file(&s,f);
+   result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp);
+   if (result) {
+      // need to 'unget' all the characters in the IO buffer
+      fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR);
+   }
+   return result;
+}
+
+STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__uint16 *result;
+   stbi__context s;
+   stbi__start_file(&s,f);
+   result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp);
+   if (result) {
+      // need to 'unget' all the characters in the IO buffer
+      fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR);
+   }
+   return result;
+}
+
+STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp)
+{
+   FILE *f = stbi__fopen(filename, "rb");
+   stbi__uint16 *result;
+   if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file");
+   result = stbi_load_from_file_16(f,x,y,comp,req_comp);
+   fclose(f);
+   return result;
+}
+
+
+#endif //!STBI_NO_STDIO
+
+STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp);
+}
+
+STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
+   return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp);
+}
+
+#ifndef STBI_NO_LINEAR
+static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   unsigned char *data;
+   #ifndef STBI_NO_HDR
+   if (stbi__hdr_test(s)) {
+      stbi__result_info ri;
+      float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri);
+      if (hdr_data)
+         stbi__float_postprocess(hdr_data,x,y,comp,req_comp);
+      return hdr_data;
+   }
+   #endif
+   data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp);
+   if (data)
+      return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp);
+   return stbi__errpf("unknown image type", "Image not of any known type, or corrupt");
+}
+
+STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi__loadf_main(&s,x,y,comp,req_comp);
+}
+
+STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
+   return stbi__loadf_main(&s,x,y,comp,req_comp);
+}
+
+#ifndef STBI_NO_STDIO
+STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp)
+{
+   float *result;
+   FILE *f = stbi__fopen(filename, "rb");
+   if (!f) return stbi__errpf("can't fopen", "Unable to open file");
+   result = stbi_loadf_from_file(f,x,y,comp,req_comp);
+   fclose(f);
+   return result;
+}
+
+STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_file(&s,f);
+   return stbi__loadf_main(&s,x,y,comp,req_comp);
+}
+#endif // !STBI_NO_STDIO
+
+#endif // !STBI_NO_LINEAR
+
+// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is
+// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always
+// reports false!
+
+STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)
+{
+   #ifndef STBI_NO_HDR
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi__hdr_test(&s);
+   #else
+   STBI_NOTUSED(buffer);
+   STBI_NOTUSED(len);
+   return 0;
+   #endif
+}
+
+#ifndef STBI_NO_STDIO
+STBIDEF int      stbi_is_hdr          (char const *filename)
+{
+   FILE *f = stbi__fopen(filename, "rb");
+   int result=0;
+   if (f) {
+      result = stbi_is_hdr_from_file(f);
+      fclose(f);
+   }
+   return result;
+}
+
+STBIDEF int      stbi_is_hdr_from_file(FILE *f)
+{
+   #ifndef STBI_NO_HDR
+   stbi__context s;
+   stbi__start_file(&s,f);
+   return stbi__hdr_test(&s);
+   #else
+   STBI_NOTUSED(f);
+   return 0;
+   #endif
+}
+#endif // !STBI_NO_STDIO
+
+STBIDEF int      stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user)
+{
+   #ifndef STBI_NO_HDR
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
+   return stbi__hdr_test(&s);
+   #else
+   STBI_NOTUSED(clbk);
+   STBI_NOTUSED(user);
+   return 0;
+   #endif
+}
+
+#ifndef STBI_NO_LINEAR
+static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f;
+
+STBIDEF void   stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; }
+STBIDEF void   stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; }
+#endif
+
+static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f;
+
+STBIDEF void   stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; }
+STBIDEF void   stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; }
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Common code used by all image loaders
+//
+
+enum
+{
+   STBI__SCAN_load=0,
+   STBI__SCAN_type,
+   STBI__SCAN_header
+};
+
+static void stbi__refill_buffer(stbi__context *s)
+{
+   int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen);
+   if (n == 0) {
+      // at end of file, treat same as if from memory, but need to handle case
+      // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file
+      s->read_from_callbacks = 0;
+      s->img_buffer = s->buffer_start;
+      s->img_buffer_end = s->buffer_start+1;
+      *s->img_buffer = 0;
+   } else {
+      s->img_buffer = s->buffer_start;
+      s->img_buffer_end = s->buffer_start + n;
+   }
+}
+
+stbi_inline static stbi_uc stbi__get8(stbi__context *s)
+{
+   if (s->img_buffer < s->img_buffer_end)
+      return *s->img_buffer++;
+   if (s->read_from_callbacks) {
+      stbi__refill_buffer(s);
+      return *s->img_buffer++;
+   }
+   return 0;
+}
+
+stbi_inline static int stbi__at_eof(stbi__context *s)
+{
+   if (s->io.read) {
+      if (!(s->io.eof)(s->io_user_data)) return 0;
+      // if feof() is true, check if buffer = end
+      // special case: we've only got the special 0 character at the end
+      if (s->read_from_callbacks == 0) return 1;
+   }
+
+   return s->img_buffer >= s->img_buffer_end;
+}
+
+static void stbi__skip(stbi__context *s, int n)
+{
+   if (n < 0) {
+      s->img_buffer = s->img_buffer_end;
+      return;
+   }
+   if (s->io.read) {
+      int blen = (int) (s->img_buffer_end - s->img_buffer);
+      if (blen < n) {
+         s->img_buffer = s->img_buffer_end;
+         (s->io.skip)(s->io_user_data, n - blen);
+         return;
+      }
+   }
+   s->img_buffer += n;
+}
+
+static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
+{
+   if (s->io.read) {
+      int blen = (int) (s->img_buffer_end - s->img_buffer);
+      if (blen < n) {
+         int res, count;
+
+         memcpy(buffer, s->img_buffer, blen);
+
+         count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen);
+         res = (count == (n-blen));
+         s->img_buffer = s->img_buffer_end;
+         return res;
+      }
+   }
+
+   if (s->img_buffer+n <= s->img_buffer_end) {
+      memcpy(buffer, s->img_buffer, n);
+      s->img_buffer += n;
+      return 1;
+   } else
+      return 0;
+}
+
+static int stbi__get16be(stbi__context *s)
+{
+   int z = stbi__get8(s);
+   return (z << 8) + stbi__get8(s);
+}
+
+static stbi__uint32 stbi__get32be(stbi__context *s)
+{
+   stbi__uint32 z = stbi__get16be(s);
+   return (z << 16) + stbi__get16be(s);
+}
+
+#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF)
+// nothing
+#else
+static int stbi__get16le(stbi__context *s)
+{
+   int z = stbi__get8(s);
+   return z + (stbi__get8(s) << 8);
+}
+#endif
+
+#ifndef STBI_NO_BMP
+static stbi__uint32 stbi__get32le(stbi__context *s)
+{
+   stbi__uint32 z = stbi__get16le(s);
+   return z + (stbi__get16le(s) << 16);
+}
+#endif
+
+#define STBI__BYTECAST(x)  ((stbi_uc) ((x) & 255))  // truncate int to byte without warnings
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//  generic converter from built-in img_n to req_comp
+//    individual types do this automatically as much as possible (e.g. jpeg
+//    does all cases internally since it needs to colorspace convert anyway,
+//    and it never has alpha, so very few cases ). png can automatically
+//    interleave an alpha=255 channel, but falls back to this for other cases
+//
+//  assume data buffer is malloced, so malloc a new one and free that one
+//  only failure mode is malloc failing
+
+static stbi_uc stbi__compute_y(int r, int g, int b)
+{
+   return (stbi_uc) (((r*77) + (g*150) +  (29*b)) >> 8);
+}
+
+static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y)
+{
+   int i,j;
+   unsigned char *good;
+
+   if (req_comp == img_n) return data;
+   STBI_ASSERT(req_comp >= 1 && req_comp <= 4);
+
+   good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0);
+   if (good == NULL) {
+      STBI_FREE(data);
+      return stbi__errpuc("outofmem", "Out of memory");
+   }
+
+   for (j=0; j < (int) y; ++j) {
+      unsigned char *src  = data + j * x * img_n   ;
+      unsigned char *dest = good + j * x * req_comp;
+
+      #define STBI__COMBO(a,b)  ((a)*8+(b))
+      #define STBI__CASE(a,b)   case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
+      // convert source image with img_n components to one with req_comp components;
+      // avoid switch per pixel, so use switch per scanline and massive macros
+      switch (STBI__COMBO(img_n, req_comp)) {
+         STBI__CASE(1,2) { dest[0]=src[0], dest[1]=255;                                     } break;
+         STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0];                                  } break;
+         STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=255;                     } break;
+         STBI__CASE(2,1) { dest[0]=src[0];                                                  } break;
+         STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0];                                  } break;
+         STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1];                  } break;
+         STBI__CASE(3,4) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255;        } break;
+         STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]);                   } break;
+         STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255;    } break;
+         STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]);                   } break;
+         STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; } break;
+         STBI__CASE(4,3) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2];                    } break;
+         default: STBI_ASSERT(0);
+      }
+      #undef STBI__CASE
+   }
+
+   STBI_FREE(data);
+   return good;
+}
+
+static stbi__uint16 stbi__compute_y_16(int r, int g, int b)
+{
+   return (stbi__uint16) (((r*77) + (g*150) +  (29*b)) >> 8);
+}
+
+static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y)
+{
+   int i,j;
+   stbi__uint16 *good;
+
+   if (req_comp == img_n) return data;
+   STBI_ASSERT(req_comp >= 1 && req_comp <= 4);
+
+   good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2);
+   if (good == NULL) {
+      STBI_FREE(data);
+      return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory");
+   }
+
+   for (j=0; j < (int) y; ++j) {
+      stbi__uint16 *src  = data + j * x * img_n   ;
+      stbi__uint16 *dest = good + j * x * req_comp;
+
+      #define STBI__COMBO(a,b)  ((a)*8+(b))
+      #define STBI__CASE(a,b)   case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
+      // convert source image with img_n components to one with req_comp components;
+      // avoid switch per pixel, so use switch per scanline and massive macros
+      switch (STBI__COMBO(img_n, req_comp)) {
+         STBI__CASE(1,2) { dest[0]=src[0], dest[1]=0xffff;                                     } break;
+         STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0];                                     } break;
+         STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=0xffff;                     } break;
+         STBI__CASE(2,1) { dest[0]=src[0];                                                     } break;
+         STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0];                                     } break;
+         STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1];                     } break;
+         STBI__CASE(3,4) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=0xffff;        } break;
+         STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]);                   } break;
+         STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]), dest[1] = 0xffff; } break;
+         STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]);                   } break;
+         STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]), dest[1] = src[3]; } break;
+         STBI__CASE(4,3) { dest[0]=src[0],dest[1]=src[1],dest[2]=src[2];                       } break;
+         default: STBI_ASSERT(0);
+      }
+      #undef STBI__CASE
+   }
+
+   STBI_FREE(data);
+   return good;
+}
+
+#ifndef STBI_NO_LINEAR
+static float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
+{
+   int i,k,n;
+   float *output;
+   if (!data) return NULL;
+   output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0);
+   if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); }
+   // compute number of non-alpha components
+   if (comp & 1) n = comp; else n = comp-1;
+   for (i=0; i < x*y; ++i) {
+      for (k=0; k < n; ++k) {
+         output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale);
+      }
+      if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f;
+   }
+   STBI_FREE(data);
+   return output;
+}
+#endif
+
+#ifndef STBI_NO_HDR
+#define stbi__float2int(x)   ((int) (x))
+static stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp)
+{
+   int i,k,n;
+   stbi_uc *output;
+   if (!data) return NULL;
+   output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0);
+   if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); }
+   // compute number of non-alpha components
+   if (comp & 1) n = comp; else n = comp-1;
+   for (i=0; i < x*y; ++i) {
+      for (k=0; k < n; ++k) {
+         float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f;
+         if (z < 0) z = 0;
+         if (z > 255) z = 255;
+         output[i*comp + k] = (stbi_uc) stbi__float2int(z);
+      }
+      if (k < comp) {
+         float z = data[i*comp+k] * 255 + 0.5f;
+         if (z < 0) z = 0;
+         if (z > 255) z = 255;
+         output[i*comp + k] = (stbi_uc) stbi__float2int(z);
+      }
+   }
+   STBI_FREE(data);
+   return output;
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//  "baseline" JPEG/JFIF decoder
+//
+//    simple implementation
+//      - doesn't support delayed output of y-dimension
+//      - simple interface (only one output format: 8-bit interleaved RGB)
+//      - doesn't try to recover corrupt jpegs
+//      - doesn't allow partial loading, loading multiple at once
+//      - still fast on x86 (copying globals into locals doesn't help x86)
+//      - allocates lots of intermediate memory (full size of all components)
+//        - non-interleaved case requires this anyway
+//        - allows good upsampling (see next)
+//    high-quality
+//      - upsampled channels are bilinearly interpolated, even across blocks
+//      - quality integer IDCT derived from IJG's 'slow'
+//    performance
+//      - fast huffman; reasonable integer IDCT
+//      - some SIMD kernels for common paths on targets with SSE2/NEON
+//      - uses a lot of intermediate memory, could cache poorly
+
+#ifndef STBI_NO_JPEG
+
+// huffman decoding acceleration
+#define FAST_BITS   9  // larger handles more cases; smaller stomps less cache
+
+typedef struct
+{
+   stbi_uc  fast[1 << FAST_BITS];
+   // weirdly, repacking this into AoS is a 10% speed loss, instead of a win
+   stbi__uint16 code[256];
+   stbi_uc  values[256];
+   stbi_uc  size[257];
+   unsigned int maxcode[18];
+   int    delta[17];   // old 'firstsymbol' - old 'firstcode'
+} stbi__huffman;
+
+typedef struct
+{
+   stbi__context *s;
+   stbi__huffman huff_dc[4];
+   stbi__huffman huff_ac[4];
+   stbi_uc dequant[4][64];
+   stbi__int16 fast_ac[4][1 << FAST_BITS];
+
+// sizes for components, interleaved MCUs
+   int img_h_max, img_v_max;
+   int img_mcu_x, img_mcu_y;
+   int img_mcu_w, img_mcu_h;
+
+// definition of jpeg image component
+   struct
+   {
+      int id;
+      int h,v;
+      int tq;
+      int hd,ha;
+      int dc_pred;
+
+      int x,y,w2,h2;
+      stbi_uc *data;
+      void *raw_data, *raw_coeff;
+      stbi_uc *linebuf;
+      short   *coeff;   // progressive only
+      int      coeff_w, coeff_h; // number of 8x8 coefficient blocks
+   } img_comp[4];
+
+   stbi__uint32   code_buffer; // jpeg entropy-coded buffer
+   int            code_bits;   // number of valid bits
+   unsigned char  marker;      // marker seen while filling entropy buffer
+   int            nomore;      // flag if we saw a marker so must stop
+
+   int            progressive;
+   int            spec_start;
+   int            spec_end;
+   int            succ_high;
+   int            succ_low;
+   int            eob_run;
+   int            rgb;
+
+   int scan_n, order[4];
+   int restart_interval, todo;
+
+// kernels
+   void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]);
+   void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step);
+   stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs);
+} stbi__jpeg;
+
+static int stbi__build_huffman(stbi__huffman *h, int *count)
+{
+   int i,j,k=0,code;
+   // build size list for each symbol (from JPEG spec)
+   for (i=0; i < 16; ++i)
+      for (j=0; j < count[i]; ++j)
+         h->size[k++] = (stbi_uc) (i+1);
+   h->size[k] = 0;
+
+   // compute actual symbols (from jpeg spec)
+   code = 0;
+   k = 0;
+   for(j=1; j <= 16; ++j) {
+      // compute delta to add to code to compute symbol id
+      h->delta[j] = k - code;
+      if (h->size[k] == j) {
+         while (h->size[k] == j)
+            h->code[k++] = (stbi__uint16) (code++);
+         if (code-1 >= (1 << j)) return stbi__err("bad code lengths","Corrupt JPEG");
+      }
+      // compute largest code + 1 for this size, preshifted as needed later
+      h->maxcode[j] = code << (16-j);
+      code <<= 1;
+   }
+   h->maxcode[j] = 0xffffffff;
+
+   // build non-spec acceleration table; 255 is flag for not-accelerated
+   memset(h->fast, 255, 1 << FAST_BITS);
+   for (i=0; i < k; ++i) {
+      int s = h->size[i];
+      if (s <= FAST_BITS) {
+         int c = h->code[i] << (FAST_BITS-s);
+         int m = 1 << (FAST_BITS-s);
+         for (j=0; j < m; ++j) {
+            h->fast[c+j] = (stbi_uc) i;
+         }
+      }
+   }
+   return 1;
+}
+
+// build a table that decodes both magnitude and value of small ACs in
+// one go.
+static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)
+{
+   int i;
+   for (i=0; i < (1 << FAST_BITS); ++i) {
+      stbi_uc fast = h->fast[i];
+      fast_ac[i] = 0;
+      if (fast < 255) {
+         int rs = h->values[fast];
+         int run = (rs >> 4) & 15;
+         int magbits = rs & 15;
+         int len = h->size[fast];
+
+         if (magbits && len + magbits <= FAST_BITS) {
+            // magnitude code followed by receive_extend code
+            int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits);
+            int m = 1 << (magbits - 1);
+            if (k < m) k += (-1 << magbits) + 1;
+            // if the result is small enough, we can fit it in fast_ac table
+            if (k >= -128 && k <= 127)
+               fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits));
+         }
+      }
+   }
+}
+
+static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
+{
+   do {
+      int b = j->nomore ? 0 : stbi__get8(j->s);
+      if (b == 0xff) {
+         int c = stbi__get8(j->s);
+         if (c != 0) {
+            j->marker = (unsigned char) c;
+            j->nomore = 1;
+            return;
+         }
+      }
+      j->code_buffer |= b << (24 - j->code_bits);
+      j->code_bits += 8;
+   } while (j->code_bits <= 24);
+}
+
+// (1 << n) - 1
+static stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535};
+
+// decode a jpeg huffman value from the bitstream
+stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h)
+{
+   unsigned int temp;
+   int c,k;
+
+   if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+
+   // look at the top FAST_BITS and determine what symbol ID it is,
+   // if the code is <= FAST_BITS
+   c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
+   k = h->fast[c];
+   if (k < 255) {
+      int s = h->size[k];
+      if (s > j->code_bits)
+         return -1;
+      j->code_buffer <<= s;
+      j->code_bits -= s;
+      return h->values[k];
+   }
+
+   // naive test is to shift the code_buffer down so k bits are
+   // valid, then test against maxcode. To speed this up, we've
+   // preshifted maxcode left so that it has (16-k) 0s at the
+   // end; in other words, regardless of the number of bits, it
+   // wants to be compared against something shifted to have 16;
+   // that way we don't need to shift inside the loop.
+   temp = j->code_buffer >> 16;
+   for (k=FAST_BITS+1 ; ; ++k)
+      if (temp < h->maxcode[k])
+         break;
+   if (k == 17) {
+      // error! code not found
+      j->code_bits -= 16;
+      return -1;
+   }
+
+   if (k > j->code_bits)
+      return -1;
+
+   // convert the huffman code to the symbol id
+   c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k];
+   STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]);
+
+   // convert the id to a symbol
+   j->code_bits -= k;
+   j->code_buffer <<= k;
+   return h->values[c];
+}
+
+// bias[n] = (-1<<n) + 1
+static int const stbi__jbias[16] = {0,-1,-3,-7,-15,-31,-63,-127,-255,-511,-1023,-2047,-4095,-8191,-16383,-32767};
+
+// combined JPEG 'receive' and JPEG 'extend', since baseline
+// always extends everything it receives.
+stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
+{
+   unsigned int k;
+   int sgn;
+   if (j->code_bits < n) stbi__grow_buffer_unsafe(j);
+
+   sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB
+   k = stbi_lrot(j->code_buffer, n);
+   STBI_ASSERT(n >= 0 && n < (int) (sizeof(stbi__bmask)/sizeof(*stbi__bmask)));
+   j->code_buffer = k & ~stbi__bmask[n];
+   k &= stbi__bmask[n];
+   j->code_bits -= n;
+   return k + (stbi__jbias[n] & ~sgn);
+}
+
+// get some unsigned bits
+stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n)
+{
+   unsigned int k;
+   if (j->code_bits < n) stbi__grow_buffer_unsafe(j);
+   k = stbi_lrot(j->code_buffer, n);
+   j->code_buffer = k & ~stbi__bmask[n];
+   k &= stbi__bmask[n];
+   j->code_bits -= n;
+   return k;
+}
+
+stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j)
+{
+   unsigned int k;
+   if (j->code_bits < 1) stbi__grow_buffer_unsafe(j);
+   k = j->code_buffer;
+   j->code_buffer <<= 1;
+   --j->code_bits;
+   return k & 0x80000000;
+}
+
+// given a value that's at position X in the zigzag stream,
+// where does it appear in the 8x8 matrix coded as row-major?
+static stbi_uc stbi__jpeg_dezigzag[64+15] =
+{
+    0,  1,  8, 16,  9,  2,  3, 10,
+   17, 24, 32, 25, 18, 11,  4,  5,
+   12, 19, 26, 33, 40, 48, 41, 34,
+   27, 20, 13,  6,  7, 14, 21, 28,
+   35, 42, 49, 56, 57, 50, 43, 36,
+   29, 22, 15, 23, 30, 37, 44, 51,
+   58, 59, 52, 45, 38, 31, 39, 46,
+   53, 60, 61, 54, 47, 55, 62, 63,
+   // let corrupt input sample past end
+   63, 63, 63, 63, 63, 63, 63, 63,
+   63, 63, 63, 63, 63, 63, 63
+};
+
+// decode one 64-entry block--
+static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi_uc *dequant)
+{
+   int diff,dc,k;
+   int t;
+
+   if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+   t = stbi__jpeg_huff_decode(j, hdc);
+   if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+
+   // 0 all the ac values now so we can do it 32-bits at a time
+   memset(data,0,64*sizeof(data[0]));
+
+   diff = t ? stbi__extend_receive(j, t) : 0;
+   dc = j->img_comp[b].dc_pred + diff;
+   j->img_comp[b].dc_pred = dc;
+   data[0] = (short) (dc * dequant[0]);
+
+   // decode AC components, see JPEG spec
+   k = 1;
+   do {
+      unsigned int zig;
+      int c,r,s;
+      if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+      c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
+      r = fac[c];
+      if (r) { // fast-AC path
+         k += (r >> 4) & 15; // run
+         s = r & 15; // combined length
+         j->code_buffer <<= s;
+         j->code_bits -= s;
+         // decode into unzigzag'd location
+         zig = stbi__jpeg_dezigzag[k++];
+         data[zig] = (short) ((r >> 8) * dequant[zig]);
+      } else {
+         int rs = stbi__jpeg_huff_decode(j, hac);
+         if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+         s = rs & 15;
+         r = rs >> 4;
+         if (s == 0) {
+            if (rs != 0xf0) break; // end block
+            k += 16;
+         } else {
+            k += r;
+            // decode into unzigzag'd location
+            zig = stbi__jpeg_dezigzag[k++];
+            data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]);
+         }
+      }
+   } while (k < 64);
+   return 1;
+}
+
+static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b)
+{
+   int diff,dc;
+   int t;
+   if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG");
+
+   if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+
+   if (j->succ_high == 0) {
+      // first scan for DC coefficient, must be first
+      memset(data,0,64*sizeof(data[0])); // 0 all the ac values now
+      t = stbi__jpeg_huff_decode(j, hdc);
+      diff = t ? stbi__extend_receive(j, t) : 0;
+
+      dc = j->img_comp[b].dc_pred + diff;
+      j->img_comp[b].dc_pred = dc;
+      data[0] = (short) (dc << j->succ_low);
+   } else {
+      // refinement scan for DC coefficient
+      if (stbi__jpeg_get_bit(j))
+         data[0] += (short) (1 << j->succ_low);
+   }
+   return 1;
+}
+
+// @OPTIMIZE: store non-zigzagged during the decode passes,
+// and only de-zigzag when dequantizing
+static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac)
+{
+   int k;
+   if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG");
+
+   if (j->succ_high == 0) {
+      int shift = j->succ_low;
+
+      if (j->eob_run) {
+         --j->eob_run;
+         return 1;
+      }
+
+      k = j->spec_start;
+      do {
+         unsigned int zig;
+         int c,r,s;
+         if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+         c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
+         r = fac[c];
+         if (r) { // fast-AC path
+            k += (r >> 4) & 15; // run
+            s = r & 15; // combined length
+            j->code_buffer <<= s;
+            j->code_bits -= s;
+            zig = stbi__jpeg_dezigzag[k++];
+            data[zig] = (short) ((r >> 8) << shift);
+         } else {
+            int rs = stbi__jpeg_huff_decode(j, hac);
+            if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+            s = rs & 15;
+            r = rs >> 4;
+            if (s == 0) {
+               if (r < 15) {
+                  j->eob_run = (1 << r);
+                  if (r)
+                     j->eob_run += stbi__jpeg_get_bits(j, r);
+                  --j->eob_run;
+                  break;
+               }
+               k += 16;
+            } else {
+               k += r;
+               zig = stbi__jpeg_dezigzag[k++];
+               data[zig] = (short) (stbi__extend_receive(j,s) << shift);
+            }
+         }
+      } while (k <= j->spec_end);
+   } else {
+      // refinement scan for these AC coefficients
+
+      short bit = (short) (1 << j->succ_low);
+
+      if (j->eob_run) {
+         --j->eob_run;
+         for (k = j->spec_start; k <= j->spec_end; ++k) {
+            short *p = &data[stbi__jpeg_dezigzag[k]];
+            if (*p != 0)
+               if (stbi__jpeg_get_bit(j))
+                  if ((*p & bit)==0) {
+                     if (*p > 0)
+                        *p += bit;
+                     else
+                        *p -= bit;
+                  }
+         }
+      } else {
+         k = j->spec_start;
+         do {
+            int r,s;
+            int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh
+            if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+            s = rs & 15;
+            r = rs >> 4;
+            if (s == 0) {
+               if (r < 15) {
+                  j->eob_run = (1 << r) - 1;
+                  if (r)
+                     j->eob_run += stbi__jpeg_get_bits(j, r);
+                  r = 64; // force end of block
+               } else {
+                  // r=15 s=0 should write 16 0s, so we just do
+                  // a run of 15 0s and then write s (which is 0),
+                  // so we don't have to do anything special here
+               }
+            } else {
+               if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG");
+               // sign bit
+               if (stbi__jpeg_get_bit(j))
+                  s = bit;
+               else
+                  s = -bit;
+            }
+
+            // advance by r
+            while (k <= j->spec_end) {
+               short *p = &data[stbi__jpeg_dezigzag[k++]];
+               if (*p != 0) {
+                  if (stbi__jpeg_get_bit(j))
+                     if ((*p & bit)==0) {
+                        if (*p > 0)
+                           *p += bit;
+                        else
+                           *p -= bit;
+                     }
+               } else {
+                  if (r == 0) {
+                     *p = (short) s;
+                     break;
+                  }
+                  --r;
+               }
+            }
+         } while (k <= j->spec_end);
+      }
+   }
+   return 1;
+}
+
+// take a -128..127 value and stbi__clamp it and convert to 0..255
+stbi_inline static stbi_uc stbi__clamp(int x)
+{
+   // trick to use a single test to catch both cases
+   if ((unsigned int) x > 255) {
+      if (x < 0) return 0;
+      if (x > 255) return 255;
+   }
+   return (stbi_uc) x;
+}
+
+#define stbi__f2f(x)  ((int) (((x) * 4096 + 0.5)))
+#define stbi__fsh(x)  ((x) << 12)
+
+// derived from jidctint -- DCT_ISLOW
+#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \
+   int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \
+   p2 = s2;                                    \
+   p3 = s6;                                    \
+   p1 = (p2+p3) * stbi__f2f(0.5411961f);       \
+   t2 = p1 + p3*stbi__f2f(-1.847759065f);      \
+   t3 = p1 + p2*stbi__f2f( 0.765366865f);      \
+   p2 = s0;                                    \
+   p3 = s4;                                    \
+   t0 = stbi__fsh(p2+p3);                      \
+   t1 = stbi__fsh(p2-p3);                      \
+   x0 = t0+t3;                                 \
+   x3 = t0-t3;                                 \
+   x1 = t1+t2;                                 \
+   x2 = t1-t2;                                 \
+   t0 = s7;                                    \
+   t1 = s5;                                    \
+   t2 = s3;                                    \
+   t3 = s1;                                    \
+   p3 = t0+t2;                                 \
+   p4 = t1+t3;                                 \
+   p1 = t0+t3;                                 \
+   p2 = t1+t2;                                 \
+   p5 = (p3+p4)*stbi__f2f( 1.175875602f);      \
+   t0 = t0*stbi__f2f( 0.298631336f);           \
+   t1 = t1*stbi__f2f( 2.053119869f);           \
+   t2 = t2*stbi__f2f( 3.072711026f);           \
+   t3 = t3*stbi__f2f( 1.501321110f);           \
+   p1 = p5 + p1*stbi__f2f(-0.899976223f);      \
+   p2 = p5 + p2*stbi__f2f(-2.562915447f);      \
+   p3 = p3*stbi__f2f(-1.961570560f);           \
+   p4 = p4*stbi__f2f(-0.390180644f);           \
+   t3 += p1+p4;                                \
+   t2 += p2+p3;                                \
+   t1 += p2+p4;                                \
+   t0 += p1+p3;
+
+static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64])
+{
+   int i,val[64],*v=val;
+   stbi_uc *o;
+   short *d = data;
+
+   // columns
+   for (i=0; i < 8; ++i,++d, ++v) {
+      // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing
+      if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0
+           && d[40]==0 && d[48]==0 && d[56]==0) {
+         //    no shortcut                 0     seconds
+         //    (1|2|3|4|5|6|7)==0          0     seconds
+         //    all separate               -0.047 seconds
+         //    1 && 2|3 && 4|5 && 6|7:    -0.047 seconds
+         int dcterm = d[0] << 2;
+         v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm;
+      } else {
+         STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56])
+         // constants scaled things up by 1<<12; let's bring them back
+         // down, but keep 2 extra bits of precision
+         x0 += 512; x1 += 512; x2 += 512; x3 += 512;
+         v[ 0] = (x0+t3) >> 10;
+         v[56] = (x0-t3) >> 10;
+         v[ 8] = (x1+t2) >> 10;
+         v[48] = (x1-t2) >> 10;
+         v[16] = (x2+t1) >> 10;
+         v[40] = (x2-t1) >> 10;
+         v[24] = (x3+t0) >> 10;
+         v[32] = (x3-t0) >> 10;
+      }
+   }
+
+   for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) {
+      // no fast case since the first 1D IDCT spread components out
+      STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7])
+      // constants scaled things up by 1<<12, plus we had 1<<2 from first
+      // loop, plus horizontal and vertical each scale by sqrt(8) so together
+      // we've got an extra 1<<3, so 1<<17 total we need to remove.
+      // so we want to round that, which means adding 0.5 * 1<<17,
+      // aka 65536. Also, we'll end up with -128 to 127 that we want
+      // to encode as 0..255 by adding 128, so we'll add that before the shift
+      x0 += 65536 + (128<<17);
+      x1 += 65536 + (128<<17);
+      x2 += 65536 + (128<<17);
+      x3 += 65536 + (128<<17);
+      // tried computing the shifts into temps, or'ing the temps to see
+      // if any were out of range, but that was slower
+      o[0] = stbi__clamp((x0+t3) >> 17);
+      o[7] = stbi__clamp((x0-t3) >> 17);
+      o[1] = stbi__clamp((x1+t2) >> 17);
+      o[6] = stbi__clamp((x1-t2) >> 17);
+      o[2] = stbi__clamp((x2+t1) >> 17);
+      o[5] = stbi__clamp((x2-t1) >> 17);
+      o[3] = stbi__clamp((x3+t0) >> 17);
+      o[4] = stbi__clamp((x3-t0) >> 17);
+   }
+}
+
+#ifdef STBI_SSE2
+// sse2 integer IDCT. not the fastest possible implementation but it
+// produces bit-identical results to the generic C version so it's
+// fully "transparent".
+static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
+{
+   // This is constructed to match our regular (generic) integer IDCT exactly.
+   __m128i row0, row1, row2, row3, row4, row5, row6, row7;
+   __m128i tmp;
+
+   // dot product constant: even elems=x, odd elems=y
+   #define dct_const(x,y)  _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y))
+
+   // out(0) = c0[even]*x + c0[odd]*y   (c0, x, y 16-bit, out 32-bit)
+   // out(1) = c1[even]*x + c1[odd]*y
+   #define dct_rot(out0,out1, x,y,c0,c1) \
+      __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \
+      __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \
+      __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \
+      __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \
+      __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \
+      __m128i out1##_h = _mm_madd_epi16(c0##hi, c1)
+
+   // out = in << 12  (in 16-bit, out 32-bit)
+   #define dct_widen(out, in) \
+      __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \
+      __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4)
+
+   // wide add
+   #define dct_wadd(out, a, b) \
+      __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \
+      __m128i out##_h = _mm_add_epi32(a##_h, b##_h)
+
+   // wide sub
+   #define dct_wsub(out, a, b) \
+      __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \
+      __m128i out##_h = _mm_sub_epi32(a##_h, b##_h)
+
+   // butterfly a/b, add bias, then shift by "s" and pack
+   #define dct_bfly32o(out0, out1, a,b,bias,s) \
+      { \
+         __m128i abiased_l = _mm_add_epi32(a##_l, bias); \
+         __m128i abiased_h = _mm_add_epi32(a##_h, bias); \
+         dct_wadd(sum, abiased, b); \
+         dct_wsub(dif, abiased, b); \
+         out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \
+         out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \
+      }
+
+   // 8-bit interleave step (for transposes)
+   #define dct_interleave8(a, b) \
+      tmp = a; \
+      a = _mm_unpacklo_epi8(a, b); \
+      b = _mm_unpackhi_epi8(tmp, b)
+
+   // 16-bit interleave step (for transposes)
+   #define dct_interleave16(a, b) \
+      tmp = a; \
+      a = _mm_unpacklo_epi16(a, b); \
+      b = _mm_unpackhi_epi16(tmp, b)
+
+   #define dct_pass(bias,shift) \
+      { \
+         /* even part */ \
+         dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \
+         __m128i sum04 = _mm_add_epi16(row0, row4); \
+         __m128i dif04 = _mm_sub_epi16(row0, row4); \
+         dct_widen(t0e, sum04); \
+         dct_widen(t1e, dif04); \
+         dct_wadd(x0, t0e, t3e); \
+         dct_wsub(x3, t0e, t3e); \
+         dct_wadd(x1, t1e, t2e); \
+         dct_wsub(x2, t1e, t2e); \
+         /* odd part */ \
+         dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \
+         dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \
+         __m128i sum17 = _mm_add_epi16(row1, row7); \
+         __m128i sum35 = _mm_add_epi16(row3, row5); \
+         dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \
+         dct_wadd(x4, y0o, y4o); \
+         dct_wadd(x5, y1o, y5o); \
+         dct_wadd(x6, y2o, y5o); \
+         dct_wadd(x7, y3o, y4o); \
+         dct_bfly32o(row0,row7, x0,x7,bias,shift); \
+         dct_bfly32o(row1,row6, x1,x6,bias,shift); \
+         dct_bfly32o(row2,row5, x2,x5,bias,shift); \
+         dct_bfly32o(row3,row4, x3,x4,bias,shift); \
+      }
+
+   __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f));
+   __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f));
+   __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f));
+   __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f));
+   __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f));
+   __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f));
+   __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f));
+   __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f));
+
+   // rounding biases in column/row passes, see stbi__idct_block for explanation.
+   __m128i bias_0 = _mm_set1_epi32(512);
+   __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17));
+
+   // load
+   row0 = _mm_load_si128((const __m128i *) (data + 0*8));
+   row1 = _mm_load_si128((const __m128i *) (data + 1*8));
+   row2 = _mm_load_si128((const __m128i *) (data + 2*8));
+   row3 = _mm_load_si128((const __m128i *) (data + 3*8));
+   row4 = _mm_load_si128((const __m128i *) (data + 4*8));
+   row5 = _mm_load_si128((const __m128i *) (data + 5*8));
+   row6 = _mm_load_si128((const __m128i *) (data + 6*8));
+   row7 = _mm_load_si128((const __m128i *) (data + 7*8));
+
+   // column pass
+   dct_pass(bias_0, 10);
+
+   {
+      // 16bit 8x8 transpose pass 1
+      dct_interleave16(row0, row4);
+      dct_interleave16(row1, row5);
+      dct_interleave16(row2, row6);
+      dct_interleave16(row3, row7);
+
+      // transpose pass 2
+      dct_interleave16(row0, row2);
+      dct_interleave16(row1, row3);
+      dct_interleave16(row4, row6);
+      dct_interleave16(row5, row7);
+
+      // transpose pass 3
+      dct_interleave16(row0, row1);
+      dct_interleave16(row2, row3);
+      dct_interleave16(row4, row5);
+      dct_interleave16(row6, row7);
+   }
+
+   // row pass
+   dct_pass(bias_1, 17);
+
+   {
+      // pack
+      __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7
+      __m128i p1 = _mm_packus_epi16(row2, row3);
+      __m128i p2 = _mm_packus_epi16(row4, row5);
+      __m128i p3 = _mm_packus_epi16(row6, row7);
+
+      // 8bit 8x8 transpose pass 1
+      dct_interleave8(p0, p2); // a0e0a1e1...
+      dct_interleave8(p1, p3); // c0g0c1g1...
+
+      // transpose pass 2
+      dct_interleave8(p0, p1); // a0c0e0g0...
+      dct_interleave8(p2, p3); // b0d0f0h0...
+
+      // transpose pass 3
+      dct_interleave8(p0, p2); // a0b0c0d0...
+      dct_interleave8(p1, p3); // a4b4c4d4...
+
+      // store
+      _mm_storel_epi64((__m128i *) out, p0); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, p2); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, p1); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, p3); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e));
+   }
+
+#undef dct_const
+#undef dct_rot
+#undef dct_widen
+#undef dct_wadd
+#undef dct_wsub
+#undef dct_bfly32o
+#undef dct_interleave8
+#undef dct_interleave16
+#undef dct_pass
+}
+
+#endif // STBI_SSE2
+
+#ifdef STBI_NEON
+
+// NEON integer IDCT. should produce bit-identical
+// results to the generic C version.
+static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
+{
+   int16x8_t row0, row1, row2, row3, row4, row5, row6, row7;
+
+   int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f));
+   int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f));
+   int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f));
+   int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f));
+   int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f));
+   int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f));
+   int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f));
+   int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f));
+   int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f));
+   int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f));
+   int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f));
+   int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f));
+
+#define dct_long_mul(out, inq, coeff) \
+   int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \
+   int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff)
+
+#define dct_long_mac(out, acc, inq, coeff) \
+   int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \
+   int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff)
+
+#define dct_widen(out, inq) \
+   int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \
+   int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12)
+
+// wide add
+#define dct_wadd(out, a, b) \
+   int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \
+   int32x4_t out##_h = vaddq_s32(a##_h, b##_h)
+
+// wide sub
+#define dct_wsub(out, a, b) \
+   int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \
+   int32x4_t out##_h = vsubq_s32(a##_h, b##_h)
+
+// butterfly a/b, then shift using "shiftop" by "s" and pack
+#define dct_bfly32o(out0,out1, a,b,shiftop,s) \
+   { \
+      dct_wadd(sum, a, b); \
+      dct_wsub(dif, a, b); \
+      out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \
+      out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \
+   }
+
+#define dct_pass(shiftop, shift) \
+   { \
+      /* even part */ \
+      int16x8_t sum26 = vaddq_s16(row2, row6); \
+      dct_long_mul(p1e, sum26, rot0_0); \
+      dct_long_mac(t2e, p1e, row6, rot0_1); \
+      dct_long_mac(t3e, p1e, row2, rot0_2); \
+      int16x8_t sum04 = vaddq_s16(row0, row4); \
+      int16x8_t dif04 = vsubq_s16(row0, row4); \
+      dct_widen(t0e, sum04); \
+      dct_widen(t1e, dif04); \
+      dct_wadd(x0, t0e, t3e); \
+      dct_wsub(x3, t0e, t3e); \
+      dct_wadd(x1, t1e, t2e); \
+      dct_wsub(x2, t1e, t2e); \
+      /* odd part */ \
+      int16x8_t sum15 = vaddq_s16(row1, row5); \
+      int16x8_t sum17 = vaddq_s16(row1, row7); \
+      int16x8_t sum35 = vaddq_s16(row3, row5); \
+      int16x8_t sum37 = vaddq_s16(row3, row7); \
+      int16x8_t sumodd = vaddq_s16(sum17, sum35); \
+      dct_long_mul(p5o, sumodd, rot1_0); \
+      dct_long_mac(p1o, p5o, sum17, rot1_1); \
+      dct_long_mac(p2o, p5o, sum35, rot1_2); \
+      dct_long_mul(p3o, sum37, rot2_0); \
+      dct_long_mul(p4o, sum15, rot2_1); \
+      dct_wadd(sump13o, p1o, p3o); \
+      dct_wadd(sump24o, p2o, p4o); \
+      dct_wadd(sump23o, p2o, p3o); \
+      dct_wadd(sump14o, p1o, p4o); \
+      dct_long_mac(x4, sump13o, row7, rot3_0); \
+      dct_long_mac(x5, sump24o, row5, rot3_1); \
+      dct_long_mac(x6, sump23o, row3, rot3_2); \
+      dct_long_mac(x7, sump14o, row1, rot3_3); \
+      dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \
+      dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \
+      dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \
+      dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \
+   }
+
+   // load
+   row0 = vld1q_s16(data + 0*8);
+   row1 = vld1q_s16(data + 1*8);
+   row2 = vld1q_s16(data + 2*8);
+   row3 = vld1q_s16(data + 3*8);
+   row4 = vld1q_s16(data + 4*8);
+   row5 = vld1q_s16(data + 5*8);
+   row6 = vld1q_s16(data + 6*8);
+   row7 = vld1q_s16(data + 7*8);
+
+   // add DC bias
+   row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0));
+
+   // column pass
+   dct_pass(vrshrn_n_s32, 10);
+
+   // 16bit 8x8 transpose
+   {
+// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively.
+// whether compilers actually get this is another story, sadly.
+#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; }
+#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); }
+#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); }
+
+      // pass 1
+      dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6
+      dct_trn16(row2, row3);
+      dct_trn16(row4, row5);
+      dct_trn16(row6, row7);
+
+      // pass 2
+      dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4
+      dct_trn32(row1, row3);
+      dct_trn32(row4, row6);
+      dct_trn32(row5, row7);
+
+      // pass 3
+      dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0
+      dct_trn64(row1, row5);
+      dct_trn64(row2, row6);
+      dct_trn64(row3, row7);
+
+#undef dct_trn16
+#undef dct_trn32
+#undef dct_trn64
+   }
+
+   // row pass
+   // vrshrn_n_s32 only supports shifts up to 16, we need
+   // 17. so do a non-rounding shift of 16 first then follow
+   // up with a rounding shift by 1.
+   dct_pass(vshrn_n_s32, 16);
+
+   {
+      // pack and round
+      uint8x8_t p0 = vqrshrun_n_s16(row0, 1);
+      uint8x8_t p1 = vqrshrun_n_s16(row1, 1);
+      uint8x8_t p2 = vqrshrun_n_s16(row2, 1);
+      uint8x8_t p3 = vqrshrun_n_s16(row3, 1);
+      uint8x8_t p4 = vqrshrun_n_s16(row4, 1);
+      uint8x8_t p5 = vqrshrun_n_s16(row5, 1);
+      uint8x8_t p6 = vqrshrun_n_s16(row6, 1);
+      uint8x8_t p7 = vqrshrun_n_s16(row7, 1);
+
+      // again, these can translate into one instruction, but often don't.
+#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; }
+#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); }
+#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); }
+
+      // sadly can't use interleaved stores here since we only write
+      // 8 bytes to each scan line!
+
+      // 8x8 8-bit transpose pass 1
+      dct_trn8_8(p0, p1);
+      dct_trn8_8(p2, p3);
+      dct_trn8_8(p4, p5);
+      dct_trn8_8(p6, p7);
+
+      // pass 2
+      dct_trn8_16(p0, p2);
+      dct_trn8_16(p1, p3);
+      dct_trn8_16(p4, p6);
+      dct_trn8_16(p5, p7);
+
+      // pass 3
+      dct_trn8_32(p0, p4);
+      dct_trn8_32(p1, p5);
+      dct_trn8_32(p2, p6);
+      dct_trn8_32(p3, p7);
+
+      // store
+      vst1_u8(out, p0); out += out_stride;
+      vst1_u8(out, p1); out += out_stride;
+      vst1_u8(out, p2); out += out_stride;
+      vst1_u8(out, p3); out += out_stride;
+      vst1_u8(out, p4); out += out_stride;
+      vst1_u8(out, p5); out += out_stride;
+      vst1_u8(out, p6); out += out_stride;
+      vst1_u8(out, p7);
+
+#undef dct_trn8_8
+#undef dct_trn8_16
+#undef dct_trn8_32
+   }
+
+#undef dct_long_mul
+#undef dct_long_mac
+#undef dct_widen
+#undef dct_wadd
+#undef dct_wsub
+#undef dct_bfly32o
+#undef dct_pass
+}
+
+#endif // STBI_NEON
+
+#define STBI__MARKER_none  0xff
+// if there's a pending marker from the entropy stream, return that
+// otherwise, fetch from the stream and get a marker. if there's no
+// marker, return 0xff, which is never a valid marker value
+static stbi_uc stbi__get_marker(stbi__jpeg *j)
+{
+   stbi_uc x;
+   if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; }
+   x = stbi__get8(j->s);
+   if (x != 0xff) return STBI__MARKER_none;
+   while (x == 0xff)
+      x = stbi__get8(j->s);
+   return x;
+}
+
+// in each scan, we'll have scan_n components, and the order
+// of the components is specified by order[]
+#define STBI__RESTART(x)     ((x) >= 0xd0 && (x) <= 0xd7)
+
+// after a restart interval, stbi__jpeg_reset the entropy decoder and
+// the dc prediction
+static void stbi__jpeg_reset(stbi__jpeg *j)
+{
+   j->code_bits = 0;
+   j->code_buffer = 0;
+   j->nomore = 0;
+   j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0;
+   j->marker = STBI__MARKER_none;
+   j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff;
+   j->eob_run = 0;
+   // no more than 1<<31 MCUs if no restart_interal? that's plenty safe,
+   // since we don't even allow 1<<30 pixels
+}
+
+static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
+{
+   stbi__jpeg_reset(z);
+   if (!z->progressive) {
+      if (z->scan_n == 1) {
+         int i,j;
+         STBI_SIMD_ALIGN(short, data[64]);
+         int n = z->order[0];
+         // non-interleaved data, we just need to process one block at a time,
+         // in trivial scanline order
+         // number of blocks to do just depends on how many actual "pixels" this
+         // component has, independent of interleaved MCU blocking and such
+         int w = (z->img_comp[n].x+7) >> 3;
+         int h = (z->img_comp[n].y+7) >> 3;
+         for (j=0; j < h; ++j) {
+            for (i=0; i < w; ++i) {
+               int ha = z->img_comp[n].ha;
+               if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0;
+               z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data);
+               // every data block is an MCU, so countdown the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  // if it's NOT a restart, then just bail, so we get corrupt data
+                  // rather than no data
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      } else { // interleaved
+         int i,j,k,x,y;
+         STBI_SIMD_ALIGN(short, data[64]);
+         for (j=0; j < z->img_mcu_y; ++j) {
+            for (i=0; i < z->img_mcu_x; ++i) {
+               // scan an interleaved mcu... process scan_n components in order
+               for (k=0; k < z->scan_n; ++k) {
+                  int n = z->order[k];
+                  // scan out an mcu's worth of this component; that's just determined
+                  // by the basic H and V specified for the component
+                  for (y=0; y < z->img_comp[n].v; ++y) {
+                     for (x=0; x < z->img_comp[n].h; ++x) {
+                        int x2 = (i*z->img_comp[n].h + x)*8;
+                        int y2 = (j*z->img_comp[n].v + y)*8;
+                        int ha = z->img_comp[n].ha;
+                        if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0;
+                        z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data);
+                     }
+                  }
+               }
+               // after all interleaved components, that's an interleaved MCU,
+               // so now count down the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      }
+   } else {
+      if (z->scan_n == 1) {
+         int i,j;
+         int n = z->order[0];
+         // non-interleaved data, we just need to process one block at a time,
+         // in trivial scanline order
+         // number of blocks to do just depends on how many actual "pixels" this
+         // component has, independent of interleaved MCU blocking and such
+         int w = (z->img_comp[n].x+7) >> 3;
+         int h = (z->img_comp[n].y+7) >> 3;
+         for (j=0; j < h; ++j) {
+            for (i=0; i < w; ++i) {
+               short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w);
+               if (z->spec_start == 0) {
+                  if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n))
+                     return 0;
+               } else {
+                  int ha = z->img_comp[n].ha;
+                  if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha]))
+                     return 0;
+               }
+               // every data block is an MCU, so countdown the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      } else { // interleaved
+         int i,j,k,x,y;
+         for (j=0; j < z->img_mcu_y; ++j) {
+            for (i=0; i < z->img_mcu_x; ++i) {
+               // scan an interleaved mcu... process scan_n components in order
+               for (k=0; k < z->scan_n; ++k) {
+                  int n = z->order[k];
+                  // scan out an mcu's worth of this component; that's just determined
+                  // by the basic H and V specified for the component
+                  for (y=0; y < z->img_comp[n].v; ++y) {
+                     for (x=0; x < z->img_comp[n].h; ++x) {
+                        int x2 = (i*z->img_comp[n].h + x);
+                        int y2 = (j*z->img_comp[n].v + y);
+                        short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w);
+                        if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n))
+                           return 0;
+                     }
+                  }
+               }
+               // after all interleaved components, that's an interleaved MCU,
+               // so now count down the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      }
+   }
+}
+
+static void stbi__jpeg_dequantize(short *data, stbi_uc *dequant)
+{
+   int i;
+   for (i=0; i < 64; ++i)
+      data[i] *= dequant[i];
+}
+
+static void stbi__jpeg_finish(stbi__jpeg *z)
+{
+   if (z->progressive) {
+      // dequantize and idct the data
+      int i,j,n;
+      for (n=0; n < z->s->img_n; ++n) {
+         int w = (z->img_comp[n].x+7) >> 3;
+         int h = (z->img_comp[n].y+7) >> 3;
+         for (j=0; j < h; ++j) {
+            for (i=0; i < w; ++i) {
+               short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w);
+               stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]);
+               z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data);
+            }
+         }
+      }
+   }
+}
+
+static int stbi__process_marker(stbi__jpeg *z, int m)
+{
+   int L;
+   switch (m) {
+      case STBI__MARKER_none: // no marker found
+         return stbi__err("expected marker","Corrupt JPEG");
+
+      case 0xDD: // DRI - specify restart interval
+         if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG");
+         z->restart_interval = stbi__get16be(z->s);
+         return 1;
+
+      case 0xDB: // DQT - define quantization table
+         L = stbi__get16be(z->s)-2;
+         while (L > 0) {
+            int q = stbi__get8(z->s);
+            int p = q >> 4;
+            int t = q & 15,i;
+            if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG");
+            if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG");
+            for (i=0; i < 64; ++i)
+               z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s);
+            L -= 65;
+         }
+         return L==0;
+
+      case 0xC4: // DHT - define huffman table
+         L = stbi__get16be(z->s)-2;
+         while (L > 0) {
+            stbi_uc *v;
+            int sizes[16],i,n=0;
+            int q = stbi__get8(z->s);
+            int tc = q >> 4;
+            int th = q & 15;
+            if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG");
+            for (i=0; i < 16; ++i) {
+               sizes[i] = stbi__get8(z->s);
+               n += sizes[i];
+            }
+            L -= 17;
+            if (tc == 0) {
+               if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0;
+               v = z->huff_dc[th].values;
+            } else {
+               if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0;
+               v = z->huff_ac[th].values;
+            }
+            for (i=0; i < n; ++i)
+               v[i] = stbi__get8(z->s);
+            if (tc != 0)
+               stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th);
+            L -= n;
+         }
+         return L==0;
+   }
+   // check for comment block or APP blocks
+   if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) {
+      stbi__skip(z->s, stbi__get16be(z->s)-2);
+      return 1;
+   }
+   return 0;
+}
+
+// after we see SOS
+static int stbi__process_scan_header(stbi__jpeg *z)
+{
+   int i;
+   int Ls = stbi__get16be(z->s);
+   z->scan_n = stbi__get8(z->s);
+   if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG");
+   if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG");
+   for (i=0; i < z->scan_n; ++i) {
+      int id = stbi__get8(z->s), which;
+      int q = stbi__get8(z->s);
+      for (which = 0; which < z->s->img_n; ++which)
+         if (z->img_comp[which].id == id)
+            break;
+      if (which == z->s->img_n) return 0; // no match
+      z->img_comp[which].hd = q >> 4;   if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG");
+      z->img_comp[which].ha = q & 15;   if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG");
+      z->order[i] = which;
+   }
+
+   {
+      int aa;
+      z->spec_start = stbi__get8(z->s);
+      z->spec_end   = stbi__get8(z->s); // should be 63, but might be 0
+      aa = stbi__get8(z->s);
+      z->succ_high = (aa >> 4);
+      z->succ_low  = (aa & 15);
+      if (z->progressive) {
+         if (z->spec_start > 63 || z->spec_end > 63  || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13)
+            return stbi__err("bad SOS", "Corrupt JPEG");
+      } else {
+         if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG");
+         if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG");
+         z->spec_end = 63;
+      }
+   }
+
+   return 1;
+}
+
+static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why)
+{
+   int i;
+   for (i=0; i < ncomp; ++i) {
+      if (z->img_comp[i].raw_data) {
+         STBI_FREE(z->img_comp[i].raw_data);
+         z->img_comp[i].raw_data = NULL;
+         z->img_comp[i].data = NULL;
+      }
+      if (z->img_comp[i].raw_coeff) {
+         STBI_FREE(z->img_comp[i].raw_coeff);
+         z->img_comp[i].raw_coeff = 0;
+         z->img_comp[i].coeff = 0;
+      }
+      if (z->img_comp[i].linebuf) {
+         STBI_FREE(z->img_comp[i].linebuf);
+         z->img_comp[i].linebuf = NULL;
+      }
+   }
+   return why;
+}
+
+static int stbi__process_frame_header(stbi__jpeg *z, int scan)
+{
+   stbi__context *s = z->s;
+   int Lf,p,i,q, h_max=1,v_max=1,c;
+   Lf = stbi__get16be(s);         if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG
+   p  = stbi__get8(s);            if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline
+   s->img_y = stbi__get16be(s);   if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG
+   s->img_x = stbi__get16be(s);   if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires
+   c = stbi__get8(s);
+   if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG");    // JFIF requires
+   s->img_n = c;
+   for (i=0; i < c; ++i) {
+      z->img_comp[i].data = NULL;
+      z->img_comp[i].linebuf = NULL;
+   }
+
+   if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG");
+
+   z->rgb = 0;
+   for (i=0; i < s->img_n; ++i) {
+      static unsigned char rgb[3] = { 'R', 'G', 'B' };
+      z->img_comp[i].id = stbi__get8(s);
+      if (z->img_comp[i].id != i+1)   // JFIF requires
+         if (z->img_comp[i].id != i) {  // some version of jpegtran outputs non-JFIF-compliant files!
+            // somethings output this (see http://fileformats.archiveteam.org/wiki/JPEG#Color_format)
+            if (z->img_comp[i].id != rgb[i])
+               return stbi__err("bad component ID","Corrupt JPEG");
+            ++z->rgb;
+         }
+      q = stbi__get8(s);
+      z->img_comp[i].h = (q >> 4);  if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG");
+      z->img_comp[i].v = q & 15;    if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG");
+      z->img_comp[i].tq = stbi__get8(s);  if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG");
+   }
+
+   if (scan != STBI__SCAN_load) return 1;
+
+   if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode");
+
+   for (i=0; i < s->img_n; ++i) {
+      if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h;
+      if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v;
+   }
+
+   // compute interleaved mcu info
+   z->img_h_max = h_max;
+   z->img_v_max = v_max;
+   z->img_mcu_w = h_max * 8;
+   z->img_mcu_h = v_max * 8;
+   // these sizes can't be more than 17 bits
+   z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w;
+   z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h;
+
+   for (i=0; i < s->img_n; ++i) {
+      // number of effective pixels (e.g. for non-interleaved MCU)
+      z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max;
+      z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max;
+      // to simplify generation, we'll allocate enough memory to decode
+      // the bogus oversized data from using interleaved MCUs and their
+      // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't
+      // discard the extra data until colorspace conversion
+      //
+      // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier)
+      // so these muls can't overflow with 32-bit ints (which we require)
+      z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8;
+      z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8;
+      z->img_comp[i].coeff = 0;
+      z->img_comp[i].raw_coeff = 0;
+      z->img_comp[i].linebuf = NULL;
+      z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15);
+      if (z->img_comp[i].raw_data == NULL)
+         return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory"));
+      // align blocks for idct using mmx/sse
+      z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15);
+      if (z->progressive) {
+         // w2, h2 are multiples of 8 (see above)
+         z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8;
+         z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8;
+         z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15);
+         if (z->img_comp[i].raw_coeff == NULL)
+            return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory"));
+         z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15);
+      }
+   }
+
+   return 1;
+}
+
+// use comparisons since in some cases we handle more than one case (e.g. SOF)
+#define stbi__DNL(x)         ((x) == 0xdc)
+#define stbi__SOI(x)         ((x) == 0xd8)
+#define stbi__EOI(x)         ((x) == 0xd9)
+#define stbi__SOF(x)         ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2)
+#define stbi__SOS(x)         ((x) == 0xda)
+
+#define stbi__SOF_progressive(x)   ((x) == 0xc2)
+
+static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)
+{
+   int m;
+   z->marker = STBI__MARKER_none; // initialize cached marker to empty
+   m = stbi__get_marker(z);
+   if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG");
+   if (scan == STBI__SCAN_type) return 1;
+   m = stbi__get_marker(z);
+   while (!stbi__SOF(m)) {
+      if (!stbi__process_marker(z,m)) return 0;
+      m = stbi__get_marker(z);
+      while (m == STBI__MARKER_none) {
+         // some files have extra padding after their blocks, so ok, we'll scan
+         if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG");
+         m = stbi__get_marker(z);
+      }
+   }
+   z->progressive = stbi__SOF_progressive(m);
+   if (!stbi__process_frame_header(z, scan)) return 0;
+   return 1;
+}
+
+// decode image to YCbCr format
+static int stbi__decode_jpeg_image(stbi__jpeg *j)
+{
+   int m;
+   for (m = 0; m < 4; m++) {
+      j->img_comp[m].raw_data = NULL;
+      j->img_comp[m].raw_coeff = NULL;
+   }
+   j->restart_interval = 0;
+   if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0;
+   m = stbi__get_marker(j);
+   while (!stbi__EOI(m)) {
+      if (stbi__SOS(m)) {
+         if (!stbi__process_scan_header(j)) return 0;
+         if (!stbi__parse_entropy_coded_data(j)) return 0;
+         if (j->marker == STBI__MARKER_none ) {
+            // handle 0s at the end of image data from IP Kamera 9060
+            while (!stbi__at_eof(j->s)) {
+               int x = stbi__get8(j->s);
+               if (x == 255) {
+                  j->marker = stbi__get8(j->s);
+                  break;
+               } else if (x != 0) {
+                  return stbi__err("junk before marker", "Corrupt JPEG");
+               }
+            }
+            // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0
+         }
+      } else {
+         if (!stbi__process_marker(j, m)) return 0;
+      }
+      m = stbi__get_marker(j);
+   }
+   if (j->progressive)
+      stbi__jpeg_finish(j);
+   return 1;
+}
+
+// static jfif-centered resampling (across block boundaries)
+
+typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1,
+                                    int w, int hs);
+
+#define stbi__div4(x) ((stbi_uc) ((x) >> 2))
+
+static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   STBI_NOTUSED(out);
+   STBI_NOTUSED(in_far);
+   STBI_NOTUSED(w);
+   STBI_NOTUSED(hs);
+   return in_near;
+}
+
+static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate two samples vertically for every one in input
+   int i;
+   STBI_NOTUSED(hs);
+   for (i=0; i < w; ++i)
+      out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2);
+   return out;
+}
+
+static stbi_uc*  stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate two samples horizontally for every one in input
+   int i;
+   stbi_uc *input = in_near;
+
+   if (w == 1) {
+      // if only one sample, can't do any interpolation
+      out[0] = out[1] = input[0];
+      return out;
+   }
+
+   out[0] = input[0];
+   out[1] = stbi__div4(input[0]*3 + input[1] + 2);
+   for (i=1; i < w-1; ++i) {
+      int n = 3*input[i]+2;
+      out[i*2+0] = stbi__div4(n+input[i-1]);
+      out[i*2+1] = stbi__div4(n+input[i+1]);
+   }
+   out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2);
+   out[i*2+1] = input[w-1];
+
+   STBI_NOTUSED(in_far);
+   STBI_NOTUSED(hs);
+
+   return out;
+}
+
+#define stbi__div16(x) ((stbi_uc) ((x) >> 4))
+
+static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate 2x2 samples for every one in input
+   int i,t0,t1;
+   if (w == 1) {
+      out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2);
+      return out;
+   }
+
+   t1 = 3*in_near[0] + in_far[0];
+   out[0] = stbi__div4(t1+2);
+   for (i=1; i < w; ++i) {
+      t0 = t1;
+      t1 = 3*in_near[i]+in_far[i];
+      out[i*2-1] = stbi__div16(3*t0 + t1 + 8);
+      out[i*2  ] = stbi__div16(3*t1 + t0 + 8);
+   }
+   out[w*2-1] = stbi__div4(t1+2);
+
+   STBI_NOTUSED(hs);
+
+   return out;
+}
+
+#if defined(STBI_SSE2) || defined(STBI_NEON)
+static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate 2x2 samples for every one in input
+   int i=0,t0,t1;
+
+   if (w == 1) {
+      out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2);
+      return out;
+   }
+
+   t1 = 3*in_near[0] + in_far[0];
+   // process groups of 8 pixels for as long as we can.
+   // note we can't handle the last pixel in a row in this loop
+   // because we need to handle the filter boundary conditions.
+   for (; i < ((w-1) & ~7); i += 8) {
+#if defined(STBI_SSE2)
+      // load and perform the vertical filtering pass
+      // this uses 3*x + y = 4*x + (y - x)
+      __m128i zero  = _mm_setzero_si128();
+      __m128i farb  = _mm_loadl_epi64((__m128i *) (in_far + i));
+      __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i));
+      __m128i farw  = _mm_unpacklo_epi8(farb, zero);
+      __m128i nearw = _mm_unpacklo_epi8(nearb, zero);
+      __m128i diff  = _mm_sub_epi16(farw, nearw);
+      __m128i nears = _mm_slli_epi16(nearw, 2);
+      __m128i curr  = _mm_add_epi16(nears, diff); // current row
+
+      // horizontal filter works the same based on shifted vers of current
+      // row. "prev" is current row shifted right by 1 pixel; we need to
+      // insert the previous pixel value (from t1).
+      // "next" is current row shifted left by 1 pixel, with first pixel
+      // of next block of 8 pixels added in.
+      __m128i prv0 = _mm_slli_si128(curr, 2);
+      __m128i nxt0 = _mm_srli_si128(curr, 2);
+      __m128i prev = _mm_insert_epi16(prv0, t1, 0);
+      __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7);
+
+      // horizontal filter, polyphase implementation since it's convenient:
+      // even pixels = 3*cur + prev = cur*4 + (prev - cur)
+      // odd  pixels = 3*cur + next = cur*4 + (next - cur)
+      // note the shared term.
+      __m128i bias  = _mm_set1_epi16(8);
+      __m128i curs = _mm_slli_epi16(curr, 2);
+      __m128i prvd = _mm_sub_epi16(prev, curr);
+      __m128i nxtd = _mm_sub_epi16(next, curr);
+      __m128i curb = _mm_add_epi16(curs, bias);
+      __m128i even = _mm_add_epi16(prvd, curb);
+      __m128i odd  = _mm_add_epi16(nxtd, curb);
+
+      // interleave even and odd pixels, then undo scaling.
+      __m128i int0 = _mm_unpacklo_epi16(even, odd);
+      __m128i int1 = _mm_unpackhi_epi16(even, odd);
+      __m128i de0  = _mm_srli_epi16(int0, 4);
+      __m128i de1  = _mm_srli_epi16(int1, 4);
+
+      // pack and write output
+      __m128i outv = _mm_packus_epi16(de0, de1);
+      _mm_storeu_si128((__m128i *) (out + i*2), outv);
+#elif defined(STBI_NEON)
+      // load and perform the vertical filtering pass
+      // this uses 3*x + y = 4*x + (y - x)
+      uint8x8_t farb  = vld1_u8(in_far + i);
+      uint8x8_t nearb = vld1_u8(in_near + i);
+      int16x8_t diff  = vreinterpretq_s16_u16(vsubl_u8(farb, nearb));
+      int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2));
+      int16x8_t curr  = vaddq_s16(nears, diff); // current row
+
+      // horizontal filter works the same based on shifted vers of current
+      // row. "prev" is current row shifted right by 1 pixel; we need to
+      // insert the previous pixel value (from t1).
+      // "next" is current row shifted left by 1 pixel, with first pixel
+      // of next block of 8 pixels added in.
+      int16x8_t prv0 = vextq_s16(curr, curr, 7);
+      int16x8_t nxt0 = vextq_s16(curr, curr, 1);
+      int16x8_t prev = vsetq_lane_s16(t1, prv0, 0);
+      int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7);
+
+      // horizontal filter, polyphase implementation since it's convenient:
+      // even pixels = 3*cur + prev = cur*4 + (prev - cur)
+      // odd  pixels = 3*cur + next = cur*4 + (next - cur)
+      // note the shared term.
+      int16x8_t curs = vshlq_n_s16(curr, 2);
+      int16x8_t prvd = vsubq_s16(prev, curr);
+      int16x8_t nxtd = vsubq_s16(next, curr);
+      int16x8_t even = vaddq_s16(curs, prvd);
+      int16x8_t odd  = vaddq_s16(curs, nxtd);
+
+      // undo scaling and round, then store with even/odd phases interleaved
+      uint8x8x2_t o;
+      o.val[0] = vqrshrun_n_s16(even, 4);
+      o.val[1] = vqrshrun_n_s16(odd,  4);
+      vst2_u8(out + i*2, o);
+#endif
+
+      // "previous" value for next iter
+      t1 = 3*in_near[i+7] + in_far[i+7];
+   }
+
+   t0 = t1;
+   t1 = 3*in_near[i] + in_far[i];
+   out[i*2] = stbi__div16(3*t1 + t0 + 8);
+
+   for (++i; i < w; ++i) {
+      t0 = t1;
+      t1 = 3*in_near[i]+in_far[i];
+      out[i*2-1] = stbi__div16(3*t0 + t1 + 8);
+      out[i*2  ] = stbi__div16(3*t1 + t0 + 8);
+   }
+   out[w*2-1] = stbi__div4(t1+2);
+
+   STBI_NOTUSED(hs);
+
+   return out;
+}
+#endif
+
+static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // resample with nearest-neighbor
+   int i,j;
+   STBI_NOTUSED(in_far);
+   for (i=0; i < w; ++i)
+      for (j=0; j < hs; ++j)
+         out[i*hs+j] = in_near[i];
+   return out;
+}
+
+#ifdef STBI_JPEG_OLD
+// this is the same YCbCr-to-RGB calculation that stb_image has used
+// historically before the algorithm changes in 1.49
+#define float2fixed(x)  ((int) ((x) * 65536 + 0.5))
+static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
+{
+   int i;
+   for (i=0; i < count; ++i) {
+      int y_fixed = (y[i] << 16) + 32768; // rounding
+      int r,g,b;
+      int cr = pcr[i] - 128;
+      int cb = pcb[i] - 128;
+      r = y_fixed + cr*float2fixed(1.40200f);
+      g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f);
+      b = y_fixed                            + cb*float2fixed(1.77200f);
+      r >>= 16;
+      g >>= 16;
+      b >>= 16;
+      if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
+      if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
+      if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
+      out[0] = (stbi_uc)r;
+      out[1] = (stbi_uc)g;
+      out[2] = (stbi_uc)b;
+      out[3] = 255;
+      out += step;
+   }
+}
+#else
+// this is a reduced-precision calculation of YCbCr-to-RGB introduced
+// to make sure the code produces the same results in both SIMD and scalar
+#define float2fixed(x)  (((int) ((x) * 4096.0f + 0.5f)) << 8)
+static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
+{
+   int i;
+   for (i=0; i < count; ++i) {
+      int y_fixed = (y[i] << 20) + (1<<19); // rounding
+      int r,g,b;
+      int cr = pcr[i] - 128;
+      int cb = pcb[i] - 128;
+      r = y_fixed +  cr* float2fixed(1.40200f);
+      g = y_fixed + (cr*-float2fixed(0.71414f)) + ((cb*-float2fixed(0.34414f)) & 0xffff0000);
+      b = y_fixed                               +   cb* float2fixed(1.77200f);
+      r >>= 20;
+      g >>= 20;
+      b >>= 20;
+      if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
+      if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
+      if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
+      out[0] = (stbi_uc)r;
+      out[1] = (stbi_uc)g;
+      out[2] = (stbi_uc)b;
+      out[3] = 255;
+      out += step;
+   }
+}
+#endif
+
+#if defined(STBI_SSE2) || defined(STBI_NEON)
+static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step)
+{
+   int i = 0;
+
+#ifdef STBI_SSE2
+   // step == 3 is pretty ugly on the final interleave, and i'm not convinced
+   // it's useful in practice (you wouldn't use it for textures, for example).
+   // so just accelerate step == 4 case.
+   if (step == 4) {
+      // this is a fairly straightforward implementation and not super-optimized.
+      __m128i signflip  = _mm_set1_epi8(-0x80);
+      __m128i cr_const0 = _mm_set1_epi16(   (short) ( 1.40200f*4096.0f+0.5f));
+      __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f));
+      __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f));
+      __m128i cb_const1 = _mm_set1_epi16(   (short) ( 1.77200f*4096.0f+0.5f));
+      __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128);
+      __m128i xw = _mm_set1_epi16(255); // alpha channel
+
+      for (; i+7 < count; i += 8) {
+         // load
+         __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i));
+         __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i));
+         __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i));
+         __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128
+         __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128
+
+         // unpack to short (and left-shift cr, cb by 8)
+         __m128i yw  = _mm_unpacklo_epi8(y_bias, y_bytes);
+         __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased);
+         __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased);
+
+         // color transform
+         __m128i yws = _mm_srli_epi16(yw, 4);
+         __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw);
+         __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw);
+         __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1);
+         __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1);
+         __m128i rws = _mm_add_epi16(cr0, yws);
+         __m128i gwt = _mm_add_epi16(cb0, yws);
+         __m128i bws = _mm_add_epi16(yws, cb1);
+         __m128i gws = _mm_add_epi16(gwt, cr1);
+
+         // descale
+         __m128i rw = _mm_srai_epi16(rws, 4);
+         __m128i bw = _mm_srai_epi16(bws, 4);
+         __m128i gw = _mm_srai_epi16(gws, 4);
+
+         // back to byte, set up for transpose
+         __m128i brb = _mm_packus_epi16(rw, bw);
+         __m128i gxb = _mm_packus_epi16(gw, xw);
+
+         // transpose to interleave channels
+         __m128i t0 = _mm_unpacklo_epi8(brb, gxb);
+         __m128i t1 = _mm_unpackhi_epi8(brb, gxb);
+         __m128i o0 = _mm_unpacklo_epi16(t0, t1);
+         __m128i o1 = _mm_unpackhi_epi16(t0, t1);
+
+         // store
+         _mm_storeu_si128((__m128i *) (out + 0), o0);
+         _mm_storeu_si128((__m128i *) (out + 16), o1);
+         out += 32;
+      }
+   }
+#endif
+
+#ifdef STBI_NEON
+   // in this version, step=3 support would be easy to add. but is there demand?
+   if (step == 4) {
+      // this is a fairly straightforward implementation and not super-optimized.
+      uint8x8_t signflip = vdup_n_u8(0x80);
+      int16x8_t cr_const0 = vdupq_n_s16(   (short) ( 1.40200f*4096.0f+0.5f));
+      int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f));
+      int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f));
+      int16x8_t cb_const1 = vdupq_n_s16(   (short) ( 1.77200f*4096.0f+0.5f));
+
+      for (; i+7 < count; i += 8) {
+         // load
+         uint8x8_t y_bytes  = vld1_u8(y + i);
+         uint8x8_t cr_bytes = vld1_u8(pcr + i);
+         uint8x8_t cb_bytes = vld1_u8(pcb + i);
+         int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip));
+         int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip));
+
+         // expand to s16
+         int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4));
+         int16x8_t crw = vshll_n_s8(cr_biased, 7);
+         int16x8_t cbw = vshll_n_s8(cb_biased, 7);
+
+         // color transform
+         int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0);
+         int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0);
+         int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1);
+         int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1);
+         int16x8_t rws = vaddq_s16(yws, cr0);
+         int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1);
+         int16x8_t bws = vaddq_s16(yws, cb1);
+
+         // undo scaling, round, convert to byte
+         uint8x8x4_t o;
+         o.val[0] = vqrshrun_n_s16(rws, 4);
+         o.val[1] = vqrshrun_n_s16(gws, 4);
+         o.val[2] = vqrshrun_n_s16(bws, 4);
+         o.val[3] = vdup_n_u8(255);
+
+         // store, interleaving r/g/b/a
+         vst4_u8(out, o);
+         out += 8*4;
+      }
+   }
+#endif
+
+   for (; i < count; ++i) {
+      int y_fixed = (y[i] << 20) + (1<<19); // rounding
+      int r,g,b;
+      int cr = pcr[i] - 128;
+      int cb = pcb[i] - 128;
+      r = y_fixed + cr* float2fixed(1.40200f);
+      g = y_fixed + cr*-float2fixed(0.71414f) + ((cb*-float2fixed(0.34414f)) & 0xffff0000);
+      b = y_fixed                             +   cb* float2fixed(1.77200f);
+      r >>= 20;
+      g >>= 20;
+      b >>= 20;
+      if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
+      if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
+      if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
+      out[0] = (stbi_uc)r;
+      out[1] = (stbi_uc)g;
+      out[2] = (stbi_uc)b;
+      out[3] = 255;
+      out += step;
+   }
+}
+#endif
+
+// set up the kernels
+static void stbi__setup_jpeg(stbi__jpeg *j)
+{
+   j->idct_block_kernel = stbi__idct_block;
+   j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row;
+   j->resample_row_hv_2_kernel = stbi__resample_row_hv_2;
+
+#ifdef STBI_SSE2
+   if (stbi__sse2_available()) {
+      j->idct_block_kernel = stbi__idct_simd;
+      #ifndef STBI_JPEG_OLD
+      j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;
+      #endif
+      j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;
+   }
+#endif
+
+#ifdef STBI_NEON
+   j->idct_block_kernel = stbi__idct_simd;
+   #ifndef STBI_JPEG_OLD
+   j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;
+   #endif
+   j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;
+#endif
+}
+
+// clean up the temporary component buffers
+static void stbi__cleanup_jpeg(stbi__jpeg *j)
+{
+   stbi__free_jpeg_components(j, j->s->img_n, 0);
+}
+
+typedef struct
+{
+   resample_row_func resample;
+   stbi_uc *line0,*line1;
+   int hs,vs;   // expansion factor in each axis
+   int w_lores; // horizontal pixels pre-expansion
+   int ystep;   // how far through vertical expansion we are
+   int ypos;    // which pre-expansion row we're on
+} stbi__resample;
+
+static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp)
+{
+   int n, decode_n;
+   z->s->img_n = 0; // make stbi__cleanup_jpeg safe
+
+   // validate req_comp
+   if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
+
+   // load a jpeg image from whichever source, but leave in YCbCr format
+   if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; }
+
+   // determine actual number of components to generate
+   n = req_comp ? req_comp : z->s->img_n;
+
+   if (z->s->img_n == 3 && n < 3)
+      decode_n = 1;
+   else
+      decode_n = z->s->img_n;
+
+   // resample and color-convert
+   {
+      int k;
+      unsigned int i,j;
+      stbi_uc *output;
+      stbi_uc *coutput[4];
+
+      stbi__resample res_comp[4];
+
+      for (k=0; k < decode_n; ++k) {
+         stbi__resample *r = &res_comp[k];
+
+         // allocate line buffer big enough for upsampling off the edges
+         // with upsample factor of 4
+         z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3);
+         if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
+
+         r->hs      = z->img_h_max / z->img_comp[k].h;
+         r->vs      = z->img_v_max / z->img_comp[k].v;
+         r->ystep   = r->vs >> 1;
+         r->w_lores = (z->s->img_x + r->hs-1) / r->hs;
+         r->ypos    = 0;
+         r->line0   = r->line1 = z->img_comp[k].data;
+
+         if      (r->hs == 1 && r->vs == 1) r->resample = resample_row_1;
+         else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2;
+         else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2;
+         else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel;
+         else                               r->resample = stbi__resample_row_generic;
+      }
+
+      // can't error after this so, this is safe
+      output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1);
+      if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
+
+      // now go ahead and resample
+      for (j=0; j < z->s->img_y; ++j) {
+         stbi_uc *out = output + n * z->s->img_x * j;
+         for (k=0; k < decode_n; ++k) {
+            stbi__resample *r = &res_comp[k];
+            int y_bot = r->ystep >= (r->vs >> 1);
+            coutput[k] = r->resample(z->img_comp[k].linebuf,
+                                     y_bot ? r->line1 : r->line0,
+                                     y_bot ? r->line0 : r->line1,
+                                     r->w_lores, r->hs);
+            if (++r->ystep >= r->vs) {
+               r->ystep = 0;
+               r->line0 = r->line1;
+               if (++r->ypos < z->img_comp[k].y)
+                  r->line1 += z->img_comp[k].w2;
+            }
+         }
+         if (n >= 3) {
+            stbi_uc *y = coutput[0];
+            if (z->s->img_n == 3) {
+               if (z->rgb == 3) {
+                  for (i=0; i < z->s->img_x; ++i) {
+                     out[0] = y[i];
+                     out[1] = coutput[1][i];
+                     out[2] = coutput[2][i];
+                     out[3] = 255;
+                     out += n;
+                  }
+               } else {
+                  z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);
+               }
+            } else
+               for (i=0; i < z->s->img_x; ++i) {
+                  out[0] = out[1] = out[2] = y[i];
+                  out[3] = 255; // not used if n==3
+                  out += n;
+               }
+         } else {
+            stbi_uc *y = coutput[0];
+            if (n == 1)
+               for (i=0; i < z->s->img_x; ++i) out[i] = y[i];
+            else
+               for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255;
+         }
+      }
+      stbi__cleanup_jpeg(z);
+      *out_x = z->s->img_x;
+      *out_y = z->s->img_y;
+      if (comp) *comp  = z->s->img_n; // report original components, not output
+      return output;
+   }
+}
+
+static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   unsigned char* result;
+   stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg));
+   j->s = s;
+   stbi__setup_jpeg(j);
+   result = load_jpeg_image(j, x,y,comp,req_comp);
+   STBI_FREE(j);
+   return result;
+}
+
+static int stbi__jpeg_test(stbi__context *s)
+{
+   int r;
+   stbi__jpeg j;
+   j.s = s;
+   stbi__setup_jpeg(&j);
+   r = stbi__decode_jpeg_header(&j, STBI__SCAN_type);
+   stbi__rewind(s);
+   return r;
+}
+
+static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
+{
+   if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) {
+      stbi__rewind( j->s );
+      return 0;
+   }
+   if (x) *x = j->s->img_x;
+   if (y) *y = j->s->img_y;
+   if (comp) *comp = j->s->img_n;
+   return 1;
+}
+
+static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int result;
+   stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg)));
+   j->s = s;
+   result = stbi__jpeg_info_raw(j, x, y, comp);
+   STBI_FREE(j);
+   return result;
+}
+#endif
+
+// public domain zlib decode    v0.2  Sean Barrett 2006-11-18
+//    simple implementation
+//      - all input must be provided in an upfront buffer
+//      - all output is written to a single output buffer (can malloc/realloc)
+//    performance
+//      - fast huffman
+
+#ifndef STBI_NO_ZLIB
+
+// fast-way is faster to check than jpeg huffman, but slow way is slower
+#define STBI__ZFAST_BITS  9 // accelerate all cases in default tables
+#define STBI__ZFAST_MASK  ((1 << STBI__ZFAST_BITS) - 1)
+
+// zlib-style huffman encoding
+// (jpegs packs from left, zlib from right, so can't share code)
+typedef struct
+{
+   stbi__uint16 fast[1 << STBI__ZFAST_BITS];
+   stbi__uint16 firstcode[16];
+   int maxcode[17];
+   stbi__uint16 firstsymbol[16];
+   stbi_uc  size[288];
+   stbi__uint16 value[288];
+} stbi__zhuffman;
+
+stbi_inline static int stbi__bitreverse16(int n)
+{
+  n = ((n & 0xAAAA) >>  1) | ((n & 0x5555) << 1);
+  n = ((n & 0xCCCC) >>  2) | ((n & 0x3333) << 2);
+  n = ((n & 0xF0F0) >>  4) | ((n & 0x0F0F) << 4);
+  n = ((n & 0xFF00) >>  8) | ((n & 0x00FF) << 8);
+  return n;
+}
+
+stbi_inline static int stbi__bit_reverse(int v, int bits)
+{
+   STBI_ASSERT(bits <= 16);
+   // to bit reverse n bits, reverse 16 and shift
+   // e.g. 11 bits, bit reverse and shift away 5
+   return stbi__bitreverse16(v) >> (16-bits);
+}
+
+static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num)
+{
+   int i,k=0;
+   int code, next_code[16], sizes[17];
+
+   // DEFLATE spec for generating codes
+   memset(sizes, 0, sizeof(sizes));
+   memset(z->fast, 0, sizeof(z->fast));
+   for (i=0; i < num; ++i)
+      ++sizes[sizelist[i]];
+   sizes[0] = 0;
+   for (i=1; i < 16; ++i)
+      if (sizes[i] > (1 << i))
+         return stbi__err("bad sizes", "Corrupt PNG");
+   code = 0;
+   for (i=1; i < 16; ++i) {
+      next_code[i] = code;
+      z->firstcode[i] = (stbi__uint16) code;
+      z->firstsymbol[i] = (stbi__uint16) k;
+      code = (code + sizes[i]);
+      if (sizes[i])
+         if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG");
+      z->maxcode[i] = code << (16-i); // preshift for inner loop
+      code <<= 1;
+      k += sizes[i];
+   }
+   z->maxcode[16] = 0x10000; // sentinel
+   for (i=0; i < num; ++i) {
+      int s = sizelist[i];
+      if (s) {
+         int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s];
+         stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i);
+         z->size [c] = (stbi_uc     ) s;
+         z->value[c] = (stbi__uint16) i;
+         if (s <= STBI__ZFAST_BITS) {
+            int j = stbi__bit_reverse(next_code[s],s);
+            while (j < (1 << STBI__ZFAST_BITS)) {
+               z->fast[j] = fastv;
+               j += (1 << s);
+            }
+         }
+         ++next_code[s];
+      }
+   }
+   return 1;
+}
+
+// zlib-from-memory implementation for PNG reading
+//    because PNG allows splitting the zlib stream arbitrarily,
+//    and it's annoying structurally to have PNG call ZLIB call PNG,
+//    we require PNG read all the IDATs and combine them into a single
+//    memory buffer
+
+typedef struct
+{
+   stbi_uc *zbuffer, *zbuffer_end;
+   int num_bits;
+   stbi__uint32 code_buffer;
+
+   char *zout;
+   char *zout_start;
+   char *zout_end;
+   int   z_expandable;
+
+   stbi__zhuffman z_length, z_distance;
+} stbi__zbuf;
+
+stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)
+{
+   if (z->zbuffer >= z->zbuffer_end) return 0;
+   return *z->zbuffer++;
+}
+
+static void stbi__fill_bits(stbi__zbuf *z)
+{
+   do {
+      STBI_ASSERT(z->code_buffer < (1U << z->num_bits));
+      z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits;
+      z->num_bits += 8;
+   } while (z->num_bits <= 24);
+}
+
+stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n)
+{
+   unsigned int k;
+   if (z->num_bits < n) stbi__fill_bits(z);
+   k = z->code_buffer & ((1 << n) - 1);
+   z->code_buffer >>= n;
+   z->num_bits -= n;
+   return k;
+}
+
+static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z)
+{
+   int b,s,k;
+   // not resolved by fast table, so compute it the slow way
+   // use jpeg approach, which requires MSbits at top
+   k = stbi__bit_reverse(a->code_buffer, 16);
+   for (s=STBI__ZFAST_BITS+1; ; ++s)
+      if (k < z->maxcode[s])
+         break;
+   if (s == 16) return -1; // invalid code!
+   // code size is s, so:
+   b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s];
+   STBI_ASSERT(z->size[b] == s);
+   a->code_buffer >>= s;
+   a->num_bits -= s;
+   return z->value[b];
+}
+
+stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z)
+{
+   int b,s;
+   if (a->num_bits < 16) stbi__fill_bits(a);
+   b = z->fast[a->code_buffer & STBI__ZFAST_MASK];
+   if (b) {
+      s = b >> 9;
+      a->code_buffer >>= s;
+      a->num_bits -= s;
+      return b & 511;
+   }
+   return stbi__zhuffman_decode_slowpath(a, z);
+}
+
+static int stbi__zexpand(stbi__zbuf *z, char *zout, int n)  // need to make room for n bytes
+{
+   char *q;
+   int cur, limit, old_limit;
+   z->zout = zout;
+   if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG");
+   cur   = (int) (z->zout     - z->zout_start);
+   limit = old_limit = (int) (z->zout_end - z->zout_start);
+   while (cur + n > limit)
+      limit *= 2;
+   q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit);
+   STBI_NOTUSED(old_limit);
+   if (q == NULL) return stbi__err("outofmem", "Out of memory");
+   z->zout_start = q;
+   z->zout       = q + cur;
+   z->zout_end   = q + limit;
+   return 1;
+}
+
+static int stbi__zlength_base[31] = {
+   3,4,5,6,7,8,9,10,11,13,
+   15,17,19,23,27,31,35,43,51,59,
+   67,83,99,115,131,163,195,227,258,0,0 };
+
+static int stbi__zlength_extra[31]=
+{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 };
+
+static int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,
+257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0};
+
+static int stbi__zdist_extra[32] =
+{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+
+static int stbi__parse_huffman_block(stbi__zbuf *a)
+{
+   char *zout = a->zout;
+   for(;;) {
+      int z = stbi__zhuffman_decode(a, &a->z_length);
+      if (z < 256) {
+         if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes
+         if (zout >= a->zout_end) {
+            if (!stbi__zexpand(a, zout, 1)) return 0;
+            zout = a->zout;
+         }
+         *zout++ = (char) z;
+      } else {
+         stbi_uc *p;
+         int len,dist;
+         if (z == 256) {
+            a->zout = zout;
+            return 1;
+         }
+         z -= 257;
+         len = stbi__zlength_base[z];
+         if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]);
+         z = stbi__zhuffman_decode(a, &a->z_distance);
+         if (z < 0) return stbi__err("bad huffman code","Corrupt PNG");
+         dist = stbi__zdist_base[z];
+         if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]);
+         if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG");
+         if (zout + len > a->zout_end) {
+            if (!stbi__zexpand(a, zout, len)) return 0;
+            zout = a->zout;
+         }
+         p = (stbi_uc *) (zout - dist);
+         if (dist == 1) { // run of one byte; common in images.
+            stbi_uc v = *p;
+            if (len) { do *zout++ = v; while (--len); }
+         } else {
+            if (len) { do *zout++ = *p++; while (--len); }
+         }
+      }
+   }
+}
+
+static int stbi__compute_huffman_codes(stbi__zbuf *a)
+{
+   static stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 };
+   stbi__zhuffman z_codelength;
+   stbi_uc lencodes[286+32+137];//padding for maximum single op
+   stbi_uc codelength_sizes[19];
+   int i,n;
+
+   int hlit  = stbi__zreceive(a,5) + 257;
+   int hdist = stbi__zreceive(a,5) + 1;
+   int hclen = stbi__zreceive(a,4) + 4;
+   int ntot  = hlit + hdist;
+
+   memset(codelength_sizes, 0, sizeof(codelength_sizes));
+   for (i=0; i < hclen; ++i) {
+      int s = stbi__zreceive(a,3);
+      codelength_sizes[length_dezigzag[i]] = (stbi_uc) s;
+   }
+   if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0;
+
+   n = 0;
+   while (n < ntot) {
+      int c = stbi__zhuffman_decode(a, &z_codelength);
+      if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG");
+      if (c < 16)
+         lencodes[n++] = (stbi_uc) c;
+      else {
+         stbi_uc fill = 0;
+         if (c == 16) {
+            c = stbi__zreceive(a,2)+3;
+            if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG");
+            fill = lencodes[n-1];
+         } else if (c == 17)
+            c = stbi__zreceive(a,3)+3;
+         else {
+            STBI_ASSERT(c == 18);
+            c = stbi__zreceive(a,7)+11;
+         }
+         if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG");
+         memset(lencodes+n, fill, c);
+         n += c;
+      }
+   }
+   if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG");
+   if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0;
+   if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0;
+   return 1;
+}
+
+static int stbi__parse_uncompressed_block(stbi__zbuf *a)
+{
+   stbi_uc header[4];
+   int len,nlen,k;
+   if (a->num_bits & 7)
+      stbi__zreceive(a, a->num_bits & 7); // discard
+   // drain the bit-packed data into header
+   k = 0;
+   while (a->num_bits > 0) {
+      header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check
+      a->code_buffer >>= 8;
+      a->num_bits -= 8;
+   }
+   STBI_ASSERT(a->num_bits == 0);
+   // now fill header the normal way
+   while (k < 4)
+      header[k++] = stbi__zget8(a);
+   len  = header[1] * 256 + header[0];
+   nlen = header[3] * 256 + header[2];
+   if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG");
+   if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG");
+   if (a->zout + len > a->zout_end)
+      if (!stbi__zexpand(a, a->zout, len)) return 0;
+   memcpy(a->zout, a->zbuffer, len);
+   a->zbuffer += len;
+   a->zout += len;
+   return 1;
+}
+
+static int stbi__parse_zlib_header(stbi__zbuf *a)
+{
+   int cmf   = stbi__zget8(a);
+   int cm    = cmf & 15;
+   /* int cinfo = cmf >> 4; */
+   int flg   = stbi__zget8(a);
+   if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec
+   if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png
+   if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png
+   // window = 1 << (8 + cinfo)... but who cares, we fully buffer output
+   return 1;
+}
+
+// @TODO: should statically initialize these for optimal thread safety
+static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32];
+static void stbi__init_zdefaults(void)
+{
+   int i;   // use <= to match clearly with spec
+   for (i=0; i <= 143; ++i)     stbi__zdefault_length[i]   = 8;
+   for (   ; i <= 255; ++i)     stbi__zdefault_length[i]   = 9;
+   for (   ; i <= 279; ++i)     stbi__zdefault_length[i]   = 7;
+   for (   ; i <= 287; ++i)     stbi__zdefault_length[i]   = 8;
+
+   for (i=0; i <=  31; ++i)     stbi__zdefault_distance[i] = 5;
+}
+
+static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
+{
+   int final, type;
+   if (parse_header)
+      if (!stbi__parse_zlib_header(a)) return 0;
+   a->num_bits = 0;
+   a->code_buffer = 0;
+   do {
+      final = stbi__zreceive(a,1);
+      type = stbi__zreceive(a,2);
+      if (type == 0) {
+         if (!stbi__parse_uncompressed_block(a)) return 0;
+      } else if (type == 3) {
+         return 0;
+      } else {
+         if (type == 1) {
+            // use fixed code lengths
+            if (!stbi__zdefault_distance[31]) stbi__init_zdefaults();
+            if (!stbi__zbuild_huffman(&a->z_length  , stbi__zdefault_length  , 288)) return 0;
+            if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance,  32)) return 0;
+         } else {
+            if (!stbi__compute_huffman_codes(a)) return 0;
+         }
+         if (!stbi__parse_huffman_block(a)) return 0;
+      }
+   } while (!final);
+   return 1;
+}
+
+static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header)
+{
+   a->zout_start = obuf;
+   a->zout       = obuf;
+   a->zout_end   = obuf + olen;
+   a->z_expandable = exp;
+
+   return stbi__parse_zlib(a, parse_header);
+}
+
+STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen)
+{
+   stbi__zbuf a;
+   char *p = (char *) stbi__malloc(initial_size);
+   if (p == NULL) return NULL;
+   a.zbuffer = (stbi_uc *) buffer;
+   a.zbuffer_end = (stbi_uc *) buffer + len;
+   if (stbi__do_zlib(&a, p, initial_size, 1, 1)) {
+      if (outlen) *outlen = (int) (a.zout - a.zout_start);
+      return a.zout_start;
+   } else {
+      STBI_FREE(a.zout_start);
+      return NULL;
+   }
+}
+
+STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen)
+{
+   return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen);
+}
+
+STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header)
+{
+   stbi__zbuf a;
+   char *p = (char *) stbi__malloc(initial_size);
+   if (p == NULL) return NULL;
+   a.zbuffer = (stbi_uc *) buffer;
+   a.zbuffer_end = (stbi_uc *) buffer + len;
+   if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) {
+      if (outlen) *outlen = (int) (a.zout - a.zout_start);
+      return a.zout_start;
+   } else {
+      STBI_FREE(a.zout_start);
+      return NULL;
+   }
+}
+
+STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen)
+{
+   stbi__zbuf a;
+   a.zbuffer = (stbi_uc *) ibuffer;
+   a.zbuffer_end = (stbi_uc *) ibuffer + ilen;
+   if (stbi__do_zlib(&a, obuffer, olen, 0, 1))
+      return (int) (a.zout - a.zout_start);
+   else
+      return -1;
+}
+
+STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen)
+{
+   stbi__zbuf a;
+   char *p = (char *) stbi__malloc(16384);
+   if (p == NULL) return NULL;
+   a.zbuffer = (stbi_uc *) buffer;
+   a.zbuffer_end = (stbi_uc *) buffer+len;
+   if (stbi__do_zlib(&a, p, 16384, 1, 0)) {
+      if (outlen) *outlen = (int) (a.zout - a.zout_start);
+      return a.zout_start;
+   } else {
+      STBI_FREE(a.zout_start);
+      return NULL;
+   }
+}
+
+STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen)
+{
+   stbi__zbuf a;
+   a.zbuffer = (stbi_uc *) ibuffer;
+   a.zbuffer_end = (stbi_uc *) ibuffer + ilen;
+   if (stbi__do_zlib(&a, obuffer, olen, 0, 0))
+      return (int) (a.zout - a.zout_start);
+   else
+      return -1;
+}
+#endif
+
+// public domain "baseline" PNG decoder   v0.10  Sean Barrett 2006-11-18
+//    simple implementation
+//      - only 8-bit samples
+//      - no CRC checking
+//      - allocates lots of intermediate memory
+//        - avoids problem of streaming data between subsystems
+//        - avoids explicit window management
+//    performance
+//      - uses stb_zlib, a PD zlib implementation with fast huffman decoding
+
+#ifndef STBI_NO_PNG
+typedef struct
+{
+   stbi__uint32 length;
+   stbi__uint32 type;
+} stbi__pngchunk;
+
+static stbi__pngchunk stbi__get_chunk_header(stbi__context *s)
+{
+   stbi__pngchunk c;
+   c.length = stbi__get32be(s);
+   c.type   = stbi__get32be(s);
+   return c;
+}
+
+static int stbi__check_png_header(stbi__context *s)
+{
+   static stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 };
+   int i;
+   for (i=0; i < 8; ++i)
+      if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG");
+   return 1;
+}
+
+typedef struct
+{
+   stbi__context *s;
+   stbi_uc *idata, *expanded, *out;
+   int depth;
+} stbi__png;
+
+
+enum {
+   STBI__F_none=0,
+   STBI__F_sub=1,
+   STBI__F_up=2,
+   STBI__F_avg=3,
+   STBI__F_paeth=4,
+   // synthetic filters used for first scanline to avoid needing a dummy row of 0s
+   STBI__F_avg_first,
+   STBI__F_paeth_first
+};
+
+static stbi_uc first_row_filter[5] =
+{
+   STBI__F_none,
+   STBI__F_sub,
+   STBI__F_none,
+   STBI__F_avg_first,
+   STBI__F_paeth_first
+};
+
+static int stbi__paeth(int a, int b, int c)
+{
+   int p = a + b - c;
+   int pa = abs(p-a);
+   int pb = abs(p-b);
+   int pc = abs(p-c);
+   if (pa <= pb && pa <= pc) return a;
+   if (pb <= pc) return b;
+   return c;
+}
+
+static stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 };
+
+// create the png data from post-deflated data
+static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color)
+{
+   int bytes = (depth == 16? 2 : 1);
+   stbi__context *s = a->s;
+   stbi__uint32 i,j,stride = x*out_n*bytes;
+   stbi__uint32 img_len, img_width_bytes;
+   int k;
+   int img_n = s->img_n; // copy it into a local for later
+
+   int output_bytes = out_n*bytes;
+   int filter_bytes = img_n*bytes;
+   int width = x;
+
+   STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1);
+   a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into
+   if (!a->out) return stbi__err("outofmem", "Out of memory");
+
+   img_width_bytes = (((img_n * x * depth) + 7) >> 3);
+   img_len = (img_width_bytes + 1) * y;
+   if (s->img_x == x && s->img_y == y) {
+      if (raw_len != img_len) return stbi__err("not enough pixels","Corrupt PNG");
+   } else { // interlaced:
+      if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG");
+   }
+
+   for (j=0; j < y; ++j) {
+      stbi_uc *cur = a->out + stride*j;
+      stbi_uc *prior = cur - stride;
+      int filter = *raw++;
+
+      if (filter > 4)
+         return stbi__err("invalid filter","Corrupt PNG");
+
+      if (depth < 8) {
+         STBI_ASSERT(img_width_bytes <= x);
+         cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place
+         filter_bytes = 1;
+         width = img_width_bytes;
+      }
+
+      // if first row, use special filter that doesn't sample previous row
+      if (j == 0) filter = first_row_filter[filter];
+
+      // handle first byte explicitly
+      for (k=0; k < filter_bytes; ++k) {
+         switch (filter) {
+            case STBI__F_none       : cur[k] = raw[k]; break;
+            case STBI__F_sub        : cur[k] = raw[k]; break;
+            case STBI__F_up         : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
+            case STBI__F_avg        : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break;
+            case STBI__F_paeth      : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break;
+            case STBI__F_avg_first  : cur[k] = raw[k]; break;
+            case STBI__F_paeth_first: cur[k] = raw[k]; break;
+         }
+      }
+
+      if (depth == 8) {
+         if (img_n != out_n)
+            cur[img_n] = 255; // first pixel
+         raw += img_n;
+         cur += out_n;
+         prior += out_n;
+      } else if (depth == 16) {
+         if (img_n != out_n) {
+            cur[filter_bytes]   = 255; // first pixel top byte
+            cur[filter_bytes+1] = 255; // first pixel bottom byte
+         }
+         raw += filter_bytes;
+         cur += output_bytes;
+         prior += output_bytes;
+      } else {
+         raw += 1;
+         cur += 1;
+         prior += 1;
+      }
+
+      // this is a little gross, so that we don't switch per-pixel or per-component
+      if (depth < 8 || img_n == out_n) {
+         int nk = (width - 1)*filter_bytes;
+         #define STBI__CASE(f) \
+             case f:     \
+                for (k=0; k < nk; ++k)
+         switch (filter) {
+            // "none" filter turns into a memcpy here; make that explicit.
+            case STBI__F_none:         memcpy(cur, raw, nk); break;
+            STBI__CASE(STBI__F_sub)          { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break;
+            STBI__CASE(STBI__F_up)           { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break;
+            STBI__CASE(STBI__F_avg)          { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break;
+            STBI__CASE(STBI__F_paeth)        { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break;
+            STBI__CASE(STBI__F_avg_first)    { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break;
+            STBI__CASE(STBI__F_paeth_first)  { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break;
+         }
+         #undef STBI__CASE
+         raw += nk;
+      } else {
+         STBI_ASSERT(img_n+1 == out_n);
+         #define STBI__CASE(f) \
+             case f:     \
+                for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \
+                   for (k=0; k < filter_bytes; ++k)
+         switch (filter) {
+            STBI__CASE(STBI__F_none)         { cur[k] = raw[k]; } break;
+            STBI__CASE(STBI__F_sub)          { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break;
+            STBI__CASE(STBI__F_up)           { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break;
+            STBI__CASE(STBI__F_avg)          { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break;
+            STBI__CASE(STBI__F_paeth)        { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break;
+            STBI__CASE(STBI__F_avg_first)    { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break;
+            STBI__CASE(STBI__F_paeth_first)  { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break;
+         }
+         #undef STBI__CASE
+
+         // the loop above sets the high byte of the pixels' alpha, but for
+         // 16 bit png files we also need the low byte set. we'll do that here.
+         if (depth == 16) {
+            cur = a->out + stride*j; // start at the beginning of the row again
+            for (i=0; i < x; ++i,cur+=output_bytes) {
+               cur[filter_bytes+1] = 255;
+            }
+         }
+      }
+   }
+
+   // we make a separate pass to expand bits to pixels; for performance,
+   // this could run two scanlines behind the above code, so it won't
+   // intefere with filtering but will still be in the cache.
+   if (depth < 8) {
+      for (j=0; j < y; ++j) {
+         stbi_uc *cur = a->out + stride*j;
+         stbi_uc *in  = a->out + stride*j + x*out_n - img_width_bytes;
+         // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit
+         // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop
+         stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range
+
+         // note that the final byte might overshoot and write more data than desired.
+         // we can allocate enough data that this never writes out of memory, but it
+         // could also overwrite the next scanline. can it overwrite non-empty data
+         // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel.
+         // so we need to explicitly clamp the final ones
+
+         if (depth == 4) {
+            for (k=x*img_n; k >= 2; k-=2, ++in) {
+               *cur++ = scale * ((*in >> 4)       );
+               *cur++ = scale * ((*in     ) & 0x0f);
+            }
+            if (k > 0) *cur++ = scale * ((*in >> 4)       );
+         } else if (depth == 2) {
+            for (k=x*img_n; k >= 4; k-=4, ++in) {
+               *cur++ = scale * ((*in >> 6)       );
+               *cur++ = scale * ((*in >> 4) & 0x03);
+               *cur++ = scale * ((*in >> 2) & 0x03);
+               *cur++ = scale * ((*in     ) & 0x03);
+            }
+            if (k > 0) *cur++ = scale * ((*in >> 6)       );
+            if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03);
+            if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03);
+         } else if (depth == 1) {
+            for (k=x*img_n; k >= 8; k-=8, ++in) {
+               *cur++ = scale * ((*in >> 7)       );
+               *cur++ = scale * ((*in >> 6) & 0x01);
+               *cur++ = scale * ((*in >> 5) & 0x01);
+               *cur++ = scale * ((*in >> 4) & 0x01);
+               *cur++ = scale * ((*in >> 3) & 0x01);
+               *cur++ = scale * ((*in >> 2) & 0x01);
+               *cur++ = scale * ((*in >> 1) & 0x01);
+               *cur++ = scale * ((*in     ) & 0x01);
+            }
+            if (k > 0) *cur++ = scale * ((*in >> 7)       );
+            if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01);
+            if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01);
+            if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01);
+            if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01);
+            if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01);
+            if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01);
+         }
+         if (img_n != out_n) {
+            int q;
+            // insert alpha = 255
+            cur = a->out + stride*j;
+            if (img_n == 1) {
+               for (q=x-1; q >= 0; --q) {
+                  cur[q*2+1] = 255;
+                  cur[q*2+0] = cur[q];
+               }
+            } else {
+               STBI_ASSERT(img_n == 3);
+               for (q=x-1; q >= 0; --q) {
+                  cur[q*4+3] = 255;
+                  cur[q*4+2] = cur[q*3+2];
+                  cur[q*4+1] = cur[q*3+1];
+                  cur[q*4+0] = cur[q*3+0];
+               }
+            }
+         }
+      }
+   } else if (depth == 16) {
+      // force the image data from big-endian to platform-native.
+      // this is done in a separate pass due to the decoding relying
+      // on the data being untouched, but could probably be done
+      // per-line during decode if care is taken.
+      stbi_uc *cur = a->out;
+      stbi__uint16 *cur16 = (stbi__uint16*)cur;
+
+      for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) {
+         *cur16 = (cur[0] << 8) | cur[1];
+      }
+   }
+
+   return 1;
+}
+
+static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced)
+{
+   int bytes = (depth == 16 ? 2 : 1);
+   int out_bytes = out_n * bytes;
+   stbi_uc *final;
+   int p;
+   if (!interlaced)
+      return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color);
+
+   // de-interlacing
+   final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0);
+   for (p=0; p < 7; ++p) {
+      int xorig[] = { 0,4,0,2,0,1,0 };
+      int yorig[] = { 0,0,4,0,2,0,1 };
+      int xspc[]  = { 8,8,4,4,2,2,1 };
+      int yspc[]  = { 8,8,8,4,4,2,2 };
+      int i,j,x,y;
+      // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1
+      x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p];
+      y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p];
+      if (x && y) {
+         stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y;
+         if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) {
+            STBI_FREE(final);
+            return 0;
+         }
+         for (j=0; j < y; ++j) {
+            for (i=0; i < x; ++i) {
+               int out_y = j*yspc[p]+yorig[p];
+               int out_x = i*xspc[p]+xorig[p];
+               memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes,
+                      a->out + (j*x+i)*out_bytes, out_bytes);
+            }
+         }
+         STBI_FREE(a->out);
+         image_data += img_len;
+         image_data_len -= img_len;
+      }
+   }
+   a->out = final;
+
+   return 1;
+}
+
+static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n)
+{
+   stbi__context *s = z->s;
+   stbi__uint32 i, pixel_count = s->img_x * s->img_y;
+   stbi_uc *p = z->out;
+
+   // compute color-based transparency, assuming we've
+   // already got 255 as the alpha value in the output
+   STBI_ASSERT(out_n == 2 || out_n == 4);
+
+   if (out_n == 2) {
+      for (i=0; i < pixel_count; ++i) {
+         p[1] = (p[0] == tc[0] ? 0 : 255);
+         p += 2;
+      }
+   } else {
+      for (i=0; i < pixel_count; ++i) {
+         if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2])
+            p[3] = 0;
+         p += 4;
+      }
+   }
+   return 1;
+}
+
+static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n)
+{
+   stbi__context *s = z->s;
+   stbi__uint32 i, pixel_count = s->img_x * s->img_y;
+   stbi__uint16 *p = (stbi__uint16*) z->out;
+
+   // compute color-based transparency, assuming we've
+   // already got 65535 as the alpha value in the output
+   STBI_ASSERT(out_n == 2 || out_n == 4);
+
+   if (out_n == 2) {
+      for (i = 0; i < pixel_count; ++i) {
+         p[1] = (p[0] == tc[0] ? 0 : 65535);
+         p += 2;
+      }
+   } else {
+      for (i = 0; i < pixel_count; ++i) {
+         if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2])
+            p[3] = 0;
+         p += 4;
+      }
+   }
+   return 1;
+}
+
+static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n)
+{
+   stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y;
+   stbi_uc *p, *temp_out, *orig = a->out;
+
+   p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0);
+   if (p == NULL) return stbi__err("outofmem", "Out of memory");
+
+   // between here and free(out) below, exitting would leak
+   temp_out = p;
+
+   if (pal_img_n == 3) {
+      for (i=0; i < pixel_count; ++i) {
+         int n = orig[i]*4;
+         p[0] = palette[n  ];
+         p[1] = palette[n+1];
+         p[2] = palette[n+2];
+         p += 3;
+      }
+   } else {
+      for (i=0; i < pixel_count; ++i) {
+         int n = orig[i]*4;
+         p[0] = palette[n  ];
+         p[1] = palette[n+1];
+         p[2] = palette[n+2];
+         p[3] = palette[n+3];
+         p += 4;
+      }
+   }
+   STBI_FREE(a->out);
+   a->out = temp_out;
+
+   STBI_NOTUSED(len);
+
+   return 1;
+}
+
+static int stbi__unpremultiply_on_load = 0;
+static int stbi__de_iphone_flag = 0;
+
+STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply)
+{
+   stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply;
+}
+
+STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert)
+{
+   stbi__de_iphone_flag = flag_true_if_should_convert;
+}
+
+static void stbi__de_iphone(stbi__png *z)
+{
+   stbi__context *s = z->s;
+   stbi__uint32 i, pixel_count = s->img_x * s->img_y;
+   stbi_uc *p = z->out;
+
+   if (s->img_out_n == 3) {  // convert bgr to rgb
+      for (i=0; i < pixel_count; ++i) {
+         stbi_uc t = p[0];
+         p[0] = p[2];
+         p[2] = t;
+         p += 3;
+      }
+   } else {
+      STBI_ASSERT(s->img_out_n == 4);
+      if (stbi__unpremultiply_on_load) {
+         // convert bgr to rgb and unpremultiply
+         for (i=0; i < pixel_count; ++i) {
+            stbi_uc a = p[3];
+            stbi_uc t = p[0];
+            if (a) {
+               p[0] = p[2] * 255 / a;
+               p[1] = p[1] * 255 / a;
+               p[2] =  t   * 255 / a;
+            } else {
+               p[0] = p[2];
+               p[2] = t;
+            }
+            p += 4;
+         }
+      } else {
+         // convert bgr to rgb
+         for (i=0; i < pixel_count; ++i) {
+            stbi_uc t = p[0];
+            p[0] = p[2];
+            p[2] = t;
+            p += 4;
+         }
+      }
+   }
+}
+
+#define STBI__PNG_TYPE(a,b,c,d)  (((a) << 24) + ((b) << 16) + ((c) << 8) + (d))
+
+static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
+{
+   stbi_uc palette[1024], pal_img_n=0;
+   stbi_uc has_trans=0, tc[3];
+   stbi__uint16 tc16[3];
+   stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0;
+   int first=1,k,interlace=0, color=0, is_iphone=0;
+   stbi__context *s = z->s;
+
+   z->expanded = NULL;
+   z->idata = NULL;
+   z->out = NULL;
+
+   if (!stbi__check_png_header(s)) return 0;
+
+   if (scan == STBI__SCAN_type) return 1;
+
+   for (;;) {
+      stbi__pngchunk c = stbi__get_chunk_header(s);
+      switch (c.type) {
+         case STBI__PNG_TYPE('C','g','B','I'):
+            is_iphone = 1;
+            stbi__skip(s, c.length);
+            break;
+         case STBI__PNG_TYPE('I','H','D','R'): {
+            int comp,filter;
+            if (!first) return stbi__err("multiple IHDR","Corrupt PNG");
+            first = 0;
+            if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG");
+            s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
+            s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
+            z->depth = stbi__get8(s);  if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16)  return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only");
+            color = stbi__get8(s);  if (color > 6)         return stbi__err("bad ctype","Corrupt PNG");
+			if (color == 3 && z->depth == 16)                  return stbi__err("bad ctype","Corrupt PNG");
+            if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG");
+            comp  = stbi__get8(s);  if (comp) return stbi__err("bad comp method","Corrupt PNG");
+            filter= stbi__get8(s);  if (filter) return stbi__err("bad filter method","Corrupt PNG");
+            interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG");
+            if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG");
+            if (!pal_img_n) {
+               s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0);
+               if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode");
+               if (scan == STBI__SCAN_header) return 1;
+            } else {
+               // if paletted, then pal_n is our final components, and
+               // img_n is # components to decompress/filter.
+               s->img_n = 1;
+               if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG");
+               // if SCAN_header, have to scan to see if we have a tRNS
+            }
+            break;
+         }
+
+         case STBI__PNG_TYPE('P','L','T','E'):  {
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG");
+            pal_len = c.length / 3;
+            if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG");
+            for (i=0; i < pal_len; ++i) {
+               palette[i*4+0] = stbi__get8(s);
+               palette[i*4+1] = stbi__get8(s);
+               palette[i*4+2] = stbi__get8(s);
+               palette[i*4+3] = 255;
+            }
+            break;
+         }
+
+         case STBI__PNG_TYPE('t','R','N','S'): {
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG");
+            if (pal_img_n) {
+               if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; }
+               if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG");
+               if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG");
+               pal_img_n = 4;
+               for (i=0; i < c.length; ++i)
+                  palette[i*4+3] = stbi__get8(s);
+            } else {
+               if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG");
+               if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG");
+               has_trans = 1;
+               if (z->depth == 16) {
+                  for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is
+               } else {
+                  for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger
+               }
+            }
+            break;
+         }
+
+         case STBI__PNG_TYPE('I','D','A','T'): {
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG");
+            if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; }
+            if ((int)(ioff + c.length) < (int)ioff) return 0;
+            if (ioff + c.length > idata_limit) {
+               stbi__uint32 idata_limit_old = idata_limit;
+               stbi_uc *p;
+               if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096;
+               while (ioff + c.length > idata_limit)
+                  idata_limit *= 2;
+               STBI_NOTUSED(idata_limit_old);
+               p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory");
+               z->idata = p;
+            }
+            if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG");
+            ioff += c.length;
+            break;
+         }
+
+         case STBI__PNG_TYPE('I','E','N','D'): {
+            stbi__uint32 raw_len, bpl;
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (scan != STBI__SCAN_load) return 1;
+            if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG");
+            // initial guess for decoded data size to avoid unnecessary reallocs
+            bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component
+            raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */;
+            z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone);
+            if (z->expanded == NULL) return 0; // zlib should set error
+            STBI_FREE(z->idata); z->idata = NULL;
+            if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans)
+               s->img_out_n = s->img_n+1;
+            else
+               s->img_out_n = s->img_n;
+            if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0;
+            if (has_trans) {
+               if (z->depth == 16) {
+                  if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0;
+               } else {
+                  if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0;
+               }
+            }
+            if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2)
+               stbi__de_iphone(z);
+            if (pal_img_n) {
+               // pal_img_n == 3 or 4
+               s->img_n = pal_img_n; // record the actual colors we had
+               s->img_out_n = pal_img_n;
+               if (req_comp >= 3) s->img_out_n = req_comp;
+               if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n))
+                  return 0;
+            }
+            STBI_FREE(z->expanded); z->expanded = NULL;
+            return 1;
+         }
+
+         default:
+            // if critical, fail
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if ((c.type & (1 << 29)) == 0) {
+               #ifndef STBI_NO_FAILURE_STRINGS
+               // not threadsafe
+               static char invalid_chunk[] = "XXXX PNG chunk not known";
+               invalid_chunk[0] = STBI__BYTECAST(c.type >> 24);
+               invalid_chunk[1] = STBI__BYTECAST(c.type >> 16);
+               invalid_chunk[2] = STBI__BYTECAST(c.type >>  8);
+               invalid_chunk[3] = STBI__BYTECAST(c.type >>  0);
+               #endif
+               return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type");
+            }
+            stbi__skip(s, c.length);
+            break;
+      }
+      // end of PNG chunk, read and skip CRC
+      stbi__get32be(s);
+   }
+}
+
+static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri)
+{
+   void *result=NULL;
+   if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
+   if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) {
+      ri->bits_per_channel = p->depth;
+      result = p->out;
+      p->out = NULL;
+      if (req_comp && req_comp != p->s->img_out_n) {
+         if (ri->bits_per_channel == 8)
+            result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
+         else
+            result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
+         p->s->img_out_n = req_comp;
+         if (result == NULL) return result;
+      }
+      *x = p->s->img_x;
+      *y = p->s->img_y;
+      if (n) *n = p->s->img_n;
+   }
+   STBI_FREE(p->out);      p->out      = NULL;
+   STBI_FREE(p->expanded); p->expanded = NULL;
+   STBI_FREE(p->idata);    p->idata    = NULL;
+
+   return result;
+}
+
+static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   stbi__png p;
+   p.s = s;
+   return stbi__do_png(&p, x,y,comp,req_comp, ri);
+}
+
+static int stbi__png_test(stbi__context *s)
+{
+   int r;
+   r = stbi__check_png_header(s);
+   stbi__rewind(s);
+   return r;
+}
+
+static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
+{
+   if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) {
+      stbi__rewind( p->s );
+      return 0;
+   }
+   if (x) *x = p->s->img_x;
+   if (y) *y = p->s->img_y;
+   if (comp) *comp = p->s->img_n;
+   return 1;
+}
+
+static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   stbi__png p;
+   p.s = s;
+   return stbi__png_info_raw(&p, x, y, comp);
+}
+#endif
+
+// Microsoft/Windows BMP image
+
+#ifndef STBI_NO_BMP
+static int stbi__bmp_test_raw(stbi__context *s)
+{
+   int r;
+   int sz;
+   if (stbi__get8(s) != 'B') return 0;
+   if (stbi__get8(s) != 'M') return 0;
+   stbi__get32le(s); // discard filesize
+   stbi__get16le(s); // discard reserved
+   stbi__get16le(s); // discard reserved
+   stbi__get32le(s); // discard data offset
+   sz = stbi__get32le(s);
+   r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124);
+   return r;
+}
+
+static int stbi__bmp_test(stbi__context *s)
+{
+   int r = stbi__bmp_test_raw(s);
+   stbi__rewind(s);
+   return r;
+}
+
+
+// returns 0..31 for the highest set bit
+static int stbi__high_bit(unsigned int z)
+{
+   int n=0;
+   if (z == 0) return -1;
+   if (z >= 0x10000) n += 16, z >>= 16;
+   if (z >= 0x00100) n +=  8, z >>=  8;
+   if (z >= 0x00010) n +=  4, z >>=  4;
+   if (z >= 0x00004) n +=  2, z >>=  2;
+   if (z >= 0x00002) n +=  1, z >>=  1;
+   return n;
+}
+
+static int stbi__bitcount(unsigned int a)
+{
+   a = (a & 0x55555555) + ((a >>  1) & 0x55555555); // max 2
+   a = (a & 0x33333333) + ((a >>  2) & 0x33333333); // max 4
+   a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits
+   a = (a + (a >> 8)); // max 16 per 8 bits
+   a = (a + (a >> 16)); // max 32 per 8 bits
+   return a & 0xff;
+}
+
+static int stbi__shiftsigned(int v, int shift, int bits)
+{
+   int result;
+   int z=0;
+
+   if (shift < 0) v <<= -shift;
+   else v >>= shift;
+   result = v;
+
+   z = bits;
+   while (z < 8) {
+      result += v >> z;
+      z += bits;
+   }
+   return result;
+}
+
+typedef struct
+{
+   int bpp, offset, hsz;
+   unsigned int mr,mg,mb,ma, all_a;
+} stbi__bmp_data;
+
+static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info)
+{
+   int hsz;
+   if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP");
+   stbi__get32le(s); // discard filesize
+   stbi__get16le(s); // discard reserved
+   stbi__get16le(s); // discard reserved
+   info->offset = stbi__get32le(s);
+   info->hsz = hsz = stbi__get32le(s);
+   info->mr = info->mg = info->mb = info->ma = 0;
+   
+   if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown");
+   if (hsz == 12) {
+      s->img_x = stbi__get16le(s);
+      s->img_y = stbi__get16le(s);
+   } else {
+      s->img_x = stbi__get32le(s);
+      s->img_y = stbi__get32le(s);
+   }
+   if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP");
+   info->bpp = stbi__get16le(s);
+   if (info->bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit");
+   if (hsz != 12) {
+      int compress = stbi__get32le(s);
+      if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE");
+      stbi__get32le(s); // discard sizeof
+      stbi__get32le(s); // discard hres
+      stbi__get32le(s); // discard vres
+      stbi__get32le(s); // discard colorsused
+      stbi__get32le(s); // discard max important
+      if (hsz == 40 || hsz == 56) {
+         if (hsz == 56) {
+            stbi__get32le(s);
+            stbi__get32le(s);
+            stbi__get32le(s);
+            stbi__get32le(s);
+         }
+         if (info->bpp == 16 || info->bpp == 32) {
+            if (compress == 0) {
+               if (info->bpp == 32) {
+                  info->mr = 0xffu << 16;
+                  info->mg = 0xffu <<  8;
+                  info->mb = 0xffu <<  0;
+                  info->ma = 0xffu << 24;
+                  info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0
+               } else {
+                  info->mr = 31u << 10;
+                  info->mg = 31u <<  5;
+                  info->mb = 31u <<  0;
+               }
+            } else if (compress == 3) {
+               info->mr = stbi__get32le(s);
+               info->mg = stbi__get32le(s);
+               info->mb = stbi__get32le(s);
+               // not documented, but generated by photoshop and handled by mspaint
+               if (info->mr == info->mg && info->mg == info->mb) {
+                  // ?!?!?
+                  return stbi__errpuc("bad BMP", "bad BMP");
+               }
+            } else
+               return stbi__errpuc("bad BMP", "bad BMP");
+         }
+      } else {
+         int i;
+         if (hsz != 108 && hsz != 124)
+            return stbi__errpuc("bad BMP", "bad BMP");
+         info->mr = stbi__get32le(s);
+         info->mg = stbi__get32le(s);
+         info->mb = stbi__get32le(s);
+         info->ma = stbi__get32le(s);
+         stbi__get32le(s); // discard color space
+         for (i=0; i < 12; ++i)
+            stbi__get32le(s); // discard color space parameters
+         if (hsz == 124) {
+            stbi__get32le(s); // discard rendering intent
+            stbi__get32le(s); // discard offset of profile data
+            stbi__get32le(s); // discard size of profile data
+            stbi__get32le(s); // discard reserved
+         }
+      }
+   }
+   return (void *) 1;
+}
+
+
+static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   stbi_uc *out;
+   unsigned int mr=0,mg=0,mb=0,ma=0, all_a;
+   stbi_uc pal[256][4];
+   int psize=0,i,j,width;
+   int flip_vertically, pad, target;
+   stbi__bmp_data info;
+   STBI_NOTUSED(ri);
+
+   memset(&info, 0, 1 * sizeof(stbi__bmp_data));
+   info.all_a = 255;   
+   if (stbi__bmp_parse_header(s, &info) == NULL)
+      return NULL; // error code already set
+
+   flip_vertically = ((int) s->img_y) > 0;
+   s->img_y = abs((int) s->img_y);
+
+   mr = info.mr;
+   mg = info.mg;
+   mb = info.mb;
+   ma = info.ma;
+   all_a = info.all_a;
+
+   if (info.hsz == 12) {
+      if (info.bpp < 24)
+         psize = (info.offset - 14 - 24) / 3;
+   } else {
+      if (info.bpp < 16)
+         psize = (info.offset - 14 - info.hsz) >> 2;
+   }
+
+   s->img_n = ma ? 4 : 3;
+   if (req_comp && req_comp >= 3) // we can directly decode 3 or 4
+      target = req_comp;
+   else
+      target = s->img_n; // if they want monochrome, we'll post-convert
+
+   // sanity-check size
+   if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0))
+      return stbi__errpuc("too large", "Corrupt BMP");
+
+   out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0);
+   if (!out) return stbi__errpuc("outofmem", "Out of memory");
+   if (info.bpp < 16) {
+      int z=0;
+      if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); }
+      for (i=0; i < psize; ++i) {
+         pal[i][2] = stbi__get8(s);
+         pal[i][1] = stbi__get8(s);
+         pal[i][0] = stbi__get8(s);
+         if (info.hsz != 12) stbi__get8(s);
+         pal[i][3] = 255;
+      }
+      stbi__skip(s, info.offset - 14 - info.hsz - psize * (info.hsz == 12 ? 3 : 4));
+      if (info.bpp == 4) width = (s->img_x + 1) >> 1;
+      else if (info.bpp == 8) width = s->img_x;
+      else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); }
+      pad = (-width)&3;
+      for (j=0; j < (int) s->img_y; ++j) {
+         for (i=0; i < (int) s->img_x; i += 2) {
+            int v=stbi__get8(s),v2=0;
+            if (info.bpp == 4) {
+               v2 = v & 15;
+               v >>= 4;
+            }
+            out[z++] = pal[v][0];
+            out[z++] = pal[v][1];
+            out[z++] = pal[v][2];
+            if (target == 4) out[z++] = 255;
+            if (i+1 == (int) s->img_x) break;
+            v = (info.bpp == 8) ? stbi__get8(s) : v2;
+            out[z++] = pal[v][0];
+            out[z++] = pal[v][1];
+            out[z++] = pal[v][2];
+            if (target == 4) out[z++] = 255;
+         }
+         stbi__skip(s, pad);
+      }
+   } else {
+      int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0;
+      int z = 0;
+      int easy=0;
+      stbi__skip(s, info.offset - 14 - info.hsz);
+      if (info.bpp == 24) width = 3 * s->img_x;
+      else if (info.bpp == 16) width = 2*s->img_x;
+      else /* bpp = 32 and pad = 0 */ width=0;
+      pad = (-width) & 3;
+      if (info.bpp == 24) {
+         easy = 1;
+      } else if (info.bpp == 32) {
+         if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000)
+            easy = 2;
+      }
+      if (!easy) {
+         if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); }
+         // right shift amt to put high bit in position #7
+         rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr);
+         gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg);
+         bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb);
+         ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma);
+      }
+      for (j=0; j < (int) s->img_y; ++j) {
+         if (easy) {
+            for (i=0; i < (int) s->img_x; ++i) {
+               unsigned char a;
+               out[z+2] = stbi__get8(s);
+               out[z+1] = stbi__get8(s);
+               out[z+0] = stbi__get8(s);
+               z += 3;
+               a = (easy == 2 ? stbi__get8(s) : 255);
+               all_a |= a;
+               if (target == 4) out[z++] = a;
+            }
+         } else {
+            int bpp = info.bpp;
+            for (i=0; i < (int) s->img_x; ++i) {
+               stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s));
+               int a;
+               out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount));
+               out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount));
+               out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount));
+               a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255);
+               all_a |= a;
+               if (target == 4) out[z++] = STBI__BYTECAST(a);
+            }
+         }
+         stbi__skip(s, pad);
+      }
+   }
+   
+   // if alpha channel is all 0s, replace with all 255s
+   if (target == 4 && all_a == 0)
+      for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4)
+         out[i] = 255;
+
+   if (flip_vertically) {
+      stbi_uc t;
+      for (j=0; j < (int) s->img_y>>1; ++j) {
+         stbi_uc *p1 = out +      j     *s->img_x*target;
+         stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target;
+         for (i=0; i < (int) s->img_x*target; ++i) {
+            t = p1[i], p1[i] = p2[i], p2[i] = t;
+         }
+      }
+   }
+
+   if (req_comp && req_comp != target) {
+      out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y);
+      if (out == NULL) return out; // stbi__convert_format frees input on failure
+   }
+
+   *x = s->img_x;
+   *y = s->img_y;
+   if (comp) *comp = s->img_n;
+   return out;
+}
+#endif
+
+// Targa Truevision - TGA
+// by Jonathan Dummer
+#ifndef STBI_NO_TGA
+// returns STBI_rgb or whatever, 0 on error
+static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16)
+{
+   // only RGB or RGBA (incl. 16bit) or grey allowed
+   if(is_rgb16) *is_rgb16 = 0;
+   switch(bits_per_pixel) {
+      case 8:  return STBI_grey;
+      case 16: if(is_grey) return STBI_grey_alpha;
+            // else: fall-through
+      case 15: if(is_rgb16) *is_rgb16 = 1;
+            return STBI_rgb;
+      case 24: // fall-through
+      case 32: return bits_per_pixel/8;
+      default: return 0;
+   }
+}
+
+static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)
+{
+    int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp;
+    int sz, tga_colormap_type;
+    stbi__get8(s);                   // discard Offset
+    tga_colormap_type = stbi__get8(s); // colormap type
+    if( tga_colormap_type > 1 ) {
+        stbi__rewind(s);
+        return 0;      // only RGB or indexed allowed
+    }
+    tga_image_type = stbi__get8(s); // image type
+    if ( tga_colormap_type == 1 ) { // colormapped (paletted) image
+        if (tga_image_type != 1 && tga_image_type != 9) {
+            stbi__rewind(s);
+            return 0;
+        }
+        stbi__skip(s,4);       // skip index of first colormap entry and number of entries
+        sz = stbi__get8(s);    //   check bits per palette color entry
+        if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) {
+            stbi__rewind(s);
+            return 0;
+        }
+        stbi__skip(s,4);       // skip image x and y origin
+        tga_colormap_bpp = sz;
+    } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE
+        if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) {
+            stbi__rewind(s);
+            return 0; // only RGB or grey allowed, +/- RLE
+        }
+        stbi__skip(s,9); // skip colormap specification and image x/y origin
+        tga_colormap_bpp = 0;
+    }
+    tga_w = stbi__get16le(s);
+    if( tga_w < 1 ) {
+        stbi__rewind(s);
+        return 0;   // test width
+    }
+    tga_h = stbi__get16le(s);
+    if( tga_h < 1 ) {
+        stbi__rewind(s);
+        return 0;   // test height
+    }
+    tga_bits_per_pixel = stbi__get8(s); // bits per pixel
+    stbi__get8(s); // ignore alpha bits
+    if (tga_colormap_bpp != 0) {
+        if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) {
+            // when using a colormap, tga_bits_per_pixel is the size of the indexes
+            // I don't think anything but 8 or 16bit indexes makes sense
+            stbi__rewind(s);
+            return 0;
+        }
+        tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL);
+    } else {
+        tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL);
+    }
+    if(!tga_comp) {
+      stbi__rewind(s);
+      return 0;
+    }
+    if (x) *x = tga_w;
+    if (y) *y = tga_h;
+    if (comp) *comp = tga_comp;
+    return 1;                   // seems to have passed everything
+}
+
+static int stbi__tga_test(stbi__context *s)
+{
+   int res = 0;
+   int sz, tga_color_type;
+   stbi__get8(s);      //   discard Offset
+   tga_color_type = stbi__get8(s);   //   color type
+   if ( tga_color_type > 1 ) goto errorEnd;   //   only RGB or indexed allowed
+   sz = stbi__get8(s);   //   image type
+   if ( tga_color_type == 1 ) { // colormapped (paletted) image
+      if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9
+      stbi__skip(s,4);       // skip index of first colormap entry and number of entries
+      sz = stbi__get8(s);    //   check bits per palette color entry
+      if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd;
+      stbi__skip(s,4);       // skip image x and y origin
+   } else { // "normal" image w/o colormap
+      if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE
+      stbi__skip(s,9); // skip colormap specification and image x/y origin
+   }
+   if ( stbi__get16le(s) < 1 ) goto errorEnd;      //   test width
+   if ( stbi__get16le(s) < 1 ) goto errorEnd;      //   test height
+   sz = stbi__get8(s);   //   bits per pixel
+   if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index
+   if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd;
+
+   res = 1; // if we got this far, everything's good and we can return 1 instead of 0
+
+errorEnd:
+   stbi__rewind(s);
+   return res;
+}
+
+// read 16bit value and convert to 24bit RGB
+static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
+{
+   stbi__uint16 px = (stbi__uint16)stbi__get16le(s);
+   stbi__uint16 fiveBitMask = 31;
+   // we have 3 channels with 5bits each
+   int r = (px >> 10) & fiveBitMask;
+   int g = (px >> 5) & fiveBitMask;
+   int b = px & fiveBitMask;
+   // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later
+   out[0] = (stbi_uc)((r * 255)/31);
+   out[1] = (stbi_uc)((g * 255)/31);
+   out[2] = (stbi_uc)((b * 255)/31);
+
+   // some people claim that the most significant bit might be used for alpha
+   // (possibly if an alpha-bit is set in the "image descriptor byte")
+   // but that only made 16bit test images completely translucent..
+   // so let's treat all 15 and 16bit TGAs as RGB with no alpha.
+}
+
+static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   //   read in the TGA header stuff
+   int tga_offset = stbi__get8(s);
+   int tga_indexed = stbi__get8(s);
+   int tga_image_type = stbi__get8(s);
+   int tga_is_RLE = 0;
+   int tga_palette_start = stbi__get16le(s);
+   int tga_palette_len = stbi__get16le(s);
+   int tga_palette_bits = stbi__get8(s);
+   int tga_x_origin = stbi__get16le(s);
+   int tga_y_origin = stbi__get16le(s);
+   int tga_width = stbi__get16le(s);
+   int tga_height = stbi__get16le(s);
+   int tga_bits_per_pixel = stbi__get8(s);
+   int tga_comp, tga_rgb16=0;
+   int tga_inverted = stbi__get8(s);
+   // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?)
+   //   image data
+   unsigned char *tga_data;
+   unsigned char *tga_palette = NULL;
+   int i, j;
+   unsigned char raw_data[4];
+   int RLE_count = 0;
+   int RLE_repeating = 0;
+   int read_next_pixel = 1;
+   STBI_NOTUSED(ri);
+
+   //   do a tiny bit of precessing
+   if ( tga_image_type >= 8 )
+   {
+      tga_image_type -= 8;
+      tga_is_RLE = 1;
+   }
+   tga_inverted = 1 - ((tga_inverted >> 5) & 1);
+
+   //   If I'm paletted, then I'll use the number of bits from the palette
+   if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16);
+   else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16);
+
+   if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency
+      return stbi__errpuc("bad format", "Can't find out TGA pixelformat");
+
+   //   tga info
+   *x = tga_width;
+   *y = tga_height;
+   if (comp) *comp = tga_comp;
+
+   if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0))
+      return stbi__errpuc("too large", "Corrupt TGA");
+
+   tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0);
+   if (!tga_data) return stbi__errpuc("outofmem", "Out of memory");
+
+   // skip to the data's starting position (offset usually = 0)
+   stbi__skip(s, tga_offset );
+
+   if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) {
+      for (i=0; i < tga_height; ++i) {
+         int row = tga_inverted ? tga_height -i - 1 : i;
+         stbi_uc *tga_row = tga_data + row*tga_width*tga_comp;
+         stbi__getn(s, tga_row, tga_width * tga_comp);
+      }
+   } else  {
+      //   do I need to load a palette?
+      if ( tga_indexed)
+      {
+         //   any data to skip? (offset usually = 0)
+         stbi__skip(s, tga_palette_start );
+         //   load the palette
+         tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0);
+         if (!tga_palette) {
+            STBI_FREE(tga_data);
+            return stbi__errpuc("outofmem", "Out of memory");
+         }
+         if (tga_rgb16) {
+            stbi_uc *pal_entry = tga_palette;
+            STBI_ASSERT(tga_comp == STBI_rgb);
+            for (i=0; i < tga_palette_len; ++i) {
+               stbi__tga_read_rgb16(s, pal_entry);
+               pal_entry += tga_comp;
+            }
+         } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) {
+               STBI_FREE(tga_data);
+               STBI_FREE(tga_palette);
+               return stbi__errpuc("bad palette", "Corrupt TGA");
+         }
+      }
+      //   load the data
+      for (i=0; i < tga_width * tga_height; ++i)
+      {
+         //   if I'm in RLE mode, do I need to get a RLE stbi__pngchunk?
+         if ( tga_is_RLE )
+         {
+            if ( RLE_count == 0 )
+            {
+               //   yep, get the next byte as a RLE command
+               int RLE_cmd = stbi__get8(s);
+               RLE_count = 1 + (RLE_cmd & 127);
+               RLE_repeating = RLE_cmd >> 7;
+               read_next_pixel = 1;
+            } else if ( !RLE_repeating )
+            {
+               read_next_pixel = 1;
+            }
+         } else
+         {
+            read_next_pixel = 1;
+         }
+         //   OK, if I need to read a pixel, do it now
+         if ( read_next_pixel )
+         {
+            //   load however much data we did have
+            if ( tga_indexed )
+            {
+               // read in index, then perform the lookup
+               int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s);
+               if ( pal_idx >= tga_palette_len ) {
+                  // invalid index
+                  pal_idx = 0;
+               }
+               pal_idx *= tga_comp;
+               for (j = 0; j < tga_comp; ++j) {
+                  raw_data[j] = tga_palette[pal_idx+j];
+               }
+            } else if(tga_rgb16) {
+               STBI_ASSERT(tga_comp == STBI_rgb);
+               stbi__tga_read_rgb16(s, raw_data);
+            } else {
+               //   read in the data raw
+               for (j = 0; j < tga_comp; ++j) {
+                  raw_data[j] = stbi__get8(s);
+               }
+            }
+            //   clear the reading flag for the next pixel
+            read_next_pixel = 0;
+         } // end of reading a pixel
+
+         // copy data
+         for (j = 0; j < tga_comp; ++j)
+           tga_data[i*tga_comp+j] = raw_data[j];
+
+         //   in case we're in RLE mode, keep counting down
+         --RLE_count;
+      }
+      //   do I need to invert the image?
+      if ( tga_inverted )
+      {
+         for (j = 0; j*2 < tga_height; ++j)
+         {
+            int index1 = j * tga_width * tga_comp;
+            int index2 = (tga_height - 1 - j) * tga_width * tga_comp;
+            for (i = tga_width * tga_comp; i > 0; --i)
+            {
+               unsigned char temp = tga_data[index1];
+               tga_data[index1] = tga_data[index2];
+               tga_data[index2] = temp;
+               ++index1;
+               ++index2;
+            }
+         }
+      }
+      //   clear my palette, if I had one
+      if ( tga_palette != NULL )
+      {
+         STBI_FREE( tga_palette );
+      }
+   }
+
+   // swap RGB - if the source data was RGB16, it already is in the right order
+   if (tga_comp >= 3 && !tga_rgb16)
+   {
+      unsigned char* tga_pixel = tga_data;
+      for (i=0; i < tga_width * tga_height; ++i)
+      {
+         unsigned char temp = tga_pixel[0];
+         tga_pixel[0] = tga_pixel[2];
+         tga_pixel[2] = temp;
+         tga_pixel += tga_comp;
+      }
+   }
+
+   // convert to target component count
+   if (req_comp && req_comp != tga_comp)
+      tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height);
+
+   //   the things I do to get rid of an error message, and yet keep
+   //   Microsoft's C compilers happy... [8^(
+   tga_palette_start = tga_palette_len = tga_palette_bits =
+         tga_x_origin = tga_y_origin = 0;
+   //   OK, done
+   return tga_data;
+}
+#endif
+
+// *************************************************************************************************
+// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB
+
+#ifndef STBI_NO_PSD
+static int stbi__psd_test(stbi__context *s)
+{
+   int r = (stbi__get32be(s) == 0x38425053);
+   stbi__rewind(s);
+   return r;
+}
+
+static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount)
+{
+   int count, nleft, len;
+
+   count = 0;
+   while ((nleft = pixelCount - count) > 0) {
+      len = stbi__get8(s);
+      if (len == 128) {
+         // No-op.
+      } else if (len < 128) {
+         // Copy next len+1 bytes literally.
+         len++;
+         if (len > nleft) return 0; // corrupt data
+         count += len;
+         while (len) {
+            *p = stbi__get8(s);
+            p += 4;
+            len--;
+         }
+      } else if (len > 128) {
+         stbi_uc   val;
+         // Next -len+1 bytes in the dest are replicated from next source byte.
+         // (Interpret len as a negative 8-bit int.)
+         len = 257 - len;
+         if (len > nleft) return 0; // corrupt data
+         val = stbi__get8(s);
+         count += len;
+         while (len) {
+            *p = val;
+            p += 4;
+            len--;
+         }
+      }
+   }
+
+   return 1;
+}
+
+static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc)
+{
+   int pixelCount;
+   int channelCount, compression;
+   int channel, i;
+   int bitdepth;
+   int w,h;
+   stbi_uc *out;
+   STBI_NOTUSED(ri);
+
+   // Check identifier
+   if (stbi__get32be(s) != 0x38425053)   // "8BPS"
+      return stbi__errpuc("not PSD", "Corrupt PSD image");
+
+   // Check file type version.
+   if (stbi__get16be(s) != 1)
+      return stbi__errpuc("wrong version", "Unsupported version of PSD image");
+
+   // Skip 6 reserved bytes.
+   stbi__skip(s, 6 );
+
+   // Read the number of channels (R, G, B, A, etc).
+   channelCount = stbi__get16be(s);
+   if (channelCount < 0 || channelCount > 16)
+      return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image");
+
+   // Read the rows and columns of the image.
+   h = stbi__get32be(s);
+   w = stbi__get32be(s);
+
+   // Make sure the depth is 8 bits.
+   bitdepth = stbi__get16be(s);
+   if (bitdepth != 8 && bitdepth != 16)
+      return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit");
+
+   // Make sure the color mode is RGB.
+   // Valid options are:
+   //   0: Bitmap
+   //   1: Grayscale
+   //   2: Indexed color
+   //   3: RGB color
+   //   4: CMYK color
+   //   7: Multichannel
+   //   8: Duotone
+   //   9: Lab color
+   if (stbi__get16be(s) != 3)
+      return stbi__errpuc("wrong color format", "PSD is not in RGB color format");
+
+   // Skip the Mode Data.  (It's the palette for indexed color; other info for other modes.)
+   stbi__skip(s,stbi__get32be(s) );
+
+   // Skip the image resources.  (resolution, pen tool paths, etc)
+   stbi__skip(s, stbi__get32be(s) );
+
+   // Skip the reserved data.
+   stbi__skip(s, stbi__get32be(s) );
+
+   // Find out if the data is compressed.
+   // Known values:
+   //   0: no compression
+   //   1: RLE compressed
+   compression = stbi__get16be(s);
+   if (compression > 1)
+      return stbi__errpuc("bad compression", "PSD has an unknown compression format");
+
+   // Check size
+   if (!stbi__mad3sizes_valid(4, w, h, 0))
+      return stbi__errpuc("too large", "Corrupt PSD");
+
+   // Create the destination image.
+
+   if (!compression && bitdepth == 16 && bpc == 16) {
+      out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0);
+      ri->bits_per_channel = 16;
+   } else
+      out = (stbi_uc *) stbi__malloc(4 * w*h);
+
+   if (!out) return stbi__errpuc("outofmem", "Out of memory");
+   pixelCount = w*h;
+
+   // Initialize the data to zero.
+   //memset( out, 0, pixelCount * 4 );
+
+   // Finally, the image data.
+   if (compression) {
+      // RLE as used by .PSD and .TIFF
+      // Loop until you get the number of unpacked bytes you are expecting:
+      //     Read the next source byte into n.
+      //     If n is between 0 and 127 inclusive, copy the next n+1 bytes literally.
+      //     Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times.
+      //     Else if n is 128, noop.
+      // Endloop
+
+      // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data,
+      // which we're going to just skip.
+      stbi__skip(s, h * channelCount * 2 );
+
+      // Read the RLE data by channel.
+      for (channel = 0; channel < 4; channel++) {
+         stbi_uc *p;
+
+         p = out+channel;
+         if (channel >= channelCount) {
+            // Fill this channel with default data.
+            for (i = 0; i < pixelCount; i++, p += 4)
+               *p = (channel == 3 ? 255 : 0);
+         } else {
+            // Read the RLE data.
+            if (!stbi__psd_decode_rle(s, p, pixelCount)) {
+               STBI_FREE(out);
+               return stbi__errpuc("corrupt", "bad RLE data");
+            }
+         }
+      }
+
+   } else {
+      // We're at the raw image data.  It's each channel in order (Red, Green, Blue, Alpha, ...)
+      // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image.
+
+      // Read the data by channel.
+      for (channel = 0; channel < 4; channel++) {
+         if (channel >= channelCount) {
+            // Fill this channel with default data.
+            if (bitdepth == 16 && bpc == 16) {
+               stbi__uint16 *q = ((stbi__uint16 *) out) + channel;
+               stbi_uc val = channel == 3 ? 65535 : 0;
+               for (i = 0; i < pixelCount; i++, q += 4)
+                  *q = val;
+            } else {
+               stbi_uc *p = out+channel;
+               stbi_uc val = channel == 3 ? 255 : 0;
+               for (i = 0; i < pixelCount; i++, p += 4)
+                  *p = val;
+            }
+         } else {
+            if (ri->bits_per_channel == 16) {    // output bpc
+               stbi__uint16 *q = ((stbi__uint16 *) out) + channel;
+               for (i = 0; i < pixelCount; i++, q += 4)
+                  *q = (stbi__uint16) stbi__get16be(s);
+            } else {
+               stbi_uc *p = out+channel;
+               if (bitdepth == 16) {  // input bpc
+                  for (i = 0; i < pixelCount; i++, p += 4)
+                     *p = (stbi_uc) (stbi__get16be(s) >> 8);
+               } else {
+                  for (i = 0; i < pixelCount; i++, p += 4)
+                     *p = stbi__get8(s);
+               }
+            }
+         }
+      }
+   }
+
+   // remove weird white matte from PSD
+   if (channelCount >= 4) {
+      if (ri->bits_per_channel == 16) {
+         for (i=0; i < w*h; ++i) {
+            stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i;
+            if (pixel[3] != 0 && pixel[3] != 65535) {
+               float a = pixel[3] / 65535.0f;
+               float ra = 1.0f / a;
+               float inv_a = 65535.0f * (1 - ra);
+               pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a);
+               pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a);
+               pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a);
+            }
+         }
+      } else {
+         for (i=0; i < w*h; ++i) {
+            unsigned char *pixel = out + 4*i;
+            if (pixel[3] != 0 && pixel[3] != 255) {
+               float a = pixel[3] / 255.0f;
+               float ra = 1.0f / a;
+               float inv_a = 255.0f * (1 - ra);
+               pixel[0] = (unsigned char) (pixel[0]*ra + inv_a);
+               pixel[1] = (unsigned char) (pixel[1]*ra + inv_a);
+               pixel[2] = (unsigned char) (pixel[2]*ra + inv_a);
+            }
+         }
+      }
+   }
+
+   // convert to desired output format
+   if (req_comp && req_comp != 4) {
+      if (ri->bits_per_channel == 16)
+         out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h);
+      else
+         out = stbi__convert_format(out, 4, req_comp, w, h);
+      if (out == NULL) return out; // stbi__convert_format frees input on failure
+   }
+
+   if (comp) *comp = 4;
+   *y = h;
+   *x = w;
+
+   return out;
+}
+#endif
+
+// *************************************************************************************************
+// Softimage PIC loader
+// by Tom Seddon
+//
+// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format
+// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/
+
+#ifndef STBI_NO_PIC
+static int stbi__pic_is4(stbi__context *s,const char *str)
+{
+   int i;
+   for (i=0; i<4; ++i)
+      if (stbi__get8(s) != (stbi_uc)str[i])
+         return 0;
+
+   return 1;
+}
+
+static int stbi__pic_test_core(stbi__context *s)
+{
+   int i;
+
+   if (!stbi__pic_is4(s,"\x53\x80\xF6\x34"))
+      return 0;
+
+   for(i=0;i<84;++i)
+      stbi__get8(s);
+
+   if (!stbi__pic_is4(s,"PICT"))
+      return 0;
+
+   return 1;
+}
+
+typedef struct
+{
+   stbi_uc size,type,channel;
+} stbi__pic_packet;
+
+static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)
+{
+   int mask=0x80, i;
+
+   for (i=0; i<4; ++i, mask>>=1) {
+      if (channel & mask) {
+         if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short");
+         dest[i]=stbi__get8(s);
+      }
+   }
+
+   return dest;
+}
+
+static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src)
+{
+   int mask=0x80,i;
+
+   for (i=0;i<4; ++i, mask>>=1)
+      if (channel&mask)
+         dest[i]=src[i];
+}
+
+static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result)
+{
+   int act_comp=0,num_packets=0,y,chained;
+   stbi__pic_packet packets[10];
+
+   // this will (should...) cater for even some bizarre stuff like having data
+    // for the same channel in multiple packets.
+   do {
+      stbi__pic_packet *packet;
+
+      if (num_packets==sizeof(packets)/sizeof(packets[0]))
+         return stbi__errpuc("bad format","too many packets");
+
+      packet = &packets[num_packets++];
+
+      chained = stbi__get8(s);
+      packet->size    = stbi__get8(s);
+      packet->type    = stbi__get8(s);
+      packet->channel = stbi__get8(s);
+
+      act_comp |= packet->channel;
+
+      if (stbi__at_eof(s))          return stbi__errpuc("bad file","file too short (reading packets)");
+      if (packet->size != 8)  return stbi__errpuc("bad format","packet isn't 8bpp");
+   } while (chained);
+
+   *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel?
+
+   for(y=0; y<height; ++y) {
+      int packet_idx;
+
+      for(packet_idx=0; packet_idx < num_packets; ++packet_idx) {
+         stbi__pic_packet *packet = &packets[packet_idx];
+         stbi_uc *dest = result+y*width*4;
+
+         switch (packet->type) {
+            default:
+               return stbi__errpuc("bad format","packet has bad compression type");
+
+            case 0: {//uncompressed
+               int x;
+
+               for(x=0;x<width;++x, dest+=4)
+                  if (!stbi__readval(s,packet->channel,dest))
+                     return 0;
+               break;
+            }
+
+            case 1://Pure RLE
+               {
+                  int left=width, i;
+
+                  while (left>0) {
+                     stbi_uc count,value[4];
+
+                     count=stbi__get8(s);
+                     if (stbi__at_eof(s))   return stbi__errpuc("bad file","file too short (pure read count)");
+
+                     if (count > left)
+                        count = (stbi_uc) left;
+
+                     if (!stbi__readval(s,packet->channel,value))  return 0;
+
+                     for(i=0; i<count; ++i,dest+=4)
+                        stbi__copyval(packet->channel,dest,value);
+                     left -= count;
+                  }
+               }
+               break;
+
+            case 2: {//Mixed RLE
+               int left=width;
+               while (left>0) {
+                  int count = stbi__get8(s), i;
+                  if (stbi__at_eof(s))  return stbi__errpuc("bad file","file too short (mixed read count)");
+
+                  if (count >= 128) { // Repeated
+                     stbi_uc value[4];
+
+                     if (count==128)
+                        count = stbi__get16be(s);
+                     else
+                        count -= 127;
+                     if (count > left)
+                        return stbi__errpuc("bad file","scanline overrun");
+
+                     if (!stbi__readval(s,packet->channel,value))
+                        return 0;
+
+                     for(i=0;i<count;++i, dest += 4)
+                        stbi__copyval(packet->channel,dest,value);
+                  } else { // Raw
+                     ++count;
+                     if (count>left) return stbi__errpuc("bad file","scanline overrun");
+
+                     for(i=0;i<count;++i, dest+=4)
+                        if (!stbi__readval(s,packet->channel,dest))
+                           return 0;
+                  }
+                  left-=count;
+               }
+               break;
+            }
+         }
+      }
+   }
+
+   return result;
+}
+
+static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri)
+{
+   stbi_uc *result;
+   int i, x,y;
+   STBI_NOTUSED(ri);
+
+   for (i=0; i<92; ++i)
+      stbi__get8(s);
+
+   x = stbi__get16be(s);
+   y = stbi__get16be(s);
+   if (stbi__at_eof(s))  return stbi__errpuc("bad file","file too short (pic header)");
+   if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode");
+
+   stbi__get32be(s); //skip `ratio'
+   stbi__get16be(s); //skip `fields'
+   stbi__get16be(s); //skip `pad'
+
+   // intermediate buffer is RGBA
+   result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0);
+   memset(result, 0xff, x*y*4);
+
+   if (!stbi__pic_load_core(s,x,y,comp, result)) {
+      STBI_FREE(result);
+      result=0;
+   }
+   *px = x;
+   *py = y;
+   if (req_comp == 0) req_comp = *comp;
+   result=stbi__convert_format(result,4,req_comp,x,y);
+
+   return result;
+}
+
+static int stbi__pic_test(stbi__context *s)
+{
+   int r = stbi__pic_test_core(s);
+   stbi__rewind(s);
+   return r;
+}
+#endif
+
+// *************************************************************************************************
+// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb
+
+#ifndef STBI_NO_GIF
+typedef struct
+{
+   stbi__int16 prefix;
+   stbi_uc first;
+   stbi_uc suffix;
+} stbi__gif_lzw;
+
+typedef struct
+{
+   int w,h;
+   stbi_uc *out, *old_out;             // output buffer (always 4 components)
+   int flags, bgindex, ratio, transparent, eflags, delay;
+   stbi_uc  pal[256][4];
+   stbi_uc lpal[256][4];
+   stbi__gif_lzw codes[4096];
+   stbi_uc *color_table;
+   int parse, step;
+   int lflags;
+   int start_x, start_y;
+   int max_x, max_y;
+   int cur_x, cur_y;
+   int line_size;
+} stbi__gif;
+
+static int stbi__gif_test_raw(stbi__context *s)
+{
+   int sz;
+   if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0;
+   sz = stbi__get8(s);
+   if (sz != '9' && sz != '7') return 0;
+   if (stbi__get8(s) != 'a') return 0;
+   return 1;
+}
+
+static int stbi__gif_test(stbi__context *s)
+{
+   int r = stbi__gif_test_raw(s);
+   stbi__rewind(s);
+   return r;
+}
+
+static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp)
+{
+   int i;
+   for (i=0; i < num_entries; ++i) {
+      pal[i][2] = stbi__get8(s);
+      pal[i][1] = stbi__get8(s);
+      pal[i][0] = stbi__get8(s);
+      pal[i][3] = transp == i ? 0 : 255;
+   }
+}
+
+static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info)
+{
+   stbi_uc version;
+   if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8')
+      return stbi__err("not GIF", "Corrupt GIF");
+
+   version = stbi__get8(s);
+   if (version != '7' && version != '9')    return stbi__err("not GIF", "Corrupt GIF");
+   if (stbi__get8(s) != 'a')                return stbi__err("not GIF", "Corrupt GIF");
+
+   stbi__g_failure_reason = "";
+   g->w = stbi__get16le(s);
+   g->h = stbi__get16le(s);
+   g->flags = stbi__get8(s);
+   g->bgindex = stbi__get8(s);
+   g->ratio = stbi__get8(s);
+   g->transparent = -1;
+
+   if (comp != 0) *comp = 4;  // can't actually tell whether it's 3 or 4 until we parse the comments
+
+   if (is_info) return 1;
+
+   if (g->flags & 0x80)
+      stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1);
+
+   return 1;
+}
+
+static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
+{
+   stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif));
+   if (!stbi__gif_header(s, g, comp, 1)) {
+      STBI_FREE(g);
+      stbi__rewind( s );
+      return 0;
+   }
+   if (x) *x = g->w;
+   if (y) *y = g->h;
+   STBI_FREE(g);
+   return 1;
+}
+
+static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
+{
+   stbi_uc *p, *c;
+
+   // recurse to decode the prefixes, since the linked-list is backwards,
+   // and working backwards through an interleaved image would be nasty
+   if (g->codes[code].prefix >= 0)
+      stbi__out_gif_code(g, g->codes[code].prefix);
+
+   if (g->cur_y >= g->max_y) return;
+
+   p = &g->out[g->cur_x + g->cur_y];
+   c = &g->color_table[g->codes[code].suffix * 4];
+
+   if (c[3] >= 128) {
+      p[0] = c[2];
+      p[1] = c[1];
+      p[2] = c[0];
+      p[3] = c[3];
+   }
+   g->cur_x += 4;
+
+   if (g->cur_x >= g->max_x) {
+      g->cur_x = g->start_x;
+      g->cur_y += g->step;
+
+      while (g->cur_y >= g->max_y && g->parse > 0) {
+         g->step = (1 << g->parse) * g->line_size;
+         g->cur_y = g->start_y + (g->step >> 1);
+         --g->parse;
+      }
+   }
+}
+
+static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
+{
+   stbi_uc lzw_cs;
+   stbi__int32 len, init_code;
+   stbi__uint32 first;
+   stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear;
+   stbi__gif_lzw *p;
+
+   lzw_cs = stbi__get8(s);
+   if (lzw_cs > 12) return NULL;
+   clear = 1 << lzw_cs;
+   first = 1;
+   codesize = lzw_cs + 1;
+   codemask = (1 << codesize) - 1;
+   bits = 0;
+   valid_bits = 0;
+   for (init_code = 0; init_code < clear; init_code++) {
+      g->codes[init_code].prefix = -1;
+      g->codes[init_code].first = (stbi_uc) init_code;
+      g->codes[init_code].suffix = (stbi_uc) init_code;
+   }
+
+   // support no starting clear code
+   avail = clear+2;
+   oldcode = -1;
+
+   len = 0;
+   for(;;) {
+      if (valid_bits < codesize) {
+         if (len == 0) {
+            len = stbi__get8(s); // start new block
+            if (len == 0)
+               return g->out;
+         }
+         --len;
+         bits |= (stbi__int32) stbi__get8(s) << valid_bits;
+         valid_bits += 8;
+      } else {
+         stbi__int32 code = bits & codemask;
+         bits >>= codesize;
+         valid_bits -= codesize;
+         // @OPTIMIZE: is there some way we can accelerate the non-clear path?
+         if (code == clear) {  // clear code
+            codesize = lzw_cs + 1;
+            codemask = (1 << codesize) - 1;
+            avail = clear + 2;
+            oldcode = -1;
+            first = 0;
+         } else if (code == clear + 1) { // end of stream code
+            stbi__skip(s, len);
+            while ((len = stbi__get8(s)) > 0)
+               stbi__skip(s,len);
+            return g->out;
+         } else if (code <= avail) {
+            if (first) return stbi__errpuc("no clear code", "Corrupt GIF");
+
+            if (oldcode >= 0) {
+               p = &g->codes[avail++];
+               if (avail > 4096)        return stbi__errpuc("too many codes", "Corrupt GIF");
+               p->prefix = (stbi__int16) oldcode;
+               p->first = g->codes[oldcode].first;
+               p->suffix = (code == avail) ? p->first : g->codes[code].first;
+            } else if (code == avail)
+               return stbi__errpuc("illegal code in raster", "Corrupt GIF");
+
+            stbi__out_gif_code(g, (stbi__uint16) code);
+
+            if ((avail & codemask) == 0 && avail <= 0x0FFF) {
+               codesize++;
+               codemask = (1 << codesize) - 1;
+            }
+
+            oldcode = code;
+         } else {
+            return stbi__errpuc("illegal code in raster", "Corrupt GIF");
+         }
+      }
+   }
+}
+
+static void stbi__fill_gif_background(stbi__gif *g, int x0, int y0, int x1, int y1)
+{
+   int x, y;
+   stbi_uc *c = g->pal[g->bgindex];
+   for (y = y0; y < y1; y += 4 * g->w) {
+      for (x = x0; x < x1; x += 4) {
+         stbi_uc *p  = &g->out[y + x];
+         p[0] = c[2];
+         p[1] = c[1];
+         p[2] = c[0];
+         p[3] = 0;
+      }
+   }
+}
+
+// this function is designed to support animated gifs, although stb_image doesn't support it
+static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp)
+{
+   int i;
+   stbi_uc *prev_out = 0;
+
+   if (g->out == 0 && !stbi__gif_header(s, g, comp,0))
+      return 0; // stbi__g_failure_reason set by stbi__gif_header
+
+   if (!stbi__mad3sizes_valid(g->w, g->h, 4, 0))
+      return stbi__errpuc("too large", "GIF too large");
+
+   prev_out = g->out;
+   g->out = (stbi_uc *) stbi__malloc_mad3(4, g->w, g->h, 0);
+   if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory");
+
+   switch ((g->eflags & 0x1C) >> 2) {
+      case 0: // unspecified (also always used on 1st frame)
+         stbi__fill_gif_background(g, 0, 0, 4 * g->w, 4 * g->w * g->h);
+         break;
+      case 1: // do not dispose
+         if (prev_out) memcpy(g->out, prev_out, 4 * g->w * g->h);
+         g->old_out = prev_out;
+         break;
+      case 2: // dispose to background
+         if (prev_out) memcpy(g->out, prev_out, 4 * g->w * g->h);
+         stbi__fill_gif_background(g, g->start_x, g->start_y, g->max_x, g->max_y);
+         break;
+      case 3: // dispose to previous
+         if (g->old_out) {
+            for (i = g->start_y; i < g->max_y; i += 4 * g->w)
+               memcpy(&g->out[i + g->start_x], &g->old_out[i + g->start_x], g->max_x - g->start_x);
+         }
+         break;
+   }
+
+   for (;;) {
+      switch (stbi__get8(s)) {
+         case 0x2C: /* Image Descriptor */
+         {
+            int prev_trans = -1;
+            stbi__int32 x, y, w, h;
+            stbi_uc *o;
+
+            x = stbi__get16le(s);
+            y = stbi__get16le(s);
+            w = stbi__get16le(s);
+            h = stbi__get16le(s);
+            if (((x + w) > (g->w)) || ((y + h) > (g->h)))
+               return stbi__errpuc("bad Image Descriptor", "Corrupt GIF");
+
+            g->line_size = g->w * 4;
+            g->start_x = x * 4;
+            g->start_y = y * g->line_size;
+            g->max_x   = g->start_x + w * 4;
+            g->max_y   = g->start_y + h * g->line_size;
+            g->cur_x   = g->start_x;
+            g->cur_y   = g->start_y;
+
+            g->lflags = stbi__get8(s);
+
+            if (g->lflags & 0x40) {
+               g->step = 8 * g->line_size; // first interlaced spacing
+               g->parse = 3;
+            } else {
+               g->step = g->line_size;
+               g->parse = 0;
+            }
+
+            if (g->lflags & 0x80) {
+               stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1);
+               g->color_table = (stbi_uc *) g->lpal;
+            } else if (g->flags & 0x80) {
+               if (g->transparent >= 0 && (g->eflags & 0x01)) {
+                  prev_trans = g->pal[g->transparent][3];
+                  g->pal[g->transparent][3] = 0;
+               }
+               g->color_table = (stbi_uc *) g->pal;
+            } else
+               return stbi__errpuc("missing color table", "Corrupt GIF");
+
+            o = stbi__process_gif_raster(s, g);
+            if (o == NULL) return NULL;
+
+            if (prev_trans != -1)
+               g->pal[g->transparent][3] = (stbi_uc) prev_trans;
+
+            return o;
+         }
+
+         case 0x21: // Comment Extension.
+         {
+            int len;
+            if (stbi__get8(s) == 0xF9) { // Graphic Control Extension.
+               len = stbi__get8(s);
+               if (len == 4) {
+                  g->eflags = stbi__get8(s);
+                  g->delay = stbi__get16le(s);
+                  g->transparent = stbi__get8(s);
+               } else {
+                  stbi__skip(s, len);
+                  break;
+               }
+            }
+            while ((len = stbi__get8(s)) != 0)
+               stbi__skip(s, len);
+            break;
+         }
+
+         case 0x3B: // gif stream termination code
+            return (stbi_uc *) s; // using '1' causes warning on some compilers
+
+         default:
+            return stbi__errpuc("unknown code", "Corrupt GIF");
+      }
+   }
+
+   STBI_NOTUSED(req_comp);
+}
+
+static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   stbi_uc *u = 0;
+   stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif));
+   memset(g, 0, sizeof(*g));
+   STBI_NOTUSED(ri);
+
+   u = stbi__gif_load_next(s, g, comp, req_comp);
+   if (u == (stbi_uc *) s) u = 0;  // end of animated gif marker
+   if (u) {
+      *x = g->w;
+      *y = g->h;
+      if (req_comp && req_comp != 4)
+         u = stbi__convert_format(u, 4, req_comp, g->w, g->h);
+   }
+   else if (g->out)
+      STBI_FREE(g->out);
+   STBI_FREE(g);
+   return u;
+}
+
+static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   return stbi__gif_info_raw(s,x,y,comp);
+}
+#endif
+
+// *************************************************************************************************
+// Radiance RGBE HDR loader
+// originally by Nicolas Schulz
+#ifndef STBI_NO_HDR
+static int stbi__hdr_test_core(stbi__context *s, const char *signature)
+{
+   int i;
+   for (i=0; signature[i]; ++i)
+      if (stbi__get8(s) != signature[i])
+          return 0;
+   stbi__rewind(s);
+   return 1;
+}
+
+static int stbi__hdr_test(stbi__context* s)
+{
+   int r = stbi__hdr_test_core(s, "#?RADIANCE\n");
+   stbi__rewind(s);
+   if(!r) {
+       r = stbi__hdr_test_core(s, "#?RGBE\n");
+       stbi__rewind(s);
+   }
+   return r;
+}
+
+#define STBI__HDR_BUFLEN  1024
+static char *stbi__hdr_gettoken(stbi__context *z, char *buffer)
+{
+   int len=0;
+   char c = '\0';
+
+   c = (char) stbi__get8(z);
+
+   while (!stbi__at_eof(z) && c != '\n') {
+      buffer[len++] = c;
+      if (len == STBI__HDR_BUFLEN-1) {
+         // flush to end of line
+         while (!stbi__at_eof(z) && stbi__get8(z) != '\n')
+            ;
+         break;
+      }
+      c = (char) stbi__get8(z);
+   }
+
+   buffer[len] = 0;
+   return buffer;
+}
+
+static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
+{
+   if ( input[3] != 0 ) {
+      float f1;
+      // Exponent
+      f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8));
+      if (req_comp <= 2)
+         output[0] = (input[0] + input[1] + input[2]) * f1 / 3;
+      else {
+         output[0] = input[0] * f1;
+         output[1] = input[1] * f1;
+         output[2] = input[2] * f1;
+      }
+      if (req_comp == 2) output[1] = 1;
+      if (req_comp == 4) output[3] = 1;
+   } else {
+      switch (req_comp) {
+         case 4: output[3] = 1; /* fallthrough */
+         case 3: output[0] = output[1] = output[2] = 0;
+                 break;
+         case 2: output[1] = 1; /* fallthrough */
+         case 1: output[0] = 0;
+                 break;
+      }
+   }
+}
+
+static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   char buffer[STBI__HDR_BUFLEN];
+   char *token;
+   int valid = 0;
+   int width, height;
+   stbi_uc *scanline;
+   float *hdr_data;
+   int len;
+   unsigned char count, value;
+   int i, j, k, c1,c2, z;
+   const char *headerToken;
+   STBI_NOTUSED(ri);
+
+   // Check identifier
+   headerToken = stbi__hdr_gettoken(s,buffer);
+   if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0)
+      return stbi__errpf("not HDR", "Corrupt HDR image");
+
+   // Parse header
+   for(;;) {
+      token = stbi__hdr_gettoken(s,buffer);
+      if (token[0] == 0) break;
+      if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1;
+   }
+
+   if (!valid)    return stbi__errpf("unsupported format", "Unsupported HDR format");
+
+   // Parse width and height
+   // can't use sscanf() if we're not using stdio!
+   token = stbi__hdr_gettoken(s,buffer);
+   if (strncmp(token, "-Y ", 3))  return stbi__errpf("unsupported data layout", "Unsupported HDR format");
+   token += 3;
+   height = (int) strtol(token, &token, 10);
+   while (*token == ' ') ++token;
+   if (strncmp(token, "+X ", 3))  return stbi__errpf("unsupported data layout", "Unsupported HDR format");
+   token += 3;
+   width = (int) strtol(token, NULL, 10);
+
+   *x = width;
+   *y = height;
+
+   if (comp) *comp = 3;
+   if (req_comp == 0) req_comp = 3;
+
+   if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0))
+      return stbi__errpf("too large", "HDR image is too large");
+
+   // Read data
+   hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0);
+   if (!hdr_data)
+      return stbi__errpf("outofmem", "Out of memory");
+
+   // Load image data
+   // image data is stored as some number of sca
+   if ( width < 8 || width >= 32768) {
+      // Read flat data
+      for (j=0; j < height; ++j) {
+         for (i=0; i < width; ++i) {
+            stbi_uc rgbe[4];
+           main_decode_loop:
+            stbi__getn(s, rgbe, 4);
+            stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp);
+         }
+      }
+   } else {
+      // Read RLE-encoded data
+      scanline = NULL;
+
+      for (j = 0; j < height; ++j) {
+         c1 = stbi__get8(s);
+         c2 = stbi__get8(s);
+         len = stbi__get8(s);
+         if (c1 != 2 || c2 != 2 || (len & 0x80)) {
+            // not run-length encoded, so we have to actually use THIS data as a decoded
+            // pixel (note this can't be a valid pixel--one of RGB must be >= 128)
+            stbi_uc rgbe[4];
+            rgbe[0] = (stbi_uc) c1;
+            rgbe[1] = (stbi_uc) c2;
+            rgbe[2] = (stbi_uc) len;
+            rgbe[3] = (stbi_uc) stbi__get8(s);
+            stbi__hdr_convert(hdr_data, rgbe, req_comp);
+            i = 1;
+            j = 0;
+            STBI_FREE(scanline);
+            goto main_decode_loop; // yes, this makes no sense
+         }
+         len <<= 8;
+         len |= stbi__get8(s);
+         if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); }
+         if (scanline == NULL) {
+            scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0);
+            if (!scanline) {
+               STBI_FREE(hdr_data);
+               return stbi__errpf("outofmem", "Out of memory");
+            }
+         }
+
+         for (k = 0; k < 4; ++k) {
+            int nleft;
+            i = 0;
+            while ((nleft = width - i) > 0) {
+               count = stbi__get8(s);
+               if (count > 128) {
+                  // Run
+                  value = stbi__get8(s);
+                  count -= 128;
+                  if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); }
+                  for (z = 0; z < count; ++z)
+                     scanline[i++ * 4 + k] = value;
+               } else {
+                  // Dump
+                  if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); }
+                  for (z = 0; z < count; ++z)
+                     scanline[i++ * 4 + k] = stbi__get8(s);
+               }
+            }
+         }
+         for (i=0; i < width; ++i)
+            stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp);
+      }
+      if (scanline)
+         STBI_FREE(scanline);
+   }
+
+   return hdr_data;
+}
+
+static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   char buffer[STBI__HDR_BUFLEN];
+   char *token;
+   int valid = 0;
+
+   if (stbi__hdr_test(s) == 0) {
+       stbi__rewind( s );
+       return 0;
+   }
+
+   for(;;) {
+      token = stbi__hdr_gettoken(s,buffer);
+      if (token[0] == 0) break;
+      if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1;
+   }
+
+   if (!valid) {
+       stbi__rewind( s );
+       return 0;
+   }
+   token = stbi__hdr_gettoken(s,buffer);
+   if (strncmp(token, "-Y ", 3)) {
+       stbi__rewind( s );
+       return 0;
+   }
+   token += 3;
+   *y = (int) strtol(token, &token, 10);
+   while (*token == ' ') ++token;
+   if (strncmp(token, "+X ", 3)) {
+       stbi__rewind( s );
+       return 0;
+   }
+   token += 3;
+   *x = (int) strtol(token, NULL, 10);
+   *comp = 3;
+   return 1;
+}
+#endif // STBI_NO_HDR
+
+#ifndef STBI_NO_BMP
+static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   void *p;
+   stbi__bmp_data info;
+
+   info.all_a = 255;   
+   p = stbi__bmp_parse_header(s, &info);
+   stbi__rewind( s );
+   if (p == NULL)
+      return 0;
+   *x = s->img_x;
+   *y = s->img_y;
+   *comp = info.ma ? 4 : 3;
+   return 1;
+}
+#endif
+
+#ifndef STBI_NO_PSD
+static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int channelCount;
+   if (stbi__get32be(s) != 0x38425053) {
+       stbi__rewind( s );
+       return 0;
+   }
+   if (stbi__get16be(s) != 1) {
+       stbi__rewind( s );
+       return 0;
+   }
+   stbi__skip(s, 6);
+   channelCount = stbi__get16be(s);
+   if (channelCount < 0 || channelCount > 16) {
+       stbi__rewind( s );
+       return 0;
+   }
+   *y = stbi__get32be(s);
+   *x = stbi__get32be(s);
+   if (stbi__get16be(s) != 8) {
+       stbi__rewind( s );
+       return 0;
+   }
+   if (stbi__get16be(s) != 3) {
+       stbi__rewind( s );
+       return 0;
+   }
+   *comp = 4;
+   return 1;
+}
+#endif
+
+#ifndef STBI_NO_PIC
+static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int act_comp=0,num_packets=0,chained;
+   stbi__pic_packet packets[10];
+
+   if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) {
+      stbi__rewind(s);
+      return 0;
+   }
+
+   stbi__skip(s, 88);
+
+   *x = stbi__get16be(s);
+   *y = stbi__get16be(s);
+   if (stbi__at_eof(s)) {
+      stbi__rewind( s);
+      return 0;
+   }
+   if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) {
+      stbi__rewind( s );
+      return 0;
+   }
+
+   stbi__skip(s, 8);
+
+   do {
+      stbi__pic_packet *packet;
+
+      if (num_packets==sizeof(packets)/sizeof(packets[0]))
+         return 0;
+
+      packet = &packets[num_packets++];
+      chained = stbi__get8(s);
+      packet->size    = stbi__get8(s);
+      packet->type    = stbi__get8(s);
+      packet->channel = stbi__get8(s);
+      act_comp |= packet->channel;
+
+      if (stbi__at_eof(s)) {
+          stbi__rewind( s );
+          return 0;
+      }
+      if (packet->size != 8) {
+          stbi__rewind( s );
+          return 0;
+      }
+   } while (chained);
+
+   *comp = (act_comp & 0x10 ? 4 : 3);
+
+   return 1;
+}
+#endif
+
+// *************************************************************************************************
+// Portable Gray Map and Portable Pixel Map loader
+// by Ken Miller
+//
+// PGM: http://netpbm.sourceforge.net/doc/pgm.html
+// PPM: http://netpbm.sourceforge.net/doc/ppm.html
+//
+// Known limitations:
+//    Does not support comments in the header section
+//    Does not support ASCII image data (formats P2 and P3)
+//    Does not support 16-bit-per-channel
+
+#ifndef STBI_NO_PNM
+
+static int      stbi__pnm_test(stbi__context *s)
+{
+   char p, t;
+   p = (char) stbi__get8(s);
+   t = (char) stbi__get8(s);
+   if (p != 'P' || (t != '5' && t != '6')) {
+       stbi__rewind( s );
+       return 0;
+   }
+   return 1;
+}
+
+static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri)
+{
+   stbi_uc *out;
+   STBI_NOTUSED(ri);
+
+   if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n))
+      return 0;
+
+   *x = s->img_x;
+   *y = s->img_y;
+   *comp = s->img_n;
+
+   if (!stbi__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0))
+      return stbi__errpuc("too large", "PNM too large");
+
+   out = (stbi_uc *) stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0);
+   if (!out) return stbi__errpuc("outofmem", "Out of memory");
+   stbi__getn(s, out, s->img_n * s->img_x * s->img_y);
+
+   if (req_comp && req_comp != s->img_n) {
+      out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y);
+      if (out == NULL) return out; // stbi__convert_format frees input on failure
+   }
+   return out;
+}
+
+static int      stbi__pnm_isspace(char c)
+{
+   return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
+}
+
+static void     stbi__pnm_skip_whitespace(stbi__context *s, char *c)
+{
+   for (;;) {
+      while (!stbi__at_eof(s) && stbi__pnm_isspace(*c))
+         *c = (char) stbi__get8(s);
+
+      if (stbi__at_eof(s) || *c != '#')
+         break;
+
+      while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' )
+         *c = (char) stbi__get8(s);
+   }
+}
+
+static int      stbi__pnm_isdigit(char c)
+{
+   return c >= '0' && c <= '9';
+}
+
+static int      stbi__pnm_getinteger(stbi__context *s, char *c)
+{
+   int value = 0;
+
+   while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) {
+      value = value*10 + (*c - '0');
+      *c = (char) stbi__get8(s);
+   }
+
+   return value;
+}
+
+static int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int maxv;
+   char c, p, t;
+
+   stbi__rewind( s );
+
+   // Get identifier
+   p = (char) stbi__get8(s);
+   t = (char) stbi__get8(s);
+   if (p != 'P' || (t != '5' && t != '6')) {
+       stbi__rewind( s );
+       return 0;
+   }
+
+   *comp = (t == '6') ? 3 : 1;  // '5' is 1-component .pgm; '6' is 3-component .ppm
+
+   c = (char) stbi__get8(s);
+   stbi__pnm_skip_whitespace(s, &c);
+
+   *x = stbi__pnm_getinteger(s, &c); // read width
+   stbi__pnm_skip_whitespace(s, &c);
+
+   *y = stbi__pnm_getinteger(s, &c); // read height
+   stbi__pnm_skip_whitespace(s, &c);
+
+   maxv = stbi__pnm_getinteger(s, &c);  // read max value
+
+   if (maxv > 255)
+      return stbi__err("max value > 255", "PPM image not 8-bit");
+   else
+      return 1;
+}
+#endif
+
+static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
+{
+   #ifndef STBI_NO_JPEG
+   if (stbi__jpeg_info(s, x, y, comp)) return 1;
+   #endif
+
+   #ifndef STBI_NO_PNG
+   if (stbi__png_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_GIF
+   if (stbi__gif_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_BMP
+   if (stbi__bmp_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_PSD
+   if (stbi__psd_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_PIC
+   if (stbi__pic_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_PNM
+   if (stbi__pnm_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_HDR
+   if (stbi__hdr_info(s, x, y, comp))  return 1;
+   #endif
+
+   // test tga last because it's a crappy test!
+   #ifndef STBI_NO_TGA
+   if (stbi__tga_info(s, x, y, comp))
+       return 1;
+   #endif
+   return stbi__err("unknown image type", "Image not of any known type, or corrupt");
+}
+
+#ifndef STBI_NO_STDIO
+STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
+{
+    FILE *f = stbi__fopen(filename, "rb");
+    int result;
+    if (!f) return stbi__err("can't fopen", "Unable to open file");
+    result = stbi_info_from_file(f, x, y, comp);
+    fclose(f);
+    return result;
+}
+
+STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
+{
+   int r;
+   stbi__context s;
+   long pos = ftell(f);
+   stbi__start_file(&s, f);
+   r = stbi__info_main(&s,x,y,comp);
+   fseek(f,pos,SEEK_SET);
+   return r;
+}
+#endif // !STBI_NO_STDIO
+
+STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp)
+{
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi__info_main(&s,x,y,comp);
+}
+
+STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp)
+{
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user);
+   return stbi__info_main(&s,x,y,comp);
+}
+
+#endif // STB_IMAGE_IMPLEMENTATION
+
+/*
+   revision history:
+      2.13  (2016-11-29) add 16-bit API, only supported for PNG right now
+      2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes
+      2.11  (2016-04-02) allocate large structures on the stack
+                         remove white matting for transparent PSD
+                         fix reported channel count for PNG & BMP
+                         re-enable SSE2 in non-gcc 64-bit
+                         support RGB-formatted JPEG
+                         read 16-bit PNGs (only as 8-bit)
+      2.10  (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED
+      2.09  (2016-01-16) allow comments in PNM files
+                         16-bit-per-pixel TGA (not bit-per-component)
+                         info() for TGA could break due to .hdr handling
+                         info() for BMP to shares code instead of sloppy parse
+                         can use STBI_REALLOC_SIZED if allocator doesn't support realloc
+                         code cleanup
+      2.08  (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA
+      2.07  (2015-09-13) fix compiler warnings
+                         partial animated GIF support
+                         limited 16-bpc PSD support
+                         #ifdef unused functions
+                         bug with < 92 byte PIC,PNM,HDR,TGA
+      2.06  (2015-04-19) fix bug where PSD returns wrong '*comp' value
+      2.05  (2015-04-19) fix bug in progressive JPEG handling, fix warning
+      2.04  (2015-04-15) try to re-enable SIMD on MinGW 64-bit
+      2.03  (2015-04-12) extra corruption checking (mmozeiko)
+                         stbi_set_flip_vertically_on_load (nguillemot)
+                         fix NEON support; fix mingw support
+      2.02  (2015-01-19) fix incorrect assert, fix warning
+      2.01  (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2
+      2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG
+      2.00  (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg)
+                         progressive JPEG (stb)
+                         PGM/PPM support (Ken Miller)
+                         STBI_MALLOC,STBI_REALLOC,STBI_FREE
+                         GIF bugfix -- seemingly never worked
+                         STBI_NO_*, STBI_ONLY_*
+      1.48  (2014-12-14) fix incorrectly-named assert()
+      1.47  (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb)
+                         optimize PNG (ryg)
+                         fix bug in interlaced PNG with user-specified channel count (stb)
+      1.46  (2014-08-26)
+              fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG
+      1.45  (2014-08-16)
+              fix MSVC-ARM internal compiler error by wrapping malloc
+      1.44  (2014-08-07)
+              various warning fixes from Ronny Chevalier
+      1.43  (2014-07-15)
+              fix MSVC-only compiler problem in code changed in 1.42
+      1.42  (2014-07-09)
+              don't define _CRT_SECURE_NO_WARNINGS (affects user code)
+              fixes to stbi__cleanup_jpeg path
+              added STBI_ASSERT to avoid requiring assert.h
+      1.41  (2014-06-25)
+              fix search&replace from 1.36 that messed up comments/error messages
+      1.40  (2014-06-22)
+              fix gcc struct-initialization warning
+      1.39  (2014-06-15)
+              fix to TGA optimization when req_comp != number of components in TGA;
+              fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite)
+              add support for BMP version 5 (more ignored fields)
+      1.38  (2014-06-06)
+              suppress MSVC warnings on integer casts truncating values
+              fix accidental rename of 'skip' field of I/O
+      1.37  (2014-06-04)
+              remove duplicate typedef
+      1.36  (2014-06-03)
+              convert to header file single-file library
+              if de-iphone isn't set, load iphone images color-swapped instead of returning NULL
+      1.35  (2014-05-27)
+              various warnings
+              fix broken STBI_SIMD path
+              fix bug where stbi_load_from_file no longer left file pointer in correct place
+              fix broken non-easy path for 32-bit BMP (possibly never used)
+              TGA optimization by Arseny Kapoulkine
+      1.34  (unknown)
+              use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case
+      1.33  (2011-07-14)
+              make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements
+      1.32  (2011-07-13)
+              support for "info" function for all supported filetypes (SpartanJ)
+      1.31  (2011-06-20)
+              a few more leak fixes, bug in PNG handling (SpartanJ)
+      1.30  (2011-06-11)
+              added ability to load files via callbacks to accomidate custom input streams (Ben Wenger)
+              removed deprecated format-specific test/load functions
+              removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway
+              error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha)
+              fix inefficiency in decoding 32-bit BMP (David Woo)
+      1.29  (2010-08-16)
+              various warning fixes from Aurelien Pocheville
+      1.28  (2010-08-01)
+              fix bug in GIF palette transparency (SpartanJ)
+      1.27  (2010-08-01)
+              cast-to-stbi_uc to fix warnings
+      1.26  (2010-07-24)
+              fix bug in file buffering for PNG reported by SpartanJ
+      1.25  (2010-07-17)
+              refix trans_data warning (Won Chun)
+      1.24  (2010-07-12)
+              perf improvements reading from files on platforms with lock-heavy fgetc()
+              minor perf improvements for jpeg
+              deprecated type-specific functions so we'll get feedback if they're needed
+              attempt to fix trans_data warning (Won Chun)
+      1.23    fixed bug in iPhone support
+      1.22  (2010-07-10)
+              removed image *writing* support
+              stbi_info support from Jetro Lauha
+              GIF support from Jean-Marc Lienher
+              iPhone PNG-extensions from James Brown
+              warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva)
+      1.21    fix use of 'stbi_uc' in header (reported by jon blow)
+      1.20    added support for Softimage PIC, by Tom Seddon
+      1.19    bug in interlaced PNG corruption check (found by ryg)
+      1.18  (2008-08-02)
+              fix a threading bug (local mutable static)
+      1.17    support interlaced PNG
+      1.16    major bugfix - stbi__convert_format converted one too many pixels
+      1.15    initialize some fields for thread safety
+      1.14    fix threadsafe conversion bug
+              header-file-only version (#define STBI_HEADER_FILE_ONLY before including)
+      1.13    threadsafe
+      1.12    const qualifiers in the API
+      1.11    Support installable IDCT, colorspace conversion routines
+      1.10    Fixes for 64-bit (don't use "unsigned long")
+              optimized upsampling by Fabian "ryg" Giesen
+      1.09    Fix format-conversion for PSD code (bad global variables!)
+      1.08    Thatcher Ulrich's PSD code integrated by Nicolas Schulz
+      1.07    attempt to fix C++ warning/errors again
+      1.06    attempt to fix C++ warning/errors again
+      1.05    fix TGA loading to return correct *comp and use good luminance calc
+      1.04    default float alpha is 1, not 255; use 'void *' for stbi_image_free
+      1.03    bugfixes to STBI_NO_STDIO, STBI_NO_HDR
+      1.02    support for (subset of) HDR files, float interface for preferred access to them
+      1.01    fix bug: possible bug in handling right-side up bmps... not sure
+              fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all
+      1.00    interface to zlib that skips zlib header
+      0.99    correct handling of alpha in palette
+      0.98    TGA loader by lonesock; dynamically add loaders (untested)
+      0.97    jpeg errors on too large a file; also catch another malloc failure
+      0.96    fix detection of invalid v value - particleman@mollyrocket forum
+      0.95    during header scan, seek to markers in case of padding
+      0.94    STBI_NO_STDIO to disable stdio usage; rename all #defines the same
+      0.93    handle jpegtran output; verbose errors
+      0.92    read 4,8,16,24,32-bit BMP files of several formats
+      0.91    output 24-bit Windows 3.0 BMP files
+      0.90    fix a few more warnings; bump version number to approach 1.0
+      0.61    bugfixes due to Marc LeBlanc, Christopher Lloyd
+      0.60    fix compiling as c++
+      0.59    fix warnings: merge Dave Moore's -Wall fixes
+      0.58    fix bug: zlib uncompressed mode len/nlen was wrong endian
+      0.57    fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available
+      0.56    fix bug: zlib uncompressed mode len vs. nlen
+      0.55    fix bug: restart_interval not initialized to 0
+      0.54    allow NULL for 'int *comp'
+      0.53    fix bug in png 3->4; speedup png decoding
+      0.52    png handles req_comp=3,4 directly; minor cleanup; jpeg comments
+      0.51    obey req_comp requests, 1-component jpegs return as 1-component,
+              on 'test' only check type, not whether we support this variant
+      0.50  (2006-11-19)
+              first released version
+*/
\ No newline at end of file
diff --git a/test_conformance/Networks/src/utilities.c b/test_conformance/Networks/src/utilities.c
new file mode 100644
index 0000000..7341513
--- /dev/null
+++ b/test_conformance/Networks/src/utilities.c
@@ -0,0 +1,335 @@
+#include "common.h"
+#include "utilities.h"
+#include "precisionConverter.h"
+
+#define STB_IMAGE_IMPLEMENTATION
+#include "stb_image.h"
+
+#define VX_MAX_TENSOR_DIMS_CT 6
+
+//Local function that returns a pointer to a function that converts image data to a float
+float(*convertToFloatFunc(vx_enum df))(const char*)
+{
+    if (df == VX_TYPE_INT16)
+        return Q78ToFloat;
+#if defined(EXPERIMENTAL_PLATFORM_SUPPORTS_16_FLOAT)
+    if (df == VX_TYPE_FLOAT16)
+        return FP16ToFloat;
+#endif
+    if (df == VX_TYPE_FLOAT32)
+		return FP32ToFloat;
+}
+
+//Local function that returns a pointer to a function that converts float to the image format
+void(*convertFromFloatFunc(vx_enum df))(float, char*)
+{
+    if (df == VX_TYPE_INT16)
+        return floatToQ78;
+#if defined(EXPERIMENTAL_PLATFORM_SUPPORTS_16_FLOAT)
+    if (df == VX_TYPE_FLOAT16)
+        return floatToFP16;
+#endif
+    if (df == VX_TYPE_FLOAT32)
+        return floatToFP32;
+}
+
+/** @brief Loads image from a file and converts it to float.
+* supported formats: jpeg, png, bmp, psd, tga, gif, hdr, pic, ppm, pgm
+*  @param fileName - full path to the image file
+*  @param width - image width as it appears in the file (output)
+*  @param height - image height as it appears in the file (output)
+*  @param channels - the number of the image channels as it appears in the file (output)
+*  @return image in float
+*/
+float* loadImageFromFile(const char* fileName, int* width, int* height, int* channels)
+{
+    WriteLog("Loading image from '%s'...\n", fileName);
+    unsigned char* image = stbi_load(fileName, width, height, channels, 0);
+    if (!image)
+    {
+        WriteLog("Failed to load image from file %s", fileName);
+        return NULL;
+    }
+    
+    size_t imageSize = (*width) * (*height) * (*channels);
+    float* imageF = (float*) malloc((*width) * (*height) * (*channels) * sizeof(float));
+    for (size_t i = 0; i < imageSize; ++i)
+    {
+        imageF[i] = (float)image[i];
+    }
+    stbi_image_free(image);
+    return imageF;
+}
+
+/** @brief Loads image from a file.
+* supported formats: jpeg, png, bmp, psd, tga, gif, hdr, pic, ppm, pgm
+*  @param fileName - full path to the image file
+*  @param width - image width as it appears in the file (output)
+*  @param height - image height as it appears in the file (output)
+*  @param channels - the number of the image channels as it appears in the file (output)
+*  @return image in uint
+*/
+unsigned char* loadImageFromFileUInt(const char* fileName, int* width, int* height, int* channels)
+{
+    WriteLog("Loading image from '%s'...\n", fileName);
+    unsigned char* image = stbi_load(fileName, width, height, channels, 0);
+    if (!image)
+    {
+        WriteLog("Failed to load image from file %s", fileName);
+        return NULL;
+    }
+
+    return image;
+}
+
+/** @brief Frees the image loaded by loadImageFromFile
+*  @param image - image loaded by loadImageFromFile
+*  @return void
+*/
+void freeImage(float* image)
+{
+    if (image != NULL) free(image);
+}
+
+/** @brief Substracts mean image and then scale the image
+*  @param image - image in float
+*  @param width - image width
+*  @param height - image heigh
+*  @param channels - the number of the image channels
+*  @param meanValues - mean values to be subtracted from the image
+*  @param scale - scale factor
+*  @return void
+*/
+void subtractMeanImageAndScale(float* image, int width, int height, int channels, const float* meanValues, float scale)
+{
+    for (int h = 0; h < height; ++h)
+    {
+        for (int w = 0; w < width; ++w)
+        {
+            for (int c = 0; c < channels; ++c)
+            {
+                int offset = h * width * channels + w * channels + c;
+                image[offset] = (image[offset] - meanValues[c]) * scale;
+            }
+        }
+    }
+}
+
+/** @brief Substracts mean image
+*  @param image - image in float
+*  @param width - image width
+*  @param height - image heigh
+*  @param channels - the number of the image channels
+*  @param meanValues - mean values to be subtracted from the image
+*  @return void
+*/
+void subtractMeanImage(float* image, int width, int height, int channels, const float* meanValues)
+{
+    subtractMeanImageAndScale(image, width, height, channels, meanValues, 1.0);
+}
+
+/** @brief scale image
+*  @param image - image in float
+*  @param width - image width
+*  @param height - image heigh
+*  @param channels - the number of the image channels
+*  @param scale - scale factor
+*  @return void
+*/
+void scaleImage(float* image, int width, int height, int channels,  float scale)
+{
+    float meanValues[10] = { 0.0 };
+    subtractMeanImageAndScale(image, width, height, channels, meanValues, scale);
+}
+
+/** @brief loads image into MDData/Tensor
+*  @param mddata - MDData/Tensor where to load the image
+*  @param image - image to be loaded into the MDData/Tensor
+*  @param width - image width in elements/pixels
+*  @param height - image height in elements/pixels
+*  @param channels - image channels number
+*  @return vx_status - VX_SUCCESS in case of success; other value in case of failure
+*/
+vx_status imageToMDData(vx_tensor mddata, const float* image, int width, int height, int channels)
+{
+    if (channels != 3 && channels != 1)
+	{
+	    WriteLog("Trying to load image with %d channels. Currently only images with 1 or 3 channels are supported.\n", channels);
+		return VX_FAILURE;
+	}
+	
+	vx_size dims_num = 0;
+	vx_size dimensionsArray[VX_MAX_TENSOR_DIMS_CT] = { 0 };
+    vx_status status = vxQueryTensor(mddata, VX_TENSOR_NUMBER_OF_DIMS, &dims_num, sizeof(dims_num));
+    status |= vxQueryTensor(mddata, VX_TENSOR_DIMS, dimensionsArray, sizeof(dimensionsArray));
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot query MDData!\n");
+        return status;
+    }
+
+    if (dims_num < 3)
+    {
+        WriteLog("MDData has less than 3 dimensions. It cannot store an image\n");
+        return VX_FAILURE;
+    }
+	
+	if (width != dimensionsArray[1] || height != dimensionsArray[0] || channels != dimensionsArray[2])
+	{
+	    WriteLog("Image size %dx%dx%d does not suit MDData size %dx%dx%d\n", width, height, channels, dimensionsArray[1], dimensionsArray[0], dimensionsArray[1]);
+		return VX_FAILURE;
+	}
+
+    vx_enum dt;
+    status = vxQueryTensor(mddata, VX_TENSOR_DATA_TYPE, &dt, sizeof(dt));
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot query MDData format!\n");
+        return status;
+    }
+
+    void* mddataBasePtr = NULL;
+	const vx_size viewStart[VX_MAX_TENSOR_DIMS_CT] = { 0 };
+    mddataBasePtr = malloc(width*height*3*sizeof(vx_int16));
+    if (!mddataBasePtr) { WriteLog("ERROR: malloc failed..."); return VX_FAILURE; }
+    
+	size_t channelsOrderFix = channels == 1 ? 0 : 2;
+    void(*convertFromFloat)(float, char*) = convertFromFloatFunc(dt);
+    for (size_t h = 0; h < dimensionsArray[0]; ++h)
+    {
+        for (size_t w = 0; w < dimensionsArray[1]; ++w)
+        {
+
+            for (size_t d = 0; d < dimensionsArray[2]; ++d)
+            {
+                size_t imageOffset = h * dimensionsArray[1] * dimensionsArray[2] + w * dimensionsArray[2] + (channelsOrderFix - d);
+
+                size_t mddataOffset = sizeof(vx_int16) * (w + width * (h + height * d));
+                convertFromFloat(image[imageOffset], (char*)mddataBasePtr + mddataOffset);
+            }
+        }
+    }
+
+
+    vx_size strides[] = { sizeof(vx_int16), sizeof(vx_int16) * width, sizeof(vx_int16) * width * height };
+    status = vxCopyTensorPatch(mddata, 3, viewStart, dimensionsArray, strides, mddataBasePtr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+    if (status != VX_SUCCESS)
+    {
+        WriteLog("ERROR: cannot commit MDData patch!\n");
+        return status;
+    }
+
+    return VX_SUCCESS;
+}
+
+/** @brief loads classification text file. The file is a text file and has one class in each line
+*  @param fileFullPath - Full path to the classification file
+*  @param classesNum - Number of classes (lines) in the file (output).
+*  @return array of classes. class number is the index in the array
+*/
+char** loadClassificationFile(const char* fileFullPath, size_t* classesNum)
+{
+    FILE* fp = fopen(fileFullPath, "r");
+    if (fp == NULL)
+    {
+        WriteLog("ERROR: cannot open classification file %s\n", fileFullPath);
+        return NULL;
+    }
+    
+    //Get file size
+    fseek(fp, 0, SEEK_END); // seek to end of file
+    size_t fileSize = ftell(fp); // get current file pointer
+    fseek(fp, 0, SEEK_SET); // seek back to beginning of file
+    
+    char* fileContent = (char*)malloc(fileSize + 1);
+    if (fread(fileContent, 1, fileSize, fp) != fileSize)
+    {
+        WriteLog("Failed to read all data from file %s\n", fileFullPath);
+        fclose(fp);
+        free(fileContent);
+        return NULL;
+    }
+    fclose(fp);
+    
+    size_t classCount = 0;
+    for (size_t i = 0; i < fileSize; ++i)
+    {
+        if (fileContent[i] == '\n')
+        {
+            fileContent[i] = '\0';
+            classCount++;
+        }
+    }
+    if (fileContent[fileSize - 1] != '\0')
+    {
+        fileContent[fileSize] = '\0';
+        classCount++;
+    }
+    
+    char** classArray = (char**)malloc(classCount * sizeof(char*));
+    size_t classIndex = 0;
+    for (size_t i = 0; i < fileSize + 1; ++i)
+    {
+        if (classIndex < classCount) classArray[classIndex++] = fileContent + i;
+        while (i < fileSize && fileContent[i] != '\0') ++i;
+    }
+    *classesNum = classCount;
+    return classArray;
+}
+
+/** @brief Deletes the classification data loaded by loadClassificationFile
+*  @param classArray - classification data to be deleted
+*  @return void
+*/
+void deleteClassificationContect(char** classArray)
+{
+    if (classArray == NULL) return;
+    if (*classArray != NULL) free(*classArray);
+    free(classArray);
+}
+
+
+/** @brief Deletes the probabilities matrix created by getProbabilitiesFromMDData
+*  @param prob - The probabilities matrix
+*  @return void
+*/
+void deleteProbStructure(float** prob)
+{
+    if (prob == NULL) return;
+    if (*prob != NULL) free(*prob);
+    free(prob);
+}
+
+/** @brief Moves the highest sortNum probabilities to the beginning of the matrix
+*  @param prob - The probabilities matrix
+*  @param classesNum - The number of available classes
+*  @param sortNum - The number of the highest probabilities to be moved to the beginning
+*  @return void
+*/
+void moveHighestProbToTheBegin(float** prob, size_t classesNum, size_t sortNum)
+{
+    if (prob == NULL)
+	{
+	    WriteLog("Error in moveHighestProbToTheBegin, received NULL pointer\n");
+		return;
+	}
+	
+    for (size_t sortIndex = 0; sortIndex < sortNum; ++sortIndex)
+    {
+        size_t highProbIndex = sortIndex;
+        for (size_t probIndex = sortIndex; probIndex < classesNum; ++probIndex)
+        {
+            if (prob[probIndex][1] > prob[highProbIndex][1]) highProbIndex = probIndex;
+        }
+        if (highProbIndex != sortIndex)
+        {
+            float tempClass = prob[sortIndex][0];
+            float tempProb = prob[sortIndex][1];
+            prob[sortIndex][0] = prob[highProbIndex][0];
+            prob[sortIndex][1] = prob[highProbIndex][1];
+            prob[highProbIndex][0] = tempClass;
+            prob[highProbIndex][1] = tempProb;
+        }
+    }
+}
+
diff --git a/test_conformance/Networks/src/utilities.h b/test_conformance/Networks/src/utilities.h
new file mode 100644
index 0000000..c3db1fb
--- /dev/null
+++ b/test_conformance/Networks/src/utilities.h
@@ -0,0 +1,108 @@
+#pragma once
+
+#include "VX/vx.h"
+#include <VX/vx_khr_nn.h>
+
+/** @brief Loads image from a file and converts it to float.
+* supported formats: jpeg, png, bmp, psd, tga, gif, hdr, pic, ppm, pgm
+*  @param fileName - full path to the image file
+*  @param width - image width as it appears in the file (output)
+*  @param height - image height as it appears in the file (output)
+*  @param channels - the number of the image channels as it appears in the file (output)
+*  @return image in float
+*/
+float* loadImageFromFile(const char* fileName, int* width, int* height, int* channels);
+
+
+/** @brief Loads image from a file .
+* supported formats: jpeg, png, bmp, psd, tga, gif, hdr, pic, ppm, pgm
+*  @param fileName - full path to the image file
+*  @param width - image width as it appears in the file (output)
+*  @param height - image height as it appears in the file (output)
+*  @param channels - the number of the image channels as it appears in the file (output)
+*  @return image in uint
+*/
+unsigned char* loadImageFromFileUInt(const char* fileName, int* width, int* height, int* channels);
+
+/** @brief Frees the image loaded by loadImageFromFile
+*  @param image - image loaded by loadImageFromFile
+*  @return void
+*/
+void freeImage(float* image);
+
+/** @brief Substracts mean image and then scale the image
+*  @param image - image in float
+*  @param width - image width
+*  @param height - image heigh
+*  @param channels - the number of the image channels
+*  @param meanValues - mean values to be subtracted from the image
+*  @param scale - scale factor
+*  @return void
+*/
+void subtractMeanImageAndScale(float* image, int width, int height, int channels, const float* meanValues, float scale);
+
+/** @brief Substracts mean image
+*  @param image - image in float
+*  @param width - image width
+*  @param height - image heigh
+*  @param channels - the number of the image channels
+*  @param meanValues - mean values to be subtracted from the image
+*  @return void
+*/
+void subtractMeanImage(float* image, int width, int height, int channels, const float* meanValues);
+
+/** @brief scale image
+*  @param image - image in float
+*  @param width - image width
+*  @param height - image heigh
+*  @param channels - the number of the image channels
+*  @param scale - scale factor
+*  @return void
+*/
+void scaleImage(float* image, int width, int height, int channels,  float scale);
+
+/** @brief loads image into MDData/Tensor
+*  @param mddata - MDData/Tensor where to load the image
+*  @param image - image to be loaded into the MDData/Tensor
+*  @param width - image width in elements/pixels
+*  @param height - image height in elements/pixels
+*  @param channels - image channels number
+*  @return vx_status - VX_SUCCESS in case of success; other value in case of failure
+*/
+vx_status imageToMDData(vx_tensor mddata, const float* image, int width, int height, int channels);
+
+/** @brief loads classification text file. The file is a text file and has one class in each line
+*  @param fileFullPath - Full path to the classification file
+*  @param classesNum - Number of classes (lines) in the file (output).
+*  @return array of classes. class number is the index in the array
+*/
+char** loadClassificationFile(const char* fileFullPath, size_t* classesNum);
+
+/** @brief Deletes the classification data loaded by loadClassificationFile
+*  @param classArray - classification data to be deleted
+*  @return void
+*/
+void deleteClassificationContect(char** classArray);
+
+/** @brief Reads the probabilities from MDData/Tensor and store it in a matrix
+*  @param mddata - MDData/Tensor from where to read the probabilities
+*  @param classesNum - Number of available classes
+*  @param probSum - Sum of all the probabilities (output)
+*  @return matrix of probabilities 
+*/
+float** getProbabilitiesFromMDData(vx_tensor mddata, size_t classesNum, float* probSum);
+
+/** @brief Deletes the probabilities matrix created by getProbabilitiesFromMDData
+*  @param prob - The probabilities matrix
+*  @return void
+*/
+void deleteProbStructure(float** prob);
+
+/** @brief Moves the highest sortNum probabilities to the beginning of the matrix
+*  @param prob - The probabilities matrix
+*  @param classesNum - The number of available classes
+*  @param sortNum - The number of the highest probabilities to be moved to the beginning
+*  @return void
+*/
+void moveHighestProbToTheBegin(float** prob, size_t classesNum, size_t sortNum);
+
diff --git a/test_conformance/concerto.mak b/test_conformance/concerto.mak
new file mode 100644
index 0000000..0b365c3
--- /dev/null
+++ b/test_conformance/concerto.mak
@@ -0,0 +1,32 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+include $(PRELUDE)
+TARGET      := vx_test_conformance
+TARGETTYPE  := exe
+CSOURCES    := $(call all-c-files)
+IDIRS       += $(HOST_ROOT)/cts
+SHARED_LIBS := openvx vxu
+STATIC_LIBS := vx_conformance_engine
+ifneq (,$(findstring OPENVX_USE_NN_16,$(SYSDEFS)))
+STATIC_LIBS +=  network
+endif
+ifeq ($(HOST_COMPILER),GCC)
+CFLAGS += -Wno-unused-function
+endif
+include $(FINALE)
diff --git a/test_conformance/shared_functions.h b/test_conformance/shared_functions.h
new file mode 100644
index 0000000..f827249
--- /dev/null
+++ b/test_conformance/shared_functions.h
@@ -0,0 +1,25 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+CT_Image box3x3_create_reference_image(CT_Image src, vx_border_t border);
+void sobel3x3_create_reference_image(CT_Image src, vx_border_t border, CT_Image *p_dst_x, CT_Image *p_dst_y);
+
+void gaussian_pyramid_fill_reference(CT_Image input, vx_pyramid pyr, vx_size levels, vx_float32 scale, vx_border_t border);
diff --git a/test_conformance/test_accumulate.c b/test_conformance/test_accumulate.c
new file mode 100644
index 0000000..164dc87
--- /dev/null
+++ b/test_conformance/test_accumulate.c
@@ -0,0 +1,203 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(Accumulate, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Accumulate, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, accum = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum = vxCreateImage(context, 128, 128, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxAccumulateImageNode(graph, input, accum), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&accum));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(accum == 0);
+    ASSERT(input == 0);
+}
+
+
+static CT_Image accumulate_generate_random_8u(int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+
+static CT_Image accumulate_generate_random_16s(int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_S16, &CT()->seed_, -32768, 32768));
+
+    return image;
+}
+
+
+static void accumulate_reference(CT_Image input, CT_Image accum)
+{
+    CT_FILL_IMAGE_16S(return, accum,
+            {
+                uint8_t* input_data = CT_IMAGE_DATA_PTR_8U(input, x, y);
+                int32_t res32 = ((int32_t)(*dst_data)) + ((int32_t)(*input_data));
+                int16_t res = CT_SATURATE_S16(res32);
+                *dst_data = res;
+            });
+}
+
+
+static void accumulate_check(CT_Image input, CT_Image accum_src, CT_Image accum_dst)
+{
+    CT_Image accum_ref = NULL;
+
+    ASSERT(input && accum_src && accum_dst);
+
+    ASSERT_NO_FAILURE(accum_ref = ct_image_create_clone(accum_src));
+
+    ASSERT_NO_FAILURE(accumulate_reference(input, accum_ref));
+
+    EXPECT_EQ_CTIMAGE(accum_ref, accum_dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== Input ===\n");
+        ct_dump_image_info(input);
+        printf("=== Accum source ===\n");
+        ct_dump_image_info(accum_src);
+        printf("=== Accum RESULT ===\n");
+        ct_dump_image_info(accum_dst);
+        printf("=== EXPECTED RESULT ===\n");
+        ct_dump_image_info(accum_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    int dummy_;
+    int width, height;
+} Arg;
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ARG, 0)
+
+TEST_WITH_ARG(Accumulate, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, accum_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image input = NULL, accum_src = NULL, accum_dst = NULL;
+
+    ASSERT_NO_FAILURE(input = accumulate_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_NO_FAILURE(accum_src = accumulate_generate_random_16s(arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum_image = ct_image_to_vx_image(accum_src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxAccumulateImageNode(graph, input_image, accum_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(accum_dst = ct_image_from_vx_image(accum_image));
+
+    ASSERT_NO_FAILURE(accumulate_check(input, accum_src, accum_dst));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&accum_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(accum_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(Accumulate, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, accum_image = 0;
+
+    CT_Image input = NULL, accum_src = NULL, accum_dst = NULL;
+
+    ASSERT_NO_FAILURE(input = accumulate_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_NO_FAILURE(accum_src = accumulate_generate_random_16s(arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum_image = ct_image_to_vx_image(accum_src, context), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuAccumulateImage(context, input_image, accum_image));
+
+    ASSERT_NO_FAILURE(accum_dst = ct_image_from_vx_image(accum_image));
+
+    ASSERT_NO_FAILURE(accumulate_check(input, accum_src, accum_dst));
+
+    VX_CALL(vxReleaseImage(&accum_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(accum_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(Accumulate,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_accumulatesquare.c b/test_conformance/test_accumulatesquare.c
new file mode 100644
index 0000000..6f4fa69
--- /dev/null
+++ b/test_conformance/test_accumulatesquare.c
@@ -0,0 +1,219 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(AccumulateSquare, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(AccumulateSquare, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, accum = 0;
+    vx_uint32 shift = 8;
+    vx_scalar shift_scalar = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum = vxCreateImage(context, 128, 128, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(shift_scalar = vxCreateScalar(context, VX_TYPE_UINT32, &shift), VX_TYPE_SCALAR);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxAccumulateSquareImageNode(graph, input, shift_scalar, accum), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&accum));
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleaseScalar(&shift_scalar));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(accum == 0);
+    ASSERT(input == 0);
+}
+
+
+static CT_Image accumulate_square_generate_random_8u(int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+
+static CT_Image accumulate_square_generate_random_16s_non_negative(int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_S16, &CT()->seed_, 0, 32768));
+
+    return image;
+}
+
+
+static void accumulate_square_reference(CT_Image input, vx_uint32 shift, CT_Image accum)
+{
+    CT_FILL_IMAGE_16S(return, accum,
+            {
+                uint8_t* input_data = CT_IMAGE_DATA_PTR_8U(input, x, y);
+                int32_t res32 = ((int32_t)(*dst_data)) + ((((int32_t)(*input_data))*((int32_t)(*input_data))) >> shift);
+                int16_t res = CT_SATURATE_S16(res32);
+                *dst_data = res;
+            });
+}
+
+
+static void accumulate_square_check(CT_Image input, vx_uint32 shift, CT_Image accum_src, CT_Image accum_dst)
+{
+    CT_Image accum_ref = NULL;
+
+    ASSERT(input && accum_src && accum_dst);
+
+    ASSERT_NO_FAILURE(accum_ref = ct_image_create_clone(accum_src));
+
+    ASSERT_NO_FAILURE(accumulate_square_reference(input, shift, accum_ref));
+
+    EXPECT_EQ_CTIMAGE(accum_ref, accum_dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== Input ===\n");
+        ct_dump_image_info(input);
+        printf("=== Accum source ===\n");
+        ct_dump_image_info(accum_src);
+        printf("=== Accum RESULT ===\n");
+        ct_dump_image_info(accum_dst);
+        printf("=== EXPECTED RESULT ===\n");
+        ct_dump_image_info(accum_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    vx_uint32 shift;
+    int width, height;
+} Arg;
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random/shift0", ADD_SIZE_SMALL_SET, ARG, 0), \
+    CT_GENERATE_PARAMETERS("random/shift1", ADD_SIZE_SMALL_SET, ARG, 1), \
+    CT_GENERATE_PARAMETERS("random/shift8", ADD_SIZE_SMALL_SET, ARG, 8), \
+    CT_GENERATE_PARAMETERS("random/shift15", ADD_SIZE_SMALL_SET, ARG, 15)
+
+TEST_WITH_ARG(AccumulateSquare, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, accum_image = 0;
+    vx_scalar shift_scalar = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image input = NULL, accum_src = NULL, accum_dst = NULL;
+
+    ASSERT_VX_OBJECT(shift_scalar = vxCreateScalar(context, VX_TYPE_UINT32, &arg_->shift), VX_TYPE_SCALAR);
+
+    ASSERT_NO_FAILURE(input = accumulate_square_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_NO_FAILURE(accum_src = accumulate_square_generate_random_16s_non_negative(arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum_image = ct_image_to_vx_image(accum_src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxAccumulateSquareImageNode(graph, input_image, shift_scalar, accum_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(accum_dst = ct_image_from_vx_image(accum_image));
+
+    ASSERT_NO_FAILURE(accumulate_square_check(input, arg_->shift, accum_src, accum_dst));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&accum_image));
+    VX_CALL(vxReleaseImage(&input_image));
+    VX_CALL(vxReleaseScalar(&shift_scalar));
+
+    ASSERT(accum_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(AccumulateSquare, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, accum_image = 0;
+    vx_scalar shift_scalar = 0;
+
+    CT_Image input = NULL, accum_src = NULL, accum_dst = NULL;
+
+    ASSERT_VX_OBJECT(shift_scalar = vxCreateScalar(context, VX_TYPE_UINT32, &arg_->shift), VX_TYPE_SCALAR);
+
+    ASSERT_NO_FAILURE(input = accumulate_square_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_NO_FAILURE(accum_src = accumulate_square_generate_random_16s_non_negative(arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum_image = ct_image_to_vx_image(accum_src, context), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuAccumulateSquareImage(context, input_image, shift_scalar, accum_image));
+
+    ASSERT_NO_FAILURE(accum_dst = ct_image_from_vx_image(accum_image));
+
+    ASSERT_NO_FAILURE(accumulate_square_check(input, arg_->shift, accum_src, accum_dst));
+
+    VX_CALL(vxReleaseImage(&accum_image));
+    VX_CALL(vxReleaseImage(&input_image));
+    VX_CALL(vxReleaseScalar(&shift_scalar));
+
+    ASSERT(accum_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(AccumulateSquare,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_accumulateweighted.c b/test_conformance/test_accumulateweighted.c
new file mode 100644
index 0000000..59b7c02
--- /dev/null
+++ b/test_conformance/test_accumulateweighted.c
@@ -0,0 +1,211 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(AccumulateWeighted, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(AccumulateWeighted, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, accum = 0;
+    vx_float32 alpha = 0.5f;
+    vx_scalar alpha_scalar = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(alpha_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &alpha), VX_TYPE_SCALAR);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxAccumulateWeightedImageNode(graph, input, alpha_scalar, accum), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&accum));
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleaseScalar(&alpha_scalar));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(accum == 0);
+    ASSERT(input == 0);
+}
+
+
+static CT_Image accumulate_weighted_generate_random_8u(int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+
+static void accumulate_weighted_reference(CT_Image input, vx_float32 alpha, CT_Image accum)
+{
+    CT_FILL_IMAGE_8U(return, accum,
+            {
+                uint8_t* input_data = CT_IMAGE_DATA_PTR_8U(input, x, y);
+                vx_float32 res = (1 - alpha) * ((vx_float32)(int32_t)(*dst_data)) + (alpha) * ((vx_float32)(int32_t)(*input_data));
+                uint8_t res8 = CT_SATURATE_U8(res);
+                *dst_data = res8;
+            });
+}
+
+
+static void accumulate_weighted_check(CT_Image input, vx_float32 alpha, CT_Image accum_src, CT_Image accum_dst)
+{
+    CT_Image accum_ref = NULL;
+
+    ASSERT(input && accum_src && accum_dst);
+
+    ASSERT_NO_FAILURE(accum_ref = ct_image_create_clone(accum_src));
+
+    ASSERT_NO_FAILURE(accumulate_weighted_reference(input, alpha, accum_ref));
+
+    EXPECT_CTIMAGE_NEAR(accum_ref, accum_dst, 1);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== Input ===\n");
+        ct_dump_image_info(input);
+        printf("=== Accum source ===\n");
+        ct_dump_image_info(accum_src);
+        printf("=== Accum RESULT ===\n");
+        ct_dump_image_info(accum_dst);
+        printf("=== EXPECTED RESULT ===\n");
+        ct_dump_image_info(accum_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    vx_float32 alpha;
+    int width, height;
+} Arg;
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random/alpha0.5f", ADD_SIZE_SMALL_SET, ARG, 0.5f), \
+    CT_GENERATE_PARAMETERS("random/alpha0.0f", ADD_SIZE_SMALL_SET, ARG, 0.0f), \
+    CT_GENERATE_PARAMETERS("random/alpha1.0f", ADD_SIZE_SMALL_SET, ARG, 1.0f), \
+    CT_GENERATE_PARAMETERS("random/alpha0.25f", ADD_SIZE_SMALL_SET, ARG, 0.25f), \
+    CT_GENERATE_PARAMETERS("random/alpha0.95f", ADD_SIZE_SMALL_SET, ARG, 0.95f), \
+    CT_GENERATE_PARAMETERS("random/alpha0.999f", ADD_SIZE_SMALL_SET, ARG, 0.999f), \
+    CT_GENERATE_PARAMETERS("random/alpha0.001f", ADD_SIZE_SMALL_SET, ARG, 0.001f)
+
+TEST_WITH_ARG(AccumulateWeighted, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, accum_image = 0;
+    vx_scalar alpha_scalar = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image input = NULL, accum_src = NULL, accum_dst = NULL;
+
+    ASSERT_VX_OBJECT(alpha_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &arg_->alpha), VX_TYPE_SCALAR);
+
+    ASSERT_NO_FAILURE(input = accumulate_weighted_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_NO_FAILURE(accum_src = accumulate_weighted_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum_image = ct_image_to_vx_image(accum_src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxAccumulateWeightedImageNode(graph, input_image, alpha_scalar, accum_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(accum_dst = ct_image_from_vx_image(accum_image));
+
+    ASSERT_NO_FAILURE(accumulate_weighted_check(input, arg_->alpha, accum_src, accum_dst));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&accum_image));
+    VX_CALL(vxReleaseImage(&input_image));
+    VX_CALL(vxReleaseScalar(&alpha_scalar));
+
+    ASSERT(accum_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(AccumulateWeighted, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, accum_image = 0;
+    vx_scalar alpha_scalar = 0;
+
+    CT_Image input = NULL, accum_src = NULL, accum_dst = NULL;
+
+    ASSERT_VX_OBJECT(alpha_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &arg_->alpha), VX_TYPE_SCALAR);
+
+    ASSERT_NO_FAILURE(input = accumulate_weighted_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_NO_FAILURE(accum_src = accumulate_weighted_generate_random_8u(arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(accum_image = ct_image_to_vx_image(accum_src, context), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuAccumulateWeightedImage(context, input_image, alpha_scalar, accum_image));
+
+    ASSERT_NO_FAILURE(accum_dst = ct_image_from_vx_image(accum_image));
+
+    ASSERT_NO_FAILURE(accumulate_weighted_check(input, arg_->alpha, accum_src, accum_dst));
+
+    VX_CALL(vxReleaseImage(&accum_image));
+    VX_CALL(vxReleaseImage(&input_image));
+    VX_CALL(vxReleaseScalar(&alpha_scalar));
+
+    ASSERT(accum_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(AccumulateWeighted,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_addsub.c b/test_conformance/test_addsub.c
new file mode 100644
index 0000000..dff1bd0
--- /dev/null
+++ b/test_conformance/test_addsub.c
@@ -0,0 +1,677 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+//#define CT_EXECUTE_ASYNC
+
+static void referenceAdd(CT_Image src0, CT_Image src1, CT_Image dst, enum vx_convert_policy_e policy)
+{
+    int32_t min_bound, max_bound;
+    uint32_t i, j;
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+
+    switch (policy)
+    {
+        case VX_CONVERT_POLICY_SATURATE:
+            if (dst->format == VX_DF_IMAGE_U8)
+            {
+                min_bound = 0;
+                max_bound = 255;
+            }
+            else if (dst->format == VX_DF_IMAGE_S16)
+            {
+                min_bound = -32768;
+                max_bound =  32767;
+            }
+            else
+                FAIL("Unsupported result format: (%.4s)", &dst->format);
+            break;
+        case VX_CONVERT_POLICY_WRAP:
+            min_bound = INT32_MIN;
+            max_bound = INT32_MAX;
+            break;
+        default: FAIL("Unknown owerflow policy"); break;
+    };
+
+#define ADD_LOOP(s0, s1, r)                                                                                     \
+    do{                                                                                                         \
+        for (i = 0; i < dst->height; ++i)                                                                       \
+            for (j = 0; j < dst->width; ++j)                                                                    \
+            {                                                                                                   \
+                int32_t val = src0->data.s0[i * src0->stride + j];                                              \
+                val += src1->data.s1[i * src1->stride + j];                                                     \
+                dst->data.r[i * dst->stride + j] = (val < min_bound ? min_bound :                               \
+                                                                        (val > max_bound ? max_bound : val));   \
+            }                                                                                                   \
+    }while(0)
+
+    if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_U8)
+        ADD_LOOP(y, y, y);
+    else if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16)
+        ADD_LOOP(y, y, s16);
+    else if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_S16)
+        ADD_LOOP(y, s16, s16);
+    else if (src0->format == VX_DF_IMAGE_S16 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16)
+        ADD_LOOP(s16, y, s16);
+    else if (src0->format == VX_DF_IMAGE_S16 && src1->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_S16)
+        ADD_LOOP(s16, s16, s16);
+    else
+        FAIL("Unsupported combination of argument formats: %.4s + %.4s = %.4s", &src0->format, &src1->format, &dst->format);
+
+#undef ADD_LOOP
+}
+
+static void referenceSubtract(CT_Image src0, CT_Image src1, CT_Image dst, enum vx_convert_policy_e policy)
+{
+    int32_t min_bound, max_bound;
+    uint32_t i, j;
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+
+    switch (policy)
+    {
+        case VX_CONVERT_POLICY_SATURATE:
+            if (dst->format == VX_DF_IMAGE_U8)
+            {
+                min_bound = 0;
+                max_bound = 255;
+            }
+            else if (dst->format == VX_DF_IMAGE_S16)
+            {
+                min_bound = -32768;
+                max_bound =  32767;
+            }
+            else
+                FAIL("Unsupported result format: (%.4s)", &dst->format);
+            break;
+        case VX_CONVERT_POLICY_WRAP:
+            min_bound = INT32_MIN;
+            max_bound = INT32_MAX;
+            break;
+        default: FAIL("Unknown owerflow policy"); break;
+    };
+
+#define SUB_LOOP(s0, s1, r)                                                                                     \
+    do{                                                                                                         \
+        for (i = 0; i < dst->height; ++i)                                                                       \
+            for (j = 0; j < dst->width; ++j)                                                                    \
+            {                                                                                                   \
+                int32_t val = src0->data.s0[i * src0->stride + j];                                              \
+                val -= src1->data.s1[i * src1->stride + j];                                                     \
+                dst->data.r[i * dst->stride + j] = (val < min_bound ? min_bound :                               \
+                                                                        (val > max_bound ? max_bound : val));   \
+            }                                                                                                   \
+    }while(0)
+
+    if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_U8)
+        SUB_LOOP(y, y, y);
+    else if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16)
+        SUB_LOOP(y, y, s16);
+    else if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_S16)
+        SUB_LOOP(y, s16, s16);
+    else if (src0->format == VX_DF_IMAGE_S16 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16)
+        SUB_LOOP(s16, y, s16);
+    else if (src0->format == VX_DF_IMAGE_S16 && src1->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_S16)
+        SUB_LOOP(s16, s16, s16);
+    else
+        FAIL("Unsupported combination of argument formats: %.4s + %.4s = %.4s", &src0->format, &src1->format, &dst->format);
+
+#undef SUB_LOOP
+}
+
+typedef vx_status (VX_API_CALL *vxuArithmFunction)(vx_context, vx_image, vx_image, vx_enum, vx_image);
+typedef vx_node   (VX_API_CALL *vxArithmFunction) (vx_graph, vx_image, vx_image, vx_enum, vx_image);
+typedef void      (*referenceFunction)(CT_Image, CT_Image, CT_Image, enum vx_convert_policy_e);
+
+#define SGN_Add "+"
+#define SGN_Subtract "-"
+
+typedef struct {
+    const char* name;
+    enum vx_convert_policy_e policy;
+    vx_df_image arg1_format;
+    int arg1;
+    vx_df_image arg2_format;
+    int arg2;
+    vx_df_image result_format;
+    int expected_result;
+    vxuArithmFunction vxuFunc;
+    vxArithmFunction vxFunc;
+} overflow_arg;
+
+#define OVERFLOW_ARG(func, p, f1, f2, fr, v1, v2, vr) \
+    ARG(#func ": " #p " " #f1 "(" #v1 ") " SGN_##func " " #f2 "(" #v2 ") = " #fr "(" #vr ")", \
+        VX_CONVERT_POLICY_##p, VX_DF_IMAGE_##f1, v1, VX_DF_IMAGE_##f2, v2, VX_DF_IMAGE_##fr, vr, vxu##func, vx##func##Node)\
+
+#define ADDSUB_OVERFLOW_ARGS                                                                        \
+    OVERFLOW_ARG(Add, SATURATE, U8, U8, U8, 175, 210, 255), /* with overflow */                     \
+    OVERFLOW_ARG(Add, SATURATE, U8, U8, U8, 0,   255, 255), /* normal        */                     \
+    OVERFLOW_ARG(Add, WRAP,     U8, U8, U8, 175, 210, 129), /* with overflow */                     \
+    OVERFLOW_ARG(Add, WRAP,     U8, U8, U8, 0,   255, 255), /* normal        */                     \
+                                                                                                    \
+    OVERFLOW_ARG(Add, SATURATE, U8, U8, S16, 175, 210, 385), /* normal */                           \
+    OVERFLOW_ARG(Add, WRAP,     U8, U8, S16, 255, 255, 510), /* normal */                           \
+                                                                                                    \
+    OVERFLOW_ARG(Add, SATURATE, U8, S16, S16, 175, 32760, 32767),  /* with overflow */              \
+    OVERFLOW_ARG(Add, SATURATE, U8, S16, S16, 175, -1000, -825),   /* normal        */              \
+    OVERFLOW_ARG(Add, WRAP,     U8, S16, S16, 1,   32767, -32768), /* with overflow */              \
+    OVERFLOW_ARG(Add, WRAP,     U8, S16, S16, 255, -1000, -745),   /* normal        */              \
+                                                                                                    \
+    OVERFLOW_ARG(Add, SATURATE, S16, U8, S16, 32513, 255, 32767),  /* with overflow */              \
+    OVERFLOW_ARG(Add, SATURATE, S16, U8, S16, 32512, 255, 32767),  /* normal        */              \
+    OVERFLOW_ARG(Add, WRAP,     S16, U8, S16, 32514, 255, -32767), /* with overflow */              \
+    OVERFLOW_ARG(Add, WRAP,     S16, U8, S16, 0,     0,   0),      /* normal        */              \
+                                                                                                    \
+    OVERFLOW_ARG(Add, SATURATE, S16, S16, S16,  32000, -32000,  0),     /* normal         */        \
+    OVERFLOW_ARG(Add, SATURATE, S16, S16, S16,  32000,  32000,  32767), /* with overflow  */        \
+    OVERFLOW_ARG(Add, SATURATE, S16, S16, S16, -32000, -32000, -32768), /* with underflow */        \
+    OVERFLOW_ARG(Add, WRAP,     S16, S16, S16, -32768,  32767, -1),     /* normal         */        \
+    OVERFLOW_ARG(Add, WRAP,     S16, S16, S16,  32767,  32767, -2),     /* with overflow  */        \
+    OVERFLOW_ARG(Add, WRAP,     S16, S16, S16, -17000, -17000,  31536), /* with underflow */        \
+                                                                                                    \
+    OVERFLOW_ARG(Subtract, SATURATE, U8, U8, U8, 175, 210, 0),   /* with underflow */               \
+    OVERFLOW_ARG(Subtract, SATURATE, U8, U8, U8, 255,  55, 200), /* normal         */               \
+    OVERFLOW_ARG(Subtract, WRAP,     U8, U8, U8, 175, 210, 221), /* with underflow */               \
+    OVERFLOW_ARG(Subtract, WRAP,     U8, U8, U8, 250, 240, 10),  /* normal         */               \
+                                                                                                    \
+    OVERFLOW_ARG(Subtract, SATURATE, U8, U8, S16, 175, 210, -35), /* normal */                      \
+    OVERFLOW_ARG(Subtract, WRAP,     U8, U8, S16, 254, 255, -1),  /* normal */                      \
+                                                                                                    \
+    OVERFLOW_ARG(Subtract, SATURATE, U8, S16, S16, 175, -32760, 32767),  /* with overflow */        \
+    OVERFLOW_ARG(Subtract, SATURATE, U8, S16, S16, 175, 1000, -825),     /* normal        */        \
+    OVERFLOW_ARG(Subtract, WRAP,     U8, S16, S16, 1,   -32767, -32768), /* with overflow */        \
+    OVERFLOW_ARG(Subtract, WRAP,     U8, S16, S16, 255, 1000, -745),     /* normal        */        \
+                                                                                                    \
+    OVERFLOW_ARG(Subtract, SATURATE, S16, U8, S16, -32514, 255, -32768), /* with underflow */       \
+    OVERFLOW_ARG(Subtract, SATURATE, S16, U8, S16, -32513, 255, -32768), /* normal         */       \
+    OVERFLOW_ARG(Subtract, WRAP,     S16, U8, S16, -32514, 255, 32767),  /* with underflow */       \
+    OVERFLOW_ARG(Subtract, WRAP,     S16, U8, S16,  0,     0,   0),      /* normal         */       \
+                                                                                                    \
+    OVERFLOW_ARG(Subtract, SATURATE, S16, S16, S16,  32000,  32000,  0),     /* normal         */   \
+    OVERFLOW_ARG(Subtract, SATURATE, S16, S16, S16,  32000, -32000,  32767), /* with overflow  */   \
+    OVERFLOW_ARG(Subtract, SATURATE, S16, S16, S16, -32000,  32000, -32768), /* with underflow */   \
+    OVERFLOW_ARG(Subtract, WRAP,     S16, S16, S16, -32768, -32767, -1),     /* normal         */   \
+    OVERFLOW_ARG(Subtract, WRAP,     S16, S16, S16,  32767, -32767, -2),     /* with overflow  */   \
+    OVERFLOW_ARG(Subtract, WRAP,     S16, S16, S16, -17000,  17000,  31536), /* with underflow */
+
+typedef struct {
+    const char* name;
+    enum vx_convert_policy_e policy;
+    int width, height;
+    vx_df_image arg1_format, arg2_format, result_format;
+    vxuArithmFunction vxuFunc;
+    vxArithmFunction vxFunc;
+    referenceFunction referenceFunc;
+} fuzzy_arg, formats_arg;
+
+#define FUZZY_ARG(func, p, w, h, f1, f2, fr)        \
+    ARG(#func ": " #p " " #w "x" #h " " #f1 SGN_##func #f2 "=" #fr,   \
+        VX_CONVERT_POLICY_##p, w, h, VX_DF_IMAGE_##f1, VX_DF_IMAGE_##f2, VX_DF_IMAGE_##fr, vxu##func, vx##func##Node, reference##func)
+
+#define FORMATS_ARG(func, p, f1, f2, fr)  \
+    ARG(#func ": " #p " " #f1 SGN_##func #f2 "=" #fr, \
+        VX_CONVERT_POLICY_##p, 0, 0, VX_DF_IMAGE_##f1, VX_DF_IMAGE_##f2, VX_DF_IMAGE_##fr, vxu##func, vx##func##Node, reference##func)
+
+#define ARITHM_INVALID_FORMATS(func)            \
+    FORMATS_ARG(func, SATURATE, S16, S16, U8),  \
+    FORMATS_ARG(func, SATURATE, S16, U8,  U8),  \
+    FORMATS_ARG(func, SATURATE, U8,  S16, U8),  \
+    FORMATS_ARG(func, WRAP, S16, S16, U8),      \
+    FORMATS_ARG(func, WRAP, S16, U8,  U8),      \
+    FORMATS_ARG(func, WRAP, U8,  S16, U8)
+
+#define ARITHM_INFERENCE_FORMATS(func)          \
+    FORMATS_ARG(func, SATURATE, S16, S16, S16), \
+    FORMATS_ARG(func, SATURATE, S16, U8,  S16), \
+    FORMATS_ARG(func, SATURATE, U8,  S16, S16), \
+    FORMATS_ARG(func, SATURATE, U8,  U8,  S16), \
+    FORMATS_ARG(func, WRAP, S16, S16, S16),     \
+    FORMATS_ARG(func, WRAP, S16, U8,  S16),     \
+    FORMATS_ARG(func, WRAP, U8,  S16, S16),     \
+    FORMATS_ARG(func, WRAP, U8,  U8,  S16)
+
+#define ARITHM_VALID_FORMATS(func)              \
+    ARITHM_INFERENCE_FORMATS(func),             \
+    FORMATS_ARG(func, SATURATE, U8, U8, U8),    \
+    FORMATS_ARG(func, WRAP, U8, U8, U8)
+
+#define ARITHM_FUZZY_ARGS(func)                         \
+    FUZZY_ARG(func, SATURATE, 640, 480, U8, U8, U8),    \
+    FUZZY_ARG(func, SATURATE, 640, 480, U8, U8, S16),   \
+    FUZZY_ARG(func, SATURATE, 640, 480, U8, S16, S16),  \
+    FUZZY_ARG(func, SATURATE, 640, 480, S16, U8, S16),  \
+    FUZZY_ARG(func, SATURATE, 640, 480, S16, S16, S16), \
+                                                        \
+    FUZZY_ARG(func, WRAP, 640, 480, U8, U8, U8),        \
+    FUZZY_ARG(func, WRAP, 640, 480, U8, U8, S16),       \
+    FUZZY_ARG(func, WRAP, 640, 480, U8, S16, S16),      \
+    FUZZY_ARG(func, WRAP, 640, 480, S16, U8, S16),      \
+    FUZZY_ARG(func, WRAP, 640, 480, S16, S16, S16),     \
+                                                        \
+    ARG_EXTENDED_BEGIN(),                               \
+    FUZZY_ARG(func, SATURATE, 15, 15, U8, U8, U8),      \
+    FUZZY_ARG(func, SATURATE, 15, 15, U8, U8, S16),     \
+    FUZZY_ARG(func, SATURATE, 15, 15, U8, S16, S16),    \
+    FUZZY_ARG(func, SATURATE, 15, 15, S16, U8, S16),    \
+    FUZZY_ARG(func, SATURATE, 15, 15, S16, S16, S16),   \
+                                                        \
+    FUZZY_ARG(func, SATURATE, 1280, 720, U8, U8, U8),   \
+    FUZZY_ARG(func, SATURATE, 1280, 720, U8, U8, S16),  \
+    FUZZY_ARG(func, SATURATE, 1280, 720, U8, S16, S16), \
+    FUZZY_ARG(func, SATURATE, 1280, 720, S16, U8, S16), \
+    FUZZY_ARG(func, SATURATE, 1280, 720, S16, S16, S16),\
+                                                        \
+    FUZZY_ARG(func, WRAP, 15, 15, U8, U8, U8),          \
+    FUZZY_ARG(func, WRAP, 15, 15, U8, U8, S16),         \
+    FUZZY_ARG(func, WRAP, 15, 15, U8, S16, S16),        \
+    FUZZY_ARG(func, WRAP, 15, 15, S16, U8, S16),        \
+    FUZZY_ARG(func, WRAP, 15, 15, S16, S16, S16),       \
+                                                        \
+    FUZZY_ARG(func, WRAP, 1280, 720, U8, U8, U8),       \
+    FUZZY_ARG(func, WRAP, 1280, 720, U8, U8, S16),      \
+    FUZZY_ARG(func, WRAP, 1280, 720, U8, S16, S16),     \
+    FUZZY_ARG(func, WRAP, 1280, 720, S16, U8, S16),     \
+    FUZZY_ARG(func, WRAP, 1280, 720, S16, S16, S16),    \
+    ARG_EXTENDED_END()
+
+TESTCASE(vxuAddSub, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxAddSub,  CT_VXContext, ct_setup_vx_context, 0)
+
+TEST_WITH_ARG(vxuAddSub, testNegativeFormat, formats_arg, ARITHM_INVALID_FORMATS(Add), ARITHM_INVALID_FORMATS(Subtract))
+{
+    vx_image src1, src2, dst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, 32, 32, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, 32, 32, arg_->arg2_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    // The output image can be VX_DF_IMAGE_U8 only if both source images are
+    // VX_DF_IMAGE_U8 and the output image is explicitly set to VX_DF_IMAGE_U8. It is
+    // otherwise VX_DF_IMAGE_S16.
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1, src2, arg_->policy, dst));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+}
+
+TEST_WITH_ARG(vxAddSub, testNegativeFormat, formats_arg, ARITHM_INVALID_FORMATS(Add), ARITHM_INVALID_FORMATS(Subtract))
+{
+    vx_image src1, src2, dst;
+    vx_graph graph;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, 32, 32, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, 32, 32, arg_->arg2_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph, src1, src2, arg_->policy, dst), VX_TYPE_NODE);
+
+    // The output image can be VX_DF_IMAGE_U8 only if both source images are
+    // VX_DF_IMAGE_U8 and the output image is explicitly set to VX_DF_IMAGE_U8. It is
+    // otherwise VX_DF_IMAGE_S16.
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TEST_WITH_ARG(vxuAddSub, testNegativeSizes, formats_arg, ARITHM_VALID_FORMATS(Add), ARITHM_VALID_FORMATS(Subtract))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, arg_->arg2_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, arg_->arg2_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, arg_->result_format), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_64x64, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x64, &CT()->seed_));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_32x32, src2_32x32, arg_->policy, dst88x16));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_32x32, src2_32x64, arg_->policy, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_64x64, src2_32x32, arg_->policy, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_64x64, src2_32x64, arg_->policy, dst32x32));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+}
+
+TEST_WITH_ARG(vxAddSub, testNegativeSizes, formats_arg, ARITHM_VALID_FORMATS(Add), ARITHM_VALID_FORMATS(Subtract))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_graph graph1, graph2, graph3, graph4;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, arg_->arg2_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, arg_->arg2_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, arg_->result_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph1 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph1, src1_32x32, src2_32x32, arg_->policy, dst88x16), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph1));
+
+    ASSERT_VX_OBJECT(graph2 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph2, src1_32x32, src2_32x64, arg_->policy, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph2));
+
+    ASSERT_VX_OBJECT(graph3 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph3, src1_64x64, src2_32x32, arg_->policy, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph3));
+
+    ASSERT_VX_OBJECT(graph4 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph4, src1_64x64, src2_32x64, arg_->policy, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph4));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+    VX_CALL(vxReleaseGraph(&graph1));
+    VX_CALL(vxReleaseGraph(&graph2));
+    VX_CALL(vxReleaseGraph(&graph3));
+    VX_CALL(vxReleaseGraph(&graph4));
+}
+
+static vx_image inference_image;
+static vx_enum  inference_image_format;
+static vx_action VX_CALLBACK inference_image_test(vx_node node)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = 0;
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_WIDTH,   &width,   sizeof(width)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_FORMAT,  &format,  sizeof(format)));
+
+    EXPECT_EQ_INT(640, width);
+    EXPECT_EQ_INT(480, height);
+    EXPECT_EQ_INT(inference_image_format, format);
+
+    return VX_ACTION_CONTINUE;
+}
+
+TEST_WITH_ARG(vxAddSub, testInference, formats_arg, ARITHM_INFERENCE_FORMATS(Add), ARITHM_INFERENCE_FORMATS(Subtract))
+{
+    vx_image src1, src2, dst, gr;
+    vx_graph graph;
+    vx_node n, tmp;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(src1  = vxCreateImage(context, 640, 480, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2  = vxCreateImage(context, 640, 480, arg_->arg2_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst   = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(n     = arg_->vxFunc(graph, src1, src2, arg_->policy, dst), VX_TYPE_NODE);
+
+    // grounding
+    ASSERT_VX_OBJECT(gr    = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(tmp   = vxAddNode(graph, dst, src2, VX_CONVERT_POLICY_WRAP, gr), VX_TYPE_NODE);
+
+    // test
+    inference_image = dst;
+    inference_image_format = arg_->result_format;
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxAssignNodeCallback(n, inference_image_test));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&n));
+    VX_CALL(vxReleaseNode(&tmp));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&gr));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TEST_WITH_ARG(vxuAddSub, testOverflowModes, overflow_arg, ADDSUB_OVERFLOW_ARGS)
+{
+    vx_image src1, src2, dst;
+    vx_pixel_value_t init_val;
+    vx_context context = context_->vx_context_;
+
+    // allocate and fill images
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, 640, 480, arg_->result_format), VX_TYPE_IMAGE);
+
+    switch (arg_->arg1_format)
+    {
+        case VX_DF_IMAGE_U8:  init_val.U8  = arg_->arg1; break;
+        case VX_DF_IMAGE_S16: init_val.S16 = arg_->arg1; break;
+        default: FAIL("Bad test argument"); break;
+    };
+    ASSERT_VX_OBJECT(src1 = vxCreateUniformImage(context, 640, 480, arg_->arg1_format, &init_val), VX_TYPE_IMAGE);
+
+    switch (arg_->arg2_format)
+    {
+        case VX_DF_IMAGE_U8:  init_val.U8  = arg_->arg2; break;
+        case VX_DF_IMAGE_S16: init_val.S16 = arg_->arg2; break;
+        default: FAIL("Bad test argument"); break;
+    };
+    ASSERT_VX_OBJECT(src2 = vxCreateUniformImage(context, 640, 480, arg_->arg2_format, &init_val), VX_TYPE_IMAGE);
+
+    // run function
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1, src2, arg_->policy, dst));
+
+    // test bottom right pixel to have an expected value
+    {
+        vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+        void *pdata = 0;
+        void *bottom_right_pixel = 0;
+        vx_rectangle_t rect = {0 ,0, 640, 480};
+        vx_map_id map_id;
+
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(dst, &rect, 0, &map_id, &addr, &pdata, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+
+        bottom_right_pixel = vxFormatImagePatchAddress2d(pdata, addr.dim_x-1, addr.dim_y-1, &addr);
+        ASSERT(bottom_right_pixel != NULL);
+
+        switch (arg_->result_format)
+        {
+            case VX_DF_IMAGE_U8:  EXPECT_EQ_INT(arg_->expected_result, *(uint8_t*)bottom_right_pixel); break;
+            case VX_DF_IMAGE_S16: EXPECT_EQ_INT(arg_->expected_result, *(int16_t*)bottom_right_pixel); break;
+            default: ADD_FAILURE("Bad test argument"); break;
+        };
+
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(dst, map_id));
+    }
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src1);
+    EXPECT_EQ_PTR(NULL, src2);
+}
+
+TEST_WITH_ARG(vxAddSub, testOverflowModes, overflow_arg, ADDSUB_OVERFLOW_ARGS)
+{
+    vx_image src1, src2, dst;
+    vx_pixel_value_t init_val;
+    vx_graph graph;
+    vx_context context = context_->vx_context_;
+
+    // allocate and fill images
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, 640, 480, arg_->result_format), VX_TYPE_IMAGE);
+
+    switch (arg_->arg1_format)
+    {
+        case VX_DF_IMAGE_U8:  init_val.U8  = arg_->arg1; break;
+        case VX_DF_IMAGE_S16: init_val.S16 = arg_->arg1; break;
+        default: FAIL("Bad test argument"); break;
+    };
+    ASSERT_VX_OBJECT(src1 = vxCreateUniformImage(context, 640, 480, arg_->arg1_format, &init_val), VX_TYPE_IMAGE);
+
+    switch (arg_->arg2_format)
+    {
+        case VX_DF_IMAGE_U8:  init_val.U8  = arg_->arg2; break;
+        case VX_DF_IMAGE_S16: init_val.S16 = arg_->arg2; break;
+        default: FAIL("Bad test argument"); break;
+    };
+    ASSERT_VX_OBJECT(src2 = vxCreateUniformImage(context, 640, 480, arg_->arg2_format, &init_val), VX_TYPE_IMAGE);
+
+    // build one-node graph
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph, src1, src2, arg_->policy, dst), VX_TYPE_NODE);
+
+    // run graph
+#ifdef CT_EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    // test bottom right pixel to have an expected value
+    {
+        vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+        void *pdata = 0;
+        void *bottom_right_pixel = 0;
+        vx_rectangle_t rect = {0 ,0, 640, 480};
+        vx_map_id map_id;
+
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(dst, &rect, 0, &map_id, &addr, &pdata, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+
+        bottom_right_pixel = vxFormatImagePatchAddress2d(pdata, addr.dim_x-1, addr.dim_y-1, &addr);
+        ASSERT(bottom_right_pixel != NULL);
+
+        switch (arg_->result_format)
+        {
+            case VX_DF_IMAGE_U8:  EXPECT_EQ_INT(arg_->expected_result, *(uint8_t*)bottom_right_pixel); break;
+            case VX_DF_IMAGE_S16: EXPECT_EQ_INT(arg_->expected_result, *(int16_t*)bottom_right_pixel); break;
+            default: ADD_FAILURE("Bad test argument"); break;
+        };
+
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(dst, map_id));
+    }
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TEST_WITH_ARG(vxuAddSub, testFuzzy, fuzzy_arg, ARITHM_FUZZY_ARGS(Add), ARITHM_FUZZY_ARGS(Subtract))
+{
+    vx_image src1, src2, dst;
+    CT_Image ref1, ref2, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg2_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, arg_->width, arg_->height, arg_->result_format), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1, src2, arg_->policy, dst));
+
+    ref1  = ct_image_from_vx_image(src1);
+    ref2  = ct_image_from_vx_image(src2);
+    vxdst = ct_image_from_vx_image(dst);
+    refdst = ct_allocate_image(arg_->width, arg_->height, arg_->result_format);
+
+    arg_->referenceFunc(ref1, ref2, refdst, arg_->policy);
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src1);
+    EXPECT_EQ_PTR(NULL, src2);
+}
+
+TEST_WITH_ARG(vxAddSub, testFuzzy, fuzzy_arg, ARITHM_FUZZY_ARGS(Add), ARITHM_FUZZY_ARGS(Subtract))
+{
+    vx_image src1, src2, dst;
+    vx_graph graph;
+    CT_Image ref1, ref2, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, arg_->width, arg_->height, arg_->result_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg2_format),   VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    // build one-node graph
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph, src1, src2, arg_->policy, dst), VX_TYPE_NODE);
+
+    // run graph
+#ifdef CT_EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ref1  = ct_image_from_vx_image(src1);
+    ref2  = ct_image_from_vx_image(src2);
+    vxdst = ct_image_from_vx_image(dst);
+    refdst = ct_allocate_image(arg_->width, arg_->height, arg_->result_format);
+
+    arg_->referenceFunc(ref1, ref2, refdst, arg_->policy);
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(vxuAddSub, DISABLED_testNegativeFormat, DISABLED_testNegativeSizes,                testOverflowModes, testFuzzy)
+TESTCASE_TESTS(vxAddSub,  DISABLED_testNegativeFormat, DISABLED_testNegativeSizes, testInference, testOverflowModes, testFuzzy)
diff --git a/test_conformance/test_array.c b/test_conformance/test_array.c
new file mode 100644
index 0000000..d0ca84d
--- /dev/null
+++ b/test_conformance/test_array.c
@@ -0,0 +1,874 @@
+/*
+
+ * Copyright (c) 2015-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+
+#define FLOAT_EPSILON 0.000001f
+
+TESTCASE(Array, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct _own_struct
+{
+    vx_uint32  some_uint;
+    vx_float64 some_double;
+} own_struct;
+
+
+typedef struct
+{
+    const char* testName;
+    const char* p;
+    vx_enum item_type;
+} Array_Arg;
+
+
+static
+void* own_alloc_init_data_items(vx_enum item_type, vx_size num_items)
+{
+    vx_size i;
+    vx_size item_size;
+    void* p = 0;
+
+    switch (item_type)
+    {
+    case VX_TYPE_CHAR:              item_size = sizeof(vx_char); break;
+    case VX_TYPE_INT8:              item_size = sizeof(vx_int8); break;
+    case VX_TYPE_UINT8:             item_size = sizeof(vx_uint8); break;
+    case VX_TYPE_INT16:             item_size = sizeof(vx_int16); break;
+    case VX_TYPE_UINT16:            item_size = sizeof(vx_uint16); break;
+    case VX_TYPE_INT32:             item_size = sizeof(vx_int32); break;
+    case VX_TYPE_UINT32:            item_size = sizeof(vx_uint32); break;
+    case VX_TYPE_INT64:             item_size = sizeof(vx_int64); break;
+    case VX_TYPE_UINT64:            item_size = sizeof(vx_uint64); break;
+    case VX_TYPE_FLOAT32:           item_size = sizeof(vx_float32); break;
+    case VX_TYPE_FLOAT64:           item_size = sizeof(vx_float64); break;
+    case VX_TYPE_ENUM:              item_size = sizeof(vx_enum); break;
+    case VX_TYPE_SIZE:              item_size = sizeof(vx_size); break;
+    case VX_TYPE_DF_IMAGE:          item_size = sizeof(vx_df_image); break;
+    case VX_TYPE_BOOL:              item_size = sizeof(vx_bool); break;
+    case VX_TYPE_RECTANGLE:         item_size = sizeof(vx_rectangle_t); break;
+    case VX_TYPE_KEYPOINT:          item_size = sizeof(vx_keypoint_t); break;
+    case VX_TYPE_COORDINATES2D:     item_size = sizeof(vx_coordinates2d_t); break;
+    case VX_TYPE_COORDINATES3D:     item_size = sizeof(vx_coordinates3d_t); break;
+
+    default:
+        if (item_type >= VX_TYPE_USER_STRUCT_START && item_type <= VX_TYPE_USER_STRUCT_END)
+            item_size = sizeof(own_struct);
+        else
+            item_size = 0;
+        break;
+    }
+
+    p = (void *) ct_alloc_mem(num_items * item_size);
+    if (NULL == p)
+        return p;
+
+    for (i = 0; i < num_items; i++)
+    {
+        switch (item_type)
+        {
+        case VX_TYPE_CHAR:
+            ((vx_char*)p)[i] = ((i & 1) ? (vx_char)i : -(vx_char)i);
+            break;
+
+        case VX_TYPE_INT8:
+            ((vx_int8*)p)[i] = ((i & 1) ? (vx_int8)i : -(vx_int8)i);
+            break;
+
+        case VX_TYPE_UINT8:
+            ((vx_uint8*)p)[i] = (vx_uint8)i;
+            break;
+
+        case VX_TYPE_INT16:
+            ((vx_int16*)p)[i] = ((i & 1) ? (vx_int16)i : -(vx_int16)i);
+            break;
+
+        case VX_TYPE_UINT16:
+            ((vx_uint16*)p)[i] = (vx_uint16)i;
+            break;
+
+        case VX_TYPE_INT32:
+            ((vx_int32*)p)[i] = ((i & 1) ? (vx_int32)i : -(vx_int32)i);
+            break;
+
+        case VX_TYPE_UINT32:
+            ((vx_uint32*)p)[i] = (vx_uint32)i;
+            break;
+
+        case VX_TYPE_INT64:
+            ((vx_int64*)p)[i] = ((i & 1) ? (vx_int64)i : -(vx_int64)i);
+            break;
+
+        case VX_TYPE_UINT64:
+            ((vx_uint64*)p)[i] = (vx_uint64)i;
+            break;
+
+        case VX_TYPE_FLOAT32:
+            ((vx_float32*)p)[i] = (vx_float32)((i & 1) ? -(1.0f / i) : (100.0f * i));
+            break;
+
+        case VX_TYPE_FLOAT64:
+            ((vx_float64*)p)[i] = (vx_float64)((i & 1) ? -(1.0 / i) : (100.0 * i));
+            break;
+
+        case VX_TYPE_ENUM:
+            {
+                vx_enum data[3];
+                data[0] = VX_READ_ONLY;
+                data[1] = VX_WRITE_ONLY;
+                data[2] = VX_READ_AND_WRITE;
+                ((vx_enum*)p)[i] = data[i % (sizeof(data) / sizeof(vx_enum))];
+            }
+            break;
+
+        case VX_TYPE_SIZE:
+            ((vx_size*)p)[i] = (vx_size)i;
+            break;
+
+        case VX_TYPE_DF_IMAGE:
+            {
+                vx_df_image data[] = { VX_DF_IMAGE_VIRT, VX_DF_IMAGE_RGB, VX_DF_IMAGE_RGBX };
+                ((vx_df_image*)p)[i] = data[i % (sizeof(data) / sizeof(vx_df_image))];
+            }
+            break;
+
+        case VX_TYPE_BOOL:
+            ((vx_bool*)p)[i] = (vx_bool)(i & 1 ? vx_true_e : vx_false_e);
+            break;
+
+        case VX_TYPE_RECTANGLE:
+            {
+                vx_rectangle_t r = { (vx_uint32)i, (vx_uint32)(num_items - i), (vx_uint32)(i + i), 0 };
+                ((vx_rectangle_t*)p)[i] = r;
+            }
+            break;
+
+        case VX_TYPE_KEYPOINT:
+            {
+                vx_keypoint_t kp = { (vx_int32)i, (vx_int32)(num_items - i), (1.0f / (i + 1)), (1.0f / (i + 1)), (1.0f / (i + 1)), (vx_int32)i, (1.0f / (i + 1)) };
+                ((vx_keypoint_t*)p)[i] = kp;
+            }
+            break;
+
+        case VX_TYPE_COORDINATES2D:
+            {
+                vx_coordinates2d_t c2d = { (vx_uint32)i, (vx_uint32)(num_items - i) };
+                ((vx_coordinates2d_t*)p)[i] = c2d;
+            }
+            break;
+
+        case VX_TYPE_COORDINATES3D:
+            {
+                vx_coordinates3d_t c3d = { (vx_uint32)i, (vx_uint32)(num_items - i), (vx_uint32)(i + i) };
+                ((vx_coordinates3d_t*)p)[i] = c3d;
+            }
+            break;
+
+        default:
+            if (item_type >= VX_TYPE_USER_STRUCT_START && item_type <= VX_TYPE_USER_STRUCT_END)
+            {
+                own_struct ms = { (vx_uint32)i, 1.0 / (i + 1) };
+                ((own_struct*)p)[i] = ms;
+            }
+            else
+            {
+                ct_free_mem(p);
+                p = NULL;
+            }
+            break;
+        }
+    }
+
+    return p;
+}
+
+static
+int own_verify_data_items(void* ptr1, void* ptr2, vx_size stride, vx_enum item_type, vx_size num_items)
+{
+    vx_size i;
+    vx_uint8* curr_ptr1;
+    vx_uint8* curr_ptr2;
+
+    for (i = 0; i < num_items; i++)
+    {
+        curr_ptr1 = (vx_uint8*)ptr1 + i*stride;
+        curr_ptr2 = (vx_uint8*)ptr2 + i*stride;
+
+        switch (item_type)
+        {
+        case VX_TYPE_CHAR:
+            if( ((vx_char*)curr_ptr1)[0] != ((vx_char*)curr_ptr2)[0] )
+                return 1;
+            break;
+
+        case VX_TYPE_INT8:
+            if (((vx_int8*)curr_ptr1)[0] != ((vx_int8*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_UINT8:
+            if (((vx_uint8*)curr_ptr1)[0] != ((vx_uint8*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_INT16:
+            if (((vx_int16*)curr_ptr1)[0] != ((vx_int16*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_UINT16:
+            if (((vx_uint16*)curr_ptr1)[0] != ((vx_uint16*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_INT32:
+            if (((vx_int32*)curr_ptr1)[0] != ((vx_int32*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_UINT32:
+            if (((vx_uint32*)curr_ptr1)[0] != ((vx_uint32*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_INT64:
+            if (((vx_int64*)curr_ptr1)[0] != ((vx_int64*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_UINT64:
+            if (((vx_uint64*)curr_ptr1)[0] != ((vx_uint64*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_FLOAT32:
+            if ( fabs(((vx_float32*)curr_ptr1)[0] - ((vx_float32*)curr_ptr2)[0]) > FLOAT_EPSILON )
+                return 1;
+            break;
+
+        case VX_TYPE_FLOAT64:
+            if (fabs(((vx_float64*)curr_ptr1)[0] - ((vx_float64*)curr_ptr2)[0]) > FLOAT_EPSILON)
+                return 1;
+            break;
+
+        case VX_TYPE_ENUM:
+            if (((vx_enum*)curr_ptr1)[0] != ((vx_enum*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_SIZE:
+            if (((vx_size*)curr_ptr1)[0] != ((vx_size*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_DF_IMAGE:
+            if (((vx_df_image*)curr_ptr1)[0] != ((vx_df_image*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_BOOL:
+            if (((vx_bool*)curr_ptr1)[0] != ((vx_bool*)curr_ptr2)[0])
+                return 1;
+            break;
+
+        case VX_TYPE_RECTANGLE:
+            if ( ((vx_rectangle_t*)curr_ptr1)[0].start_x != ((vx_rectangle_t*)curr_ptr2)[0].start_x ||
+                 ((vx_rectangle_t*)curr_ptr1)[0].start_y != ((vx_rectangle_t*)curr_ptr2)[0].start_y ||
+                 ((vx_rectangle_t*)curr_ptr1)[0].end_x != ((vx_rectangle_t*)curr_ptr2)[0].end_x ||
+                 ((vx_rectangle_t*)curr_ptr1)[0].end_y != ((vx_rectangle_t*)curr_ptr2)[0].end_y)
+                return 1;
+        break;
+
+        case VX_TYPE_KEYPOINT:
+            if ( ((vx_keypoint_t*)curr_ptr1)[0].x != ((vx_keypoint_t*)curr_ptr2)[0].x ||
+                 ((vx_keypoint_t*)curr_ptr1)[0].y != ((vx_keypoint_t*)curr_ptr2)[0].y ||
+                 fabs( ((vx_keypoint_t*)curr_ptr1)[0].strength - ((vx_keypoint_t*)curr_ptr2)[0].strength ) > FLOAT_EPSILON ||
+                 fabs( ((vx_keypoint_t*)curr_ptr1)[0].scale - ((vx_keypoint_t*)curr_ptr2)[0].scale ) > FLOAT_EPSILON ||
+                 fabs( ((vx_keypoint_t*)curr_ptr1)[0].orientation - ((vx_keypoint_t*)curr_ptr2)[0].orientation) > FLOAT_EPSILON ||
+                 ((vx_keypoint_t*)curr_ptr1)[0].tracking_status != ((vx_keypoint_t*)curr_ptr2)[0].tracking_status ||
+                 fabs(((vx_keypoint_t*)curr_ptr1)[0].error - ((vx_keypoint_t*)curr_ptr2)[0].error) > FLOAT_EPSILON)
+                return 1;
+            break;
+
+        case VX_TYPE_COORDINATES2D:
+            if ( ((vx_coordinates2d_t*)curr_ptr1)[0].x != ((vx_coordinates2d_t*)curr_ptr2)[0].x ||
+                 ((vx_coordinates2d_t*)curr_ptr1)[0].y != ((vx_coordinates2d_t*)curr_ptr2)[0].y )
+                return 1;
+            break;
+
+        case VX_TYPE_COORDINATES3D:
+            if ( ((vx_coordinates3d_t*)curr_ptr1)[0].x != ((vx_coordinates3d_t*)curr_ptr2)[0].x ||
+                 ((vx_coordinates3d_t*)curr_ptr1)[0].y != ((vx_coordinates3d_t*)curr_ptr2)[0].y ||
+                 ((vx_coordinates3d_t*)curr_ptr1)[0].z != ((vx_coordinates3d_t*)curr_ptr2)[0].z)
+                return 1;
+            break;
+
+        default:
+            if (item_type >= VX_TYPE_USER_STRUCT_START && item_type <= VX_TYPE_USER_STRUCT_END)
+            {
+                if ( ((own_struct*)curr_ptr1)[0].some_uint != ((own_struct*)curr_ptr2)[0].some_uint ||
+                    fabs(((own_struct*)curr_ptr1)[0].some_double - ((own_struct*)curr_ptr2)[0].some_double) > FLOAT_EPSILON )
+                    return 1;
+            }
+            else
+                return 1;
+        }
+    }
+
+    return 0;
+}
+
+#define ARRAY_CAPACITY  10
+#define ARRAY_NUM_ITEMS 10
+
+#define ADD_VX_ARRAY_TYPES(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_CHAR", __VA_ARGS__, VX_TYPE_CHAR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_INT8", __VA_ARGS__, VX_TYPE_INT8)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_UINT8", __VA_ARGS__, VX_TYPE_UINT8)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_INT16", __VA_ARGS__, VX_TYPE_INT16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_UINT16", __VA_ARGS__, VX_TYPE_UINT16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_INT32", __VA_ARGS__, VX_TYPE_INT32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_UINT32", __VA_ARGS__, VX_TYPE_UINT32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_INT64", __VA_ARGS__, VX_TYPE_INT64)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_UINT64", __VA_ARGS__, VX_TYPE_UINT64)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_FLOAT32", __VA_ARGS__, VX_TYPE_FLOAT32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_FLOAT64", __VA_ARGS__, VX_TYPE_FLOAT64)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_ENUM", __VA_ARGS__, VX_TYPE_ENUM)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_SIZE", __VA_ARGS__, VX_TYPE_SIZE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_DF_IMAGE", __VA_ARGS__, VX_TYPE_DF_IMAGE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_BOOL", __VA_ARGS__, VX_TYPE_BOOL)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_RECTANGLE", __VA_ARGS__, VX_TYPE_RECTANGLE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_KEYPOINT", __VA_ARGS__, VX_TYPE_KEYPOINT )), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_COORDINATES2D", __VA_ARGS__, VX_TYPE_COORDINATES2D )), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_COORDINATES3D", __VA_ARGS__, VX_TYPE_COORDINATES3D )), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_USER_STRUCT_START", __VA_ARGS__, VX_TYPE_USER_STRUCT_START ))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("array", ADD_VX_ARRAY_TYPES, ARG, NULL)
+
+TEST_WITH_ARG(Array, test_vxCreateArray, Array_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_enum item_type = VX_TYPE_INVALID;
+    vx_enum actual_type = VX_TYPE_INVALID;
+    vx_size capacity = ARRAY_CAPACITY;
+    vx_size actual_capacity = 0;
+    vx_size num_items = ARRAY_NUM_ITEMS;
+    vx_size actual_num_items = 0;
+    vx_size item_size = 0;
+    void* array_items = 0;
+    vx_array array = 0;
+
+    if (VX_TYPE_USER_STRUCT_START == arg_->item_type)
+    {
+        item_type = vxRegisterUserStruct(context, sizeof(own_struct));
+        ASSERT(item_type >= VX_TYPE_USER_STRUCT_START && item_type <= VX_TYPE_USER_STRUCT_END);
+    }
+    else
+    {
+        item_type = arg_->item_type;
+    }
+
+    /* 1. check if array can be created with allowed types*/
+    ASSERT_VX_OBJECT(array = vxCreateArray(context, item_type, capacity), VX_TYPE_ARRAY);
+
+    /* 2. check if array's actual item_type corresponds to requested item_type */
+    VX_CALL(vxQueryArray(array, VX_ARRAY_ITEMTYPE, &actual_type, sizeof(actual_type)));
+    ASSERT_EQ_INT(item_type, actual_type);
+
+    /* 3. check if array's actual item_size corresponds to requested item_type size */
+    VX_CALL(vxQueryArray(array, VX_ARRAY_ITEMSIZE, &item_size, sizeof(item_size)));
+
+    switch (actual_type)
+    {
+    case VX_TYPE_CHAR:              ASSERT_EQ_INT(sizeof(vx_char), item_size); break;
+    case VX_TYPE_INT8:              ASSERT_EQ_INT(sizeof(vx_int8), item_size); break;
+    case VX_TYPE_UINT8:             ASSERT_EQ_INT(sizeof(vx_uint8), item_size); break;
+    case VX_TYPE_INT16:             ASSERT_EQ_INT(sizeof(vx_int16), item_size); break;
+    case VX_TYPE_UINT16:            ASSERT_EQ_INT(sizeof(vx_uint16), item_size); break;
+    case VX_TYPE_INT32:             ASSERT_EQ_INT(sizeof(vx_int32), item_size); break;
+    case VX_TYPE_UINT32:            ASSERT_EQ_INT(sizeof(vx_uint32), item_size); break;
+    case VX_TYPE_INT64:             ASSERT_EQ_INT(sizeof(vx_int64), item_size); break;
+    case VX_TYPE_UINT64:            ASSERT_EQ_INT(sizeof(vx_uint64), item_size); break;
+    case VX_TYPE_FLOAT32:           ASSERT_EQ_INT(sizeof(vx_float32), item_size); break;
+    case VX_TYPE_FLOAT64:           ASSERT_EQ_INT(sizeof(vx_float64), item_size); break;
+    case VX_TYPE_ENUM:              ASSERT_EQ_INT(sizeof(vx_enum), item_size); break;
+    case VX_TYPE_SIZE:              ASSERT_EQ_INT(sizeof(vx_size), item_size); break;
+    case VX_TYPE_DF_IMAGE:          ASSERT_EQ_INT(sizeof(vx_df_image), item_size); break;
+    case VX_TYPE_BOOL:              ASSERT_EQ_INT(sizeof(vx_bool), item_size); break;
+    case VX_TYPE_RECTANGLE:         ASSERT_EQ_INT(sizeof(vx_rectangle_t), item_size); break;
+    case VX_TYPE_KEYPOINT:          ASSERT_EQ_INT(sizeof(vx_keypoint_t), item_size); break;
+    case VX_TYPE_COORDINATES2D:     ASSERT_EQ_INT(sizeof(vx_coordinates2d_t), item_size); break;
+    case VX_TYPE_COORDINATES3D:     ASSERT_EQ_INT(sizeof(vx_coordinates3d_t), item_size); break;
+
+    default:
+        if (actual_type >= VX_TYPE_USER_STRUCT_START && actual_type <= VX_TYPE_USER_STRUCT_END)
+            ASSERT_EQ_INT(sizeof(own_struct), item_size);
+        else
+            ASSERT(0);
+        break;
+    }
+
+    /* 4. check if array's actual capacity corresponds to requested capacity */
+    VX_CALL(vxQueryArray(array, VX_ARRAY_CAPACITY, &actual_capacity, sizeof(actual_capacity)));
+    ASSERT_EQ_INT(capacity, actual_capacity);
+
+    /* 5. check if array is empty after creation */
+    VX_CALL(vxQueryArray(array, VX_ARRAY_NUMITEMS, &actual_num_items, sizeof(actual_num_items)));
+    ASSERT_EQ_INT(0, actual_num_items);
+
+    array_items = own_alloc_init_data_items(item_type, num_items);
+    ASSERT(NULL != array_items);
+
+    VX_CALL(vxAddArrayItems(array, num_items, array_items, item_size));
+
+    /* 6. check if num_items added to the array */
+    VX_CALL(vxQueryArray(array, VX_ARRAY_NUMITEMS, &actual_num_items, sizeof(actual_num_items)));
+    ASSERT_EQ_INT(num_items, actual_num_items);
+
+    /* 7. check data in array */
+    {
+        int res;
+        vx_size stride = 0;
+        void* ptr = 0;
+        vx_map_id map_id;
+        VX_CALL(vxMapArrayRange(array, 0, num_items, &map_id, &stride, &ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+        res = own_verify_data_items(array_items, ptr, stride, item_type, num_items);
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+        ASSERT_EQ_INT(0, res);
+    }
+
+    if (NULL != array_items)
+        ct_free_mem(array_items);
+
+    VX_CALL(vxReleaseArray(&array));
+    ASSERT(array == 0);
+}
+
+#define N 100
+TEST(Array, DISABLED_testAccessCopyWrite)
+{
+    vx_context context = context_->vx_context_;
+    vx_coordinates2d_t localArrayInit[N];
+    vx_coordinates2d_t localArray[N];
+    vx_coordinates2d_t localArray2[N*3];
+    vx_array array;
+    int i;
+    vx_map_id map_id;
+
+    /* Initialization */
+    for (i = 0; i < N; i++) {
+        localArrayInit[i].x = 0;
+        localArrayInit[i].y = 0;
+
+        localArray[i].x = i;
+        localArray[i].y = i;
+
+        localArray2[3*i].x = 2*i;
+        localArray2[3*i].y = 2*i;
+        localArray2[3*i+1].x = 0;
+        localArray2[3*i+1].y = 0;
+        localArray2[3*i+2].x = 0;
+        localArray2[3*i+2].y = 0;
+    }
+
+    ASSERT_VX_OBJECT( array = vxCreateArray(context, VX_TYPE_COORDINATES2D, N), VX_TYPE_ARRAY);
+    VX_CALL( vxAddArrayItems(array, N, &localArrayInit[0], sizeof(vx_coordinates2d_t)) );
+
+    /* Write, COPY, No spacing */
+    {
+        vx_size stride = sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray[N/2];
+        VX_CALL( vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localArray[N/2]);
+    }
+    /* Check (MAP) */
+    {
+        vx_uint8 *p = NULL;
+        vx_size stride = 0;
+        VX_CALL( vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        ASSERT(stride >=  sizeof(vx_coordinates2d_t));
+        ASSERT(p != NULL);
+
+        for (i = N/2; i<N; i++) {
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->x == i);
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->y == i);
+        }
+        VX_CALL( vxUnmapArrayRange (array, map_id));
+    }
+
+    /* Write, COPY, Spacing */
+    {
+        vx_size stride = 3*sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray2[3*(N/2)];
+        VX_CALL( vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localArray2[3*(N/2)]);
+    }
+    /* Check (MAP) */
+    {
+        vx_uint8 *p = NULL;
+        vx_size stride = 0;
+        VX_CALL( vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        ASSERT(stride >=  sizeof(vx_coordinates2d_t));
+        ASSERT(p != NULL);
+
+        for (i = N/2; i<N; i++) {
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->x == 2*i);
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->y == 2*i);
+        }
+        VX_CALL( vxUnmapArrayRange (array, map_id));
+    }
+
+    VX_CALL( vxReleaseArray(&array) );
+    ASSERT( array == 0);
+}
+
+TEST(Array, DISABLED_testAccessCopyRead)
+{
+    vx_context context = context_->vx_context_;
+    vx_coordinates2d_t localArrayInit[N];
+    vx_coordinates2d_t localArray[N];
+    vx_coordinates2d_t localArray2[N*3];
+    vx_array array;
+    int i;
+
+    /* Initialization */
+    for (i = 0; i < N; i++) {
+        localArrayInit[i].x = i;
+        localArrayInit[i].y = i;
+
+        localArray[i].x = 0;
+        localArray[i].y = 0;
+
+        localArray2[3*i].x = 0;
+        localArray2[3*i].y = 0;
+        localArray2[3*i+1].x = 0;
+        localArray2[3*i+1].y = 0;
+        localArray2[3*i+2].x = 0;
+        localArray2[3*i+2].y = 0;
+    }
+
+    ASSERT_VX_OBJECT( array = vxCreateArray(context, VX_TYPE_COORDINATES2D, N), VX_TYPE_ARRAY);
+    VX_CALL( vxAddArrayItems(array, N, &localArrayInit[0], sizeof(vx_coordinates2d_t)) );
+
+    /* READ, COPY, No spacing */
+    {
+        vx_size stride = sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray[N/2];
+        VX_CALL( vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localArray[N/2]);
+    }
+    /* Check */
+    for (i = 0; i < N/2; i++) {
+        ASSERT(localArray[i].x == 0);
+        ASSERT(localArray[i].y == 0);
+    }
+    for (i = N/2; i < N; i++) {
+        ASSERT(localArray[i].x == i);
+        ASSERT(localArray[i].y == i);
+    }
+
+    /* READ, COPY, Spacing */
+    {
+        vx_size stride = 3*sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray2[3*(N/2)];
+        VX_CALL( vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localArray2[3*(N/2)]);
+    }
+    /* Check */
+    for (i = 0; i < N/2; i++) {
+        ASSERT(localArray2[3*i].x == 0);
+        ASSERT(localArray2[3*i].y == 0);
+        ASSERT(localArray2[3*i+1].x == 0);
+        ASSERT(localArray2[3*i+1].y == 0);
+        ASSERT(localArray2[3*i+2].x == 0);
+        ASSERT(localArray2[3*i+2].y == 0);
+    }
+    for (i = N/2; i < N; i++) {
+        ASSERT(localArray2[3*i].x == i);
+        ASSERT(localArray2[3*i].y == i);
+
+        /* Unchanged in between */
+        ASSERT(localArray2[3*i+1].x == 0);
+        ASSERT(localArray2[3*i+1].y == 0);
+        ASSERT(localArray2[3*i+2].x == 0);
+        ASSERT(localArray2[3*i+2].y == 0);
+    }
+
+    VX_CALL( vxReleaseArray(&array) );
+    ASSERT( array == 0);
+}
+
+TEST(Array, test_vxCopyArrayRangeWrite)
+{
+    vx_context context = context_->vx_context_;
+    vx_coordinates2d_t localArrayInit[N];
+    vx_coordinates2d_t localArray[N];
+    vx_coordinates2d_t localArray2[N*3];
+    vx_array array;
+    int i;
+
+    /* Initialization */
+    for (i = 0; i < N; i++)
+    {
+        localArrayInit[i].x = 0;
+        localArrayInit[i].y = 0;
+
+        localArray[i].x = i;
+        localArray[i].y = i;
+
+        localArray2[3*i].x = 2*i;
+        localArray2[3*i].y = 2*i;
+        localArray2[3*i+1].x = 0;
+        localArray2[3*i+1].y = 0;
+        localArray2[3*i+2].x = 0;
+        localArray2[3*i+2].y = 0;
+    }
+
+    ASSERT_VX_OBJECT(array = vxCreateArray(context, VX_TYPE_COORDINATES2D, N), VX_TYPE_ARRAY);
+    VX_CALL(vxAddArrayItems(array, N, localArrayInit, sizeof(vx_coordinates2d_t)) );
+
+    /* Write, COPY, No spacing */
+    {
+        vx_size stride = sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray[N/2];
+        VX_CALL(vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+    }
+
+    /* Check (MAP) */
+    {
+        vx_uint8 *p = NULL;
+        vx_size stride = 0;
+        vx_map_id map_id;
+        VX_CALL(vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+
+        ASSERT(stride >=  sizeof(vx_coordinates2d_t));
+        ASSERT(p != NULL);
+        for (i = N/2; i<N; i++)
+        {
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->x == i);
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->y == i);
+        }
+
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+    }
+
+    /* Write, COPY, Spacing */
+    {
+        vx_size stride = 3*sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray2[3*(N/2)];
+        VX_CALL(vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+    }
+    /* Check (MAP) */
+    {
+        vx_uint8 *p = NULL;
+        vx_size stride = 0;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        VX_CALL(vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        ASSERT(stride >=  sizeof(vx_coordinates2d_t));
+        ASSERT(p != NULL);
+        for (i = N/2; i<N; i++) {
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->x == 2*i);
+            ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->y == 2*i);
+        }
+
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+    }
+
+    VX_CALL(vxReleaseArray(&array));
+    ASSERT(array == 0);
+}
+
+TEST(Array, test_vxCopyArrayRangeRead)
+{
+    vx_context context = context_->vx_context_;
+    vx_coordinates2d_t localArrayInit[N];
+    vx_coordinates2d_t localArray[N];
+    vx_coordinates2d_t localArray2[N*3];
+    vx_array array;
+    int i;
+
+    /* Initialization */
+    for (i = 0; i < N; i++)
+    {
+        localArrayInit[i].x = i;
+        localArrayInit[i].y = i;
+
+        localArray[i].x = 0;
+        localArray[i].y = 0;
+
+        localArray2[3*i].x = 0;
+        localArray2[3*i].y = 0;
+        localArray2[3*i+1].x = 0;
+        localArray2[3*i+1].y = 0;
+        localArray2[3*i+2].x = 0;
+        localArray2[3*i+2].y = 0;
+    }
+
+    ASSERT_VX_OBJECT(array = vxCreateArray(context, VX_TYPE_COORDINATES2D, N), VX_TYPE_ARRAY);
+    VX_CALL(vxAddArrayItems(array, N, localArrayInit, sizeof(vx_coordinates2d_t)));
+
+    /* READ, COPY, No spacing */
+    {
+        vx_size stride = sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray[N/2];
+        VX_CALL(vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    }
+    /* Check */
+    for (i = 0; i < N/2; i++)
+    {
+        ASSERT(localArray[i].x == 0);
+        ASSERT(localArray[i].y == 0);
+    }
+    for (i = N/2; i < N; i++)
+    {
+        ASSERT(localArray[i].x == i);
+        ASSERT(localArray[i].y == i);
+    }
+
+    /* READ, COPY, Spacing */
+    {
+        vx_size stride = 3*sizeof(vx_coordinates2d_t);
+        vx_coordinates2d_t *p = &localArray2[3*(N/2)];
+        VX_CALL(vxCopyArrayRange(array, N/2, N, stride, (void *)p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    }
+    /* Check */
+    for (i = 0; i < N/2; i++)
+    {
+        ASSERT(localArray2[3*i].x == 0);
+        ASSERT(localArray2[3*i].y == 0);
+        ASSERT(localArray2[3*i+1].x == 0);
+        ASSERT(localArray2[3*i+1].y == 0);
+        ASSERT(localArray2[3*i+2].x == 0);
+        ASSERT(localArray2[3*i+2].y == 0);
+    }
+    for (i = N/2; i < N; i++)
+    {
+        ASSERT(localArray2[3*i].x == i);
+        ASSERT(localArray2[3*i].y == i);
+
+        /* Unchanged in between */
+        ASSERT(localArray2[3*i+1].x == 0);
+        ASSERT(localArray2[3*i+1].y == 0);
+        ASSERT(localArray2[3*i+2].x == 0);
+        ASSERT(localArray2[3*i+2].y == 0);
+    }
+
+    VX_CALL(vxReleaseArray(&array));
+    ASSERT(array == 0);
+}
+
+TEST(Array, test_vxMapArrayRangeWrite)
+{
+    vx_context context = context_->vx_context_;
+    vx_coordinates2d_t localArrayInit[N];
+    vx_array array;
+    int i;
+
+    /* Initialization */
+    for (i = 0; i < N; i++)
+    {
+        localArrayInit[i].x = i;
+        localArrayInit[i].y = i;
+    }
+
+    ASSERT_VX_OBJECT(array = vxCreateArray(context, VX_TYPE_COORDINATES2D, N), VX_TYPE_ARRAY);
+    VX_CALL(vxAddArrayItems(array, N, localArrayInit, sizeof(vx_coordinates2d_t)) );
+
+    /* Map, READ_AND_WRITE mode*/
+    {
+        vx_size stride = 0;
+        vx_coordinates2d_t *p = NULL;
+        vx_map_id map_id;
+        VX_CALL(vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        ASSERT(stride == sizeof(vx_coordinates2d_t));
+        /* Check */
+        for (i = 0; i < N/2; i++)
+        {
+            ASSERT(p[i].x == i + N/2);
+            ASSERT(p[i].y == i + N/2);
+        }
+        /* Write into array */
+        for (i = 0; i < N/2; i++)
+        {
+            p[i].x = 0;
+            p[i].y = 0;
+        }
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+        /* Check */
+        VX_CALL(vxMapArrayRange(array, 0, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        for (i = 0; i < N/2; i++)
+        {
+            ASSERT(p[i].x == i);
+            ASSERT(p[i].y == i);
+        }
+        for (i = N/2; i < N; i++)
+        {
+            ASSERT(p[i].x == 0);
+            ASSERT(p[i].y == 0);
+        }
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+    }
+
+    /* Map, WRITE_ONLY mode */
+    {
+        vx_size stride = 0;
+        vx_coordinates2d_t *p = NULL;
+        vx_map_id map_id;
+        VX_CALL(vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        ASSERT(stride == sizeof(vx_coordinates2d_t));
+        /* Write into array */
+        for (i = 0; i < N/2; i++)
+        {
+            p[i].x = 0;
+            p[i].y = 0;
+        }
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+        /* Check */
+        VX_CALL(vxMapArrayRange(array, 0, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        for (i = 0; i < N/2; i++)
+        {
+            ASSERT(p[i].x == i);
+            ASSERT(p[i].y == i);
+        }
+        for (i = N/2; i < N; i++)
+        {
+            ASSERT(p[i].x == 0);
+            ASSERT(p[i].y == 0);
+        }
+        VX_CALL(vxUnmapArrayRange(array, map_id));
+    }
+
+    VX_CALL(vxReleaseArray(&array));
+    ASSERT(array == 0);
+}
+
+TESTCASE_TESTS(
+    Array,
+    test_vxCreateArray,
+    DISABLED_testAccessCopyWrite,
+    DISABLED_testAccessCopyRead,
+    test_vxCopyArrayRangeRead,
+    test_vxCopyArrayRangeWrite,
+    test_vxMapArrayRangeWrite)
diff --git a/test_conformance/test_bilateralfilter.c b/test_conformance/test_bilateralfilter.c
new file mode 100644
index 0000000..28f0597
--- /dev/null
+++ b/test_conformance/test_bilateralfilter.c
@@ -0,0 +1,498 @@
+/*
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx_types.h>
+#include <VX/vx_khr_nn.h>
+
+#include <assert.h>
+#include <limits.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+
+#define DEBUG_TEST_TENSOR_ENABLE_PRINTF 0
+#define DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR 0
+#define DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS 1
+
+#define TEST_TENSOR_NUM_ITERATIONS              10
+#define TEST_TENSOR_MIN_DIM_SZ                  1
+#define TEST_TENSOR_MAX_DIM_SZ                  20
+
+#define Q78_FIXED_POINT_POSITION 8
+#define MAX_TENSOR_DIMS 3
+
+#define MIN(a, b)   ((a) < (b) ? (a) : (b))
+#define MAX(a, b)   ((a) < (b) ? (b) : (a))
+#define CLAMP(v, lower, upper) MAX((lower), MIN((v), (upper)))
+
+#define MIN_TOLERANCE  (0.95)
+
+enum TestTensorDF
+{
+    TT_Q78,
+    TT_U8
+};
+
+static size_t ownGetFlatByteOffset(
+        size_t index,
+        vx_size dim_num,
+        const vx_size * in_dims,
+        const vx_size * in_strides)
+{
+    size_t res = 0;
+
+    for (vx_size d = 0; d < dim_num; ++d)
+    {
+        res += in_strides[d] * (index % in_dims[d]);
+        index /= in_dims[d];
+    }
+
+    return res;
+}
+
+static void ownUnpackFormat(
+        enum TestTensorDF fmt,
+        /*OUT*/ vx_enum * data_type,
+        /*OUT*/ vx_uint8 * fixed_point_position,
+        /*out*/ vx_size * sizeof_data_type)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            *data_type = VX_TYPE_INT16;
+            *fixed_point_position = Q78_FIXED_POINT_POSITION;
+            *sizeof_data_type = sizeof(vx_int16);
+            break;
+        case TT_U8:
+            *data_type = VX_TYPE_UINT8;
+            *fixed_point_position = 0;
+            *sizeof_data_type = sizeof(vx_uint8);
+            break;
+        default:
+            assert(0);
+    }
+}
+
+static void ownFillRandData(
+        enum TestTensorDF fmt,
+        uint64_t * rng,
+        size_t count,
+        /*OUT*/ void * data)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            for(size_t i = 0; i < count; ++i)
+                ((vx_int16*)data)[i] = (vx_int16)CT_RNG_NEXT_INT(*rng, INT16_MIN, INT16_MAX+1);
+            break;
+        case TT_U8:
+            for(size_t i = 0; i < count; ++i)
+                ((vx_uint8*)data)[i] = (vx_uint8)CT_RNG_NEXT_INT(*rng, 0, UINT8_MAX+1);
+            break;
+        default:
+            assert(0);
+    }
+}
+
+static void ownCheckBilateralFilterResult(
+        const void * in_ptr, const vx_size * in_dims, const vx_size * in_strides,
+        enum TestTensorDF fmt,
+        vx_size dim_num,
+        vx_size out_count,
+        int   diameter,
+        float sigmaSpace,
+        float sigmaValues,
+        void * out_ptr, const vx_size * out_dims, const vx_size * out_strides)
+{
+    vx_float32 tolerance = 0.0;
+    vx_float32 total_num = 0.0;
+    vx_float32 equal_num = 0.0;
+    vx_int32 radius = diameter/2;
+    vx_float32 color_weight_8[256];
+    vx_float32 color_weight_16[256*256];
+    vx_float32 sum = 0, wsum = 0, w = 0;
+    vx_float32 gauss_color_coeff = -0.5/(sigmaValues*sigmaValues);
+    vx_float32 gauss_space_coeff = -0.5/(sigmaSpace*sigmaSpace);
+
+    vx_float32 *space_weight = (vx_float32*)malloc((radius * 2 + 1) * sizeof(vx_float32));
+
+    for(vx_int32 i = 0; i < 256; i++)
+    {
+        color_weight_8[i] = (vx_float32)exp(i*i*gauss_color_coeff);
+    }
+
+    for(vx_int32 i = 0; i < 256*256; i++)
+    {
+        color_weight_16[i] = (vx_float32)exp(i*i*gauss_color_coeff);
+    }
+
+    for(vx_int32 i = -radius; i <= radius; i++ )
+    {
+        space_weight[i+radius] = (vx_float32)exp(i*i*gauss_space_coeff);
+    }
+
+    for (size_t index = radius; index < out_count-radius; ++index)
+    {
+        const size_t in_byte_offset = ownGetFlatByteOffset(index, dim_num, in_dims, in_strides);
+        const size_t out_byte_offset = ownGetFlatByteOffset(index, dim_num, out_dims, out_strides);
+
+        const char * in_b_ptr = (char*)in_ptr + in_byte_offset;
+        const char * out_b_ptr = (char*)out_ptr + out_byte_offset;
+
+        switch (fmt)
+        {
+            case TT_Q78:
+            {
+                const vx_int16 in = *(vx_int16*)in_b_ptr;
+                const vx_int16 out = *(vx_int16*)out_b_ptr;
+                int16_t ref;
+
+                sum = 0, wsum = 0;
+
+                for(vx_int32 j = -radius; j <= radius; j++)
+                {
+                    vx_size nei_byte_offset = ownGetFlatByteOffset(index + j, dim_num, in_dims, in_strides);
+                    const char *nei_b_ptr = (char*)in_ptr + nei_byte_offset;
+                    const vx_int16 nei = *(vx_int16*)nei_b_ptr;
+                    w = space_weight[j+radius]*color_weight_16[abs(nei - in)];
+                    sum += nei*w;
+                    wsum += w;
+                }
+                ref = (vx_int16)round(sum/wsum);
+                
+                total_num += 1; 
+
+                if (ref == out)
+                {
+                     equal_num += 1;
+                } 
+            }
+            break;
+            case TT_U8:
+            {
+                const vx_uint8 in = *(vx_uint8*)in_b_ptr;
+                const vx_uint8 out = *(vx_uint8*)out_b_ptr;
+                uint8_t ref;
+
+                sum = 0, wsum = 0;
+
+                for(vx_int32 j = -radius; j <= radius; j++)
+                {
+                    vx_size nei_byte_offset = ownGetFlatByteOffset(index + j, dim_num, in_dims, in_strides);
+                    const char *nei_b_ptr = (char*)in_ptr + nei_byte_offset;
+                    const vx_uint8 nei = *(vx_uint8*)nei_b_ptr;
+                    w = space_weight[j+radius]*color_weight_8[abs(nei - in)];
+                    sum += nei*w;
+                    wsum += w;
+                }
+                ref = (vx_uint8)round(sum/wsum);
+
+                total_num += 1; 
+
+                if (ref == out)
+                {
+                     equal_num += 1;
+                } 
+            }
+            break;
+            default: assert(0);
+        }
+    }
+
+    tolerance = (equal_num / total_num);
+
+    free(space_weight);
+
+    ASSERT(tolerance >= MIN_TOLERANCE);
+}
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxBilateralFilterNode                      *
+ *                                                                          *
+ ***************************************************************************/
+
+TESTCASE(BilateralFilter, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char * name;
+    enum TestTensorDF src_fmt;
+    enum TestTensorDF dst_fmt;
+    int   diameter;
+    float sigmaSpace;
+    float sigmaValues;
+} test_bilateral_filter_op_arg;
+
+TEST_WITH_ARG(BilateralFilter, testBilateralFilterOp, test_bilateral_filter_op_arg,
+        ARG("BILATERAL_FILTER_Q78", TT_Q78, TT_Q78, 5, 1, 1),
+        ARG("BILATERAL_FILTER_U8", TT_U8, TT_U8, 5, 1, 1),
+)
+{
+    const vx_context context = context_->vx_context_;
+    const enum TestTensorDF src_fmt = arg_->src_fmt;
+    const enum TestTensorDF dst_fmt = arg_->dst_fmt;
+    assert(src_fmt == TT_Q78 || src_fmt == TT_U8);
+    assert(dst_fmt == TT_Q78 || dst_fmt == TT_U8);
+
+    const int diameter = arg_->diameter;
+    const float sigmaSpace = arg_->sigmaSpace;
+    const float sigmaValues = arg_->sigmaValues;
+
+    vx_size max_dims = 0;
+    {
+        VX_CALL(vxQueryContext(context, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum src_data_type;
+    vx_enum dst_data_type;
+    vx_uint8 src_fixed_point_position;
+    vx_uint8 dst_fixed_point_position;
+    vx_size src_sizeof_data_type;
+    vx_size dst_sizeof_data_type;
+    ownUnpackFormat(src_fmt, &src_data_type, &src_fixed_point_position, &src_sizeof_data_type);
+    ownUnpackFormat(dst_fmt, &dst_data_type, &dst_fixed_point_position, &dst_sizeof_data_type);
+
+    size_t * const tensor_dims = malloc(sizeof(*tensor_dims) * max_dims);
+    size_t * const src_tensor_strides = malloc(sizeof(*src_tensor_strides) * max_dims);
+    size_t * const dst_tensor_strides = malloc(sizeof(*dst_tensor_strides) * max_dims);
+    ASSERT(tensor_dims && src_tensor_strides && dst_tensor_strides);
+
+    // The input data a vx_tensor. maximum 3 dimension and minimum 2.
+    for (vx_size dims = 2; dims <= max_dims; ++dims)
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("dims #: %zu,\titer #: %d\n", dims, iter);
+            fflush(stdout);
+        }
+
+        for (vx_size i = 0; i < dims; ++i)
+        {
+            tensor_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+            src_tensor_strides[i] = i ? src_tensor_strides[i-1] * tensor_dims[i-1] : src_sizeof_data_type;
+            dst_tensor_strides[i] = i ? dst_tensor_strides[i-1] * tensor_dims[i-1] : dst_sizeof_data_type;
+        }
+
+        vx_tensor src_tensor = vxCreateTensor(context, dims, tensor_dims, src_data_type, src_fixed_point_position);
+        vx_tensor dst_tensor = vxCreateTensor(context, dims, tensor_dims, dst_data_type, dst_fixed_point_position);
+        ASSERT_VX_OBJECT(src_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(dst_tensor, VX_TYPE_TENSOR);
+
+        const size_t src_tensor_bytes = tensor_dims[dims-1] * src_tensor_strides[dims-1];
+        const size_t dst_tensor_bytes = tensor_dims[dims-1] * dst_tensor_strides[dims-1];
+        const size_t count = src_tensor_bytes / src_sizeof_data_type;
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          tensor_dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", tensor_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        void * const src_data = malloc(src_tensor_bytes);
+        void * const dst_data = malloc(dst_tensor_bytes);
+        ASSERT(src_data && dst_data);
+
+        {
+            ownFillRandData(src_fmt, &rng, count, src_data);
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(src_tensor, dims, view_start, tensor_dims, src_tensor_strides, src_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxBilateralFilterNode(graph, src_tensor, diameter,  sigmaSpace, sigmaValues, dst_tensor);
+
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the reuslts
+        {
+            const size_t view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(dst_tensor, dims, view_start, tensor_dims, dst_tensor_strides, dst_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            ownCheckBilateralFilterResult(
+                    src_data, tensor_dims, src_tensor_strides,
+                    dst_fmt,
+                    dims,
+                    count,
+                    diameter,
+                    sigmaSpace,
+                    sigmaValues,
+                    dst_data, tensor_dims, dst_tensor_strides);
+        }
+
+        VX_CALL(vxReleaseTensor(&src_tensor));
+        VX_CALL(vxReleaseTensor(&dst_tensor));
+        EXPECT_EQ_PTR(NULL, src_tensor);
+        EXPECT_EQ_PTR(NULL, dst_tensor);
+
+        free(src_data);
+        free(dst_data);
+    }
+
+    free(tensor_dims);
+    free(src_tensor_strides);
+    free(dst_tensor_strides);
+}
+
+
+TEST(BilateralFilter, testNodeCreation)
+{
+    const vx_context context = context_->vx_context_;
+
+    const enum TestTensorDF src_fmt = TT_Q78;
+    const enum TestTensorDF dst_fmt = TT_Q78;
+
+    const int diameter = 5;
+    const float sigmaSpace = 1;
+    const float sigmaValues = 1;
+
+    vx_size max_dims = 0;
+    {
+        VX_CALL(vxQueryContext(context, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum src_data_type;
+    vx_enum dst_data_type;
+    vx_uint8 src_fixed_point_position;
+    vx_uint8 dst_fixed_point_position;
+    vx_size src_sizeof_data_type;
+    vx_size dst_sizeof_data_type;
+    ownUnpackFormat(src_fmt, &src_data_type, &src_fixed_point_position, &src_sizeof_data_type);
+    ownUnpackFormat(dst_fmt, &dst_data_type, &dst_fixed_point_position, &dst_sizeof_data_type);
+
+    size_t * const tensor_dims = malloc(sizeof(*tensor_dims) * max_dims);
+    size_t * const src_tensor_strides = malloc(sizeof(*src_tensor_strides) * max_dims);
+    size_t * const dst_tensor_strides = malloc(sizeof(*dst_tensor_strides) * max_dims);
+    ASSERT(tensor_dims && src_tensor_strides && dst_tensor_strides);
+
+    // The input data a vx_tensor. maximum 3 dimension and minimum 2.
+    for (vx_size dims = 2; dims <= max_dims; ++dims)
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("dims #: %zu,\titer #: %d\n", dims, iter);
+            fflush(stdout);
+        }
+
+        for (vx_size i = 0; i < dims; ++i)
+        {
+            tensor_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+            src_tensor_strides[i] = i ? src_tensor_strides[i-1] * tensor_dims[i-1] : src_sizeof_data_type;
+            dst_tensor_strides[i] = i ? dst_tensor_strides[i-1] * tensor_dims[i-1] : dst_sizeof_data_type;
+        }
+
+        vx_tensor src_tensor = vxCreateTensor(context, dims, tensor_dims, src_data_type, src_fixed_point_position);
+        vx_tensor dst_tensor = vxCreateTensor(context, dims, tensor_dims, dst_data_type, dst_fixed_point_position);
+        ASSERT_VX_OBJECT(src_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(dst_tensor, VX_TYPE_TENSOR);
+
+        const size_t src_tensor_bytes = tensor_dims[dims-1] * src_tensor_strides[dims-1];
+        const size_t dst_tensor_bytes = tensor_dims[dims-1] * dst_tensor_strides[dims-1];
+        const size_t count = src_tensor_bytes / src_sizeof_data_type;
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          tensor_dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", tensor_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        void * const src_data = malloc(src_tensor_bytes);
+        void * const dst_data = malloc(dst_tensor_bytes);
+        ASSERT(src_data && dst_data);
+
+        {
+            ownFillRandData(src_fmt, &rng, count, src_data);
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(src_tensor, dims, view_start, tensor_dims, src_tensor_strides, src_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxBilateralFilterNode(graph, src_tensor, diameter,  sigmaSpace, sigmaValues, dst_tensor);
+
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        VX_CALL(vxReleaseTensor(&src_tensor));
+        VX_CALL(vxReleaseTensor(&dst_tensor));
+        EXPECT_EQ_PTR(NULL, src_tensor);
+        EXPECT_EQ_PTR(NULL, dst_tensor);
+
+        free(src_data);
+        free(dst_data);
+    }
+
+    free(tensor_dims);
+    free(src_tensor_strides);
+    free(dst_tensor_strides);
+}
+
+TESTCASE_TESTS(BilateralFilter,
+    testNodeCreation,
+    testBilateralFilterOp
+);
diff --git a/test_conformance/test_binop16s.c b/test_conformance/test_binop16s.c
new file mode 100644
index 0000000..d3ab072
--- /dev/null
+++ b/test_conformance/test_binop16s.c
@@ -0,0 +1,300 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+//#define CT_EXECUTE_ASYNC
+
+static void referenceAbsDiff(CT_Image src0, CT_Image src1, CT_Image dst)
+{
+    uint32_t i, j;
+
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+    ASSERT(src0->format == src1->format && src1->format == VX_DF_IMAGE_S16);
+    ASSERT(dst->format == VX_DF_IMAGE_S16 || dst->format == VX_DF_IMAGE_U16);
+
+    if (dst->format == VX_DF_IMAGE_S16)
+    {
+        for (i = 0; i < dst->height; ++i)
+        {
+            for (j = 0; j < dst->width; ++j)
+            {
+                int32_t val = src0->data.s16[i * src0->stride + j] - src1->data.s16[i * src1->stride + j];
+                val = val < 0 ? -val : val;
+                dst->data.s16[i * dst->stride + j] = CT_CAST_S16(val);
+            }
+        }
+    }
+    else if (dst->format == VX_DF_IMAGE_U16)
+    {
+        for (i = 0; i < dst->height; ++i)
+        {
+            for (j = 0; j < dst->width; ++j)
+            {
+                int32_t val = src0->data.s16[i * src0->stride + j] - src1->data.s16[i * src1->stride + j];
+                val = val < 0 ? -val : val;
+                dst->data.u16[i * dst->stride + j] = CT_CAST_U16(val);
+            }
+        }
+    }
+}
+
+typedef vx_status (VX_API_CALL *vxuBinopFunction)(vx_context, vx_image, vx_image, vx_image);
+typedef vx_node   (VX_API_CALL *vxBinopFunction) (vx_graph, vx_image, vx_image, vx_image);
+typedef void      (*referenceFunction)(CT_Image, CT_Image, CT_Image);
+
+
+TESTCASE(vxuBinOp16s, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxBinOp16s,  CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    vxuBinopFunction  vxuFunc;
+    vxBinopFunction   vxFunc;
+    referenceFunction referenceFunc;
+} func_arg;
+
+#define FUNC_ARG(func) ARG(#func, vxu##func, vx##func##Node, reference##func)
+
+TEST_WITH_ARG(vxuBinOp16s, testNegativeSizes, func_arg, FUNC_ARG(AbsDiff))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_64x64, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x64, &CT()->seed_));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_32x32, src2_32x32, dst88x16));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_32x32, src2_32x64, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_64x64, src2_32x32, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_64x64, src2_32x64, dst32x32));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+}
+
+TEST_WITH_ARG(vxBinOp16s, testNegativeSizes, func_arg, FUNC_ARG(AbsDiff))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_graph graph1, graph2, graph3, graph4;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph1 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph1, src1_32x32, src2_32x32, dst88x16), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph1));
+
+    ASSERT_VX_OBJECT(graph2 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph2, src1_32x32, src2_32x64, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph2));
+
+    ASSERT_VX_OBJECT(graph3 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph3, src1_64x64, src2_32x32, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph3));
+
+    ASSERT_VX_OBJECT(graph4 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph4, src1_64x64, src2_32x64, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph4));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+    VX_CALL(vxReleaseGraph(&graph1));
+    VX_CALL(vxReleaseGraph(&graph2));
+    VX_CALL(vxReleaseGraph(&graph3));
+    VX_CALL(vxReleaseGraph(&graph4));
+}
+
+static vx_image inference_image;
+static vx_action VX_CALLBACK inference_image_test(vx_node node)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = 0;
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_WIDTH,   &width,   sizeof(width)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_FORMAT,  &format,  sizeof(format)));
+
+    EXPECT_EQ_INT(640, width);
+    EXPECT_EQ_INT(480, height);
+    EXPECT_EQ_INT(VX_DF_IMAGE_S16, format);
+
+    return VX_ACTION_CONTINUE;
+}
+
+TEST_WITH_ARG(vxBinOp16s, testInference, func_arg, FUNC_ARG(AbsDiff))
+{
+    vx_image src1, src2, dst, gr;
+    vx_graph graph;
+    vx_node n, tmp;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(src1  = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2  = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst   = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(n     = arg_->vxFunc(graph, src1, src2, dst), VX_TYPE_NODE);
+
+    // grounding
+    ASSERT_VX_OBJECT(gr    = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(tmp   = vxAddNode(graph, dst, src2, VX_CONVERT_POLICY_WRAP, gr), VX_TYPE_NODE);
+
+    // test
+    inference_image = dst;
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxAssignNodeCallback(n, inference_image_test));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&n));
+    VX_CALL(vxReleaseNode(&tmp));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&gr));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+typedef struct {
+    const char* name;
+    uint32_t width;
+    uint32_t height;
+    vxuBinopFunction  vxuFunc;
+    vxBinopFunction   vxFunc;
+    referenceFunction referenceFunc;
+} fuzzy_arg;
+
+#define FUZZY_ARG(func,w,h) ARG(#func ": " #w "x" #h, w, h, vxu##func, vx##func##Node, reference##func)
+
+#define BINOP_SIZE_ARGS(func)       \
+    FUZZY_ARG(func, 640, 480),      \
+    ARG_EXTENDED_BEGIN(),           \
+    FUZZY_ARG(func, 1, 1),          \
+    FUZZY_ARG(func, 15, 17),        \
+    FUZZY_ARG(func, 32, 32),        \
+    FUZZY_ARG(func, 1231, 1234),    \
+    FUZZY_ARG(func, 1280, 720),     \
+    FUZZY_ARG(func, 1920, 1080),    \
+    ARG_EXTENDED_END()
+
+TEST_WITH_ARG(vxuBinOp16s, testFuzzy, fuzzy_arg, BINOP_SIZE_ARGS(AbsDiff))
+{
+    vx_image src1, src2, dst;
+    CT_Image ref1, ref2, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_S16),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_S16),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1, src2, dst));
+
+    ref1  = ct_image_from_vx_image(src1);
+    ref2  = ct_image_from_vx_image(src2);
+    vxdst = ct_image_from_vx_image(dst);
+    refdst = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_S16);
+
+    arg_->referenceFunc(ref1, ref2, refdst);
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src1);
+    EXPECT_EQ_PTR(NULL, src2);
+}
+
+TEST_WITH_ARG(vxBinOp16s, testFuzzy, fuzzy_arg, BINOP_SIZE_ARGS(AbsDiff))
+{
+    vx_image src1, src2, dst;
+    vx_graph graph;
+    CT_Image ref1, ref2, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_S16),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_S16),   VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    // build one-node graph
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph, src1, src2, dst), VX_TYPE_NODE);
+
+    // run graph
+#ifdef CT_EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ref1  = ct_image_from_vx_image(src1);
+    ref2  = ct_image_from_vx_image(src2);
+    vxdst = ct_image_from_vx_image(dst);
+    refdst = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_S16);
+
+    arg_->referenceFunc(ref1, ref2, refdst);
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(vxuBinOp16s, DISABLED_testNegativeSizes,                testFuzzy)
+TESTCASE_TESTS(vxBinOp16s,  DISABLED_testNegativeSizes, testInference, testFuzzy)
diff --git a/test_conformance/test_binop8u.c b/test_conformance/test_binop8u.c
new file mode 100644
index 0000000..9eb71dd
--- /dev/null
+++ b/test_conformance/test_binop8u.c
@@ -0,0 +1,322 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+//#define CT_EXECUTE_ASYNC
+
+static void referenceAbsDiff(CT_Image src0, CT_Image src1, CT_Image dst)
+{
+    uint32_t i, j;
+
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+    ASSERT(src0->format == dst->format && src1->format == dst->format && dst->format == VX_DF_IMAGE_U8);
+
+    for (i = 0; i < dst->height; ++i)
+        for (j = 0; j < dst->width; ++j)
+        {
+            int32_t val = src0->data.y[i * src0->stride + j] - src1->data.y[i * src1->stride + j];
+            dst->data.y[i * dst->stride + j] = val < 0 ? -val : val;
+        }
+}
+
+static void referenceAnd(CT_Image src0, CT_Image src1, CT_Image dst)
+{
+    uint32_t i, j;
+
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+    ASSERT(src0->format == dst->format && src1->format == dst->format && dst->format == VX_DF_IMAGE_U8);
+
+    for (i = 0; i < dst->height; ++i)
+        for (j = 0; j < dst->width; ++j)
+            dst->data.y[i * dst->stride + j] = src0->data.y[i * src0->stride + j] & src1->data.y[i * src1->stride + j];
+}
+
+static void referenceOr(CT_Image src0, CT_Image src1, CT_Image dst)
+{
+    uint32_t i, j;
+
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+    ASSERT(src0->format == dst->format && src1->format == dst->format && dst->format == VX_DF_IMAGE_U8);
+
+    for (i = 0; i < dst->height; ++i)
+        for (j = 0; j < dst->width; ++j)
+            dst->data.y[i * dst->stride + j] = src0->data.y[i * src0->stride + j] | src1->data.y[i * src1->stride + j];
+}
+
+static void referenceXor(CT_Image src0, CT_Image src1, CT_Image dst)
+{
+    uint32_t i, j;
+
+    ASSERT(src0 && src1 && dst);
+    ASSERT(src0->width = src1->width && src0->width == dst->width);
+    ASSERT(src0->height = src1->height && src0->height == dst->height);
+    ASSERT(src0->format == dst->format && src1->format == dst->format && dst->format == VX_DF_IMAGE_U8);
+
+    for (i = 0; i < dst->height; ++i)
+        for (j = 0; j < dst->width; ++j)
+            dst->data.y[i * dst->stride + j] = src0->data.y[i * src0->stride + j] ^ src1->data.y[i * src1->stride + j];
+}
+
+typedef vx_status (VX_API_CALL *vxuBinopFunction)(vx_context, vx_image, vx_image, vx_image);
+typedef vx_node   (VX_API_CALL *vxBinopFunction) (vx_graph, vx_image, vx_image, vx_image);
+typedef void      (*referenceFunction)(CT_Image, CT_Image, CT_Image);
+
+
+TESTCASE(vxuBinOp8u, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxBinOp8u,  CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    vxuBinopFunction  vxuFunc;
+    vxBinopFunction   vxFunc;
+    referenceFunction referenceFunc;
+} func_arg;
+
+#define FUNC_ARG(func) ARG(#func, vxu##func, vx##func##Node, reference##func)
+
+TEST_WITH_ARG(vxuBinOp8u, testNegativeSizes, func_arg, FUNC_ARG(AbsDiff), FUNC_ARG(And), FUNC_ARG(Or), FUNC_ARG(Xor))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_64x64, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x64, &CT()->seed_));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_32x32, src2_32x32, dst88x16));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_32x32, src2_32x64, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_64x64, src2_32x32, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1_64x64, src2_32x64, dst32x32));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+}
+
+TEST_WITH_ARG(vxBinOp8u, testNegativeSizes, func_arg, FUNC_ARG(AbsDiff), FUNC_ARG(And), FUNC_ARG(Or), FUNC_ARG(Xor))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_graph graph1, graph2, graph3, graph4;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph1 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph1, src1_32x32, src2_32x32, dst88x16), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph1));
+
+    ASSERT_VX_OBJECT(graph2 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph2, src1_32x32, src2_32x64, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph2));
+
+    ASSERT_VX_OBJECT(graph3 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph3, src1_64x64, src2_32x32, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph3));
+
+    ASSERT_VX_OBJECT(graph4 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph4, src1_64x64, src2_32x64, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph4));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+    VX_CALL(vxReleaseGraph(&graph1));
+    VX_CALL(vxReleaseGraph(&graph2));
+    VX_CALL(vxReleaseGraph(&graph3));
+    VX_CALL(vxReleaseGraph(&graph4));
+}
+
+static vx_image inference_image;
+static vx_action VX_CALLBACK inference_image_test(vx_node node)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = 0;
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_WIDTH,   &width,   sizeof(width)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_FORMAT,  &format,  sizeof(format)));
+
+    EXPECT_EQ_INT(640, width);
+    EXPECT_EQ_INT(480, height);
+    EXPECT_EQ_INT(VX_DF_IMAGE_U8, format);
+
+    return VX_ACTION_CONTINUE;
+}
+
+TEST_WITH_ARG(vxBinOp8u, testInference, func_arg, FUNC_ARG(AbsDiff), FUNC_ARG(And), FUNC_ARG(Or), FUNC_ARG(Xor))
+{
+    vx_image src1, src2, dst, gr;
+    vx_graph graph;
+    vx_node n, tmp;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(src1  = vxCreateImage(context, 640, 480, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2  = vxCreateImage(context, 640, 480, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst   = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(n     = arg_->vxFunc(graph, src1, src2, dst), VX_TYPE_NODE);
+
+    // grounding
+    ASSERT_VX_OBJECT(gr    = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(tmp   = vxAddNode(graph, dst, src2, VX_CONVERT_POLICY_WRAP, gr), VX_TYPE_NODE);
+
+    // test
+    inference_image = dst;
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxAssignNodeCallback(n, inference_image_test));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&n));
+    VX_CALL(vxReleaseNode(&tmp));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&gr));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+typedef struct {
+    const char* name;
+    uint32_t width;
+    uint32_t height;
+    vxuBinopFunction  vxuFunc;
+    vxBinopFunction   vxFunc;
+    referenceFunction referenceFunc;
+} fuzzy_arg;
+
+#define FUZZY_ARG(func,w,h) ARG(#func ": " #w "x" #h, w, h, vxu##func, vx##func##Node, reference##func)
+
+#define BINOP_SIZE_ARGS(func)       \
+    FUZZY_ARG(func, 640, 480),      \
+    ARG_EXTENDED_BEGIN(),           \
+    FUZZY_ARG(func, 1, 1),          \
+    FUZZY_ARG(func, 15, 17),        \
+    FUZZY_ARG(func, 32, 32),        \
+    FUZZY_ARG(func, 1231, 1234),    \
+    FUZZY_ARG(func, 1280, 720),     \
+    FUZZY_ARG(func, 1920, 1080),    \
+    ARG_EXTENDED_END()
+
+TEST_WITH_ARG(vxuBinOp8u, testFuzzy, fuzzy_arg, BINOP_SIZE_ARGS(AbsDiff), BINOP_SIZE_ARGS(And), BINOP_SIZE_ARGS(Or), BINOP_SIZE_ARGS(Xor))
+{
+    vx_image src1, src2, dst;
+    CT_Image ref1, ref2, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, arg_->vxuFunc(context, src1, src2, dst));
+
+    ref1  = ct_image_from_vx_image(src1);
+    ref2  = ct_image_from_vx_image(src2);
+    vxdst = ct_image_from_vx_image(dst);
+    refdst = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8);
+
+    arg_->referenceFunc(ref1, ref2, refdst);
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src1);
+    EXPECT_EQ_PTR(NULL, src2);
+}
+
+TEST_WITH_ARG(vxBinOp8u, testFuzzy, fuzzy_arg, BINOP_SIZE_ARGS(AbsDiff), BINOP_SIZE_ARGS(And), BINOP_SIZE_ARGS(Or), BINOP_SIZE_ARGS(Xor))
+{
+    vx_image src1, src2, dst;
+    vx_graph graph;
+    CT_Image ref1, ref2, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8),   VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    // build one-node graph
+    ASSERT_VX_OBJECT(arg_->vxFunc(graph, src1, src2, dst), VX_TYPE_NODE);
+
+    // run graph
+#ifdef CT_EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ref1  = ct_image_from_vx_image(src1);
+    ref2  = ct_image_from_vx_image(src2);
+    vxdst = ct_image_from_vx_image(dst);
+    refdst = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8);
+
+    arg_->referenceFunc(ref1, ref2, refdst);
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(vxuBinOp8u, DISABLED_testNegativeSizes,                testFuzzy)
+TESTCASE_TESTS(vxBinOp8u,  DISABLED_testNegativeSizes, testInference, testFuzzy)
diff --git a/test_conformance/test_box3x3.c b/test_conformance/test_box3x3.c
new file mode 100644
index 0000000..3c23046
--- /dev/null
+++ b/test_conformance/test_box3x3.c
@@ -0,0 +1,349 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include "shared_functions.h"
+
+
+TESTCASE(Box3x3, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Box3x3, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxBox3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+// Generate input to cover these requirements:
+// The input data should have areas that have zero sum and maximum sum
+// and everything in between (unless the running time is too high).
+static CT_Image box3x3_generate_simple_gradient(const char* fileName, int step_x, int step_y)
+{
+    CT_Image image = NULL;
+    uint32_t x, y;
+
+    ASSERT_(return 0, step_x > 0);
+    ASSERT_(return 0, step_y > 0);
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_image(256 * step_x, 256 * step_y, VX_DF_IMAGE_U8));
+
+    for (y = 0; y < image->height; y++)
+    {
+        for (x = 0; x < image->width; x++)
+        {
+            uint8_t* ptr = CT_IMAGE_DATA_PTR_8U(image, x, y);
+            int v = (y / step_y) + (x / step_x);
+            *ptr = (uint8_t)v;
+        }
+    }
+
+    return image;
+}
+
+// Generate input to cover these requirements:
+// The input data should contain a bi-level image with every possible
+// 3x3 block of pixels taking only the minimum and the maximum intensity values.
+static CT_Image box3x3_generate_bi_level(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    uint32_t x, y;
+    uint64_t rng;
+    int total = width * height;
+
+    CT_RNG_INIT(rng, CT_RNG_NEXT(CT()->seed_));
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+
+    for (y = 0; y < image->height; y++)
+    {
+        for (x = 0; x < image->width; x++)
+        {
+            uint8_t* ptr = CT_IMAGE_DATA_PTR_8U(image, x, y);
+            int v = CT_RNG_NEXT_INT(rng, 0, 3 * total);
+            *ptr = (v < (int)(total + x + y)) ? 255 : 0;
+        }
+    }
+
+    return image;
+}
+
+// Generate input to cover these requirements:
+// There should be a image with randomly generated pixel intensities.
+static CT_Image box3x3_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image box3x3_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+
+static uint8_t box3x3_calculate(CT_Image src, uint32_t x, uint32_t y)
+{
+    uint8_t res = (uint8_t)(ct_floor_u32_no_overflow( ((float)(
+            (int16_t)(*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 0)) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 0) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 0) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1) +
+                      *CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1)) )/9 ) );
+    return res;
+}
+
+static uint8_t box3x3_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    uint8_t res = (uint8_t)(ct_floor_u32_no_overflow( ((float)(
+            (int16_t)(CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 0)) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 0) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 0) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1) +
+                      CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1)) )/9 ) );
+    return res;
+}
+
+static uint8_t box3x3_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    uint8_t res = (uint8_t)(ct_floor_u32_no_overflow( ((float)(
+            (int16_t)(CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 0, constant_value)) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 0, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 0, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value) +
+                      CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value)) )/9 ) );
+    return res;
+}
+
+
+CT_Image box3x3_create_reference_image(CT_Image src, vx_border_t border)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, src->format);
+
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                if (x >= 1 && y >= 1 && x < src->width - 1 && y < src->height - 1)
+                {
+                    uint8_t res = box3x3_calculate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = box3x3_calculate_replicate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 constant_value = border.constant_value.U32;
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = box3x3_calculate_constant(src, x, y, constant_value);
+                    *dst_data = res;
+                });
+    }
+    else
+    {
+        ASSERT_(return 0, 0);
+    }
+    return dst;
+}
+
+
+static void box3x3_check(CT_Image src, CT_Image dst, vx_border_t border)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = box3x3_create_reference_image(src, border));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst,  1, 1, 1, 1);
+            ct_adjust_roi(dst_ref, 1, 1, 1, 1);
+        }
+    );
+
+    EXPECT_CTIMAGE_NEAR(dst_ref, dst, 1);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+} Filter_Arg;
+
+#define ADD_GRADIENT_STEPS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/step=3x3", __VA_ARGS__, 3, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/step=4x4", __VA_ARGS__, 4, 4)), \
+    CT_EXPAND(nextmacro(testArgName "/step=3x4", __VA_ARGS__, 3, 4)), \
+    CT_EXPAND(nextmacro(testArgName "/step=4x3", __VA_ARGS__, 4, 3))
+
+#define BOX_PARAMETERS \
+    CT_GENERATE_PARAMETERS("simple_gradient", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_GRADIENT_STEPS, ARG, box3x3_generate_simple_gradient, NULL), \
+    CT_GENERATE_PARAMETERS("bi_level", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, box3x3_generate_bi_level, NULL), \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, box3x3_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, box3x3_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Box3x3, testGraphProcessing, Filter_Arg,
+    BOX_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxBox3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(box3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Box3x3, testImmediateProcessing, Filter_Arg,
+    BOX_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuBox3x3(context, src_image, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(box3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Box3x3, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_canny.c b/test_conformance/test_canny.c
new file mode 100644
index 0000000..dbdec3f
--- /dev/null
+++ b/test_conformance/test_canny.c
@@ -0,0 +1,656 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <stdint.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#define USE_OPENCV_GENERATED_REFERENCE
+#define CANNY_ACCEPTANCE_THRESHOLD 0.95
+//#define EXECUTE_ASYNC
+
+
+#define CREF_EDGE 2
+#define CREF_LINK 1
+#define CREF_NONE 0
+
+static int32_t offsets[][2] =
+{
+    { -1, -1}, {  0, -1}, {  1, -1},
+    { -1,  0},            {  1,  0},
+    { -1,  1}, {  0,  1}, {  1,  1}
+};
+
+#ifndef USE_OPENCV_GENERATED_REFERENCE
+static uint64_t magnitude(CT_Image img, uint32_t x, uint32_t y, int32_t k, vx_enum type, int32_t* dx_out, int32_t* dy_out)
+{
+    static int32_t dim1[][7] = { { 1, 2, 1}, { 1,  4, 6, 4, 1}, { 1,  6, 15, 20, 15, 6, 1}};
+    static int32_t dim2[][7] = { {-1, 0, 1}, {-1, -2, 0, 2, 1}, {-1, -4, -5,  0,  5, 4, 1}};
+    int32_t dx = 0, dy = 0;
+    int32_t i,j;
+
+    int32_t* w1 = dim1[k/2-1];
+    int32_t* w2 = dim2[k/2-1];
+
+    x -= k/2;
+    y -= k/2;
+
+    for (i = 0; i < k; ++i)
+    {
+        int32_t xx = 0, yy = 0;
+        for (j = 0; j < k; ++j)
+        {
+            vx_int32 v = img->data.y[(y + i) * img->stride + (x + j)];
+            xx +=  v * w2[j];
+            yy +=  v * w1[j];
+        }
+
+        dx += xx * w1[i];
+        dy += yy * w2[i];
+    }
+
+    if (dx_out) *dx_out = dx;
+    if (dy_out) *dy_out = dy;
+
+    if (type == VX_NORM_L2)
+        return dx * (int64_t)dx + dy * (int64_t)dy;
+    else
+        return (dx < 0 ? -dx : dx) + (dy < 0 ? -dy : dy);
+}
+
+static void follow_edge(CT_Image img, uint32_t x, uint32_t y)
+{
+    uint32_t i;
+    img->data.y[y * img->stride + x] = 255;
+    for (i = 0; i < sizeof(offsets)/sizeof(offsets[0]); ++i)
+        if (img->data.y[(y + offsets[i][0]) * img->stride + x + offsets[i][1]] == CREF_LINK)
+            follow_edge(img, x + offsets[i][1], y + offsets[i][0]);
+}
+
+static void reference_canny(CT_Image src, CT_Image dst, int32_t low_thresh, int32_t high_thresh, uint32_t gsz, vx_enum norm)
+{
+    uint64_t lo = norm == VX_NORM_L1 ? low_thresh  : low_thresh*low_thresh;
+    uint64_t hi = norm == VX_NORM_L1 ? high_thresh : high_thresh*high_thresh;
+    uint32_t i, j;
+    uint32_t bsz = gsz/2 + 1;
+
+    ASSERT(src && dst);
+    ASSERT(src->width == dst->width);
+    ASSERT(src->height == dst->height);
+    ASSERT(src->format == dst->format && src->format == VX_DF_IMAGE_U8);
+
+    ASSERT(low_thresh <= high_thresh);
+    ASSERT(low_thresh >= 0);
+    ASSERT(gsz == 3 || gsz == 5 || gsz == 7);
+    ASSERT(norm == VX_NORM_L2 || norm == VX_NORM_L1);
+    ASSERT(src->width >= gsz && src->height >= gsz);
+
+    // zero border pixels
+    for (j = 0; j < bsz; ++j)
+        for (i = 0; i < dst->width; ++i)
+            dst->data.y[j * dst->stride + i] = dst->data.y[(dst->height - 1 - j) * dst->stride + i] = 255;
+    for (j = bsz; j < dst->height - bsz; ++j)
+        for (i = 0; i < bsz; ++i)
+            dst->data.y[j * dst->stride + i] = dst->data.y[j * dst->stride + dst->width - 1 - i] = 255;
+
+    // threshold + nms
+    for (j = bsz; j < dst->height - bsz; ++j)
+    {
+        for (i = bsz; i < dst->width - bsz; ++i)
+        {
+            int32_t dx, dy, e = CREF_NONE;
+            uint64_t m1, m2;
+
+            uint64_t m = magnitude(src, i, j, gsz, norm, &dx, &dy);
+
+            if (m > lo)
+            {
+                uint64_t l1 = (dx < 0 ? -dx : dx) + (dy < 0 ? -dy : dy);
+
+                if (l1 * l1 < (uint64_t)(2 * dx * (int64_t)dx)) // |y| < |x| * tan(pi/8)
+                {
+                    m1 = magnitude(src, i-1, j, gsz, norm, 0, 0);
+                    m2 = magnitude(src, i+1, j, gsz, norm, 0, 0);
+                }
+                else if (l1 * l1 < (uint64_t)(2 * dy * (int64_t)dy)) // |x| < |y| * tan(pi/8)
+                {
+                    m1 = magnitude(src, i, j-1, gsz, norm, 0, 0);
+                    m2 = magnitude(src, i, j+1, gsz, norm, 0, 0);
+                }
+                else
+                {
+                    int32_t s = (dx ^ dy) < 0 ? -1 : 1;
+                    m1 = magnitude(src, i-s, j-1, gsz, norm, 0, 0);
+                    m2 = magnitude(src, i+s, j+1, gsz, norm, 0, 0) + 1; // (+1) is OpenCV's gotcha
+                }
+
+                if (m > m1 && m >= m2)
+                    e = (m > hi ? CREF_EDGE : CREF_LINK);
+            }
+
+            dst->data.y[j * src->stride + i] = e;
+        }
+    }
+
+    // trace edges
+    for (j = bsz; j < dst->height - bsz; ++j)
+        for (i = bsz; i < dst->width - bsz; ++i)
+            if(dst->data.y[j * dst->stride + i] == CREF_EDGE)
+                follow_edge(dst, i, j);
+
+    // clear non-edges
+    for (j = bsz; j < dst->height - bsz; ++j)
+        for (i = bsz; i < dst->width - bsz; ++i)
+            if(dst->data.y[j * dst->stride + i] < 255)
+                dst->data.y[j * dst->stride + i] = 0;
+}
+#endif
+
+// computes count(disttransform(src) >= 2, where dst != 0)
+static uint32_t disttransform2_metric(CT_Image src, CT_Image dst, CT_Image dist, uint32_t* total_edge_pixels)
+{
+    uint32_t i, j, k, count, total;
+
+    ASSERT_(return 0, src && dst && dist && total_edge_pixels);
+    ASSERT_(return 0, src->width == dst->width && src->width == dist->width);
+    ASSERT_(return 0, src->height == dst->height && src->height == dist->height);
+    ASSERT_(return 0, src->format == dst->format && src->format == dist->format && src->format == VX_DF_IMAGE_U8);
+
+    // fill borders with 1 (or 0 for edges)
+    for (i = 0; i < dst->width; ++i)
+    {
+        dist->data.y[i] = src->data.y[i] == 0 ? 1 : 0;
+        dist->data.y[(dist->height - 1) * dist->stride + i] = src->data.y[(dist->height - 1) * src->stride + i] == 0 ? 1 : 0;
+    }
+    for (j = 1; j < dst->height - 1; ++j)
+    {
+        dist->data.y[j * dist->stride] = src->data.y[j * src->stride] == 0 ? 1 : 0;
+        dist->data.y[j * dist->stride + dist->width - 1] = src->data.y[j * src->stride + dist->width - 1] == 0 ? 1 : 0;
+    }
+
+    // minimalistic variant of disttransform:
+    // 0   ==>      disttransform(src) == 0
+    // 1   ==> 1 <= disttransform(src) < 2
+    // 255 ==>      disttransform(src) >= 2
+    for (j = 1; j < src->height-1; ++j)
+    {
+        for (i = 1; i < src->width-1; ++i)
+        {
+            if (src->data.y[j * src->stride + i] != 0)
+                dist->data.y[j * dist->stride + i] = 0;
+            else
+            {
+                int has_edge = 0;
+                for (k = 0; k < sizeof(offsets)/sizeof(offsets[0]); ++k)
+                {
+                    if (src->data.y[(j + offsets[k][1]) * src->stride + i + offsets[k][0]] != 0)
+                    {
+                        has_edge = 1;
+                        break;
+                    }
+                }
+
+                dist->data.y[j * dist->stride + i] = (has_edge ? 1 : 255);
+            }
+        }
+    }
+
+    // count pixels where disttransform(src) < 2 and dst != 0
+    total = count = 0;
+    for (j = 0; j < dst->height; ++j)
+    {
+        for (i = 0; i < dst->width; ++i)
+        {
+            if (dst->data.y[j * dst->stride + i] != 0)
+            {
+                total += 1;
+                count += (dist->data.y[j * dist->stride + i] < 2) ? 1 : 0;
+            }
+        }
+    }
+
+    *total_edge_pixels = total;
+
+    return count;
+}
+
+#ifndef USE_OPENCV_GENERATED_REFERENCE
+// own blur to not depend on OpenVX borders handling
+static CT_Image gaussian5x5(CT_Image img)
+{
+    CT_Image res;
+    uint32_t i, j, k, n;
+    uint32_t ww[] = {1, 4, 6, 4, 1};
+
+    ASSERT_(return 0, img);
+    ASSERT_(return 0, img->format == VX_DF_IMAGE_U8);
+
+    res = ct_allocate_image(img->width, img->height, img->format);
+    ASSERT_(return 0, res);
+
+    for (j = 0; j < img->height; ++j)
+    {
+        for (i = 0; i < img->width; ++i)
+        {
+            uint32_t r = 0;
+            for (k = 0; k < 5; ++k)
+            {
+                uint32_t rr = 0;
+                uint32_t kj = k + j < 2 ? 0 : (k + j - 2 >= img->width ? img->width -1 :  k + j - 2);
+                for (n = 0; n < 5; ++n)
+                {
+                    uint32_t ni = n + i < 2 ? 0 : (n + i - 2 >= img->width ? img->width -1 :  n + i - 2);
+                    rr += ww[n] * img->data.y[kj * img->stride + ni];
+                }
+
+                r += rr * ww[k];
+            }
+            res->data.y[j * res->stride + i] = (r + (1<<7)) >> 8;
+        }
+    }
+
+    return res;
+}
+#endif
+
+static CT_Image get_source_image(const char* filename)
+{
+#ifndef USE_OPENCV_GENERATED_REFERENCE
+    if (strncmp(filename, "blurred_", 8) == 0)
+        return gaussian5x5(ct_read_image(filename + 8, 1));
+    else
+#endif
+        return ct_read_image(filename, 1);
+}
+
+/*
+#define vxuCannyEdgeDetector vxuCannyEdgeDetector_ref
+vx_status vxuCannyEdgeDetector_ref(vx_context context, vx_image input, vx_threshold hyst,
+                               vx_int32 gradient_size, vx_enum norm_type,
+                               vx_image output)
+{
+    CT_Image src, dst;
+    int32_t hi,lo;
+    vx_image tmp;
+    vx_status s = VX_SUCCESS;
+
+    src = ct_image_from_vx_image(input);
+    dst = ct_allocate_image(src->width, src->height, VX_DF_IMAGE_U8);
+
+    s |= vxQueryThreshold(hyst, VX_THRESHOLD_THRESHOLD_LOWER, &lo, sizeof(lo));
+    s |= vxQueryThreshold(hyst, VX_THRESHOLD_THRESHOLD_UPPER, &hi, sizeof(hi));
+
+    reference_canny(src, dst, lo, hi, gradient_size, norm_type);
+    tmp = vxCreateImage(context, src->width, src->height, VX_DF_IMAGE_U8);
+    s |= vxuNot(context, ct_image_to_vx_image(dst, context), tmp);
+    s |= vxuNot(context, tmp, output);
+    return s;
+}
+*/
+
+static CT_Image get_reference_result(const char* src_name, CT_Image src, int32_t low_thresh, int32_t high_thresh, uint32_t gsz, vx_enum norm)
+{
+#ifdef USE_OPENCV_GENERATED_REFERENCE
+    char buff[1024];
+    sprintf(buff, "canny_%ux%u_%d_%d_%s_%s", gsz, gsz, low_thresh, high_thresh, norm == VX_NORM_L1 ? "L1" : "L2", src_name);
+    // printf("reading: %s\n", buff);
+    return ct_read_image(buff, 1);
+#else
+    CT_Image dst;
+    ASSERT_(return 0, src);
+    if (dst = ct_allocate_image(src->width, src->height, VX_DF_IMAGE_U8))
+        reference_canny(src, dst, low_thresh, high_thresh, gsz, norm);
+    return dst;
+#endif
+}
+
+TESTCASE(vxuCanny, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxCanny,  CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    const char* filename;
+    int32_t grad_size;
+    vx_enum norm_type;
+    int32_t low_thresh;
+    int32_t high_thresh;
+} canny_arg;
+
+#define BIT_EXACT_ARG(grad, thresh) ARG(#grad "x" #grad " thresh=" #thresh, "lena_gray.bmp", grad, VX_NORM_L1, thresh, thresh)
+#define DIS_BIT_EXACT_ARG(grad, thresh) ARG("DISABLED_" #grad "x" #grad " thresh=" #thresh, "lena_gray.bmp", grad, VX_NORM_L1, thresh, thresh)
+
+TEST_WITH_ARG(vxuCanny, BitExactL1, canny_arg, BIT_EXACT_ARG(3, 120), BIT_EXACT_ARG(5, 100), /* DIS_BIT_EXACT_ARG(7, 80 do not enable this argument) */)
+{
+    vx_image src, dst;
+    vx_threshold hyst;
+    CT_Image lena, vxdst, refdst;
+    vx_int32 low_thresh  = arg_->low_thresh;
+    vx_int32 high_thresh = arg_->high_thresh;
+    vx_int32 false_val = 0;
+    vx_int32 true_val = 255;
+    vx_border_t border = { VX_BORDER_UNDEFINED, {{ 0 }} };
+    vx_int32 border_width = arg_->grad_size/2 + 1;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    ASSERT_NO_FAILURE(lena = get_source_image(arg_->filename));
+    ASSERT_NO_FAILURE(src = ct_image_to_vx_image(lena, context));
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, lena->width, lena->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(hyst = vxCreateThreshold(context, VX_THRESHOLD_TYPE_RANGE, VX_TYPE_UINT8), VX_TYPE_THRESHOLD);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_LOWER, &low_thresh,  sizeof(low_thresh)));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_UPPER, &high_thresh, sizeof(high_thresh)));
+    /* explicitly set FALSE_VALUE and TRUE_VALUE for hyst parameter */
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_FALSE_VALUE, &false_val, sizeof(false_val)));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_TRUE_VALUE, &true_val, sizeof(true_val)));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuCannyEdgeDetector(context, src, hyst, arg_->grad_size, arg_->norm_type, dst));
+
+    ASSERT_NO_FAILURE(vxdst = ct_image_from_vx_image(dst));
+    ASSERT_NO_FAILURE(refdst = get_reference_result(arg_->filename, lena, low_thresh, high_thresh, arg_->grad_size, arg_->norm_type));
+
+    ASSERT_NO_FAILURE(ct_adjust_roi(vxdst,  border_width, border_width, border_width, border_width));
+    ASSERT_NO_FAILURE(ct_adjust_roi(refdst, border_width, border_width, border_width, border_width));
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseThreshold(&hyst));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&src));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&dst));
+}
+
+TEST_WITH_ARG(vxCanny, BitExactL1, canny_arg, BIT_EXACT_ARG(3, 120), BIT_EXACT_ARG(5, 100), /* DIS_BIT_EXACT_ARG(7, 80 do not enable this argument) */)
+{
+    vx_image src, dst;
+    vx_graph graph;
+    vx_node node;
+    vx_threshold hyst;
+    CT_Image lena, vxdst, refdst;
+    vx_int32 low_thresh  = arg_->low_thresh;
+    vx_int32 high_thresh = arg_->high_thresh;
+    vx_int32 false_val = 0;
+    vx_int32 true_val = 255;
+    vx_border_t border = { VX_BORDER_UNDEFINED, {{ 0 }} };
+    vx_int32 border_width = arg_->grad_size/2 + 1;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_NO_FAILURE(lena = get_source_image(arg_->filename));
+    ASSERT_NO_FAILURE(src = ct_image_to_vx_image(lena, context));
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, lena->width, lena->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(hyst = vxCreateThreshold(context, VX_THRESHOLD_TYPE_RANGE, VX_TYPE_UINT8), VX_TYPE_THRESHOLD);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_LOWER, &low_thresh,  sizeof(low_thresh)));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_UPPER, &high_thresh, sizeof(high_thresh)));
+    /* explicitly set FALSE_VALUE and TRUE_VALUE for hyst parameter */
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_FALSE_VALUE, &false_val, sizeof(false_val)));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_TRUE_VALUE, &true_val, sizeof(true_val)));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxCannyEdgeDetectorNode(graph, src, hyst, arg_->grad_size, arg_->norm_type, dst), VX_TYPE_NODE);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    // run graph
+#ifdef EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ASSERT_NO_FAILURE(vxdst = ct_image_from_vx_image(dst));
+    ASSERT_NO_FAILURE(refdst = get_reference_result(arg_->filename, lena, low_thresh, high_thresh, arg_->grad_size, arg_->norm_type));
+
+    ASSERT_NO_FAILURE(ct_adjust_roi(vxdst,  border_width, border_width, border_width, border_width));
+    ASSERT_NO_FAILURE(ct_adjust_roi(refdst, border_width, border_width, border_width, border_width));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseNode(&node));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseGraph(&graph));
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseThreshold(&hyst));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&src));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&dst));
+}
+
+#define CANNY_ARG(grad, norm, lo, hi, file) ARG(#file "/" #norm " " #grad "x" #grad " thresh=(" #lo ", " #hi ")", #file ".bmp", grad, VX_NORM_##norm, lo, hi)
+#define DISABLED_CANNY_ARG(grad, norm, lo, hi, file) ARG("DISABLED_" #file "/" #norm " " #grad "x" #grad " thresh=(" #lo ", " #hi ")", #file ".bmp", grad, VX_NORM_##norm, lo, hi)
+
+TEST_WITH_ARG(vxuCanny, Lena, canny_arg,
+    CANNY_ARG(3, L1, 100, 120, lena_gray),
+    CANNY_ARG(3, L2, 100, 120, lena_gray),
+    CANNY_ARG(3, L1, 90,  130, lena_gray),
+    CANNY_ARG(3, L2, 90,  130, lena_gray),
+    CANNY_ARG(3, L1, 70,  71 , lena_gray),
+    CANNY_ARG(3, L2, 70,  71 , lena_gray),
+    CANNY_ARG(3, L1, 150, 220, lena_gray),
+    CANNY_ARG(3, L2, 150, 220, lena_gray),
+    CANNY_ARG(5, L1, 100, 120, lena_gray),
+    CANNY_ARG(5, L2, 100, 120, lena_gray),
+    CANNY_ARG(7, L1, 100, 120, lena_gray),
+    CANNY_ARG(7, L2, 100, 120, lena_gray),
+
+    CANNY_ARG(5, L1, 1200, 1440, lena_gray),
+    CANNY_ARG(5, L2, 1200, 1440, lena_gray),
+    CANNY_ARG(7, L1, 16000, 19200, lena_gray),
+    CANNY_ARG(7, L2, 16000, 19200, lena_gray),
+
+    CANNY_ARG(3, L1, 100, 120, blurred_lena_gray),
+    CANNY_ARG(3, L2, 100, 120, blurred_lena_gray),
+    CANNY_ARG(3, L1, 90,  125, blurred_lena_gray),
+    CANNY_ARG(3, L2, 90,  130, blurred_lena_gray),
+    CANNY_ARG(3, L1, 70,  71 , blurred_lena_gray),
+    CANNY_ARG(3, L2, 70,  71 , blurred_lena_gray),
+    CANNY_ARG(3, L1, 150, 220, blurred_lena_gray),
+    CANNY_ARG(3, L2, 150, 220, blurred_lena_gray),
+    CANNY_ARG(5, L1, 100, 120, blurred_lena_gray),
+    CANNY_ARG(5, L2, 100, 120, blurred_lena_gray),
+    CANNY_ARG(7, L1, 100, 120, blurred_lena_gray),
+    CANNY_ARG(7, L2, 100, 120, blurred_lena_gray),
+
+)
+{
+    uint32_t total, count;
+    vx_image src, dst;
+    vx_threshold hyst;
+    CT_Image lena, vxdst, refdst, dist;
+    vx_int32 low_thresh  = arg_->low_thresh;
+    vx_int32 high_thresh = arg_->high_thresh;
+    vx_border_t border = { VX_BORDER_UNDEFINED, {{ 0 }} };
+    vx_int32 border_width = arg_->grad_size/2 + 1;
+    vx_context context = context_->vx_context_;
+    vx_enum thresh_data_type = VX_TYPE_UINT8;
+    if (low_thresh > 255)
+        thresh_data_type = VX_TYPE_INT16;
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    ASSERT_NO_FAILURE(lena = get_source_image(arg_->filename));
+    ASSERT_NO_FAILURE(src = ct_image_to_vx_image(lena, context));
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, lena->width, lena->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(hyst = vxCreateThreshold(context, VX_THRESHOLD_TYPE_RANGE, thresh_data_type), VX_TYPE_THRESHOLD);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_LOWER, &low_thresh,  sizeof(low_thresh)));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_UPPER, &high_thresh, sizeof(high_thresh)));
+    /* FALSE_VALUE and TRUE_VALUE of hyst parameter are set to their default values (0, 255) by vxCreateThreshold */
+    /* test reference data are computed with assumption that FALSE_VALUE and TRUE_VALUE set to 0 and 255 */
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuCannyEdgeDetector(context, src, hyst, arg_->grad_size, arg_->norm_type, dst));
+
+    ASSERT_NO_FAILURE(vxdst = ct_image_from_vx_image(dst));
+
+    ASSERT_NO_FAILURE(refdst = get_reference_result(arg_->filename, lena, low_thresh, high_thresh, arg_->grad_size, arg_->norm_type));
+    ASSERT_NO_FAILURE(ct_adjust_roi(vxdst,  border_width, border_width, border_width, border_width));
+    ASSERT_NO_FAILURE(ct_adjust_roi(refdst, border_width, border_width, border_width, border_width));
+
+    ASSERT_NO_FAILURE(dist = ct_allocate_image(refdst->width, refdst->height, VX_DF_IMAGE_U8));
+
+    // disttransform(x,y) < tolerance for all (x,y) such that output(x,y) = 255,
+    // where disttransform is the distance transform image with Euclidean distance
+    // of the reference(x,y) (canny edge ground truth). This condition should be
+    // satisfied by 98% of output edge pixels, tolerance = 2.
+    ASSERT_NO_FAILURE(count = disttransform2_metric(refdst, vxdst, dist, &total));
+
+    if (count < CANNY_ACCEPTANCE_THRESHOLD * total)
+    {
+        CT_RecordFailureAtFormat("disttransform(reference) < 2 only for %u of %u pixels of output edges which is %.2f%% < %.2f%%", __FUNCTION__, __FILE__, __LINE__,
+            count, total, count/(double)total*100, CANNY_ACCEPTANCE_THRESHOLD*100);
+
+        // ct_write_image("canny_vx.bmp", vxdst);
+        // ct_write_image("canny_ref.bmp", refdst);
+    }
+
+    // And the inverse: disttransform(x,y) < tolerance for all (x,y) such that
+    // reference(x,y) = 255, where disttransform is the distance transform image
+    // with Euclidean distance of the output(x,y) (canny edge ground truth). This
+    // condition should be satisfied by 98% of reference edge pixels, tolerance = 2.
+    ASSERT_NO_FAILURE(count = disttransform2_metric(vxdst, refdst, dist, &total));
+
+    if (count < CANNY_ACCEPTANCE_THRESHOLD * total)
+    {
+        CT_RecordFailureAtFormat("disttransform(output) < 2 only for %u of %u pixels of reference edges which is %.2f%% < %.2f%%", __FUNCTION__, __FILE__, __LINE__,
+            count, total, count/(double)total*100, CANNY_ACCEPTANCE_THRESHOLD*100);
+
+        // ct_write_image("canny_vx.bmp", vxdst);
+        // ct_write_image("canny_ref.bmp", refdst);
+    }
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseThreshold(&hyst));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&src));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&dst));
+}
+
+TEST_WITH_ARG(vxCanny, Lena, canny_arg,
+    CANNY_ARG(3, L1, 100, 120, lena_gray),
+    CANNY_ARG(3, L2, 100, 120, lena_gray),
+    CANNY_ARG(3, L1, 90,  130, lena_gray),
+    CANNY_ARG(3, L2, 90,  130, lena_gray),
+    CANNY_ARG(3, L1, 70,  71 , lena_gray),
+    CANNY_ARG(3, L2, 70,  71 , lena_gray),
+    CANNY_ARG(3, L1, 150, 220, lena_gray),
+    CANNY_ARG(3, L2, 150, 220, lena_gray),
+    CANNY_ARG(5, L1, 100, 120, lena_gray),
+    CANNY_ARG(5, L2, 100, 120, lena_gray),
+    CANNY_ARG(7, L1, 100, 120, lena_gray),
+    CANNY_ARG(7, L2, 100, 120, lena_gray),
+
+    CANNY_ARG(5, L1, 1200, 1440, lena_gray),
+    CANNY_ARG(5, L2, 1200, 1440, lena_gray),
+    CANNY_ARG(7, L1, 16000, 19200, lena_gray),
+    CANNY_ARG(7, L2, 16000, 19200, lena_gray),
+
+    CANNY_ARG(3, L1, 100, 120, blurred_lena_gray),
+    CANNY_ARG(3, L2, 100, 120, blurred_lena_gray),
+    CANNY_ARG(3, L1, 90,  125, blurred_lena_gray),
+    CANNY_ARG(3, L2, 90,  130, blurred_lena_gray),
+    CANNY_ARG(3, L1, 70,  71 , blurred_lena_gray),
+    CANNY_ARG(3, L2, 70,  71 , blurred_lena_gray),
+    CANNY_ARG(3, L1, 150, 220, blurred_lena_gray),
+    CANNY_ARG(3, L2, 150, 220, blurred_lena_gray),
+    CANNY_ARG(5, L1, 100, 120, blurred_lena_gray),
+    CANNY_ARG(5, L2, 100, 120, blurred_lena_gray),
+    CANNY_ARG(7, L1, 100, 120, blurred_lena_gray),
+    CANNY_ARG(7, L2, 100, 120, blurred_lena_gray),
+
+)
+{
+    uint32_t total, count;
+    vx_image src, dst;
+    vx_threshold hyst;
+    vx_graph graph;
+    vx_node node;
+    CT_Image lena, vxdst, refdst, dist;
+    vx_int32 low_thresh  = arg_->low_thresh;
+    vx_int32 high_thresh = arg_->high_thresh;
+    vx_border_t border = { VX_BORDER_UNDEFINED, {{ 0 }} };
+    vx_int32 border_width = arg_->grad_size/2 + 1;
+    vx_context context = context_->vx_context_;
+    vx_enum thresh_data_type = VX_TYPE_UINT8;
+    if (low_thresh > 255)
+        thresh_data_type = VX_TYPE_INT16;
+
+    ASSERT_NO_FAILURE(lena = get_source_image(arg_->filename));
+    ASSERT_NO_FAILURE(src = ct_image_to_vx_image(lena, context));
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, lena->width, lena->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(hyst = vxCreateThreshold(context, VX_THRESHOLD_TYPE_RANGE, thresh_data_type), VX_TYPE_THRESHOLD);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_LOWER, &low_thresh,  sizeof(low_thresh)));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_UPPER, &high_thresh, sizeof(high_thresh)));
+    /* FALSE_VALUE and TRUE_VALUE of hyst parameter are set to their default values (0, 255) by vxCreateThreshold */
+    /* test reference data are computed with assumption that FALSE_VALUE and TRUE_VALUE set to 0 and 255 */
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxCannyEdgeDetectorNode(graph, src, hyst, arg_->grad_size, arg_->norm_type, dst), VX_TYPE_NODE);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    // run graph
+#ifdef EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseNode(&node));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseGraph(&graph));
+
+    ASSERT_NO_FAILURE(vxdst = ct_image_from_vx_image(dst));
+    ASSERT_NO_FAILURE(refdst = get_reference_result(arg_->filename, lena, low_thresh, high_thresh, arg_->grad_size, arg_->norm_type));
+
+    ASSERT_NO_FAILURE(ct_adjust_roi(vxdst,  border_width, border_width, border_width, border_width));
+    ASSERT_NO_FAILURE(ct_adjust_roi(refdst, border_width, border_width, border_width, border_width));
+
+    ASSERT_NO_FAILURE(dist = ct_allocate_image(refdst->width, refdst->height, VX_DF_IMAGE_U8));
+
+    // disttransform(x,y) < tolerance for all (x,y) such that output(x,y) = 255,
+    // where disttransform is the distance transform image with Euclidean distance
+    // of the reference(x,y) (canny edge ground truth). This condition should be
+    // satisfied by 98% of output edge pixels, tolerance = 2.
+    ASSERT_NO_FAILURE(count = disttransform2_metric(refdst, vxdst, dist, &total));
+    if (count < CANNY_ACCEPTANCE_THRESHOLD * total)
+    {
+        CT_RecordFailureAtFormat("disttransform(reference) < 2 only for %u of %u pixels of output edges which is %.2f%% < %.2f%%", __FUNCTION__, __FILE__, __LINE__,
+            count, total, count/(double)total*100, CANNY_ACCEPTANCE_THRESHOLD*100);
+
+        // ct_write_image("canny_vx.bmp", vxdst);
+        // ct_write_image("canny_ref.bmp", refdst);
+    }
+
+    // And the inverse: disttransform(x,y) < tolerance for all (x,y) such that
+    // reference(x,y) = 255, where disttransform is the distance transform image
+    // with Euclidean distance of the output(x,y) (canny edge ground truth). This
+    // condition should be satisfied by 98% of reference edge pixels, tolerance = 2.
+    ASSERT_NO_FAILURE(count = disttransform2_metric(vxdst, refdst, dist, &total));
+    if (count < CANNY_ACCEPTANCE_THRESHOLD * total)
+    {
+        CT_RecordFailureAtFormat("disttransform(output) < 2 only for %u of %u pixels of reference edges which is %.2f%% < %.2f%%", __FUNCTION__, __FILE__, __LINE__,
+            count, total, count/(double)total*100, CANNY_ACCEPTANCE_THRESHOLD*100);
+
+        // ct_write_image("canny_vx.bmp", vxdst);
+        // ct_write_image("canny_ref.bmp", refdst);
+    }
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseThreshold(&hyst));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&src));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&dst));
+}
+
+TESTCASE_TESTS(vxuCanny, DISABLED_BitExactL1, Lena)
+TESTCASE_TESTS(vxCanny,  DISABLED_BitExactL1, Lena)
diff --git a/test_conformance/test_channelcombine.c b/test_conformance/test_channelcombine.c
new file mode 100644
index 0000000..0171585
--- /dev/null
+++ b/test_conformance/test_channelcombine.c
@@ -0,0 +1,309 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(ChannelCombine, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(ChannelCombine, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src1_image = 0, src2_image = 0, src3_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src1_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src3_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_RGB), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxChannelCombineNode(graph, src1_image, src2_image, src3_image, NULL, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src1_image));
+    VX_CALL(vxReleaseImage(&src2_image));
+    VX_CALL(vxReleaseImage(&src3_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src1_image == 0);
+    ASSERT(src2_image == 0);
+    ASSERT(src3_image == 0);
+}
+
+
+static CT_Image channel_combine_image_generate_random(int width, int height, vx_df_image format)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, format, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+
+static void channel_combine_fill_chanel(CT_Image src, vx_enum channel, CT_Image dst)
+{
+    uint8_t *dst_base = NULL;
+    int x, y;
+
+    int plane, component;
+
+    int x_subsampling = ct_image_get_channel_subsampling_x(dst, channel);
+    int y_subsampling = ct_image_get_channel_subsampling_y(dst, channel);
+
+    int xstep = ct_image_get_channel_step_x(dst, channel);
+    int ystep = ct_image_get_channel_step_y(dst, channel);
+
+    int src_width = dst->width / x_subsampling;
+    int src_height = dst->height / y_subsampling;
+
+    // Check that src was subsampled (by spec)
+    ASSERT_EQ_INT(src_width, src->width);
+    ASSERT_EQ_INT(src_height, src->height);
+
+    ASSERT_NO_FAILURE(plane = ct_image_get_channel_plane(dst, channel));
+    ASSERT_NO_FAILURE(component = ct_image_get_channel_component(dst, channel));
+
+    ASSERT(dst_base = ct_image_get_plane_base(dst, plane));
+
+    for (y = 0; y < src_height; y++)
+    {
+        for (x = 0; x < src_width; x++)
+        {
+            uint8_t *src_data = CT_IMAGE_DATA_PTR_8U(src, x, y);
+            uint8_t *dst_data = dst_base + (x * xstep) + (y * ystep);
+            dst_data[component] = *src_data;
+        }
+    }
+
+    return;
+}
+
+
+static CT_Image channel_combine_create_reference_image(CT_Image src1, CT_Image src2, CT_Image src3, CT_Image src4, vx_df_image format)
+{
+    CT_Image dst = NULL;
+
+    ASSERT_(return NULL, src1);
+    ASSERT_NO_FAILURE_(return NULL, dst = ct_allocate_image(src1->width, src1->height, format));
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_RGB:
+        case VX_DF_IMAGE_RGBX:
+            ASSERT_(return NULL, src1);
+            ASSERT_(return NULL, src2);
+            ASSERT_(return NULL, src3);
+            if (format == VX_DF_IMAGE_RGB)
+                ASSERT_(return NULL, src4 == NULL);
+            ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src1, VX_CHANNEL_R, dst));
+            ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src2, VX_CHANNEL_G, dst));
+            ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src3, VX_CHANNEL_B, dst));
+            if (format == VX_DF_IMAGE_RGBX)
+                ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src4, VX_CHANNEL_A, dst));
+            return dst;
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+        case VX_DF_IMAGE_UYVY:
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_YUV4:
+            ASSERT_(return NULL, src1);
+            ASSERT_(return NULL, src2);
+            ASSERT_(return NULL, src3);
+            ASSERT_(return NULL, src4 == NULL);
+            ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src1, VX_CHANNEL_Y, dst));
+            ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src2, VX_CHANNEL_U, dst));
+            ASSERT_NO_FAILURE_(return NULL, channel_combine_fill_chanel(src3, VX_CHANNEL_V, dst));
+            return dst;
+    }
+
+    CT_FAIL_(return NULL, "Not supported");
+}
+
+static void channel_combine_check(CT_Image src1, CT_Image src2, CT_Image src3, CT_Image src4, CT_Image dst)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT_NO_FAILURE(dst_ref = channel_combine_create_reference_image(src1, src2, src3, src4, dst->format));
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+#define DUMP_SRC(i) \
+        if (src##i) \
+        { \
+            printf("=== SRC" #i " ===\n"); \
+            ct_dump_image_info(src##i); \
+        }
+        DUMP_SRC(1) DUMP_SRC(2) DUMP_SRC(3) DUMP_SRC(4)
+#undef DUMP_SRC
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    vx_df_image dst_format;
+    int width, height;
+} Arg;
+
+#define ADD_CASE(testArgName, nextmacro, format, ...) \
+    CT_EXPAND(nextmacro(testArgName "/" #format, __VA_ARGS__, format))
+
+#define ADD_CASES(testArgName, nextmacro, ...) \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGB, __VA_ARGS__),  \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGBX, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV12, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV21, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_UYVY, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUYV, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_IYUV, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUV4, __VA_ARGS__), \
+
+
+#define ADD_SIZE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=16x16", __VA_ARGS__, 16, 16))
+
+#define ChannelCombine_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_CASES, ADD_SIZE, ARG)
+
+TEST_WITH_ARG(ChannelCombine, testGraphProcessing, Arg,
+    ChannelCombine_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image[4] = {0, 0, 0, 0};
+    vx_image dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    int channels = 0, i;
+    CT_Image src[4] = {NULL, NULL, NULL, NULL};
+    CT_Image dst = NULL, dst_dummy = NULL;
+    vx_enum channel_ref;
+
+    ASSERT_NO_FAILURE(dst_dummy = ct_allocate_image(4, 4, arg_->dst_format));
+
+    ASSERT_NO_FAILURE(channels = ct_get_num_channels(arg_->dst_format));
+    channel_ref = (arg_->dst_format==VX_DF_IMAGE_RGB)||(arg_->dst_format==VX_DF_IMAGE_RGBX)?VX_CHANNEL_R:VX_CHANNEL_Y;
+    for (i = 0; i < channels; i++)
+    {
+        int w = arg_->width / ct_image_get_channel_subsampling_x(dst_dummy, channel_ref + i);
+        int h = arg_->height / ct_image_get_channel_subsampling_y(dst_dummy, channel_ref + i);
+        ASSERT_NO_FAILURE(src[i] = channel_combine_image_generate_random(w, h, VX_DF_IMAGE_U8));
+        ASSERT_VX_OBJECT(src_image[i] = ct_image_to_vx_image(src[i], context), VX_TYPE_IMAGE);
+    }
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, arg_->width, arg_->height, arg_->dst_format), VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxChannelCombineNode(graph, src_image[0], src_image[1], src_image[2], src_image[3], dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(channel_combine_check(src[0], src[1], src[2], src[3], dst));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    ASSERT(dst_image == 0);
+
+    for (i = 0; i < channels; i++)
+    {
+        VX_CALL(vxReleaseImage(&src_image[i]));
+        ASSERT(src_image[i] == 0);
+    }
+}
+
+TEST_WITH_ARG(ChannelCombine, testImmediateProcessing, Arg,
+    ChannelCombine_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image[4] = {0, 0, 0, 0};
+    vx_image dst_image = 0;
+
+    int channels = 0, i;
+    CT_Image src[4] = {NULL, NULL, NULL, NULL};
+    CT_Image dst = NULL, dst_dummy = NULL;
+    vx_enum channel_ref;
+
+    ASSERT_NO_FAILURE(dst_dummy = ct_allocate_image(4, 4, arg_->dst_format));
+
+    ASSERT_NO_FAILURE(channels = ct_get_num_channels(arg_->dst_format));
+    channel_ref = (arg_->dst_format==VX_DF_IMAGE_RGB)||(arg_->dst_format==VX_DF_IMAGE_RGBX)?VX_CHANNEL_R:VX_CHANNEL_Y;
+    for (i = 0; i < channels; i++)
+    {
+        int w = arg_->width / ct_image_get_channel_subsampling_x(dst_dummy, channel_ref + i);
+        int h = arg_->height / ct_image_get_channel_subsampling_y(dst_dummy, channel_ref + i);
+        ASSERT_NO_FAILURE(src[i] = channel_combine_image_generate_random(w, h, VX_DF_IMAGE_U8));
+        ASSERT_VX_OBJECT(src_image[i] = ct_image_to_vx_image(src[i], context), VX_TYPE_IMAGE);
+    }
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, arg_->width, arg_->height, arg_->dst_format), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuChannelCombine(context, src_image[0], src_image[1], src_image[2], src_image[3], dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(channel_combine_check(src[0], src[1], src[2], src[3], dst));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    ASSERT(dst_image == 0);
+
+    for (i = 0; i < channels; i++)
+    {
+        VX_CALL(vxReleaseImage(&src_image[i]));
+        ASSERT(src_image[i] == 0);
+    }
+}
+
+TESTCASE_TESTS(ChannelCombine,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_channelextract.c b/test_conformance/test_channelextract.c
new file mode 100644
index 0000000..ad7629c
--- /dev/null
+++ b/test_conformance/test_channelextract.c
@@ -0,0 +1,259 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(ChannelExtract, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(ChannelExtract, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_RGB), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxChannelExtractNode(graph, src_image, VX_CHANNEL_0, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+static CT_Image channel_extract_image_generate_random(int width, int height, vx_df_image format)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, format, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+
+static void channel_extract_plane(CT_Image src, vx_enum channel, CT_Image* dst)
+{
+    uint8_t *src_base = NULL;
+    int x, y;
+
+    int plane, component;
+
+    int x_subsampling = ct_image_get_channel_subsampling_x(src, channel);
+    int y_subsampling = ct_image_get_channel_subsampling_y(src, channel);
+
+    int xstep = ct_image_get_channel_step_x(src, channel);
+    int ystep = ct_image_get_channel_step_y(src, channel);
+
+    int dst_width = src->width / x_subsampling;
+    int dst_height = src->height / y_subsampling;
+
+    ASSERT_NO_FAILURE(plane = ct_image_get_channel_plane(src, channel));
+    ASSERT_NO_FAILURE(component = ct_image_get_channel_component(src, channel));
+
+    ASSERT(src_base = ct_image_get_plane_base(src, plane));
+
+    ASSERT_NO_FAILURE(*dst = ct_allocate_image(dst_width, dst_height, VX_DF_IMAGE_U8));
+
+    for (y = 0; y < dst_height; y++)
+    {
+        for (x = 0; x < dst_width; x++)
+        {
+            uint8_t* dst_data = CT_IMAGE_DATA_PTR_8U(*dst, x, y);
+            uint8_t *src_data = src_base + (x * xstep) + (y * ystep);
+            *dst_data = src_data[component];
+        }
+    }
+
+    return;
+}
+
+
+static CT_Image channel_extract_create_reference_image(CT_Image src, vx_enum channelNum)
+{
+    CT_Image dst = NULL;
+
+    ASSERT_NO_FAILURE_(return NULL, channel_extract_plane(src, channelNum, &dst));
+
+    ASSERT_(return NULL, dst);
+    return dst;
+}
+
+
+typedef struct {
+    const char* testName;
+    vx_df_image format;
+    vx_enum channel;
+    int width, height;
+} Arg;
+
+#define ADD_CASE(testArgName, nextmacro, format, channel, ...) \
+    CT_EXPAND(nextmacro(testArgName "/" #format "/" #channel, __VA_ARGS__, format, channel))
+
+#define ADD_CASES(testArgName, nextmacro, ...) \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGB, VX_CHANNEL_R, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGB, VX_CHANNEL_G, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGB, VX_CHANNEL_B, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGBX, VX_CHANNEL_R, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGBX, VX_CHANNEL_G, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGBX, VX_CHANNEL_B, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_RGBX, VX_CHANNEL_A, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV12, VX_CHANNEL_Y, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV12, VX_CHANNEL_U, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV12, VX_CHANNEL_V, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV21, VX_CHANNEL_Y, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV21, VX_CHANNEL_U, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_NV21, VX_CHANNEL_V, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_UYVY, VX_CHANNEL_Y, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_UYVY, VX_CHANNEL_U, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_UYVY, VX_CHANNEL_V, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUYV, VX_CHANNEL_Y, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUYV, VX_CHANNEL_U, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUYV, VX_CHANNEL_V, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_IYUV, VX_CHANNEL_Y, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_IYUV, VX_CHANNEL_U, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_IYUV, VX_CHANNEL_V, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUV4, VX_CHANNEL_Y, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUV4, VX_CHANNEL_U, __VA_ARGS__), \
+    ADD_CASE(testArgName, nextmacro, VX_DF_IMAGE_YUV4, VX_CHANNEL_V, __VA_ARGS__)
+
+
+#define ADD_SIZE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=16x16", __VA_ARGS__, 16, 16))
+
+#define ChannelExtract_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_CASES, ADD_SIZE, ARG)
+
+TEST_WITH_ARG(ChannelExtract, testGraphProcessing, Arg,
+    ChannelExtract_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    CT_Image dst_ref = NULL;
+
+    ASSERT_NO_FAILURE(src = channel_extract_image_generate_random(arg_->width, arg_->height, arg_->format));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(dst_ref = channel_extract_create_reference_image(src, arg_->channel));
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, dst_ref->width, dst_ref->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxChannelExtractNode(graph, src_image, arg_->channel, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(ChannelExtract, testImmediateProcessing, Arg,
+    ChannelExtract_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    CT_Image dst_ref = NULL;
+
+    ASSERT_NO_FAILURE(src = channel_extract_image_generate_random(arg_->width, arg_->height, arg_->format));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(dst_ref = channel_extract_create_reference_image(src, arg_->channel));
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, dst_ref->width, dst_ref->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuChannelExtract(context, src_image, arg_->channel, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(ChannelExtract,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_controlflow.c b/test_conformance/test_controlflow.c
new file mode 100644
index 0000000..c3523c7
--- /dev/null
+++ b/test_conformance/test_controlflow.c
@@ -0,0 +1,562 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <float.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(ControlFlow, CT_VXContext, ct_setup_vx_context, 0)
+
+static vx_reference create_reference(vx_context context, vx_enum type)
+{
+    vx_reference ref = 0;
+    vx_uint8 value = 0;
+    vx_enum format = VX_DF_IMAGE_U8;
+    vx_uint32 src_width = 128, src_height = 128;
+    vx_uint32 img_width = 10, img_height = 10;
+    vx_enum item_type = VX_TYPE_UINT8;
+    vx_size capacity = 20;
+    vx_size levels = 8;
+    vx_float32 scale = 0.5f;
+    vx_size bins = 36;
+    vx_int32 offset = 0;
+    vx_uint32 range = 360;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_size num_items = 100;
+    vx_size m = 5, n = 5;
+    vx_size object_array_count = 10;
+    vx_size convolution_x = 3;
+    vx_size convolution_y = 3;
+    vx_scalar scalar = 0;
+    vx_size tensor_dims_num = 2;
+    vx_size tensor_dims_length = 8;
+    vx_size *dims;
+
+    switch (type)
+    {
+    case VX_TYPE_IMAGE:
+        ref = (vx_reference)vxCreateImage(context, src_width, src_height, format);
+        break;
+    case VX_TYPE_ARRAY:
+        ref = (vx_reference)vxCreateArray(context, item_type, capacity);
+        break;
+    case VX_TYPE_PYRAMID:
+        ref = (vx_reference)vxCreatePyramid(context, levels, scale, src_width, src_height, format);
+        break;
+    case VX_TYPE_SCALAR:
+        ref = (vx_reference)vxCreateScalar(context, item_type, &value);
+        break;
+    case VX_TYPE_MATRIX:
+        ref = (vx_reference)vxCreateMatrix(context, item_type, m, n);
+        break;
+    case VX_TYPE_CONVOLUTION:
+        ref = (vx_reference)vxCreateConvolution(context, convolution_x, convolution_y);
+        break;
+    case VX_TYPE_DISTRIBUTION:
+        ref = (vx_reference)vxCreateDistribution(context, bins, offset, range);
+        break;
+    case VX_TYPE_REMAP:
+    {
+        vx_remap remap = vxCreateRemap(context, img_width, img_height, img_width*2, img_height*2);
+
+        vx_rectangle_t rect = { 0, 0,  img_width*2, img_height*2};
+        vx_size stride = img_width*2;
+        vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+        vx_size size = stride * img_height*2;
+        vx_coordinates2df_t* ptr_w = malloc(sizeof(vx_coordinates2df_t) * size);
+        for (vx_size i = 0; i < img_height*2; i++)
+        {
+            for (vx_size j = 0; j < img_width*2; j++)
+            {
+                vx_coordinates2df_t *coord_ptr = &(ptr_w[i * stride + j]);
+                coord_ptr->x = (vx_float32)j;
+                coord_ptr->y = (vx_float32)i;
+            }
+        }
+        vxCopyRemapPatch(remap, &rect, stride_y, ptr_w, VX_TYPE_COORDINATES2DF, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+
+        ref = (vx_reference)remap;
+        free(ptr_w);
+        break;
+    }
+    case VX_TYPE_LUT:
+        ref = (vx_reference)vxCreateLUT(context, item_type, num_items);
+        break;
+    case VX_TYPE_THRESHOLD:
+        ref = (vx_reference)vxCreateThresholdForImage(context, thresh_type, format, format);
+        break;
+    case VX_TYPE_OBJECT_ARRAY:
+        scalar = vxCreateScalar(context, item_type, &value);
+        ref = (vx_reference)vxCreateObjectArray(context, (vx_reference)scalar, object_array_count);
+        vxReleaseScalar(&scalar);
+        break;
+    case VX_TYPE_TENSOR:
+        dims = malloc(tensor_dims_num * sizeof(vx_size));
+        for(vx_size i = 0; i < tensor_dims_num; i++)
+        {
+            dims[i] = tensor_dims_length;
+        }
+        ref = (vx_reference)vxCreateTensor(context, tensor_dims_num, dims, VX_TYPE_UINT8, 0);
+        free(dims);
+        break;
+    default:
+        break;
+    }
+    return ref;
+}
+
+typedef struct
+{
+    const char* testName;
+    const char* p;
+    vx_enum item_type;
+} select_arg;
+
+#define  ADD_VX_CONTROLFLOW_TYPES(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_IMAGE", __VA_ARGS__, VX_TYPE_IMAGE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_SCALAR", __VA_ARGS__, VX_TYPE_SCALAR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_MATRIX", __VA_ARGS__, VX_TYPE_MATRIX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_CONVOLUTION", __VA_ARGS__, VX_TYPE_CONVOLUTION)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_DISTRIBUTION", __VA_ARGS__, VX_TYPE_DISTRIBUTION)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_LUT", __VA_ARGS__, VX_TYPE_LUT)),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_OBJECT_ARRAY", __VA_ARGS__, VX_TYPE_OBJECT_ARRAY)),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_PYRAMID", __VA_ARGS__, VX_TYPE_PYRAMID)),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_THRESHOLD", __VA_ARGS__, VX_TYPE_THRESHOLD)),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_TENSOR", __VA_ARGS__, VX_TYPE_TENSOR )),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_REMAP", __VA_ARGS__, VX_TYPE_REMAP))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("controlflow", ADD_VX_CONTROLFLOW_TYPES, ARG, NULL)
+
+
+TEST_WITH_ARG(ControlFlow, testSelectNode, select_arg, PARAMETERS)
+{
+    vx_reference true_value = NULL;
+    vx_reference false_value = NULL;
+    vx_reference output = NULL;
+    vx_enum input_type = arg_->item_type;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_scalar scalar_true = 0;
+    vx_bool bool_true = vx_true_e;
+
+    vx_context context = context_->vx_context_;
+    ASSERT_VX_OBJECT(true_value = create_reference(context, input_type), (enum vx_type_e)input_type);
+    ASSERT_VX_OBJECT(false_value = create_reference(context, input_type), (enum vx_type_e)input_type);
+    ASSERT_VX_OBJECT(output = create_reference(context, input_type), (enum vx_type_e)input_type);
+    ASSERT_VX_OBJECT(scalar_true = vxCreateScalar(context, VX_TYPE_BOOL, &bool_true), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxSelectNode(graph, scalar_true, true_value, false_value, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseReference(&true_value));
+    VX_CALL(vxReleaseReference(&false_value));
+    VX_CALL(vxReleaseReference(&output));
+    VX_CALL(vxReleaseScalar(&scalar_true));
+}
+
+typedef union
+{
+    vx_char     chr;
+    vx_int8     s08;
+    vx_uint8    u08;
+    vx_int16    s16;
+    vx_uint16   u16;
+    vx_int32    s32;
+    vx_uint32   u32;
+    vx_int64    s64;
+    vx_uint64   u64;
+    vx_float32  f32;
+    vx_float64  f64;
+    vx_enum     enm;
+    vx_size     size;
+    vx_df_image fcc;
+    vx_bool     boolean;
+    vx_uint8    data[8];
+
+} scalar_val;
+
+typedef struct
+{
+    const char* testName;
+    vx_enum operation;
+    vx_enum param_a_type;
+    vx_enum param_b_type;
+    vx_enum result_type;
+    const char * a_value;
+    const char * b_value;
+    const char * o_check;
+} scalar_op_arg;
+
+#define PARAMETERS_SCALAR_OP \
+    ARG("ControlFlow/AND/BOOL",  VX_SCALAR_OP_AND,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "0|vx_false_e"),\
+    ARG("ControlFlow/AND/BOOL",  VX_SCALAR_OP_AND,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e",  "0|vx_false_e"),\
+    ARG("ControlFlow/AND/BOOL",  VX_SCALAR_OP_AND,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "0|vx_false_e", "0|vx_false_e"),\
+    ARG("ControlFlow/AND/BOOL",  VX_SCALAR_OP_AND,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "1|vx_true_e",  "1|vx_true_e") ,\
+    ARG("ControlFlow/OR/BOOL",   VX_SCALAR_OP_OR,   VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "0|vx_false_e"),\
+    ARG("ControlFlow/OR/BOOL",   VX_SCALAR_OP_OR,   VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e",  "1|vx_true_e"),\
+    ARG("ControlFlow/OR/BOOL",   VX_SCALAR_OP_OR,   VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "0|vx_false_e", "1|vx_true_e"),\
+    ARG("ControlFlow/OR/BOOL",   VX_SCALAR_OP_OR,   VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "1|vx_true_e",  "1|vx_true_e"),\
+    ARG("ControlFlow/XOR/BOOL",  VX_SCALAR_OP_XOR,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "0|vx_false_e"),\
+    ARG("ControlFlow/XOR/BOOL",  VX_SCALAR_OP_XOR,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e",  "1|vx_true_e"),\
+    ARG("ControlFlow/XOR/BOOL",  VX_SCALAR_OP_XOR,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "0|vx_false_e", "1|vx_true_e"),\
+    ARG("ControlFlow/XOR/BOOL",  VX_SCALAR_OP_XOR,  VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "1|vx_true_e",  "0|vx_false_e"),\
+    ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "1|vx_true_e"),\
+    ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e",  "1|vx_true_e"),\
+    ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "0|vx_false_e", "1|vx_true_e"),\
+    ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e",  "1|vx_true_e",  "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/INT8",   VX_SCALAR_OP_EQUAL, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "-1", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/INT8",   VX_SCALAR_OP_EQUAL, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/UINT8",  VX_SCALAR_OP_EQUAL, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "0", "2", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/UINT8",  VX_SCALAR_OP_EQUAL, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "2", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/INT16",  VX_SCALAR_OP_EQUAL, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "-3", "3", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/INT16",  VX_SCALAR_OP_EQUAL, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "3", "3", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/UINT16", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "0", "4", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/UINT16", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "4", "4", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/INT32",  VX_SCALAR_OP_EQUAL, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "-5", "5", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/INT32",  VX_SCALAR_OP_EQUAL, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "5", "5", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/UINT32", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "0", "6", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/UINT32", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "6", "6", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/SIZE",   VX_SCALAR_OP_EQUAL, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "-7", "7", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/SIZE",   VX_SCALAR_OP_EQUAL, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "7", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/EQUAL/FLOAT32",VX_SCALAR_OP_EQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "-1.5f", "1.5f", "0|vx_false_e"),\
+    ARG("ControlFlow/EQUAL/FLOAT32",VX_SCALAR_OP_EQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "1.5f", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/INT8",   VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/UINT8",  VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "2", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/INT16",  VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "3", "3", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/UINT16", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "4", "4", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/INT32",  VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "5", "5", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/UINT32", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "6", "6", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/SIZE",   VX_SCALAR_OP_NOTEQUAL, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "7", "7", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/FLOAT32",VX_SCALAR_OP_NOTEQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "1.5f", "0|vx_false_e"),\
+    ARG("ControlFlow/NOTEQUAL/INT8",   VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "2", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/UINT8",  VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "4", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/INT16",  VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "3", "5", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/UINT16", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "4", "6", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/INT32",  VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "5", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/UINT32", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "6", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/SIZE",   VX_SCALAR_OP_NOTEQUAL, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "7", "8", "1|vx_true_e"),\
+    ARG("ControlFlow/NOTEQUAL/FLOAT32",VX_SCALAR_OP_NOTEQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "2.5f", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/INT8",   VX_SCALAR_OP_LESS, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "-2", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/UINT8",  VX_SCALAR_OP_LESS, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/INT16",  VX_SCALAR_OP_LESS, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "3", "-5", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/UINT16", VX_SCALAR_OP_LESS, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "4", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/INT32",  VX_SCALAR_OP_LESS, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "5", "-7", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/UINT32", VX_SCALAR_OP_LESS, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "6", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/SIZE",   VX_SCALAR_OP_LESS, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "7", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/FLOAT32",VX_SCALAR_OP_LESS, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "-2.5f", "0|vx_false_e"),\
+    ARG("ControlFlow/LESS/INT8",   VX_SCALAR_OP_LESS, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "2", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/UINT8",  VX_SCALAR_OP_LESS, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "4", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/INT16",  VX_SCALAR_OP_LESS, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "3", "5", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/UINT16", VX_SCALAR_OP_LESS, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "4", "6", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/INT32",  VX_SCALAR_OP_LESS, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "5", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/UINT32", VX_SCALAR_OP_LESS, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "6", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/SIZE",   VX_SCALAR_OP_LESS, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "7", "8", "1|vx_true_e"),\
+    ARG("ControlFlow/LESS/FLOAT32",VX_SCALAR_OP_LESS, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "2.5f", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/INT8",   VX_SCALAR_OP_LESSEQ, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "-2", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/UINT8",  VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "0", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/INT16",  VX_SCALAR_OP_LESSEQ, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "4", "-5", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/UINT16", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "5", "0", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/INT32",  VX_SCALAR_OP_LESSEQ, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "6", "-7", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/UINT32", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "7", "0", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/SIZE",   VX_SCALAR_OP_LESSEQ, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "8", "7", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/FLOAT32",VX_SCALAR_OP_LESSEQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "-1.5f", "0|vx_false_e"),\
+    ARG("ControlFlow/LESSEQ/INT8",   VX_SCALAR_OP_LESSEQ, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "1", "2", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/UINT8",  VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "3", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/INT16",  VX_SCALAR_OP_LESSEQ, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "4", "5", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/UINT16", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "5", "5", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/INT32",  VX_SCALAR_OP_LESSEQ, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "6", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/UINT32", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "7", "8", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/SIZE",   VX_SCALAR_OP_LESSEQ, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "8", "9", "1|vx_true_e"),\
+    ARG("ControlFlow/LESSEQ/FLOAT32",VX_SCALAR_OP_LESSEQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "2.0f", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/INT8",   VX_SCALAR_OP_GREATER, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/UINT8",  VX_SCALAR_OP_GREATER, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "0", "2", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/INT16",  VX_SCALAR_OP_GREATER, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "-4", "3", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/UINT16", VX_SCALAR_OP_GREATER, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "0", "4", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/INT32",  VX_SCALAR_OP_GREATER, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "-6", "5", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/UINT32", VX_SCALAR_OP_GREATER, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "1", "6", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/SIZE",   VX_SCALAR_OP_GREATER, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "0", "7", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/FLOAT32",VX_SCALAR_OP_GREATER, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "-2.0f", "1.5f", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATER/INT8",   VX_SCALAR_OP_GREATER, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/UINT8",  VX_SCALAR_OP_GREATER, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "3", "2", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/INT16",  VX_SCALAR_OP_GREATER, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "4", "3", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/UINT16", VX_SCALAR_OP_GREATER, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "5", "4", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/INT32",  VX_SCALAR_OP_GREATER, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "6", "5", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/UINT32", VX_SCALAR_OP_GREATER, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "7", "6", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/SIZE",   VX_SCALAR_OP_GREATER, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "8", "7", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATER/FLOAT32",VX_SCALAR_OP_GREATER, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "2.0f", "1.5f", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/INT8",    VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/UINT8",   VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/INT16",   VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/UINT16",  VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/INT32",   VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/UINT32",  VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/SIZE",    VX_SCALAR_OP_GREATEREQ, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/FLOAT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\
+    ARG("ControlFlow/GREATEREQ/INT8",    VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_BOOL, "-1", "-1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/UINT8",   VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/INT16",   VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/UINT16",  VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/INT32",   VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/UINT32",  VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/SIZE",    VX_SCALAR_OP_GREATEREQ, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\
+    ARG("ControlFlow/GREATEREQ/FLOAT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "2.0f", "1.0f", "1|vx_true_e"),\
+    ARG("ControlFlow/ADD/INT8",   VX_SCALAR_OP_ADD, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_INT8,   "2",   "1",    "3"),\
+    ARG("ControlFlow/ADD/INT8",   VX_SCALAR_OP_ADD, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_INT8,   "2",   "-1",    "1"),\
+    ARG("ControlFlow/ADD/UINT8",  VX_SCALAR_OP_ADD, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_UINT8,  "3",   "2",    "5"),\
+    ARG("ControlFlow/ADD/INT16",  VX_SCALAR_OP_ADD, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_INT16,  "4",   "3",    "7"),\
+    ARG("ControlFlow/ADD/INT16",  VX_SCALAR_OP_ADD, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_INT16,  "4",   "-3",    "1"),\
+    ARG("ControlFlow/ADD/UINT16", VX_SCALAR_OP_ADD, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_UINT16, "5",   "4",    "9"),\
+    ARG("ControlFlow/ADD/INT32",  VX_SCALAR_OP_ADD, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_INT32,  "6",   "5",    "11"),\
+    ARG("ControlFlow/ADD/INT32",  VX_SCALAR_OP_ADD, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_INT32,  "-6",   "5",    "-1"),\
+    ARG("ControlFlow/ADD/UINT32", VX_SCALAR_OP_ADD, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_UINT32, "7",   "6",    "13"),\
+    ARG("ControlFlow/ADD/SIZE",   VX_SCALAR_OP_ADD, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_SIZE,   "8",   "7",    "15"),\
+    ARG("ControlFlow/ADD/FLOAT32",VX_SCALAR_OP_ADD, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "-1.5f", "1.0f", "-0.5f"),\
+    ARG("ControlFlow/SUBTRACT/INT8",   VX_SCALAR_OP_SUBTRACT, VX_TYPE_INT8,    VX_TYPE_INT8,   VX_TYPE_INT8,    "2",    "1",     "1"),\
+    ARG("ControlFlow/SUBTRACT/UINT8",  VX_SCALAR_OP_SUBTRACT, VX_TYPE_UINT8,   VX_TYPE_UINT8,  VX_TYPE_UINT8,   "3",    "2",     "1"),\
+    ARG("ControlFlow/SUBTRACT/INT16",  VX_SCALAR_OP_SUBTRACT, VX_TYPE_INT16,   VX_TYPE_INT16,  VX_TYPE_INT16,   "4",    "3",     "1"),\
+    ARG("ControlFlow/SUBTRACT/UINT16", VX_SCALAR_OP_SUBTRACT, VX_TYPE_UINT16,  VX_TYPE_UINT16, VX_TYPE_UINT16,  "5",    "4",     "1"),\
+    ARG("ControlFlow/SUBTRACT/INT32",  VX_SCALAR_OP_SUBTRACT, VX_TYPE_INT32,   VX_TYPE_INT32,  VX_TYPE_INT32,   "6",    "5",     "1"),\
+    ARG("ControlFlow/SUBTRACT/UINT32", VX_SCALAR_OP_SUBTRACT, VX_TYPE_UINT32,  VX_TYPE_UINT32, VX_TYPE_UINT32,  "7",    "6",     "1"),\
+    ARG("ControlFlow/SUBTRACT/SIZE",   VX_SCALAR_OP_SUBTRACT, VX_TYPE_SIZE,    VX_TYPE_SIZE,   VX_TYPE_SIZE,    "8",    "7",     "1"),\
+    ARG("ControlFlow/SUBTRACT/FLOAT32",VX_SCALAR_OP_SUBTRACT, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "1.0f", "1.0f", "0.0f"),\
+    ARG("ControlFlow/MULTIPLY/INT8",   VX_SCALAR_OP_MULTIPLY, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_INT8,    "2",    "2",     "4"),\
+    ARG("ControlFlow/MULTIPLY/UINT8",  VX_SCALAR_OP_MULTIPLY, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_UINT8,   "3",    "2",     "6"),\
+    ARG("ControlFlow/MULTIPLY/INT16",  VX_SCALAR_OP_MULTIPLY, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_INT16,   "4",    "2",     "8"),\
+    ARG("ControlFlow/MULTIPLY/UINT16", VX_SCALAR_OP_MULTIPLY, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_UINT16,  "5",    "2",     "10"),\
+    ARG("ControlFlow/MULTIPLY/INT32",  VX_SCALAR_OP_MULTIPLY, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_INT32,   "6",    "2",     "12"),\
+    ARG("ControlFlow/MULTIPLY/UINT32", VX_SCALAR_OP_MULTIPLY, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_UINT32,  "7",    "2",     "14"),\
+    ARG("ControlFlow/MULTIPLY/SIZE",   VX_SCALAR_OP_MULTIPLY, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_SIZE,    "8",    "2",     "16"),\
+    ARG("ControlFlow/MULTIPLY/FLOAT32",VX_SCALAR_OP_MULTIPLY, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "1.0f", "2.0f", "2.0f"),\
+    ARG("ControlFlow/MULTIPLY/FLOAT32",VX_SCALAR_OP_MULTIPLY, VX_TYPE_SIZE, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "4", "0.5f", "2.0f"),\
+    ARG("ControlFlow/DIVIDE/INT8",   VX_SCALAR_OP_DIVIDE, VX_TYPE_INT8,    VX_TYPE_INT8,   VX_TYPE_INT8,    "4",     "2",     "2"),\
+    ARG("ControlFlow/DIVIDE/UINT8",  VX_SCALAR_OP_DIVIDE, VX_TYPE_UINT8,   VX_TYPE_UINT8,  VX_TYPE_UINT8,   "6",     "3",     "2"),\
+    ARG("ControlFlow/DIVIDE/INT16",  VX_SCALAR_OP_DIVIDE, VX_TYPE_INT16,   VX_TYPE_INT16,  VX_TYPE_INT16,    "8",     "4",     "2"),\
+    ARG("ControlFlow/DIVIDE/UINT16", VX_SCALAR_OP_DIVIDE, VX_TYPE_UINT16,  VX_TYPE_UINT16, VX_TYPE_UINT16,  "10",    "5",     "2"),\
+    ARG("ControlFlow/DIVIDE/INT32",  VX_SCALAR_OP_DIVIDE, VX_TYPE_INT32,   VX_TYPE_INT32,  VX_TYPE_INT32,   "12",    "6",     "2"),\
+    ARG("ControlFlow/DIVIDE/UINT32", VX_SCALAR_OP_DIVIDE, VX_TYPE_UINT32,  VX_TYPE_UINT32, VX_TYPE_UINT32,  "14",    "7",     "2"),\
+    ARG("ControlFlow/DIVIDE/SIZE",   VX_SCALAR_OP_DIVIDE, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_SIZE,    "16",    "8",     "2"),\
+    ARG("ControlFlow/DIVIDE/FLOAT32",VX_SCALAR_OP_DIVIDE, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "1.0f", "2.0f", "0.5f"),\
+    ARG("ControlFlow/DIVIDE/FLOAT32",VX_SCALAR_OP_DIVIDE, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_FLOAT32, "7", "2", "3"),\
+    ARG("ControlFlow/MODULUS/INT8",   VX_SCALAR_OP_MODULUS, VX_TYPE_INT8,   VX_TYPE_INT8,   VX_TYPE_INT8,    "5",     "2",     "1"),\
+    ARG("ControlFlow/MODULUS/UINT8",  VX_SCALAR_OP_MODULUS, VX_TYPE_UINT8,  VX_TYPE_UINT8,  VX_TYPE_UINT8,   "8",     "3",     "2"),\
+    ARG("ControlFlow/MODULUS/INT16",  VX_SCALAR_OP_MODULUS, VX_TYPE_INT16,  VX_TYPE_INT16,  VX_TYPE_INT16,    "8",     "4",     "0"),\
+    ARG("ControlFlow/MODULUS/UINT16", VX_SCALAR_OP_MODULUS, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16,  "10",    "6",     "4"),\
+    ARG("ControlFlow/MODULUS/INT32",  VX_SCALAR_OP_MODULUS, VX_TYPE_INT32,  VX_TYPE_INT32,  VX_TYPE_INT32,   "12",    "7",     "5"),\
+    ARG("ControlFlow/MODULUS/UINT32", VX_SCALAR_OP_MODULUS, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32,  "14",    "13",     "1"),\
+    ARG("ControlFlow/MIN/INT8",   VX_SCALAR_OP_MIN, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_INT8,    "4",     "-2",     "-2"),\
+    ARG("ControlFlow/MIN/UINT8",  VX_SCALAR_OP_MIN, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_UINT8,   "6",     "3",     "3"),\
+    ARG("ControlFlow/MIN/INT16",  VX_SCALAR_OP_MIN, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_INT16,    "8",     "4",     "4"),\
+    ARG("ControlFlow/MIN/UINT16", VX_SCALAR_OP_MIN, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_UINT16,  "10",    "5",     "5"),\
+    ARG("ControlFlow/MIN/INT32",  VX_SCALAR_OP_MIN, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_INT32,   "12",    "6",     "6"),\
+    ARG("ControlFlow/MIN/UINT32", VX_SCALAR_OP_MIN, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_UINT32,  "14",    "7",     "7"),\
+    ARG("ControlFlow/MIN/SIZE",   VX_SCALAR_OP_MIN, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_SIZE,    "16",    "8",     "8"),\
+    ARG("ControlFlow/MIN/FLOAT32",VX_SCALAR_OP_MIN, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "2.0f", "-1.0f", "-1.0f"),\
+    ARG("ControlFlow/MIN/FLOAT32",VX_SCALAR_OP_MIN, VX_TYPE_FLOAT32, VX_TYPE_INT32,   VX_TYPE_INT32,   "7.1f", "7",     "7"),\
+    ARG("ControlFlow/MIN/FLOAT32",VX_SCALAR_OP_MIN, VX_TYPE_FLOAT32, VX_TYPE_UINT32,  VX_TYPE_UINT32,  "0.5f",  "1",    "0"),\
+    ARG("ControlFlow/MAX_INT8",   VX_SCALAR_OP_MAX, VX_TYPE_INT8,    VX_TYPE_INT8,    VX_TYPE_INT8,    "4",     "2",     "4"),\
+    ARG("ControlFlow/MAX_UINT8",  VX_SCALAR_OP_MAX, VX_TYPE_UINT8,   VX_TYPE_UINT8,   VX_TYPE_UINT8,   "6",     "3",     "6"),\
+    ARG("ControlFlow/MAX_INT16",  VX_SCALAR_OP_MAX, VX_TYPE_INT16,   VX_TYPE_INT16,   VX_TYPE_INT16,    "8",     "4",     "8"),\
+    ARG("ControlFlow/MAX_UINT16", VX_SCALAR_OP_MAX, VX_TYPE_UINT16,  VX_TYPE_UINT16,  VX_TYPE_UINT16,  "10",    "5",     "10"),\
+    ARG("ControlFlow/MAX_INT32",  VX_SCALAR_OP_MAX, VX_TYPE_INT32,   VX_TYPE_INT32,   VX_TYPE_INT32,   "12",    "-6",     "12"),\
+    ARG("ControlFlow/MAX_UINT32", VX_SCALAR_OP_MAX, VX_TYPE_UINT32,  VX_TYPE_UINT32,  VX_TYPE_UINT32,  "14",    "7",     "14"),\
+    ARG("ControlFlow/MAX_SIZE",   VX_SCALAR_OP_MAX, VX_TYPE_SIZE,    VX_TYPE_SIZE,    VX_TYPE_SIZE,    "16",    "8",     "16"),\
+    ARG("ControlFlow/MAX/FLOAT32",VX_SCALAR_OP_MAX, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "2.0f", "1.0f", "2.0f"),\
+    ARG("ControlFlow/MAX/FLOAT32",VX_SCALAR_OP_MAX, VX_TYPE_FLOAT32, VX_TYPE_UINT32,  VX_TYPE_UINT32,  "2.99f", "3",     "3"),\
+    ARG("ControlFlow/MAX/FLOAT32",VX_SCALAR_OP_MAX, VX_TYPE_FLOAT32, VX_TYPE_INT32,   VX_TYPE_FLOAT32, "2.99f","-3",     "2.99f"),\
+
+static vx_status ReadValueFromString(const char * str, vx_enum type, scalar_val * val)
+{
+    vx_status status = VX_SUCCESS;
+    switch (type)
+    {
+    case VX_TYPE_CHAR:
+        val->chr = atoi(str);
+        break;
+
+    case VX_TYPE_INT8:
+        val->s08 = atoi(str);
+        break;
+
+    case VX_TYPE_UINT8:
+        val->u08 = atoi(str);
+        break;
+
+    case VX_TYPE_INT16:
+        val->s16 = atoi(str);
+        break;
+
+    case VX_TYPE_UINT16:
+        val->u16 = atoi(str);
+        break;
+
+    case VX_TYPE_INT32:
+        val->s32 = atoi(str);
+        break;
+
+    case VX_TYPE_UINT32:
+        val->u32 = atoi(str);
+        break;
+
+    case VX_TYPE_INT64:
+        val->s64 = atoi(str);
+        break;
+
+    case VX_TYPE_UINT64:
+        val->u64 = atoi(str);
+        break;
+
+    case VX_TYPE_FLOAT32:
+        val->f32 = atof(str);
+        break;
+
+    case VX_TYPE_SIZE:
+        val->size = atoi(str);
+        break;
+
+    case VX_TYPE_BOOL:
+        val->boolean = atoi(str) ? vx_true_e : vx_false_e;
+        break;
+
+    default:
+        status = VX_ERROR_INVALID_TYPE;
+        break;
+    }
+    return status;
+}
+
+
+TEST_WITH_ARG(ControlFlow, testScalarOperationNode, scalar_op_arg, PARAMETERS_SCALAR_OP)
+{
+    vx_node node = 0;
+    vx_graph graph = 0;
+    vx_scalar a = 0, b = 0, o = 0;
+    vx_context context = context_->vx_context_;
+
+    vx_enum param_a_type = arg_->param_a_type;
+    vx_enum param_b_type = arg_->param_b_type;
+    vx_enum operation = arg_->operation;
+    vx_enum result_type = arg_->result_type;
+    scalar_val a_value;
+    scalar_val b_value;
+    scalar_val o_check;
+    scalar_val o_value;
+
+    VX_CALL(ReadValueFromString(arg_->a_value, arg_->param_a_type, &a_value));
+    VX_CALL(ReadValueFromString(arg_->b_value, arg_->param_b_type, &b_value));
+    VX_CALL(ReadValueFromString(arg_->o_check, arg_->result_type,  &o_check));
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(a = vxCreateScalar(context, param_a_type, &a_value), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(b = vxCreateScalar(context, param_b_type, &b_value), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(o = vxCreateScalar(context, result_type, &o_value), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(node = vxScalarOperationNode(graph, operation , a, b, o), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    switch (result_type)
+    {
+    case VX_TYPE_CHAR:
+        VX_CALL(vxReadScalarValue(o, &o_value.chr));
+        ASSERT_EQ_INT(o_check.chr, o_value.chr);
+        break;
+
+    case VX_TYPE_INT8:
+        VX_CALL(vxReadScalarValue(o, &o_value.s08));
+        ASSERT_EQ_INT(o_check.s08, o_value.s08);
+        break;
+
+    case VX_TYPE_UINT8:
+        VX_CALL(vxReadScalarValue(o, &o_value.u08));
+        ASSERT_EQ_INT(o_check.u08, o_value.u08);
+        break;
+
+    case VX_TYPE_INT16:
+        VX_CALL(vxReadScalarValue(o, &o_value.s16));
+        ASSERT_EQ_INT(o_check.s16, o_value.s16);
+        break;
+
+    case VX_TYPE_UINT16:
+        VX_CALL(vxReadScalarValue(o, &o_value.u16));
+        ASSERT_EQ_INT(o_check.u16, o_value.u16);
+        break;
+
+    case VX_TYPE_INT32:
+        VX_CALL(vxReadScalarValue(o, &o_value.s32));
+        ASSERT_EQ_INT(o_check.s32, o_value.s32);
+        break;
+
+    case VX_TYPE_UINT32:
+        VX_CALL(vxReadScalarValue(o, &o_value.u32));
+        ASSERT_EQ_INT(o_check.u32, o_value.u32);
+        break;
+
+    case VX_TYPE_INT64:
+        VX_CALL(vxReadScalarValue(o, &o_value.s64));
+        ASSERT_EQ_INT(o_check.s64, o_value.s64);
+        break;
+
+    case VX_TYPE_UINT64:
+        VX_CALL(vxReadScalarValue(o, &o_value.u64));
+        ASSERT_EQ_INT(o_check.u64, o_value.u64);
+        break;
+
+    case VX_TYPE_FLOAT32:
+        VX_CALL(vxReadScalarValue(o, &o_value.f32));
+        ASSERT(fabs(o_check.f32 - o_value.f32) < 0.000001f);
+        break;
+
+    case VX_TYPE_SIZE:
+        VX_CALL(vxReadScalarValue(o, &o_value.size));
+        ASSERT_EQ_INT(o_check.size, o_value.size);
+        break;
+
+    case VX_TYPE_BOOL:
+        VX_CALL(vxReadScalarValue(o, &o_value.boolean));
+        ASSERT_EQ_INT(o_check.boolean, o_value.boolean);
+        break;
+
+    default:
+        FAIL("Unsupported type: (%.4s)", &result_type);
+        break;
+    }
+
+    VX_CALL(vxReleaseScalar(&a));
+    VX_CALL(vxReleaseScalar(&b));
+    VX_CALL(vxReleaseScalar(&o));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(b == 0);
+    ASSERT(a == 0);
+    ASSERT(o == 0);
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+}
+
+TESTCASE_TESTS(ControlFlow, testSelectNode, testScalarOperationNode)
diff --git a/test_conformance/test_convertcolor.c b/test_conformance/test_convertcolor.c
new file mode 100644
index 0000000..d647aa4
--- /dev/null
+++ b/test_conformance/test_convertcolor.c
@@ -0,0 +1,574 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <math.h>
+
+static int get_yuv_params(CT_Image img, uint8_t** ptrY, uint8_t** ptrU, uint8_t** ptrV,
+                           uint32_t* strideY, uint32_t* deltaY,
+                           uint32_t* strideC, uint32_t* deltaC,
+                           uint32_t* shiftX, uint32_t* shiftY, int* code)
+{
+    int format = img->format;
+    int is_yuv = 0;
+    uint32_t stride = ct_stride_bytes(img);
+    uint32_t height = img->height;
+
+    *ptrY = img->data.y;
+    *strideY = *strideC = stride;
+    *deltaY = *deltaC = 1;
+    *shiftX = *shiftY = 0;
+
+    if( format == VX_DF_IMAGE_YUV4 )
+    {
+        *ptrU = *ptrY + stride*height;
+        *ptrV = *ptrU + stride*height;
+        *shiftX = *shiftY = 0;
+        is_yuv = 1;
+    }
+    else if( format == VX_DF_IMAGE_IYUV )
+    {
+        *ptrU = *ptrY + stride*height;
+        *ptrV = *ptrU + (stride*height)/4;
+        *strideC = stride/2;
+        *shiftX = *shiftY = 1;
+        is_yuv = 1;
+    }
+    else if( format == VX_DF_IMAGE_NV12 || format == VX_DF_IMAGE_NV21 )
+    {
+        if( format == VX_DF_IMAGE_NV12 )
+        {
+            *ptrU = *ptrY + stride*height;
+            *ptrV = *ptrU + 1;
+        }
+        else
+        {
+            *ptrV = *ptrY + stride*height;
+            *ptrU = *ptrV + 1;
+        }
+        *deltaC = 2;
+        *shiftX = *shiftY = 1;
+        is_yuv = 1;
+    }
+    else if( format == VX_DF_IMAGE_YUYV || format == VX_DF_IMAGE_UYVY )
+    {
+        if( format == VX_DF_IMAGE_YUYV )
+        {
+            *ptrU = *ptrY + 1;
+        }
+        else
+        {
+            *ptrU = *ptrY;
+            *ptrY = *ptrU + 1;
+        }
+        *ptrV = *ptrU + 2;
+        *deltaY = 2;
+        *deltaC = 4;
+        *shiftX = 1;
+        *shiftY = 0;
+        is_yuv = 1;
+    }
+    *code = *shiftX == 0 ? 444 : *shiftY == 0 ? 422 : 420;
+    return is_yuv;
+}
+
+static void rgb2yuv_bt709(uint8_t r, uint8_t g, uint8_t b, uint8_t* y, uint8_t* u, uint8_t* v)
+{
+    int yval = (int)(r*0.2126f + g*0.7152f + b*0.0722f + 0.5f);
+    int uval = (int)(-r*0.1146f - g*0.3854 + b*0.5f + 128.5f);
+    int vval = (int)(r*0.5f - g*0.4542f - b*0.0458f + 128.5f);
+    *y = CT_CAST_U8(yval);
+    *u = CT_CAST_U8(uval);
+    *v = CT_CAST_U8(vval);
+}
+
+static void yuv2rgb_bt709(uint8_t y, uint8_t u, uint8_t v, uint8_t* r, uint8_t* g, uint8_t* b)
+{
+    int rval = (int)(y + 1.5748f*(v-128) + 0.5f);
+    int gval = (int)(y - 0.1873f*(u-128) - 0.4681f*(v-128) + 0.5f);
+    int bval = (int)(y + 1.8556f*(u-128) + 0.5f);
+    *r = CT_CAST_U8(rval);
+    *g = CT_CAST_U8(gval);
+    *b = CT_CAST_U8(bval);
+}
+
+static void reference_colorconvert(CT_Image src, CT_Image dst)
+{
+    uint32_t x, y, width, height, srcstride, dststride;
+    int srcformat = src->format;
+    int dstformat = dst->format;
+    uint8_t *srcptrY=0, *srcptrU=0, *srcptrV=0;
+    uint8_t *dstptrY=0, *dstptrU=0, *dstptrV=0;
+    uint32_t srcstrideY=0, srcdeltaY=1, srcstrideC=0, srcdeltaC=1;
+    uint32_t dststrideY=0, dstdeltaY=1, dststrideC=0, dstdeltaC=1;
+    uint32_t srcshiftX = 1, srcshiftY = 1;
+    uint32_t dstshiftX = 1, dstshiftY = 1;
+    int srcYUV, dstYUV;
+    int srccode=0, dstcode=0;
+
+    ASSERT(src && dst);
+    ASSERT(src->width > 0 && src->height > 0 &&
+           src->width == dst->width && src->height == dst->height);
+
+    width = src->width;
+    height = src->height;
+    srcstride = ct_stride_bytes(src);
+    dststride = ct_stride_bytes(dst);
+
+    srcYUV = get_yuv_params(src, &srcptrY, &srcptrU, &srcptrV, &srcstrideY,
+                            &srcdeltaY, &srcstrideC, &srcdeltaC,
+                            &srcshiftX, &srcshiftY, &srccode);
+    dstYUV = get_yuv_params(dst, &dstptrY, &dstptrU, &dstptrV, &dststrideY,
+                            &dstdeltaY, &dststrideC, &dstdeltaC,
+                            &dstshiftX, &dstshiftY, &dstcode);
+
+    if( srcformat == VX_DF_IMAGE_RGB || srcformat == VX_DF_IMAGE_RGBX )
+    {
+        int scn = ct_channels(srcformat);
+        if( dstformat == VX_DF_IMAGE_RGB || dstformat == VX_DF_IMAGE_RGBX )
+        {
+            int dcn = ct_channels(dstformat);
+
+            for( y = 0; y < height; y++ )
+            {
+                const uint8_t* srcptr = (const uint8_t*)(src->data.y + y*srcstride);
+                uint8_t* dstptr = (uint8_t*)(dst->data.y + y*dststride);
+                for( x = 0; x < width; x++, srcptr += scn, dstptr += dcn )
+                {
+                    dstptr[0] = srcptr[0];
+                    dstptr[1] = srcptr[1];
+                    dstptr[2] = srcptr[2];
+                    if(dcn == 4)
+                        dstptr[3] = 255;
+                }
+            }
+
+        }
+        else if( dstYUV )
+        {
+            if( dstcode == 444 )
+            {
+                for( y = 0; y < height; y++ )
+                {
+                    const uint8_t* srcptr = (const uint8_t*)(src->data.y + y*srcstride);
+                    for( x = 0; x < width; x++, srcptr += scn )
+                    {
+                        rgb2yuv_bt709(srcptr[0], srcptr[1], srcptr[2],
+                                      dstptrY + dststrideY*y + dstdeltaY*x,
+                                      dstptrU + dststrideC*y + dstdeltaC*x,
+                                      dstptrV + dststrideC*y + dstdeltaC*x);
+                    }
+                }
+            }
+            else if( dstcode == 422 )
+            {
+                for( y = 0; y < height; y++ )
+                {
+                    const uint8_t* srcptr = (const uint8_t*)(src->data.y + y*srcstride);
+                    for( x = 0; x < width; x += 2, srcptr += scn*2 )
+                    {
+                        uint8_t u0 = 0, v0 = 0, u1 = 0, v1 = 0;
+                        rgb2yuv_bt709(srcptr[0], srcptr[1], srcptr[2],
+                                      dstptrY + dststrideY*y + dstdeltaY*x, &u0, &v0);
+                        rgb2yuv_bt709(srcptr[scn], srcptr[scn+1], srcptr[scn+2],
+                                      dstptrY + dststrideY*y + dstdeltaY*(x+1), &u1, &v1);
+                        dstptrU[dststrideC*y + dstdeltaC*(x/2)] = (uint8_t)((u0 + u1) >> 1);
+                        dstptrV[dststrideC*y + dstdeltaC*(x/2)] = (uint8_t)((v0 + v1) >> 1);
+                    }
+                }
+            }
+            else if( dstcode == 420 )
+            {
+                for( y = 0; y < height; y += 2 )
+                {
+                    const uint8_t* srcptr = (const uint8_t*)(src->data.y + y*srcstride);
+                    for( x = 0; x < width; x += 2, srcptr += scn*2 )
+                    {
+                        uint8_t u[4], v[4];
+                        rgb2yuv_bt709(srcptr[0], srcptr[1], srcptr[2],
+                                      dstptrY + dststrideY*y + dstdeltaY*x, &u[0], &v[0]);
+                        rgb2yuv_bt709(srcptr[scn], srcptr[scn+1], srcptr[scn+2],
+                                      dstptrY + dststrideY*y + dstdeltaY*(x+1), &u[1], &v[1]);
+                        rgb2yuv_bt709(srcptr[srcstride+0], srcptr[srcstride+1], srcptr[srcstride+2],
+                                      dstptrY + dststrideY*(y+1) + dstdeltaY*x, &u[2], &v[2]);
+                        rgb2yuv_bt709(srcptr[srcstride+scn], srcptr[srcstride+scn+1], srcptr[srcstride+scn+2],
+                                      dstptrY + dststrideY*(y+1) + dstdeltaY*(x+1), &u[3], &v[3]);
+                        dstptrU[dststrideC*(y/2) + dstdeltaC*(x/2)] = (uint8_t)((u[0] + u[1] + u[2] + u[3]) >> 2);
+                        dstptrV[dststrideC*(y/2) + dstdeltaC*(x/2)] = (uint8_t)((v[0] + v[1] + v[2] + v[3]) >> 2);
+                    }
+                }
+            }
+        }
+    }
+    else if( srcYUV )
+    {
+        if( dstformat == VX_DF_IMAGE_RGB || dstformat == VX_DF_IMAGE_RGBX )
+        {
+            int dcn = ct_channels(dstformat);
+
+            for( y = 0; y < height; y++ )
+            {
+                uint8_t* dstptr = (uint8_t*)(dst->data.y + y*dststride);
+                for( x = 0; x < width; x++, dstptr += dcn )
+                {
+                    int xc = x >> srcshiftX, yc = y >> srcshiftY;
+                    yuv2rgb_bt709(srcptrY[srcstrideY*y + srcdeltaY*x],
+                                  srcptrU[srcstrideC*yc + srcdeltaC*xc],
+                                  srcptrV[srcstrideC*yc + srcdeltaC*xc],
+                                  dstptr, dstptr + 1, dstptr + 2);
+                    if( dcn == 4 )
+                        dstptr[3] = 255;
+                }
+            }
+        }
+        else if( dstYUV )
+        {
+            if( srccode <= dstcode )
+            {
+                // if both src and dst are YUV formats and
+                // the source image chroma resolution
+                // is smaller then we just replicate the chroma components
+                for( y = 0; y < height; y++ )
+                {
+                    for( x = 0; x < width; x++ )
+                    {
+                        int dstYC = y >> dstshiftY, dstXC = x >> dstshiftX;
+                        int srcYC = y >> srcshiftY, srcXC = x >> srcshiftX;
+                        dstptrY[dststrideY*y + dstdeltaY*x] = srcptrY[srcstrideY*y + srcdeltaY*x];
+                        dstptrU[dststrideC*dstYC + dstdeltaC*dstXC] = srcptrU[srcstrideC*srcYC + srcdeltaC*srcXC];
+                        dstptrV[dststrideC*dstYC + dstdeltaC*dstXC] = srcptrV[srcstrideC*srcYC + srcdeltaC*srcXC];
+                    }
+                }
+            }
+            else if( srccode == 422 && dstcode == 420 )
+            {
+                // if both src and dst are YUV formats and
+                // the source image chroma resolution
+                // is larger then we have to average chroma samples
+                for( y = 0; y < height; y += 2 )
+                {
+                    for( x = 0; x < width; x++ )
+                    {
+                        int dstYC = y >> dstshiftY, dstXC = x >> dstshiftX;
+                        int srcYC = y >> srcshiftY, srcXC = x >> srcshiftX;
+                        dstptrY[dststrideY*y + dstdeltaY*x] = srcptrY[srcstrideY*y + srcdeltaY*x];
+                        dstptrY[dststrideY*(y+1) + dstdeltaY*x] = srcptrY[srcstrideY*(y+1) + srcdeltaY*x];
+
+                        dstptrU[dststrideC*dstYC + dstdeltaC*dstXC] =
+                            (uint8_t)((srcptrU[srcstrideC*srcYC + srcdeltaC*srcXC] +
+                                       srcptrU[srcstrideC*(srcYC+1) + srcdeltaC*srcXC]) >> 1);
+
+                        dstptrV[dststrideC*dstYC + dstdeltaC*dstXC] =
+                            (uint8_t)((srcptrV[srcstrideC*srcYC + srcdeltaC*srcXC] +
+                                       srcptrV[srcstrideC*(srcYC+1) + srcdeltaC*srcXC]) >> 1);
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+static int cmp_color_images(CT_Image img0, CT_Image img1, int ythresh, int cthresh)
+{
+    uint32_t x, y, width, height, stride0, stride1;
+    int format0 = img0->format;
+    int format1 = img1->format;
+    uint8_t *ptrY0=0, *ptrU0=0, *ptrV0=0;
+    uint8_t *ptrY1=0, *ptrU1=0, *ptrV1=0;
+    uint32_t strideY0=0, deltaY0=1, strideC0=0, deltaC0=1;
+    uint32_t strideY1=0, deltaY1=1, strideC1=0, deltaC1=1;
+    uint32_t shiftX0 = 1, shiftY0 = 1;
+    uint32_t shiftX1 = 1, shiftY1 = 1;
+    int YUV0, YUV1;
+    int code0=0, code1=0;
+
+    ASSERT_(return -1, img0 && img1);
+    ASSERT_(return -1, img0->width > 0 && img0->height > 0 &&
+           img0->width == img1->width && img0->height == img1->height &&
+           format0 == format1);
+
+    width = img0->width;
+    height = img0->height;
+    stride0 = ct_stride_bytes(img0);
+    stride1 = ct_stride_bytes(img1);
+
+    YUV0 = get_yuv_params(img0, &ptrY0, &ptrU0, &ptrV0, &strideY0,
+                            &deltaY0, &strideC0, &deltaC0,
+                            &shiftX0, &shiftY0, &code0);
+    YUV1 = get_yuv_params(img1, &ptrY1, &ptrU1, &ptrV1, &strideY1,
+                          &deltaY1, &strideC1, &deltaC1,
+                          &shiftX1, &shiftY1, &code1);
+
+    if( format0 == VX_DF_IMAGE_RGB || format0 == VX_DF_IMAGE_RGBX )
+    {
+        int cn = ct_channels(format0);
+        for( y = 0; y < height; y++ )
+        {
+            const uint8_t* ptr0 = (const uint8_t*)(img0->data.y + y*stride0);
+            const uint8_t* ptr1 = (const uint8_t*)(img1->data.y + y*stride1);
+            for( x = 0; x < width*cn; x++ )
+            {
+                if( abs(ptr0[x] - ptr1[x]) > ythresh )
+                {
+                    printf("images are very different at (%d, %d): %d vs %d\n", x, y, ptr0[x], ptr1[x]);
+                    return -1;
+                }
+            }
+        }
+    }
+    else
+    {
+        ASSERT_(return -1, YUV0 != 0 && YUV1 != 0 && code0 == code1);
+        for( y = 0; y < height; y++ )
+        {
+            const uint8_t* tempptrY0 = (const uint8_t*)(ptrY0 + y*strideY0);
+            const uint8_t* tempptrY1 = (const uint8_t*)(ptrY1 + y*strideY1);
+            const uint8_t* tempptrU0_row = (const uint8_t*)(ptrU0 + (y>>shiftY0)*strideC0);
+            const uint8_t* tempptrU1_row = (const uint8_t*)(ptrU1 + (y>>shiftY1)*strideC1);
+            const uint8_t* tempptrV0_row = (const uint8_t*)(ptrV0 + (y>>shiftY0)*strideC0);
+            const uint8_t* tempptrV1_row = (const uint8_t*)(ptrV1 + (y>>shiftY1)*strideC1);
+            for( x = 0; x < width; x++, tempptrY0 += deltaY0, tempptrY1 += deltaY1 )
+            {
+                const uint8_t* tempptrU0 = tempptrU0_row + (x >> shiftX0)*deltaC0;
+                const uint8_t* tempptrU1 = tempptrU1_row + (x >> shiftX1)*deltaC1;
+                const uint8_t* tempptrV0 = tempptrV0_row + (x >> shiftX0)*deltaC0;
+                const uint8_t* tempptrV1 = tempptrV1_row + (x >> shiftX1)*deltaC1;
+
+                if( abs(tempptrY0[0] - tempptrY1[0]) > ythresh ||
+                    abs(tempptrU0[0] - tempptrU1[0]) > cthresh ||
+                    abs(tempptrV0[0] - tempptrV1[0]) > cthresh )
+                {
+                    printf("images are very different at (%d, %d): (%d, %d, %d) vs (%d, %d, %d)\n",
+                           x, y, tempptrY0[0], tempptrU0[0], tempptrV0[0], tempptrY1[0], tempptrU1[0], tempptrV1[0]);
+                    return -1;
+                }
+            }
+        }
+    }
+    return 0;
+}
+
+TESTCASE(ColorConvert, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    vx_df_image srcformat;
+    vx_df_image dstformat;
+    int mode;
+    int ythresh;
+    int cthresh;
+} format_arg;
+
+#if 0
+static void ct_print_image(CT_Image img, const char* name)
+{
+    uint32_t p, x, y, nplanes=1, width[3] = {img->width, 0, 0}, height[3] = {img->height, 0, 0};
+    uint32_t stride[3] = {ct_stride_bytes(img), 0, 0};
+    const uint8_t* ptr = img->data.y;
+    int format = img->format;
+
+    if( format == VX_DF_IMAGE_RGB || format == VX_DF_IMAGE_RGBX || format == VX_DF_IMAGE_UYVY || format == VX_DF_IMAGE_YUYV )
+        width[0] *= format == VX_DF_IMAGE_RGB ? 3 : 4;
+    else if( format == VX_DF_IMAGE_YUV4 || format == VX_DF_IMAGE_IYUV )
+    {
+        int scale = format == VX_DF_IMAGE_YUV4 ? 1 : 2;
+        nplanes = 3;
+        width[1] = width[2] = width[0]/scale;
+        height[1] = height[2] = height[0]/scale;
+        stride[1] = stride[2] = stride[0]/scale;
+    }
+    else if( format == VX_DF_IMAGE_NV12 || format == VX_DF_IMAGE_NV21 )
+    {
+        nplanes = 2;
+        width[1] = width[0];
+        height[1] = height[0]/2;
+        stride[1] = stride[0];
+    }
+
+    printf("=========== %s =======\n", name);
+
+    for( p = 0; p < nplanes; p++ )
+    {
+        for( y = 0; y < height[p]; y++, ptr += stride[p] )
+        {
+            for( x = 0; x < width[p]; x++ )
+            {
+                printf("%4d", ptr[x]);
+            }
+            printf("\n");
+        }
+        printf("\n");
+    }
+    printf("---------------------------\n");
+}
+#endif
+
+#define CVT_CASE_(imm, from, to, ythresh, cthresh) \
+    {#imm "/" #from "=>" #to, VX_DF_IMAGE_##from, VX_DF_IMAGE_##to, CT_##imm##_MODE, ythresh, cthresh}
+
+#define CVT_CASE(from, to, ythresh, cthresh) \
+    CVT_CASE_(Immediate, from, to, ythresh, cthresh), \
+    CVT_CASE_(Graph, from, to, ythresh, cthresh)
+
+TEST_WITH_ARG(ColorConvert, testOnRandomAndNatural, format_arg,
+              CVT_CASE(RGB, RGBX, 0, 0),
+              CVT_CASE(RGB, NV12, 1, 1),
+              CVT_CASE(RGB, IYUV, 1, 1),
+              CVT_CASE(RGB, YUV4, 1, 1),
+
+              CVT_CASE(RGBX, RGB, 0, 0),
+              CVT_CASE(RGBX, NV12, 1, 1),
+              CVT_CASE(RGBX, IYUV, 1, 1),
+              CVT_CASE(RGBX, YUV4, 1, 1),
+
+              CVT_CASE(NV12, RGB, 1, 1),
+              CVT_CASE(NV12, RGBX, 1, 1),
+//              CVT_CASE(NV12, NV21, 0, 0),
+              CVT_CASE(NV12, IYUV, 0, 0),
+              CVT_CASE(NV12, YUV4, 0, 0),
+
+              CVT_CASE(NV21, RGB, 1, 1),
+              CVT_CASE(NV21, RGBX, 1, 1),
+//              CVT_CASE(NV21, NV12, 0, 0),
+              CVT_CASE(NV21, IYUV, 0, 0),
+              CVT_CASE(NV21, YUV4, 0, 0),
+
+              CVT_CASE(UYVY, RGB, 1, 1),
+              CVT_CASE(UYVY, RGBX, 1, 1),
+              CVT_CASE(UYVY, NV12, 0, 0),
+              CVT_CASE(UYVY, IYUV, 0, 0),
+//              CVT_CASE(UYVY, YUV4, 0, 0),
+
+              CVT_CASE(YUYV, RGB, 1, 1),
+              CVT_CASE(YUYV, RGBX, 1, 1),
+              CVT_CASE(YUYV, NV12, 0, 0),
+              CVT_CASE(YUYV, IYUV, 0, 0),
+//              CVT_CASE(YUYV, YUV4, 0, 0),
+
+              CVT_CASE(IYUV, RGB, 1, 1),
+              CVT_CASE(IYUV, RGBX, 1, 1),
+              CVT_CASE(IYUV, NV12, 0, 0),
+              CVT_CASE(IYUV, YUV4, 0, 0),
+              )
+{
+    int srcformat = arg_->srcformat;
+    int dstformat = arg_->dstformat;
+    int ythresh = arg_->ythresh;
+    int cthresh = arg_->cthresh;
+    int mode = arg_->mode;
+    vx_image src=0, dst=0;
+    CT_Image src0, dst0, dst1;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_context context = context_->vx_context_;
+    int iter, niters = 50;
+    uint64_t rng;
+
+    rng = CT()->seed_;
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width = ct_roundf(ct_log_rng(&rng, 0, 10));
+        int height = ct_roundf(ct_log_rng(&rng, 0, 10));
+        vx_enum space = VX_COLOR_SPACE_BT709;
+
+        width = CT_MAX((width+1)&-2, 2);
+        height = CT_MAX((height+1)&-2, 2);
+
+        if( !ct_check_any_size() )
+        {
+            width = CT_MIN((width + 7) & -8, 640);
+            height = CT_MIN((height + 7) & -8, 480);
+        }
+
+        if( srcformat == VX_DF_IMAGE_RGB || srcformat == VX_DF_IMAGE_RGBX )
+        {
+            int scn = srcformat == VX_DF_IMAGE_RGB ? 3 : 4;
+            if( iter == 0 )
+            {
+                ASSERT_NO_FAILURE(src0 = ct_read_image("lena.bmp", scn));
+                width = src0->width;
+                height = src0->height;
+            }
+            else if( iter == 1 )
+            {
+                ASSERT_NO_FAILURE(src0 = ct_read_image("colors.bmp", scn));
+                width = src0->width;
+                height = src0->height;
+            }
+            else
+            {
+                ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, srcformat, &rng, 0, 256));
+            }
+        }
+        else
+        {
+            ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, srcformat, &rng, 0, 256));
+        }
+        ASSERT_NO_FAILURE(src = ct_image_to_vx_image(src0, context));
+        ASSERT_VX_OBJECT(src, VX_TYPE_IMAGE);
+/* commented out until specification clarifies VX_IMAGE_RANGE
+        ASSERT_NE_VX_STATUS(VX_SUCCESS, vxSetImageAttribute(src, VX_IMAGE_RANGE, &range, sizeof(range)));
+*/
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetImageAttribute(src, VX_IMAGE_SPACE, &space, sizeof(space)));
+
+        ASSERT_NO_FAILURE(dst0 = ct_allocate_image(width, height, dstformat));
+        ASSERT_NO_FAILURE(reference_colorconvert(src0, dst0));
+        ASSERT_VX_OBJECT(dst = vxCreateImage(context, width, height, dstformat), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst, VX_TYPE_IMAGE);
+/* commented out until specification clarifies VX_IMAGE_RANGE
+        ASSERT_NE_VX_STATUS(VX_SUCCESS, vxSetImageAttribute(dst, VX_IMAGE_RANGE, &range, sizeof(range)));
+*/
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetImageAttribute(dst, VX_IMAGE_SPACE, &space, sizeof(space)));
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuColorConvert(context, src, dst));
+        }
+        else
+        {
+            ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            ASSERT_VX_OBJECT(node = vxColorConvertNode(graph, src, dst), VX_TYPE_NODE);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+        }
+        dst1 = ct_image_from_vx_image(dst);
+
+        ASSERT(cmp_color_images(dst0, dst1, ythresh, cthresh) >= 0);
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dst));
+
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+}
+
+TESTCASE_TESTS(ColorConvert, testOnRandomAndNatural)
diff --git a/test_conformance/test_convertdepth.c b/test_conformance/test_convertdepth.c
new file mode 100644
index 0000000..6454b7d
--- /dev/null
+++ b/test_conformance/test_convertdepth.c
@@ -0,0 +1,355 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+#define VALID_SHIFT_MIN 0
+// #define VALID_SHIFT_MIN -64
+#define VALID_SHIFT_MAX 7
+
+#define CT_EXECUTE_ASYNC
+
+static void referenceConvertDepth(CT_Image src, CT_Image dst, int shift, vx_enum policy)
+{
+    uint32_t i, j;
+
+    ASSERT(src && dst);
+    ASSERT(src->width == dst->width);
+    ASSERT(src->height == dst->height);
+    ASSERT((src->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16) || (src->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_U8));
+    ASSERT(policy == VX_CONVERT_POLICY_WRAP || policy == VX_CONVERT_POLICY_SATURATE);
+
+    if (shift > 16) shift = 16;
+    if (shift < -16) shift = -16;
+
+    if (src->format == VX_DF_IMAGE_U8)
+    {
+        // according to spec the policy is ignored
+        // if (policy == VX_CONVERT_POLICY_WRAP)
+        {
+            // up-conversion + wrap
+            if (shift < 0)
+            {
+                for (i = 0; i < dst->height; ++i)
+                    for (j = 0; j < dst->width; ++j)
+                        dst->data.s16[i * dst->stride + j] = ((unsigned)src->data.y[i * src->stride + j]) >> (-shift);
+            }
+            else
+            {
+                for (i = 0; i < dst->height; ++i)
+                    for (j = 0; j < dst->width; ++j)
+                        dst->data.s16[i * dst->stride + j] = ((unsigned)src->data.y[i * src->stride + j]) << shift;
+            }
+        }
+        // else if (VX_CONVERT_POLICY_SATURATE)
+        // {
+        //     // up-conversion + saturate
+        //     if (shift < 0)
+        //     {
+        //         for (i = 0; i < dst->height; ++i)
+        //             for (j = 0; j < dst->width; ++j)
+        //                 dst->data.s16[i * dst->stride + j] = ((unsigned)src->data.y[i * src->stride + j]) >> (-shift);
+        //     }
+        //     else
+        //     {
+        //         for (i = 0; i < dst->height; ++i)
+        //             for (j = 0; j < dst->width; ++j)
+        //             {
+        //                 unsigned v = ((unsigned)src->data.y[i * src->stride + j]) << shift;
+        //                 if (v > 32767) v = 32767;
+        //                 dst->data.s16[i * dst->stride + j] = v;
+        //             }
+        //     }
+        // }
+    }
+    else if (policy == VX_CONVERT_POLICY_WRAP)
+    {
+        // down-conversion + wrap
+        if (shift < 0)
+        {
+            for (i = 0; i < dst->height; ++i)
+                for (j = 0; j < dst->width; ++j)
+                    dst->data.y[i * dst->stride + j] = src->data.s16[i * src->stride + j] << (-shift);
+        }
+        else
+        {
+            for (i = 0; i < dst->height; ++i)
+                for (j = 0; j < dst->width; ++j)
+                    dst->data.y[i * dst->stride + j] = src->data.s16[i * src->stride + j] >> shift;
+        }
+    }
+    else if (policy == VX_CONVERT_POLICY_SATURATE)
+    {
+        // down-conversion + saturate
+        if (shift < 0)
+        {
+            for (i = 0; i < dst->height; ++i)
+                for (j = 0; j < dst->width; ++j)
+                {
+                    int32_t v = src->data.s16[i * src->stride + j] << (-shift);
+                    if (v > 255) v = 255;
+                    if (v < 0) v = 0;
+                    dst->data.y[i * dst->stride + j] = v;
+                }
+        }
+        else
+        {
+            for (i = 0; i < dst->height; ++i)
+                for (j = 0; j < dst->width; ++j)
+                {
+                    int32_t v = src->data.s16[i * src->stride + j] >> shift;
+                    if (v > 255) v = 255;
+                    if (v < 0) v = 0;
+                    dst->data.y[i * dst->stride + j] = v;
+                }
+        }
+    }
+}
+
+static void fillSquence(CT_Image dst, uint32_t seq_init)
+{
+    uint32_t i, j;
+    uint32_t val = seq_init;
+
+    ASSERT(dst);
+    ASSERT(dst->format == VX_DF_IMAGE_U8 || dst->format == VX_DF_IMAGE_S16);
+
+    if (dst->format == VX_DF_IMAGE_U8)
+    {
+        for (i = 0; i < dst->height; ++i)
+            for (j = 0; j < dst->width; ++j)
+                dst->data.y[i * dst->stride + j] = ++val;
+    }
+    else
+    {
+        for (i = 0; i < dst->height; ++i)
+            for (j = 0; j < dst->width; ++j)
+                dst->data.s16[i * dst->stride + j] = ++val;
+    }
+}
+
+TESTCASE(vxuConvertDepth, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxConvertDepth,  CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(vxuConvertDepth, NegativeSizes)
+{
+    vx_image img16x88, img88x16, img16x16;
+    vx_int32 shift_zero = 0;
+    vx_int32 shift_one = 1;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(img16x88 = vxCreateImage(context, 16, 88, VX_DF_IMAGE_U8),  VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(img88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(img16x16 = vxCreateImage(context, 16, 16, VX_DF_IMAGE_U8),  VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(img16x88, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(img88x16, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(img16x16, &CT()->seed_));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img16x88, img88x16, VX_CONVERT_POLICY_SATURATE, shift_zero));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img16x88, img88x16, VX_CONVERT_POLICY_WRAP, shift_zero));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img16x88, img88x16, VX_CONVERT_POLICY_SATURATE, shift_one));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img16x88, img88x16, VX_CONVERT_POLICY_WRAP, shift_one));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img88x16, img16x16, VX_CONVERT_POLICY_SATURATE, shift_zero));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img88x16, img16x16, VX_CONVERT_POLICY_WRAP, shift_zero));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img88x16, img16x16, VX_CONVERT_POLICY_SATURATE, shift_one));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, img88x16, img16x16, VX_CONVERT_POLICY_WRAP, shift_one));
+
+    VX_CALL(vxReleaseImage(&img16x88));
+    VX_CALL(vxReleaseImage(&img88x16));
+    VX_CALL(vxReleaseImage(&img16x16));
+}
+
+TEST(vxConvertDepth, NegativeSizes)
+{
+    vx_image img16x88, img88x16, img16x16;
+    vx_graph graph;
+    vx_node node;
+    vx_scalar shift;
+    vx_int32 sh = 1;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(shift = vxCreateScalar(context, VX_TYPE_INT32, &sh), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(img16x88 = vxCreateImage(context, 16, 88, VX_DF_IMAGE_U8),  VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(img88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(img16x16 = vxCreateImage(context, 16, 16, VX_DF_IMAGE_U8),  VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxConvertDepthNode(graph, img16x88, img88x16, VX_CONVERT_POLICY_SATURATE, shift), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxConvertDepthNode(graph, img16x88, img88x16, VX_CONVERT_POLICY_WRAP, shift), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxConvertDepthNode(graph, img88x16, img16x16, VX_CONVERT_POLICY_SATURATE, shift), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxConvertDepthNode(graph, img88x16, img16x16, VX_CONVERT_POLICY_WRAP, shift), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    VX_CALL(vxReleaseImage(&img16x88));
+    VX_CALL(vxReleaseImage(&img88x16));
+    VX_CALL(vxReleaseImage(&img16x16));
+    VX_CALL(vxReleaseScalar(&shift));
+}
+
+typedef struct {
+    const char* name;
+    uint32_t width;
+    uint32_t height;
+    vx_df_image format_from;
+    vx_df_image format_to;
+    vx_enum policy;
+} cvt_depth_arg;
+
+#define CVT_ARG(w,h,from,to,p) ARG(#p"/"#w"x"#h" "#from"->"#to, w, h, VX_DF_IMAGE_##from, VX_DF_IMAGE_##to, VX_CONVERT_POLICY_##p)
+
+#define PREPEND_SIZE(macro, ...)                \
+    CT_EXPAND(macro(1, 1, __VA_ARGS__)),        \
+    CT_EXPAND(macro(15, 17, __VA_ARGS__)),      \
+    CT_EXPAND(macro(32, 32, __VA_ARGS__)),      \
+    CT_EXPAND(macro(640, 480, __VA_ARGS__)),    \
+    CT_EXPAND(macro(1231, 1234, __VA_ARGS__))
+
+    /*,
+    CT_EXPAND(macro(1280, 720, __VA_ARGS__)),
+    CT_EXPAND(macro(1920, 1080, __VA_ARGS__))*/
+
+#define CVT_ARGS                                \
+    PREPEND_SIZE(CVT_ARG, U8, S16, SATURATE),   \
+    PREPEND_SIZE(CVT_ARG, U8, S16, WRAP),       \
+    PREPEND_SIZE(CVT_ARG, S16, U8, SATURATE),   \
+    PREPEND_SIZE(CVT_ARG, S16, U8, WRAP)
+
+TEST_WITH_ARG(vxuConvertDepth, BitExact, cvt_depth_arg, CVT_ARGS)
+{
+    vx_image src, dst;
+    CT_Image ref_src, refdst, vxdst;
+    vx_int32 shift_val;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_NO_FAILURE({
+        ref_src = ct_allocate_image(arg_->width, arg_->height, arg_->format_from);
+        fillSquence(ref_src, (uint32_t)CT()->seed_);
+        src = ct_image_to_vx_image(ref_src, context);
+    });
+
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, arg_->width, arg_->height, arg_->format_to), VX_TYPE_IMAGE);
+
+    refdst = ct_allocate_image(arg_->width, arg_->height, arg_->format_to);
+    vxdst = ct_allocate_image(arg_->width, arg_->height, arg_->format_to);
+    for (shift_val = VALID_SHIFT_MIN; shift_val <= VALID_SHIFT_MAX; ++shift_val)
+    {
+        ct_update_progress(shift_val - VALID_SHIFT_MIN, VALID_SHIFT_MAX - VALID_SHIFT_MIN + 1);
+        EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxuConvertDepth(context, src, dst, arg_->policy, shift_val));
+
+        ASSERT_NO_FAILURE({
+            ct_image_copyfrom_vx_image(vxdst, dst);
+            referenceConvertDepth(ref_src, refdst, shift_val, arg_->policy);
+        });
+
+        EXPECT_EQ_CTIMAGE(refdst, vxdst);
+        if (CT_HasFailure())
+        {
+            printf("Shift value is %d\n", shift_val);
+            break;
+        }
+    }
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src);
+}
+
+TEST_WITH_ARG(vxConvertDepth, BitExact, cvt_depth_arg, CVT_ARGS)
+{
+    vx_image src, dst;
+    CT_Image ref_src, refdst, vxdst;
+    vx_graph graph;
+    vx_node node;
+    vx_scalar scalar_shift;
+    vx_int32 shift = 0;
+    vx_int32 tmp = 0;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_NO_FAILURE({
+        ref_src = ct_allocate_image(arg_->width, arg_->height, arg_->format_from);
+        fillSquence(ref_src, (uint32_t)CT()->seed_);
+        src = ct_image_to_vx_image(ref_src, context);
+    });
+
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, arg_->width, arg_->height, arg_->format_to), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(scalar_shift = vxCreateScalar(context, VX_TYPE_INT32, &tmp), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxConvertDepthNode(graph, src, dst, arg_->policy, scalar_shift), VX_TYPE_NODE);
+
+    refdst = ct_allocate_image(arg_->width, arg_->height, arg_->format_to);
+    vxdst = ct_allocate_image(arg_->width, arg_->height, arg_->format_to);
+    for (shift = VALID_SHIFT_MIN; shift <= VALID_SHIFT_MAX; ++shift)
+    {
+        ct_update_progress(shift - VALID_SHIFT_MIN, VALID_SHIFT_MAX - VALID_SHIFT_MIN + 1);
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyScalar(scalar_shift, &shift, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+        // run graph
+#ifdef CT_EXECUTE_ASYNC
+        EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+        EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+        EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+        ASSERT_NO_FAILURE({
+            ct_image_copyfrom_vx_image(vxdst, dst);
+            referenceConvertDepth(ref_src, refdst, shift, arg_->policy);
+        });
+
+        EXPECT_EQ_CTIMAGE(refdst, vxdst);
+        if (CT_HasFailure())
+        {
+            printf("Shift value is %d\n", shift);
+            break;
+        }
+    }
+
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleaseScalar(&scalar_shift));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(vxuConvertDepth, DISABLED_NegativeSizes, BitExact)
+TESTCASE_TESTS(vxConvertDepth,  DISABLED_NegativeSizes, BitExact)
diff --git a/test_conformance/test_convolution.c b/test_conformance/test_convolution.c
new file mode 100644
index 0000000..ca347f5
--- /dev/null
+++ b/test_conformance/test_convolution.c
@@ -0,0 +1,121 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(Convolution, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Convolution, test_vxCreateConvolution)
+{
+    vx_context context = context_->vx_context_;
+    vx_convolution conv;
+    vx_size rows = 3, cols = 3;
+
+    ASSERT_VX_OBJECT(conv = vxCreateConvolution(context, cols, rows), VX_TYPE_CONVOLUTION);
+
+    VX_CALL(vxReleaseConvolution(&conv));
+
+    ASSERT(conv == 0);
+}
+
+TEST(Convolution, test_vxCopyConvolution)
+{
+    vx_context context = context_->vx_context_;
+    vx_convolution conv;
+    vx_size rows = 3, cols = 3;
+    vx_size i, j;
+    vx_int16 gx[3][3] = {
+        { 3, 0, -3},
+        { 10, 0,-10},
+        { 3, 0, -3},
+    };
+
+
+    ASSERT_VX_OBJECT(conv = vxCreateConvolution(context, cols, rows), VX_TYPE_CONVOLUTION);
+
+    VX_CALL(vxCopyConvolutionCoefficients(conv, gx, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+    vx_int16 *data = (vx_int16 *)ct_alloc_mem(rows*cols*sizeof(vx_int16));
+    VX_CALL(vxCopyConvolutionCoefficients(conv, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    for (i = 0; i < rows; i++)
+    {
+        for (j = 0; j < cols; j++)
+        {
+            ASSERT(gx[i][j] == data[i * cols + j]);
+        }
+    }
+
+    VX_CALL(vxReleaseConvolution(&conv));
+
+    ASSERT(conv == 0);
+
+    ct_free_mem(data);
+}
+
+TEST(Convolution, test_vxQueryConvolution)
+{
+    vx_context context = context_->vx_context_;
+    vx_convolution conv;
+    vx_size rows = 3, cols = 3;
+    vx_uint32 scale = 2;
+
+    ASSERT_VX_OBJECT(conv = vxCreateConvolution(context, cols, rows), VX_TYPE_CONVOLUTION);
+
+    VX_CALL(vxSetConvolutionAttribute(conv, VX_CONVOLUTION_SCALE, &scale, sizeof(scale)));
+    {
+        vx_size actual_n = 0, actual_m = 0, actual_size = 0;
+        vx_uint32 actual_scale = 0;
+        VX_CALL(vxQueryConvolution(conv, VX_CONVOLUTION_ROWS, &actual_n, sizeof(actual_n)));
+        ASSERT(rows == actual_n);
+
+        VX_CALL(vxQueryConvolution(conv, VX_CONVOLUTION_COLUMNS, &actual_m, sizeof(actual_m)));
+        ASSERT(cols == actual_m);
+
+        VX_CALL(vxQueryConvolution(conv, VX_CONVOLUTION_SIZE, &actual_size, sizeof(actual_size)));
+        ASSERT(rows*cols*sizeof(vx_int16) == actual_size);
+
+        VX_CALL(vxQueryConvolution(conv, VX_CONVOLUTION_SCALE, &actual_scale, sizeof(actual_scale)));
+        ASSERT(scale == actual_scale);
+    }
+
+    VX_CALL(vxReleaseConvolution(&conv));
+
+    ASSERT(conv == 0);
+}
+
+TEST(Convolution, test_vxCreateVirtualConvolution)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = vxCreateGraph(context);
+    vx_size rows = 3, cols = 3;
+    vx_convolution conv;
+
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(conv = vxCreateVirtualConvolution(graph, cols, rows), VX_TYPE_CONVOLUTION);
+
+    VX_CALL(vxReleaseConvolution(&conv));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(graph == 0);
+    ASSERT(conv == 0);
+}
+
+TESTCASE_TESTS(Convolution, test_vxCreateConvolution, test_vxCopyConvolution, test_vxQueryConvolution, test_vxCreateVirtualConvolution)
diff --git a/test_conformance/test_convolve.c b/test_conformance/test_convolve.c
new file mode 100644
index 0000000..aa2b827
--- /dev/null
+++ b/test_conformance/test_convolve.c
@@ -0,0 +1,370 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <string.h>
+
+#define MAX_CONV_SIZE 15
+
+TESTCASE(Convolve, CT_VXContext, ct_setup_vx_context, 0)
+
+static vx_convolution convolution_create(vx_context context, int cols, int rows, vx_int16* data, vx_uint32 scale)
+{
+    vx_convolution convolution = vxCreateConvolution(context, cols, rows);
+    vx_size size = 0;
+
+    ASSERT_VX_OBJECT_(return 0, convolution, VX_TYPE_CONVOLUTION);
+
+    VX_CALL_(return 0, vxQueryConvolution(convolution, VX_CONVOLUTION_SIZE, &size, sizeof(size)));
+
+    VX_CALL_(return 0, vxCopyConvolutionCoefficients(convolution, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+    VX_CALL_(return 0, vxSetConvolutionAttribute(convolution, VX_CONVOLUTION_SCALE, &scale, sizeof(scale)));
+
+    return convolution;
+}
+
+static void convolution_data_fill_identity(int cols, int rows, vx_int16* data)
+{
+    int x = cols / 2, y = rows / 2;
+    ct_memset(data, 0, sizeof(vx_int16) * cols * rows);
+    data[y * cols + x] = 1;
+}
+
+static void convolution_data_fill_random_32768(int cols, int rows, vx_int16* data)
+{
+    uint64_t* seed = &CT()->seed_;
+    int i;
+
+    for (i = 0; i < cols * rows; i++)
+        data[i] = (vx_uint8)CT_RNG_NEXT_INT(*seed, (uint32_t)-32768, 32768);
+}
+
+static void convolution_data_fill_random_128(int cols, int rows, vx_int16* data)
+{
+    uint64_t* seed = &CT()->seed_;
+    int i;
+
+    for (i = 0; i < cols * rows; i++)
+        data[i] = (vx_uint8)CT_RNG_NEXT_INT(*seed, (uint32_t)-128, 128);
+}
+
+
+TEST(Convolve, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    int cols = 3, rows = 3;
+    vx_int16 data[3 * 3] = { 0, 0, 0, 0, 1, 0, 0, 0, 0};
+    vx_convolution convolution = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(convolution = convolution_create(context, cols, rows, data, 1), VX_TYPE_CONVOLUTION);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxConvolveNode(graph, src_image, convolution, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+
+    VX_CALL(vxReleaseConvolution(&convolution));
+    ASSERT(convolution == NULL);
+}
+
+
+static CT_Image convolve_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image convolve_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int32_t convolve_get(CT_Image src, int32_t x, int32_t y, vx_border_t border,
+        int cols, int rows, vx_int16* data, vx_uint32 scale, vx_df_image dst_format)
+{
+    int i;
+    int32_t sum = 0, value = 0;
+    int32_t src_data[MAX_CONV_SIZE * MAX_CONV_SIZE] = { 0 };
+
+    ASSERT_(return 0, cols <= MAX_CONV_SIZE);
+    ASSERT_(return 0, rows <= MAX_CONV_SIZE);
+
+    ASSERT_NO_FAILURE_(return 0,
+            ct_image_read_rect_S32(src, src_data, x - cols / 2, y - rows / 2, x + cols / 2, y + rows / 2, border));
+
+    for (i = 0; i < cols * rows; ++i)
+        sum += src_data[i] * data[cols * rows - 1 - i];
+
+    value = sum / scale;
+
+    if (dst_format == VX_DF_IMAGE_U8)
+    {
+        if (value < 0) value = 0;
+        else if (value > UINT8_MAX) value = UINT8_MAX;
+    }
+    else if (dst_format == VX_DF_IMAGE_S16)
+    {
+        if (value < INT16_MIN) value = INT16_MIN;
+        else if (value > INT16_MAX) value = INT16_MAX;
+    }
+
+    return value;
+}
+
+
+static CT_Image convolve_create_reference_image(CT_Image src, vx_border_t border,
+        int cols, int rows, vx_int16* data, vx_uint32 scale, vx_df_image dst_format)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, dst_format);
+
+    if (dst_format == VX_DF_IMAGE_U8)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    int32_t res = convolve_get(src, x, y, border, cols, rows, data, scale, dst_format);
+                    *dst_data = (vx_uint8)res;
+                });
+    }
+    else if (dst_format == VX_DF_IMAGE_S16)
+    {
+        CT_FILL_IMAGE_16S(return 0, dst,
+                {
+                    int32_t res = convolve_get(src, x, y, border, cols, rows, data, scale, dst_format);
+                    *dst_data = (vx_int16)res;
+                });
+    }
+    else
+    {
+        CT_FAIL_(return 0, "NOT IMPLEMENTED");
+    }
+    return dst;
+}
+
+
+static void convolve_check(CT_Image src, CT_Image dst, vx_border_t border,
+        int cols, int rows, vx_int16* data, vx_uint32 scale, vx_df_image dst_format)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = convolve_create_reference_image(src, border, cols, rows, data, scale, dst_format));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst, cols / 2, rows / 2, cols / 2, rows / 2);
+            ct_adjust_roi(dst_ref, cols / 2, rows / 2, cols / 2, rows / 2);
+        }
+    );
+
+    EXPECT_CTIMAGE_NEAR(dst_ref, dst, 1);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info_ex(src, 16, 4);
+        printf("=== DST ===\n");
+        ct_dump_image_info_ex(dst, 16, 4);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info_ex(dst_ref, 16, 4);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    int cols, rows;
+    vx_uint32 scale;
+    void (*convolution_data_generator)(int cols, int rows, vx_int16* data);
+    vx_df_image dst_format;
+    vx_border_t border;
+    int width, height;
+} Arg;
+
+
+#define ADD_CONV_SIZE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/conv=3x3", __VA_ARGS__, 3, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/conv=9x9", __VA_ARGS__, 9, 9)), \
+    CT_EXPAND(nextmacro(testArgName "/conv=9x3", __VA_ARGS__, 9, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/conv=3x9", __VA_ARGS__, 3, 9)), \
+    CT_EXPAND(nextmacro(testArgName "/conv=5x5", __VA_ARGS__, 5, 5)), \
+    CT_EXPAND(nextmacro(testArgName "/conv=7x7", __VA_ARGS__, 7, 7))
+
+#define ADD_CONV_SCALE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=1", __VA_ARGS__, 1)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=2", __VA_ARGS__, 2)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=4", __VA_ARGS__, 4)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=8", __VA_ARGS__, 8)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=16", __VA_ARGS__, 16)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=256", __VA_ARGS__, 256)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_scale=2^30", __VA_ARGS__, (1ll<<30)))
+
+#define ADD_CONV_GENERATORS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/conv_fill=identity", __VA_ARGS__, convolution_data_fill_identity)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_fill=random128", __VA_ARGS__, convolution_data_fill_random_128)), \
+    CT_EXPAND(nextmacro(testArgName "/conv_fill=random32768", __VA_ARGS__, convolution_data_fill_random_32768))
+
+#define ADD_CONV_DST_FORMAT(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/dst8U", __VA_ARGS__, VX_DF_IMAGE_U8)), \
+    CT_EXPAND(nextmacro(testArgName "/dst16S", __VA_ARGS__, VX_DF_IMAGE_S16))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_CONV_SIZE, ADD_CONV_SCALE, ADD_CONV_GENERATORS, ADD_CONV_DST_FORMAT, ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_64x64, ARG, convolve_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_CONV_SIZE, ADD_CONV_SCALE, ADD_CONV_GENERATORS, ADD_CONV_DST_FORMAT, ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, convolve_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Convolve, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_convolution convolution = 0;
+    vx_int16 data[MAX_CONV_SIZE * MAX_CONV_SIZE] = { 0 };
+    vx_size conv_max_dim = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, src->width, src->height, arg_->dst_format), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_CONVOLUTION_MAX_DIMENSION, &conv_max_dim, sizeof(conv_max_dim)));
+
+    if ((vx_size)arg_->cols > conv_max_dim || (vx_size)arg_->rows > conv_max_dim)
+    {
+        printf("%dx%d convolution is not supported. Skip test\n", (int)arg_->cols, (int)arg_->rows);
+        return;
+    }
+
+    ASSERT_NO_FAILURE(arg_->convolution_data_generator(arg_->cols, arg_->rows, data));
+    ASSERT_NO_FAILURE(convolution = convolution_create(context, arg_->cols, arg_->rows, data, arg_->scale));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxConvolveNode(graph, src_image, convolution, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(convolve_check(src, dst, border, arg_->cols, arg_->rows, data, arg_->scale, arg_->dst_format));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+
+    VX_CALL(vxReleaseConvolution(&convolution));
+    ASSERT(convolution == NULL);
+}
+
+TEST_WITH_ARG(Convolve, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_convolution convolution = 0;
+    vx_int16 data[MAX_CONV_SIZE * MAX_CONV_SIZE] = { 0 };
+    vx_size conv_max_dim = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, src->width, src->height, arg_->dst_format), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_CONVOLUTION_MAX_DIMENSION, &conv_max_dim, sizeof(conv_max_dim)));
+
+    if ((vx_size)arg_->cols > conv_max_dim || (vx_size)arg_->rows > conv_max_dim)
+    {
+        printf("%dx%d convolution is not supported. Skip test\n", (int)arg_->cols, (int)arg_->rows);
+        return;
+    }
+
+    ASSERT_NO_FAILURE(arg_->convolution_data_generator(arg_->cols, arg_->rows, data));
+    ASSERT_NO_FAILURE(convolution = convolution_create(context, arg_->cols, arg_->rows, data, arg_->scale));
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuConvolve(context, src_image, convolution, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(convolve_check(src, dst, border, arg_->cols, arg_->rows, data, arg_->scale, arg_->dst_format));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+
+    VX_CALL(vxReleaseConvolution(&convolution));
+    ASSERT(convolution == NULL);
+}
+
+TESTCASE_TESTS(Convolve, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_copy.c b/test_conformance/test_copy.c
new file mode 100644
index 0000000..79d762b
--- /dev/null
+++ b/test_conformance/test_copy.c
@@ -0,0 +1,894 @@
+/*
+
+ * Copyright (c) 2017-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+#define IMAGE_SIZE_X 10
+#define IMAGE_SIZE_Y 10
+#define MATRIX_SIZE_X 5
+#define MATRIX_SIZE_Y 5
+#define CONVOLUTION_X 3
+#define CONVOLUTION_Y 3
+#define N 100
+#define OBJECT_ARRAY_COUNT 10
+#define PYRAMID_LEVELS 2
+#define TENSOR_DIMS_NUM 2
+#define TENSOR_DIMS_LENGTH 8
+TESTCASE(Copy, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char* testName;
+    const char* p;
+    vx_enum item_type;
+} copy_arg;
+
+
+static vx_reference own_create_exemplar(vx_context context, vx_enum item_type, vx_uint8 value)
+{
+    vx_reference exemplar = NULL;
+    vx_enum format = VX_DF_IMAGE_U8;
+    vx_enum obj_item_type = VX_TYPE_UINT8;
+    vx_size levels = PYRAMID_LEVELS;
+    vx_size bins = 36;
+    vx_int32 offset = 0;
+    vx_uint32 range = 360;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_scalar scalar_exemplar;
+    vx_uint8 scalar_value = 0;
+    vx_size * dims;
+    switch (item_type)
+    {
+        case VX_TYPE_IMAGE:
+            exemplar = (vx_reference)vxCreateImage(context, IMAGE_SIZE_X, IMAGE_SIZE_Y, format);
+            break;
+        case VX_TYPE_ARRAY:
+            exemplar = (vx_reference)vxCreateArray(context, VX_TYPE_COORDINATES2D, N);
+            break;
+        case VX_TYPE_SCALAR:
+            exemplar = (vx_reference)vxCreateScalar(context, obj_item_type, &value);
+            break;
+        case VX_TYPE_MATRIX:
+            exemplar = (vx_reference)vxCreateMatrix(context, obj_item_type, MATRIX_SIZE_X, MATRIX_SIZE_Y);
+            break;
+        case VX_TYPE_CONVOLUTION:
+            exemplar = (vx_reference)vxCreateConvolution(context, CONVOLUTION_X, CONVOLUTION_Y);
+            break;
+        case VX_TYPE_DISTRIBUTION:
+            exemplar = (vx_reference)vxCreateDistribution(context, bins, offset, range);
+            break;
+        case VX_TYPE_LUT:
+            exemplar = (vx_reference)vxCreateLUT(context, obj_item_type, N);
+            break;
+        case VX_TYPE_PYRAMID:
+            exemplar = (vx_reference)vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, IMAGE_SIZE_X, IMAGE_SIZE_Y, format);
+            break;
+        case VX_TYPE_REMAP:
+            exemplar = (vx_reference)vxCreateRemap(context, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMAGE_SIZE_X*2, IMAGE_SIZE_Y*2);
+           break;
+        case VX_TYPE_THRESHOLD:
+            exemplar = (vx_reference)vxCreateThresholdForImage(context, thresh_type, format, format);
+            break;
+        case VX_TYPE_OBJECT_ARRAY:
+            scalar_exemplar = vxCreateScalar(context, obj_item_type, &scalar_value);
+            exemplar = (vx_reference)vxCreateObjectArray(context, (vx_reference)scalar_exemplar, OBJECT_ARRAY_COUNT);
+            vxReleaseReference((vx_reference*)&scalar_exemplar);
+            break;
+        case VX_TYPE_TENSOR:
+            dims = malloc(TENSOR_DIMS_NUM * sizeof(vx_size));
+            for(vx_size i = 0; i < TENSOR_DIMS_NUM; i++)
+            {
+                dims[i] = TENSOR_DIMS_LENGTH;
+            }
+            exemplar = (vx_reference)vxCreateTensor(context, TENSOR_DIMS_NUM, dims, obj_item_type, 0);
+            free(dims);
+            break;
+        default:
+            break;
+    }
+    return exemplar;
+}
+
+#define  ADD_VX_COPY_TYPES(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_IMAGE", __VA_ARGS__, VX_TYPE_IMAGE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_ARRAY", __VA_ARGS__, VX_TYPE_ARRAY)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_SCALAR", __VA_ARGS__, VX_TYPE_SCALAR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_MATRIX", __VA_ARGS__, VX_TYPE_MATRIX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_CONVOLUTION", __VA_ARGS__, VX_TYPE_CONVOLUTION)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_DISTRIBUTION", __VA_ARGS__, VX_TYPE_DISTRIBUTION)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_LUT", __VA_ARGS__, VX_TYPE_LUT)),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_OBJECT_ARRAY", __VA_ARGS__, VX_TYPE_OBJECT_ARRAY)),\
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_PYRAMID", __VA_ARGS__, VX_TYPE_PYRAMID)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_TENSOR", __VA_ARGS__, VX_TYPE_TENSOR )), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_THRESHOLD", __VA_ARGS__, VX_TYPE_THRESHOLD)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_REMAP", __VA_ARGS__, VX_TYPE_REMAP))
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("Copy", ADD_VX_COPY_TYPES, ARG, NULL)
+
+TEST_WITH_ARG(Copy, testNodeCreation, copy_arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_reference input = NULL;
+    vx_reference output = NULL;
+    vx_enum input_type = arg_->item_type;
+
+    ASSERT_VX_OBJECT(input = own_create_exemplar(context, input_type, 0), (enum vx_type_e)input_type);
+    ASSERT_VX_OBJECT(output = own_create_exemplar(context, input_type, 1), (enum vx_type_e)input_type);
+
+    vx_graph graph = 0;
+    vx_node node = 0;
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxCopyNode(graph, input, output), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseReference(&input));
+    VX_CALL(vxReleaseReference(&output));
+    ASSERT(input == 0);
+    ASSERT(output == 0);
+}
+
+TEST_WITH_ARG(Copy, testGraphProcessing, copy_arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    vx_reference input = NULL;
+    vx_reference output = NULL;
+    vx_enum input_type = arg_->item_type;
+    vx_enum output_type = VX_TYPE_INVALID;
+    vx_int16 gx[CONVOLUTION_X][CONVOLUTION_Y] = {
+        { 3, 0, -3 },
+        { 10, 0, -10 },
+        { 3, 0, -3 },
+    };
+
+    ASSERT_VX_OBJECT(input = own_create_exemplar(context, input_type, 0), (enum vx_type_e)input_type);
+    ASSERT_VX_OBJECT(output = own_create_exemplar(context, input_type, 1), (enum vx_type_e)input_type);
+    switch (input_type)
+    {
+        case VX_TYPE_IMAGE:
+            {
+            vx_image input_image = (vx_image)input;
+            void *p = NULL;
+            vx_map_id input_map_id;
+            vx_rectangle_t rect;
+            vx_imagepatch_addressing_t addr;
+            VX_CALL(vxGetValidRegionImage(input_image, &rect));
+            VX_CALL(vxMapImagePatch(input_image, &rect, 0, &input_map_id, &addr, &p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (vx_size i = 0; i < addr.dim_x*addr.dim_y; i++) {
+                vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                *pPixel = i;
+            }
+            VX_CALL( vxUnmapImagePatch(input_image, input_map_id));
+            break;
+            }
+        case VX_TYPE_ARRAY:
+            {
+                vx_coordinates2d_t localArrayInit[N];
+                vx_array array = (vx_array)input;
+                /* Initialization */
+                for (int i = 0; i < N; i++) {
+                    localArrayInit[i].x = i;
+                    localArrayInit[i].y = i;
+                }
+                VX_CALL( vxAddArrayItems(array, N, &localArrayInit[0], sizeof(vx_coordinates2d_t)) );
+                break;
+            }
+        case VX_TYPE_MATRIX:
+            {
+                vx_uint8* data = ct_alloc_mem(MATRIX_SIZE_X * MATRIX_SIZE_Y * sizeof(vx_uint8));
+                vx_size i;
+                for (i = 0; i < MATRIX_SIZE_X * MATRIX_SIZE_Y; i++)
+                {
+                    data[i] = 1;
+                }
+                VX_CALL(vxCopyMatrix((vx_matrix)input, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                ct_free_mem(data);
+                break;
+            }
+        case VX_TYPE_CONVOLUTION:
+            {
+                VX_CALL(vxCopyConvolutionCoefficients((vx_convolution)input, gx, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                break;
+            }
+        case VX_TYPE_OBJECT_ARRAY:
+            {
+                vx_scalar input_item = NULL;
+                vx_uint8  scalar_value=1;
+                for (vx_size i = 0; i < OBJECT_ARRAY_COUNT; i++)
+                {
+                    ASSERT_VX_OBJECT(input_item = (vx_scalar)vxGetObjectArrayItem((vx_object_array)input, i), VX_TYPE_SCALAR);
+                    VX_CALL(vxCopyScalar(input_item, &scalar_value, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+                    VX_CALL(vxReleaseReference((vx_reference*)&input_item));
+                    ASSERT(input_item == 0);
+                }
+                break;
+            }
+        case VX_TYPE_LUT:
+            {
+                vx_size size = N*sizeof(vx_uint8);
+                void* data =  ct_alloc_mem(size);
+                vx_uint8* data8 = (vx_uint8*)data;
+                for (vx_size i = 0; i < N; ++i)
+                    data8[i] = 1;
+                VX_CALL(vxCopyLUT((vx_lut)input, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                ct_free_mem(data);
+                break;
+            }
+        case VX_TYPE_PYRAMID:
+            {
+                vx_pyramid input_pyramid = (vx_pyramid)input;
+                vx_image input_image = NULL;
+                ASSERT_VX_OBJECT(input_image = vxGetPyramidLevel(input_pyramid, 0), VX_TYPE_IMAGE);
+                void *p = NULL;
+                vx_map_id input_map_id;
+                vx_rectangle_t rect;
+                vx_imagepatch_addressing_t addr;
+                VX_CALL(vxGetValidRegionImage(input_image, &rect));
+                VX_CALL(vxMapImagePatch(input_image, &rect, 0, &input_map_id, &addr, &p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (vx_size i = 0; i < addr.dim_x*addr.dim_y; i++)
+                {
+                    vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                    *pPixel = 1;
+                }
+                VX_CALL( vxUnmapImagePatch(input_image, input_map_id));
+                VX_CALL(vxReleaseImage(&input_image));
+                ASSERT(input_image == 0);
+                break;
+            }
+        case VX_TYPE_REMAP:
+            {
+                vx_remap input_remap = (vx_remap)input;
+                vx_rectangle_t rect = { 0, 0,  IMAGE_SIZE_X*2, IMAGE_SIZE_Y*2};
+                vx_size stride = IMAGE_SIZE_X*2;
+                vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+                vx_size size = stride * IMAGE_SIZE_Y*2;
+                vx_coordinates2df_t* ptr_w = malloc(sizeof(vx_coordinates2df_t) * size);
+
+                for (vx_size i = 0; i < IMAGE_SIZE_Y*2; i++)
+                {
+                    for (vx_size j = 0; j < IMAGE_SIZE_X*2; j++)
+                    {
+                        vx_coordinates2df_t *coord_ptr = &(ptr_w[i * stride + j]);
+                        coord_ptr->x = (vx_float32)j;
+                        coord_ptr->y = (vx_float32)i;
+                    }
+                }
+
+                VX_CALL(vxCopyRemapPatch(input_remap, &rect, stride_y, ptr_w, VX_TYPE_COORDINATES2DF, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                free(ptr_w);
+                break;
+            }
+        case VX_TYPE_THRESHOLD:
+            {
+                vx_threshold input_threshold = (vx_threshold)input;
+                vx_pixel_value_t pa;
+                pa.U8 = 8;
+                ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdValue(input_threshold, &pa, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                break;
+            }
+        case VX_TYPE_TENSOR:
+            {
+                vx_tensor input_tensor = (vx_tensor)input;
+                vx_size start[TENSOR_DIMS_NUM] = { 0 };
+                vx_size strides[TENSOR_DIMS_NUM]= { 0 };
+                vx_size * dims = malloc(TENSOR_DIMS_NUM * sizeof(vx_size));
+                for(vx_size i = 0; i < TENSOR_DIMS_NUM; i++)
+                {
+                    dims[i] = TENSOR_DIMS_LENGTH;
+                    start[i] = 0;
+                    strides[i] = i ? strides[i - 1] * dims[i - 1] : sizeof(vx_uint8);
+                }
+                const vx_size bytes = dims[TENSOR_DIMS_NUM - 1] * strides[TENSOR_DIMS_NUM - 1];
+                void * data = malloc(bytes);
+                vx_uint8* u8_data = (vx_uint8*)data;
+                for(vx_size i = 0; i < bytes; i++)
+                {
+                    u8_data[i] = 2;
+                }
+
+                VX_CALL(vxCopyTensorPatch(input_tensor, TENSOR_DIMS_NUM, start, dims, strides, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                free(dims);
+                free(data);
+                break;
+            }
+        default:
+            break;
+    }
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxCopyNode(graph, input, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxQueryReference((vx_reference)output, VX_REFERENCE_TYPE, &output_type, sizeof(output_type)));
+    ASSERT_EQ_INT(input_type, output_type);
+
+    switch (output_type)
+    {
+        case VX_TYPE_IMAGE:
+            {
+            vx_image output_image = (vx_image)output;
+            void *p = NULL;
+            vx_map_id output_map_id;
+            vx_rectangle_t rect;
+            vx_imagepatch_addressing_t addr;
+            VX_CALL(vxGetValidRegionImage(output_image, &rect));
+            VX_CALL(vxMapImagePatch(output_image, &rect, 0, &output_map_id, &addr, &p,
+                        VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (vx_uint32 i = 0; i < (addr.dim_x * addr.dim_y); i++) {
+                vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                ASSERT(*pPixel == i);
+            }
+
+            VX_CALL( vxUnmapImagePatch(output_image, output_map_id));
+            break;
+            }
+        case VX_TYPE_ARRAY:
+            {
+                vx_array array = (vx_array)output;
+                vx_uint8 *p = NULL;
+                vx_size stride = 0;
+                vx_map_id map_id;
+                VX_CALL( vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+                ASSERT(stride >=  sizeof(vx_coordinates2d_t));
+                ASSERT(p != NULL);
+
+                for (int i = N/2; i<N; i++) {
+                    ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->x == i);
+                    ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->y == i);
+                }
+                VX_CALL( vxUnmapArrayRange (array, map_id));
+                break;
+            }
+        case VX_TYPE_SCALAR:
+            {
+                vx_uint8  in=2, out=2;
+                vx_scalar input_scalar = (vx_scalar)input;
+                vx_scalar output_scalar = (vx_scalar)output;
+                VX_CALL(vxCopyScalar(input_scalar, &in, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                VX_CALL(vxCopyScalar(output_scalar, &out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                ASSERT_EQ_INT(in, out);
+                break;
+            }
+        case VX_TYPE_MATRIX:
+            {
+                vx_uint8* data = ct_alloc_mem(MATRIX_SIZE_X * MATRIX_SIZE_Y * sizeof(vx_uint8));
+                VX_CALL(vxCopyMatrix((vx_matrix)output, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                vx_size i;
+                for (i = 0; i < MATRIX_SIZE_X * MATRIX_SIZE_Y; i++)
+                {
+                    ASSERT_EQ_INT(data[i], 1);
+                }
+                ct_free_mem(data);
+                break;
+            }
+        case VX_TYPE_CONVOLUTION:
+            {
+              vx_int16 *data = (vx_int16 *)ct_alloc_mem(CONVOLUTION_X*CONVOLUTION_Y*sizeof(vx_int16));
+              VX_CALL(vxCopyConvolutionCoefficients((vx_convolution)output, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+              for (vx_size i = 0; i < CONVOLUTION_X; i++)
+              {
+                  for (vx_size j = 0; j < CONVOLUTION_Y; j++)
+                  {
+                      ASSERT(gx[i][j] == data[i * CONVOLUTION_X + j]);
+                  }
+              }
+
+              ct_free_mem(data);
+              break;
+            }
+        case VX_TYPE_OBJECT_ARRAY:
+            {
+                vx_scalar output_item = NULL;
+                vx_uint8  input_value=1, output_value = 0;
+                for (vx_size i = 0; i < OBJECT_ARRAY_COUNT; i++)
+                {
+                    ASSERT_VX_OBJECT(output_item = (vx_scalar)vxGetObjectArrayItem((vx_object_array)output, i), VX_TYPE_SCALAR);
+                    VX_CALL(vxCopyScalar(output_item, &output_value, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                    ASSERT_EQ_INT(output_value, input_value);
+                    VX_CALL(vxReleaseReference((vx_reference*)&output_item));
+                    ASSERT(output_item == 0);
+                }
+                break;
+            }
+        case VX_TYPE_LUT:
+            {
+                vx_map_id map_id;
+                void* lut_data = NULL;
+                VX_CALL(vxMapLUT((vx_lut)output, &map_id, &lut_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                vx_uint8* data8 = (vx_uint8*)lut_data;
+                for (vx_size i = 0; i < N; i++)
+                {
+                    ASSERT_EQ_INT(data8[i], 1);
+                }
+                VX_CALL(vxUnmapLUT((vx_lut)output, map_id));
+                break;
+            }
+        case VX_TYPE_PYRAMID:
+            {
+                vx_pyramid output_pyramid = (vx_pyramid)output;
+                vx_image output_image = NULL;
+                ASSERT_VX_OBJECT(output_image = vxGetPyramidLevel(output_pyramid, 0), VX_TYPE_IMAGE);
+                void *p = NULL;
+                vx_map_id map_id;
+                vx_rectangle_t rect;
+                vx_imagepatch_addressing_t addr;
+                VX_CALL(vxGetValidRegionImage(output_image, &rect));
+                VX_CALL(vxMapImagePatch(output_image, &rect, 0, &map_id, &addr, &p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (vx_size i = 0; i < addr.dim_x*addr.dim_y; i++)
+                {
+                    vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                    ASSERT_EQ_INT(*pPixel, 1);
+                }
+                VX_CALL( vxUnmapImagePatch(output_image, map_id));
+                VX_CALL(vxReleaseImage(&output_image));
+                ASSERT(output_image == 0);
+                break;
+            }
+        case VX_TYPE_THRESHOLD:
+            {
+                vx_threshold output_threshold = (vx_threshold)output;
+                vx_pixel_value_t pa;
+                ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdValue(output_threshold, &pa, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                ASSERT(pa.U8 == 8);
+                break;
+            }
+        case VX_TYPE_REMAP:
+            {
+                vx_remap output_remap = (vx_remap)output;
+                vx_rectangle_t rect = { 0, 0,  IMAGE_SIZE_X*2, IMAGE_SIZE_Y*2};
+                vx_size stride = IMAGE_SIZE_X*2;
+                vx_size stride_y = 0;
+                vx_coordinates2df_t *ptr_r = 0;
+                vx_map_id map_id;
+
+                VX_CALL(vxMapRemapPatch(output_remap, &rect, &map_id, &stride_y, (void **)&ptr_r, VX_TYPE_COORDINATES2DF, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+                for (vx_size i = 0; i < IMAGE_SIZE_Y*2; i++)
+                {
+                    for (vx_size j = 0; j < IMAGE_SIZE_X*2; j++)
+                    {
+                        vx_coordinates2df_t *coord_ptr = &(ptr_r[i * stride + j]);
+                        ASSERT_EQ_INT((vx_uint32)coord_ptr->x, j);
+                        ASSERT_EQ_INT((vx_uint32)coord_ptr->y, i);
+                    }
+                }
+
+                VX_CALL(vxUnmapRemapPatch(output_remap, map_id));
+                break;
+            }
+        case VX_TYPE_TENSOR:
+            {
+                vx_tensor output_tensor = (vx_tensor)output;
+                vx_size start[TENSOR_DIMS_NUM] = { 0 };
+                vx_size strides[TENSOR_DIMS_NUM]= { 0 };
+                vx_size * dims = malloc(TENSOR_DIMS_NUM * sizeof(vx_size));
+                for(vx_size i = 0; i < TENSOR_DIMS_NUM; i++)
+                {
+                    dims[i] = TENSOR_DIMS_LENGTH;
+                    start[i] = 0;
+                    strides[i] = i ? strides[i - 1] * dims[i - 1] : sizeof(vx_uint8);
+                }
+                const vx_size bytes = dims[TENSOR_DIMS_NUM - 1] * strides[TENSOR_DIMS_NUM - 1];
+                void * data = malloc(bytes);
+                VX_CALL(vxCopyTensorPatch(output_tensor, TENSOR_DIMS_NUM, start, dims, strides, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                vx_uint8* u8_data = (vx_uint8*)data;
+                for(vx_size i = 0; i < bytes; i++)
+                {
+                    ASSERT(u8_data[i] == 2);
+                }
+                free(dims);
+                free(data);
+                break;
+            }
+        default:
+            break;
+    }
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    VX_CALL(vxReleaseReference(&input));
+    VX_CALL(vxReleaseReference(&output));
+    ASSERT(input == 0);
+    ASSERT(output == 0);
+}
+
+TEST_WITH_ARG(Copy, testImmediateProcessing, copy_arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_reference input = NULL;
+    vx_reference output = NULL;
+    vx_enum input_type = arg_->item_type;
+    vx_enum output_type = VX_TYPE_INVALID;
+    vx_int16 gx[CONVOLUTION_X][CONVOLUTION_Y] = {
+        { 3, 0, -3 },
+        { 10, 0, -10 },
+        { 3, 0, -3 },
+    };
+
+    ASSERT_VX_OBJECT(input = own_create_exemplar(context, input_type, 0), (enum vx_type_e)input_type);
+    ASSERT_VX_OBJECT(output = own_create_exemplar(context, input_type, 1), (enum vx_type_e)input_type);
+    switch (input_type)
+    {
+        case VX_TYPE_IMAGE:
+            {
+            vx_image input_image = (vx_image)input;
+            void *p = NULL;
+            vx_map_id input_map_id;
+            vx_rectangle_t rect;
+            vx_imagepatch_addressing_t addr;
+            VX_CALL(vxGetValidRegionImage(input_image, &rect));
+            VX_CALL(vxMapImagePatch(input_image, &rect, 0, &input_map_id, &addr, &p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (vx_size i = 0; i < addr.dim_x*addr.dim_y; i++) {
+                vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                *pPixel = i;
+            }
+            VX_CALL( vxUnmapImagePatch(input_image, input_map_id));
+            break;
+            }
+        case VX_TYPE_ARRAY:
+            {
+                vx_coordinates2d_t localArrayInit[N];
+                vx_array array = (vx_array)input;
+                /* Initialization */
+                for (int i = 0; i < N; i++) {
+                    localArrayInit[i].x = i;
+                    localArrayInit[i].y = i;
+                }
+                VX_CALL( vxAddArrayItems(array, N, &localArrayInit[0], sizeof(vx_coordinates2d_t)) );
+                break;
+            }
+        case VX_TYPE_MATRIX:
+            {
+                vx_uint8* data = ct_alloc_mem(MATRIX_SIZE_X * MATRIX_SIZE_Y * sizeof(vx_uint8));
+                vx_size i;
+                for (i = 0; i < MATRIX_SIZE_X * MATRIX_SIZE_Y; i++)
+                {
+                    data[i] = 1;
+                }
+                VX_CALL(vxCopyMatrix((vx_matrix)input, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                ct_free_mem(data);
+                break;
+            }
+        case VX_TYPE_CONVOLUTION:
+            {
+                VX_CALL(vxCopyConvolutionCoefficients((vx_convolution)input, gx, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                break;
+            }
+        case VX_TYPE_OBJECT_ARRAY:
+            {
+                vx_scalar input_item = NULL;
+                vx_uint8  scalar_value=1;
+                for (vx_size i = 0; i < OBJECT_ARRAY_COUNT; i++)
+                {
+                    ASSERT_VX_OBJECT(input_item = (vx_scalar)vxGetObjectArrayItem((vx_object_array)input, i), VX_TYPE_SCALAR);
+                    VX_CALL(vxCopyScalar(input_item, &scalar_value, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+                    VX_CALL(vxReleaseReference((vx_reference*)&input_item));
+                    ASSERT(input_item == 0);
+                }
+                break;
+            }
+        case VX_TYPE_LUT:
+            {
+                vx_size size = N*sizeof(vx_uint8);
+                void* data =  ct_alloc_mem(size);
+                vx_uint8* data8 = (vx_uint8*)data;
+                for (vx_size i = 0; i < N; ++i)
+                    data8[i] = 1;
+                VX_CALL(vxCopyLUT((vx_lut)input, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                ct_free_mem(data);
+                break;
+            }
+        case VX_TYPE_PYRAMID:
+            {
+                vx_pyramid input_pyramid = (vx_pyramid)input;
+                vx_image input_image = NULL;
+                ASSERT_VX_OBJECT(input_image = vxGetPyramidLevel(input_pyramid, 0), VX_TYPE_IMAGE);
+                void *p = NULL;
+                vx_map_id input_map_id;
+                vx_rectangle_t rect;
+                vx_imagepatch_addressing_t addr;
+                VX_CALL(vxGetValidRegionImage(input_image, &rect));
+                VX_CALL(vxMapImagePatch(input_image, &rect, 0, &input_map_id, &addr, &p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (vx_size i = 0; i < addr.dim_x*addr.dim_y; i++)
+                {
+                    vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                    *pPixel = 1;
+                }
+                VX_CALL( vxUnmapImagePatch(input_image, input_map_id));
+                VX_CALL(vxReleaseImage(&input_image));
+                ASSERT(input_image == 0);
+                break;
+            }
+        case VX_TYPE_THRESHOLD:
+            {
+                vx_threshold input_threshold = (vx_threshold)input;
+                vx_pixel_value_t pa;
+                pa.U8 = 8;
+                ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdValue(input_threshold, &pa, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                break;
+            }
+        case VX_TYPE_REMAP:
+            {
+                vx_remap input_remap = (vx_remap)input;
+                vx_rectangle_t rect = { 0, 0,  IMAGE_SIZE_X*2, IMAGE_SIZE_Y*2};
+                vx_size stride = IMAGE_SIZE_X*2;
+                vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+                vx_size size = stride * IMAGE_SIZE_Y*2;
+                vx_coordinates2df_t* ptr_w = malloc(sizeof(vx_coordinates2df_t) * size);
+
+                for (vx_size i = 0; i < IMAGE_SIZE_Y*2; i++)
+                {
+                    for (vx_size j = 0; j < IMAGE_SIZE_X*2; j++)
+                    {
+                        vx_coordinates2df_t *coord_ptr = &(ptr_w[i * stride + j]);
+                        coord_ptr->x = (vx_float32)j;
+                        coord_ptr->y = (vx_float32)i;
+                    }
+                }
+
+                VX_CALL(vxCopyRemapPatch(input_remap, &rect, stride_y, ptr_w, VX_TYPE_COORDINATES2DF, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                free(ptr_w);
+                break;
+            }
+        case VX_TYPE_TENSOR:
+            {
+                vx_tensor input_tensor = (vx_tensor)input;
+                vx_size start[TENSOR_DIMS_NUM] = { 0 };
+                vx_size strides[TENSOR_DIMS_NUM]= { 0 };
+                vx_size * dims = malloc(TENSOR_DIMS_NUM * sizeof(vx_size));
+                for(vx_size i = 0; i < TENSOR_DIMS_NUM; i++)
+                {
+                    dims[i] = TENSOR_DIMS_LENGTH;
+                    start[i] = 0;
+                    strides[i] = i ? strides[i - 1] * dims[i - 1] : sizeof(vx_uint8);
+                }
+                const vx_size bytes = dims[TENSOR_DIMS_NUM - 1] * strides[TENSOR_DIMS_NUM - 1];
+                void * data = malloc(bytes);
+                vx_uint8* u8_data = (vx_uint8*)data;
+                for(vx_size i = 0; i < bytes; i++)
+                {
+                    u8_data[i] = 2;
+                }
+
+                VX_CALL(vxCopyTensorPatch(input_tensor, TENSOR_DIMS_NUM, start, dims, strides, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+                free(dims);
+                free(data);
+                break;
+            }
+        default:
+            break;
+    }
+    VX_CALL(vxuCopy(context, input, output));
+    VX_CALL(vxQueryReference((vx_reference)output, VX_REFERENCE_TYPE, &output_type, sizeof(output_type)));
+    ASSERT_EQ_INT(input_type, output_type);
+
+    switch (output_type)
+    {
+        case VX_TYPE_IMAGE:
+            {
+            vx_image output_image = (vx_image)output;
+            int i;
+            void *p = NULL;
+            vx_map_id output_map_id;
+            vx_rectangle_t rect;
+            vx_imagepatch_addressing_t addr;
+            VX_CALL(vxGetValidRegionImage(output_image, &rect));
+            VX_CALL(vxMapImagePatch(output_image, &rect, 0, &output_map_id, &addr, &p,
+                        VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (vx_uint32 i = 0; i < (addr.dim_x * addr.dim_y); i++) {
+                vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                ASSERT(*pPixel == i);
+            }
+
+            VX_CALL( vxUnmapImagePatch(output_image, output_map_id));
+            break;
+            }
+        case VX_TYPE_ARRAY:
+            {
+                vx_array array = (vx_array)output;
+                vx_uint8 *p = NULL;
+                vx_size stride = 0;
+                vx_map_id map_id;
+                VX_CALL( vxMapArrayRange(array, N/2, N, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+                ASSERT(stride >=  sizeof(vx_coordinates2d_t));
+                ASSERT(p != NULL);
+
+                for (int i = N/2; i<N; i++) {
+                    ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->x == i);
+                    ASSERT(((vx_coordinates2d_t *)(p+stride*(i-N/2)))->y == i);
+                }
+                VX_CALL( vxUnmapArrayRange (array, map_id));
+                break;
+            }
+        case VX_TYPE_SCALAR:
+            {
+                vx_uint8  in=2, out=2;
+                vx_scalar input_scalar = (vx_scalar)input;
+                vx_scalar output_scalar = (vx_scalar)output;
+                VX_CALL(vxCopyScalar(input_scalar, &in, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                VX_CALL(vxCopyScalar(output_scalar, &out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                ASSERT_EQ_INT(in, out);
+                break;
+            }
+        case VX_TYPE_MATRIX:
+            {
+                vx_uint8* data = ct_alloc_mem(MATRIX_SIZE_X * MATRIX_SIZE_Y * sizeof(vx_uint8));
+                VX_CALL(vxCopyMatrix((vx_matrix)output, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                vx_size i;
+                for (i = 0; i < MATRIX_SIZE_X * MATRIX_SIZE_Y; i++)
+                {
+                    ASSERT_EQ_INT(data[i], 1);
+                }
+                ct_free_mem(data);
+                break;
+            }
+        case VX_TYPE_CONVOLUTION:
+            {
+              vx_int16 *data = (vx_int16 *)ct_alloc_mem(CONVOLUTION_X*CONVOLUTION_Y*sizeof(vx_int16));
+              VX_CALL(vxCopyConvolutionCoefficients((vx_convolution)output, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+              for (vx_size i = 0; i < CONVOLUTION_X; i++)
+              {
+                  for (vx_size j = 0; j < CONVOLUTION_Y; j++)
+                  {
+                      ASSERT(gx[i][j] == data[i * CONVOLUTION_X + j]);
+                  }
+              }
+
+              ct_free_mem(data);
+              break;
+            }
+        case VX_TYPE_OBJECT_ARRAY:
+            {
+                vx_scalar output_item = NULL;
+                vx_uint8  input_value=1, output_value = 0;
+                for (vx_size i = 0; i < OBJECT_ARRAY_COUNT; i++)
+                {
+                    ASSERT_VX_OBJECT(output_item = (vx_scalar)vxGetObjectArrayItem((vx_object_array)output, i), VX_TYPE_SCALAR);
+                    VX_CALL(vxCopyScalar(output_item, &output_value, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                    ASSERT_EQ_INT(output_value, input_value);
+                    VX_CALL(vxReleaseReference((vx_reference*)&output_item));
+                    ASSERT(output_item == 0);
+                }
+                break;
+            }
+        case VX_TYPE_LUT:
+            {
+                vx_map_id map_id;
+                void* lut_data = NULL;
+                VX_CALL(vxMapLUT((vx_lut)output, &map_id, &lut_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                vx_uint8* data8 = (vx_uint8*)lut_data;
+                for (vx_size i = 0; i < N; i++)
+                {
+                    ASSERT_EQ_INT(data8[i], 1);
+                }
+                VX_CALL(vxUnmapLUT((vx_lut)output, map_id));
+                break;
+            }
+        case VX_TYPE_PYRAMID:
+            {
+                vx_pyramid output_pyramid = (vx_pyramid)output;
+                vx_image output_image = NULL;
+                ASSERT_VX_OBJECT(output_image = vxGetPyramidLevel(output_pyramid, 0), VX_TYPE_IMAGE);
+                void *p = NULL;
+                vx_map_id map_id;
+                vx_rectangle_t rect;
+                vx_imagepatch_addressing_t addr;
+                VX_CALL(vxGetValidRegionImage(output_image, &rect));
+                VX_CALL(vxMapImagePatch(output_image, &rect, 0, &map_id, &addr, &p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (vx_size i = 0; i < addr.dim_x*addr.dim_y; i++)
+                {
+                    vx_uint8 *pPixel = vxFormatImagePatchAddress1d(p, i, &addr);
+                    ASSERT_EQ_INT(*pPixel, 1);
+                }
+                VX_CALL( vxUnmapImagePatch(output_image, map_id));
+                VX_CALL(vxReleaseImage(&output_image));
+                ASSERT(output_image == 0);
+                break;
+            }
+        case VX_TYPE_THRESHOLD:
+            {
+                vx_threshold output_threshold = (vx_threshold)output;
+                vx_pixel_value_t pa;
+                ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdValue(output_threshold, &pa, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                ASSERT(pa.U8 == 8);
+                break;
+            }
+        case VX_TYPE_REMAP:
+            {
+                vx_remap output_remap = (vx_remap)output;
+                vx_rectangle_t rect = { 0, 0,  IMAGE_SIZE_X*2, IMAGE_SIZE_Y*2};
+                vx_size stride = IMAGE_SIZE_X*2;
+                vx_size stride_y = 0;
+                vx_coordinates2df_t *ptr_r = 0;
+                vx_map_id map_id;
+
+                VX_CALL(vxMapRemapPatch(output_remap, &rect, &map_id, &stride_y, (void **)&ptr_r, VX_TYPE_COORDINATES2DF, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+                for (vx_size i = 0; i < IMAGE_SIZE_Y*2; i++)
+                {
+                    for (vx_size j = 0; j < IMAGE_SIZE_X*2; j++)
+                    {
+                        vx_coordinates2df_t *coord_ptr = &(ptr_r[i * stride + j]);
+                        ASSERT_EQ_INT((vx_uint32)coord_ptr->x, j);
+                        ASSERT_EQ_INT((vx_uint32)coord_ptr->y, i);
+                    }
+                }
+
+                VX_CALL(vxUnmapRemapPatch(output_remap, map_id));
+                break;
+            }
+        case VX_TYPE_TENSOR:
+            {
+                vx_tensor output_tensor = (vx_tensor)output;
+                vx_size start[TENSOR_DIMS_NUM] = { 0 };
+                vx_size strides[TENSOR_DIMS_NUM]= { 0 };
+                vx_size * dims = malloc(TENSOR_DIMS_NUM * sizeof(vx_size));
+                for(vx_size i = 0; i < TENSOR_DIMS_NUM; i++)
+                {
+                    dims[i] = TENSOR_DIMS_LENGTH;
+                    start[i] = 0;
+                    strides[i] = i ? strides[i - 1] * dims[i - 1] : sizeof(vx_uint8);
+                }
+                const vx_size bytes = dims[TENSOR_DIMS_NUM - 1] * strides[TENSOR_DIMS_NUM - 1];
+                void * data = malloc(bytes);
+                VX_CALL(vxCopyTensorPatch(output_tensor, TENSOR_DIMS_NUM, start, dims, strides, data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+                vx_uint8* u8_data = (vx_uint8*)data;
+                for(vx_size i = 0; i < bytes; i++)
+                {
+                    ASSERT(u8_data[i] == 2);
+                }
+                free(dims);
+                free(data);
+                break;
+            }
+        default:
+            break;
+    }
+    VX_CALL(vxReleaseReference(&input));
+    VX_CALL(vxReleaseReference(&output));
+    ASSERT(input == 0);
+    ASSERT(output == 0);
+}
+TESTCASE_TESTS(Copy,
+    testNodeCreation,
+    testGraphProcessing,
+    testImmediateProcessing
+)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test_conformance/test_dilate3x3.c b/test_conformance/test_dilate3x3.c
new file mode 100644
index 0000000..0f16ff2
--- /dev/null
+++ b/test_conformance/test_dilate3x3.c
@@ -0,0 +1,299 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(Dilate3x3, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Dilate3x3, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxDilate3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+// VX_DF_IMAGE_8U Boolean image
+static CT_Image dilate3x3_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 2));
+
+    // convert 0/1 values to 0/255
+    CT_FILL_IMAGE_8U(return 0, image,
+            *dst_data = (*dst_data) ? 255 : 0);
+
+    return image;
+}
+
+static CT_Image dilate3x3_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int32_t dilate_get(int32_t *values)
+{
+    int i;
+    int32_t v = values[0];
+    for (i = 1; i < 9; i++)
+        v = (v < values[i]) ? values[i] : v;
+    return v;
+}
+
+static uint8_t dilate3x3_calculate(CT_Image src, uint32_t x, uint32_t y)
+{
+    int32_t values[9] = {
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)dilate_get(values);
+}
+
+static uint8_t dilate3x3_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)dilate_get(values);
+}
+
+static uint8_t dilate3x3_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value)
+    };
+    return (uint8_t)dilate_get(values);
+}
+
+
+static CT_Image dilate3x3_create_reference_image(CT_Image src, vx_border_t border)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, src->format);
+
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                if (x >= 1 && y >= 1 && x < src->width - 1 && y < src->height - 1)
+                {
+                    uint8_t res = dilate3x3_calculate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = dilate3x3_calculate_replicate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 constant_value = border.constant_value.U32;
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = dilate3x3_calculate_constant(src, x, y, constant_value);
+                    *dst_data = res;
+                });
+    }
+    else
+    {
+        ASSERT_(return 0, 0);
+    }
+    return dst;
+}
+
+
+static void dilate3x3_check(CT_Image src, CT_Image dst, vx_border_t border)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = dilate3x3_create_reference_image(src, border));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst,  1, 1, 1, 1);
+            ct_adjust_roi(dst_ref, 1, 1, 1, 1);
+        }
+    );
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+} Arg;
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, dilate3x3_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, dilate3x3_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Dilate3x3, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxDilate3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(dilate3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Dilate3x3, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuDilate3x3(context, src_image, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(dilate3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Dilate3x3, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_distribution.c b/test_conformance/test_distribution.c
new file mode 100644
index 0000000..dad1c33
--- /dev/null
+++ b/test_conformance/test_distribution.c
@@ -0,0 +1,87 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(Distribution, CT_VXContext, ct_setup_vx_context, 0)
+
+static vx_uint32 reference_window(vx_uint32 range, vx_size nbins)
+{
+    vx_uint32 test_window = (vx_uint32)(range / nbins);
+    if (test_window*nbins == range)
+        return test_window;
+    else
+        return 0;
+}
+
+#define MAX_BINS 256
+
+TEST(Distribution, testvxCreateVirtualDistribution)
+{
+    vx_distribution dist1;
+    vx_context context = context_->vx_context_;
+    uint64_t rng;
+    rng = CT()->seed_;
+    int val0 = CT_RNG_NEXT_INT(rng, 0, (MAX_BINS-1)), val1 = CT_RNG_NEXT_INT(rng, 0, (MAX_BINS-1));
+    int offset = CT_MIN(val0, val1), range = CT_MAX(val0, val1) - offset + 1;
+    int nbins = CT_RNG_NEXT_INT(rng, 1, range+1);
+    vx_graph graph = 0;
+    graph = vxCreateGraph(context);
+
+    dist1 = vxCreateVirtualDistribution(graph, nbins, offset, range);
+    ASSERT_VX_OBJECT(dist1, VX_TYPE_DISTRIBUTION);
+
+    {
+        /* smoke tests for query distribution attributes */
+        vx_size   attr_dims = 0;
+        vx_int32  attr_offset = 0;
+        vx_uint32 attr_range = 0;
+        vx_size   attr_bins = 0;
+        vx_uint32 attr_window = 0;
+        VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_DIMENSIONS, &attr_dims, sizeof(attr_dims)));
+        if (1 != attr_dims)
+            CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_DIMENSIONS failed\n");
+
+        VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_OFFSET, &attr_offset, sizeof(attr_offset)));
+        if (attr_offset != offset)
+            CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_OFFSET failed\n");
+
+        VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_RANGE, &attr_range, sizeof(attr_range)));
+        if (attr_range != range)
+            CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_RANGE failed\n");
+
+        VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_BINS, &attr_bins, sizeof(attr_bins)));
+        if (attr_bins != nbins)
+            CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_BINS failed\n");
+
+        VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_WINDOW, &attr_window, sizeof(attr_window)));
+        /*Tthe attribute is specified as valid only when the range is a multiple of nbins, 
+        * in other cases, its value shouldn't be checked */
+        if (((range % nbins) == 0) && (attr_window != reference_window(range, nbins)))
+            CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_WINDOW failed\n");
+
+    }
+    VX_CALL(vxReleaseDistribution(&dist1));
+    VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(dist1 == 0 && graph == 0);
+}
+
+TESTCASE_TESTS(Distribution, testvxCreateVirtualDistribution)
diff --git a/test_conformance/test_eqhist.c b/test_conformance/test_eqhist.c
new file mode 100644
index 0000000..3724072
--- /dev/null
+++ b/test_conformance/test_eqhist.c
@@ -0,0 +1,177 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+static void reference_eqhist(CT_Image src, CT_Image dst)
+{
+    int i, j, i0 = -1, hist[256];
+    uint32_t x, y, width, height, srcstride, dststride, delta = 0, scale = 1;
+    uint8_t lut[256];
+
+    ASSERT(src && dst);
+    ASSERT(src->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_U8);
+    ASSERT(src->width > 0 && src->height > 0 &&
+           src->width == dst->width && src->height == dst->height);
+    width = src->width;
+    height = src->height;
+    srcstride = ct_stride_bytes(src);
+    dststride = ct_stride_bytes(dst);
+
+    for( i = 0; i < 256; i++ )
+        hist[i] = 0;
+
+    for( y = 0; y < height; y++ )
+    {
+        const uint8_t* srcptr = src->data.y + y*srcstride;
+        for( x = 0; x < width; x++ )
+            hist[srcptr[x]]++;
+    }
+
+    for( i = 0; i < 256; i++ )
+    {
+        if( i0 < 0 && hist[i] > 0 )
+        {
+            i0 = i;
+            delta = hist[i0];
+            scale = width*height - delta;
+            if( scale == 0 )
+            {
+                // if all the pixels are equal, leave the image as-is
+                for( j = 0; j < 256; j++ )
+                    lut[j] = j;
+                break;
+            }
+        }
+        hist[i] += i > 0 ? hist[i-1] : 0;
+        if( i0 < 0 )
+            lut[i] = 0;
+        else
+        {
+            int val = (int)(((hist[i] - delta)*255 + scale/2)/scale);
+            lut[i] = CT_CAST_U8(val);
+        }
+    }
+
+    for( y = 0; y < height; y++ )
+    {
+        const uint8_t* srcptr = src->data.y + y*srcstride;
+        uint8_t* dstptr = dst->data.y + y*dststride;
+        for( x = 0; x < width; x++ )
+            dstptr[x] = lut[srcptr[x]];
+    }
+}
+
+
+TESTCASE(EqualizeHistogram, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_df_image format;
+} format_arg;
+
+#define MAX_BINS 256
+
+#define EQHIST_TEST_CASE(imm, tp) \
+    {#imm "/" #tp, CT_##imm##_MODE, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(EqualizeHistogram, testOnRandom, format_arg,
+              EQHIST_TEST_CASE(Immediate, U8),
+              EQHIST_TEST_CASE(Graph, U8),
+              )
+{
+    int format = arg_->format;
+    int mode = arg_->mode;
+    vx_image src, dst;
+    vx_node node = 0;
+    vx_graph graph = 0;
+    CT_Image src0, dst0, dst1;
+    vx_context context = context_->vx_context_;
+    int iter, niters = 100;
+    uint64_t rng;
+    int a = 0, b = 256;
+
+    rng = CT()->seed_;
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width, height;
+
+        if( ct_check_any_size() )
+        {
+            width = ct_roundf(ct_log_rng(&rng, 0, 10));
+            height = ct_roundf(ct_log_rng(&rng, 0, 10));
+
+            width = CT_MAX(width, 1);
+            height = CT_MAX(height, 1);
+        }
+        else
+        {
+            width = 640;
+            height = 480;
+        }
+
+        ct_update_progress(iter, niters);
+
+        ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, format, &rng, a, b));
+        if( iter % 20 == 0 )
+        {
+            uint8_t val = (uint8_t)CT_RNG_NEXT_INT(rng, a, b);
+            ct_memset(src0->data.y, val, ct_stride_bytes(src0)*src0->height);
+        }
+        ASSERT_NO_FAILURE(dst0 = ct_allocate_image(width, height, format));
+        ASSERT_NO_FAILURE(reference_eqhist(src0, dst0));
+
+        src = ct_image_to_vx_image(src0, context);
+        dst = vxCreateImage(context, width, height, format);
+        ASSERT_VX_OBJECT(dst, VX_TYPE_IMAGE);
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuEqualizeHist(context, src, dst));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxEqualizeHistNode(graph, src, dst);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+        }
+        dst1 = ct_image_from_vx_image(dst);
+
+        ASSERT_CTIMAGE_NEAR(dst0, dst1, 1);
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dst));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+}
+
+TESTCASE_TESTS(EqualizeHistogram, testOnRandom)
diff --git a/test_conformance/test_erode3x3.c b/test_conformance/test_erode3x3.c
new file mode 100644
index 0000000..1468e82
--- /dev/null
+++ b/test_conformance/test_erode3x3.c
@@ -0,0 +1,299 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(Erode3x3, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Erode3x3, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxErode3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+// VX_DF_IMAGE_8U Boolean image
+static CT_Image erode3x3_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 2));
+
+    // convert 0/1 values to 0/255
+    CT_FILL_IMAGE_8U(return 0, image,
+            *dst_data = (*dst_data) ? 255 : 0);
+
+    return image;
+}
+
+static CT_Image erode3x3_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int32_t erode_get(int32_t *values)
+{
+    int i;
+    int32_t v = values[0];
+    for (i = 1; i < 9; i++)
+        v = (v > values[i]) ? values[i] : v;
+    return v;
+}
+
+static uint8_t erode3x3_calculate(CT_Image src, uint32_t x, uint32_t y)
+{
+    int32_t values[9] = {
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)erode_get(values);
+}
+
+static uint8_t erode3x3_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)erode_get(values);
+}
+
+static uint8_t erode3x3_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value)
+    };
+    return (uint8_t)erode_get(values);
+}
+
+
+static CT_Image erode3x3_create_reference_image(CT_Image src, vx_border_t border)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, src->format);
+
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                if (x >= 1 && y >= 1 && x < src->width - 1 && y < src->height - 1)
+                {
+                    uint8_t res = erode3x3_calculate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = erode3x3_calculate_replicate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 constant_value = border.constant_value.U32;
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = erode3x3_calculate_constant(src, x, y, constant_value);
+                    *dst_data = res;
+                });
+    }
+    else
+    {
+        ASSERT_(return 0, 0);
+    }
+    return dst;
+}
+
+
+static void erode3x3_check(CT_Image src, CT_Image dst, vx_border_t border)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = erode3x3_create_reference_image(src, border));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst,  1, 1, 1, 1);
+            ct_adjust_roi(dst_ref, 1, 1, 1, 1);
+        }
+    );
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+} Arg;
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, erode3x3_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, erode3x3_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Erode3x3, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxErode3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(erode3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Erode3x3, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuErode3x3(context, src_image, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(erode3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Erode3x3, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_export_import_extension.c b/test_conformance/test_export_import_extension.c
new file mode 100644
index 0000000..692088e
--- /dev/null
+++ b/test_conformance/test_export_import_extension.c
@@ -0,0 +1,271 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef OPENVX_USE_IX
+
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <VX/vx_khr_ix.h>
+
+#include "test_engine/test.h"
+
+#define TEST_TENSOR_MIN_DIM_SZ                  1
+#define TEST_TENSOR_MAX_DIM_SZ                  20
+
+TESTCASE(ExtensionObject, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char* name;
+    vx_enum     type;
+} format_arg;
+
+#define EXPORT_IMPORT_TEST_CASE(tp) \
+    {#tp, tp}
+
+static vx_size lut_count(vx_enum data_type)
+{
+    vx_size count = 0;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        count = 256;
+        break;
+    case VX_TYPE_INT16:
+        count = 65536;
+        break;
+    }
+
+    return count;
+}
+
+TEST_WITH_ARG(ExtensionObject, testExtensionObject, format_arg,
+        EXPORT_IMPORT_TEST_CASE(VX_IX_USE_EXPORT_VALUES),
+        EXPORT_IMPORT_TEST_CASE(VX_IX_USE_NO_EXPORT_VALUES),
+        EXPORT_IMPORT_TEST_CASE(VX_IX_USE_APPLICATION_CREATE),
+        )
+{
+    vx_context context = context_->vx_context_;
+    vx_reference reference_list[13];
+    vx_reference import_list[13]={NULL};
+    vx_enum uses_list[] = {
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        VX_IX_USE_EXPORT_VALUES
+    };
+
+    vx_enum uses_import_list[] = {
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        arg_->type,
+        VX_IX_USE_EXPORT_VALUES
+    };
+
+    const vx_uint8 *blob_ptr = NULL;
+    vx_size blob_bytes = 0;
+
+    vx_image image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    reference_list[0] = (vx_reference ) image;
+
+    vx_size count = lut_count(VX_TYPE_UINT8);
+    vx_lut lut = vxCreateLUT(context, VX_TYPE_UINT8, count);
+    const char* lut_name= "Lut";
+    VX_CALL(vxSetReferenceName((vx_reference)lut, lut_name));
+    reference_list[1] = (vx_reference ) lut;
+
+    vx_distribution distribution = vxCreateDistribution(context, 32, 0, 255);
+    reference_list[2] = (vx_reference ) distribution;
+
+    vx_threshold threshold = vxCreateThreshold(context, VX_THRESHOLD_TYPE_BINARY, VX_TYPE_UINT8);
+    reference_list[3] = (vx_reference ) threshold;
+
+    vx_matrix matrix = vxCreateMatrix(context, VX_TYPE_UINT8, 3, 5);
+    reference_list[4] = (vx_reference ) matrix;
+
+    vx_convolution conv = vxCreateConvolution(context, 3, 3);
+    reference_list[5] = (vx_reference ) conv;
+
+    vx_char ref = 1;
+    vx_scalar scalar = vxCreateScalar(context, VX_TYPE_CHAR, &ref);
+    reference_list[6] = (vx_reference ) scalar;
+
+    vx_array array = vxCreateArray(context, VX_TYPE_COORDINATES2D, 10);
+    reference_list[7] = (vx_reference ) array;
+
+    vx_remap map = vxCreateRemap(context, 16, 32, 128, 64);
+    reference_list[8] = (vx_reference ) map;
+
+    vx_pyramid pyramid = vxCreatePyramid(context, 2, VX_SCALE_PYRAMID_HALF,  320, 240, VX_DF_IMAGE_S16);
+    reference_list[9] = (vx_reference ) pyramid;
+
+    vx_image imagedelay = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    vx_delay delay = vxCreateDelay(context, (vx_reference)imagedelay, 2);
+    reference_list[10] = (vx_reference ) delay;
+
+    uint64_t rng;
+    {
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    size_t in_dims[4];
+    in_dims[0] = 5;
+    in_dims[1] = 3;
+    in_dims[2] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+    in_dims[3] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+    vx_uint8 fixed_point_position = 0;
+    vx_tensor tensor = vxCreateTensor(context, 4, in_dims, VX_TYPE_UINT8, fixed_point_position);
+    ASSERT_VX_OBJECT(tensor, VX_TYPE_TENSOR);
+    reference_list[11] = (vx_reference ) tensor;
+
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+    vx_graph graph = vxCreateGraph(context);
+    vxGaussian3x3Node(graph, src_image, interm_image);
+    vxIntegralImageNode(graph, interm_image, dst_image);
+    VX_CALL(vxVerifyGraph(graph));
+    reference_list[12] = (vx_reference ) graph;
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxExportObjectsToMemory( context, 13, &reference_list[0], &uses_list[0], &blob_ptr, &blob_bytes));
+    void * export_blob = malloc(blob_bytes);
+    memcpy(export_blob, blob_ptr, blob_bytes);
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseLUT(&lut));
+    VX_CALL(vxReleaseDistribution(&distribution));
+    VX_CALL(vxReleaseThreshold(&threshold));
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseConvolution(&conv));
+    VX_CALL(vxReleaseScalar(&scalar));
+    VX_CALL(vxReleaseArray(&array));
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleasePyramid(&pyramid));
+    VX_CALL(vxReleaseDelay(&delay));
+    VX_CALL(vxReleaseImage(&imagedelay));
+    VX_CALL(vxReleaseTensor(&tensor));
+    VX_CALL(vxReleaseImage(&src_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseExportedMemory(context, &blob_ptr));
+    //VX_CALL(vxReleaseContext(&context));
+
+    vx_context context1 = vxCreateContext();
+    vx_image image1 = vxCreateImage(context1, 128, 128, VX_DF_IMAGE_U8);
+    import_list[0] = (vx_reference ) image1;
+    vx_lut lut1 = vxCreateLUT(context1, VX_TYPE_UINT8, count);
+    VX_CALL(vxSetReferenceName((vx_reference)lut1, lut_name));
+    import_list[1] = (vx_reference ) lut1;
+    vx_distribution distribution1 = vxCreateDistribution(context1, 32, 0, 255);
+    import_list[2] = (vx_reference ) distribution1;
+    vx_threshold threshold1 = vxCreateThreshold(context1, VX_THRESHOLD_TYPE_BINARY, VX_TYPE_UINT8);
+    import_list[3] = (vx_reference ) threshold1;
+    vx_matrix matrix1 = vxCreateMatrix(context1, VX_TYPE_UINT8, 3, 5);
+    import_list[4] = (vx_reference ) matrix1;
+    vx_convolution conv1 = vxCreateConvolution(context1, 3, 3);
+    import_list[5] = (vx_reference ) conv1;
+    vx_scalar scalar1 = vxCreateScalar(context1, VX_TYPE_CHAR, &ref);
+    import_list[6] = (vx_reference ) scalar1;
+    vx_array array1 = vxCreateArray(context1, VX_TYPE_COORDINATES2D, 10);
+    import_list[7] = (vx_reference ) array1;
+    vx_remap map1 = vxCreateRemap(context1, 16, 32, 128, 64);
+    import_list[8] = (vx_reference ) map1;
+    vx_pyramid pyramid1 = vxCreatePyramid(context1, 2, VX_SCALE_PYRAMID_HALF,  320, 240, VX_DF_IMAGE_S16);
+    import_list[9] = (vx_reference ) pyramid1;
+    vx_image imagedelay1 = vxCreateImage(context1, 128, 128, VX_DF_IMAGE_U8);
+    vx_delay delay1 = vxCreateDelay(context1, (vx_reference)imagedelay1, 2);
+    import_list[10] = (vx_reference ) delay1;
+    vx_tensor tensor1 = vxCreateTensor(context1, 4, in_dims, VX_TYPE_UINT8, fixed_point_position);
+    ASSERT_VX_OBJECT(tensor1, VX_TYPE_TENSOR);
+    import_list[11] = (vx_reference ) tensor1;
+
+    vx_import import = vxImportObjectsFromMemory ( context1, 13, &import_list[0], &uses_import_list[0], export_blob, blob_bytes );
+    ASSERT_VX_OBJECT(import, VX_TYPE_IMPORT);
+    ASSERT_VX_OBJECT((vx_lut)import_list[2], VX_TYPE_DISTRIBUTION);
+
+    vx_reference name_reference = vxGetImportReferenceByName(import, lut_name);
+
+    ASSERT_VX_OBJECT((vx_lut)name_reference, VX_TYPE_LUT);
+    ASSERT(vxGetStatus(name_reference) == VX_SUCCESS);
+
+
+    VX_CALL(vxReleaseImage(&image1));
+    VX_CALL(vxReleaseLUT(&lut1));
+    VX_CALL(vxReleaseDistribution(&distribution1));
+    VX_CALL(vxReleaseThreshold(&threshold1));
+    VX_CALL(vxReleaseMatrix(&matrix1));
+    VX_CALL(vxReleaseConvolution(&conv1));
+    VX_CALL(vxReleaseScalar(&scalar1));
+    VX_CALL(vxReleaseArray(&array1));
+    VX_CALL(vxReleaseRemap(&map1));
+    VX_CALL(vxReleasePyramid(&pyramid1));
+    VX_CALL(vxReleaseImage(&imagedelay1));
+    VX_CALL(vxReleaseDelay(&delay1));
+    VX_CALL(vxReleaseTensor(&tensor1));
+
+
+    if(arg_->type != VX_IX_USE_APPLICATION_CREATE)
+    {
+        vxReleaseReference(&import_list[0]);
+        vxReleaseReference(&import_list[1]);
+        vxReleaseReference(&import_list[2]);
+        vxReleaseReference(&import_list[3]);
+        vxReleaseReference(&import_list[4]);
+        vxReleaseReference(&import_list[5]);
+        vxReleaseReference(&import_list[6]);
+        vxReleaseReference(&import_list[7]);
+        vxReleaseReference(&import_list[8]);
+        vxReleaseReference(&import_list[9]);
+        vxReleaseReference(&import_list[10]);
+        vxReleaseReference(&import_list[11]);
+    }
+    vxReleaseReference(&import_list[12]);
+
+    vxReleaseReference(&name_reference);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS,vxReleaseImport(&import));
+    free(export_blob);
+}
+
+TESTCASE_TESTS(ExtensionObject, testExtensionObject)
+
+#endif
diff --git a/test_conformance/test_fast.c b/test_conformance/test_fast.c
new file mode 100644
index 0000000..f0fb064
--- /dev/null
+++ b/test_conformance/test_fast.c
@@ -0,0 +1,303 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <math.h>
+
+static const int circle[][2] =
+{
+    {3, 0}, {3, -1}, {2, -2}, {1, -3}, {0, -3}, {-1, -3}, {-2, -2}, {-3, -1},
+    {-3, 0}, {-3, 1}, {-2, 2}, {-1, 3}, {0, 3}, {1, 3}, {2, 2}, {3, 1},
+    {3, 0}, {3, -1}, {2, -2}, {1, -3}, {0, -3}, {-1, -3}, {-2, -2}, {-3, -1},
+    {-3, 0}, {-3, 1}, {-2, 2}, {-1, 3}, {0, 3}, {1, 3}, {2, 2}, {3, 1},
+};
+
+static int check_pt(const uint8_t* ptr, int32_t stride, int t)
+{
+    int cval = ptr[0];
+    int max_up_count = 0, max_lo_count = 0;
+    int i, up_count = 0, lo_count = 0;
+
+    for( i = 0; i < 16+9; i++ )
+    {
+        int val = ptr[circle[i][0] + circle[i][1]*stride];
+        if( val > cval + t )
+            up_count++;
+        else
+        {
+            max_up_count = CT_MAX(max_up_count, up_count);
+            up_count = 0;
+        }
+        if( val < cval - t )
+            lo_count++;
+        else
+        {
+            max_lo_count = CT_MAX(max_lo_count, lo_count);
+            lo_count = 0;
+        }
+    }
+    max_up_count = CT_MAX(max_up_count, up_count);
+    max_lo_count = CT_MAX(max_lo_count, lo_count);
+    return max_up_count >= 9 || max_lo_count >= 9;
+}
+
+static uint32_t reference_fast(CT_Image src, CT_Image dst, CT_Image mask, int threshold, int nonmax_suppression)
+{
+    const int r = 3;
+    int x, y, width, height;
+    int32_t srcstride, dststride;
+    uint32_t ncorners = 0;
+
+    ASSERT_(return 0, src && dst);
+    ASSERT_(return 0, src->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_U8);
+    ASSERT_(return 0, src->width > 0 && src->height > 0 &&
+           src->width == dst->width && src->height == dst->height);
+    width = src->width;
+    height = src->height;
+    srcstride = (int32_t)ct_stride_bytes(src);
+    dststride = (int32_t)ct_stride_bytes(dst);
+    ct_memset( dst->data.y, 0, (vx_size)dststride*height );
+
+    for( y = r; y < height - r; y++ )
+    {
+        const uint8_t* srcptr = src->data.y + y*srcstride;
+        uint8_t* dstptr = dst->data.y + y*dststride;
+        for( x = r; x < width - r; x++ )
+        {
+            int is_corner = check_pt(srcptr + x, srcstride, threshold);
+            int strength = 0;
+
+            if( is_corner )
+            {
+                // determine the corner strength using binary search
+                int a = threshold;
+                int b = 255;
+                // loop invariant:
+                //    1. point is corner with threshold=a
+                //    2. point is not a corner with threshold=b
+                while( b - a > 1 )
+                {
+                    int c = (b + a)/2;
+                    is_corner = check_pt(srcptr + x, srcstride, c);
+                    if( is_corner )
+                        a = c;
+                    else
+                        b = c;
+                }
+                strength = a;
+                ncorners++;
+            }
+            dstptr[x] = CT_CAST_U8(strength);
+        }
+    }
+
+    if( nonmax_suppression )
+    {
+        int32_t maskstride = (int32_t)ct_stride_bytes(mask);
+
+        for( y = r; y < height - r; y++ )
+        {
+            const uint8_t* dstptr = dst->data.y + y*dststride;
+            uint8_t* mptr = mask->data.y + y*maskstride;
+            for( x = r; x < width - r; x++ )
+            {
+                const uint8_t* ptr = dstptr + x;
+                int cval = ptr[0];
+                mptr[x] = cval >= ptr[-1-dststride] && cval >= ptr[-dststride] && cval >= ptr[-dststride+1] && cval >= ptr[-1] &&
+                          cval >  ptr[-1+dststride] && cval >  ptr[ dststride] && cval >  ptr[ dststride+1] && cval >  ptr[ 1];
+            }
+        }
+
+        ncorners = 0;
+        for( y = r; y < height - r; y++ )
+        {
+            uint8_t* dstptr = dst->data.y + y*dststride;
+            const uint8_t* mptr = mask->data.y + y*maskstride;
+            for( x = r; x < width - r; x++ )
+            {
+                if( mptr[x] )
+                    ncorners++;
+                else
+                    dstptr[x] = 0;
+            }
+        }
+    }
+    return ncorners;
+}
+
+TESTCASE(FastCorners, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    const char* imgname;
+    int threshold;
+    int nonmax;
+    int mode;
+} format_arg;
+
+#define MAX_BINS 256
+
+#define FAST_TEST_CASE(imm, imgname, t, nm) \
+    {#imm "/" "image=" #imgname "/" "threshold=" #t "/" "nonmax_suppression=" #nm, #imgname ".bmp", t, nm, CT_##imm##_MODE}
+
+TEST_WITH_ARG(FastCorners, testOnNaturalImages, format_arg,
+              FAST_TEST_CASE(Immediate, lena, 10, 0),
+              FAST_TEST_CASE(Immediate, lena, 10, 1),
+              FAST_TEST_CASE(Immediate, lena, 80, 0),
+              FAST_TEST_CASE(Immediate, lena, 80, 1),
+              FAST_TEST_CASE(Immediate, baboon, 10, 0),
+              FAST_TEST_CASE(Immediate, baboon, 10, 1),
+              FAST_TEST_CASE(Immediate, baboon, 80, 0),
+              FAST_TEST_CASE(Immediate, baboon, 80, 1),
+              FAST_TEST_CASE(Immediate, optflow_00, 10, 0),
+              FAST_TEST_CASE(Immediate, optflow_00, 10, 1),
+              FAST_TEST_CASE(Immediate, optflow_00, 80, 0),
+              FAST_TEST_CASE(Immediate, optflow_00, 80, 1),
+
+              FAST_TEST_CASE(Graph, lena, 10, 0),
+              FAST_TEST_CASE(Graph, lena, 10, 1),
+              FAST_TEST_CASE(Graph, lena, 80, 0),
+              FAST_TEST_CASE(Graph, lena, 80, 1),
+              FAST_TEST_CASE(Graph, baboon, 10, 0),
+              FAST_TEST_CASE(Graph, baboon, 10, 1),
+              FAST_TEST_CASE(Graph, baboon, 80, 0),
+              FAST_TEST_CASE(Graph, baboon, 80, 1),
+              FAST_TEST_CASE(Graph, optflow_00, 10, 0),
+              FAST_TEST_CASE(Graph, optflow_00, 10, 1),
+              FAST_TEST_CASE(Graph, optflow_00, 80, 0),
+              FAST_TEST_CASE(Graph, optflow_00, 80, 1),
+              )
+{
+    int mode = arg_->mode;
+    const char* imgname = arg_->imgname;
+    int threshold = arg_->threshold;
+    int nonmax = arg_->nonmax;
+    vx_image src;
+    vx_node node = 0;
+    vx_graph graph = 0;
+    CT_Image src0, dst0, mask0, dst1;
+    vx_context context = context_->vx_context_;
+    vx_scalar sthresh;
+    vx_array corners;
+    uint32_t width, height;
+    vx_float32 threshold_f = (vx_float32)threshold;
+    uint32_t ncorners0, ncorners;
+    vx_size corners_data_size = 0;
+    vx_keypoint_t* corners_data = 0;
+    uint32_t i, dst1stride;
+
+    ASSERT_NO_FAILURE(src0 = ct_read_image(imgname, 1));
+    ASSERT(src0->format == VX_DF_IMAGE_U8);
+
+    width = src0->width;
+    height = src0->height;
+
+    ASSERT_NO_FAILURE(dst0 = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+    ASSERT_NO_FAILURE(mask0 = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+    ASSERT_NO_FAILURE(dst1 = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+    dst1stride = ct_stride_bytes(dst1);
+    ct_memset(dst1->data.y, 0, (vx_size)dst1stride*height);
+
+    ncorners0 = reference_fast(src0, dst0, mask0, threshold, nonmax);
+
+    src = ct_image_to_vx_image(src0, context);
+    sthresh = vxCreateScalar(context, VX_TYPE_FLOAT32, &threshold_f);
+    corners = vxCreateArray(context, VX_TYPE_KEYPOINT, 80000);
+
+    if( mode == CT_Immediate_MODE )
+    {
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuFastCorners(context, src, sthresh, nonmax ? vx_true_e : vx_false_e,
+                                                       corners, 0));
+    }
+    else
+    {
+        graph = vxCreateGraph(context);
+        ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+        node = vxFastCornersNode(graph, src, sthresh, nonmax ? vx_true_e : vx_false_e, corners, 0);
+        ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+        VX_CALL(vxVerifyGraph(graph));
+        VX_CALL(vxProcessGraph(graph));
+
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+    }
+
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleaseScalar(&sthresh));
+    ct_read_array(corners, (void**)&corners_data, 0, &corners_data_size, 0);
+    VX_CALL(vxReleaseArray(&corners));
+    ncorners = (uint32_t)corners_data_size;
+
+    for( i = 0; i < ncorners; i++ )
+    {
+        vx_keypoint_t* pt = &corners_data[i];
+        int ix, iy;
+        ASSERT( 0.f <= pt->x && pt->x < (float)width &&
+                0.f <= pt->y && pt->y < (float)height );
+        ASSERT(pt->tracking_status == 1);
+        ix = (int)(pt->x + 0.5f);
+        iy = (int)(pt->y + 0.5f);
+        ix = CT_MIN(ix, (int)width-1);
+        iy = CT_MIN(iy, (int)height-1);
+        ASSERT( !nonmax || (0 < pt->strength && pt->strength <= 255) );
+        dst1->data.y[dst1stride*iy + ix] = nonmax ? (uint8_t)(pt->strength + 0.5f) : 1;
+    }
+
+    ct_free_mem(corners_data);
+
+    //ASSERT_EQ_CTIMAGE(dst0, dst1);
+
+    {
+    const uint32_t border = 3;
+    int32_t stride0 = (int32_t)ct_stride_bytes(dst0), stride1 = (int32_t)ct_stride_bytes(dst1);
+    uint32_t x, y;
+    uint32_t missing0 = 0, missing1 = 0;
+
+    for( y = border; y < height - border; y++ )
+    {
+        const uint8_t* ptr0 = dst0->data.y + stride0*y;
+        const uint8_t* ptr1 = dst1->data.y + stride1*y;
+
+        for( x = border; x < width - border; x++ )
+        {
+            if( ptr0[x] > 0 && ptr1[x] == 0 )
+                missing0++;
+            else if( ptr0[x] == 0 && ptr1[x] > 0 )
+                missing1++;
+            else if( nonmax && ptr0[x] > 0 && ptr1[x] > 0 && fabs(log10((double)ptr0[x]/ptr1[x])) >= 1 )
+            {
+                missing0++;
+                missing1++;
+            }
+        }
+    }
+
+    ASSERT( missing0 <= 0.02*ncorners0 );
+    ASSERT( missing1 <= 0.02*ncorners );
+    }
+}
+
+TESTCASE_TESTS(FastCorners, testOnNaturalImages)
diff --git a/test_conformance/test_gaussian3x3.c b/test_conformance/test_gaussian3x3.c
new file mode 100644
index 0000000..ffe3ebe
--- /dev/null
+++ b/test_conformance/test_gaussian3x3.c
@@ -0,0 +1,300 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(Gaussian3x3, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Gaussian3x3, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxGaussian3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+// Generate input to cover these requirements:
+// There should be a image with randomly generated pixel intensities.
+static CT_Image gaussian3x3_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image gaussian3x3_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int32_t gaussian_get(int32_t *values)
+{
+    int32_t res = (values[0] + values[2] + values[6] + values[8]) * 1 +
+                (values[1] + values[3] + values[5] + values[7]) * 2 +
+                (values[4]) * 4;
+    res = res >> 4;
+    return res;
+}
+
+static uint8_t gaussian3x3_calculate(CT_Image src, uint32_t x, uint32_t y)
+{
+    int32_t values[9] = {
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)gaussian_get(values);
+}
+
+static uint8_t gaussian3x3_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)gaussian_get(values);
+}
+
+static uint8_t gaussian3x3_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value)
+    };
+    return (uint8_t)gaussian_get(values);
+}
+
+
+static CT_Image gaussian3x3_create_reference_image(CT_Image src, vx_border_t border)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, src->format);
+
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                if (x >= 1 && y >= 1 && x < src->width - 1 && y < src->height - 1)
+                {
+                    uint8_t res = gaussian3x3_calculate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = gaussian3x3_calculate_replicate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 constant_value = border.constant_value.U32;
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = gaussian3x3_calculate_constant(src, x, y, constant_value);
+                    *dst_data = res;
+                });
+    }
+    else
+    {
+        ASSERT_(return 0, 0);
+    }
+    return dst;
+}
+
+
+static void gaussian3x3_check(CT_Image src, CT_Image dst, vx_border_t border)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = gaussian3x3_create_reference_image(src, border));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst,  1, 1, 1, 1);
+            ct_adjust_roi(dst_ref, 1, 1, 1, 1);
+        }
+    );
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+} Filter_Arg;
+
+#define GAUSSIAN_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, gaussian3x3_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, gaussian3x3_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Gaussian3x3, testGraphProcessing, Filter_Arg,
+    GAUSSIAN_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxGaussian3x3Node(graph, src_image, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(gaussian3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Gaussian3x3, testImmediateProcessing, Filter_Arg,
+    GAUSSIAN_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuGaussian3x3(context, src_image, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(gaussian3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Gaussian3x3, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_gaussianpyramid.c b/test_conformance/test_gaussianpyramid.c
new file mode 100644
index 0000000..d0eb3a4
--- /dev/null
+++ b/test_conformance/test_gaussianpyramid.c
@@ -0,0 +1,658 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <math.h>
+
+#include "shared_functions.h"
+
+#define VX_GAUSSIAN_PYRAMID_TOLERANCE 1
+
+TESTCASE(GaussianPyramid, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(GaussianPyramid, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0;
+    vx_pyramid pyr = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    const vx_size levels     = 4;
+    const vx_float32 scale   = VX_SCALE_PYRAMID_HALF;
+    const vx_uint32 width    = 640;
+    const vx_uint32 height   = 480;
+    const vx_df_image format = VX_DF_IMAGE_U8;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, width, height, format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(pyr = vxCreatePyramid(context, levels, scale, width, height, format), VX_TYPE_PYRAMID);
+
+    {
+        vx_size ch_levels;
+        vx_float32 ch_scale;
+        vx_uint32 ch_width, ch_height;
+        vx_df_image ch_format;
+
+        VX_CALL(vxQueryPyramid(pyr, VX_PYRAMID_LEVELS, &ch_levels, sizeof(ch_levels)));
+        if (levels != ch_levels)
+        {
+            CT_FAIL("check for pyramid attribute VX_PYRAMID_LEVELS failed\n");
+        }
+        VX_CALL(vxQueryPyramid(pyr, VX_PYRAMID_SCALE, &ch_scale, sizeof(ch_scale)));
+        if (scale != ch_scale)
+        {
+            CT_FAIL("check for pyramid attribute VX_PYRAMID_SCALE failed\n");
+        }
+        VX_CALL(vxQueryPyramid(pyr, VX_PYRAMID_WIDTH, &ch_width, sizeof(ch_width)));
+        if (width != ch_width)
+        {
+            CT_FAIL("check for pyramid attribute VX_PYRAMID_WIDTH failed\n");
+        }
+        VX_CALL(vxQueryPyramid(pyr, VX_PYRAMID_HEIGHT, &ch_height, sizeof(ch_height)));
+        if (height != ch_height)
+        {
+            CT_FAIL("check for pyramid attribute VX_PYRAMID_HEIGHT failed\n");
+        }
+        VX_CALL(vxQueryPyramid(pyr, VX_PYRAMID_FORMAT, &ch_format, sizeof(ch_format)));
+        if (format != ch_format)
+        {
+            CT_FAIL("check for pyramid attribute VX_PYRAMID_FORMAT failed\n");
+        }
+    }
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxGaussianPyramidNode(graph, input, pyr), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleasePyramid(&pyr));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(pyr == 0);
+    ASSERT(input == 0);
+}
+
+#define LEVELS_COUNT_MAX    7
+
+static CT_Image gaussian_pyramid_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image gaussian_pyramid_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int32_t gaussian5x5_pyramid_get(int32_t *values)
+{
+    int32_t res = 1 * (values[ 0] + values[ 4] + values[20] + values[24]) +
+                  4 * (values[ 1] + values[ 3] + values[ 5] + values[ 9] + values[15] + values[19] + values[21] + values[23]) +
+                  6 * (values[ 2] + values[10] + values[14] + values[22]) +
+                 16 * (values[ 6] + values[ 8] + values[16] + values[18]) +
+                 24 * (values[ 7] + values[11] + values[13] + values[17]) +
+                 36 * values[12];
+    res = res >> 8;
+    return res;
+}
+
+static uint8_t gaussian5x5_pyramid_calculate(CT_Image src, uint32_t x, uint32_t y)
+{
+    int32_t values[25] = {
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 2, y - 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 2, y - 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 2, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 2, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 2, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 2, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 2, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 2, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 2, y + 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 2),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 2, y + 2),
+    };
+    return (uint8_t)gaussian5x5_pyramid_get(values);
+}
+
+static uint8_t gaussian5x5_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[25] = {
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 2, y - 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 2, y - 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 2, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 2, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 2, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 2, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 2, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 2, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 2, y + 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 2),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 2, y + 2),
+    };
+    return (uint8_t)gaussian5x5_pyramid_get(values);
+}
+
+static uint8_t gaussian5x5_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[25] = {
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 2, y - 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 2, y - 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 2, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 2, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 2, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 2, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 2, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 2, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 2, y + 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 2, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 2, y + 2, constant_value),
+    };
+    return (uint8_t)gaussian5x5_pyramid_get(values);
+}
+
+static vx_int32 gaussian_pyramid_get_pixel(CT_Image input, int x, int y, vx_border_t border, int level)
+{
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        if (x >= 2 + level && y >= 2 + level && x < (int)input->width - 2 - level && y < (int)input->height - 2 - level)
+            return gaussian5x5_pyramid_calculate(input, x, y);
+        else
+            return -1;
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        return gaussian5x5_calculate_replicate(input, x, y);
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        return gaussian5x5_calculate_constant(input, x, y, border.constant_value.U32);
+    }
+    CT_FAIL_(return -1, "NOT IMPLEMENTED");
+}
+
+static void gaussian_pyramid_check_pixel(CT_Image input, CT_Image output, int x, int y, vx_border_t border, int level)
+{
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(output, x, y);
+
+    vx_float64 x_src = (((vx_float64)x + 0.5) * (vx_float64)input->width / (vx_float64)output->width) - 0.5;
+    vx_float64 y_src = (((vx_float64)y + 0.5) * (vx_float64)input->height / (vx_float64)output->height) - 0.5;
+    int x_min = (int)floor(x_src), y_min = (int)floor(y_src);
+    int sx, sy;
+    for (sy = 0; sy <= 1; sy++)
+    {
+        for (sx = 0; sx <= 1; sx++)
+        {
+            vx_int32 candidate = 0;
+            ASSERT_NO_FAILURE_(return, candidate = gaussian_pyramid_get_pixel(input, x_min + sx, y_min + sy, border, level));
+            if (candidate == -1 || abs(candidate - res) <= VX_GAUSSIAN_PYRAMID_TOLERANCE)
+                return;
+        }
+    }
+    CT_FAIL_(return, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+}
+
+static void gaussian_pyramid_check_image(CT_Image input, CT_Image output, vx_border_t border, vx_size level)
+{
+    ASSERT(input && output);
+    if (0 == level)
+    {
+        EXPECT_EQ_CTIMAGE(input, output);
+    }
+    else
+    {
+        CT_FILL_IMAGE_8U(, output,
+                {
+                    ASSERT_NO_FAILURE(gaussian_pyramid_check_pixel(input, output, x, y, border, (int)level));
+                });
+    }
+}
+
+static const vx_float64 c_orbscale[] =
+{
+    1.000000000000000000000000000000e+00,
+    8.408964152537146130583778358414e-01,
+    7.071067811865475727373109293694e-01,
+    5.946035575013605134486738279520e-01,
+    5.000000000000000000000000000000e-01,
+    4.204482076268573065291889179207e-01,
+    3.535533905932737308575042334269e-01,
+    2.973017787506802567243369139760e-01,
+    2.500000000000000000000000000000e-01,
+    2.102241038134286532645944589603e-01,
+    1.767766952966368654287521167134e-01,
+    1.486508893753401283621684569880e-01,
+    1.250000000000000000000000000000e-01,
+    1.051120519067143266322972294802e-01,
+    8.838834764831843271437605835672e-02,
+    7.432544468767006418108422849400e-02,
+    6.250000000000000000000000000000e-02,
+};
+
+
+static void gaussian_pyramid_check(CT_Image input, vx_pyramid pyr, vx_size levels, vx_float32 scale, vx_border_t border)
+{
+    vx_uint32 level = 0;
+    vx_image output_image = 0;
+    CT_Image output_prev = NULL, output_cur = NULL;
+    vx_uint32 ref_width = input->width;
+    vx_uint32 ref_height = input->height;
+
+    ASSERT(input && pyr && (1 < levels) && (level < sizeof(c_orbscale) / sizeof(float) ));
+    ASSERT_VX_OBJECT(output_image = vxGetPyramidLevel(pyr, 0), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(output_prev = ct_image_from_vx_image(output_image));
+    VX_CALL(vxReleaseImage(&output_image));
+    ASSERT(output_image == 0);
+
+    gaussian_pyramid_check_image(input, output_prev, border, 0);
+    if (CT_HasFailure())
+    {
+        printf("=== Input ===\n");
+        ct_dump_image_info(input);
+        printf("=== LEVEL %d ===\n", 0);
+        ct_dump_image_info(output_prev);
+        return;
+    }
+
+    for (level = 1; level < levels; level++)
+    {
+        ASSERT_VX_OBJECT(output_image = vxGetPyramidLevel(pyr, level), VX_TYPE_IMAGE);
+        ASSERT_NO_FAILURE(output_cur = ct_image_from_vx_image(output_image));
+        VX_CALL(vxReleaseImage(&output_image));
+        ASSERT(output_image == 0);
+
+        if (VX_SCALE_PYRAMID_ORB == scale)
+        {
+            vx_float64 orb_scale = c_orbscale[level];
+            if ( (output_cur->width  != ceil(orb_scale * ref_width)) ||
+                 (output_cur->height != ceil(orb_scale * ref_height)))
+            {
+                CT_FAIL_(return, "Check failed for size of level: %d", level);
+            }
+        }
+        else
+        {
+            if ( (output_cur->width != ceil(output_prev->width * scale)) ||
+                 (output_cur->height != ceil(output_prev->height * scale)))
+            {
+                CT_FAIL_(return, "Check failed for size of level: %d", level);
+            }
+        }
+
+        gaussian_pyramid_check_image(output_prev, output_cur, border, level);
+        if (CT_HasFailure())
+        {
+            printf("=== Input ===\n");
+            ct_dump_image_info(output_prev);
+            printf("=== LEVEL %d ===\n", level);
+            ct_dump_image_info(output_cur);
+            return;
+        }
+
+        output_prev = output_cur;
+    }
+}
+
+
+
+static vx_uint8 gaussian_pyramid_reference_get_pixel(CT_Image prevLevel, int dst_width, int dst_height, int x, int y, vx_border_t border, int level)
+{
+    vx_int32 candidate = -1;
+    vx_float64 x_src = (((vx_float64)x + 0.5) * (vx_float64)prevLevel->width / (vx_float64)dst_width) - 0.5;
+    vx_float64 y_src = (((vx_float64)y + 0.5) * (vx_float64)prevLevel->height / (vx_float64)dst_height) - 0.5;
+    int x_int = (int)floor(x_src), y_int = (int)floor(y_src);
+    vx_float64 x_f = x_src - x_int, y_f = y_src - y_int;
+    if (x_f >= 0.5)
+        x_int++;
+    if (y_f >= 0.5)
+        y_int++;
+    if (x_int >= (int)prevLevel->width)
+        x_int = prevLevel->width - 1;
+    if (y_int >= (int)prevLevel->height)
+        y_int = prevLevel->height - 1;
+    ASSERT_NO_FAILURE_(return 0, candidate = gaussian_pyramid_get_pixel(prevLevel, x_int, y_int, border, level));
+    if (candidate == -1)
+        return 0;
+    return CT_CAST_U8(candidate);
+}
+
+static CT_Image gaussian_pyramid_create_reference_image(CT_Image input, CT_Image prevLevel, vx_border_t border, vx_float32 scale, vx_size target_level)
+{
+    vx_uint32 level = 0;
+    CT_Image dst;
+    vx_uint32 ref_width = input->width;
+    vx_uint32 ref_height = input->height;
+    vx_uint32 dst_width = input->width;
+    vx_uint32 dst_height = input->height;
+
+    ASSERT_(return NULL, scale < 1.0);
+    ASSERT_(return NULL, input && (level < (sizeof(c_orbscale) / sizeof(float))));
+
+    ASSERT_(return NULL, input->format == VX_DF_IMAGE_U8);
+
+    if (VX_SCALE_PYRAMID_HALF == scale)
+    {
+        dst_width = ref_width;
+        dst_height = ref_height;
+        for (level = 1; level <= target_level; level++)
+        {
+            dst_width = (vx_uint32)ceil(dst_width * scale);
+            dst_height = (vx_uint32)ceil(dst_height * scale);
+        }
+    }
+    else // if (VX_SCALE_PYRAMID_ORB == scale)
+    {
+        vx_float64 orb_scale = c_orbscale[target_level];
+        dst_width = (vx_uint32)ceil(orb_scale * ref_width);
+        dst_height = (vx_uint32)ceil(orb_scale * ref_height);
+    }
+
+    dst = ct_allocate_image(dst_width, dst_height, input->format);
+
+    if (target_level == 0)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = *CT_IMAGE_DATA_PTR_8U(input, x, y);
+                    *dst_data = res;
+                });
+    }
+    else
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = gaussian_pyramid_reference_get_pixel(prevLevel, dst_width, dst_height, x, y, border, (int)target_level);
+                    *dst_data = res;
+                });
+    }
+
+    return dst;
+}
+
+void gaussian_pyramid_fill_reference(CT_Image input, vx_pyramid pyr, vx_size levels, vx_float32 scale, vx_border_t border)
+{
+    vx_uint32 level = 0;
+    vx_image  output_image = 0;
+    CT_Image  output_prev  = NULL;
+    CT_Image  output_cur   = NULL;
+    vx_uint32 ref_width    = input->width;
+    vx_uint32 ref_height   = input->height;
+
+    ASSERT(input && pyr && (levels < sizeof(c_orbscale) / sizeof(float) ));
+    ASSERT_VX_OBJECT(output_image = vxGetPyramidLevel(pyr, 0), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(output_prev = ct_image_from_vx_image(output_image));
+
+    CT_FILL_IMAGE_8U(return, output_prev,
+            {
+                uint8_t res = *CT_IMAGE_DATA_PTR_8U(input, x, y);
+                *dst_data = res;
+            });
+    ASSERT_NO_FAILURE(ct_image_copyto_vx_image(output_image, output_prev));
+
+    VX_CALL(vxReleaseImage(&output_image));
+    ASSERT(output_image == 0);
+
+    for (level = 1; level < levels; level++)
+    {
+        ASSERT_VX_OBJECT(output_image = vxGetPyramidLevel(pyr, level), VX_TYPE_IMAGE);
+        ASSERT_NO_FAILURE(output_cur = ct_image_from_vx_image(output_image));
+
+        if (VX_SCALE_PYRAMID_ORB == scale)
+        {
+            vx_float64 orb_scale = c_orbscale[level];
+            if ( (output_cur->width  != ceil(ref_width  * orb_scale)) ||
+                 (output_cur->height != ceil(ref_height * orb_scale)))
+            {
+                CT_FAIL_(return, "Check failed for size of level: %d", level);
+            }
+        }
+        else
+        {
+            if ( (output_cur->width  != ceil(output_prev->width  * scale)) ||
+                 (output_cur->height != ceil(output_prev->height * scale)))
+            {
+                CT_FAIL_(return, "Check failed for size of level: %d", level);
+            }
+        }
+
+        ASSERT_NO_FAILURE(output_cur = gaussian_pyramid_create_reference_image(input, output_prev, border, scale, level));
+        ASSERT_NO_FAILURE(ct_image_copyto_vx_image(output_image, output_cur));
+
+        VX_CALL(vxReleaseImage(&output_image));
+        ASSERT(output_image == 0);
+
+        output_prev = output_cur;
+    }
+}
+
+
+static vx_size gaussian_pyramid_calc_max_levels_count(int width, int height, vx_float32 scale)
+{
+    vx_size level = 1;
+    while ((16 <= width) && (16 <= height) && level < LEVELS_COUNT_MAX)
+    {
+        level++;
+        width = (int)ceil((vx_float64)width * scale);
+        height = (int)ceil((vx_float64)height * scale);
+    }
+    return level;
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+    vx_float32 scale;
+} Arg;
+
+#define ADD_VX_SCALE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_SCALE_PYRAMID_HALF", __VA_ARGS__, VX_SCALE_PYRAMID_HALF)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_SCALE_PYRAMID_ORB", __VA_ARGS__, VX_SCALE_PYRAMID_ORB))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ADD_VX_SCALE, ARG, gaussian_pyramid_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ADD_VX_SCALE, ARG, gaussian_pyramid_read_image, "lena.bmp")
+
+TEST_WITH_ARG(GaussianPyramid, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_size levels;
+
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0;
+    vx_pyramid pyr = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image input = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT(arg_->scale < 1.0);
+
+    ASSERT_NO_FAILURE(input = arg_->generator( arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = gaussian_pyramid_calc_max_levels_count(input->width, input->height, arg_->scale);
+
+    ASSERT_VX_OBJECT(pyr = vxCreatePyramid(context, levels, arg_->scale, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxGaussianPyramidNode(graph, input_image, pyr), VX_TYPE_NODE);
+
+    if (border.mode != VX_BORDER_UNDEFINED)
+        VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    CT_ASSERT_NO_FAILURE_(, gaussian_pyramid_check(input, pyr, levels, arg_->scale, arg_->border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleasePyramid(&pyr));
+    VX_CALL(vxReleaseImage(&input_image));
+    ASSERT(pyr == 0);
+    ASSERT(input_image == 0);
+}
+
+
+TEST_WITH_ARG(GaussianPyramid, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_size levels;
+
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0;
+    vx_pyramid pyr = 0;
+
+    CT_Image input = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator( arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = gaussian_pyramid_calc_max_levels_count(input->width, input->height, arg_->scale);
+
+    ASSERT_VX_OBJECT(pyr = vxCreatePyramid(context, levels, arg_->scale, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuGaussianPyramid(context, input_image, pyr));
+
+    CT_ASSERT_NO_FAILURE_(, gaussian_pyramid_check(input, pyr, levels, arg_->scale, arg_->border));
+
+    VX_CALL(vxReleasePyramid(&pyr));
+    VX_CALL(vxReleaseImage(&input_image));
+    ASSERT(pyr == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(GaussianPyramid, testReference, Arg,
+    PARAMETERS
+)
+{
+    vx_size levels;
+
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0;
+    vx_pyramid pyr = 0;
+
+    CT_Image input = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator( arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = gaussian_pyramid_calc_max_levels_count(input->width, input->height, arg_->scale);
+
+    ASSERT_VX_OBJECT(pyr = vxCreatePyramid(context, levels, arg_->scale, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+
+    ASSERT_NO_FAILURE(gaussian_pyramid_fill_reference(input, pyr, levels, arg_->scale, border));
+
+    CT_ASSERT_NO_FAILURE_(, gaussian_pyramid_check(input, pyr, levels, arg_->scale, arg_->border));
+
+    VX_CALL(vxReleasePyramid(&pyr));
+    VX_CALL(vxReleaseImage(&input_image));
+    ASSERT(pyr == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(GaussianPyramid,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing,
+        testReference
+)
+
+
+
diff --git a/test_conformance/test_graph.c b/test_conformance/test_graph.c
new file mode 100644
index 0000000..10f812b
--- /dev/null
+++ b/test_conformance/test_graph.c
@@ -0,0 +1,2362 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(Graph, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(Graph, testTwoNodes)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+TEST(Graph, testVirtualImage)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(interm_image = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+#ifndef dimof
+#  define dimof(arr) (sizeof(arr)/sizeof((arr)[0]))
+#endif
+
+// example from specification wrapped into asserts
+static void testCornersGraphFactory(vx_context context, vx_graph* graph_out)
+{
+    vx_uint32 i;
+    vx_float32 strength_thresh = 10000.0f;
+    vx_float32 r = 1.5f;
+    vx_float32 sensitivity = 0.14f;
+    vx_int32 window_size = 3;
+    vx_int32 block_size = 3;
+    vx_graph graph = 0;
+    vx_enum channel = VX_CHANNEL_Y;
+
+    *graph_out = NULL;
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    // if (vxGetStatus((vx_reference)graph) == VX_SUCCESS)
+    {
+        vx_image virts[] = {
+            vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT),
+            vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT)
+        };
+
+        vx_kernel kernels[] = {
+            vxGetKernelByEnum(context, VX_KERNEL_CHANNEL_EXTRACT),
+            vxGetKernelByEnum(context, VX_KERNEL_MEDIAN_3x3),
+            vxGetKernelByEnum(context, VX_KERNEL_HARRIS_CORNERS)
+        };
+
+        vx_node nodes[dimof(kernels)] = {
+            vxCreateGenericNode(graph, kernels[0]),
+            vxCreateGenericNode(graph, kernels[1]),
+            vxCreateGenericNode(graph, kernels[2])
+        };
+
+        vx_scalar scalars[] = {
+            vxCreateScalar(context, VX_TYPE_ENUM, &channel),
+            vxCreateScalar(context, VX_TYPE_FLOAT32, &strength_thresh),
+            vxCreateScalar(context, VX_TYPE_FLOAT32, &r),
+            vxCreateScalar(context, VX_TYPE_FLOAT32, &sensitivity),
+            vxCreateScalar(context, VX_TYPE_INT32, &window_size),
+            vxCreateScalar(context, VX_TYPE_INT32, &block_size)
+        };
+
+        vx_parameter parameters[] = {
+            vxGetParameterByIndex(nodes[0], 0),
+            vxGetParameterByIndex(nodes[2], 6)
+        };
+
+        for (i = 0; i < dimof(virts); i++)
+            ASSERT_VX_OBJECT(virts[i], VX_TYPE_IMAGE);
+        for (i = 0; i < dimof(kernels); i++)
+            ASSERT_VX_OBJECT(kernels[i], VX_TYPE_KERNEL);
+        for (i = 0; i < dimof(nodes); i++)
+            ASSERT_VX_OBJECT(nodes[i], VX_TYPE_NODE);
+        for (i = 0; i < dimof(scalars); i++)
+            ASSERT_VX_OBJECT(scalars[i], VX_TYPE_SCALAR);
+        for (i = 0; i < dimof(parameters); i++)
+            ASSERT_VX_OBJECT(parameters[i], VX_TYPE_PARAMETER);
+
+        // Channel Extract
+        VX_CALL(vxAddParameterToGraph(graph, parameters[0]));
+        VX_CALL(vxSetParameterByIndex(nodes[0], 1, (vx_reference)scalars[0]));
+        VX_CALL(vxSetParameterByIndex(nodes[0], 2, (vx_reference)virts[0]));
+        // Median Filter
+        VX_CALL(vxSetParameterByIndex(nodes[1], 0, (vx_reference)virts[0]));
+        VX_CALL(vxSetParameterByIndex(nodes[1], 1, (vx_reference)virts[1]));
+        // Harris Corners
+        VX_CALL(vxSetParameterByIndex(nodes[2], 0, (vx_reference)virts[1]));
+        VX_CALL(vxSetParameterByIndex(nodes[2], 1, (vx_reference)scalars[1]));
+        VX_CALL(vxSetParameterByIndex(nodes[2], 2, (vx_reference)scalars[2]));
+        VX_CALL(vxSetParameterByIndex(nodes[2], 3, (vx_reference)scalars[3]));
+        VX_CALL(vxSetParameterByIndex(nodes[2], 4, (vx_reference)scalars[4]));
+        VX_CALL(vxSetParameterByIndex(nodes[2], 5, (vx_reference)scalars[5]));
+        VX_CALL(vxAddParameterToGraph(graph, parameters[1]));
+
+        for (i = 0; i < dimof(scalars); i++)
+        {
+            VX_CALL(vxReleaseScalar(&scalars[i]));
+            ASSERT(scalars[i] == NULL);
+        }
+        for (i = 0; i < dimof(virts); i++)
+        {
+            VX_CALL(vxReleaseImage(&virts[i]));
+            ASSERT(virts[i] == NULL);
+        }
+        for (i = 0; i < dimof(kernels); i++)
+        {
+            VX_CALL(vxReleaseKernel(&kernels[i]));
+            ASSERT(kernels[i] == NULL);
+        }
+        for (i = 0; i < dimof(nodes); i++)
+        {
+            VX_CALL(vxReleaseNode(&nodes[i]));
+            ASSERT(nodes[i] == NULL);
+        }
+        for (i = 0; i < dimof(parameters); i++)
+        {
+            VX_CALL(vxReleaseParameter(&parameters[i]));
+            ASSERT(parameters[i] == NULL);
+        }
+    }
+
+    *graph_out = graph;
+}
+
+TEST(Graph, testGraphFactory)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph   graph;
+    vx_image   source;
+    vx_array   points;
+    vx_parameter points_param;
+
+    ASSERT_NO_FAILURE(testCornersGraphFactory(context, &graph));
+
+    ASSERT_VX_OBJECT(source = vxCreateImage(context, 640, 480, VX_DF_IMAGE_YUV4), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(points = vxCreateArray(context, VX_TYPE_KEYPOINT, 100), VX_TYPE_ARRAY);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(source, &CT()->seed_));
+
+    VX_CALL(vxSetGraphParameterByIndex(graph, 0, (vx_reference)source));
+
+    ASSERT_VX_OBJECT(points_param = vxGetGraphParameterByIndex(graph, 1), VX_TYPE_PARAMETER);
+    VX_CALL(vxSetParameterByReference(points_param, (vx_reference)points));
+
+    VX_CALL(vxReleaseParameter(&points_param));
+    ASSERT(points_param == NULL);
+    VX_CALL(vxReleaseImage(&source));
+    ASSERT(source == NULL);
+
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseArray(&points));
+    ASSERT(points == NULL);
+
+    VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(graph == NULL);
+}
+
+#define VX_KERNEL_CONFORMANCE_TEST_TAKE10_NAME "org.khronos.openvx.test.array_take_10"
+
+static vx_status VX_CALLBACK take10_ParameterValidator(vx_node node, const vx_reference parameters[], vx_uint32 num, vx_meta_format metas[])
+{
+    vx_size capacity = 10;
+    vx_enum type = VX_TYPE_KEYPOINT;
+
+    // are we really required to set these attributes???
+    VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(metas[1], VX_ARRAY_CAPACITY, &capacity, sizeof(capacity)));
+    VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(metas[1], VX_ARRAY_ITEMTYPE, &type, sizeof(type)));
+
+    return VX_SUCCESS;
+}
+
+static vx_status VX_CALLBACK take10_Kernel(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    vx_array input, output;
+    vx_size len = 0;
+    vx_size stride = 0;
+    void* data = 0;
+    vx_map_id map_id;
+    ASSERT_(return VX_FAILURE, num == 2);
+    ASSERT_VX_OBJECT_(return VX_FAILURE, input  = (vx_array)parameters[0], VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT_(return VX_FAILURE, output = (vx_array)parameters[1], VX_TYPE_ARRAY);
+
+    VX_CALL_(return VX_FAILURE, vxTruncateArray(output, 0));
+    VX_CALL_(return VX_FAILURE, vxQueryArray(input, VX_ARRAY_NUMITEMS, &len, sizeof(len)));
+
+    if (len > 10) len = 10;
+
+    VX_CALL_(return VX_FAILURE, vxMapArrayRange(input,  0, len, &map_id, &stride, &data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+    VX_CALL_(return VX_FAILURE, vxAddArrayItems(output, len, data, stride));
+    VX_CALL_(return VX_FAILURE, vxUnmapArrayRange(input, map_id));
+
+    return VX_SUCCESS;
+}
+
+static void take10_node(vx_graph graph, vx_array in, vx_array out)
+{
+    vx_kernel kernel = 0;
+    vx_node node = 0;
+    vx_context context = vxGetContext((vx_reference)graph);
+    vx_enum take10_enumId = 0u;
+
+    ASSERT_VX_OBJECT(context, VX_TYPE_CONTEXT);
+
+    VX_CALL(vxAllocateUserKernelId(context, &take10_enumId));
+    ASSERT_VX_OBJECT(kernel = vxAddUserKernel(
+            context,
+            VX_KERNEL_CONFORMANCE_TEST_TAKE10_NAME,
+            take10_enumId,
+            take10_Kernel,
+            2,
+            take10_ParameterValidator,
+            NULL,
+            NULL), VX_TYPE_KERNEL);
+
+    VX_CALL(vxAddParameterToKernel(kernel, 0, VX_INPUT,  VX_TYPE_ARRAY, VX_PARAMETER_STATE_REQUIRED));
+    VX_CALL(vxAddParameterToKernel(kernel, 1, VX_OUTPUT, VX_TYPE_ARRAY, VX_PARAMETER_STATE_REQUIRED));
+    VX_CALL(vxFinalizeKernel(kernel));
+
+    ASSERT_VX_OBJECT(node = vxCreateGenericNode(graph, kernel), VX_TYPE_NODE);
+    VX_CALL(vxSetParameterByIndex(node, 0, (vx_reference)in));
+    VX_CALL(vxSetParameterByIndex(node, 1, (vx_reference)out));
+
+    VX_CALL(vxReleaseNode(&node));
+    ASSERT(node == 0);
+
+    VX_CALL(vxReleaseKernel(&kernel));
+    ASSERT(kernel == 0);
+}
+
+TEST(Graph, testVirtualArray)
+{
+    vx_bool    use_estimations;
+    vx_uint32  num_iter;
+    vx_float32 threshold_f;
+    vx_float32 eps;
+    vx_scalar  fast_thresh;
+    vx_scalar  flow_eps;
+    vx_scalar  flow_num_iter;
+    vx_scalar  flow_use_estimations;
+    vx_size    window;
+    vx_array   corners;
+    vx_array   new_corners, corners10;
+    vx_image   frame0 = 0;
+    vx_image   frame1 = 0;
+    vx_pyramid p0;
+    vx_pyramid p1;
+    vx_node    n1;
+    vx_node    n2;
+    vx_node    n3;
+    vx_node    n4;
+    vx_graph   graph;
+    vx_context context;
+    vx_kernel  kernel;
+    CT_Image   src0 = 0, src1 = 0;
+    vx_scalar  scalar_fastCorners = 0;
+    vx_size    fastCorners = 0;
+
+    ASSERT_VX_OBJECT(context = context_->vx_context_, VX_TYPE_CONTEXT);
+
+    ASSERT_NO_FAILURE(src0 = ct_read_image("optflow_00.bmp", 1));
+    ASSERT_NO_FAILURE(src1 = ct_read_image("optflow_01.bmp", 1));
+
+    ASSERT_VX_OBJECT(frame0 = ct_image_to_vx_image(src0, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(frame1 = ct_image_to_vx_image(src1, context), VX_TYPE_IMAGE);
+
+    threshold_f = 80;
+    eps = 0.01f;
+    num_iter = 10;
+    use_estimations = vx_false_e;
+    window = 3;
+
+    ASSERT_VX_OBJECT(fast_thresh = vxCreateScalar(context, VX_TYPE_FLOAT32, &threshold_f), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(flow_eps = vxCreateScalar(context, VX_TYPE_FLOAT32, &eps), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(flow_num_iter = vxCreateScalar(context, VX_TYPE_UINT32, &num_iter), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(flow_use_estimations = vxCreateScalar(context, VX_TYPE_BOOL, &use_estimations), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    // Don't use zero capacity here
+    ASSERT_VX_OBJECT(corners = vxCreateVirtualArray(graph, 0, 100), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(new_corners = vxCreateVirtualArray(graph, 0, 0), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(corners10   = vxCreateArray(context, VX_TYPE_KEYPOINT, 10), VX_TYPE_ARRAY);
+
+    ASSERT_VX_OBJECT(scalar_fastCorners = vxCreateScalar(context, VX_TYPE_SIZE, &fastCorners), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(n1 = vxFastCornersNode(graph, frame0, fast_thresh, vx_true_e, corners, scalar_fastCorners), VX_TYPE_NODE);
+
+    ASSERT_VX_OBJECT(p0 = vxCreateVirtualPyramid(graph, 4, VX_SCALE_PYRAMID_HALF, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(p1 = vxCreateVirtualPyramid(graph, 4, VX_SCALE_PYRAMID_HALF, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_PYRAMID);
+
+    ASSERT_VX_OBJECT(n2 = vxGaussianPyramidNode(graph, frame0, p0), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(n3 = vxGaussianPyramidNode(graph, frame1, p1), VX_TYPE_NODE);
+
+    ASSERT_VX_OBJECT(n4 = vxOpticalFlowPyrLKNode(graph, p0, p1, corners, corners, new_corners, VX_TERM_CRITERIA_BOTH, flow_eps, flow_num_iter, flow_use_estimations, window), VX_TYPE_NODE);
+
+    take10_node(graph, new_corners, corners10);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxCopyScalar(scalar_fastCorners, &fastCorners, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    ASSERT(fastCorners > 0);
+
+    VX_CALL(vxReleaseScalar(&scalar_fastCorners));
+    VX_CALL(vxReleaseScalar(&fast_thresh));
+    VX_CALL(vxReleaseScalar(&flow_eps));
+    VX_CALL(vxReleaseScalar(&flow_num_iter));
+    VX_CALL(vxReleaseScalar(&flow_use_estimations));
+    VX_CALL(vxReleaseArray(&corners));
+    VX_CALL(vxReleaseArray(&new_corners));
+    VX_CALL(vxReleaseArray(&corners10));
+    VX_CALL(vxReleasePyramid(&p0));
+    VX_CALL(vxReleasePyramid(&p1));
+    VX_CALL(vxReleaseImage(&frame0));
+    VX_CALL(vxReleaseImage(&frame1));
+    VX_CALL(vxReleaseNode(&n1));
+    VX_CALL(vxReleaseNode(&n2));
+    VX_CALL(vxReleaseNode(&n3));
+    VX_CALL(vxReleaseNode(&n4));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT_VX_OBJECT(kernel = vxGetKernelByName(context, VX_KERNEL_CONFORMANCE_TEST_TAKE10_NAME), VX_TYPE_KERNEL);
+    VX_CALL(vxRemoveKernel(kernel));
+}
+
+
+TEST(Graph, testNodeRemove)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    vx_uint32 num_nodes = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_NUMNODES, &num_nodes, sizeof(num_nodes)));
+    ASSERT(num_nodes == 2);
+
+    VX_CALL(vxRemoveNode(&node2));
+    ASSERT(node2 == 0);
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_NUMNODES, &num_nodes, sizeof(num_nodes)));
+    ASSERT(num_nodes == 1);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+TEST(Graph, testNodeFromEnum)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_kernel kernel = 0;
+    vx_node node = 0;
+    vx_uint32 num_params = 0;
+    vx_parameter parameter = 0;
+    vx_image p_image = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(kernel = vxGetKernelByEnum(context, VX_KERNEL_BOX_3x3), VX_TYPE_KERNEL);
+
+    VX_CALL(vxQueryKernel(kernel, VX_KERNEL_PARAMETERS, &num_params, sizeof(num_params)));
+    ASSERT_EQ_INT(2, num_params);
+
+    ASSERT_VX_OBJECT(node = vxCreateGenericNode(graph, kernel), VX_TYPE_NODE);
+
+    VX_CALL(vxSetParameterByIndex(node, 0, (vx_reference)src_image));
+
+    ASSERT_VX_OBJECT(parameter = vxGetParameterByIndex(node, 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(parameter, VX_PARAMETER_REF, &p_image, sizeof(p_image)));
+    ASSERT(p_image == src_image);
+    VX_CALL(vxReleaseImage(&p_image));
+    VX_CALL(vxReleaseParameter(&parameter));
+
+    {
+        /* check set node parameter by reference */
+        ASSERT_VX_OBJECT(parameter = vxGetParameterByIndex(node, 1), VX_TYPE_PARAMETER);
+
+        /* parameter was not set yet */
+        VX_CALL(vxQueryParameter(parameter, VX_PARAMETER_REF, &p_image, sizeof(p_image)));
+        ASSERT(p_image != dst_image);
+        VX_CALL(vxSetParameterByReference(parameter, (vx_reference)dst_image));
+        /* expect parameter is set to know value */
+        VX_CALL(vxQueryParameter(parameter, VX_PARAMETER_REF, &p_image, sizeof(p_image)));
+        ASSERT(p_image == dst_image);
+    }
+
+    VX_CALL(vxReleaseImage(&p_image));
+    VX_CALL(vxReleaseParameter(&parameter));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseKernel(&kernel));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(kernel == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(src_image == 0);
+}
+
+TEST(Graph, testTwoNodesWithSameDst)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src1_image = 0, src2_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src1_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src1_image, dst_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxMedian3x3Node(graph, src2_image, dst_image), VX_TYPE_NODE);
+
+    EXPECT_NE_VX_STATUS(vxVerifyGraph(graph), VX_SUCCESS);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src1_image));
+    VX_CALL(vxReleaseImage(&src2_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(src1_image == 0); ASSERT(src2_image == 0);
+}
+
+TEST(Graph, testCycle)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxMedian3x3Node(graph, dst_image, src_image), VX_TYPE_NODE);
+
+    EXPECT_NE_VX_STATUS(vxVerifyGraph(graph), VX_SUCCESS);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(src_image == 0);
+}
+
+TEST(Graph, testCycle2)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src1_image = 0, src2_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0, node3 = 0;
+
+    ASSERT_VX_OBJECT(src1_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxAddNode(graph, src1_image, src2_image, VX_CONVERT_POLICY_SATURATE, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxBox3x3Node(graph, interm_image, dst_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node3 = vxMedian3x3Node(graph, dst_image, src2_image), VX_TYPE_NODE);
+
+    EXPECT_NE_VX_STATUS(vxVerifyGraph(graph), VX_SUCCESS);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseNode(&node3));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src1_image));
+    VX_CALL(vxReleaseImage(&src2_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0); ASSERT(node3 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(src1_image == 0); ASSERT(src2_image == 0); ASSERT(interm_image == 0);
+}
+
+
+TEST(Graph, testMultipleRun)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    CT_Image res1 = 0, res2 = 0;
+    vx_border_t border = { VX_BORDER_UNDEFINED };
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(ct_fill_image_random(src_image, &CT()->seed_));
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    VX_CALL(vxSetNodeAttribute(node1, VX_NODE_BORDER, &border, sizeof(border)));
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+    ASSERT_NO_FAILURE(res1 = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(dst_image, &CT()->seed_));
+
+    VX_CALL(vxProcessGraph(graph));
+    ASSERT_NO_FAILURE(res2 = ct_image_from_vx_image(dst_image));
+
+    ct_adjust_roi(res1, 1, 1, 1, 1);
+    ct_adjust_roi(res2, 1, 1, 1, 1);
+
+    ASSERT_EQ_CTIMAGE(res1, res2);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+TEST(Graph, testMultipleRunAsync)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    CT_Image res1 = 0, res2 = 0;
+    vx_border_t border = { VX_BORDER_UNDEFINED };
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(ct_fill_image_random(src_image, &CT()->seed_));
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    VX_CALL(vxSetNodeAttribute(node1, VX_NODE_BORDER, &border, sizeof(border)));
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxScheduleGraph(graph));
+    VX_CALL(vxWaitGraph(graph));
+    ASSERT_NO_FAILURE(res1 = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(dst_image, &CT()->seed_));
+
+    VX_CALL(vxScheduleGraph(graph));
+    VX_CALL(vxWaitGraph(graph));
+    ASSERT_NO_FAILURE(res2 = ct_image_from_vx_image(dst_image));
+
+    ct_adjust_roi(res1, 1, 1, 1, 1);
+    ct_adjust_roi(res2, 1, 1, 1, 1);
+
+    ASSERT_EQ_CTIMAGE(res1, res2);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+TEST(Graph, testAsyncWaitWithoutSchedule)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+TEST(Graph, testNodePerformance)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    vx_perf_t perf;
+    vx_perf_t perf2;
+
+    VX_CALL(vxDirective((vx_reference)context, VX_DIRECTIVE_ENABLE_PERFORMANCE));
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxQueryNode(node1, VX_NODE_PERFORMANCE, &perf, sizeof(perf)));
+
+    ASSERT(perf.num == 1);
+    ASSERT(perf.beg > 0);
+    ASSERT(perf.min > 0);
+
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxQueryNode(node1, VX_NODE_PERFORMANCE, &perf2, sizeof(perf)));
+
+    ASSERT(perf2.num == 2);
+    ASSERT(perf2.beg > perf.end);
+    ASSERT(perf2.min > 0);
+    ASSERT(perf2.sum > perf.sum);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+TEST(Graph, testGraphPerformance)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    vx_perf_t perf;
+    vx_perf_t perf2;
+
+    VX_CALL(vxDirective((vx_reference)context, VX_DIRECTIVE_ENABLE_PERFORMANCE));
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_PERFORMANCE, &perf, sizeof(perf)));
+
+    ASSERT(perf.num == 1);
+    ASSERT(perf.beg > 0);
+    ASSERT(perf.min > 0);
+
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_PERFORMANCE, &perf2, sizeof(perf)));
+
+    ASSERT(perf2.num == 2);
+    ASSERT(perf2.beg >= perf.end);
+    ASSERT(perf2.min > 0);
+    ASSERT(perf2.sum >= perf.sum);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+typedef struct
+{
+    char* name;
+    vx_enum kernel_id;
+} kernel_name_arg;
+
+TEST_WITH_ARG(Graph, testKernelName, kernel_name_arg,
+    ARG("org.khronos.openvx.color_convert",         VX_KERNEL_COLOR_CONVERT),
+    ARG("org.khronos.openvx.channel_extract",       VX_KERNEL_CHANNEL_EXTRACT),
+    ARG("org.khronos.openvx.channel_combine",       VX_KERNEL_CHANNEL_COMBINE),
+    ARG("org.khronos.openvx.sobel_3x3",             VX_KERNEL_SOBEL_3x3),
+    ARG("org.khronos.openvx.magnitude",             VX_KERNEL_MAGNITUDE),
+    ARG("org.khronos.openvx.phase",                 VX_KERNEL_PHASE),
+    ARG("org.khronos.openvx.scale_image",           VX_KERNEL_SCALE_IMAGE),
+    ARG("org.khronos.openvx.table_lookup",          VX_KERNEL_TABLE_LOOKUP),
+    ARG("org.khronos.openvx.histogram",             VX_KERNEL_HISTOGRAM),
+    ARG("org.khronos.openvx.equalize_histogram",    VX_KERNEL_EQUALIZE_HISTOGRAM),
+    ARG("org.khronos.openvx.absdiff",               VX_KERNEL_ABSDIFF),
+    ARG("org.khronos.openvx.mean_stddev",           VX_KERNEL_MEAN_STDDEV),
+    ARG("org.khronos.openvx.threshold",             VX_KERNEL_THRESHOLD),
+    ARG("org.khronos.openvx.integral_image",        VX_KERNEL_INTEGRAL_IMAGE),
+    ARG("org.khronos.openvx.dilate_3x3",            VX_KERNEL_DILATE_3x3),
+    ARG("org.khronos.openvx.erode_3x3",             VX_KERNEL_ERODE_3x3),
+    ARG("org.khronos.openvx.median_3x3",            VX_KERNEL_MEDIAN_3x3),
+    ARG("org.khronos.openvx.box_3x3",               VX_KERNEL_BOX_3x3),
+    ARG("org.khronos.openvx.gaussian_3x3",          VX_KERNEL_GAUSSIAN_3x3),
+    ARG("org.khronos.openvx.custom_convolution",    VX_KERNEL_CUSTOM_CONVOLUTION),
+    ARG("org.khronos.openvx.gaussian_pyramid",      VX_KERNEL_GAUSSIAN_PYRAMID),
+    ARG("org.khronos.openvx.accumulate",            VX_KERNEL_ACCUMULATE),
+    ARG("org.khronos.openvx.accumulate_weighted",   VX_KERNEL_ACCUMULATE_WEIGHTED),
+    ARG("org.khronos.openvx.accumulate_square",     VX_KERNEL_ACCUMULATE_SQUARE),
+    ARG("org.khronos.openvx.minmaxloc",             VX_KERNEL_MINMAXLOC),
+    ARG("org.khronos.openvx.convertdepth",          VX_KERNEL_CONVERTDEPTH),
+    ARG("org.khronos.openvx.canny_edge_detector",   VX_KERNEL_CANNY_EDGE_DETECTOR),
+    ARG("org.khronos.openvx.and",                   VX_KERNEL_AND),
+    ARG("org.khronos.openvx.or",                    VX_KERNEL_OR),
+    ARG("org.khronos.openvx.xor",                   VX_KERNEL_XOR),
+    ARG("org.khronos.openvx.not",                   VX_KERNEL_NOT),
+    ARG("org.khronos.openvx.multiply",              VX_KERNEL_MULTIPLY),
+    ARG("org.khronos.openvx.add",                   VX_KERNEL_ADD),
+    ARG("org.khronos.openvx.subtract",              VX_KERNEL_SUBTRACT),
+    ARG("org.khronos.openvx.warp_affine",           VX_KERNEL_WARP_AFFINE),
+    ARG("org.khronos.openvx.warp_perspective",      VX_KERNEL_WARP_PERSPECTIVE),
+    ARG("org.khronos.openvx.harris_corners",        VX_KERNEL_HARRIS_CORNERS),
+    ARG("org.khronos.openvx.fast_corners",          VX_KERNEL_FAST_CORNERS),
+    ARG("org.khronos.openvx.optical_flow_pyr_lk",   VX_KERNEL_OPTICAL_FLOW_PYR_LK),
+    ARG("org.khronos.openvx.remap",                 VX_KERNEL_REMAP),
+    ARG("org.khronos.openvx.halfscale_gaussian",    VX_KERNEL_HALFSCALE_GAUSSIAN),
+    ARG("org.khronos.openvx.min",                   VX_KERNEL_MIN),
+    ARG("org.khronos.openvx.max",                   VX_KERNEL_MAX),
+    )
+{
+    vx_context context = context_->vx_context_;
+    vx_kernel kernel   = 0;
+    vx_enum   kernel_id = 0;
+
+    EXPECT_VX_OBJECT(kernel = vxGetKernelByName(context, arg_->name), VX_TYPE_KERNEL);
+
+    if (CT_HasFailure())
+    {
+        vx_char name[VX_MAX_KERNEL_NAME] = {0};
+
+        ASSERT_VX_OBJECT(kernel = vxGetKernelByEnum(context, arg_->kernel_id), VX_TYPE_KERNEL);
+        VX_CALL(vxQueryKernel(kernel, VX_KERNEL_NAME, &name, sizeof(name)));
+        printf("\tExpected kernel name is: %s\n", arg_->name);
+        printf("\tActual kernel name is:   %-*s\n", VX_MAX_KERNEL_NAME, name);
+    }
+    else
+    {
+        VX_CALL(vxQueryKernel(kernel, VX_KERNEL_ENUM, &kernel_id, sizeof(kernel_id)));
+        EXPECT_EQ_INT(arg_->kernel_id, kernel_id);
+    }
+
+    VX_CALL(vxReleaseKernel(&kernel));
+}
+
+TEST(Graph, testAllocateUserKernelId)
+{
+    vx_context context = context_->vx_context_;
+    vx_enum   kernel_id = 0;
+
+    ASSERT_EQ_VX_STATUS(vxAllocateUserKernelId(NULL, &kernel_id), VX_ERROR_INVALID_REFERENCE);
+    ASSERT_NE_VX_STATUS(vxAllocateUserKernelId(context, NULL), VX_SUCCESS);
+
+    VX_CALL(vxAllocateUserKernelId(context, &kernel_id));
+
+    ASSERT(kernel_id >= VX_KERNEL_BASE(VX_ID_USER, 0));
+    ASSERT(kernel_id < (VX_KERNEL_BASE(VX_ID_USER, 0) + 4096));
+}
+
+TEST(Graph, testAllocateUserKernelLibraryId)
+{
+    vx_context context = context_->vx_context_;
+    vx_enum   library_id = 0;
+
+    ASSERT_EQ_VX_STATUS(vxAllocateUserKernelLibraryId(NULL, &library_id), VX_ERROR_INVALID_REFERENCE);
+    ASSERT_NE_VX_STATUS(vxAllocateUserKernelLibraryId(context, NULL), VX_SUCCESS);
+
+    VX_CALL(vxAllocateUserKernelLibraryId(context, &library_id));
+
+    ASSERT(library_id >= 1);
+    ASSERT(library_id <= 255);
+}
+
+void test_case_1(vx_context context, vx_uint32 width, vx_uint32 height)
+{
+    vx_image src1 = 0;
+    vx_image src2 = 0;
+    vx_image d1 = 0;
+    vx_image d2 = 0;
+    vx_image res = 0;
+    vx_graph graph = 0;
+    vx_node N1 = 0;
+    vx_node N2 = 0;
+    vx_node node3 = 0;
+    vx_node node4 = 0;
+    vx_pixel_value_t src1_val = {{ 1 }};
+    vx_pixel_value_t src2_val = {{ 2 }};
+    vx_rectangle_t roi_rect = { width / 2, height / 2, width, height };
+    vx_enum convert_policy = VX_CONVERT_POLICY_SATURATE;
+    vx_scalar mean1 = 0;
+    vx_scalar stddev1 = 0;
+    vx_float32 mean_val1 = 0.0f;
+    vx_float32 stddev_val1 = 0.0f;
+    vx_scalar mean2 = 0;
+    vx_scalar stddev2 = 0;
+    vx_float32 mean_val2 = 0.0f;
+    vx_float32 stddev_val2 = 0.0f;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateUniformImage(context, width, height, VX_DF_IMAGE_U8, &src1_val), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateUniformImage(context, width, height, VX_DF_IMAGE_U8, &src2_val), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(d1 = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(d2 = vxCreateImageFromROI(d1, &roi_rect), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(res = vxCreateImage(context, width / 2, height / 2, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(mean1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(mean2 = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val2), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev2 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val2), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    /* add nodes in arbitrary order */
+    ASSERT_VX_OBJECT(node3 = vxMeanStdDevNode(graph, res, mean1, stddev1), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N2 = vxNotNode(graph, d2, res), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node4 = vxMeanStdDevNode(graph, d1, mean2, stddev2), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N1 = vxAddNode(graph, src1, src2, convert_policy, d1), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxCopyScalar(mean1, &mean_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev1, &stddev_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(mean2, &mean_val2, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev2, &stddev_val2, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    EXPECT_EQ_INT((vx_uint8)( ~(src1_val.U8 + src2_val.U8) ), (vx_uint8)mean_val1);
+    EXPECT_EQ_INT((vx_uint8)((src1_val.U8 + src2_val.U8)), (vx_uint8)mean_val2);
+
+    VX_CALL(vxReleaseNode(&N1));
+    VX_CALL(vxReleaseNode(&N2));
+    VX_CALL(vxReleaseNode(&node3));
+    VX_CALL(vxReleaseNode(&node4));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&d1));
+    VX_CALL(vxReleaseImage(&d2));
+    VX_CALL(vxReleaseImage(&res));
+    VX_CALL(vxReleaseScalar(&mean1));
+    VX_CALL(vxReleaseScalar(&stddev1));
+    VX_CALL(vxReleaseScalar(&mean2));
+    VX_CALL(vxReleaseScalar(&stddev2));
+
+    ASSERT(N1 == 0);
+    ASSERT(N2 == 0);
+    ASSERT(node3 == 0);
+    ASSERT(node4 == 0);
+    ASSERT(graph == 0);
+    ASSERT(src1 == 0);
+    ASSERT(src2 == 0);
+    ASSERT(d1 == 0);
+    ASSERT(d2 == 0);
+    ASSERT(res == 0);
+    ASSERT(mean1 == 0);
+    ASSERT(stddev1 == 0);
+    ASSERT(mean2 == 0);
+    ASSERT(stddev2 == 0);
+
+    return;
+}
+
+
+void test_case_2(vx_context context, vx_uint32 width, vx_uint32 height)
+{
+    vx_image d2 = 0;
+    vx_image src1 = 0;
+    vx_image src2 = 0;
+    vx_image d1 = 0;
+    vx_image res = 0;
+    vx_graph graph = 0;
+    vx_node N1 = 0;
+    vx_node N2 = 0;
+    vx_node node3 = 0;
+    vx_node node4 = 0;
+    vx_pixel_value_t d2_val = {{ 1 }};
+    vx_pixel_value_t src1_val = {{ 2 }};
+    vx_pixel_value_t src2_val = {{ 3 }};
+    vx_rectangle_t img_rect = { 0, 0, width, height };
+    vx_rectangle_t roi_rect = { width / 2, height / 2, width, height };
+    vx_imagepatch_addressing_t addr = { 0 };
+    vx_uint8* base_ptr = NULL;
+    vx_enum convert_policy = VX_CONVERT_POLICY_SATURATE;
+    vx_scalar mean1 = 0;
+    vx_scalar stddev1 = 0;
+    vx_float32 mean_val1 = 0.0f;
+    vx_float32 stddev_val1 = 0.0f;
+    vx_scalar mean2 = 0;
+    vx_scalar stddev2 = 0;
+    vx_float32 mean_val2 = 0.0f;
+    vx_float32 stddev_val2 = 0.0f;
+    vx_map_id map_id;
+    vx_uint32 x, y;
+
+    ASSERT_VX_OBJECT(mean1   = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(mean2   = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val2), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev2 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val2), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(d2 = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    VX_CALL(vxMapImagePatch(d2, &img_rect, 0, &map_id, &addr, (void**)&base_ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    for ( y = 0; y < addr.dim_y; y += addr.step_y)
+    {
+        for ( x = 0; x < addr.dim_x; x += addr.step_x)
+        {
+            vx_uint8* ptr = vxFormatImagePatchAddress2d(base_ptr, x, y, &addr);
+            *ptr = d2_val.U8;
+        }
+    }
+    VX_CALL(vxUnmapImagePatch(d2, map_id));
+
+    ASSERT_VX_OBJECT(d1 = vxCreateImageFromROI(d2, &roi_rect), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(src1 = vxCreateUniformImage(context, width / 2, height / 2, VX_DF_IMAGE_U8, &src1_val), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateUniformImage(context, width / 2, height / 2, VX_DF_IMAGE_U8, &src2_val), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(res = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    /* add nodes in arbitrary order */
+    ASSERT_VX_OBJECT(node3 = vxMeanStdDevNode(graph, d1, mean2, stddev2), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N2 = vxMeanStdDevNode(graph, res, mean1, stddev1), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node4 = vxNotNode(graph, d2, res), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N1 = vxAddNode(graph, src1, src2, convert_policy, d1), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxCopyScalar(mean1, &mean_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev1, &stddev_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(mean2, &mean_val2, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev2, &stddev_val2, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    EXPECT_EQ_INT((vx_uint8)(~(src1_val.U8 + src2_val.U8) / 2), (vx_uint8)mean_val1);
+    EXPECT_EQ_INT((vx_uint8)((src1_val.U8 + src2_val.U8)), (vx_uint8)mean_val2);
+
+    VX_CALL(vxReleaseNode(&N1));
+    VX_CALL(vxReleaseNode(&N2));
+    VX_CALL(vxReleaseNode(&node3));
+    VX_CALL(vxReleaseNode(&node4));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&d1));
+    VX_CALL(vxReleaseImage(&d2));
+    VX_CALL(vxReleaseImage(&res));
+    VX_CALL(vxReleaseScalar(&mean1));
+    VX_CALL(vxReleaseScalar(&stddev1));
+    VX_CALL(vxReleaseScalar(&mean2));
+    VX_CALL(vxReleaseScalar(&stddev2));
+
+    ASSERT(N1 == 0);
+    ASSERT(N2 == 0);
+    ASSERT(node3 == 0);
+    ASSERT(node4 == 0);
+    ASSERT(graph == 0);
+    ASSERT(src1 == 0);
+    ASSERT(src2 == 0);
+    ASSERT(d1 == 0);
+    ASSERT(d2 == 0);
+    ASSERT(res == 0);
+    ASSERT(mean1 == 0);
+    ASSERT(stddev1 == 0);
+    ASSERT(mean2 == 0);
+    ASSERT(stddev2 == 0);
+
+    return;
+}
+
+
+void test_case_3(vx_context context, vx_uint32 width, vx_uint32 height)
+{
+    vx_image image = 0;
+    vx_image src1 = 0;
+    vx_image src2 = 0;
+    vx_image d1 = 0;
+    vx_image d2 = 0;
+    vx_graph graph = 0;
+    vx_node N1 = 0;
+    vx_node N2 = 0;
+    vx_node node = 0;
+    vx_pixel_value_t val = {{ 1 }};
+    vx_pixel_value_t src1_val = {{ 2 }};
+    vx_pixel_value_t src2_val = {{ 3 }};
+    vx_rectangle_t img_rect = { 0, 0, width, height };
+    vx_rectangle_t roi_rect1 = { width / 2, height / 2, width, height };
+    vx_rectangle_t roi_rect2 = { 0, height / 2, width, height };
+    vx_imagepatch_addressing_t addr = { 0 };
+    vx_uint8* base_ptr = NULL;
+    vx_enum convert_policy = VX_CONVERT_POLICY_SATURATE;
+    vx_scalar mean1 = 0;
+    vx_scalar stddev1 = 0;
+    vx_float32 mean_val1 = 0.0f;
+    vx_float32 stddev_val1 = 0.0f;
+    vx_scalar mean2 = 0;
+    vx_scalar stddev2 = 0;
+    vx_float32 mean_val2 = 0.0f;
+    vx_float32 stddev_val2 = 0.0f;
+    vx_map_id map_id;
+    vx_uint32 x, y;
+
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    VX_CALL(vxMapImagePatch(image, &img_rect, 0, &map_id, &addr, (void**)&base_ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    for ( y = 0; y < addr.dim_y; y += addr.step_y)
+    {
+        for ( x = 0; x < addr.dim_x; x += addr.step_x)
+        {
+            vx_uint8* ptr = vxFormatImagePatchAddress2d(base_ptr, x, y, &addr);
+            *ptr = val.U8;
+        }
+    }
+    VX_CALL(vxUnmapImagePatch(image, map_id));
+
+    ASSERT_VX_OBJECT(src1 = vxCreateUniformImage(context, width / 2, height / 2, VX_DF_IMAGE_U8, &src1_val), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateUniformImage(context, width / 2, height / 2, VX_DF_IMAGE_U8, &src2_val), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(d1 = vxCreateImageFromROI(image, &roi_rect1), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(d2 = vxCreateImageFromROI(image, &roi_rect2), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(mean1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(mean2 = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val2), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev2 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val2), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    /* add nodes in arbitrary order */
+    ASSERT_VX_OBJECT(node = vxMeanStdDevNode(graph, d1, mean2, stddev2), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N2 = vxMeanStdDevNode(graph, d2, mean1, stddev1), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N1 = vxAddNode(graph, src1, src2, convert_policy, d1), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxCopyScalar(mean1, &mean_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev1, &stddev_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(mean2, &mean_val2, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev2, &stddev_val2, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    EXPECT_EQ_INT((vx_uint8)((val.U8 + src1_val.U8 + src2_val.U8) / 2), (vx_uint8)mean_val1);
+    EXPECT_EQ_INT((vx_uint8)((src1_val.U8 + src2_val.U8)), (vx_uint8)mean_val2);
+
+    VX_CALL(vxReleaseNode(&N1));
+    VX_CALL(vxReleaseNode(&N2));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&d1));
+    VX_CALL(vxReleaseImage(&d2));
+    VX_CALL(vxReleaseScalar(&mean1));
+    VX_CALL(vxReleaseScalar(&stddev1));
+    VX_CALL(vxReleaseScalar(&mean2));
+    VX_CALL(vxReleaseScalar(&stddev2));
+
+    ASSERT(N1 == 0);
+    ASSERT(N2 == 0);
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(image == 0);
+    ASSERT(src1 == 0);
+    ASSERT(src2 == 0);
+    ASSERT(d1 == 0);
+    ASSERT(d2 == 0);
+    ASSERT(mean1 == 0);
+    ASSERT(stddev1 == 0);
+    ASSERT(mean2 == 0);
+    ASSERT(stddev2 == 0);
+
+    return;
+}
+
+
+void test_case_4(vx_context context, vx_uint32 width, vx_uint32 height)
+{
+    vx_image image = 0;
+    vx_pyramid d1 = 0;
+    vx_image d2 = 0;
+    vx_graph graph = 0;
+    vx_node N1 = 0;
+    vx_node N2 = 0;
+    vx_pixel_value_t val = {{ 5 }};
+    vx_size levels = 3;
+    vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+    vx_scalar mean1 = 0;
+    vx_scalar stddev1 = 0;
+    vx_float32 mean_val1 = 0.0f;
+    vx_float32 stddev_val1 = 0.0f;
+
+    ASSERT_VX_OBJECT(image = vxCreateUniformImage(context, width, height, VX_DF_IMAGE_U8, &val), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(d1 = vxCreatePyramid(context, levels, scale, width, height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(d2 = vxGetPyramidLevel(d1, 0), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(mean1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean_val1), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(stddev1 = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev_val1), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    /* add nodes in arbitrary order */
+    ASSERT_VX_OBJECT(N2 = vxMeanStdDevNode(graph, d2, mean1, stddev1), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(N1 = vxGaussianPyramidNode(graph, image, d1), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxCopyScalar(mean1, &mean_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxCopyScalar(stddev1, &stddev_val1, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    EXPECT_EQ_INT(val.U8, (vx_uint8)mean_val1);
+
+    VX_CALL(vxReleaseNode(&N1));
+    VX_CALL(vxReleaseNode(&N2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleasePyramid(&d1));
+    VX_CALL(vxReleaseImage(&d2));
+    VX_CALL(vxReleaseScalar(&mean1));
+    VX_CALL(vxReleaseScalar(&stddev1));
+
+    ASSERT(N1 == 0);
+    ASSERT(N2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(image == 0);
+    ASSERT(d1 == 0);
+    ASSERT(d2 == 0);
+    ASSERT(mean1 == 0);
+    ASSERT(stddev1 == 0);
+
+    return;
+}
+
+
+TEST(Graph, testImageContainmentRelationship)
+{
+    vx_context context = context_->vx_context_;
+    vx_uint32 width = 128;
+    vx_uint32 height = 128;
+    test_case_1(context, width, height);
+    test_case_2(context, width, height);
+    test_case_3(context, width, height);
+    test_case_4(context, width, height);
+}
+
+
+/* test replicate node */
+
+static CT_Image own_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+        image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+typedef enum
+{
+    ADD = 0,
+    SUB,
+    MUL,
+    LUT
+
+} OWN_OPERATION_TYPE;
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    int width;
+    int height;
+    vx_size levels;
+    vx_float32 scale;
+    vx_df_image format;
+    OWN_OPERATION_TYPE op;
+} Test_Replicate_Arg;
+
+
+#define ADD_SIZE_SET(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=256x256", __VA_ARGS__, 256, 256)), \
+    CT_EXPAND(nextmacro(testArgName "/sz=640x480", __VA_ARGS__, 640, 480))
+
+#define ADD_VX_LEVELS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/REPLICAS=3", __VA_ARGS__, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/REPLICAS=4", __VA_ARGS__, 4))
+
+#define ADD_VX_SCALE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/PYRAMID:SCALE_HALF", __VA_ARGS__, VX_SCALE_PYRAMID_HALF)), \
+    CT_EXPAND(nextmacro(testArgName "/PYRAMID:SCALE_ORB", __VA_ARGS__, VX_SCALE_PYRAMID_ORB)), \
+    CT_EXPAND(nextmacro(testArgName "/OBJECT_ARRAY", __VA_ARGS__, -1))
+
+#define ADD_VX_FORMAT(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U8", __VA_ARGS__, VX_DF_IMAGE_U8))
+
+#define ADD_VX_OPERATION(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/Add", __VA_ARGS__, ADD)),  \
+    CT_EXPAND(nextmacro(testArgName "/Sub", __VA_ARGS__, SUB)),  \
+    CT_EXPAND(nextmacro(testArgName "/Mul", __VA_ARGS__, MUL)),  \
+    CT_EXPAND(nextmacro(testArgName "/LUT", __VA_ARGS__, LUT))
+
+#define TEST_REPLICATE_PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SET, ADD_VX_LEVELS, ADD_VX_SCALE, ADD_VX_FORMAT, ADD_VX_OPERATION, ARG, own_generate_random, NULL)
+
+static void ref_replicate_op(vx_context context, vx_reference input1, vx_reference input2, vx_reference output, OWN_OPERATION_TYPE op)
+{
+    vx_uint32 i, k;
+    vx_size levels = 0;
+    vx_enum type = VX_TYPE_INVALID;
+
+    VX_CALL(vxQueryReference(input1, VX_REFERENCE_TYPE, &type, sizeof(type)));
+
+    if (type == VX_TYPE_PYRAMID)
+    {
+        VX_CALL(vxQueryPyramid((vx_pyramid)input1, VX_PYRAMID_LEVELS, &levels, sizeof(vx_size)));
+
+        // add, sub, mul, lut
+        for (k = 0; k < levels; k++)
+        {
+            vx_image src1 = 0;
+            vx_image src2 = 0;
+            vx_image dst = 0;
+            vx_enum policy = VX_CONVERT_POLICY_SATURATE;
+            vx_float32 scale_val = 1.0f;
+            vx_enum rounding = VX_ROUND_POLICY_TO_ZERO;
+
+            ASSERT_VX_OBJECT(src1 = vxGetPyramidLevel((vx_pyramid)input1, k), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(src2 = vxGetPyramidLevel((vx_pyramid)input2, k), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(dst = vxGetPyramidLevel((vx_pyramid)output, k), VX_TYPE_IMAGE);
+
+            switch (op)
+            {
+            case ADD:
+                VX_CALL(vxuAdd(context, src1, src2, policy, dst));
+                break;
+
+            case SUB:
+                VX_CALL(vxuSubtract(context, src1, src2, policy, dst));
+                break;
+
+            case MUL:
+                VX_CALL(vxuMultiply(context, src1, src2, scale_val, policy, rounding, dst));
+                break;
+
+            case LUT:
+            {
+                vx_lut lut = 0;
+                vx_uint8* data = 0;
+                vx_map_id map_id;
+                ASSERT_VX_OBJECT(lut = vxCreateLUT(context, VX_TYPE_UINT8, 256), VX_TYPE_LUT);
+                VX_CALL(vxMapLUT(lut, &map_id, (void **)&data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (i = 0; i < 256; i++)
+                    data[i] = 255 - i;
+                VX_CALL(vxUnmapLUT(lut, map_id));
+                VX_CALL(vxuTableLookup(context, src1, lut, dst));
+                VX_CALL(vxReleaseLUT(&lut));
+                break;
+            }
+
+            default:
+                ASSERT(0);
+            }
+
+            VX_CALL(vxReleaseImage(&src1));
+            VX_CALL(vxReleaseImage(&src2));
+            VX_CALL(vxReleaseImage(&dst));
+        }
+    }
+    else if (type == VX_TYPE_OBJECT_ARRAY)
+    {
+        VX_CALL(vxQueryObjectArray((vx_object_array)input1, VX_OBJECT_ARRAY_NUMITEMS, &levels, sizeof(vx_size)));
+
+        // add, sub, mul, lut
+        for (k = 0; k < levels; k++)
+        {
+            vx_image src1 = 0;
+            vx_image src2 = 0;
+            vx_image dst = 0;
+            vx_enum policy = VX_CONVERT_POLICY_SATURATE;
+            vx_float32 scale_val = 1.0f;
+            vx_enum rounding = VX_ROUND_POLICY_TO_ZERO;
+
+            ASSERT_VX_OBJECT(src1 = (vx_image)vxGetObjectArrayItem((vx_object_array)input1, k), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(src2 = (vx_image)vxGetObjectArrayItem((vx_object_array)input2, k), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(dst = (vx_image)vxGetObjectArrayItem((vx_object_array)output, k), VX_TYPE_IMAGE);
+
+            switch (op)
+            {
+            case ADD:
+                VX_CALL(vxuAdd(context, src1, src2, policy, dst));
+                break;
+
+            case SUB:
+                VX_CALL(vxuSubtract(context, src1, src2, policy, dst));
+                break;
+
+            case MUL:
+                VX_CALL(vxuMultiply(context, src1, src2, scale_val, policy, rounding, dst));
+                break;
+
+            case LUT:
+            {
+                vx_lut lut = 0;
+                vx_uint8* data = 0;
+                vx_map_id map_id;
+                ASSERT_VX_OBJECT(lut = vxCreateLUT(context, VX_TYPE_UINT8, 256), VX_TYPE_LUT);
+                VX_CALL(vxMapLUT(lut, &map_id, (void **)&data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (i = 0; i < 256; i++)
+                    data[i] = 255 - i - k;
+                VX_CALL(vxUnmapLUT(lut, map_id));
+                VX_CALL(vxuTableLookup(context, src1, lut, dst));
+                VX_CALL(vxReleaseLUT(&lut));
+                break;
+            }
+
+            default:
+                ASSERT(0);
+            }
+
+            VX_CALL(vxReleaseImage(&src1));
+            VX_CALL(vxReleaseImage(&src2));
+            VX_CALL(vxReleaseImage(&dst));
+        }
+    }
+    else
+        ASSERT(0);
+
+    return;
+}
+
+static void tst_replicate_op(vx_context context, vx_reference input1, vx_reference input2, vx_reference output, OWN_OPERATION_TYPE op)
+{
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_object_array object_array = 0;
+    vx_image src1 = 0;
+    vx_image src2 = 0;
+    vx_image dst = 0;
+    vx_enum policy = VX_CONVERT_POLICY_SATURATE;
+    vx_float32 scale_val = 1.0f;
+    vx_scalar scale = 0;
+    vx_enum rounding = VX_ROUND_POLICY_TO_ZERO;
+    vx_size levels = 0;
+    vx_enum type = VX_TYPE_INVALID;
+
+    VX_CALL(vxQueryReference(input1, VX_REFERENCE_TYPE, &type, sizeof(type)));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    if (type == VX_TYPE_PYRAMID)
+    {
+        ASSERT_VX_OBJECT(src1 = vxGetPyramidLevel((vx_pyramid)input1, 0), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(src2 = vxGetPyramidLevel((vx_pyramid)input2, 0), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxGetPyramidLevel((vx_pyramid)output, 0), VX_TYPE_IMAGE);
+
+        VX_CALL(vxQueryPyramid((vx_pyramid)input1, VX_PYRAMID_LEVELS, &levels, sizeof(levels)));
+
+        // add, sub, mul, lut
+        switch (op)
+        {
+        case ADD:
+        {
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_false_e, vx_true_e };
+            ASSERT_VX_OBJECT(node = vxAddNode(graph, src1, src2, policy, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 4));
+            break;
+        }
+
+        case SUB:
+        {
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_false_e, vx_true_e };
+            ASSERT_VX_OBJECT(node = vxSubtractNode(graph, src1, src2, policy, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 4));
+            break;
+        }
+
+        case MUL:
+        {
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_false_e, vx_false_e, vx_false_e, vx_true_e };
+            ASSERT_VX_OBJECT(scale = vxCreateScalar(context, VX_TYPE_FLOAT32, &scale_val), VX_TYPE_SCALAR);
+            ASSERT_VX_OBJECT(node = vxMultiplyNode(graph, src1, src2, scale, policy, rounding, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 6));
+            VX_CALL(vxReleaseScalar(&scale));
+            break;
+        }
+
+        case LUT:
+        {
+            vx_uint32 i;
+            vx_lut lut = 0;
+            vx_uint8* data = 0;
+            vx_bool replicate[] = { vx_true_e, vx_false_e, vx_true_e };
+            vx_map_id map_id;
+            ASSERT_VX_OBJECT(lut = vxCreateLUT(context, VX_TYPE_UINT8, 256), VX_TYPE_LUT);
+            VX_CALL(vxMapLUT(lut, &map_id, (void **)&data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (i = 0; i < 256; i++)
+                data[i] = 255 - i;
+            VX_CALL(vxUnmapLUT(lut, map_id));
+            ASSERT_VX_OBJECT(node = vxTableLookupNode(graph, src1, lut, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 3));
+            VX_CALL(vxReleaseLUT(&lut));
+            break;
+        }
+
+        default:
+            ASSERT(0);
+        }
+    }
+    else if (type == VX_TYPE_OBJECT_ARRAY)
+    {
+        ASSERT_VX_OBJECT(src1 = (vx_image)vxGetObjectArrayItem((vx_object_array)input1, 0), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(src2 = (vx_image)vxGetObjectArrayItem((vx_object_array)input2, 0), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = (vx_image)vxGetObjectArrayItem((vx_object_array)output, 0), VX_TYPE_IMAGE);
+
+        VX_CALL(vxQueryObjectArray((vx_object_array)input1, VX_OBJECT_ARRAY_NUMITEMS, &levels, sizeof(levels)));
+
+        // add, sub, mul, lut
+        switch (op)
+        {
+        case ADD:
+        {
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_false_e, vx_true_e };
+            ASSERT_VX_OBJECT(node = vxAddNode(graph, src1, src2, policy, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 4));
+            break;
+        }
+
+        case SUB:
+        {
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_false_e, vx_true_e };
+            ASSERT_VX_OBJECT(node = vxSubtractNode(graph, src1, src2, policy, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 4));
+            break;
+        }
+
+        case MUL:
+        {
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_false_e, vx_false_e, vx_false_e, vx_true_e };
+            ASSERT_VX_OBJECT(scale = vxCreateScalar(context, VX_TYPE_FLOAT32, &scale_val), VX_TYPE_SCALAR);
+            ASSERT_VX_OBJECT(node = vxMultiplyNode(graph, src1, src2, scale, policy, rounding, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 6));
+            VX_CALL(vxReleaseScalar(&scale));
+            break;
+        }
+
+        case LUT:
+        {
+            vx_uint32 i, k;
+            vx_lut lut = 0;
+            vx_uint8* data = 0;
+            vx_bool replicate[] = { vx_true_e, vx_true_e, vx_true_e };
+            vx_map_id map_id;
+            ASSERT_VX_OBJECT(lut = vxCreateLUT(context, VX_TYPE_UINT8, 256), VX_TYPE_LUT);
+            ASSERT_VX_OBJECT(object_array = vxCreateObjectArray(context, (vx_reference)lut, levels), VX_TYPE_OBJECT_ARRAY);
+            VX_CALL(vxReleaseLUT(&lut));
+
+            for (k = 0; k < levels; ++k)
+            {
+                ASSERT_VX_OBJECT(lut = (vx_lut)vxGetObjectArrayItem(object_array, k), VX_TYPE_LUT);
+                VX_CALL(vxMapLUT(lut, &map_id, (void **)&data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+                for (i = 0; i < 256; i++)
+                    data[i] = 255 - i - k;
+                VX_CALL(vxUnmapLUT(lut, map_id));
+                VX_CALL(vxReleaseLUT(&lut));
+            }
+
+            ASSERT_VX_OBJECT(lut = (vx_lut)vxGetObjectArrayItem(object_array, 0), VX_TYPE_LUT);
+            ASSERT_VX_OBJECT(node = vxTableLookupNode(graph, src1, lut, dst), VX_TYPE_NODE);
+            VX_CALL(vxReplicateNode(graph, node, replicate, 3));
+            VX_CALL(vxReleaseLUT(&lut));
+            break;
+        }
+
+        default:
+            ASSERT(0);
+        }
+    }
+    else
+        ASSERT(0);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+
+    if (object_array)
+        VX_CALL(vxReleaseObjectArray(&object_array));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    return;
+}
+
+static void check_replicas(vx_reference ref, vx_reference tst, vx_border_t border)
+{
+    vx_uint32 i;
+    vx_size ref_levels = 0;
+    vx_size tst_levels = 0;
+    vx_enum type = VX_TYPE_INVALID;
+
+    VX_CALL(vxQueryReference(ref, VX_REFERENCE_TYPE, &type, sizeof(type)));
+
+    if (type == VX_TYPE_PYRAMID)
+    {
+        vx_float32 scale;
+
+        VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_SCALE, &scale, sizeof(scale)));
+        VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_LEVELS, &ref_levels, sizeof(vx_size)));
+        VX_CALL(vxQueryPyramid((vx_pyramid)tst, VX_PYRAMID_LEVELS, &tst_levels, sizeof(vx_size)));
+
+        EXPECT_EQ_INT(ref_levels, tst_levels);
+
+        for (i = 0; i < ref_levels; i++)
+        {
+            vx_image src1 = 0;
+            vx_image src2 = 0;
+            CT_Image img1 = 0;
+            CT_Image img2 = 0;
+
+            ASSERT_VX_OBJECT(src1 = vxGetPyramidLevel((vx_pyramid)ref, i), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(src2 = vxGetPyramidLevel((vx_pyramid)tst, i), VX_TYPE_IMAGE);
+
+            ASSERT_NO_FAILURE(img1 = ct_image_from_vx_image(src1));
+            ASSERT_NO_FAILURE(img2 = ct_image_from_vx_image(src2));
+
+            if (VX_BORDER_UNDEFINED == border.mode)
+            {
+                if (i > 0)
+                {
+                    if (VX_SCALE_PYRAMID_ORB == scale)
+                    {
+                        ct_adjust_roi(img1, 2, 2, 2, 2);
+                        ct_adjust_roi(img2, 2, 2, 2, 2);
+                    }
+                    else if (VX_SCALE_PYRAMID_HALF == scale)
+                    {
+                        ct_adjust_roi(img1, 1, 1, 1, 1);
+                        ct_adjust_roi(img2, 1, 1, 1, 1);
+                    }
+                }
+            }
+
+            EXPECT_EQ_CTIMAGE(img1, img2);
+
+            VX_CALL(vxReleaseImage(&src1));
+            VX_CALL(vxReleaseImage(&src2));
+        }
+    }
+    else if (type == VX_TYPE_OBJECT_ARRAY)
+    {
+        VX_CALL(vxQueryObjectArray((vx_object_array)ref, VX_OBJECT_ARRAY_NUMITEMS, &ref_levels, sizeof(vx_size)));
+        VX_CALL(vxQueryObjectArray((vx_object_array)tst, VX_OBJECT_ARRAY_NUMITEMS, &tst_levels, sizeof(vx_size)));
+        EXPECT_EQ_INT(ref_levels, tst_levels);
+
+        for (i = 0; i < ref_levels; i++)
+        {
+            vx_image src1 = 0;
+            vx_image src2 = 0;
+            CT_Image img1 = 0;
+            CT_Image img2 = 0;
+
+            ASSERT_VX_OBJECT(src1 = (vx_image)vxGetObjectArrayItem((vx_object_array)ref, i), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(src2 = (vx_image)vxGetObjectArrayItem((vx_object_array)tst, i), VX_TYPE_IMAGE);
+
+            ASSERT_NO_FAILURE(img1 = ct_image_from_vx_image(src1));
+            ASSERT_NO_FAILURE(img2 = ct_image_from_vx_image(src2));
+            EXPECT_EQ_CTIMAGE(img1, img2);
+
+            VX_CALL(vxReleaseImage(&src1));
+            VX_CALL(vxReleaseImage(&src2));
+        }
+    }
+    else
+        ASSERT(0);
+
+    return;
+}
+
+
+TEST_WITH_ARG(Graph, testReplicateNode, Test_Replicate_Arg, TEST_REPLICATE_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    CT_Image src = 0;
+    vx_reference src1 = 0;
+    vx_reference src2 = 0;
+    vx_reference ref = 0;
+    vx_reference tst = 0;
+    vx_image input1 = 0;
+    vx_image input2 = 0;
+    vx_pixel_value_t value = {{ 2 }};
+    vx_border_t border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    if (arg_->scale < 0)
+    {
+        vx_size i;
+        ASSERT_VX_OBJECT(input1 = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+        ASSERT_VX_OBJECT(src1 = (vx_reference)vxCreateObjectArray(context, (vx_reference)input1, arg_->levels), VX_TYPE_OBJECT_ARRAY);
+        ASSERT_VX_OBJECT(src2 = (vx_reference)vxCreateObjectArray(context, (vx_reference)input1, arg_->levels), VX_TYPE_OBJECT_ARRAY);
+        ASSERT_VX_OBJECT(ref = (vx_reference)vxCreateObjectArray(context, (vx_reference)input1, arg_->levels), VX_TYPE_OBJECT_ARRAY);
+        ASSERT_VX_OBJECT(tst = (vx_reference)vxCreateObjectArray(context, (vx_reference)input1, arg_->levels), VX_TYPE_OBJECT_ARRAY);
+
+        /* Initialize array items */
+        for (i = 0; i < arg_->levels; ++i)
+        {
+            vx_image item = 0;
+            value.U8 = (vx_uint8)i;
+            ASSERT_VX_OBJECT(input2 = vxCreateUniformImage(context, arg_->width, arg_->height, arg_->format, &value), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(item = (vx_image)vxGetObjectArrayItem((vx_object_array)src1, (vx_uint32)i), VX_TYPE_IMAGE);
+            VX_CALL(vxuAdd(context, input1, input2, VX_CONVERT_POLICY_WRAP, item));
+            VX_CALL(vxReleaseImage(&item));
+            VX_CALL(vxReleaseImage(&input2));
+        }
+
+        VX_CALL(vxReleaseImage(&input1));
+    }
+    else
+    {
+        ASSERT_VX_OBJECT(input1 = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(input2 = vxCreateUniformImage(context, arg_->width, arg_->height, arg_->format, &value), VX_TYPE_IMAGE);
+
+        ASSERT_VX_OBJECT(src1 = (vx_reference)vxCreatePyramid(context, arg_->levels, arg_->scale, arg_->width, arg_->height, arg_->format), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(src2 = (vx_reference)vxCreatePyramid(context, arg_->levels, arg_->scale, arg_->width, arg_->height, arg_->format), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(ref = (vx_reference)vxCreatePyramid(context, arg_->levels, arg_->scale, arg_->width, arg_->height, arg_->format), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(tst = (vx_reference)vxCreatePyramid(context, arg_->levels, arg_->scale, arg_->width, arg_->height, arg_->format), VX_TYPE_PYRAMID);
+
+        /* Initialize pyramids */
+        VX_CALL(vxuGaussianPyramid(context, input1, (vx_pyramid)src1));
+        VX_CALL(vxuGaussianPyramid(context, input2, (vx_pyramid)src2));
+
+        VX_CALL(vxReleaseImage(&input1));
+        VX_CALL(vxReleaseImage(&input2));
+    }
+
+    ref_replicate_op(context, src1, src2, ref, arg_->op);
+    tst_replicate_op(context, src1, src2, tst, arg_->op);
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+    check_replicas(ref, tst, border);
+
+    VX_CALL(vxReleaseReference(&src1));
+    VX_CALL(vxReleaseReference(&src2));
+    VX_CALL(vxReleaseReference(&ref));
+    VX_CALL(vxReleaseReference(&tst));
+}
+
+
+static void test_halfscalegaussian(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+
+    {
+        int count;
+        vx_image src = 0;
+        vx_image dst = 0;
+        vx_graph graph = 0;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(src = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxCreateImage(context, 160, 120, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxHalfScaleGaussianNode(graph, src, dst, 3), VX_TYPE_NODE);
+
+        for (count = 0; count < 2; count++)
+        {
+            VX_CALL(vxVerifyGraph(graph));
+        }
+
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dst));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+static void test_cannyedgedetector(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+    vx_uint32 nkernels_before = 0;
+    vx_uint32 nkernels_after = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_before, sizeof(nkernels_before)));
+
+    {
+        vx_image src = 0;
+        vx_image dst = 0;
+        vx_graph graph = 0;
+        vx_threshold threshold = 0;
+        vx_int32 val1 = 16;
+        vx_int32 val2 = 32;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(src = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(threshold = vxCreateThreshold(context, VX_THRESHOLD_TYPE_RANGE, VX_TYPE_UINT8), VX_TYPE_THRESHOLD);
+        VX_CALL(vxSetThresholdAttribute(threshold, VX_THRESHOLD_THRESHOLD_LOWER, &val1, sizeof(val1)));
+        VX_CALL(vxSetThresholdAttribute(threshold, VX_THRESHOLD_THRESHOLD_UPPER, &val2, sizeof(val2)));
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxCannyEdgeDetectorNode(graph, src, threshold, 3, VX_NORM_L1, dst), VX_TYPE_NODE);
+
+        VX_CALL(vxVerifyGraph(graph));
+
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dst));
+        VX_CALL(vxReleaseThreshold(&threshold));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_after, sizeof(nkernels_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+
+    if(nkernels_after != nkernels_before)
+        nrefs_dangling -= (nkernels_after - nkernels_before);
+
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+static void test_harriscorners(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+    vx_uint32 nkernels_before = 0;
+    vx_uint32 nkernels_after = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_before, sizeof(nkernels_before)));
+
+    {
+        vx_image src = 0;
+        vx_array dst = 0;
+        vx_graph graph = 0;
+        vx_size capacity = 1000;
+        vx_scalar strength = 0;
+        vx_float32 strength_val = 0.5f;
+        vx_scalar min_distance = 0;
+        vx_float32 min_distance_val = 0.5f;
+        vx_scalar sensitivity = 0;
+        vx_float32 sensitivity_val = 0.1f;
+        vx_scalar num_corners = 0;
+        vx_size num_corners_val = 10;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(src = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxCreateArray(context, VX_TYPE_KEYPOINT, capacity), VX_TYPE_ARRAY);
+        ASSERT_VX_OBJECT(strength = vxCreateScalar(context, VX_TYPE_FLOAT32, &strength_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(min_distance = vxCreateScalar(context, VX_TYPE_FLOAT32, &min_distance_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(sensitivity = vxCreateScalar(context, VX_TYPE_FLOAT32, &sensitivity_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(num_corners = vxCreateScalar(context, VX_TYPE_SIZE, &num_corners_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxHarrisCornersNode(graph, src, strength, min_distance, sensitivity, 3, 3, dst, num_corners), VX_TYPE_NODE);
+
+        VX_CALL(vxVerifyGraph(graph));
+
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseArray(&dst));
+        VX_CALL(vxReleaseScalar(&strength));
+        VX_CALL(vxReleaseScalar(&min_distance));
+        VX_CALL(vxReleaseScalar(&sensitivity));
+        VX_CALL(vxReleaseScalar(&num_corners));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_after, sizeof(nkernels_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+
+    if (nkernels_after != nkernels_before)
+        nrefs_dangling -= (nkernels_after - nkernels_before);
+
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+static void test_gaussianpyramid(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+    vx_uint32 nkernels_before = 0;
+    vx_uint32 nkernels_after = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_before, sizeof(nkernels_before)));
+
+    {
+        vx_image src = 0;
+        vx_pyramid dst = 0;
+        vx_size levels = 2;
+        vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+        vx_graph graph = 0;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(src = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxCreatePyramid(context, levels, scale, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxGaussianPyramidNode(graph, src, dst), VX_TYPE_NODE);
+
+        VX_CALL(vxVerifyGraph(graph));
+
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleasePyramid(&dst));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_after, sizeof(nkernels_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+
+    if (nkernels_after != nkernels_before)
+        nrefs_dangling -= (nkernels_after - nkernels_before);
+
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+static void test_laplacianpyramid(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+    vx_uint32 nkernels_before = 0;
+    vx_uint32 nkernels_after = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_before, sizeof(nkernels_before)));
+
+    {
+        int count;
+        vx_image src = 0;
+        vx_image out = 0;
+        vx_pyramid dst = 0;
+        vx_size levels = 2;
+        vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+        vx_graph graph = 0;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(src = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(out = vxCreateImage(context, 80, 60, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxCreatePyramid(context, levels, scale, 320, 240, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxLaplacianPyramidNode(graph, src, dst, out), VX_TYPE_NODE);
+
+        for (count = 0; count < 2; count++)
+        {
+            VX_CALL(vxVerifyGraph(graph));
+        }
+
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&out));
+        VX_CALL(vxReleasePyramid(&dst));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_after, sizeof(nkernels_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+
+    if (nkernels_after != nkernels_before)
+        nrefs_dangling -= (nkernels_after - nkernels_before);
+
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+static void test_laplacianreconstruct(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+    vx_uint32 nkernels_before = 0;
+    vx_uint32 nkernels_after = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_before, sizeof(nkernels_before)));
+
+    {
+        int count;
+        vx_pyramid src = 0;
+        vx_image in = 0;
+        vx_image dst = 0;
+        vx_size levels = 2;
+        vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+        vx_graph graph = 0;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(src = vxCreatePyramid(context, levels, scale, 320, 240, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(in = vxCreateImage(context, 80, 60, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(dst = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxLaplacianReconstructNode(graph, src, in, dst), VX_TYPE_NODE);
+
+        for (count = 0; count < 2; count++)
+        {
+            VX_CALL(vxVerifyGraph(graph));
+        }
+
+        VX_CALL(vxReleasePyramid(&src));
+        VX_CALL(vxReleaseImage(&in));
+        VX_CALL(vxReleaseImage(&dst));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, &nkernels_after, sizeof(nkernels_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+
+    if (nkernels_after != nkernels_before)
+        nrefs_dangling -= (nkernels_after - nkernels_before);
+
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+static void test_opticalflowpyrlk(vx_context context)
+{
+    vx_uint32 nrefs_before = 0;
+    vx_uint32 nrefs_after = 0;
+    vx_uint32 nrefs_dangling = 0;
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_before, sizeof(nrefs_before)));
+
+    {
+        int count;
+        vx_size levels = 2;
+        vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+        vx_pyramid old_images = 0;
+        vx_pyramid new_images = 0;
+        vx_size capacity = 1000;
+        vx_array old_points = 0;
+        vx_array new_points_estimates = 0;
+        vx_array new_points = 0;
+        vx_graph graph = 0;
+        vx_scalar epsilon = 0;
+        vx_float32 epsilon_val = 0.5f;
+        vx_scalar num_iter = 0;
+        vx_uint32 num_iter_val = 5;
+        vx_scalar use_initial_estimate = 0;
+        vx_bool use_initial_estimate_val = vx_true_e;
+        vx_size window_dims = 10;
+        vx_node node = 0;
+
+        ASSERT_VX_OBJECT(old_images = vxCreatePyramid(context, levels, scale, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(new_images = vxCreatePyramid(context, levels, scale, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(old_points = vxCreateArray(context, VX_TYPE_KEYPOINT, capacity), VX_TYPE_ARRAY);
+        ASSERT_VX_OBJECT(new_points_estimates = vxCreateArray(context, VX_TYPE_KEYPOINT, capacity), VX_TYPE_ARRAY);
+        ASSERT_VX_OBJECT(new_points = vxCreateArray(context, VX_TYPE_KEYPOINT, capacity), VX_TYPE_ARRAY);
+        ASSERT_VX_OBJECT(epsilon = vxCreateScalar(context, VX_TYPE_FLOAT32, &epsilon_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(num_iter = vxCreateScalar(context, VX_TYPE_UINT32, &num_iter_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(use_initial_estimate = vxCreateScalar(context, VX_TYPE_BOOL, &use_initial_estimate_val), VX_TYPE_SCALAR);
+        ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ASSERT_VX_OBJECT(node = vxOpticalFlowPyrLKNode(graph,
+            old_images, new_images,
+            old_points, new_points_estimates, new_points,
+            VX_TERM_CRITERIA_BOTH, epsilon, num_iter, use_initial_estimate, window_dims), VX_TYPE_NODE);
+
+        for (count = 0; count < 2; count++)
+        {
+            VX_CALL(vxVerifyGraph(graph));
+        }
+
+        VX_CALL(vxReleasePyramid(&old_images));
+        VX_CALL(vxReleasePyramid(&new_images));
+        VX_CALL(vxReleaseArray(&old_points));
+        VX_CALL(vxReleaseArray(&new_points_estimates));
+        VX_CALL(vxReleaseArray(&new_points));
+        VX_CALL(vxReleaseScalar(&epsilon));
+        VX_CALL(vxReleaseScalar(&num_iter));
+        VX_CALL(vxReleaseScalar(&use_initial_estimate));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_REFERENCES, &nrefs_after, sizeof(nrefs_after)));
+
+    nrefs_dangling = nrefs_after - nrefs_before;
+    ASSERT_EQ_INT(0, nrefs_dangling);
+
+    return;
+}
+
+
+typedef enum
+{
+    fn_vxOpticalFlowPyrLKNode = 0,
+    fn_vxGaussianPyramidNode,
+    fn_vxCannyEdgeDetectorNode,
+    fn_vxHarrisCornersNode,
+    fn_vxHalfScaleGaussianNode,
+    fn_vxLaplacianPyramidNode,
+    fn_vxLaplacianReconstructNode
+
+}  test_case;
+
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    test_case test_id;
+
+} ResourceLeakage_Arg;
+
+
+#define ADD_TEST_CASES(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/vxOpticalFlowPyrLKNode",     __VA_ARGS__, fn_vxOpticalFlowPyrLKNode)), \
+    CT_EXPAND(nextmacro(testArgName "/vxGaussianPyramidNode",      __VA_ARGS__, fn_vxGaussianPyramidNode)), \
+    CT_EXPAND(nextmacro(testArgName "/vxCannyEdgeDetectorNode",    __VA_ARGS__, fn_vxCannyEdgeDetectorNode)), \
+    CT_EXPAND(nextmacro(testArgName "/vxHarrisCornersNode",        __VA_ARGS__, fn_vxHarrisCornersNode)), \
+    CT_EXPAND(nextmacro(testArgName "/vxHalfScaleGausianNode",     __VA_ARGS__, fn_vxHalfScaleGaussianNode)), \
+    CT_EXPAND(nextmacro(testArgName "/vxLaplacianPyramidNode",     __VA_ARGS__, fn_vxLaplacianPyramidNode)), \
+    CT_EXPAND(nextmacro(testArgName "/vxLaplacianReconstructNode", __VA_ARGS__, fn_vxLaplacianReconstructNode))
+
+#define RESOURCE_LEAKAGE_PARAMETERS \
+    CT_GENERATE_PARAMETERS("func", ADD_TEST_CASES, ARG, NULL)
+
+TEST_WITH_ARG(Graph, testVerifyGraphLeak, ResourceLeakage_Arg, RESOURCE_LEAKAGE_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    switch (arg_->test_id)
+    {
+    case fn_vxOpticalFlowPyrLKNode:     test_opticalflowpyrlk(context); break;
+    case fn_vxGaussianPyramidNode:      test_gaussianpyramid(context);  break;
+    case fn_vxCannyEdgeDetectorNode:    test_cannyedgedetector(context); break;
+    case fn_vxHarrisCornersNode:        test_harriscorners(context); break;
+    case fn_vxHalfScaleGaussianNode:    test_halfscalegaussian(context); break;
+    case fn_vxLaplacianPyramidNode:     test_laplacianpyramid(context); break;
+    case fn_vxLaplacianReconstructNode: test_laplacianreconstruct(context); break;
+    default: break;
+    }
+    return;
+}
+
+
+static vx_graph graph_to_abandon = NULL;
+static vx_status saved_graph_state_status = VX_FAILURE;
+static vx_bool saved_graph_state_queried = vx_false_e;
+static vx_enum saved_graph_state = VX_GRAPH_STATE_UNVERIFIED;
+
+static vx_action VX_CALLBACK abandon_graph(vx_node node)
+{
+    vx_action action = VX_ACTION_ABANDON;
+
+    if (graph_to_abandon != NULL)
+    {
+        saved_graph_state_status = vxQueryGraph(graph_to_abandon, VX_GRAPH_STATE, &saved_graph_state, sizeof(saved_graph_state));
+        saved_graph_state_queried = vx_true_e;
+    }
+
+    return action;
+}
+
+TEST(Graph, testGraphState)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    vx_enum graph_state = VX_GRAPH_STATE_UNVERIFIED;
+    int phase;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+    ASSERT(graph_state == VX_GRAPH_STATE_UNVERIFIED);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+    ASSERT(graph_state == VX_GRAPH_STATE_UNVERIFIED);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+    ASSERT(graph_state == VX_GRAPH_STATE_VERIFIED);
+
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+    ASSERT(graph_state == VX_GRAPH_STATE_UNVERIFIED);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+    ASSERT(graph_state == VX_GRAPH_STATE_VERIFIED);
+
+    for (phase = 0; phase < 2; ++phase)
+    {
+        vx_bool do_async = (vx_bool)(phase != 0);
+
+        if (do_async)
+        {
+            VX_CALL(vxScheduleGraph(graph));
+            VX_CALL(vxWaitGraph(graph));
+        }
+        else
+        {
+            VX_CALL(vxProcessGraph(graph));
+        }
+
+        VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+        ASSERT(graph_state == VX_GRAPH_STATE_COMPLETED);
+
+        graph_to_abandon = graph;
+        saved_graph_state_status = VX_FAILURE;
+        saved_graph_state_queried = vx_false_e;
+        saved_graph_state = VX_GRAPH_STATE_UNVERIFIED;
+
+        VX_CALL(vxAssignNodeCallback(node1, &abandon_graph));
+
+        if (do_async)
+        {
+            VX_CALL(vxScheduleGraph(graph));
+            ASSERT_EQ_VX_STATUS(VX_ERROR_GRAPH_ABANDONED, vxWaitGraph(graph));
+        }
+        else
+        {
+            ASSERT_EQ_VX_STATUS(VX_ERROR_GRAPH_ABANDONED, vxProcessGraph(graph));
+        }
+
+        ASSERT(saved_graph_state_queried == vx_true_e);
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, saved_graph_state_status);
+        ASSERT(saved_graph_state == VX_GRAPH_STATE_RUNNING);
+
+        VX_CALL(vxQueryGraph(graph, VX_GRAPH_STATE, &graph_state, sizeof(graph_state)));
+        ASSERT(graph_state == VX_GRAPH_STATE_ABANDONED);
+
+        VX_CALL(vxAssignNodeCallback(node1, NULL));
+    }
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+TESTCASE_TESTS(Graph,
+        testTwoNodes,
+        testGraphFactory,
+        testVirtualImage,
+        testVirtualArray,
+        testNodeRemove,
+        testNodeFromEnum,
+        testTwoNodesWithSameDst,
+        testCycle,
+        testCycle2,
+        testMultipleRun,
+        testMultipleRunAsync,
+        DISABLED_testAsyncWaitWithoutSchedule,
+        testNodePerformance,
+        testGraphPerformance,
+        testKernelName,
+        testAllocateUserKernelId,
+        testAllocateUserKernelLibraryId,
+        testReplicateNode,
+        testImageContainmentRelationship,
+        testVerifyGraphLeak,
+        testGraphState
+        )
diff --git a/test_conformance/test_graph_callbacks.c b/test_conformance/test_graph_callbacks.c
new file mode 100644
index 0000000..351619f
--- /dev/null
+++ b/test_conformance/test_graph_callbacks.c
@@ -0,0 +1,202 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(GraphCallback, CT_VXContext, ct_setup_vx_context, 0)
+
+static vx_bool own_cb_called = vx_false_e;
+static vx_action VX_CALLBACK own_node_callback_continue(vx_node node)
+{
+    own_cb_called = vx_true_e;
+    return VX_ACTION_CONTINUE;
+}
+static vx_action VX_CALLBACK own_node_callback_abandon(vx_node node)
+{
+    own_cb_called = vx_true_e;
+    return VX_ACTION_ABANDON;
+}
+
+TEST(GraphCallback, testContinue)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxAssignNodeCallback(node1, own_node_callback_continue));
+    ASSERT_EQ_PTR(own_node_callback_continue, vxRetrieveNodeCallback(node1));
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    own_cb_called = vx_false_e;
+    VX_CALL(vxProcessGraph(graph));
+    ASSERT(own_cb_called == vx_true_e);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+TEST(GraphCallback, testAbandon)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxAssignNodeCallback(node1, own_node_callback_abandon));
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    own_cb_called = vx_false_e;
+    EXPECT_EQ_VX_STATUS(VX_ERROR_GRAPH_ABANDONED, vxProcessGraph(graph));
+    ASSERT(own_cb_called == vx_true_e);
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+static vx_bool own_error = vx_false_e;
+static vx_bool own_cb1_called = vx_false_e;
+static vx_bool own_cb2_called = vx_false_e;
+static vx_action VX_CALLBACK own_callback1(vx_node node)
+{
+    //printf("callback1 called\n"); fflush(stdout);
+    own_cb1_called = vx_true_e;
+    if (own_cb2_called == vx_true_e)
+    {
+        own_error = vx_true_e;
+    }
+    return VX_ACTION_CONTINUE;
+}
+static vx_action VX_CALLBACK own_callback2(vx_node node)
+{
+    //printf("callback2 called\n"); fflush(stdout);
+    own_cb2_called = vx_true_e;
+    if (own_cb1_called != vx_true_e)
+    {
+        own_error = vx_true_e;
+    }
+    return VX_ACTION_CONTINUE;
+}
+
+typedef struct {
+    const char* testName;
+    vx_bool forward;
+} Arg;
+
+
+TEST_WITH_ARG(GraphCallback, testCallbackOrder, Arg,
+        CT_ARG("Forward", vx_true_e),
+        CT_ARG("Reverse", vx_false_e)
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    int i = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    if (arg_->forward == vx_true_e)
+    {
+        ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+        ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+    }
+    else
+    {
+        ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image, dst_image), VX_TYPE_NODE);
+        ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    }
+
+    VX_CALL(vxAssignNodeCallback(node1, own_callback1));
+    VX_CALL(vxAssignNodeCallback(node2, own_callback2));
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    for (i = 0; i < 10; i++)
+    {
+        own_cb1_called = vx_false_e;
+        own_cb2_called = vx_false_e;
+        own_error = vx_false_e;
+
+        VX_CALL(vxProcessGraph(graph));
+
+        ASSERT(own_cb1_called == vx_true_e);
+        ASSERT(own_cb2_called == vx_true_e);
+        ASSERT(own_error == vx_false_e);
+    }
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+TESTCASE_TESTS(GraphCallback,
+        testContinue,
+        testAbandon,
+        testCallbackOrder
+        )
diff --git a/test_conformance/test_graph_delay.c b/test_conformance/test_graph_delay.c
new file mode 100644
index 0000000..aa319fb
--- /dev/null
+++ b/test_conformance/test_graph_delay.c
@@ -0,0 +1,404 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(GraphDelay, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(GraphDelay, testSimple)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    int w = 128, h = 128;
+    vx_df_image f = VX_DF_IMAGE_U8;
+    vx_image images[3];
+    vx_node nodes[3];
+    vx_delay delay = 0;
+    int i;
+    vx_size delay_count = 0;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(images[0] = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(images[1] = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(images[2] = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(delay = vxCreateDelay(context, (vx_reference)images[0], 2), VX_TYPE_DELAY);
+
+    VX_CALL(vxQueryDelay(delay, VX_DELAY_SLOTS, &delay_count, sizeof(delay_count)));
+    ASSERT(delay_count == 2);
+
+    ASSERT_VX_OBJECT(nodes[0] = vxBox3x3Node(graph, images[0], (vx_image)vxGetReferenceFromDelay(delay, 0)), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(nodes[1] = vxMedian3x3Node(graph, (vx_image)vxGetReferenceFromDelay(delay, -1), images[1]), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(nodes[2] = vxGaussian3x3Node(graph, (vx_image)vxGetReferenceFromDelay(delay, -1), images[2]), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxAgeDelay(delay));
+
+    VX_CALL(vxProcessGraph(graph));
+
+    for (i = 0; i < 3; i++)
+    {
+        VX_CALL(vxReleaseNode(&nodes[i]));
+    }
+    for (i = 0; i < 3; i++)
+    {
+        VX_CALL(vxReleaseImage(&images[i]));
+    }
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseDelay(&delay));
+
+    ASSERT(graph == 0);
+    ASSERT(delay == 0);
+}
+
+TEST(GraphDelay, testPyramid)
+{
+    int w = 128, h = 128;
+    vx_df_image f = VX_DF_IMAGE_U8;
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_image input = 0;
+    vx_image output = 0;
+    vx_image image_pyr = 0;
+    vx_image image_node = 0;
+    vx_pyramid pyr = 0;
+    vx_delay delay = 0;
+    vx_node node_0 = 0;
+    vx_node node_1 = 0;
+    vx_parameter param = 0;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, w / 4, h / 4, f), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(pyr = vxCreatePyramid(context, 3, VX_SCALE_PYRAMID_HALF, w, h, f), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(delay = vxCreateDelay(context, (vx_reference)pyr, 2), VX_TYPE_DELAY);
+    VX_CALL(vxReleasePyramid(&pyr));
+    ASSERT(pyr == 0);
+
+    ASSERT_VX_OBJECT(pyr = (vx_pyramid)vxGetReferenceFromDelay(delay, 0), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(node_0 = vxGaussianPyramidNode(graph, input, pyr), VX_TYPE_NODE);
+
+    ASSERT_VX_OBJECT(image_pyr = vxGetPyramidLevel(pyr, 2), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(node_1 = vxMedian3x3Node(graph, image_pyr, output), VX_TYPE_NODE);
+    VX_CALL(vxReleaseImage(&image_pyr));
+    ASSERT(image_pyr == 0);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+    VX_CALL(vxAgeDelay(delay));
+
+    ASSERT_VX_OBJECT(pyr = (vx_pyramid)vxGetReferenceFromDelay(delay, 0), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(image_pyr = vxGetPyramidLevel(pyr, 2), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(node_1, 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &image_node, sizeof(image_node)));
+    VX_CALL(vxReleaseParameter(&param));
+
+    EXPECT_EQ_PTR(image_pyr, image_node);
+
+    VX_CALL(vxReleaseImage(&image_node));
+    VX_CALL(vxReleaseImage(&image_pyr));
+    ASSERT(image_node == 0);
+    ASSERT(image_pyr == 0);
+
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node_0));
+    VX_CALL(vxReleaseNode(&node_1));
+    ASSERT(node_0 == 0);
+    ASSERT(node_1 == 0);
+
+    VX_CALL(vxReleaseDelay(&delay));
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(graph == 0);
+    ASSERT(delay == 0);
+    ASSERT(input == 0);
+    ASSERT(output == 0);
+}
+
+TEST(GraphDelay, testRegisterAutoAging)
+{
+    int i, w = 128, h = 128;
+    vx_df_image f = VX_DF_IMAGE_U8;
+    vx_context context = context_->vx_context_;
+    vx_graph graph_0 = 0;
+    vx_graph graph_1 = 0;
+    vx_image images[3];
+    vx_node nodes[3];
+    vx_delay delay = 0;
+    vx_image delay_image_0 = 0;
+    vx_image delay_image_1 = 0;
+    vx_image node_image = 0;
+    vx_parameter param = 0;
+    vx_imagepatch_addressing_t addr;
+    vx_uint8 *pdata = 0;
+    vx_rectangle_t rect = {0, 0, 1, 1};
+    vx_map_id map_id;
+
+    ASSERT_VX_OBJECT(graph_0 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(graph_1 = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(images[0] = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(images[1] = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(images[2] = vxCreateImage(context, w, h, f), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(delay = vxCreateDelay(context, (vx_reference)images[0], 2), VX_TYPE_DELAY);
+
+    ASSERT_VX_OBJECT(delay_image_0 = (vx_image)vxGetReferenceFromDelay(delay, 0), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(delay_image_1 = (vx_image)vxGetReferenceFromDelay(delay,-1), VX_TYPE_IMAGE);
+
+
+    /* image[0] gets 1 */
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(images[0], &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    *pdata = 1;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(images[0], map_id));
+
+    /* Initialize the each delay slots with different values */
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(delay_image_0, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    /* Slot 0 gets 10 */
+    *pdata = 10;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(delay_image_0, map_id));
+
+    /* Slot -1 gets 2 */
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(delay_image_1, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    *pdata = 2;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(delay_image_1, map_id));
+
+    ASSERT_VX_OBJECT(nodes[0] = vxAddNode(graph_0, images[0], (vx_image)vxGetReferenceFromDelay(delay, -1), VX_CONVERT_POLICY_WRAP, (vx_image)vxGetReferenceFromDelay(delay, 0)), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(nodes[1] = vxGaussian3x3Node(graph_0, (vx_image)vxGetReferenceFromDelay(delay, -1), images[1]), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(nodes[2] = vxGaussian3x3Node(graph_1, (vx_image)vxGetReferenceFromDelay(delay, 0), images[2]), VX_TYPE_NODE);
+
+    VX_CALL(vxRegisterAutoAging(graph_0, delay));
+    VX_CALL(vxRegisterAutoAging(graph_1, delay));
+    VX_CALL(vxVerifyGraph(graph_0));
+    VX_CALL(vxVerifyGraph(graph_1));
+
+    /* 1 + 2 (slot -1) -> 3 (slot 0) */
+    /* Ageing shifts slots: slot -1 = 3 ; slot 0 = 2 */
+    VX_CALL(vxProcessGraph(graph_0));
+
+    /* check if delay was really aged */
+
+    /* Slot 0 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[0], 3), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 2);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot -1 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[0], 1), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 3);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot -1 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[1], 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 3);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot 0 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[2], 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 2);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* check auto-aging multiple registration */
+    VX_CALL(vxRegisterAutoAging(graph_0, delay)); /* Register auto-ageing a second time */
+    VX_CALL(vxVerifyGraph(graph_0));
+    VX_CALL(vxProcessGraph(graph_0));
+
+    /* the delay must be aged once */
+    /* 1 + 3 (slot -1) -> 4 (slot 0) */
+    /* Ageing shifts slots: slot -1 = 4 ; slot 0 = 3 */
+
+    /* Slot 0 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[0], 3), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    VX_CALL(vxReleaseParameter(&param));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 3);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    ASSERT(node_image == 0);
+
+    /* Slot -1 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[0], 1), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 4);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot -1 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[1], 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 4);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot 0 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[2], 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 3);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* check second graph */
+    VX_CALL(vxProcessGraph(graph_1));
+
+    /* the delay must be aged once more */
+    /* Ageing shifts slots: slot -1 = 3 ; slot 0 = 4 */
+
+    /* Slot 0 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[0], 3), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    VX_CALL(vxReleaseParameter(&param));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 4);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    ASSERT(node_image == 0);
+
+    /* Slot -1 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[0], 1), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 3);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot -1 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[1], 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 3);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    /* Slot 0 */
+    ASSERT_VX_OBJECT(param = vxGetParameterByIndex(nodes[2], 0), VX_TYPE_PARAMETER);
+    VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &node_image, sizeof(node_image)));
+    pdata = NULL;
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapImagePatch(node_image, &rect, 0, &map_id, &addr, (void **)&pdata,
+                                                    VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT(*pdata == 4);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapImagePatch(node_image, map_id));
+    VX_CALL(vxReleaseImage(&node_image));
+    VX_CALL(vxReleaseParameter(&param));
+    ASSERT(node_image == 0);
+    ASSERT(param == 0);
+
+    for (i = 0; i < (sizeof(nodes)/sizeof(nodes[0])); i++)
+    {
+        VX_CALL(vxReleaseNode(&nodes[i]));
+    }
+
+    for (i = 0; i < (sizeof(images)/sizeof(images[0])); i++)
+    {
+        VX_CALL(vxReleaseImage(&images[i]));
+    }
+
+    VX_CALL(vxReleaseGraph(&graph_0));
+    VX_CALL(vxReleaseGraph(&graph_1));
+    VX_CALL(vxReleaseDelay(&delay));
+
+    ASSERT(graph_0 == 0);
+    ASSERT(graph_1 == 0);
+    ASSERT(delay == 0);
+}
+
+TESTCASE_TESTS(
+    GraphDelay,
+    testSimple,
+    testPyramid,
+    testRegisterAutoAging
+    )
diff --git a/test_conformance/test_graph_roi.c b/test_conformance/test_graph_roi.c
new file mode 100644
index 0000000..4ffb735
--- /dev/null
+++ b/test_conformance/test_graph_roi.c
@@ -0,0 +1,153 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(GraphROI, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(GraphROI, testSimple)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, interm_image_roi = 0, dst_image = 0;
+    vx_rectangle_t rect = { 10, 10, 118, 118 };
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 108, 108, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image_roi = vxCreateImageFromROI(interm_image, &rect), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 108, 108, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image_roi), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image_roi, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image_roi));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+
+static vx_bool own_error = vx_false_e;
+static vx_bool own_cb1_called = vx_false_e;
+static vx_bool own_cb2_called = vx_false_e;
+static vx_action VX_CALLBACK own_callback1(vx_node node)
+{
+    // printf("callback1 called\n"); fflush(stdout);
+    own_cb1_called = vx_true_e;
+    if (own_cb2_called == vx_true_e)
+    {
+        own_error = vx_true_e;
+    }
+    return VX_ACTION_CONTINUE;
+}
+static vx_action VX_CALLBACK own_callback2(vx_node node)
+{
+    // printf("callback2 called\n"); fflush(stdout);
+    own_cb2_called = vx_true_e;
+    if (own_cb1_called != vx_true_e)
+    {
+        own_error = vx_true_e;
+    }
+    return VX_ACTION_CONTINUE;
+}
+
+typedef struct {
+    const char* testName;
+    vx_bool forward;
+} Arg;
+
+
+TEST_WITH_ARG(GraphROI, testCallbackOrder, Arg,
+        CT_ARG("Forward", vx_true_e),
+        CT_ARG("Reverse", vx_false_e)
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, interm_image = 0, interm_image_roi = 0, dst_image = 0;
+    vx_rectangle_t rect = { 10, 10, 118, 118 };
+    vx_graph graph = 0;
+    vx_node node1 = 0, node2 = 0;
+    int i = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(interm_image_roi = vxCreateImageFromROI(interm_image, &rect), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 108, 108, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    if (arg_->forward == vx_true_e)
+    {
+        ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+        ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image_roi, dst_image), VX_TYPE_NODE);
+    }
+    else
+    {
+        ASSERT_VX_OBJECT(node2 = vxIntegralImageNode(graph, interm_image_roi, dst_image), VX_TYPE_NODE);
+        ASSERT_VX_OBJECT(node1 = vxBox3x3Node(graph, src_image, interm_image), VX_TYPE_NODE);
+    }
+
+    VX_CALL(vxAssignNodeCallback(node1, own_callback1));
+    VX_CALL(vxAssignNodeCallback(node2, own_callback2));
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    for (i = 0; i < 10; i++)
+    {
+        own_cb1_called = vx_false_e;
+        own_cb2_called = vx_false_e;
+        own_error = vx_false_e;
+
+        VX_CALL(vxProcessGraph(graph));
+
+        ASSERT(own_cb1_called == vx_true_e);
+        ASSERT(own_cb2_called == vx_true_e);
+        EXPECT(own_error == vx_false_e);
+    }
+
+    VX_CALL(vxReleaseNode(&node1));
+    VX_CALL(vxReleaseNode(&node2));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&interm_image_roi));
+    VX_CALL(vxReleaseImage(&interm_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node1 == 0); ASSERT(node2 == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0); ASSERT(interm_image == 0); ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(GraphROI,
+        testSimple,
+        testCallbackOrder
+        )
diff --git a/test_conformance/test_halfscalegaussian.c b/test_conformance/test_halfscalegaussian.c
new file mode 100644
index 0000000..1181b7e
--- /dev/null
+++ b/test_conformance/test_halfscalegaussian.c
@@ -0,0 +1,322 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include <math.h> // floor
+
+#define HALFSCALEGAUSSIAN_TOLERANCE 1
+
+TESTCASE(HalfScaleGaussian, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(HalfScaleGaussian, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 64, 64, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxHalfScaleGaussianNode(graph, src_image, dst_image, 3), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+static CT_Image halfScaleGaussian_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image halfScaleGaussian_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int32_t simple_get(CT_Image src, int32_t x, int32_t y, vx_border_t border,
+        vx_df_image dst_format)
+{
+    int32_t value = 0;
+    int valid_values = 0;
+
+    ASSERT_NO_FAILURE_(return -1,
+            valid_values = ct_image_read_rect_S32(src, &value, x, y, x, y, border));
+
+    if (valid_values == 0)
+        return INT32_MIN;
+
+    if (dst_format == VX_DF_IMAGE_U8)
+    {
+        if (value < 0) value = 0;
+        else if (value > UINT8_MAX) value = UINT8_MAX;
+    }
+
+    return value;
+}
+
+#define MAX_CONV_SIZE 15
+
+static int32_t convolve_get(CT_Image src, int32_t x, int32_t y, vx_border_t border,
+        int cols, int rows, vx_int16* data, vx_int32 scale, vx_df_image dst_format)
+{
+    int i;
+    int32_t sum = 0, value = 0;
+    int32_t src_data[MAX_CONV_SIZE * MAX_CONV_SIZE] = { 0 };
+    int valid_values = 0;
+
+    ASSERT_(return -1, cols <= MAX_CONV_SIZE);
+    ASSERT_(return -1, rows <= MAX_CONV_SIZE);
+
+    ASSERT_NO_FAILURE_(return -1,
+            valid_values = ct_image_read_rect_S32(src, src_data, x - cols / 2, y - rows / 2, x + cols / 2, y + rows / 2, border));
+
+    if (valid_values == 0)
+        return INT32_MIN;
+
+    for (i = 0; i < cols * rows; ++i)
+        sum += src_data[i] * data[i];
+
+    value = sum / scale;
+
+    if (dst_format == VX_DF_IMAGE_U8)
+    {
+        if (value < 0) value = 0;
+        else if (value > UINT8_MAX) value = UINT8_MAX;
+    }
+
+    return value;
+}
+
+static vx_int16 gaussian3x3_kernel[9] = {
+        1, 2, 1,
+        2, 4, 2,
+        1, 2, 1
+};
+static const vx_int32 gaussian3x3_scale = 16;
+
+static vx_int16 gaussian5x5_kernel[25] = {
+        1,  4,  6,  4, 1,
+        4, 16, 24, 16, 4,
+        6, 24, 36, 24, 6,
+        4, 16, 24, 16, 4,
+        1,  4,  6,  4, 1
+};
+static const vx_int32 gaussian5x5_scale = 256;
+
+static int32_t halfScaleGaussian_get_pixel(CT_Image src, int x, int y, vx_int32 kernel_size, vx_border_t border)
+{
+    if (kernel_size == 1)
+    {
+        int32_t res = simple_get(src, x, y, border, VX_DF_IMAGE_U8);
+        return res;
+    }
+    else if (kernel_size == 3)
+    {
+        int32_t res = convolve_get(src, x, y, border, 3, 3, gaussian3x3_kernel, gaussian3x3_scale, VX_DF_IMAGE_U8);
+        return res;
+    }
+    else if (kernel_size == 5)
+    {
+        int32_t res = convolve_get(src, x, y, border, 5, 5, gaussian5x5_kernel, gaussian5x5_scale, VX_DF_IMAGE_U8);
+        return res;
+    }
+    CT_FAIL_(return -1, "Invalid kernel size");
+}
+
+static int halfScaleGaussian_check_pixel(CT_Image src, CT_Image dst, int x, int y, vx_int32 kernel_size, vx_border_t border)
+{
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(dst, x, y);
+    vx_float64 x_src = (((vx_float64)x + 0.5f) * (vx_float64)src->width / (vx_float64)dst->width) - 0.5f;
+    vx_float64 y_src = (((vx_float64)y + 0.5f) * (vx_float64)src->height / (vx_float64)dst->height) - 0.5f;
+    int x_min = (int)floor(x_src), y_min = (int)floor(y_src);
+    int sx, sy;
+    for (sy = -1; sy <= 1; sy++)
+    {
+        for (sx = -1; sx <= 1; sx++)
+        {
+            vx_int32 candidate = 0;
+            ASSERT_NO_FAILURE_(return 0, candidate = halfScaleGaussian_get_pixel(src, x_min + sx, y_min + sy, kernel_size, border));
+            if (candidate < 0 || abs(candidate - res) <= HALFSCALEGAUSSIAN_TOLERANCE)
+                return 1;
+        }
+    }
+#if 0
+    for (sy = -1; sy <= 1; sy++)
+    {
+        for (sx = -1; sx <= 1; sx++)
+        {
+            vx_int32 candidate = 0;
+            ASSERT_NO_FAILURE_(return 0, candidate = halfScaleGaussian_get_pixel(src, x_min + sx, y_min + sy, kernel_size, border));
+            printf("Check failed for pixel (%d+%d, %d+%d): %d\n", x, sx, y, sy, (int)candidate);
+        }
+    }
+#endif
+    CT_FAIL_(return 0, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+}
+
+static void halfScaleGaussian_validate(CT_Image src, CT_Image dst, vx_int32 kernel_size, vx_border_t border)
+{
+    ASSERT(src && dst);
+    CT_FILL_IMAGE_8U(, dst,
+            {
+                ASSERT_NO_FAILURE(halfScaleGaussian_check_pixel(src, dst, x, y, kernel_size, border));
+            });
+}
+
+static void halfScaleGaussian_check(CT_Image src, CT_Image dst, vx_int32 kernel_size, vx_border_t border)
+{
+    ASSERT(src && dst);
+    EXPECT_EQ_INT((int)ceil(src->width * 0.5), dst->width);
+    EXPECT_EQ_INT((int)ceil(src->height * 0.5), dst->height);
+    halfScaleGaussian_validate(src, dst, kernel_size, border);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info_ex(src, 16, 8);
+        printf("=== DST ===\n");
+        ct_dump_image_info_ex(dst, 16, 8);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    int width, height;
+    vx_int32 kernel_size;
+    vx_border_t border;
+} Arg;
+
+
+#define ADD_KERNEL_SIZE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/k=1", __VA_ARGS__, 1)), \
+    CT_EXPAND(nextmacro(testArgName "/k=3", __VA_ARGS__, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/k=5", __VA_ARGS__, 5))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_KERNEL_SIZE, ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ARG, halfScaleGaussian_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_SIZE_NONE, ADD_KERNEL_SIZE, ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ARG, halfScaleGaussian_read_image, "lena.bmp"), \
+
+TEST_WITH_ARG(HalfScaleGaussian, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    int dst_width = 0, dst_height = 0;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_width = (src->width + 1) / 2;
+    dst_height = (src->height + 1) / 2;
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, dst_width, dst_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxHalfScaleGaussianNode(graph, src_image, dst_image, arg_->kernel_size), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &arg_->border, sizeof(arg_->border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(halfScaleGaussian_check(src, dst, arg_->kernel_size, arg_->border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(HalfScaleGaussian, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    int dst_width = 0, dst_height = 0;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_width = (src->width + 1) / 2;
+    dst_height = (src->height + 1) / 2;
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, dst_width, dst_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &arg_->border, sizeof(arg_->border)));
+
+    VX_CALL(vxuHalfScaleGaussian(context, src_image, dst_image, arg_->kernel_size));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(halfScaleGaussian_check(src, dst, arg_->kernel_size, arg_->border));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(HalfScaleGaussian,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing)
diff --git a/test_conformance/test_harriscorners.c b/test_conformance/test_harriscorners.c
new file mode 100644
index 0000000..5ad0f83
--- /dev/null
+++ b/test_conformance/test_harriscorners.c
@@ -0,0 +1,419 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <float.h>
+#include <math.h>
+
+#define PTS_SEARCH_RADIUS   5
+
+TESTCASE(HarrisCorners, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(HarrisCorners, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    vx_float32 strength_thresh = 0.001f;
+    vx_float32 min_distance = 3.f;
+    vx_float32 sensitivity = 0.04f;
+    vx_size num_corners = 100;
+
+    vx_scalar strength_thresh_scalar, min_distance_scalar, sensitivity_scalar, num_corners_scalar;
+    vx_array corners;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(strength_thresh_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &strength_thresh), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(min_distance_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &min_distance), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(sensitivity_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &sensitivity), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(num_corners_scalar = vxCreateScalar(context, VX_TYPE_SIZE, &num_corners), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(corners = vxCreateArray(context, VX_TYPE_KEYPOINT, 100), VX_TYPE_ARRAY);
+
+    ASSERT_VX_OBJECT(node = vxHarrisCornersNode(graph, input, strength_thresh_scalar, min_distance_scalar, sensitivity_scalar, 3, 3, corners, num_corners_scalar), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseArray(&corners));
+    VX_CALL(vxReleaseScalar(&num_corners_scalar));
+    VX_CALL(vxReleaseScalar(&sensitivity_scalar));
+    VX_CALL(vxReleaseScalar(&min_distance_scalar));
+    VX_CALL(vxReleaseScalar(&strength_thresh_scalar));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(corners == 0);
+    ASSERT(num_corners_scalar == 0);
+    ASSERT(sensitivity_scalar == 0);
+    ASSERT(min_distance_scalar == 0);
+    ASSERT(strength_thresh_scalar == 0);
+    ASSERT(input == 0);
+}
+
+typedef struct {
+    vx_size         num_corners;
+    vx_float32      strength_thresh;
+    vx_keypoint_t   *pts;
+} TruthData;
+
+static vx_size harris_corner_read_line(const char *data, char *line)
+{
+    const char* ptr = data;
+    int pos_temp = 0;
+    while (*ptr && *ptr != '\n')
+    {
+        line[pos_temp] = *ptr;
+        pos_temp++; ptr++;
+    }
+    line[pos_temp] = 0;
+    return (ptr - data);
+}
+
+static void harris_corner_read_truth_data(const char *file_path, TruthData *truth_data, float strengthScale)
+{
+    FILE* f;
+    long sz;
+    void* buf; char* ptr;
+    char temp[1024];
+    vx_size ln_size = 0;
+    vx_size pts_count = 0;
+    vx_keypoint_t *pt;
+
+    ASSERT(truth_data && file_path);
+
+    f = fopen(file_path, "rb");
+    ASSERT(f);
+    fseek(f, 0, SEEK_END);
+    sz = ftell(f);
+    ASSERT(sz);
+    fseek(f, 0, SEEK_SET);
+
+    ASSERT(buf = ct_alloc_mem(sz + 1));
+    ASSERT(sz == fread(buf, 1, sz, f));
+
+    fclose(f);
+
+    ptr = (char *)buf;
+    ptr[sz] = 0;
+    ln_size = harris_corner_read_line(ptr, temp);
+    ASSERT(ln_size);
+    truth_data->num_corners = atoi(temp);
+    ASSERT(truth_data->num_corners);
+    ptr+= ln_size + 1;
+
+    ASSERT(truth_data->pts = (vx_keypoint_t *)ct_alloc_mem(truth_data->num_corners * sizeof(vx_keypoint_t)));
+    pt = truth_data->pts;
+    for (;pts_count < truth_data->num_corners; ptr += ln_size + 1, pt++, pts_count++)
+    {
+        ln_size = harris_corner_read_line(ptr, temp);
+        if (0 == ln_size)
+            break;
+        sscanf(temp, "%d %d %f", &pt->x, &pt->y, &pt->strength);
+        pt->strength *= strengthScale;
+    }
+    ct_free_mem(buf);
+
+    ASSERT(pts_count == truth_data->num_corners);
+    truth_data->strength_thresh = truth_data->pts[truth_data->num_corners - 1].strength - FLT_EPSILON;
+}
+
+static int harris_corner_search_truth_point(vx_int32 x, vx_int32 y, vx_float32 strength, const TruthData *truth_data)
+{
+    vx_int32 xmin = x - PTS_SEARCH_RADIUS;
+    vx_int32 xmax = x + PTS_SEARCH_RADIUS;
+    vx_int32 ymin = y - PTS_SEARCH_RADIUS;
+    vx_int32 ymax = y + PTS_SEARCH_RADIUS;
+    vx_size num;
+    if (FLT_MIN >= strength)
+        return 1;
+    for (num = 0; num < truth_data->num_corners; num++)
+    {
+        if ((xmin <= truth_data->pts[num].x) && (truth_data->pts[num].x <= xmax) &&
+            (ymin <= truth_data->pts[num].y) && (truth_data->pts[num].y <= ymax))
+        {
+            if (fabs(log10(truth_data->pts[num].strength/strength)) < 1.1)
+                return 0;
+        }
+    }
+    return 1;
+}
+
+static int harris_corner_search_test_point(vx_int32 x, vx_int32 y, vx_float32 strength, char *test_pts, vx_size pts_stride, vx_size num_pts)
+{
+    vx_int32 xmin = x - PTS_SEARCH_RADIUS;
+    vx_int32 xmax = x + PTS_SEARCH_RADIUS;
+    vx_int32 ymin = y - PTS_SEARCH_RADIUS;
+    vx_int32 ymax = y + PTS_SEARCH_RADIUS;
+    vx_size num;
+    vx_keypoint_t *pt = NULL;
+    if (FLT_MIN >= strength)
+        return 1;
+    for (num = 0; num < num_pts; num++, test_pts += pts_stride)
+    {
+        pt = (vx_keypoint_t *)test_pts;
+        if ((xmin <= pt->x) && (pt->x <= xmax) &&
+            (ymin <= pt->y) && (pt->y <= ymax))
+        {
+            if (fabs(log10(pt->strength / strength)) < 1.1)
+                return 0;
+        }
+    }
+    return 1;
+}
+
+static void harris_corner_check(vx_array corners, const TruthData *truth_data)
+{
+    vx_enum type;
+    vx_size i, num_corners, stride;
+    char *pts = NULL;
+    char *pts_ptr = NULL;
+    vx_keypoint_t *pt = NULL;
+    vx_int32 fail_count = 0;
+    vx_map_id map_id;
+
+    ASSERT(corners && truth_data);
+    ASSERT(VX_SUCCESS == vxQueryArray(corners, VX_ARRAY_ITEMTYPE, &type, sizeof(type)));
+    ASSERT(VX_TYPE_KEYPOINT == type);
+
+    ASSERT(VX_SUCCESS == vxQueryArray(corners, VX_ARRAY_NUMITEMS, &num_corners, sizeof(num_corners)));
+
+    ASSERT(num_corners);
+    ASSERT(VX_SUCCESS == vxMapArrayRange(corners, 0, num_corners, &map_id, &stride, (void**)&pts, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+
+    pts_ptr = pts;
+    for (i = 0; i < num_corners; i++, pts_ptr += stride)
+    {
+        pt = (vx_keypoint_t *)pts_ptr;
+        ASSERT(pt->tracking_status == 1);
+        if (harris_corner_search_truth_point(pt->x, pt->y, pt->strength, truth_data))
+            fail_count++;
+    }
+    if (100 * fail_count > 10 * (vx_int32)i)
+    {
+        CT_FAIL_(goto cleanup, "Too much (%d) test points, which don't have corresponding truth data points", fail_count);
+    }
+    fail_count = 0;
+    for (i = 0; i < truth_data->num_corners; i++)
+    {
+        if (harris_corner_search_test_point(truth_data->pts[i].x, truth_data->pts[i].y, truth_data->pts[i].strength, pts, stride, num_corners))
+            fail_count++;
+    }
+    if (100 * fail_count > 10 * (vx_int32)i)
+    {
+        CT_FAIL_(goto cleanup, "Too much (%d) truth data points, which don't have corresponding test points", fail_count);
+    }
+
+cleanup:
+    vxUnmapArrayRange(corners, map_id);
+}
+
+typedef struct {
+    const char* testName;
+    const char* filePrefix;
+    vx_float32 min_distance;
+    vx_float32 sensitivity;
+    vx_int32  gradient_size;
+    vx_int32  block_size;
+} Arg;
+
+#define ADD_VX_MIN_DISTANCE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/MIN_DISTANCE=0.0", __VA_ARGS__, 0.0f)), \
+    CT_EXPAND(nextmacro(testArgName "/MIN_DISTANCE=3.0", __VA_ARGS__, 3.0f)), \
+    CT_EXPAND(nextmacro(testArgName "/MIN_DISTANCE=5.0", __VA_ARGS__, 5.0f)), \
+    CT_EXPAND(nextmacro(testArgName "/MIN_DISTANCE=30.0", __VA_ARGS__, 30.0f))
+
+#define ADD_VX_SENSITIVITY(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/SENSITIVITY=0.04", __VA_ARGS__, 0.04f)), \
+    CT_EXPAND(nextmacro(testArgName "/SENSITIVITY=0.10", __VA_ARGS__, 0.10f)), \
+    CT_EXPAND(nextmacro(testArgName "/SENSITIVITY=0.15", __VA_ARGS__, 0.15f))
+
+#define ADD_VX_GRADIENT_SIZE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/GRADIENT_SIZE=3", __VA_ARGS__, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/GRADIENT_SIZE=5", __VA_ARGS__, 5)), \
+    CT_EXPAND(nextmacro(testArgName "/GRADIENT_SIZE=7", __VA_ARGS__, 7))
+
+
+#define ADD_VX_BLOCK_SIZE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/BLOCK_SIZE=3", __VA_ARGS__, 3)), \
+    CT_EXPAND(nextmacro(testArgName "/BLOCK_SIZE=5", __VA_ARGS__, 5)), \
+    CT_EXPAND(nextmacro(testArgName "/BLOCK_SIZE=7", __VA_ARGS__, 7))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("few_strong_corners",  ADD_VX_MIN_DISTANCE, ADD_VX_SENSITIVITY, ADD_VX_GRADIENT_SIZE, ADD_VX_BLOCK_SIZE, ARG, "hc_fsc"), \
+    CT_GENERATE_PARAMETERS("many_strong_corners", ADD_VX_MIN_DISTANCE, ADD_VX_SENSITIVITY, ADD_VX_GRADIENT_SIZE, ADD_VX_BLOCK_SIZE, ARG, "hc_msc")
+
+TEST_WITH_ARG(HarrisCorners, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_image input_image = 0;
+    vx_float32 strength_thresh;
+    vx_float32 min_distance = arg_->min_distance + FLT_EPSILON;
+    vx_float32 sensitivity = arg_->sensitivity;
+    vx_size num_corners;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    size_t sz;
+
+    vx_scalar strength_thresh_scalar, min_distance_scalar, sensitivity_scalar, num_corners_scalar;
+    vx_array corners;
+
+    char filepath[MAXPATHLENGTH];
+
+    CT_Image input = NULL;
+    TruthData truth_data;
+
+    double scale = 1.0 / ((1 << (arg_->gradient_size - 1)) * arg_->block_size * 255.0);
+    scale = scale * scale * scale * scale;
+
+    sz = snprintf(filepath, MAXPATHLENGTH, "%s/harriscorners/%s_%0.2f_%0.2f_%d_%d.txt", ct_get_test_file_path(), arg_->filePrefix, arg_->min_distance, arg_->sensitivity, arg_->gradient_size, arg_->block_size);
+    ASSERT(sz < MAXPATHLENGTH);
+    ASSERT_NO_FAILURE(harris_corner_read_truth_data(filepath, &truth_data, (float)scale));
+
+    strength_thresh = truth_data.strength_thresh;
+
+    sprintf(filepath, "harriscorners/%s.bmp", arg_->filePrefix);
+
+    ASSERT_NO_FAILURE(input = ct_read_image(filepath, 1));
+    ASSERT(input && (input->format == VX_DF_IMAGE_U8));
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    num_corners = input->width * input->height / 10;
+
+    ASSERT_VX_OBJECT(strength_thresh_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &strength_thresh), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(min_distance_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &min_distance), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(sensitivity_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &sensitivity), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(num_corners_scalar = vxCreateScalar(context, VX_TYPE_SIZE, &num_corners), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(corners = vxCreateArray(context, VX_TYPE_KEYPOINT, num_corners), VX_TYPE_ARRAY);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxHarrisCornersNode(graph, input_image, strength_thresh_scalar, min_distance_scalar,
+                                                sensitivity_scalar, arg_->gradient_size, arg_->block_size, corners,
+                                                num_corners_scalar), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    CT_ASSERT_NO_FAILURE_(, harris_corner_check(corners, &truth_data));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    ct_free_mem(truth_data.pts); truth_data.pts = 0;
+    VX_CALL(vxReleaseArray(&corners));
+    VX_CALL(vxReleaseScalar(&num_corners_scalar));
+    VX_CALL(vxReleaseScalar(&sensitivity_scalar));
+    VX_CALL(vxReleaseScalar(&min_distance_scalar));
+    VX_CALL(vxReleaseScalar(&strength_thresh_scalar));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(truth_data.pts == 0);
+    ASSERT(corners == 0);
+    ASSERT(num_corners_scalar == 0);
+    ASSERT(sensitivity_scalar == 0);
+    ASSERT(min_distance_scalar == 0);
+    ASSERT(strength_thresh_scalar == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(HarrisCorners, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_image input_image = 0;
+    vx_float32 strength_thresh;
+    vx_float32 min_distance = arg_->min_distance + FLT_EPSILON;
+    vx_float32 sensitivity = arg_->sensitivity;
+    vx_size num_corners;
+    int sz = 0;
+
+    vx_scalar strength_thresh_scalar, min_distance_scalar, sensitivity_scalar, num_corners_scalar;
+    vx_array corners;
+
+    char filepath[MAXPATHLENGTH];
+
+    CT_Image input = NULL;
+    TruthData truth_data;
+
+    double scale = 1.0 / ((1 << (arg_->gradient_size - 1)) * arg_->block_size * 255.0);
+    scale = scale * scale * scale * scale;
+
+    sz = snprintf(filepath, MAXPATHLENGTH, "%s/harriscorners/%s_%0.2f_%0.2f_%d_%d.txt", ct_get_test_file_path(), arg_->filePrefix, arg_->min_distance, arg_->sensitivity, arg_->gradient_size, arg_->block_size);
+    ASSERT(sz < MAXPATHLENGTH);
+    ASSERT_NO_FAILURE(harris_corner_read_truth_data(filepath, &truth_data, (float)scale));
+
+    strength_thresh = truth_data.strength_thresh;
+
+    sprintf(filepath, "harriscorners/%s.bmp", arg_->filePrefix);
+
+    ASSERT_NO_FAILURE(input = ct_read_image(filepath, 1));
+    ASSERT(input && (input->format == VX_DF_IMAGE_U8));
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    num_corners = input->width * input->height / 10;
+
+    ASSERT_VX_OBJECT(strength_thresh_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &strength_thresh), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(min_distance_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &min_distance), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(sensitivity_scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &sensitivity), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(num_corners_scalar = vxCreateScalar(context, VX_TYPE_SIZE, &num_corners), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(corners = vxCreateArray(context, VX_TYPE_KEYPOINT, num_corners), VX_TYPE_ARRAY);
+
+    VX_CALL(vxuHarrisCorners(context, input_image, strength_thresh_scalar, min_distance_scalar, sensitivity_scalar, arg_->gradient_size, arg_->block_size, corners, num_corners_scalar));
+
+    CT_ASSERT_NO_FAILURE_(, harris_corner_check(corners, &truth_data));
+
+    ct_free_mem(truth_data.pts); truth_data.pts = 0;
+    VX_CALL(vxReleaseArray(&corners));
+    VX_CALL(vxReleaseScalar(&num_corners_scalar));
+    VX_CALL(vxReleaseScalar(&sensitivity_scalar));
+    VX_CALL(vxReleaseScalar(&min_distance_scalar));
+    VX_CALL(vxReleaseScalar(&strength_thresh_scalar));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(truth_data.pts == 0);
+    ASSERT(corners == 0);
+    ASSERT(num_corners_scalar == 0);
+    ASSERT(sensitivity_scalar == 0);
+    ASSERT(min_distance_scalar == 0);
+    ASSERT(strength_thresh_scalar == 0);
+    ASSERT(input_image == 0);
+}
+
+
+TESTCASE_TESTS(HarrisCorners,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_histogram.c b/test_conformance/test_histogram.c
new file mode 100644
index 0000000..e2b0f68
--- /dev/null
+++ b/test_conformance/test_histogram.c
@@ -0,0 +1,307 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+static void reference_histogram(CT_Image src, int32_t* hist, int nbins, int offset, int range)
+{
+    int i, hist0[256];
+    uint32_t x, y, width = src->width, height = src->height, stride;
+
+    ASSERT(src);
+    ASSERT(src->format == VX_DF_IMAGE_U8);
+    ASSERT(src->width > 0 && src->height > 0);
+    stride = ct_stride_bytes(src);
+
+    for( i = 0; i < 256; i++ )
+        hist0[i] = 0;
+
+    for( y = 0; y < height; y++ )
+    {
+        const uint8_t* ptr = src->data.y + y*stride;
+        for( x = 0; x < width; x++ )
+            hist0[ptr[x]]++;
+    }
+
+    for( i = 0; i < nbins; i++ )
+        hist[i] = 0;
+
+    for( i = offset; i < offset + range; i++ )
+    {
+        int j = (i - offset)*nbins/range;
+        hist[j] = (int32_t)(hist[j] + hist0[i]);
+    }
+}
+
+static vx_uint32 reference_window(vx_uint32 range, vx_size nbins)
+{
+    vx_uint32 test_window = (vx_uint32)(range / nbins);
+    if (test_window*nbins == range)
+        return test_window;
+    else
+        return 0;
+}
+
+static void reverse_histogram(int nbins, int32_t hist[])
+{
+    int i, j;
+    for (i = 0, j = nbins-1; i < j; ++i, --j)
+    {
+        int32_t a = hist[i];
+        int32_t b = hist[j];
+        hist[i] = b;
+        hist[j] = a;
+    }
+}
+
+TESTCASE(Histogram, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_df_image format;
+} format_arg;
+
+#define MAX_BINS 256
+
+#define HIST_TEST_CASE(imm, tp) \
+    {#imm "/" #tp, CT_##imm##_MODE, VX_DF_IMAGE_##tp}
+
+#define COMPARE_HISTOGRAMS(_equal, _hist0, _hist1) \
+    do { \
+        _equal = 1; \
+        int _i; \
+        for( _i = 0; _i < nbins; _i++ ) \
+        { \
+            if( _hist0[_i] != _hist1[_i] ) \
+            { \
+                _equal = 0; \
+                CT_RecordFailureAtFormat("Test case %d. width=%d, height=%d, nbins=%d, offset=%d, range=%d\n" \
+                                         "\tExpected: %s[%d]=%d\n" \
+                                         "\tActual:   %s[%d]=%d\n", \
+                                         __FUNCTION__, __FILE__, __LINE__, \
+                                         iter, width, height, nbins, offset, range, \
+                                         #_hist1, _i, _hist0[_i], #_hist1, _i, _hist1[_i]); \
+                break; \
+            } \
+        } \
+    } while(0)
+
+TEST_WITH_ARG(Histogram, testOnRandom, format_arg,
+              HIST_TEST_CASE(Immediate, U8),
+              HIST_TEST_CASE(Graph, U8),
+              )
+{
+    int format = arg_->format;
+    int mode = arg_->mode;
+    vx_image src;
+    CT_Image src0;
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_distribution dist1;
+    int iter, niters = 100;
+    uint64_t rng;
+    int a = 0, b = 256;
+    int32_t hist0[MAX_BINS];
+    int32_t hist1[MAX_BINS];
+
+    const vx_enum mem_type = VX_MEMORY_TYPE_HOST;
+    const vx_bitfield flags = 0;
+
+    rng = CT()->seed_;
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width, height;
+        int val0 = CT_RNG_NEXT_INT(rng, 0, (MAX_BINS-1)), val1 = CT_RNG_NEXT_INT(rng, 0, (MAX_BINS-1));
+        int offset = CT_MIN(val0, val1), range = CT_MAX(val0, val1) - offset + 1;
+        int nbins = CT_RNG_NEXT_INT(rng, 1, range+1);
+
+        if( ct_check_any_size() )
+        {
+            width = ct_roundf(ct_log_rng(&rng, 0, 10));
+            height = ct_roundf(ct_log_rng(&rng, 0, 10));
+
+            width = CT_MAX(width, 1);
+            height = CT_MAX(height, 1);
+        }
+        else
+        {
+            width = 640;
+            height = 480;
+        }
+
+        ct_update_progress(iter, niters);
+
+        if( iter % 30 == 0 )
+        {
+            offset = 0;
+            range = 256;
+            nbins = 1 << CT_RNG_NEXT_INT(rng, 0, 9);
+        }
+        else
+        {
+            // new definition of histogram formula doesn't require
+            // that the range will be divisible by the number of bins
+            /*
+            // make sure the range is divisible by the number of bins,
+            // otherwise the histogram will be statistically unbalanced
+            range = (range/nbins)*nbins;
+            */
+        }
+
+        ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, format, &rng, a, b));
+        ASSERT_NO_FAILURE(reference_histogram(src0, hist0, nbins, offset, range));
+
+        src = ct_image_to_vx_image(src0, context);
+        ASSERT_VX_OBJECT(src, VX_TYPE_IMAGE);
+
+        dist1 = vxCreateDistribution(context, nbins, offset, range);
+        ASSERT_VX_OBJECT(dist1, VX_TYPE_DISTRIBUTION);
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuHistogram(context, src, dist1));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxHistogramNode(graph, src, dist1);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+        }
+
+        /* test for copy - read distribution */
+        {
+            int equal = 0;
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyDistribution(dist1, hist1, VX_READ_ONLY, mem_type));
+            COMPARE_HISTOGRAMS(equal, hist0, hist1);
+            if( !equal )
+                CT_FAIL("check for vxCopyDistribution(read dist1) failed\n");
+        }
+
+        {
+            /* smoke tests for query distribution attributes */
+            vx_size   attr_dims = 0;
+            vx_int32  attr_offset = 0;
+            vx_uint32 attr_range = 0;
+            vx_size   attr_bins = 0;
+            vx_uint32 attr_window = 0;
+            vx_size   attr_size = 0;
+            VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_DIMENSIONS, &attr_dims, sizeof(attr_dims)));
+            if (1 != attr_dims)
+                CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_DIMENSIONS failed\n");
+
+            VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_OFFSET, &attr_offset, sizeof(attr_offset)));
+            if (attr_offset != offset)
+                CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_OFFSET failed\n");
+
+            VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_RANGE, &attr_range, sizeof(attr_range)));
+            if (attr_range != range)
+                CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_RANGE failed\n");
+
+            VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_BINS, &attr_bins, sizeof(attr_bins)));
+            if (attr_bins != nbins)
+                CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_BINS failed\n");
+
+            VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_WINDOW, &attr_window, sizeof(attr_window)));
+	    /*Tthe attribute is specified as valid only when the range is a multiple of nbins, 
+	     * in other cases, its value shouldn't be checked */
+            if (((range % nbins) == 0) && (attr_window != reference_window(range, nbins)))
+                CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_WINDOW failed\n");
+
+            VX_CALL(vxQueryDistribution(dist1, VX_DISTRIBUTION_SIZE, &attr_size, sizeof(attr_size)));
+            if (attr_size < nbins*sizeof(hist1[0]))
+                CT_FAIL("check for query distribution attribute VX_DISTRIBUTION_SIZE failed\n");
+        }
+
+        /* test for copy - write distribution */
+        {
+            vx_distribution dist2;
+            int32_t hist2[MAX_BINS];
+            int equal = 0;
+
+            dist2 = vxCreateDistribution(context, nbins, offset, range);
+            ASSERT_VX_OBJECT(dist2, VX_TYPE_DISTRIBUTION);
+
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyDistribution(dist2, hist1, VX_WRITE_ONLY, mem_type));
+            COMPARE_HISTOGRAMS(equal, hist0, hist1);
+            if( !equal )
+                CT_FAIL("check for vxCopyDistribution(write dist2) failed\n");
+
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyDistribution(dist2, hist2, VX_READ_ONLY, mem_type));
+            COMPARE_HISTOGRAMS(equal, hist0, hist2);
+            if( !equal )
+                CT_FAIL("check for vxCopyDistribution(read dist2) failed\n");
+
+            VX_CALL(vxReleaseDistribution(&dist2));
+        }
+
+        /* test for map/unmap - read/write distribution */
+        {
+            vx_map_id map1;
+            int32_t* hptr1 = NULL;
+            int32_t hist1r[MAX_BINS];
+            int equal = 0;
+
+            reverse_histogram(nbins, hist1);
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapDistribution(dist1, &map1, (void*)&hptr1, VX_WRITE_ONLY, mem_type, flags));
+            memcpy(hptr1, hist1, nbins*sizeof(hist1[0]));
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapDistribution(dist1, map1));
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyDistribution(dist1, hist1r, VX_READ_ONLY, mem_type));
+            COMPARE_HISTOGRAMS(equal, hist1, hist1r);
+            if( !equal )
+                CT_FAIL("check for vxMapDistribution/vxUnmapDistribution(write dist1) failed\n");
+
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapDistribution(dist1, &map1, (void*)&hptr1, VX_READ_ONLY, mem_type, flags));
+            COMPARE_HISTOGRAMS(equal, hist1, hptr1);
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapDistribution(dist1, map1));
+            if( !equal )
+                CT_FAIL("check for vxMapDistribution/vxUnmapDistribution(read dist1) failed\n");
+
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxMapDistribution(dist1, &map1, (void*)&hptr1, VX_READ_AND_WRITE, mem_type, flags));
+            COMPARE_HISTOGRAMS(equal, hist1, hptr1);
+            reverse_histogram(nbins, hist1);
+            memcpy(hist1, hptr1, nbins*sizeof(hist1[0]));
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxUnmapDistribution(dist1, map1));
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyDistribution(dist1, hist1r, VX_READ_ONLY, mem_type));
+            COMPARE_HISTOGRAMS(equal, hist1, hist1r);
+            if( !equal )
+                CT_FAIL("check for vxMapDistribution/vxUnmapDistribution(read-write dist1) failed\n");
+        }
+
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseDistribution(&dist1));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+}
+
+TESTCASE_TESTS(Histogram, testOnRandom)
diff --git a/test_conformance/test_hog.c b/test_conformance/test_hog.c
new file mode 100644
index 0000000..54676a8
--- /dev/null
+++ b/test_conformance/test_hog.c
@@ -0,0 +1,584 @@
+/*
+* Copyright (c) 2012-2017 The Khronos Group Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "test_engine/test.h"
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <string.h>
+
+#ifndef _MSC_VER
+#define min(a,b) (a<b?a:b)
+#endif
+
+TESTCASE(HogCells, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(HogCells, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0;
+    vx_uint32 src_width = 640;
+    vx_uint32 src_height = 320;
+    vx_int32 cell_width = 8;
+    vx_int32 cell_height = 8;
+    vx_int32 num_bins = 9;
+    const vx_size mag_dims[2] = { 80, 40 };
+    const vx_size bins_dims[3] = { 80, 40, 9 };
+    vx_tensor magnitudes;
+    vx_tensor bins;
+
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(magnitudes = vxCreateTensor(context, 2, mag_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(bins = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT8, 0), VX_TYPE_TENSOR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxHOGCellsNode(graph, input, cell_width, cell_height, num_bins, magnitudes, bins), VX_TYPE_NODE);
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleaseTensor(&magnitudes));
+    VX_CALL(vxReleaseTensor(&bins));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(input == 0);
+}
+
+static CT_Image hog_read_image(const char *fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static vx_status hogcells_ref(CT_Image img, vx_int32 cell_width, vx_int32 cell_height, vx_int32 bins_num, vx_tensor magnitudes, vx_tensor bins)
+{
+    vx_status status = 0;
+    vx_int32 width, height;
+    void* p_ct_base = ct_image_get_plane_base(img, 0);
+    vx_float32 gx;
+    vx_float32 gy;
+    vx_float32 orientation;
+    vx_float32 magnitude;
+    vx_int8 bin;
+    
+    width = img->width;
+    height = img->height;
+    vx_int16* mag_ref = (vx_int16 *)malloc(height / cell_height * width / cell_width * sizeof(vx_int16));
+    vx_int8* bins_ref = (vx_int8 *)malloc(height / cell_height * width / cell_width * bins_num );
+    vx_int16* mag = (vx_int16 *)malloc(height / cell_height * width / cell_width *sizeof(vx_int16));
+    vx_int8* bins_p = (vx_int8 *)malloc(height / cell_height * width / cell_width * bins_num);
+    memset(mag_ref, 0, height / cell_height * width / cell_width * sizeof(vx_int16));
+    memset(bins_ref, 0, height / cell_height * width / cell_width * bins_num);
+    float num_div_360 = (float)bins_num / 360.0f;
+
+    vx_size magnitudes_dim_num = 2, magnitudes_dims[6] = { width/cell_width, height/cell_height,0 }, magnitudes_strides[6] = { 2, 2 * width / cell_width };
+    vx_size bins_dim_num = 3, bins_dims[6] = { width / cell_width, height / cell_height, bins_num }, bins_strides[6] = { 1,  width / cell_width, height / cell_height * width / cell_width };
+    const size_t view_start[6] = { 0 };
+    vxCopyTensorPatch(magnitudes, magnitudes_dim_num, view_start, magnitudes_dims, magnitudes_strides, mag, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    vxCopyTensorPatch(bins, bins_dim_num, view_start, bins_dims, bins_strides, bins_p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+    vx_int32 num_cellw = (vx_int32)floor(((vx_float64)width) / ((vx_float64)cell_width));
+    for (int j = 0; j < height; j++)
+    {
+        for (int i = 0; i < width; i++)
+        {
+            int x1 = i - 1 < 0 ? 0 : i - 1;
+            int x2 = i + 1 >= width ? width - 1 : i + 1;
+            vx_uint8 *gx1 = (vx_uint8*)((vx_uint8*)p_ct_base + j * img->stride + x1);
+            vx_uint8 *gx2 = (vx_uint8*)((vx_uint8*)p_ct_base + j * img->stride + x2);
+            gx = *gx2 - *gx1;
+
+            int y1 = j - 1 < 0 ? 0 : j - 1;
+            int y2 = j + 1 >= height ? height - 1 : j + 1;
+            vx_uint8 *gy1 = (vx_uint8*)((vx_uint8*)p_ct_base + y1 * img->stride + i);
+            vx_uint8 *gy2 = (vx_uint8*)((vx_uint8*)p_ct_base + y2 * img->stride + i);
+            gy = *gy2 - *gy1;
+
+            magnitude = sqrtf(powf(gx, 2) + powf(gy, 2));
+            orientation = fmod(atan2f(gy, gx + 0.00000000000001)
+                * (180 / 3.14159265), 360);
+            if (orientation < 0) {
+                orientation += 360;
+            }
+
+            bin = (vx_int8)floor(orientation * num_div_360);
+
+            vx_int32 cellx = i / cell_width;
+            vx_int32 celly = j / cell_height;
+            vx_int32 magnitudes_index = celly * num_cellw + cellx;
+            vx_int32 bins_index = (celly * num_cellw + cellx) * bins_num + bin;
+            *(mag_ref + magnitudes_index) += magnitude / (cell_width * cell_height);
+            *(bins_ref + bins_index) += magnitude / (cell_width * cell_height);
+        }
+    }
+    for (int i = 0; i < height / cell_height * width / cell_width; i++)
+    {
+        vx_float32 mag_ref_data = *(mag_ref + i);
+        vx_float32 mag_data = *(mag + i);
+        if (mag_ref_data / mag_data < 0.95 || mag_ref_data / mag_data > 1.05)
+        {
+            status = VX_FAILURE;
+            break;
+        }
+    }
+    if (status == VX_SUCCESS)
+    {
+        for (int i = 0; i < height / cell_height * width / cell_width * bins_num; i++)
+        {
+            vx_float32 bins_ref_data = *(bins_ref + i);
+            vx_float32 bins_data = *(bins_p + i);
+            if (bins_ref_data / bins_data < 0.95 || bins_ref_data / bins_data > 1.05)
+            {
+                status = VX_FAILURE;
+                break;
+            }
+        }
+    }
+    
+    free(mag_ref);
+    free(mag);
+    free(bins_ref);
+    free(bins_p);
+    return status;
+}
+
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_int32 cell_width;
+    vx_int32 cell_height;
+    vx_int32 bins_num;
+    const char* result_filename;
+} Arg;
+
+#define PARAMETERS \
+    ARG("case_cells8x8_9_Hogcells", hog_read_image, "lena_gray.bmp", 8, 8, 9, "hogcells_8x8_9.txt"), \
+    ARG("case_cells8x8_9_Hogcells", hog_read_image, "lena_gray.bmp", 8, 8, 6, "hogcells_8x8_6.txt"), \
+    ARG("case_cells8x8_9_Hogcells", hog_read_image, "lena_gray.bmp", 8, 8, 3, "hogcells_8x8_3.txt"), \
+    ARG("case_cells8x8_9_Hogcells", hog_read_image, "lena_gray.bmp", 4, 4, 9, "hogcells_8x8_9.txt"), \
+    ARG("case_cells8x8_9_Hogcells", hog_read_image, "lena_gray.bmp", 4, 4, 6, "hogcells_8x8_6.txt"), \
+
+TEST_WITH_ARG(HogCells, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_int32 cell_width = arg_->cell_width;
+    vx_int32 cell_height = arg_->cell_height;
+    vx_int32 bins_num = arg_->bins_num;
+    CT_Image src = NULL;
+    vx_status status;
+
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    src_width = src->width;
+    src_height = src->height;
+
+    const vx_size mag_dims[2] = { src_width / cell_width, src_height / cell_height };
+    const vx_size bins_dims[3] = { src_width / cell_width, src_height / cell_height, bins_num };
+    vx_tensor magnitudes;
+    vx_tensor bins;
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(magnitudes = vxCreateTensor(context, 2, mag_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(bins = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT8, 0), VX_TYPE_TENSOR);
+    
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxHOGCellsNode(graph, src_image, cell_width, cell_height, bins_num, magnitudes, bins), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(status = hogcells_ref(src, cell_width, cell_height, bins_num, magnitudes, bins));
+    
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&src_image));
+    VX_CALL(vxReleaseTensor(&magnitudes));
+    VX_CALL(vxReleaseTensor(&bins));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(HogCells, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0;
+
+    vx_int32 cell_width = arg_->cell_width;
+    vx_int32 cell_height = arg_->cell_height;
+    vx_int32 bins_num = arg_->bins_num;
+    CT_Image src = NULL;
+    vx_status status;
+
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    src_width = src->width;
+    src_height = src->height;
+
+    const vx_size mag_dims[2] = { src_width / cell_width, src_height / cell_height };
+    const vx_size bins_dims[3] = { src_width / cell_width, src_height / cell_height, bins_num };
+    vx_tensor magnitudes;
+    vx_tensor bins;
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(magnitudes = vxCreateTensor(context, 2, mag_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(bins = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT8, 0), VX_TYPE_TENSOR);
+
+    VX_CALL(vxuHOGCells(context, src_image, cell_width, cell_width, bins_num, magnitudes, bins));
+    ASSERT_NO_FAILURE(status = hogcells_ref(src, cell_width, cell_height, bins_num, magnitudes, bins));
+
+    VX_CALL(vxReleaseImage(&src_image));
+    VX_CALL(vxReleaseTensor(&magnitudes));
+    VX_CALL(vxReleaseTensor(&bins));
+
+    ASSERT(src_image == 0);
+}
+TESTCASE_TESTS(HogCells,
+               testNodeCreation,
+               testGraphProcessing,
+               testImmediateProcessing)
+
+TESTCASE(HogFeatures, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(HogFeatures, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0;
+    vx_uint32 src_width = 640;
+    vx_uint32 src_height = 320;
+    vx_int32 cell_width = 8;
+    vx_int32 cell_height = 8;
+    vx_int32 num_bins = 9;
+    const vx_size mag_dims[2] = { 80, 40 };
+    const vx_size bins_dims[3] = { 80, 40, 9 };
+    vx_hog_t params;
+    vx_tensor magnitudes;
+    vx_tensor bins;
+    vx_tensor features;
+
+    vx_graph graph = 0;
+    vx_node cell_node = 0;
+    vx_node feature_node = 0;
+    params.window_width = 64;
+    params.window_height = 32;
+    params.block_width = 16;
+    params.block_height = 16;
+    params.cell_width = 8;
+    params.cell_height = 8;
+    params.num_bins = 9;
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(magnitudes = vxCreateTensor(context, 2, mag_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(bins = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT8, 0), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(cell_node = vxHOGCellsNode(graph, input, cell_width, cell_height, num_bins, magnitudes, bins), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(features = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+
+    ASSERT_VX_OBJECT(feature_node = vxHOGFeaturesNode(graph, input, magnitudes, bins, &params, 1, features), VX_TYPE_NODE);
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&cell_node));
+    VX_CALL(vxReleaseNode(&feature_node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleaseTensor(&magnitudes));
+    VX_CALL(vxReleaseTensor(&bins));
+    VX_CALL(vxReleaseTensor(&features));
+
+    ASSERT(cell_node == 0);
+    ASSERT(feature_node == 0);
+    ASSERT(graph == 0);
+    ASSERT(input == 0);
+}
+
+static vx_status hogfeatures_ref(CT_Image img, vx_hog_t params, vx_tensor features)
+{
+    vx_status status = 0;
+    vx_int32 width, height;
+    void* p_ct_base = ct_image_get_plane_base(img, 0);
+    vx_float32 gx;
+    vx_float32 gy;
+    vx_float32 orientation;
+    vx_float32 magnitude;
+    vx_int8 bin;
+
+    width = img->width;
+    height = img->height;
+
+    vx_int32 cell_height = params.cell_height;
+    vx_int32 cell_width = params.cell_width;
+    vx_int32 bins_num = params.num_bins;
+
+    vx_int32 num_windowsW = width / params.window_width;
+    vx_int32 num_windowsH = height / params.window_height;
+    vx_int32 num_blockW = width / params.cell_width - 1;
+    vx_int32 num_blockH = height / params.cell_height - 1;
+    vx_int32 num_block = num_blockW * num_blockH;
+    vx_int32 n_cellsx = width / cell_width;
+    vx_int32 cells_per_block_w = params.block_width / cell_width;
+    vx_int32 cells_per_block_h = params.block_height / cell_height;
+   
+    vx_int16* mag_ref = (vx_int16 *)malloc(height / cell_height * width / cell_width * sizeof(vx_int16));
+    vx_int8* bins_ref = (vx_int8 *)malloc(height / cell_height * width / cell_width * bins_num );
+    vx_int16* features_ref = (vx_int16 *)malloc(num_windowsW * num_windowsH * params.window_width / params.block_stride * 
+                                                params.window_height / params.block_stride *bins_num * sizeof(vx_int16));
+    vx_int16* features_p = (vx_int16 *)malloc(num_windowsW * num_windowsH * params.window_width / params.block_stride *
+                                              params.window_height / params.block_stride *bins_num * sizeof(vx_int16));
+    memset(mag_ref, 0, height / cell_height * width / cell_width * sizeof(vx_int16));
+    memset(bins_ref, 0, height / cell_height * width / cell_width * bins_num);
+    memset(features_ref, 0, num_windowsW * num_windowsH * params.window_width / params.block_stride *
+        params.window_height / params.block_stride *bins_num * sizeof(vx_int16));
+
+    float num_div_360 = (float)bins_num / 360.0f;
+
+    vx_size features_dim_num = 3, features_dims[6] = { num_windowsW, num_windowsH, params.window_width / params.block_stride *
+        params.window_height / params.block_stride *bins_num }, features_strides[6] = { 2, 2 * num_windowsW, 2 * num_windowsW * num_windowsH};
+    const size_t view_start[6] = { 0 };
+    vxCopyTensorPatch(features, features_dim_num, view_start, features_dims, features_strides, features_p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+    vx_int32 num_cellw = (vx_int32)floor(((vx_float64)width) / ((vx_float64)cell_width));
+    for (int j = 0; j < height; j++)
+    {
+        for (int i = 0; i < width; i++)
+        {
+            int x1 = i - 1 < 0 ? 0 : i - 1;
+            int x2 = i + 1 >= width ? width - 1 : i + 1;
+            vx_uint8 *gx1 = (vx_uint8*)((vx_uint8*)p_ct_base + j * img->stride + x1);
+            vx_uint8 *gx2 = (vx_uint8*)((vx_uint8*)p_ct_base + j * img->stride + x2);
+            gx = *gx2 - *gx1;
+
+            int y1 = j - 1 < 0 ? 0 : j - 1;
+            int y2 = j + 1 >= height ? height - 1 : j + 1;
+            vx_uint8 *gy1 = (vx_uint8*)((vx_uint8*)p_ct_base + y1 * img->stride + i);
+            vx_uint8 *gy2 = (vx_uint8*)((vx_uint8*)p_ct_base + y2 * img->stride + i);
+            gy = *gy2 - *gy1;
+
+            magnitude = sqrtf(powf(gx, 2) + powf(gy, 2));
+            orientation = fmod(atan2f(gy, gx + 0.00000000000001)
+                * (180 / 3.14159265), 360);
+            if (orientation < 0) {
+                orientation += 360;
+            }
+
+            bin = (vx_int8)floor(orientation * num_div_360);
+
+            vx_int32 cellx = i / cell_width;
+            vx_int32 celly = j / cell_height;
+            vx_int32 magnitudes_index = celly * num_cellw + cellx;
+            vx_int32 bins_index = (celly * num_cellw + cellx) * bins_num + bin;
+            *(mag_ref + magnitudes_index) += magnitude / (cell_width * cell_height);
+            *(bins_ref + bins_index) += magnitude / (cell_width * cell_height);
+        }
+    }
+    for (vx_int32 blkH = 0; blkH < num_blockH; blkH++)
+    {
+        for (vx_int32 blkW = 0; blkW < num_blockW; blkW++)
+        {
+            vx_float32 sum = 0;
+            for (vx_int32 y = 0; y < cells_per_block_h; y++)
+            {
+                for (vx_int32 x = 0; x < cells_per_block_w; x++)
+                {
+                    vx_int32 index = (blkH + y)*n_cellsx + (blkW + x);
+                    sum += (*(mag_ref + index)) * (*(mag_ref + index));
+                }
+            }
+            sum = sqrtf(sum + 0.00000000000001);
+            for (vx_int32 y = 0; y < cells_per_block_h; y++)
+            {
+                for (vx_int32 x = 0; x < cells_per_block_w; x++)
+                {
+                    for (vx_int32 k = 0; k < bins_num; k++)
+                    {
+                        vx_int32 bins_index = (blkH + y)*n_cellsx * bins_num + (blkW + x)*bins_num + k;
+                        vx_int32 block_index = blkH * num_blockW * bins_num + blkW * bins_num + k;
+                        float hist = min((*(bins_ref + bins_index) / sum), params.threshold);
+                        vx_int16 *features_ptr = features_ref + block_index;
+                        *features_ptr = *features_ptr + hist;
+                    }
+                }
+            }
+        }
+    }
+    for (int i = 0; i < num_windowsW * num_windowsH * params.window_width / params.block_stride *
+        params.window_height / params.block_stride *bins_num; i++)
+    {
+        vx_float32 features_ref_data = *(features_ref + i);
+        vx_float32 features_data = *(features_p + i);
+        if (features_ref_data / features_data < 0.95 || features_ref_data / features_data > 1.05)
+        {
+            status = VX_FAILURE;
+            break;
+        }
+    }
+    
+    free(mag_ref);
+    free(bins_ref);
+    free(features_ref);
+    free(features_p);
+    return status;
+}
+
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_hog_t hog_params;
+} Arg_features;
+
+#define PARAMETERS_FEATURES \
+    ARG("case_hogfeature", hog_read_image, "lena_gray.bmp", {8, 8, 16, 16, 8, 9, 32, 32, 32, 0.2}), \
+    ARG("case_hogfeature", hog_read_image, "lena_gray.bmp", {4, 4, 8, 8, 4, 9, 32, 32, 32, 0.2}), \
+    ARG("case_hogfeature", hog_read_image, "lena_gray.bmp", {8, 8, 16, 16, 8, 6, 32, 32, 32, 0.2}), \
+    ARG("case_hogfeature", hog_read_image, "lena_gray.bmp", {4, 4, 8, 8, 4, 6, 32, 32, 32, 0.2}), \
+    ARG("case_hogfeature", hog_read_image, "lena_gray.bmp", {8, 8, 16, 16, 8, 6, 32, 32, 32, 0.1}), \
+
+TEST_WITH_ARG(HogFeatures, testGraphProcessing, Arg_features,
+    PARAMETERS_FEATURES
+
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0;
+    vx_graph graph = 0;
+    vx_node cell_node = 0;
+    vx_node feature_node = 0;
+    vx_int32 cell_width = arg_->hog_params.cell_width;
+    vx_int32 cell_height = arg_->hog_params.cell_height;
+    vx_int32 bins_num = arg_->hog_params.num_bins;
+    CT_Image src = NULL;
+    vx_status status;
+
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    src_width = src->width;
+    src_height = src->height;
+
+    const vx_size mag_dims[2] = { src_width / cell_width, src_height / cell_height };
+    const vx_size bins_dims[3] = { src_width / cell_width, src_height / cell_height, bins_num };
+    const vx_size features_dims[3] = { src_width / arg_->hog_params.window_stride,  src_height / arg_->hog_params.window_stride, 
+                                       arg_->hog_params.window_width / arg_->hog_params.block_stride * arg_->hog_params.window_height / arg_->hog_params.block_stride *bins_num };
+    vx_tensor magnitudes;
+    vx_tensor bins;
+    vx_tensor features;
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(magnitudes = vxCreateTensor(context, 2, mag_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(bins = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT8, 0), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(features = vxCreateTensor(context, 3, features_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(cell_node = vxHOGCellsNode(graph, src_image, cell_width, cell_height, bins_num, magnitudes, bins), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(feature_node = vxHOGFeaturesNode(graph, src_image, magnitudes, bins, &arg_->hog_params, 1, features), VX_TYPE_NODE);
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(status = hogfeatures_ref(src, arg_->hog_params, features));
+    
+    VX_CALL(vxReleaseNode(&cell_node));
+    VX_CALL(vxReleaseNode(&feature_node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&src_image));
+    VX_CALL(vxReleaseTensor(&magnitudes));
+    VX_CALL(vxReleaseTensor(&bins));
+    VX_CALL(vxReleaseTensor(&features));
+
+    ASSERT(cell_node == 0);
+    ASSERT(feature_node == 0);
+    ASSERT(graph == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(HogFeatures, testImmediateProcessing, Arg_features,
+    PARAMETERS_FEATURES
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0;
+    vx_graph graph = 0;
+    vx_node cell_node = 0;
+    vx_node feature_node = 0;
+    vx_int32 cell_width = arg_->hog_params.cell_width;
+    vx_int32 cell_height = arg_->hog_params.cell_height;
+    vx_int32 bins_num = arg_->hog_params.num_bins;
+    CT_Image src = NULL;
+    vx_status status;
+
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    src_width = src->width;
+    src_height = src->height;
+
+    const vx_size mag_dims[2] = { src_width / cell_width, src_height / cell_height };
+    const vx_size bins_dims[3] = { src_width / cell_width, src_height / cell_height, bins_num };
+    const vx_size features_dims[3] = { src_width / arg_->hog_params.window_stride,  src_height / arg_->hog_params.window_stride,
+        arg_->hog_params.window_width / arg_->hog_params.block_stride * arg_->hog_params.window_height / arg_->hog_params.block_stride *bins_num };
+    vx_tensor magnitudes;
+    vx_tensor bins;
+    vx_tensor features;
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(magnitudes = vxCreateTensor(context, 2, mag_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(bins = vxCreateTensor(context, 3, bins_dims, VX_TYPE_INT8, 0), VX_TYPE_TENSOR);
+    ASSERT_VX_OBJECT(features = vxCreateTensor(context, 3, features_dims, VX_TYPE_INT16, 8), VX_TYPE_TENSOR);
+
+    VX_CALL(vxuHOGCells(context, src_image, cell_width, cell_width, bins_num, magnitudes, bins));
+    VX_CALL(vxuHOGFeatures(context, src_image, magnitudes, bins, &arg_->hog_params, 1, features));
+    ASSERT_NO_FAILURE(status = hogfeatures_ref(src, arg_->hog_params, features));
+
+    VX_CALL(vxReleaseImage(&src_image));
+    VX_CALL(vxReleaseTensor(&magnitudes));
+    VX_CALL(vxReleaseTensor(&bins));
+    VX_CALL(vxReleaseTensor(&features));
+
+    ASSERT(src_image == 0);
+}
+TESTCASE_TESTS(HogFeatures,
+               testNodeCreation,
+               testGraphProcessing,
+               testImmediateProcessing)
diff --git a/test_conformance/test_houghlinesp.c b/test_conformance/test_houghlinesp.c
new file mode 100644
index 0000000..0d13bf0
--- /dev/null
+++ b/test_conformance/test_houghlinesp.c
@@ -0,0 +1,308 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+#include "test_engine/test.h"
+
+#include <stdint.h>
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <math.h>
+
+#define MAX_NUM_EXP_LINES 100
+
+TESTCASE(Houghlinesp, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(Houghlinesp, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0;
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+    vx_array lines_array = 0;
+    vx_scalar num_lines = 0;
+    vx_uint32 numlines = 0;
+    vx_hough_lines_p_t param_hough_lines = {1, 180, 50, 50, 10, M_PI, 0};
+
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    src_width = 640;
+    src_height = 320;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(lines_array = vxCreateArray(context, VX_TYPE_LINE_2D, src_width * src_height * sizeof(vx_uint32)), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(num_lines = vxCreateScalar(context, VX_TYPE_SIZE, &numlines), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxHoughLinesPNode(graph, input, &param_hough_lines, lines_array, num_lines), VX_TYPE_NODE);
+    
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseArray(&lines_array));
+    VX_CALL(vxReleaseScalar(&num_lines));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(lines_array == 0);
+    ASSERT(num_lines == 0);
+    ASSERT(input == 0);
+}
+
+static CT_Image hough_lines_read_image(const char *fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static vx_bool similar_lines(vx_line2d_t act, vx_line2d_t exp, vx_float32 eps)
+{
+    #define LINE_RATIO 1.2
+
+    if (fabs(act.start_x - exp.start_x) <= eps && fabs(act.start_y - exp.start_y) <= eps &&
+        fabs(act.end_x - exp.end_x) <= eps && fabs(act.end_y - exp.end_y) <= eps)
+    {
+        return vx_true_e;
+    }
+    else
+    {
+        vx_float32 ax = fabs(act.start_x - act.end_x);
+        vx_float32 ay = fabs(act.end_y - act.start_y);
+        vx_float32 gx = fabs(exp.end_x - exp.start_x);
+        vx_float32 gy = fabs(exp.end_y - exp.start_y);
+        vx_float32 sx = fabs(act.start_x - exp.start_x);
+        vx_float32 sy = fabs(act.start_y - exp.start_y);
+        vx_float32 ex = fabs(act.end_x - exp.end_x);
+        vx_float32 ey = fabs(act.end_y - exp.end_y);
+        vx_float32 dg = sqrt(gx * gx + gy * gy);
+        vx_float32 ds = sqrt(sx * sx + sy * sy);
+        vx_float32 de = sqrt(ex * ex + ey * ey);
+        if (gx != 0 && ax != 0)
+        {
+            if (fabs(gy / gx - ay / ax) <= 0.1 && fabs(gy / gx - sy / sx) <= 0.1 && fabs(gy / gx - ey / ex) <= 0.1
+                && (ds < (LINE_RATIO * dg)) && (de < (LINE_RATIO * dg)))
+                return vx_true_e;
+        }
+        else if (gy != 0 && ay != 0)
+        {
+            if (fabs(gx / gy - ax / ay) <= 0.1 && fabs(gx / gy - sx / sy) <= 0.1 && fabs(gx / gy - ex / ey) <= 0.1
+                && (ds < (LINE_RATIO * dg)) && (de < (LINE_RATIO * dg)))
+                return vx_true_e;
+        }
+
+        return vx_false_e;
+    }
+}
+static vx_status countLine2dIntersection(const vx_line2d_t *expect_lines, const vx_line2d_t *actual_lines, vx_int32 exp_lines_num, vx_int32 actual_lines_num, vx_float32 eps)
+{
+    vx_status status = VX_FAILURE;
+    vx_int32 count = 0;
+    if (exp_lines_num && actual_lines_num)
+    {
+        for (vx_int32 x = 0; x < actual_lines_num; x++)
+        {
+            vx_line2d_t act = actual_lines[x];
+            for (vx_int32 y = 0; y < exp_lines_num; y++)
+            {
+                vx_line2d_t exp = expect_lines[y];
+                vx_bool sim = similar_lines(act, exp, eps);
+                if (sim)
+                {
+                    count++;
+                    break;
+                }
+            }
+        }
+    }
+    if ((vx_float32)count / (exp_lines_num < actual_lines_num ? exp_lines_num : actual_lines_num) >= 0.8)
+        status = VX_SUCCESS;
+    return status;
+}
+
+static vx_status houghlinesp_check(vx_array lines_array, vx_scalar num_lines, const char* result_filename)
+{
+    vx_status status = VX_FAILURE;
+    vx_size sz = 0;
+    void* buf = 0;
+
+    char file[MAXPATHLENGTH];
+    sz = snprintf(file, MAXPATHLENGTH, "%s/%s", ct_get_test_file_path(), result_filename);
+    FILE* f = fopen(file, "rb");
+    ASSERT_(return VX_FAILURE, f);
+    fseek(f, 0, SEEK_END);
+
+    sz = ftell(f);
+    fseek(f, 0, SEEK_SET);
+
+    ASSERT_(return VX_FAILURE, buf = ct_alloc_mem(sz + 1));
+    ASSERT_(return VX_FAILURE, sz == fread(buf, 1, sz, f));
+    fclose(f); f = NULL;
+    ((vx_int8*)buf)[sz] = 0;
+
+    vx_size lines_array_stride = 0;
+    void *lines_array_ptr = NULL;
+    vx_map_id lines_array_map_id;
+    vx_size lines_array_length;
+    vxQueryArray(lines_array, VX_ARRAY_NUMITEMS, &lines_array_length, sizeof(lines_array_length));
+    vxMapArrayRange(lines_array, 0, lines_array_length, &lines_array_map_id, &lines_array_stride, &lines_array_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);
+    vx_line2d_t *lines_array_p = (vx_line2d_t *)lines_array_ptr;
+    vx_line2d_t *exp_lines = 0;
+    ASSERT_(return VX_FAILURE, exp_lines = ct_alloc_mem(sizeof(vx_line2d_t) * MAX_NUM_EXP_LINES));
+
+    vx_int32 id = 0;
+    char * pos = buf;
+    char * next = 0;
+    while (pos && (next = strchr(pos, '\n')))
+    {
+        
+        vx_float32 x1, y1, x2, y2;
+        vx_int32 line_id;
+
+        *next = 0;
+        (void)sscanf(pos, "%d %f %f %f %f", &line_id, &x1, &y1, &x2, &y2);
+        exp_lines[id].start_x = x1;
+        exp_lines[id].start_y = y1;
+        exp_lines[id].end_x = x2;
+        exp_lines[id].end_y = y2;
+        pos = next + 1;
+        id++;
+    }
+    vx_int32 exp_lines_num = id + 1;
+    status = countLine2dIntersection(exp_lines, lines_array_p, exp_lines_num, lines_array_length, 2.0f);
+    vxUnmapArrayRange(lines_array, lines_array_map_id);
+    return status;
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_hough_lines_p_t param_hough_lines;
+    const char* result_filename;
+} Arg;
+
+#define PARAMETERS \
+    ARG("case1_1_180_50_50_10_HoughLines", hough_lines_read_image, "hough_lines.bmp", {1, M_PI/180, 50, 50, 10, M_PI, 0}, "hough_lines_1_180_50_50_10.txt"), \
+    ARG("case1_1_170_40_40_10_HoughLines", hough_lines_read_image, "hough_lines.bmp", {1, M_PI/170, 40, 40, 10, M_PI, 0}, "hough_lines_1_170_40_40_10.txt"), \
+    ARG("case1_1_180_40_40_9_HoughLines", hough_lines_read_image, "hough_lines.bmp", {1, M_PI/180, 40, 40, 9, M_PI, 0}, "hough_lines_1_180_40_40_9.txt"), \
+    ARG("case1_2_180_50_50_9_HoughLines", hough_lines_read_image, "hough_lines.bmp", {2, M_PI/180, 50, 50, 9, M_PI, 0}, "hough_lines_2_180_50_50_9.txt"), \
+    ARG("case1_1_190_40_40_10_HoughLines", hough_lines_read_image, "hough_lines.bmp", {1, M_PI/190, 40, 40, 10, M_PI, 0}, "hough_lines_1_190_40_40_10.txt"), \
+
+TEST_WITH_ARG(Houghlinesp, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_array lines_array = 0;
+    vx_scalar num_lines = 0;
+    vx_uint32 numlines = 0;
+    CT_Image src = NULL;
+    vx_hough_lines_p_t param_lines_p = arg_->param_hough_lines;
+    vx_status status;
+
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    
+    src_width = src->width;
+    src_height = src->height;
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(lines_array = vxCreateArray(context, VX_TYPE_LINE_2D, src_width * src_height * sizeof(vx_line2d_t)), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(num_lines = vxCreateScalar(context, VX_TYPE_SIZE, &numlines), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxHoughLinesPNode(graph, src_image, &param_lines_p, lines_array, num_lines), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(status = houghlinesp_check(lines_array, num_lines, arg_->result_filename));
+    ASSERT(status == VX_SUCCESS);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseArray(&lines_array));
+    VX_CALL(vxReleaseScalar(&num_lines));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(lines_array == 0);
+    ASSERT(num_lines == 0);
+
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Houghlinesp, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0;
+
+    CT_Image src = NULL;
+
+    vx_array lines_array = 0;
+    vx_scalar num_lines = 0;
+    vx_uint32 numlines = 0;
+
+    vx_hough_lines_p_t param_lines_p = arg_->param_hough_lines;
+    vx_status status;
+
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+
+    src_width = src->width;
+    src_height = src->height;
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(lines_array = vxCreateArray(context, VX_TYPE_LINE_2D, src_width * src_height * sizeof(vx_line2d_t)), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(num_lines = vxCreateScalar(context, VX_TYPE_SIZE, &numlines), VX_TYPE_SCALAR);
+
+    VX_CALL(vxuHoughLinesP(context, src_image, &param_lines_p, lines_array, num_lines));
+
+    ASSERT_NO_FAILURE(status = houghlinesp_check(lines_array, num_lines, arg_->result_filename));
+    ASSERT(status == VX_SUCCESS);
+
+    VX_CALL(vxReleaseArray(&lines_array));
+    VX_CALL(vxReleaseScalar(&num_lines));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(lines_array == 0);
+    ASSERT(num_lines == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Houghlinesp, 
+               testNodeCreation, 
+               testGraphProcessing, 
+               testImmediateProcessing)
diff --git a/test_conformance/test_integral.c b/test_conformance/test_integral.c
new file mode 100644
index 0000000..3c587f4
--- /dev/null
+++ b/test_conformance/test_integral.c
@@ -0,0 +1,194 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(Integral, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(Integral, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxIntegralImageNode(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+static CT_Image integral_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image integral_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static CT_Image integral_create_reference_image(CT_Image src)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, VX_DF_IMAGE_U32);
+
+    CT_FILL_IMAGE_32U(return 0, dst,
+            {
+                uint32_t res = *CT_IMAGE_DATA_PTR_8U(src, x, y);
+                if (y > 0)
+                    res += *CT_IMAGE_DATA_PTR_32U(dst, x, y - 1);
+                if (x > 0)
+                    res += *CT_IMAGE_DATA_PTR_32U(dst, x - 1, y);
+                if (y > 0 && x > 0)
+                    res -= *CT_IMAGE_DATA_PTR_32U(dst, x - 1, y - 1);
+                *dst_data = res;
+            });
+    return dst;
+}
+
+
+static void integral_check(CT_Image src, CT_Image dst)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = integral_create_reference_image(src));
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info_ex(src, 16, 4);
+        printf("=== DST ===\n");
+        ct_dump_image_info_ex(dst, 16, 4);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info_ex(dst_ref, 16, 4);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    int width, height;
+} Arg;
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_SIZE_SMALL_SET, ARG, integral_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_SIZE_NONE, ARG, integral_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Integral, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, src->width, src->height, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxIntegralImageNode(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(integral_check(src, dst));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Integral, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, src->width, src->height, VX_DF_IMAGE_U32), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuIntegralImage(context, src_image, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(integral_check(src, dst));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Integral, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_laplacianpyramid.c b/test_conformance/test_laplacianpyramid.c
new file mode 100644
index 0000000..1130214
--- /dev/null
+++ b/test_conformance/test_laplacianpyramid.c
@@ -0,0 +1,1200 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+#include "shared_functions.h"
+
+#define VX_GAUSSIAN_PYRAMID_TOLERANCE 1
+
+TESTCASE(LaplacianPyramid, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(LaplacianPyramid, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   input = 0;
+    vx_pyramid laplacian = 0;
+    vx_image   output = 0;
+    vx_graph   graph = 0;
+    vx_node    node = 0;
+    const vx_size levels = 4;
+    const vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+    const vx_uint32 width = 640;
+    const vx_uint32 height = 480;
+    const vx_df_image format = VX_DF_IMAGE_S16;
+    vx_uint32 w = width;
+    vx_uint32 h = height;
+    vx_size L = levels - 1;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(laplacian = vxCreatePyramid(context, levels, scale, width, height, format), VX_TYPE_PYRAMID);
+
+    while (L--)
+    {
+        w = (vx_uint32)(w * scale);
+        h = (vx_uint32)(h * scale);
+    }
+
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, w * scale, h * scale, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxLaplacianPyramidNode(graph, input, laplacian, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleasePyramid(&laplacian));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(input == 0);
+    ASSERT(laplacian == 0);
+    ASSERT(output == 0);
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+}
+
+#define LEVELS_COUNT_MAX    7
+
+static CT_Image own_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+        image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image own_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static vx_size own_pyramid_calc_max_levels_count(int width, int height, vx_float32 scale)
+{
+    vx_size level = 1;
+
+    while ((16 <= width) && (16 <= height) && level < LEVELS_COUNT_MAX)
+    {
+        level++;
+        width = (int)ceil((vx_float64)width * scale);
+        height = (int)ceil((vx_float64)height * scale);
+    }
+
+    return level;
+}
+
+static vx_status ownCopyImage(vx_image input, vx_image output)
+{
+    vx_status status = VX_SUCCESS; // assume success until an error occurs.
+    vx_uint32 p = 0;
+    vx_uint32 y = 0, x = 0;
+    vx_size planes = 0;
+
+    void* src;
+    void* dst;
+    vx_imagepatch_addressing_t src_addr;
+    vx_imagepatch_addressing_t dst_addr;
+    vx_rectangle_t src_rect, dst_rect;
+    vx_map_id map_id1;
+    vx_map_id map_id2;
+    vx_df_image src_format = 0;
+    vx_df_image out_format = 0;
+
+    status |= vxQueryImage(input, VX_IMAGE_PLANES, &planes, sizeof(planes));
+    vxQueryImage(output, VX_IMAGE_FORMAT, &out_format, sizeof(out_format));
+    vxQueryImage(input, VX_IMAGE_FORMAT, &src_format, sizeof(src_format));
+    status |= vxGetValidRegionImage(input, &src_rect);
+    status |= vxGetValidRegionImage(output, &dst_rect);
+    for (p = 0; p < planes && status == VX_SUCCESS; p++)
+    {
+        status = VX_SUCCESS;
+        src = NULL;
+        dst = NULL;
+
+        status |= vxMapImagePatch(input, &src_rect, p, &map_id1, &src_addr, &src, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0);
+        status |= vxMapImagePatch(output, &dst_rect, p, &map_id2, &dst_addr, &dst, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0);
+
+        for (y = 0; y < src_addr.dim_y && status == VX_SUCCESS; y += src_addr.step_y)
+        {
+            for (x = 0; x < src_addr.dim_x && status == VX_SUCCESS; x += src_addr.step_x)
+            {
+                void* srcp = vxFormatImagePatchAddress2d(src, x, y, &src_addr);
+                void* dstp = vxFormatImagePatchAddress2d(dst, x, y, &dst_addr);
+                vx_int32 out0 = (src_format == VX_DF_IMAGE_U8) ? (*(vx_uint8 *)srcp) : (*(vx_int16 *)srcp);
+
+                if (out_format == VX_DF_IMAGE_U8)
+                {
+                    if (out0 > UINT8_MAX)
+                        out0 = UINT8_MAX;
+                    else if (out0 < 0)
+                        out0 = 0;
+                    *(vx_uint8 *)dstp = (vx_uint8)out0;
+                }
+                else
+                {
+                    if (out0 > INT16_MAX)
+                        out0 = INT16_MAX;
+                    else if (out0 < INT16_MIN)
+                        out0 = INT16_MIN;
+                    *(vx_int16 *)dstp = (vx_int16)out0;
+                }
+            }
+        }
+
+        if (status == VX_SUCCESS)
+        {
+            status |= vxUnmapImagePatch(input, map_id1);
+            status |= vxUnmapImagePatch(output, map_id2);
+        }
+    }
+
+    return status;
+}
+
+static vx_bool own_read_pixel_16s(void *base, vx_imagepatch_addressing_t *addr,
+    vx_int32 x, vx_int32 y, const vx_border_t *borders, vx_int16 *pixel)
+{
+    vx_uint32 bx;
+    vx_uint32 by;
+    vx_int16* bpixel;
+
+    vx_bool out_of_bounds = (vx_bool)(x < 0 || y < 0 || x >= (vx_int32)addr->dim_x || y >= (vx_int32)addr->dim_y);
+
+    if (out_of_bounds)
+    {
+        if (borders->mode == VX_BORDER_UNDEFINED)
+            return vx_false_e;
+        if (borders->mode == VX_BORDER_CONSTANT)
+        {
+            *pixel = (vx_int16)borders->constant_value.S16;
+            return vx_true_e;
+        }
+    }
+
+    // bounded x/y
+    bx = x < 0 ? 0 : x >= (vx_int32)addr->dim_x ? addr->dim_x - 1 : (vx_uint32)x;
+    by = y < 0 ? 0 : y >= (vx_int32)addr->dim_y ? addr->dim_y - 1 : (vx_uint32)y;
+
+    bpixel = (vx_int16*)vxFormatImagePatchAddress2d(base, bx, by, addr);
+    *pixel = *bpixel;
+
+    return vx_true_e;
+}
+
+static vx_status ownScaleImageNearestS16(vx_image src_image, vx_image dst_image, const vx_border_t *borders)
+{
+    vx_status status = VX_SUCCESS;
+    vx_int32 x1, y1, x2, y2;
+    void* src_base = NULL;
+    void* dst_base = NULL;
+    vx_rectangle_t src_rect;
+    vx_rectangle_t dst_rect;
+    vx_imagepatch_addressing_t src_addr;
+    vx_imagepatch_addressing_t dst_addr;
+    vx_uint32 w1 = 0, h1 = 0, w2 = 0, h2 = 0;
+    vx_float32 wr, hr;
+    vx_map_id map_id1;
+    vx_map_id map_id2;
+
+    vxQueryImage(src_image, VX_IMAGE_WIDTH, &w1, sizeof(w1));
+    vxQueryImage(src_image, VX_IMAGE_HEIGHT, &h1, sizeof(h1));
+
+    vxQueryImage(dst_image, VX_IMAGE_WIDTH, &w2, sizeof(w2));
+    vxQueryImage(dst_image, VX_IMAGE_HEIGHT, &h2, sizeof(h2));
+
+    src_rect.start_x = src_rect.start_y = 0;
+    src_rect.end_x = w1;
+    src_rect.end_y = h1;
+
+    dst_rect.start_x = dst_rect.start_y = 0;
+    dst_rect.end_x = w2;
+    dst_rect.end_y = h2;
+
+    status = VX_SUCCESS;
+    status |= vxMapImagePatch(src_image, &src_rect, 0, &map_id1, &src_addr, &src_base, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0);
+    status |= vxMapImagePatch(dst_image, &dst_rect, 0, &map_id2, &dst_addr, &dst_base, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0);
+
+    wr = (vx_float32)w1 / (vx_float32)w2;
+    hr = (vx_float32)h1 / (vx_float32)h2;
+
+    for (y2 = 0; y2 < (vx_int32)dst_addr.dim_y; y2 += dst_addr.step_y)
+    {
+        for (x2 = 0; x2 < (vx_int32)dst_addr.dim_x; x2 += dst_addr.step_x)
+        {
+            vx_int16 v = 0;
+            vx_int16* dst = vxFormatImagePatchAddress2d(dst_base, x2, y2, &dst_addr);
+            vx_float32 x_src = ((vx_float32)x2 + 0.5f)*wr - 0.5f;
+            vx_float32 y_src = ((vx_float32)y2 + 0.5f)*hr - 0.5f;
+            vx_float32 x_min = floorf(x_src);
+            vx_float32 y_min = floorf(y_src);
+            x1 = (vx_int32)x_min;
+            y1 = (vx_int32)y_min;
+
+            if (x_src - x_min >= 0.5f)
+                x1++;
+            if (y_src - y_min >= 0.5f)
+                y1++;
+
+            if (dst && vx_true_e == own_read_pixel_16s(src_base, &src_addr, x1, y1, borders, &v))
+                *dst = v;
+        }
+    }
+
+    status |= vxUnmapImagePatch(src_image, map_id1);
+    status |= vxUnmapImagePatch(dst_image, map_id2);
+
+    return VX_SUCCESS;
+}
+
+static const vx_uint32 gaussian5x5scale = 256;
+static const vx_int16 gaussian5x5[5][5] =
+{
+    { 1, 4, 6, 4, 1 },
+    { 4, 16, 24, 16, 4 },
+    { 6, 24, 36, 24, 6 },
+    { 4, 16, 24, 16, 4 },
+    { 1, 4, 6, 4, 1 }
+};
+
+static vx_convolution vxCreateGaussian5x5Convolution(vx_context context)
+{
+    vx_convolution conv = vxCreateConvolution(context, 5, 5);
+    vx_status status = vxCopyConvolutionCoefficients(conv, (vx_int16 *)gaussian5x5, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+    if (status != VX_SUCCESS)
+    {
+        vxReleaseConvolution(&conv);
+        return NULL;
+    }
+
+    status = vxSetConvolutionAttribute(conv, VX_CONVOLUTION_SCALE, (void *)&gaussian5x5scale, sizeof(vx_uint32));
+    if (status != VX_SUCCESS)
+    {
+        vxReleaseConvolution(&conv);
+        return NULL;
+    }
+    return conv;
+}
+
+void readRect(const void *base, const vx_imagepatch_addressing_t *addr, const vx_border_t *borders, vx_df_image type,
+    vx_uint32 center_x, vx_uint32 center_y, vx_uint32 radius_x, vx_uint32 radius_y, void *destination)
+{
+    vx_int32 width = (vx_int32)addr->dim_x, height = (vx_int32)addr->dim_y;
+    vx_int32 stride_y = addr->stride_y;
+    vx_int32 stride_x = addr->stride_x;
+    const vx_uint8 *ptr = (const vx_uint8 *)base;
+    vx_int32 ky, kx;
+    vx_uint32 dest_index = 0;
+    // kx, kx - kernel x and y
+    if (borders->mode == VX_BORDER_REPLICATE || borders->mode == VX_BORDER_UNDEFINED)
+    {
+        for (ky = -(int32_t)radius_y; ky <= (int32_t)radius_y; ++ky)
+        {
+            vx_int32 y = (vx_int32)(center_y + ky);
+            y = y < 0 ? 0 : (y >= height ? height - 1 : y);
+
+            for (kx = -(int32_t)radius_x; kx <= (int32_t)radius_x; ++kx, ++dest_index)
+            {
+                vx_int32 x = (int32_t)(center_x + kx);
+                x = x < 0 ? 0 : (x >= width ? width - 1 : x);
+
+                switch (type)
+                {
+                case VX_DF_IMAGE_U8:
+                    ((vx_uint8*)destination)[dest_index] = *(vx_uint8*)(ptr + y*stride_y + x*stride_x);
+                    break;
+                case VX_DF_IMAGE_S16:
+                case VX_DF_IMAGE_U16:
+                    ((vx_uint16*)destination)[dest_index] = *(vx_uint16*)(ptr + y*stride_y + x*stride_x);
+                    break;
+                case VX_DF_IMAGE_S32:
+                case VX_DF_IMAGE_U32:
+                    ((vx_uint32*)destination)[dest_index] = *(vx_uint32*)(ptr + y*stride_y + x*stride_x);
+                    break;
+                default:
+                    abort();
+                }
+            }
+        }
+    }
+    else if (borders->mode == VX_BORDER_CONSTANT)
+    {
+        vx_pixel_value_t cval = borders->constant_value;
+        for (ky = -(int32_t)radius_y; ky <= (int32_t)radius_y; ++ky)
+        {
+            vx_int32 y = (vx_int32)(center_y + ky);
+            int ccase_y = y < 0 || y >= height;
+
+            for (kx = -(int32_t)radius_x; kx <= (int32_t)radius_x; ++kx, ++dest_index)
+            {
+                vx_int32 x = (int32_t)(center_x + kx);
+                int ccase = ccase_y || x < 0 || x >= width;
+
+                switch (type)
+                {
+                case VX_DF_IMAGE_U8:
+                    if (!ccase)
+                        ((vx_uint8*)destination)[dest_index] = *(vx_uint8*)(ptr + y*stride_y + x*stride_x);
+                    else
+                        ((vx_uint8*)destination)[dest_index] = (vx_uint8)cval.U8;
+                    break;
+                case VX_DF_IMAGE_S16:
+                case VX_DF_IMAGE_U16:
+                    if (!ccase)
+                        ((vx_uint16*)destination)[dest_index] = *(vx_uint16*)(ptr + y*stride_y + x*stride_x);
+                    else
+                        ((vx_uint16*)destination)[dest_index] = (vx_uint16)cval.U16;
+                    break;
+                case VX_DF_IMAGE_S32:
+                case VX_DF_IMAGE_U32:
+                    if (!ccase)
+                        ((vx_uint32*)destination)[dest_index] = *(vx_uint32*)(ptr + y*stride_y + x*stride_x);
+                    else
+                        ((vx_uint32*)destination)[dest_index] = (vx_uint32)cval.U32;
+                    break;
+                default:
+                    abort();
+                }
+            }
+        }
+    }
+    else
+        abort();
+}
+
+#define CONV_DIM 5
+#define CONV_DIM_HALF CONV_DIM / 2
+
+#define INSERT_ZERO_Y(slice, y) for (int i=0; i<CONV_DIM; i++) slice[CONV_DIM*(1-y)+i] = 0;
+#define INSERT_VALUES_Y(slice, y) for (int i=0; i<CONV_DIM; i++) slice[CONV_DIM*(high_y-y)+i+CONV_DIM_HALF*CONV_DIM] = slice[CONV_DIM*(high_y-y)+i];
+#define INSERT_ZERO_X(slice, x) for (int i=0; i<CONV_DIM; i++) slice[CONV_DIM*i+1-x] = 0;
+#define INSERT_VALUES_X(slice, x) for (int i=0; i<CONV_DIM; i++) slice[CONV_DIM*i+(high_x-x)+CONV_DIM_HALF] = slice[CONV_DIM*i+(high_x-x)];
+
+#define C_MAX_CONVOLUTION_DIM 15
+vx_status convolve(vx_image src, vx_convolution conv, vx_image dst, vx_border_t *bordermode)
+{
+    vx_int32 y, x, i;
+    void *src_base = NULL;
+    void *dst_base = NULL;
+    vx_imagepatch_addressing_t src_addr, dst_addr;
+    vx_rectangle_t rect;
+
+    vx_size conv_width, conv_height;
+    vx_int32 conv_radius_x, conv_radius_y;
+    vx_int16 conv_mat[C_MAX_CONVOLUTION_DIM * C_MAX_CONVOLUTION_DIM] = { 0 };
+    vx_int32 sum = 0, value = 0;
+    vx_uint32 scale = 1;
+    vx_df_image src_format = 0;
+    vx_df_image dst_format = 0;
+    vx_status status = VX_SUCCESS;
+    vx_int32 low_x, low_y, high_x, high_y;
+
+    status |= vxQueryImage(src, VX_IMAGE_FORMAT, &src_format, sizeof(src_format));
+    status |= vxQueryImage(dst, VX_IMAGE_FORMAT, &dst_format, sizeof(dst_format));
+    status |= vxQueryConvolution(conv, VX_CONVOLUTION_COLUMNS, &conv_width, sizeof(conv_width));
+    status |= vxQueryConvolution(conv, VX_CONVOLUTION_ROWS, &conv_height, sizeof(conv_height));
+    status |= vxQueryConvolution(conv, VX_CONVOLUTION_SCALE, &scale, sizeof(scale));
+    conv_radius_x = (vx_int32)conv_width / 2;
+    conv_radius_y = (vx_int32)conv_height / 2;
+    status |= vxCopyConvolutionCoefficients(conv, conv_mat, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    status |= vxGetValidRegionImage(src, &rect);
+    status |= vxAccessImagePatch(src, &rect, 0, &src_addr, &src_base, VX_READ_ONLY);
+    status |= vxAccessImagePatch(dst, &rect, 0, &dst_addr, &dst_base, VX_WRITE_ONLY);
+
+    low_x = 0;
+    high_x = src_addr.dim_x;
+    low_y = 0;
+    high_y = src_addr.dim_y;
+
+    for (y = low_y; y < high_y; ++y)
+    {
+        for (x = low_x; x < high_x; ++x)
+        {
+            sum = 0;
+
+            if (src_format == VX_DF_IMAGE_U8)
+            {
+                vx_uint8 slice[C_MAX_CONVOLUTION_DIM * C_MAX_CONVOLUTION_DIM] = { 0 };
+
+                readRect(src_base, &src_addr, bordermode, src_format, x, y, conv_radius_x, conv_radius_y, slice);
+
+                // purpose of this section is to compensate extra terms caused by replicate border mode (it is the only one allowed)
+
+                if (y < CONV_DIM_HALF)
+                {
+                    INSERT_ZERO_Y(slice, y)
+                }
+                else if (y >= high_y - CONV_DIM_HALF)
+                {
+                    INSERT_VALUES_Y(slice, y)
+                }
+
+                if (x < CONV_DIM_HALF)
+                {
+                    INSERT_ZERO_X(slice, x)
+                }
+                else if (x >= high_x - CONV_DIM_HALF)
+                {
+                    INSERT_VALUES_X(slice, x)
+                }
+
+                for (i = 0; i < (vx_int32)(conv_width * conv_height); ++i)
+                    sum += conv_mat[conv_width * conv_height - 1 - i] * slice[i];
+            }
+            else if (src_format == VX_DF_IMAGE_S16)
+            {
+                vx_int16 slice[C_MAX_CONVOLUTION_DIM * C_MAX_CONVOLUTION_DIM] = { 0 };
+
+                readRect(src_base, &src_addr, bordermode, src_format, x, y, conv_radius_x, conv_radius_y, slice);
+
+                if (y < CONV_DIM_HALF)
+                {
+                    INSERT_ZERO_Y(slice, y)
+                }
+                else if (y >= high_y - CONV_DIM_HALF)
+                {
+                    INSERT_VALUES_Y(slice, y)
+                }
+
+                if (x < CONV_DIM_HALF)
+                {
+                    INSERT_ZERO_X(slice, x)
+                }
+                else if (x >= high_x - CONV_DIM_HALF)
+                {
+                    INSERT_VALUES_X(slice, x)
+                }
+
+                for (i = 0; i < (vx_int32)(conv_width * conv_height); ++i)
+                    sum += conv_mat[conv_width * conv_height - 1 - i] * slice[i];
+            }
+
+            value = sum / (vx_int32)scale;
+
+            if (dst_format == VX_DF_IMAGE_U8)
+            {
+                vx_uint8 *dstp = vxFormatImagePatchAddress2d(dst_base, x, y, &dst_addr);
+                if (value < 0) *dstp = 0;
+                else if (value > UINT8_MAX) *dstp = UINT8_MAX;
+                else *dstp = value;
+            }
+            else if (dst_format == VX_DF_IMAGE_S16)
+            {
+                vx_int16 *dstp = vxFormatImagePatchAddress2d(dst_base, x, y, &dst_addr);
+                if (value < INT16_MIN) *dstp = INT16_MIN;
+                else if (value > INT16_MAX) *dstp = INT16_MAX;
+                else *dstp = value;
+            }
+        }
+    }
+
+    status |= vxCommitImagePatch(src, NULL, 0, &src_addr, src_base);
+    status |= vxCommitImagePatch(dst, &rect, 0, &dst_addr, dst_base);
+
+    return status;
+}
+
+static vx_status upsampleImage(vx_context context, vx_uint32 width, vx_uint32 height, vx_image filling, vx_convolution conv, vx_image upsample, vx_border_t *border)
+{
+    vx_status status = VX_SUCCESS;
+    vx_df_image format, filling_format;
+
+    format = VX_DF_IMAGE_U8;
+    vx_image tmp = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
+    status |= vxQueryImage(filling, VX_IMAGE_FORMAT, &filling_format, sizeof(filling_format));
+
+    vx_rectangle_t tmp_rect, filling_rect;
+    vx_imagepatch_addressing_t tmp_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_imagepatch_addressing_t filling_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_map_id tmp_map_id, filling_map_id;
+    void *tmp_base = NULL;
+    void *filling_base = NULL;
+
+    status = vxGetValidRegionImage(tmp, &tmp_rect);
+    status |= vxMapImagePatch(tmp, &tmp_rect, 0, &tmp_map_id, &tmp_addr, (void **)&tmp_base, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+    status = vxGetValidRegionImage(filling, &filling_rect);
+    status |= vxMapImagePatch(filling, &filling_rect, 0, &filling_map_id, &filling_addr, (void **)&filling_base, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+
+    for (vx_uint32 ix = 0; ix < width; ix++)
+    {
+        for (vx_uint32 iy = 0; iy < height; iy++)
+        {
+
+            void* tmp_datap = vxFormatImagePatchAddress2d(tmp_base, ix, iy, &tmp_addr);
+
+            if (iy % 2 != 0 || ix % 2 != 0)
+            {
+                if (format == VX_DF_IMAGE_U8)
+                    *(vx_uint8 *)tmp_datap = (vx_uint8)0;
+                else
+                    *(vx_int16 *)tmp_datap = (vx_int16)0;
+            }
+            else
+            {
+                void* filling_tmp = vxFormatImagePatchAddress2d(filling_base, ix / 2, iy / 2, &filling_addr);
+                vx_int32 filling_data = filling_format == VX_DF_IMAGE_U8 ? *(vx_uint8 *)filling_tmp : *(vx_int16 *)filling_tmp;
+                if (format == VX_DF_IMAGE_U8)
+                {
+                    if (filling_data > UINT8_MAX)
+                        filling_data = UINT8_MAX;
+                    else if (filling_data < 0)
+                        filling_data = 0;
+                    *(vx_uint8 *)tmp_datap = (vx_uint8)filling_data;
+                }
+                else
+                {
+                    if (filling_data > INT16_MAX)
+                        filling_data = INT16_MAX;
+                    else if (filling_data < INT16_MIN)
+                        filling_data = INT16_MIN;
+                    *(vx_int16 *)tmp_datap = (vx_int16)filling_data;
+                }
+            }
+        }
+    }
+
+    status |= vxUnmapImagePatch(tmp, tmp_map_id);
+    status |= vxUnmapImagePatch(filling, filling_map_id);
+
+    status |= convolve(tmp, conv, upsample, border);
+
+    vx_rectangle_t upsample_rect;
+    vx_imagepatch_addressing_t upsample_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_map_id upsample_map_id;
+    void * upsample_base = NULL;
+    vx_df_image upsample_format;
+
+    status |= vxQueryImage(upsample, VX_IMAGE_FORMAT, &upsample_format, sizeof(upsample_format));
+    status = vxGetValidRegionImage(upsample, &upsample_rect);
+    status |= vxMapImagePatch(upsample, &upsample_rect, 0, &upsample_map_id, &upsample_addr, (void **)&upsample_base, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+
+    for (vx_uint32 ix = 0; ix < width; ix++)
+    {
+        for (vx_uint32 iy = 0; iy < height; iy++)
+        {
+            void* upsample_p = vxFormatImagePatchAddress2d(upsample_base, ix, iy, &upsample_addr);
+            vx_int32 upsample_data = upsample_format == VX_DF_IMAGE_U8 ? *(vx_uint8 *)upsample_p : *(vx_int16 *)upsample_p;
+            upsample_data *= 4;
+            if (upsample_format == VX_DF_IMAGE_U8)
+            {
+                if (upsample_data > UINT8_MAX)
+                    upsample_data = UINT8_MAX;
+                else if (upsample_data < 0)
+                    upsample_data = 0;
+                *(vx_uint8 *)upsample_p = (vx_uint8)upsample_data;
+            }
+            else
+            {
+                if (upsample_data > INT16_MAX)
+                    upsample_data = INT16_MAX;
+                else if (upsample_data < INT16_MIN)
+                    upsample_data = INT16_MIN;
+                *(vx_int16 *)upsample_p = (vx_int16)upsample_data;
+            }
+        }
+    }
+    status |= vxUnmapImagePatch(upsample, upsample_map_id);
+    status |= vxReleaseImage(&tmp);
+    return status;
+}
+
+static void own_laplacian_pyramid_reference(vx_context context, vx_border_t border, vx_image input, vx_pyramid laplacian, vx_image output)
+{
+    vx_uint32 i;
+    vx_size levels = 0;
+    vx_uint32 width = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = 0;
+    vx_pyramid gaussian = 0;
+    vx_convolution conv = 0;
+
+    border.mode = VX_BORDER_REPLICATE;
+    
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxQueryPyramid(laplacian, VX_PYRAMID_LEVELS, &levels, sizeof(levels)));
+
+    VX_CALL(vxQueryImage(input, VX_IMAGE_WIDTH, &width, sizeof(width)));
+    VX_CALL(vxQueryImage(input, VX_IMAGE_HEIGHT, &height, sizeof(height)));
+    VX_CALL(vxQueryImage(input, VX_IMAGE_FORMAT, &format, sizeof(format)));
+
+    ASSERT_VX_OBJECT(gaussian = vxCreatePyramid(context, levels + 1, VX_SCALE_PYRAMID_HALF, width, height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+
+    VX_CALL(vxuGaussianPyramid(context, input, gaussian));
+
+    ASSERT_VX_OBJECT(conv = vxCreateConvolution(context, 5, 5), VX_TYPE_CONVOLUTION);
+
+    VX_CALL(vxCopyConvolutionCoefficients(conv, (vx_int16*)gaussian5x5, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+    VX_CALL(vxSetConvolutionAttribute(conv, VX_CONVOLUTION_SCALE, (void*)&gaussian5x5scale, sizeof(gaussian5x5scale)));
+
+    for (i = 0; i < levels; i++)
+    {
+        vx_uint32 w = 0;
+        vx_uint32 h = 0;
+        vx_image in1 = 0;
+        vx_image in2 = 0;
+        vx_image filter = 0;
+        vx_image out = 0;
+
+        ASSERT_VX_OBJECT(in1 = vxGetPyramidLevel(gaussian, i), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(in2 = vxGetPyramidLevel(gaussian, i + 1), VX_TYPE_IMAGE);
+
+        VX_CALL(vxQueryImage(in1, VX_IMAGE_WIDTH, &w, sizeof(vx_uint32)));
+        VX_CALL(vxQueryImage(in1, VX_IMAGE_HEIGHT, &h, sizeof(vx_uint32)));
+
+        ASSERT_VX_OBJECT(filter = vxCreateImage(context, w, h, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+        border.mode = VX_BORDER_REPLICATE;
+        upsampleImage(context, w, h, in2, conv, filter, &border);
+        /* laplacian is S16 format */
+        ASSERT_VX_OBJECT(out = vxGetPyramidLevel(laplacian, i), VX_TYPE_IMAGE);
+        VX_CALL(vxuSubtract(context, in1, filter, VX_CONVERT_POLICY_SATURATE, out));
+
+        if (i == levels - 1)
+        {
+            vx_image tmp = vxGetPyramidLevel(gaussian, levels);
+            ownCopyImage(tmp, output);
+            VX_CALL(vxReleaseImage(&tmp));
+        }
+
+        VX_CALL(vxReleaseImage(&filter));
+        VX_CALL(vxReleaseImage(&in1));
+        VX_CALL(vxReleaseImage(&in2));
+        VX_CALL(vxReleaseImage(&out));
+
+    }
+
+    VX_CALL(vxReleasePyramid(&gaussian));
+    VX_CALL(vxReleaseConvolution(&conv));
+
+    ASSERT(conv == 0);
+    ASSERT(gaussian == 0);
+
+    return;
+}
+
+static void own_laplacian_pyramid_openvx(vx_context context, vx_border_t border, vx_image input, vx_pyramid laplacian, vx_image output)
+{
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxLaplacianPyramidNode(graph, input, laplacian, output), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    return;
+}
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width;
+    int height;
+} Arg;
+
+
+#define ADD_SIZE_OWN_SET(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=128x128", __VA_ARGS__, 128, 128)), \
+    CT_EXPAND(nextmacro(testArgName "/sz=256x256", __VA_ARGS__, 256, 256)), \
+    CT_EXPAND(nextmacro(testArgName "/sz=640x480", __VA_ARGS__, 640, 480))
+
+
+#define LAPLACIAN_PYRAMID_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_OWN_SET, ARG, own_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, own_read_image, "lena.bmp")
+
+TEST_WITH_ARG(LaplacianPyramid, testGraphProcessing, Arg, LAPLACIAN_PYRAMID_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_size levels = 0;
+    vx_uint32 i;
+    vx_image src = 0;
+    vx_image ref_dst = 0;
+    vx_image tst_dst = 0;
+    vx_pyramid ref_pyr = 0;
+    vx_pyramid tst_pyr = 0;
+
+    CT_Image input = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = own_pyramid_calc_max_levels_count(input->width, input->height, VX_SCALE_PYRAMID_HALF) - 1;
+
+    {
+        vx_uint32 next_lev_width = input->width;
+        vx_uint32 next_lev_height = input->height;
+
+        ASSERT_VX_OBJECT(ref_pyr = vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, input->width, input->height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(tst_pyr = vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, input->width, input->height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+
+        for (i = 1; i < levels + 1; i++)
+        {
+            next_lev_width = (vx_uint32)ceilf(next_lev_width * VX_SCALE_PYRAMID_HALF);
+            next_lev_height = (vx_uint32)ceilf(next_lev_height * VX_SCALE_PYRAMID_HALF);
+        }
+
+        ASSERT_VX_OBJECT(ref_dst = vxCreateImage(context, next_lev_width, next_lev_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(tst_dst = vxCreateImage(context, next_lev_width, next_lev_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    }
+
+    own_laplacian_pyramid_reference(context, border, src, ref_pyr, ref_dst);
+    own_laplacian_pyramid_openvx(context, border, src, tst_pyr, tst_dst);
+
+    {
+        CT_Image ct_ref_dst = 0;
+        CT_Image ct_tst_dst = 0;
+
+        ASSERT_NO_FAILURE(ct_ref_dst = ct_image_from_vx_image(ref_dst));
+        ASSERT_NO_FAILURE(ct_tst_dst = ct_image_from_vx_image(tst_dst));
+        EXPECT_CTIMAGE_NEAR(ct_ref_dst, ct_tst_dst, 1);
+
+        for (i = 0; i < levels; i++)
+        {
+            CT_Image ct_ref_lev = 0;
+            CT_Image ct_tst_lev = 0;
+            vx_image ref_lev = 0;
+            vx_image tst_lev = 0;
+
+            ASSERT_VX_OBJECT(ref_lev = vxGetPyramidLevel(ref_pyr, i), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(tst_lev = vxGetPyramidLevel(tst_pyr, i), VX_TYPE_IMAGE);
+
+            ASSERT_NO_FAILURE(ct_ref_lev = ct_image_from_vx_image(ref_lev));
+            ASSERT_NO_FAILURE(ct_tst_lev = ct_image_from_vx_image(tst_lev));
+            EXPECT_CTIMAGE_NEAR(ct_ref_lev, ct_tst_lev, 1);
+
+            VX_CALL(vxReleaseImage(&ref_lev));
+            VX_CALL(vxReleaseImage(&tst_lev));
+        }
+    }
+
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleasePyramid(&ref_pyr));
+    VX_CALL(vxReleasePyramid(&tst_pyr));
+    VX_CALL(vxReleaseImage(&ref_dst));
+    VX_CALL(vxReleaseImage(&tst_dst));
+
+    ASSERT(src == 0);
+    ASSERT(ref_pyr == 0);
+    ASSERT(tst_pyr == 0);
+    ASSERT(ref_dst == 0);
+    ASSERT(tst_dst == 0);
+}
+
+TEST_WITH_ARG(LaplacianPyramid, testImmediateProcessing, Arg, LAPLACIAN_PYRAMID_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_size levels = 0;
+    vx_uint32 i;
+    vx_image src = 0;
+    vx_image ref_dst = 0;
+    vx_image tst_dst = 0;
+    vx_pyramid ref_pyr = 0;
+    vx_pyramid tst_pyr = 0;
+    int undefined_border = 2; // 5x5 kernel border
+
+    CT_Image input = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = own_pyramid_calc_max_levels_count(input->width, input->height, VX_SCALE_PYRAMID_HALF) - 1;
+
+    {
+        vx_uint32 next_lev_width = input->width;
+        vx_uint32 next_lev_height = input->height;
+
+        ASSERT_VX_OBJECT(ref_pyr = vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, input->width, input->height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+        ASSERT_VX_OBJECT(tst_pyr = vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, input->width, input->height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+
+        for (i = 1; i < levels + 1; i++)
+        {
+            next_lev_width = (vx_uint32)ceilf(next_lev_width * VX_SCALE_PYRAMID_HALF);
+            next_lev_height = (vx_uint32)ceilf(next_lev_height * VX_SCALE_PYRAMID_HALF);
+        }
+
+        ASSERT_VX_OBJECT(ref_dst = vxCreateImage(context, next_lev_width, next_lev_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(tst_dst = vxCreateImage(context, next_lev_width, next_lev_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    }
+
+    own_laplacian_pyramid_reference(context, border, src, ref_pyr, ref_dst);
+    
+    border.mode = VX_BORDER_REPLICATE;
+    
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+    VX_CALL(vxuLaplacianPyramid(context, src, tst_pyr, tst_dst));
+
+    {
+        CT_Image ct_ref_dst = 0;
+        CT_Image ct_tst_dst = 0;
+
+        ASSERT_NO_FAILURE(ct_ref_dst = ct_image_from_vx_image(ref_dst));
+        ASSERT_NO_FAILURE(ct_tst_dst = ct_image_from_vx_image(tst_dst));
+        ASSERT_NO_FAILURE(ct_adjust_roi(ct_ref_dst, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border));
+        ASSERT_NO_FAILURE(ct_adjust_roi(ct_tst_dst, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border));
+        EXPECT_CTIMAGE_NEAR(ct_ref_dst, ct_tst_dst, 1);
+
+        for (i = 0; i < levels; i++)
+        {
+            CT_Image ct_ref_lev = 0;
+            CT_Image ct_tst_lev = 0;
+            vx_image ref_lev = 0;
+            vx_image tst_lev = 0;
+
+            ASSERT_VX_OBJECT(ref_lev = vxGetPyramidLevel(ref_pyr, i), VX_TYPE_IMAGE);
+            ASSERT_VX_OBJECT(tst_lev = vxGetPyramidLevel(tst_pyr, i), VX_TYPE_IMAGE);
+
+            ASSERT_NO_FAILURE(ct_ref_lev = ct_image_from_vx_image(ref_lev));
+            ASSERT_NO_FAILURE(ct_tst_lev = ct_image_from_vx_image(tst_lev));
+            ASSERT_NO_FAILURE(ct_adjust_roi(ct_ref_lev, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border));
+            ASSERT_NO_FAILURE(ct_adjust_roi(ct_tst_lev, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border, 2 * undefined_border));
+            EXPECT_CTIMAGE_NEAR(ct_ref_lev, ct_tst_lev, 1);
+
+            VX_CALL(vxReleaseImage(&ref_lev));
+            VX_CALL(vxReleaseImage(&tst_lev));
+        }
+    }
+
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleasePyramid(&ref_pyr));
+    VX_CALL(vxReleasePyramid(&tst_pyr));
+    VX_CALL(vxReleaseImage(&ref_dst));
+    VX_CALL(vxReleaseImage(&tst_dst));
+
+    ASSERT(src == 0);
+    ASSERT(ref_pyr == 0);
+    ASSERT(tst_pyr == 0);
+    ASSERT(ref_dst == 0);
+    ASSERT(tst_dst == 0);
+}
+
+TESTCASE_TESTS(LaplacianPyramid,
+    testNodeCreation,
+    testGraphProcessing,
+    testImmediateProcessing
+)
+
+/* reconstruct image from laplacian pyramid */
+
+#define VX_SCALE_PYRAMID_DOUBLE (2.0f)
+
+TESTCASE(LaplacianReconstruct, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(LaplacianReconstruct, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_pyramid laplacian = 0;
+    vx_image   input = 0;
+    vx_image   output = 0;
+    vx_graph   graph = 0;
+    vx_node    node = 0;
+    const vx_size levels = 4;
+    const vx_float32 scale = VX_SCALE_PYRAMID_HALF;
+    const vx_uint32 width = 640;
+    const vx_uint32 height = 480;
+    vx_size num_levels = levels;
+    vx_uint32 w = width;
+    vx_uint32 h = height;
+
+    while (num_levels--)
+    {
+        w = (vx_uint32)ceilf(w * scale);
+        h = (vx_uint32)ceilf(h * scale);
+    }
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, w, h, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, width, height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(laplacian = vxCreatePyramid(context, levels, scale, width, height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxLaplacianReconstructNode(graph, laplacian, input, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleasePyramid(&laplacian));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(laplacian == 0);
+    ASSERT(input == 0);
+    ASSERT(output == 0);
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+}
+
+static void own_laplacian_reconstruct_reference(vx_context context, vx_border_t border, vx_pyramid laplacian, vx_image input, vx_image output)
+{
+    vx_size i;
+    vx_size levels = 0;
+    vx_uint32 width = 0;
+    vx_uint32 height = 0;
+    vx_uint32 prev_lev_width = 0;
+    vx_uint32 prev_lev_height = 0;
+    vx_df_image format = 0;
+    vx_image pyr_level = 0;
+    vx_image filling = 0;
+    vx_image filter = 0;
+    vx_image out = 0;
+    vx_convolution conv;
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxQueryPyramid(laplacian, VX_PYRAMID_LEVELS, &levels, sizeof(vx_size)));
+    VX_CALL(vxQueryPyramid(laplacian, VX_PYRAMID_FORMAT, &format, sizeof(vx_df_image)));
+
+    VX_CALL(vxQueryImage(input, VX_IMAGE_WIDTH, &width, sizeof(vx_uint32)));
+    VX_CALL(vxQueryImage(input, VX_IMAGE_HEIGHT, &height, sizeof(vx_uint32)));
+
+    conv = vxCreateGaussian5x5Convolution(context);
+
+    prev_lev_width = (vx_uint32)ceilf(width  * VX_SCALE_PYRAMID_DOUBLE);
+    prev_lev_height = (vx_uint32)ceilf(height * VX_SCALE_PYRAMID_DOUBLE);
+
+    ASSERT_VX_OBJECT(filling = vxCreateImage(context, width, height, format), VX_TYPE_IMAGE);
+    VX_CALL(ownCopyImage(input, filling));
+
+    for (i = 0; i < levels; i++)
+    {
+        ASSERT_VX_OBJECT(pyr_level = vxGetPyramidLevel(laplacian, (vx_uint32)((levels - 1) - i)), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(out = vxCreateImage(context, prev_lev_width, prev_lev_height, format), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(filter = vxCreateImage(context, prev_lev_width, prev_lev_height, format), VX_TYPE_IMAGE);
+
+        upsampleImage(context, prev_lev_width, prev_lev_height, filling, conv, filter, &border);
+        VX_CALL(vxuAdd(context, filter, pyr_level, VX_CONVERT_POLICY_SATURATE, out));
+
+        VX_CALL(vxReleaseImage(&pyr_level));
+
+        if ((levels - 1) - i == 0)
+        {
+            VX_CALL(ownCopyImage(out, output));
+            VX_CALL(vxReleaseImage(&filling));
+        }
+        else
+        {
+            VX_CALL(vxReleaseImage(&filling));
+            ASSERT_VX_OBJECT(filling = vxCreateImage(context, prev_lev_width, prev_lev_height, format), VX_TYPE_IMAGE);
+            VX_CALL(ownCopyImage(out, filling));
+            /* compute dimensions for the prev level */
+            prev_lev_width = (vx_uint32)ceilf(prev_lev_width * VX_SCALE_PYRAMID_DOUBLE);
+            prev_lev_height = (vx_uint32)ceilf(prev_lev_height * VX_SCALE_PYRAMID_DOUBLE);
+        }
+
+        VX_CALL(vxReleaseImage(&out));
+        VX_CALL(vxReleaseImage(&filter));
+    }
+
+    VX_CALL(vxReleaseConvolution(&conv));
+
+    return;
+}
+
+static void own_laplacian_reconstruct_openvx(vx_context context, vx_border_t border, vx_pyramid laplacian, vx_image input, vx_image output)
+{
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxLaplacianReconstructNode(graph, laplacian, input, output), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    return;
+}
+
+#define LAPLACIAN_RECONSTRUCT_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_OWN_SET, ARG, own_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, own_read_image, "lena.bmp")
+
+TEST_WITH_ARG(LaplacianReconstruct, testGraphProcessing, Arg, LAPLACIAN_RECONSTRUCT_PARAMETERS)
+{
+    vx_uint32 i;
+    vx_context context = context_->vx_context_;
+    vx_size levels = 0;
+    vx_image src = 0;
+    vx_image ref_lowest_res = 0;
+    vx_image ref_dst = 0;
+    vx_image tst_dst = 0;
+    vx_pyramid ref_pyr = 0;
+
+    CT_Image input = NULL;
+
+    //vx_border_t border = arg_->border;
+    vx_border_t build_border = { VX_BORDER_REPLICATE };
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = own_pyramid_calc_max_levels_count(input->width, input->height, VX_SCALE_PYRAMID_HALF) - 1;
+
+    {
+        vx_uint32 lowest_res_width = input->width;
+        vx_uint32 lowest_res_height = input->height;
+
+        for (i = 0; i < levels; i++)
+        {
+            lowest_res_width = (vx_uint32)ceilf(lowest_res_width * VX_SCALE_PYRAMID_HALF);
+            lowest_res_height = (vx_uint32)ceilf(lowest_res_height * VX_SCALE_PYRAMID_HALF);
+        }
+
+        ASSERT_VX_OBJECT(ref_pyr = vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, input->width, input->height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+
+        ASSERT_VX_OBJECT(ref_lowest_res = vxCreateImage(context, lowest_res_width, lowest_res_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(ref_dst = vxCreateImage(context, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(tst_dst = vxCreateImage(context, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    }
+
+    own_laplacian_pyramid_reference(context, build_border, src, ref_pyr, ref_lowest_res);
+    own_laplacian_reconstruct_reference(context, build_border, ref_pyr, ref_lowest_res, ref_dst);
+    own_laplacian_reconstruct_openvx(context, build_border, ref_pyr, ref_lowest_res, tst_dst);
+
+    {
+        CT_Image ct_ref_dst = 0;
+        CT_Image ct_tst_dst = 0;
+
+        ASSERT_NO_FAILURE(ct_ref_dst = ct_image_from_vx_image(ref_dst));
+        ASSERT_NO_FAILURE(ct_tst_dst = ct_image_from_vx_image(tst_dst));
+        EXPECT_CTIMAGE_NEAR(ct_ref_dst, ct_tst_dst, 1);
+    }
+
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleasePyramid(&ref_pyr));
+    VX_CALL(vxReleaseImage(&ref_lowest_res));
+    VX_CALL(vxReleaseImage(&ref_dst));
+    VX_CALL(vxReleaseImage(&tst_dst));
+
+    ASSERT(src == 0);
+    ASSERT(ref_pyr == 0);
+    ASSERT(ref_lowest_res == 0);
+    ASSERT(ref_dst == 0);
+    ASSERT(tst_dst == 0);
+}
+
+TEST_WITH_ARG(LaplacianReconstruct, testImmediateProcessing, Arg, LAPLACIAN_RECONSTRUCT_PARAMETERS)
+{
+    vx_uint32 i;
+    vx_context context = context_->vx_context_;
+    vx_size levels = 0;
+    vx_image src = 0;
+    vx_image ref_lovest_res = 0;
+    vx_image ref_dst = 0;
+    vx_image tst_dst = 0;
+    vx_pyramid ref_pyr = 0;
+
+    CT_Image input = NULL;
+
+    //vx_border_t border = arg_->border;
+    vx_border_t build_border = { VX_BORDER_REPLICATE };
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+
+    levels = own_pyramid_calc_max_levels_count(input->width, input->height, VX_SCALE_PYRAMID_HALF) - 1;
+
+    {
+        vx_uint32 lowest_res_width = input->width;
+        vx_uint32 lowest_res_height = input->height;
+
+        for (i = 0; i < levels; i++)
+        {
+            lowest_res_width = (vx_uint32)ceilf(lowest_res_width * VX_SCALE_PYRAMID_HALF);
+            lowest_res_height = (vx_uint32)ceilf(lowest_res_height * VX_SCALE_PYRAMID_HALF);
+        }
+
+        ASSERT_VX_OBJECT(ref_pyr = vxCreatePyramid(context, levels, VX_SCALE_PYRAMID_HALF, input->width, input->height, VX_DF_IMAGE_S16), VX_TYPE_PYRAMID);
+
+        ASSERT_VX_OBJECT(ref_lovest_res = vxCreateImage(context, lowest_res_width, lowest_res_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(ref_dst = vxCreateImage(context, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ASSERT_VX_OBJECT(tst_dst = vxCreateImage(context, input->width, input->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    }
+
+    own_laplacian_pyramid_reference(context, build_border, src, ref_pyr, ref_lovest_res);
+    own_laplacian_reconstruct_reference(context, build_border, ref_pyr, ref_lovest_res, ref_dst);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &build_border, sizeof(build_border)));
+    VX_CALL(vxuLaplacianReconstruct(context, ref_pyr, ref_lovest_res, tst_dst));
+
+    {
+        CT_Image ct_ref_dst = 0;
+        CT_Image ct_tst_dst = 0;
+
+        ASSERT_NO_FAILURE(ct_ref_dst = ct_image_from_vx_image(ref_dst));
+        ASSERT_NO_FAILURE(ct_tst_dst = ct_image_from_vx_image(tst_dst));
+        EXPECT_CTIMAGE_NEAR(ct_ref_dst, ct_tst_dst, 1);
+    }
+
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleasePyramid(&ref_pyr));
+    VX_CALL(vxReleaseImage(&ref_lovest_res));
+    VX_CALL(vxReleaseImage(&ref_dst));
+    VX_CALL(vxReleaseImage(&tst_dst));
+
+    ASSERT(src == 0);
+    ASSERT(ref_pyr == 0);
+    ASSERT(ref_lovest_res == 0);
+    ASSERT(ref_dst == 0);
+    ASSERT(tst_dst == 0);
+}
+
+TESTCASE_TESTS(LaplacianReconstruct,
+    testNodeCreation,
+    testGraphProcessing,
+    testImmediateProcessing
+)
diff --git a/test_conformance/test_lbp.c b/test_conformance/test_lbp.c
new file mode 100644
index 0000000..fcf1f6a
--- /dev/null
+++ b/test_conformance/test_lbp.c
@@ -0,0 +1,160 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(LBP, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(LBP, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, output = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxLBPNode(graph, input, VX_LBP, 3, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(output == 0);
+    ASSERT(input == 0);
+}
+
+
+static CT_Image lbp_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+typedef struct {
+    const char* filename;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    vx_enum format;
+    vx_int8 kernel_size;
+    const char* golden_image;
+} Arg;
+
+#define PARAMETERS \
+    ARG("lbp_3x3_standard.bmp", lbp_read_image, (vx_enum)VX_LBP, (vx_int8)3, "lbp_3x3_standard_golden.bmp"),\
+    ARG("lbp_5x5_standard.bmp", lbp_read_image, (vx_enum)VX_LBP, (vx_int8)5, "lbp_5x5_standard_golden.bmp"),\
+    ARG("lbp_5x5_modified.bmp", lbp_read_image, (vx_enum)VX_MLBP, (vx_int8)5, "lbp_5x5_modified_golden.bmp"),\
+    ARG("lbp_3x3_uniform.bmp", lbp_read_image, (vx_enum)VX_ULBP, (vx_int8)3, "lbp_3x3_uniform_golden.bmp"),\
+    ARG("lbp_5x5_uniform.bmp", lbp_read_image, (vx_enum)VX_ULBP, (vx_int8)5, "lbp_5x5_uniform_golden.bmp"),\
+
+
+TEST_WITH_ARG(LBP, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_image input_image = 0, output_image = 0;
+    CT_Image input = NULL, output = NULL;
+    vx_uint32 border = arg_->kernel_size / 2;
+
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->filename, 0, 0));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(input->width, input->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxLBPNode(graph, input_image, arg_->format, arg_->kernel_size, output_image), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    //bit match begin
+    CT_Image golden_image = lbp_read_image(arg_->golden_image, 0, 0);
+    ct_adjust_roi(output, border, border, border, border);
+    ct_adjust_roi(golden_image, border, border, border, border);
+    EXPECT_EQ_CTIMAGE(golden_image, output);
+    //bit match end
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(LBP, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    CT_Image input = NULL, output = NULL;
+    vx_uint32 border = arg_->kernel_size / 2;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->filename, 0, 0));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(input->width, input->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuLBP(context, input_image, arg_->format, arg_->kernel_size, output_image));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    //bit match begin
+    CT_Image golden_image = lbp_read_image(arg_->golden_image, 0, 0);
+    ct_adjust_roi(output, border, border, border, border);
+    ct_adjust_roi(golden_image, border, border, border, border);
+    EXPECT_EQ_CTIMAGE(golden_image, output);
+    //bit match end
+
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(LBP, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_logging.c b/test_conformance/test_logging.c
new file mode 100644
index 0000000..67a32b8
--- /dev/null
+++ b/test_conformance/test_logging.c
@@ -0,0 +1,75 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <string.h>
+
+TESTCASE(Logging, CT_VoidContext, 0, 0)
+
+static vx_bool log_callback_is_called = vx_false_e;
+static void VX_CALLBACK test_log_callback(vx_context context, vx_reference ref, vx_status status, const vx_char string[])
+{
+    log_callback_is_called = vx_true_e;
+    ASSERT_(printf("\tActual: %d < %d\n\n", (int)strlen(string), (int)VX_MAX_LOG_MESSAGE_LEN), strlen(string) < VX_MAX_LOG_MESSAGE_LEN);
+}
+
+TEST(Logging, Cummulative)
+{
+    vx_image image = 0;
+    vx_context context = vxCreateContext();
+
+    ASSERT_VX_OBJECT(context, VX_TYPE_CONTEXT);
+    CT_RegisterForGarbageCollection(context, ct_destroy_vx_context, CT_GC_OBJECT);
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    // normall logging
+    vxRegisterLogCallback(context, test_log_callback, vx_false_e);
+    log_callback_is_called = vx_false_e;
+    vxAddLogEntry((vx_reference)image, VX_FAILURE, "hello world", 1, 2, 3);
+    ASSERT(log_callback_is_called);
+
+    // clear callback
+    vxRegisterLogCallback(context, NULL, vx_true_e);
+    log_callback_is_called = vx_false_e;
+    vxAddLogEntry((vx_reference)image, VX_FAILURE, "hello world", 4, 5, 6);
+    ASSERT(!log_callback_is_called);
+
+    // restore callback
+    vxRegisterLogCallback(context, test_log_callback, vx_true_e);
+
+    // disable logs for image
+    VX_CALL(vxDirective((vx_reference)image, VX_DIRECTIVE_DISABLE_LOGGING));
+    log_callback_is_called = vx_false_e;
+    vxAddLogEntry((vx_reference)image, VX_FAILURE, "hello world", 4, 5, 6);
+    ASSERT(!log_callback_is_called);
+
+    // turn on logs once again
+    VX_CALL(vxDirective((vx_reference)image, VX_DIRECTIVE_ENABLE_LOGGING));
+    log_callback_is_called = vx_false_e;
+    vxAddLogEntry((vx_reference)image, VX_FAILURE, "%*s", VX_MAX_LOG_MESSAGE_LEN + 20, ""); // 20 symbols longer string than limit
+    ASSERT(log_callback_is_called);
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+}
+
+
+TESTCASE_TESTS(Logging,
+        Cummulative
+        )
diff --git a/test_conformance/test_lut.c b/test_conformance/test_lut.c
new file mode 100644
index 0000000..364d5d4
--- /dev/null
+++ b/test_conformance/test_lut.c
@@ -0,0 +1,639 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <string.h>
+
+
+TESTCASE(LUT, CT_VXContext, ct_setup_vx_context, 0)
+
+static vx_size lut_count(vx_enum data_type)
+{
+    vx_size count = 0;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        count = 256;
+        break;
+    case VX_TYPE_INT16:
+        count = 65536;
+        break;
+    }
+
+    return count;
+}
+
+static vx_size lut_size(vx_enum data_type)
+{
+    vx_size size = 0;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        size = 256*sizeof(vx_uint8);
+        break;
+    case VX_TYPE_INT16:
+        size = 65536*sizeof(vx_int16);
+        break;
+    }
+
+    return size;
+}
+
+static vx_lut lut_create(vx_context context, void* data, vx_enum data_type)
+{
+    vx_size count = lut_count(data_type);
+    vx_size size = lut_size(data_type);
+
+    vx_lut lut = vxCreateLUT(context, data_type, count);
+    void* ptr = NULL;
+
+    ASSERT_VX_OBJECT_(return 0, lut, VX_TYPE_LUT);
+
+    vx_map_id map_id;
+    VX_CALL_(return 0, vxMapLUT(lut, &map_id, &ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT_(return 0, ptr);
+    memcpy(ptr, data, size);
+    VX_CALL_(return 0, vxUnmapLUT(lut, map_id));
+    return lut;
+}
+
+static vx_lut virtual_lut_create(vx_context context, void* data, vx_enum data_type)
+{
+    vx_graph graph = 0;
+    graph = vxCreateGraph(context);
+    vx_size count = lut_count(data_type);
+
+    vx_lut lut = vxCreateVirtualLUT(graph, data_type, count);
+
+    vxReleaseGraph(&graph);
+
+    return lut;
+}
+
+static void lut_data_fill_identity(void* data, vx_enum data_type)
+{
+    int i;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        {
+            vx_int32 offset = 0;
+            vx_uint8* data8 = (vx_uint8*)data;
+            for (i = 0; i < 256; ++i)
+                data8[i] = i - offset;
+        }
+        break;
+    case VX_TYPE_INT16:
+        {
+            vx_int32 offset = 65536/2;
+            vx_int16* data16 = (vx_int16*)data;
+            for (i = 0; i < 65536; ++i)
+                data16[i] = i - offset;
+        }
+        break;
+    }
+}
+
+static void lut_data_fill_random(void* data, vx_enum data_type)
+{
+    uint64_t* seed = &CT()->seed_;
+    int i;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        {
+            vx_uint8* data8 = (vx_uint8*)data;
+            for (i = 0; i < 256; ++i)
+                data8[i] = (vx_uint8)CT_RNG_NEXT_INT(*seed, 0, 256);
+        }
+        break;
+    case VX_TYPE_INT16:
+        {
+            vx_int16* data16 = (vx_int16*)data;
+            for (i = 0; i < 65536; ++i)
+                data16[i] = (vx_int16)CT_RNG_NEXT_INT(*seed, (uint32_t)-32768, 32768);
+        }
+        break;
+    }
+}
+
+TEST(LUT, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_uint8 lut_data[256];
+    vx_lut lut = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum data_type = VX_TYPE_UINT8;
+
+    src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    ASSERT_VX_OBJECT(src_image, VX_TYPE_IMAGE);
+
+    dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(lut_data_fill_identity(lut_data, data_type));
+    ASSERT_VX_OBJECT(lut = lut_create(context, lut_data, data_type), VX_TYPE_LUT);
+
+    {
+        vx_enum lut_type;
+        vx_size lut_count, lut_size;
+        VX_CALL(vxQueryLUT(lut, VX_LUT_TYPE, &lut_type, sizeof(lut_type)));
+        if (VX_TYPE_UINT8 != lut_type)
+        {
+            CT_FAIL("check for LUT attribute VX_LUT_TYPE failed\n");
+        }
+        VX_CALL(vxQueryLUT(lut, VX_LUT_COUNT, &lut_count, sizeof(lut_count)));
+        if (256 != lut_count)
+        {
+            CT_FAIL("check for LUT attribute VX_LUT_COUNT failed\n");
+        }
+        VX_CALL(vxQueryLUT(lut, VX_LUT_SIZE, &lut_size, sizeof(lut_size)));
+        if (256 > lut_size)
+        {
+            CT_FAIL("check for LUT attribute VX_LUT_SIZE failed\n");
+        }
+    }
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxTableLookupNode(graph, src_image, lut, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseLUT(&lut));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(lut == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST(LUT, testVirtualNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_uint8 lut_data[256];
+    vx_lut lut = 0;
+    src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    ASSERT_VX_OBJECT(src_image, VX_TYPE_IMAGE);
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum data_type = VX_TYPE_UINT8;
+
+
+    dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(lut_data_fill_identity(lut_data, data_type));
+    ASSERT_VX_OBJECT(lut = virtual_lut_create(context, lut_data, data_type), VX_TYPE_LUT);
+
+    {
+        vx_enum lut_type;
+        vx_size lut_count, lut_size;
+        VX_CALL(vxQueryLUT(lut, VX_LUT_TYPE, &lut_type, sizeof(lut_type)));
+        if (VX_TYPE_UINT8 != lut_type)
+        {
+            CT_FAIL("check for LUT attribute VX_LUT_TYPE failed\n");
+        }
+        VX_CALL(vxQueryLUT(lut, VX_LUT_COUNT, &lut_count, sizeof(lut_count)));
+        if (256 != lut_count)
+        {
+            CT_FAIL("check for LUT attribute VX_LUT_COUNT failed\n");
+        }
+        VX_CALL(vxQueryLUT(lut, VX_LUT_SIZE, &lut_size, sizeof(lut_size)));
+        if (256 > lut_size)
+        {
+            CT_FAIL("check for LUT attribute VX_LUT_SIZE failed\n");
+        }
+    }
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxTableLookupNode(graph, src_image, lut, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseLUT(&lut));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(lut == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+// Generate input to cover these requirements:
+// There should be a image with randomly generated pixel intensities.
+static CT_Image lut_image_generate_random(const char* fileName, int width, int height, vx_enum data_type)
+{
+    CT_Image image = 0;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256);
+        break;
+    case VX_TYPE_INT16:
+        image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_S16, &CT()->seed_, -32768, 32768);
+        break;
+    }
+    ASSERT_(return 0, image != 0);
+
+    return image;
+}
+
+static CT_Image lut_image_read(const char* fileName, int width, int height, vx_enum data_type)
+{
+    CT_Image image8 = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image8 = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image8);
+    ASSERT_(return 0, image8->format == VX_DF_IMAGE_U8);
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        return image8;
+    case VX_TYPE_INT16:
+        {
+            vx_int32 offset = 65536/2;
+            CT_Image image16 = ct_allocate_image(image8->width, image8->height, VX_DF_IMAGE_S16);
+            if (image16)
+            {
+                CT_FILL_IMAGE_16S(return 0, image16,
+                    {
+                        vx_uint8 value8 = *CT_IMAGE_DATA_PTR_8U(image8, x, y);
+                        vx_uint16 value16 = ((vx_uint16)value8 << 8) | value8;
+                        vx_int16 res = (vx_int16)((vx_int32)value16 - offset);
+                        *dst_data = res;
+                    });
+            }
+            return image16;
+        }
+    }
+
+    return NULL;
+}
+
+// data_type == VX_TYPE_UINT8
+static vx_uint8 lut_calculate_u8(CT_Image src, uint32_t x, uint32_t y, void* lut_data)
+{
+    vx_uint8* lut_data8 = (vx_uint8*)lut_data;
+    vx_int32 offset = 0;
+    vx_uint8 value = *CT_IMAGE_DATA_PTR_8U(src, x, y);
+    vx_uint8 res = lut_data8[offset + value];
+    return res;
+}
+
+// data_type == VX_TYPE_INT16
+static vx_int16 lut_calculate_s16(CT_Image src, uint32_t x, uint32_t y, void* lut_data)
+{
+    vx_int16* lut_data16 = (vx_int16*)lut_data;
+    vx_int32 offset = 65536/2;
+    vx_int16 value = *CT_IMAGE_DATA_PTR_16S(src, x, y);
+    vx_int16 res = lut_data16[offset + value];
+    return res;
+}
+
+static CT_Image lut_create_reference_image(CT_Image src, void* lut_data, vx_enum data_type)
+{
+    CT_Image dst;
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+        break;
+    case VX_TYPE_INT16:
+        CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_S16);
+        break;
+    }
+
+    dst = ct_allocate_image(src->width, src->height, src->format);
+
+    switch (data_type)
+    {
+    case VX_TYPE_UINT8:
+        CT_FILL_IMAGE_8U(return 0, dst,
+            {
+                uint8_t res = lut_calculate_u8(src, x, y, lut_data);
+                *dst_data = res;
+            });
+        break;
+    case VX_TYPE_INT16:
+        CT_FILL_IMAGE_16S(return 0, dst,
+            {
+                int16_t res = lut_calculate_s16(src, x, y, lut_data);
+                *dst_data = res;
+            });
+        break;
+    }
+
+    return dst;
+}
+
+
+static void lut_check(CT_Image src, CT_Image dst, void* lut_data, vx_enum data_type)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = lut_create_reference_image(src, lut_data, data_type));
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        int i = 0;
+        printf("=== LUT ===\n");
+        switch (data_type)
+        {
+        case VX_TYPE_UINT8:
+            for (i = 0; i < 256; ++i)
+                printf("%3d:%3d ", i, (int)((vx_uint8*)lut_data)[i]);
+            break;
+        case VX_TYPE_INT16:
+            for (i = 0; i < 65536; ++i)
+                printf("%5d:%6d ", i, (int)((vx_int16*)lut_data)[i]);
+            break;
+        }
+        printf("\n");
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height, vx_enum data_type);
+    const char* fileName;
+    void (*lut_generator)(void* data, vx_enum data_type);
+    int width, height;
+    vx_enum data_type;
+} Arg;
+
+#define ADD_LUT_GENERATOR(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/LutIdentity", __VA_ARGS__, lut_data_fill_identity)), \
+    CT_EXPAND(nextmacro(testArgName "/LutRandom", __VA_ARGS__, lut_data_fill_random))
+
+#define ADD_TYPE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/U8", __VA_ARGS__, VX_TYPE_UINT8)), \
+    CT_EXPAND(nextmacro(testArgName "/S16", __VA_ARGS__, VX_TYPE_INT16))
+
+#define LUT_PARAMETERS                                                \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_LUT_GENERATOR, ADD_SIZE_SMALL_SET, ADD_TYPE, ARG, lut_image_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_LUT_GENERATOR, ADD_SIZE_NONE, ADD_TYPE, ARG, lut_image_read, "lena.bmp")
+
+TEST_WITH_ARG(LUT, testGraphProcessing, Arg,
+    LUT_PARAMETERS
+)
+{
+    vx_enum data_type = arg_->data_type;
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    void* lut_data;
+    vx_lut lut;
+    vx_size size;
+
+    size = lut_size(data_type);
+    lut_data = ct_alloc_mem(size);
+    ASSERT(lut_data != 0);
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height, data_type));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(arg_->lut_generator(lut_data, data_type));
+    ASSERT_VX_OBJECT(lut = lut_create(context, lut_data, data_type), VX_TYPE_LUT);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxTableLookupNode(graph, src_image, lut, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(lut_check(src, dst, lut_data, data_type));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseLUT(&lut));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(lut == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+
+    ct_free_mem(lut_data);
+}
+
+TEST_WITH_ARG(LUT, testImmediateProcessing, Arg,
+    LUT_PARAMETERS
+)
+{
+    vx_enum data_type = arg_->data_type;
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    void* lut_data;
+    vx_lut lut;
+    vx_size size;
+
+    size = lut_size(data_type);
+    lut_data = ct_alloc_mem(size);
+    ASSERT(lut_data != 0);
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height, data_type));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(arg_->lut_generator(lut_data, data_type));
+    ASSERT_VX_OBJECT(lut = lut_create(context, lut_data, data_type), VX_TYPE_LUT);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    VX_CALL(vxuTableLookup(context, src_image, lut, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(lut_check(src, dst, lut_data, data_type));
+
+    VX_CALL(vxReleaseLUT(&lut));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(lut == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+
+    ct_free_mem(lut_data);
+}
+
+typedef struct {
+    const char* name;
+    vx_enum type;
+} data_type_arg;
+
+TEST_WITH_ARG(LUT, test_vxCopyLUT, data_type_arg,
+              ARG_ENUM(VX_TYPE_UINT8),
+              ARG_ENUM(VX_TYPE_INT16))
+{
+    vx_context context = context_->vx_context_;
+    vx_enum data_type = arg_->type;
+    vx_lut lut;
+    vx_size size = lut_size(data_type);
+    vx_size i;
+
+    void* identity_data = ct_alloc_mem(size);
+    ASSERT(identity_data != 0);
+    ASSERT_NO_FAILURE(lut_data_fill_identity(identity_data, data_type));
+    ASSERT_VX_OBJECT(lut = lut_create(context, identity_data, data_type), VX_TYPE_LUT);
+    /* read only mode */
+    void* user_data = ct_alloc_mem(size);
+    VX_CALL(vxCopyLUT(lut, user_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    /* Check */
+    for (i = 0; i < size; i++)
+    {
+        ASSERT(((vx_uint8*)user_data)[i] == ((vx_uint8*)identity_data)[i]);
+    }
+    /* write only mode */
+    void* random_data = ct_alloc_mem(size);
+    ASSERT_NO_FAILURE(lut_data_fill_random(random_data, data_type));
+    VX_CALL(vxCopyLUT(lut, random_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+    /* Check */
+    vx_map_id map_id;
+    void* lut_data = NULL;
+    VX_CALL(vxMapLUT(lut, &map_id, &lut_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    for (i = 0; i < size; i++)
+    {
+        ASSERT(((vx_uint8*)lut_data)[i] == ((vx_uint8*)random_data)[i]);
+    }
+    VX_CALL(vxUnmapLUT(lut, map_id));
+
+    VX_CALL(vxReleaseLUT(&lut));
+    ASSERT(lut == 0);
+
+    ct_free_mem(identity_data);
+    ct_free_mem(user_data);
+    ct_free_mem(random_data);
+}
+
+TEST_WITH_ARG(LUT, test_vxMapLUTWrite, data_type_arg,
+              ARG_ENUM(VX_TYPE_UINT8),
+              ARG_ENUM(VX_TYPE_INT16))
+{
+    vx_context context = context_->vx_context_;
+    vx_enum data_type = arg_->type;
+    vx_lut lut;
+    vx_size size = lut_size(data_type);
+    void* identity_data = ct_alloc_mem(size);
+    vx_size i;
+
+    ASSERT(identity_data != 0);
+    ASSERT_NO_FAILURE(lut_data_fill_identity(identity_data, data_type));
+    ASSERT_VX_OBJECT(lut = lut_create(context, identity_data, data_type), VX_TYPE_LUT);
+    /* Read and write mode, read */
+    vx_map_id map_id;
+    void* lut_data = NULL;
+    VX_CALL(vxMapLUT(lut, &map_id, &lut_data, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0));
+    /* Check */
+    for (i = 0; i < size; i++)
+    {
+        ASSERT(((vx_uint8*)lut_data)[i] == ((vx_uint8*)identity_data)[i]);
+    }
+    /* Read and write mode, write */
+    void* random_data = ct_alloc_mem(size);
+    ASSERT_NO_FAILURE(lut_data_fill_random(random_data, data_type));
+    memcpy(lut_data, random_data, size);
+    VX_CALL(vxUnmapLUT(lut, map_id));
+    /* Check */
+    lut_data = NULL;
+    VX_CALL(vxMapLUT(lut, &map_id, &lut_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    for (i = 0; i < size; i++)
+    {
+        ASSERT(((vx_uint8*)lut_data)[i] == ((vx_uint8*)random_data)[i]);
+    }
+    VX_CALL(vxUnmapLUT(lut, map_id));
+
+    /* Write only mode */
+    VX_CALL(vxMapLUT(lut, &map_id, &lut_data, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0));
+    ASSERT_NO_FAILURE(lut_data_fill_identity(lut_data, data_type));
+    VX_CALL(vxUnmapLUT(lut, map_id));
+    /* Check */
+    lut_data = NULL;
+    VX_CALL(vxMapLUT(lut, &map_id, &lut_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+    for ( i = 0; i < size; i++)
+    {
+        ASSERT(((vx_uint8*)lut_data)[i] == ((vx_uint8*)identity_data)[i]);
+    }
+    VX_CALL(vxUnmapLUT(lut, map_id));
+
+    VX_CALL(vxReleaseLUT(&lut));
+    ASSERT(lut == 0);
+
+    ct_free_mem(identity_data);
+    ct_free_mem(random_data);
+}
+
+TESTCASE_TESTS(LUT,
+               testNodeCreation,
+               testVirtualNodeCreation,
+               testGraphProcessing,
+               testImmediateProcessing,
+               test_vxCopyLUT,
+               test_vxMapLUTWrite)
diff --git a/test_conformance/test_magnitude.c b/test_conformance/test_magnitude.c
new file mode 100644
index 0000000..2dfaace
--- /dev/null
+++ b/test_conformance/test_magnitude.c
@@ -0,0 +1,211 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <math.h>
+
+#include "shared_functions.h"
+
+static void reference_mag(CT_Image dx, CT_Image dy, CT_Image mag)
+{
+    uint32_t x, y, width, height, dxstride, dystride, magstride;
+
+    ASSERT(dx && dy && mag);
+    ASSERT(dx->format == VX_DF_IMAGE_S16 && dy->format == VX_DF_IMAGE_S16 && mag->format == VX_DF_IMAGE_S16);
+    ASSERT(dx->width > 0 && dx->height > 0 &&
+           dx->width == dy->width && dx->height == dy->height &&
+           dx->width == mag->width && dx->height == mag->height);
+    width = dx->width;
+    height = dy->height;
+    dxstride = ct_stride_bytes(dx);
+    dystride = ct_stride_bytes(dy);
+    magstride = ct_stride_bytes(mag);
+
+    for( y = 0; y < height; y++ )
+    {
+        const int16_t* dxptr = (const int16_t*)(dx->data.y + y*dxstride);
+        const int16_t* dyptr = (const int16_t*)(dy->data.y + y*dystride);
+        int16_t* magptr = (int16_t*)(mag->data.y + y*magstride);
+        for( x = 0; x < width; x++ )
+        {
+            // the specification says - use double in the test implementation
+            double val = sqrt((double)dxptr[x]*dxptr[x] + (double)dyptr[x]*dyptr[x]);
+            int ival = (int)floor(val + 0.5);
+            magptr[x] = CT_CAST_S16(ival);
+        }
+    }
+}
+
+
+TESTCASE(Magnitude, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    int use_sobel;
+    vx_df_image format;
+} format_arg;
+
+#undef UseSobel
+#undef Random
+#define UseSobel 1
+#define Random 0
+
+#define MAG_TEST_CASE(imm, sob, tp) \
+    {#imm "/" #sob "/" #tp, CT_##imm##_MODE, sob, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(Magnitude, testOnRandom, format_arg,
+              MAG_TEST_CASE(Immediate, UseSobel, S16),
+              MAG_TEST_CASE(Immediate, Random, S16),
+              MAG_TEST_CASE(Graph, UseSobel, S16),
+              MAG_TEST_CASE(Graph, Random, S16),
+              )
+{
+    int dxformat = arg_->format;
+    int mode = arg_->mode;
+    int use_sobel = arg_->use_sobel;
+    int srcformat = dxformat == VX_DF_IMAGE_S16 ? VX_DF_IMAGE_U8 : -1;
+    int magformat = dxformat == VX_DF_IMAGE_S16 ? VX_DF_IMAGE_S16 : -1;
+    vx_image presrc=0, src=0, dx=0, dy=0, mag=0;
+    CT_Image src0, dx0, dy0, mag0, mag1;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_context context = context_->vx_context_;
+    int iter, niters = 100;
+    uint64_t rng;
+    int srcmin = 0, srcmax = 256;
+    int dxmin = -32768, dxmax = 32768;
+    vx_border_t border;
+
+    ASSERT( srcformat != -1 && magformat != -1 );
+    rng = CT()->seed_;
+    border.mode = //VX_BORDER_UNDEFINED;
+                  VX_BORDER_REPLICATE;
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS,
+                        vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER,
+                                              &border, sizeof(border)));
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width = ct_roundf(ct_log_rng(&rng, 0, 10));
+        int height = ct_roundf(ct_log_rng(&rng, 0, 10));
+
+        width = CT_MAX(width, 1);
+        height = CT_MAX(height, 1);
+
+        if( !ct_check_any_size() )
+        {
+            width = CT_MIN((width + 7) & -8, 640);
+            height = CT_MIN((height + 7) & -8, 480);
+        }
+
+        ct_update_progress(iter, niters);
+
+        if( use_sobel )
+        {
+            CT_Image box_img;
+
+            width = CT_MAX(width, 3);
+            height = CT_MAX(height, 3);
+
+            ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, srcformat, &rng, srcmin, srcmax));
+            ASSERT_EQ_INT(VX_DF_IMAGE_S16, dxformat);
+            ASSERT_NO_FAILURE(box_img = box3x3_create_reference_image(src0, border));
+            ASSERT_NO_FAILURE(sobel3x3_create_reference_image(box_img, border, &dx0, &dy0));
+
+            if( border.mode == VX_BORDER_UNDEFINED )
+            {
+                width -= 2;
+                height -= 2;
+                ASSERT_NO_FAILURE(ct_adjust_roi(dx0, 1, 1, 1, 1));
+                ASSERT_NO_FAILURE(ct_adjust_roi(dy0, 1, 1, 1, 1));
+            }
+
+            if (NULL != dx)
+                VX_CALL(vxReleaseImage(&dx));
+
+            if (NULL != dy)
+                VX_CALL(vxReleaseImage(&dy));
+        }
+        else
+        {
+            int k, maxk = CT_RNG_NEXT_INT(rng, 0, 20);
+            ASSERT_NO_FAILURE(dx0 = ct_allocate_ct_image_random(width, height, dxformat, &rng, dxmin, dxmax));
+            ASSERT_NO_FAILURE(dy0 = ct_allocate_ct_image_random(width, height, dxformat, &rng, dxmin, dxmax));
+
+            // add some extreme points to the generated images
+            for( k = 0; k < maxk; k++ )
+            {
+                int x = CT_RNG_NEXT_INT(rng, 0, width);
+                int y = CT_RNG_NEXT_INT(rng, 0, height);
+                int dxval = CT_RNG_NEXT_BOOL(rng) ? dxmin : dxmax;
+                int dyval = CT_RNG_NEXT_BOOL(rng) ? dxmin : dxmax;
+                dx0->data.s16[dx0->stride*y + x] = (short)dxval;
+                dy0->data.s16[dy0->stride*y + x] = (short)dyval;
+            }
+            presrc = src = 0;
+        }
+
+        dx = ct_image_to_vx_image(dx0, context);
+        ASSERT_VX_OBJECT(dx, VX_TYPE_IMAGE);
+        dy = ct_image_to_vx_image(dy0, context);
+        ASSERT_VX_OBJECT(dy, VX_TYPE_IMAGE);
+
+        ASSERT_NO_FAILURE(mag0 = ct_allocate_image(width, height, magformat));
+        ASSERT_NO_FAILURE(reference_mag(dx0, dy0, mag0));
+        mag = vxCreateImage(context, width, height, magformat);
+        ASSERT_VX_OBJECT(mag, VX_TYPE_IMAGE);
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuMagnitude(context, dx, dy, mag));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxMagnitudeNode(graph, dx, dy, mag);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+        }
+        mag1 = ct_image_from_vx_image(mag);
+
+        ASSERT_CTIMAGE_NEAR(mag0, mag1, 1);
+        if(presrc)
+            VX_CALL(vxReleaseImage(&presrc));
+        if(src)
+            VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dx));
+        VX_CALL(vxReleaseImage(&dy));
+        VX_CALL(vxReleaseImage(&mag));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+}
+
+TESTCASE_TESTS(Magnitude, testOnRandom)
diff --git a/test_conformance/test_main.c b/test_conformance/test_main.c
new file mode 100644
index 0000000..6e538a5
--- /dev/null
+++ b/test_conformance/test_main.c
@@ -0,0 +1,30 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+#include "test_engine/test_list_helper.h"
+
+#ifdef HAVE_VERSION_INC
+#include "openvx_cts_version.inc"
+#else
+#define VERSION_STR "unknown"
+#endif
+
+int main(int argc, char* argv[])
+{
+    return CT_main(argc, argv, VERSION_STR);
+}
diff --git a/test_conformance/test_main.h b/test_conformance/test_main.h
new file mode 100644
index 0000000..b9aaf88
--- /dev/null
+++ b/test_conformance/test_main.h
@@ -0,0 +1,146 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+TESTCASE(Graph)
+TESTCASE(GraphCallback)
+TESTCASE(GraphDelay)
+TESTCASE(GraphROI)
+
+TESTCASE(Array)
+TESTCASE(ObjectArray)
+TESTCASE(Image)
+
+TESTCASE(vxCreateImageFromChannel)
+
+TESTCASE(vxCopyImagePatch)
+TESTCASE(vxMapImagePatch)
+
+TESTCASE(vxuConvertDepth)
+TESTCASE(vxConvertDepth)
+
+TESTCASE(ChannelCombine)
+TESTCASE(ChannelExtract)
+
+TESTCASE(ColorConvert)
+TESTCASE(Distribution)
+TESTCASE(vxuAddSub)
+TESTCASE(vxAddSub)
+
+TESTCASE(vxuNot)
+TESTCASE(vxNot)
+
+TESTCASE(vxuBinOp8u)
+TESTCASE(vxBinOp8u)
+
+TESTCASE(vxuBinOp16s)
+TESTCASE(vxBinOp16s)
+
+TESTCASE(vxuMultiply)
+TESTCASE(vxMultiply)
+
+TESTCASE(Histogram)
+TESTCASE(EqualizeHistogram)
+TESTCASE(MeanStdDev)
+TESTCASE(MinMaxLoc)
+TESTCASE(Min)
+TESTCASE(Max)
+TESTCASE(Threshold)
+
+TESTCASE(Box3x3)
+TESTCASE(Convolve)
+TESTCASE(Dilate3x3)
+TESTCASE(Erode3x3)
+TESTCASE(Gaussian3x3)
+TESTCASE(Median3x3)
+TESTCASE(Sobel3x3)
+TESTCASE(NonLinearFilter)
+
+TESTCASE(Accumulate)
+TESTCASE(AccumulateSquare)
+TESTCASE(AccumulateWeighted)
+
+TESTCASE(Integral)
+TESTCASE(LUT)
+
+TESTCASE(Magnitude)
+TESTCASE(Phase)
+
+TESTCASE(FastCorners)
+TESTCASE(HarrisCorners)
+
+TESTCASE(Scale)
+TESTCASE(WarpAffine)
+TESTCASE(WarpPerspective)
+TESTCASE(Remap)
+TESTCASE(vxCopyRemapPatch)
+TESTCASE(vxMapRemapPatch)
+
+
+TESTCASE(GaussianPyramid)
+TESTCASE(HalfScaleGaussian)
+
+TESTCASE(LaplacianPyramid)
+TESTCASE(LaplacianReconstruct)
+
+TESTCASE(vxuCanny)
+TESTCASE(vxCanny)
+TESTCASE(OptFlowPyrLK)
+
+TESTCASE(UserNode)
+
+TESTCASE(Logging)
+TESTCASE(SmokeTest)
+
+TESTCASE(Scalar)
+
+TESTCASE(Target)
+
+TESTCASE(Convolution)
+TESTCASE(Matrix)
+
+TESTCASE(Nonmaxsuppression)
+
+TESTCASE(TensorOp)
+
+TESTCASE(LBP)
+
+TESTCASE(BilateralFilter)
+
+TESTCASE(MatchTemplate)
+
+TESTCASE(Houghlinesp)
+
+TESTCASE(Copy)
+
+TESTCASE(HogCells)
+TESTCASE(HogFeatures)
+
+TESTCASE(ControlFlow)
+
+#ifdef OPENVX_USE_IX
+TESTCASE(ExtensionObject)
+#endif
+
+#ifdef OPENVX_USE_NN
+TESTCASE(TensorNN)
+#endif
+
+#ifdef OPENVX_USE_NN_16
+TESTCASE(TensorNetworks)
+#endif
+
+
diff --git a/test_conformance/test_matchtemplate.c b/test_conformance/test_matchtemplate.c
new file mode 100644
index 0000000..9f35040
--- /dev/null
+++ b/test_conformance/test_matchtemplate.c
@@ -0,0 +1,221 @@
+/*
+
+ * Copyright (c) 2017-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+typedef struct
+{
+    const char* name;
+    vx_enum type;
+} method_type_arg;
+TESTCASE(MatchTemplate, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(MatchTemplate, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_image vx_template_image, vx_source_image, vx_result_image;
+    CT_Image ct_template_image, ct_source_image;
+    ASSERT_NO_FAILURE(ct_template_image = ct_read_image("lena_gray_template.bmp", 1));
+    ASSERT_NO_FAILURE(vx_template_image = ct_image_to_vx_image(ct_template_image, context));
+    ASSERT_NO_FAILURE(ct_source_image = ct_read_image("lena_gray_source.bmp", 1));
+    ASSERT_NO_FAILURE(vx_source_image = ct_image_to_vx_image(ct_source_image, context));
+
+    vx_uint32 source_width;
+    vx_uint32 source_height;
+    vxQueryImage(vx_source_image, VX_IMAGE_WIDTH, &source_width, sizeof(vx_uint32));
+    vxQueryImage(vx_source_image, VX_IMAGE_HEIGHT, &source_height, sizeof(vx_uint32));
+
+    ASSERT_VX_OBJECT(vx_result_image = vxCreateImage(context, source_width, source_height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxMatchTemplateNode(graph, vx_source_image, vx_template_image, VX_COMPARE_HAMMING, vx_result_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&vx_template_image));
+    VX_CALL(vxReleaseImage(&vx_source_image));
+    VX_CALL(vxReleaseImage(&vx_result_image));
+
+    ASSERT(vx_template_image == 0);
+    ASSERT(vx_source_image == 0);
+    ASSERT(vx_result_image == 0);
+}
+
+TEST_WITH_ARG(MatchTemplate, testGraphProcessing, method_type_arg,
+        ARG_ENUM(VX_COMPARE_HAMMING),
+        ARG_ENUM(VX_COMPARE_L1),
+        ARG_ENUM(VX_COMPARE_L2),
+        //ARG_ENUM(VX_COMPARE_CCORR),
+        ARG_ENUM(VX_COMPARE_L2_NORM),
+        ARG_ENUM(VX_COMPARE_CCORR_NORM))
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_image vx_template_image, vx_source_image, vx_result_image;
+    CT_Image ct_template_image, ct_source_image;
+    ASSERT_NO_FAILURE(ct_template_image = ct_read_image("lena_gray_template.bmp", 1));
+    ASSERT_NO_FAILURE(vx_template_image = ct_image_to_vx_image(ct_template_image, context));
+    ASSERT_NO_FAILURE(ct_source_image = ct_read_image("lena_gray_source.bmp", 1));
+    ASSERT_NO_FAILURE(vx_source_image = ct_image_to_vx_image(ct_source_image, context));
+
+    vx_uint32 template_width, template_height, source_width, source_height, result_width, result_height;
+    vxQueryImage(vx_source_image, VX_IMAGE_WIDTH, &source_width, sizeof(vx_uint32));
+    vxQueryImage(vx_source_image, VX_IMAGE_HEIGHT, &source_height, sizeof(vx_uint32));
+    vxQueryImage(vx_template_image, VX_IMAGE_WIDTH, &template_width, sizeof(vx_uint32));
+    vxQueryImage(vx_template_image, VX_IMAGE_HEIGHT, &template_height, sizeof(vx_uint32));
+    result_width = source_width - template_width + 1;
+    result_height = source_height - template_height + 1;
+    ASSERT_VX_OBJECT(vx_result_image = vxCreateImage(context, result_width, result_height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxMatchTemplateNode(graph, vx_source_image, vx_template_image, arg_->type, vx_result_image), VX_TYPE_NODE);
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    uint32_t mincount = 0, maxcount = 0;
+    vx_scalar minval_, maxval_, mincount_, maxcount_;
+    vx_array minloc_ = 0, maxloc_ = 0;
+    vx_enum sctype = VX_TYPE_INT16;
+    minval_ = ct_scalar_from_int(context, sctype, 0);
+    maxval_ = ct_scalar_from_int(context, sctype, 0);
+    mincount_ = ct_scalar_from_int(context, VX_TYPE_UINT32, 0);
+    maxcount_ = ct_scalar_from_int(context, VX_TYPE_UINT32, 0);
+    minloc_ = vxCreateArray(context, VX_TYPE_COORDINATES2D, 300);
+    maxloc_ = vxCreateArray(context, VX_TYPE_COORDINATES2D, 300);
+    node = vxMinMaxLocNode(graph, vx_result_image, minval_, maxval_,
+                                   minloc_,
+                                   maxloc_,
+                                   mincount_,
+                                   maxcount_);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+    vxCopyScalar(mincount_, &mincount, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    vxCopyScalar(maxcount_, &maxcount, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    vx_array resultloc = minloc_;
+    if(arg_->type == VX_COMPARE_CCORR || arg_->type == VX_COMPARE_CCORR_NORM)
+    {
+        resultloc = maxloc_;
+    }
+    vx_size stride = 0;
+    vx_coordinates2d_t *p = NULL;
+    vx_map_id map_id;
+    vx_coordinates2d_t result = {0,0};
+    VX_CALL(vxMapArrayRange(resultloc, 0, 1, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+    result = p[0];
+    VX_CALL(vxUnmapArrayRange(resultloc, map_id));
+
+    //The correct match point is (24, 24), and error range is +/- 1 pixel.
+    ASSERT(result.x > 24 - 2 && result.x < 24 + 2);
+    ASSERT(result.y > 24 - 2 && result.y < 24 + 2);
+
+    VX_CALL(vxReleaseScalar(&minval_));
+    VX_CALL(vxReleaseScalar(&maxval_));
+    VX_CALL(vxReleaseScalar(&mincount_));
+    VX_CALL(vxReleaseScalar(&maxcount_));
+    VX_CALL(vxReleaseArray(&minloc_));
+    VX_CALL(vxReleaseArray(&maxloc_));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&vx_template_image));
+    VX_CALL(vxReleaseImage(&vx_source_image));
+    VX_CALL(vxReleaseImage(&vx_result_image));
+
+    ASSERT(vx_template_image == 0);
+    ASSERT(vx_source_image == 0);
+    ASSERT(vx_result_image == 0);
+}
+TEST_WITH_ARG(MatchTemplate,  testImmediateProcessing, method_type_arg,
+        ARG_ENUM(VX_COMPARE_HAMMING),
+        ARG_ENUM(VX_COMPARE_L1),
+        ARG_ENUM(VX_COMPARE_L2),
+        //ARG_ENUM(VX_COMPARE_CCORR),
+        ARG_ENUM(VX_COMPARE_L2_NORM),
+        ARG_ENUM(VX_COMPARE_CCORR_NORM))
+{
+    vx_context context = context_->vx_context_;
+    vx_image vx_template_image, vx_source_image, vx_result_image;
+    CT_Image ct_template_image, ct_source_image;
+    ASSERT_NO_FAILURE(ct_template_image = ct_read_image("lena_gray_template.bmp", 1));
+    ASSERT_NO_FAILURE(vx_template_image = ct_image_to_vx_image(ct_template_image, context));
+    ASSERT_NO_FAILURE(ct_source_image = ct_read_image("lena_gray_source.bmp", 1));
+    ASSERT_NO_FAILURE(vx_source_image = ct_image_to_vx_image(ct_source_image, context));
+
+    vx_uint32 template_width, template_height, source_width, source_height, result_width, result_height;
+    vxQueryImage(vx_source_image, VX_IMAGE_WIDTH, &source_width, sizeof(vx_uint32));
+    vxQueryImage(vx_source_image, VX_IMAGE_HEIGHT, &source_height, sizeof(vx_uint32));
+    vxQueryImage(vx_template_image, VX_IMAGE_WIDTH, &template_width, sizeof(vx_uint32));
+    vxQueryImage(vx_template_image, VX_IMAGE_HEIGHT, &template_height, sizeof(vx_uint32));
+    result_width = source_width - template_width + 1;
+    result_height = source_height - template_height + 1;
+    ASSERT_VX_OBJECT(vx_result_image = vxCreateImage(context, result_width, result_height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    VX_CALL(vxuMatchTemplate(context, vx_source_image, vx_template_image, arg_->type, vx_result_image));
+
+    uint32_t mincount = 0, maxcount = 0;
+    vx_scalar minval_, maxval_, mincount_, maxcount_;
+    vx_array minloc_ = 0, maxloc_ = 0;
+    vx_enum sctype = VX_TYPE_INT16;
+    minval_ = ct_scalar_from_int(context, sctype, 0);
+    maxval_ = ct_scalar_from_int(context, sctype, 0);
+    mincount_ = ct_scalar_from_int(context, VX_TYPE_UINT32, 0);
+    maxcount_ = ct_scalar_from_int(context, VX_TYPE_UINT32, 0);
+    minloc_ = vxCreateArray(context, VX_TYPE_COORDINATES2D, 300);
+    maxloc_ = vxCreateArray(context, VX_TYPE_COORDINATES2D, 300);
+    VX_CALL(vxuMinMaxLoc(context, vx_result_image, minval_, maxval_,
+                                   minloc_,
+                                   maxloc_,
+                                   mincount_,
+                                   maxcount_));
+    vxCopyScalar(mincount_, &mincount, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    vxCopyScalar(maxcount_, &maxcount, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    vx_array resultloc = minloc_;
+    if(arg_->type == VX_COMPARE_CCORR || arg_->type == VX_COMPARE_CCORR_NORM)
+    {
+        resultloc = maxloc_;
+    }
+    vx_size stride = 0;
+    vx_coordinates2d_t *p = NULL;
+    vx_map_id map_id;
+    vx_coordinates2d_t result = {0,0};
+    VX_CALL(vxMapArrayRange(resultloc, 0, 1, &map_id, &stride, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+    result = p[0];
+    VX_CALL(vxUnmapArrayRange(resultloc, map_id));
+
+    //The correct match point is (24, 24), and error range is +/- 1 pixel.
+    ASSERT(result.x > 24 - 2 && result.x < 24 + 2);
+    ASSERT(result.y > 24 - 2 && result.y < 24 + 2);
+
+    VX_CALL(vxReleaseScalar(&minval_));
+    VX_CALL(vxReleaseScalar(&maxval_));
+    VX_CALL(vxReleaseScalar(&mincount_));
+    VX_CALL(vxReleaseScalar(&maxcount_));
+    VX_CALL(vxReleaseArray(&minloc_));
+    VX_CALL(vxReleaseArray(&maxloc_));
+    VX_CALL(vxReleaseImage(&vx_template_image));
+    VX_CALL(vxReleaseImage(&vx_source_image));
+    VX_CALL(vxReleaseImage(&vx_result_image));
+
+    ASSERT(vx_template_image == 0);
+    ASSERT(vx_source_image == 0);
+    ASSERT(vx_result_image == 0);}
+
+TESTCASE_TESTS(MatchTemplate, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_matrix.c b/test_conformance/test_matrix.c
new file mode 100644
index 0000000..ade4a82
--- /dev/null
+++ b/test_conformance/test_matrix.c
@@ -0,0 +1,210 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <math.h>
+
+typedef struct
+{
+    const char* name;
+    vx_enum type;
+} data_type_arg;
+
+TESTCASE(Matrix, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST_WITH_ARG(Matrix, test_vxCreateMatrix, data_type_arg,
+              ARG_ENUM(VX_TYPE_UINT8),
+              ARG_ENUM(VX_TYPE_INT32),
+              ARG_ENUM(VX_TYPE_FLOAT32))
+{
+    vx_context context = context_->vx_context_;
+    vx_matrix matrix;
+    vx_size rows = 5, cols = 3;
+    vx_enum data_type = arg_->type;
+
+    ASSERT_VX_OBJECT(matrix = vxCreateMatrix(context, data_type, cols, rows), VX_TYPE_MATRIX);
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+
+    ASSERT(matrix == 0);
+}
+
+TEST_WITH_ARG(Matrix, test_vxCreateVirtualMatrix, data_type_arg,
+              ARG_ENUM(VX_TYPE_UINT8),
+              ARG_ENUM(VX_TYPE_INT32),
+              ARG_ENUM(VX_TYPE_FLOAT32))
+{
+    vx_context context = context_->vx_context_;
+    vx_matrix matrix;
+    vx_size rows = 5, cols = 3;
+    vx_enum data_type = arg_->type;
+    vx_graph graph = 0;
+    vx_coordinates2d_t origin = {0, 0};
+    graph = vxCreateGraph(context);
+
+    ASSERT_VX_OBJECT(matrix = vxCreateVirtualMatrix(graph, data_type, cols, rows), VX_TYPE_MATRIX);
+
+    VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ORIGIN, &origin, sizeof(origin)));
+    ASSERT(origin.x == (vx_uint32)(cols / 2));
+    ASSERT(origin.y == (vx_uint32)(rows / 2));
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+    ASSERT(matrix == 0);
+    VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(graph == 0);
+}
+
+TEST(Matrix, test_vxCreateMatrixFromPatternAndOrigin)
+{
+    vx_context context = context_->vx_context_;
+    vx_matrix matrix;
+    vx_size rows = 5, cols = 3;
+    vx_size origin_row = 1, origin_col = 2;
+
+    ASSERT_VX_OBJECT(matrix = vxCreateMatrixFromPatternAndOrigin(context, VX_PATTERN_BOX, cols, rows, origin_col, origin_row), VX_TYPE_MATRIX);
+
+    vx_size actual_rows = 0, actual_cols = 0;
+    vx_coordinates2d_t origin = {0, 0};
+
+    VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ROWS, &actual_rows, sizeof(actual_rows)));
+    ASSERT(rows == actual_rows);
+
+    VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_COLUMNS, &actual_cols, sizeof(actual_cols)));
+    ASSERT(cols == actual_cols);
+
+    VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ORIGIN, &origin, sizeof(origin)));
+    ASSERT(origin.x == origin_col);
+    ASSERT(origin.y == origin_row);
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+
+    ASSERT(matrix == 0);
+}
+
+TEST_WITH_ARG(Matrix, test_vxCopyMatrix, data_type_arg,
+              ARG_ENUM(VX_TYPE_UINT8),
+              ARG_ENUM(VX_TYPE_INT32),
+              ARG_ENUM(VX_TYPE_FLOAT32))
+{
+    vx_context context = context_->vx_context_;
+    vx_matrix matrix;
+    vx_size rows = 5, cols = 3;
+    vx_enum data_type = arg_->type;
+    uint64_t* seed = &CT()->seed_;
+    vx_size max_size = rows*cols*sizeof(vx_float32);
+    vx_uint8* data = ct_alloc_mem(max_size);
+    vx_size i;
+    for (i = 0; i < max_size; i++)
+    {
+        data[i] = (vx_uint8)CT_RNG_NEXT_INT(*seed, 0, 256);
+    }
+
+    ASSERT_VX_OBJECT(matrix = vxCreateMatrix(context, data_type, cols, rows), VX_TYPE_MATRIX);
+
+    VX_CALL(vxCopyMatrix(matrix, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+    void* actual_data = ct_alloc_mem(max_size);
+    VX_CALL(vxCopyMatrix(matrix, actual_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    {
+        vx_size i;
+        switch (data_type)
+        {
+        case VX_TYPE_UINT8:
+            for (i = 0; i < rows*cols; i++)
+            {
+                ASSERT(((vx_uint8*)data)[i] == ((vx_uint8*)actual_data)[i]);
+            }
+            break;
+        case VX_TYPE_INT32:
+            for (i = 0; i < rows*cols; i++)
+            {
+                ASSERT(((vx_int32*)data)[i] == ((vx_int32*)actual_data)[i]);
+            }
+            break;
+        case VX_TYPE_FLOAT32:
+            for (i = 0; i < rows*cols; i++)
+            {
+                ASSERT(fabs(((vx_float32*)data)[i] - ((vx_float32*)actual_data)[i]) < 0.0000001f);
+            }
+            break;
+        }
+    }
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+
+    ASSERT(matrix == 0);
+
+    ct_free_mem(actual_data);
+    ct_free_mem(data);
+}
+
+TEST_WITH_ARG(Matrix, test_vxQueryMatrix, data_type_arg,
+              ARG_ENUM(VX_TYPE_UINT8),
+              ARG_ENUM(VX_TYPE_INT32),
+              ARG_ENUM(VX_TYPE_FLOAT32))
+{
+    vx_context context = context_->vx_context_;
+    vx_matrix matrix;
+    vx_size rows = 5, cols = 3;
+    vx_enum data_type = arg_->type;
+
+    ASSERT_VX_OBJECT(matrix = vxCreateMatrix(context, data_type, cols, rows), VX_TYPE_MATRIX);
+
+    {
+        vx_enum actual_type = VX_TYPE_INVALID;
+        vx_size actual_rows = 0, actual_cols = 0;
+        vx_coordinates2d_t actual_origin = {0, 0};
+        vx_size actual_size = 0;
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_TYPE, &actual_type, sizeof(actual_type)));
+        ASSERT(data_type == actual_type);
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ROWS, &actual_rows, sizeof(actual_rows)));
+        ASSERT(rows == actual_rows);
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_COLUMNS, &actual_cols, sizeof(actual_cols)));
+        ASSERT(cols == actual_cols);
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ORIGIN, &actual_origin, sizeof(actual_origin)));
+        ASSERT(rows / 2 == actual_origin.y);
+        ASSERT(cols / 2 == actual_origin.x);
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_SIZE, &actual_size, sizeof(actual_size)));
+        switch(data_type)
+        {
+        case VX_TYPE_UINT8:
+            ASSERT(rows*cols*sizeof(vx_uint8) == actual_size);
+            break;
+        case VX_TYPE_INT32:
+            ASSERT(rows*cols*sizeof(vx_int32) == actual_size);
+            break;
+        case VX_TYPE_FLOAT32:
+            ASSERT(rows*cols*sizeof(vx_float32) == actual_size);
+            break;
+        }
+    }
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+
+    ASSERT(matrix == 0);
+}
+
+
+TESTCASE_TESTS(Matrix, test_vxCreateMatrix, test_vxCreateVirtualMatrix, test_vxCreateMatrixFromPatternAndOrigin, test_vxCopyMatrix, test_vxQueryMatrix)
diff --git a/test_conformance/test_max.c b/test_conformance/test_max.c
new file mode 100644
index 0000000..8c1318e
--- /dev/null
+++ b/test_conformance/test_max.c
@@ -0,0 +1,182 @@
+/*
+
+ * Copyright (c) 2017-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+
+TESTCASE(Max, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_df_image format;
+} format_arg;
+
+#define MAX_TEST_CASE(imm, tp) \
+    {#imm "/" #tp, CT_##imm##_MODE, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(Max, testvxMax, format_arg,
+              MAX_TEST_CASE(Immediate, U8),
+              MAX_TEST_CASE(Graph, U8),
+              MAX_TEST_CASE(Immediate, S16),
+              MAX_TEST_CASE(Graph, S16),
+              )
+{
+    int format = arg_->format;
+    int mode = arg_->mode;
+    vx_image src_in0;
+    vx_image src_in1;
+    vx_image out,ref;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_context context = context_->vx_context_;
+
+    vx_pixel_value_t vals0;
+
+    vals0.reserved[0] = 0x10;
+    vals0.reserved[1] = 0x11;
+    vals0.reserved[2] = 0x12;
+    vals0.reserved[3] = 0x13;
+    vx_pixel_value_t vals1;
+
+    vals1.reserved[0] = 0x11;
+    vals1.reserved[1] = 0x11;
+    vals1.reserved[2] = 0x12;
+    vals1.reserved[3] = 0x13;
+
+    CT_Image output = NULL;
+    ASSERT_VX_OBJECT(src_in0 = vxCreateImage(context, 640, 480, format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src_in1 = vxCreateImage(context, 640, 480, format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(ref = vxCreateUniformImage(context, 640, 480, format, &vals1), VX_TYPE_IMAGE);
+
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    VX_CALL(vxQueryImage(src_in0, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, 640, 480 };
+        vx_imagepatch_addressing_t tst_addr0 = VX_IMAGEPATCH_ADDR_INIT;
+        vx_imagepatch_addressing_t tst_addr1 = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id0;
+        vx_map_id map_id1;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr0 = 0;
+        void* ptr1 = 0;
+
+        VX_CALL(vxMapImagePatch(src_in0, &rect, plane, &map_id0, &tst_addr0, &ptr0, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, flags));
+        VX_CALL(vxMapImagePatch(src_in1, &rect, plane, &map_id1, &tst_addr1, &ptr1, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+       for (y = 0; y < tst_addr0.dim_y; y += tst_addr0.step_y)
+        {
+            for (x = 0; x < tst_addr0.dim_x; x += tst_addr0.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* tst_ptr0 = (vx_uint8*)vxFormatImagePatchAddress2d(ptr0, x, y, &tst_addr0);
+                    if(x >= y)
+                        tst_ptr0[0] = vals1.U8;
+                    else
+                        tst_ptr0[0] = vals0.U8;
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* tst_ptr0 = (vx_int16*)vxFormatImagePatchAddress2d(ptr0, x, y, &tst_addr0);
+                    if(x >= y)
+                        tst_ptr0[0] = vals1.S16;
+                    else
+                        tst_ptr0[0] = vals0.S16;
+                }
+                break;
+               }
+            }
+        }
+        VX_CALL(vxUnmapImagePatch(src_in0, map_id0));
+
+    for (y = 0; y < tst_addr1.dim_y; y += tst_addr1.step_y)
+    {
+        for (x = 0; x < tst_addr1.dim_x; x += tst_addr1.step_x)
+        {
+            switch (arg_->format)
+            {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* tst_ptr1 = (vx_uint8*)vxFormatImagePatchAddress2d(ptr1, x, y, &tst_addr1);
+                    if (x >= y)
+                        tst_ptr1[0] = vals0.U8;
+                    else
+                        tst_ptr1[0] = vals1.U8;
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* tst_ptr1 = (vx_int16*)vxFormatImagePatchAddress2d(ptr1, x, y, &tst_addr1);
+                    if (x >= y)
+                        tst_ptr1[0] = vals0.S16;
+                    else
+                        tst_ptr1[0] = vals1.S16;
+                }
+                break;
+               }
+            }
+        }
+        VX_CALL(vxUnmapImagePatch(src_in1, map_id1));
+    }
+
+    ASSERT_NO_FAILURE(output = ct_allocate_image(640, 480, format));
+    ASSERT_VX_OBJECT(out = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    if( mode == CT_Immediate_MODE )
+    {
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuMax(context, src_in0, src_in1, out));
+    }
+    else
+    {
+        graph = vxCreateGraph(context);
+        ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+        node = vxMaxNode(graph, src_in0, src_in1, out);
+        ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+        VX_CALL(vxVerifyGraph(graph));
+        VX_CALL(vxProcessGraph(graph));
+    }
+
+    CT_Image image_ref = ct_image_from_vx_image(ref);
+    CT_Image image_out = ct_image_from_vx_image(out);
+    EXPECT_EQ_CTIMAGE(image_ref, image_out);
+
+    if(node)
+        VX_CALL(vxReleaseNode(&node));
+    if(graph)
+        VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(node == 0 && graph == 0);
+    VX_CALL(vxReleaseImage(&src_in0));
+    VX_CALL(vxReleaseImage(&src_in1));
+    VX_CALL(vxReleaseImage(&out));
+    VX_CALL(vxReleaseImage(&ref));
+
+}
+TESTCASE_TESTS(Max, testvxMax)
diff --git a/test_conformance/test_meanstddev.c b/test_conformance/test_meanstddev.c
new file mode 100644
index 0000000..bbf2c2b
--- /dev/null
+++ b/test_conformance/test_meanstddev.c
@@ -0,0 +1,178 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+static void reference_mean_stddev(CT_Image src, vx_float32* _mean, vx_float32* _stddev)
+{
+    uint32_t x, y, width = src ? src->width : 0, height = src ? src->height : 0;
+    uint32_t npix, stride;
+    double sum = 0, sqsum = 0;
+    int format = src ? src->format : VX_DF_IMAGE_U8;
+
+    ASSERT(src);
+    ASSERT(src->width > 0 && src->height > 0);
+    npix = width*height;
+    stride = ct_stride_bytes(src);
+
+#define CASE_MEANSTDDEV(format, type, acctype) \
+    case format: \
+    { \
+        acctype s = 0, s2 = 0; \
+        for( y = 0; y < src->height; y++ ) \
+        { \
+            const type* ptr = (const type*)(src->data.y + stride*y); \
+            for( x = 0; x < src->width; x++ ) \
+            { \
+                type val = ptr[x]; \
+                s += val; \
+                s2 += (acctype)val*val; \
+            } \
+        } \
+        sum = (double)s; sqsum = (double)s2; \
+    } \
+    break
+
+    switch(format)
+    {
+    CASE_MEANSTDDEV(VX_DF_IMAGE_U8, uint8_t, uint64_t);
+    default:
+        FAIL("Unsupported image format: (%d)", &src->format);
+    }
+
+    *_mean = (vx_float32)(sum/npix);
+    sqsum = sqsum/npix - (sum/npix)*(sum/npix);
+    *_stddev = (vx_float32)sqrt(CT_MAX(sqsum, 0.));
+}
+
+
+TESTCASE(MeanStdDev, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_df_image format;
+} format_arg;
+
+
+#define MEANSTDDEV_TEST_CASE(imm, tp) \
+    {#imm "/" #tp, CT_##imm##_MODE, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(MeanStdDev, testOnRandom, format_arg,
+              MEANSTDDEV_TEST_CASE(Immediate, U8),
+              MEANSTDDEV_TEST_CASE(Graph, U8),
+              )
+{
+    double mean_tolerance = 1e-4;
+    double stddev_tolerance = 1e-4;
+    int format = arg_->format;
+    int mode = arg_->mode;
+    vx_image src;
+    CT_Image src0;
+    vx_node node = 0;
+    vx_graph graph = 0;
+    vx_scalar mean_s, stddev_s;
+    vx_context context = context_->vx_context_;
+    int iter, niters = 100;
+    uint64_t rng;
+    vx_float32 mean0 = 0.f, stddev0 = 0.f, mean = 0.f, stddev = 0.f;
+    int a = 0, b = 256;
+
+    rng = CT()->seed_;
+    mean_tolerance *= b;
+    stddev_tolerance *= b;
+
+    mean_s = vxCreateScalar(context, VX_TYPE_FLOAT32, &mean);
+    ASSERT_VX_OBJECT(mean_s, VX_TYPE_SCALAR);
+    stddev_s = vxCreateScalar(context, VX_TYPE_FLOAT32, &stddev);
+    ASSERT_VX_OBJECT(stddev_s, VX_TYPE_SCALAR);
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width = ct_roundf(ct_log_rng(&rng, 0, 10));
+        int height = ct_roundf(ct_log_rng(&rng, 0, 10));
+        double mean_diff, stddev_diff;
+        width = CT_MAX(width, 1);
+        height = CT_MAX(height, 1);
+
+        if( !ct_check_any_size() )
+        {
+            width = CT_MIN((width + 7) & -8, 640);
+            height = CT_MIN((height + 7) & -8, 480);
+        }
+
+        ct_update_progress(iter, niters);
+
+        src0 = ct_allocate_ct_image_random(width, height, format, &rng, a, b);
+        reference_mean_stddev(src0, &mean0, &stddev0);
+        src = ct_image_to_vx_image(src0, context);
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuMeanStdDev(context, src, &mean, &stddev));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxMeanStdDevNode(graph, src, mean_s, stddev_s);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxCopyScalar(mean_s, &mean, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+            VX_CALL(vxCopyScalar(stddev_s, &stddev, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+        }
+
+        mean_diff = fabs(mean - mean0);
+        stddev_diff = fabs(stddev - stddev0);
+
+        if( mean_diff > mean_tolerance ||
+            stddev_diff > stddev_tolerance )
+        {
+            CT_RecordFailureAtFormat("Test case %d. width=%d, height=%d,\n"
+                                     "\tExpected: mean=%.5g, stddev=%.5g\n"
+                                     "\tActual:   mean=%.5g (diff=%.5g %s %.5g), stddev=%.5f (diff=%.5g %s %.5g)\n",
+                                     __FUNCTION__, __FILE__, __LINE__,
+                                     iter, width, height,
+                                     mean0, stddev0,
+                                     mean, mean_diff, mean_diff > mean_tolerance ? ">" : "<=", mean_tolerance,
+                                     stddev, stddev_diff, stddev_diff > stddev_tolerance ? ">" : "<=", stddev_tolerance);
+            break;
+        }
+
+        VX_CALL(vxReleaseImage(&src));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+
+    VX_CALL(vxReleaseScalar(&mean_s));
+    VX_CALL(vxReleaseScalar(&stddev_s));
+}
+
+TESTCASE_TESTS(MeanStdDev, testOnRandom)
diff --git a/test_conformance/test_median3x3.c b/test_conformance/test_median3x3.c
new file mode 100644
index 0000000..4b577c9
--- /dev/null
+++ b/test_conformance/test_median3x3.c
@@ -0,0 +1,298 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+
+TESTCASE(Median3x3, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Median3x3, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxMedian3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+// Generate input to cover these requirements:
+// There should be a image with randomly generated pixel intensities.
+static CT_Image median3x3_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image median3x3_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int compare_for_median_get(const void * a, const void * b)
+{
+    return *(int*)a - *(int*)b;
+}
+
+static int32_t median_get(int32_t *values)
+{
+    qsort(values, 9, sizeof(values[0]), compare_for_median_get);
+    return values[4];
+}
+
+static uint8_t median3x3_calculate(CT_Image src, uint32_t x, uint32_t y)
+{
+    int32_t values[9] = {
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)median_get(values);
+}
+
+static uint8_t median3x3_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1)
+    };
+    return (uint8_t)median_get(values);
+}
+
+static uint8_t median3x3_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value)
+    };
+    return (uint8_t)median_get(values);
+}
+
+
+static CT_Image median3x3_create_reference_image(CT_Image src, vx_border_t border)
+{
+    CT_Image dst;
+
+    CT_ASSERT_(return NULL, src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, src->format);
+
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                if (x >= 1 && y >= 1 && x < src->width - 1 && y < src->height - 1)
+                {
+                    uint8_t res = median3x3_calculate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = median3x3_calculate_replicate(src, x, y);
+                    *dst_data = res;
+                });
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 constant_value = border.constant_value.U32;
+        CT_FILL_IMAGE_8U(return 0, dst,
+                {
+                    uint8_t res = median3x3_calculate_constant(src, x, y, constant_value);
+                    *dst_data = res;
+                });
+    }
+    else
+    {
+        ASSERT_(return 0, 0);
+    }
+    return dst;
+}
+
+
+static void median3x3_check(CT_Image src, CT_Image dst, vx_border_t border)
+{
+    CT_Image dst_ref = NULL;
+
+    ASSERT(src && dst);
+
+    ASSERT_NO_FAILURE(dst_ref = median3x3_create_reference_image(src, border));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst,  1, 1, 1, 1);
+            ct_adjust_roi(dst_ref, 1, 1, 1, 1);
+        }
+    );
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+} Filter_Arg;
+
+#define MEDIAN_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, median3x3_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, median3x3_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Median3x3, testGraphProcessing, Filter_Arg,
+    MEDIAN_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxMedian3x3Node(graph, src_image, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(median3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Median3x3, testImmediateProcessing, Filter_Arg,
+    MEDIAN_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_image = ct_create_similar_image(src_image), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuMedian3x3(context, src_image, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(median3x3_check(src, dst, border));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Median3x3, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_min.c b/test_conformance/test_min.c
new file mode 100644
index 0000000..024a5f9
--- /dev/null
+++ b/test_conformance/test_min.c
@@ -0,0 +1,184 @@
+/*
+
+ * Copyright (c) 2017-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+
+TESTCASE(Min, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_df_image format;
+} format_arg;
+
+#define MIN_TEST_CASE(imm, tp) \
+    {#imm "/" #tp, CT_##imm##_MODE, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(Min, testvxMin, format_arg,
+              MIN_TEST_CASE(Immediate, U8),
+              MIN_TEST_CASE(Graph, U8),
+              MIN_TEST_CASE(Immediate, S16),
+              MIN_TEST_CASE(Graph, S16),
+              )
+{
+    int format = arg_->format;
+    int mode = arg_->mode;
+    vx_image src_in0;
+    vx_image src_in1;
+    vx_image out,ref;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_context context = context_->vx_context_;
+
+    vx_pixel_value_t vals0;
+
+    vals0.reserved[0] = 0x10;
+    vals0.reserved[1] = 0x11;
+    vals0.reserved[2] = 0x12;
+    vals0.reserved[3] = 0x13;
+    vx_pixel_value_t vals1;
+
+    vals1.reserved[0] = 0x11;
+    vals1.reserved[1] = 0x11;
+    vals1.reserved[2] = 0x12;
+    vals1.reserved[3] = 0x13;
+
+    CT_Image output = NULL;
+    ASSERT_VX_OBJECT(src_in0 = vxCreateImage(context, 640, 480, format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src_in1 = vxCreateImage(context, 640, 480, format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(ref = vxCreateUniformImage(context, 640, 480, format, &vals0), VX_TYPE_IMAGE);
+
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    VX_CALL(vxQueryImage(src_in0, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, 640, 480 };
+        vx_imagepatch_addressing_t tst_addr0 = VX_IMAGEPATCH_ADDR_INIT;
+        vx_imagepatch_addressing_t tst_addr1 = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id0;
+        vx_map_id map_id1;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr0 = 0;
+        void* ptr1 = 0;
+
+        VX_CALL(vxMapImagePatch(src_in0, &rect, plane, &map_id0, &tst_addr0, &ptr0, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, flags));
+        VX_CALL(vxMapImagePatch(src_in1, &rect, plane, &map_id1, &tst_addr1, &ptr1, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        for (y = 0; y < tst_addr0.dim_y; y += tst_addr0.step_y)
+        {
+            for (x = 0; x < tst_addr0.dim_x; x += tst_addr0.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* tst_ptr0 = (vx_uint8*)vxFormatImagePatchAddress2d(ptr0, x, y, &tst_addr0);
+                    if(x >= y)
+                        tst_ptr0[0] = vals1.U8;
+                    else
+                        tst_ptr0[0] = vals0.U8;
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* tst_ptr0 = (vx_int16*)vxFormatImagePatchAddress2d(ptr0, x, y, &tst_addr0);
+                    if(x >= y)
+                        tst_ptr0[0] = vals1.S16;
+                    else
+                        tst_ptr0[0] = vals0.S16;
+                }
+                break;
+               }
+            }
+        }
+        VX_CALL(vxUnmapImagePatch(src_in0, map_id0));
+
+        for (y = 0; y < tst_addr1.dim_y; y += tst_addr1.step_y)
+        {
+            for (x = 0; x < tst_addr1.dim_x; x += tst_addr1.step_x)
+            {
+                switch (arg_->format)
+                {
+                    case VX_DF_IMAGE_U8:
+                    {
+                        vx_uint8* tst_ptr1 = (vx_uint8*)vxFormatImagePatchAddress2d(ptr1, x, y, &tst_addr1);
+                        if (x >= y)
+                            tst_ptr1[0] = vals0.U8;
+                        else
+                            tst_ptr1[0] = vals1.U8;
+                    }
+                    break;
+
+                    case VX_DF_IMAGE_S16:
+                    {
+                        vx_int16* tst_ptr1 = (vx_int16*)vxFormatImagePatchAddress2d(ptr1, x, y, &tst_addr1);
+                        if (x >= y)
+                            tst_ptr1[0] = vals0.S16;
+                        else
+                            tst_ptr1[0] = vals1.S16;
+                    }
+                    break;
+               }
+            }
+        }
+        VX_CALL(vxUnmapImagePatch(src_in1, map_id1));
+    }
+
+    ASSERT_NO_FAILURE(output = ct_allocate_image(640, 480, format));
+    ASSERT_VX_OBJECT(out = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+
+    if( mode == CT_Immediate_MODE )
+    {
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuMin(context, src_in0, src_in1, out));
+    }
+    else
+    {
+        graph = vxCreateGraph(context);
+        ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+        node = vxMinNode(graph, src_in0, src_in1, out);
+        ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+        VX_CALL(vxVerifyGraph(graph));
+        VX_CALL(vxProcessGraph(graph));
+    }
+
+    CT_Image image_ref = ct_image_from_vx_image(ref);
+    CT_Image image_out = ct_image_from_vx_image(out);
+
+    EXPECT_EQ_CTIMAGE(image_ref, image_out);
+
+    if(node)
+        VX_CALL(vxReleaseNode(&node));
+    if(graph)
+        VX_CALL(vxReleaseGraph(&graph));
+    ASSERT(node == 0 && graph == 0);
+    VX_CALL(vxReleaseImage(&src_in0));
+    VX_CALL(vxReleaseImage(&src_in1));
+    VX_CALL(vxReleaseImage(&out));
+    VX_CALL(vxReleaseImage(&ref));
+
+}
+TESTCASE_TESTS(Min, testvxMin)
diff --git a/test_conformance/test_minmaxloc.c b/test_conformance/test_minmaxloc.c
new file mode 100644
index 0000000..08be9d9
--- /dev/null
+++ b/test_conformance/test_minmaxloc.c
@@ -0,0 +1,335 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+typedef vx_coordinates2d_t Point;
+
+static void reference_minmaxloc(CT_Image src, int* _minval, int* _maxval,
+                                uint32_t* _mincount, uint32_t* _maxcount)
+{
+    Point pt={0, 0};
+    int minval = INT_MAX, maxval = INT_MIN;
+    int format = src ? src->format : VX_DF_IMAGE_U8;
+    uint32_t mincount = 0, maxcount = 0, stride;
+
+    ASSERT(src);
+    ASSERT(src->width > 0 && src->height > 0);
+    stride = ct_stride_bytes(src);
+
+#define CASE_MINMAXLOC(format, type) \
+    case format: \
+    for( pt.y = 0; pt.y < src->height; pt.y++ ) \
+    { \
+        const type* ptr = (const type*)(src->data.y + stride*pt.y); \
+        for( pt.x = 0; pt.x < src->width; pt.x++ ) \
+        { \
+            int val = ptr[pt.x]; \
+            if( val <= minval ) \
+            { \
+                if(val < minval) \
+                { \
+                    minval = val; \
+                    mincount = 0; \
+                } \
+                mincount++; \
+            } \
+            if( val >= maxval ) \
+            { \
+                if(val > maxval) \
+                { \
+                    maxval = val; \
+                    maxcount = 0; \
+                } \
+                maxcount++; \
+            } \
+        } \
+    } \
+    break
+
+    switch(format)
+    {
+    CASE_MINMAXLOC(VX_DF_IMAGE_U8, uint8_t);
+    CASE_MINMAXLOC(VX_DF_IMAGE_S16, int16_t);
+    CASE_MINMAXLOC(VX_DF_IMAGE_S32, int32_t);
+    default:
+        FAIL("Unsupported image format: (%d)", &src->format);
+    }
+
+    *_minval = minval;
+    *_maxval = maxval;
+    if(_mincount)
+        *_mincount = mincount;
+    if(_maxcount)
+        *_maxcount = maxcount;
+}
+
+static void reference_minmax(CT_Image src, int* _minval, int* _maxval)
+{
+    reference_minmaxloc(src, _minval, _maxval, 0, 0);
+}
+
+static int cmp_pt(const void* a, const void* b)
+{
+    const Point* pa = (const Point*)a;
+    const Point* pb = (const Point*)b;
+    int d = pa->y - pb->y;
+    return d ? d : (int)(pa->x - pb->x);
+}
+
+static void ct_sort_points(Point* ptbuf, vx_size npoints)
+{
+    qsort(ptbuf, npoints, sizeof(ptbuf[0]), cmp_pt);
+}
+
+static void ct_set_random_pixels(CT_Image image, uint64_t* rng, int where_count, int what_count, const int* valarr)
+{
+    int format = image->format, i;
+    uint32_t stride = ct_stride_bytes(image);
+
+    #define CASE_SET_RANDOM(format, type, cast_macro) \
+    case format: \
+        for( i = 0; i < where_count; i++) \
+        { \
+            int y = CT_RNG_NEXT_INT(*rng, 0, image->height); \
+            int x = CT_RNG_NEXT_INT(*rng, 0, image->width); \
+            int k = CT_RNG_NEXT_INT(*rng, 0, what_count); \
+            int val = valarr[k]; \
+            ((type*)(image->data.y + stride*y))[x] = cast_macro(val); \
+        } \
+        break
+
+    switch(format)
+    {
+    CASE_SET_RANDOM(VX_DF_IMAGE_U8, uint8_t, CT_CAST_U8);
+    CASE_SET_RANDOM(VX_DF_IMAGE_U16, uint16_t, CT_CAST_U16);
+    CASE_SET_RANDOM(VX_DF_IMAGE_S16, int16_t, CT_CAST_S16);
+    CASE_SET_RANDOM(VX_DF_IMAGE_S32, int32_t, CT_CAST_S32);
+    default:
+        CT_ADD_FAILURE("unsupported image format %d", format);
+    }
+}
+
+TESTCASE(MinMaxLoc, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_df_image format;
+} format_arg;
+
+#define MINMAXLOC_TEST_CASE(imm, tp) \
+    {#imm "/" #tp, CT_##imm##_MODE, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(MinMaxLoc, testOnRandom, format_arg,
+              MINMAXLOC_TEST_CASE(Immediate, U8),
+              MINMAXLOC_TEST_CASE(Graph, U8),
+              MINMAXLOC_TEST_CASE(Immediate, S16),
+              MINMAXLOC_TEST_CASE(Graph, S16),
+              )
+{
+    const int MAX_CAP = 300;
+    int format = arg_->format;
+    int mode = arg_->mode;
+    vx_image src;
+    CT_Image src0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_context context = context_->vx_context_;
+    int iter, k, niters = 100;
+    uint64_t rng;
+    int a, b;
+    int minval0 = 0, maxval0 = 0, minval = 0, maxval = 0;
+    uint32_t mincount0 = 0, maxcount0 = 0, mincount = 0, maxcount = 0;
+    vx_scalar minval_, maxval_, mincount_, maxcount_;
+    vx_array minloc_ = 0, maxloc_ = 0;
+    vx_enum sctype = format == VX_DF_IMAGE_U8 ? VX_TYPE_UINT8 :
+                     format == VX_DF_IMAGE_S16 ? VX_TYPE_INT16 :
+                     VX_TYPE_INT32;
+    uint32_t pixsize = ct_image_bits_per_pixel(format)/8;
+    Point* ptbuf = 0;
+    vx_size bufbytes = 0, npoints = 0, bufcap = 0;
+
+    if( format == VX_DF_IMAGE_U8 )
+        a = 0, b = 256;
+    else if( format == VX_DF_IMAGE_S16 )
+        a = -32768, b = 32768;
+    else
+        a = INT_MIN/3, b = INT_MAX/3;
+
+    minval_ = ct_scalar_from_int(context, sctype, 0);
+    maxval_ = ct_scalar_from_int(context, sctype, 0);
+    mincount_ = ct_scalar_from_int(context, VX_TYPE_UINT32, 0);
+    maxcount_ = ct_scalar_from_int(context, VX_TYPE_UINT32, 0);
+    minloc_ = vxCreateArray(context, VX_TYPE_COORDINATES2D, MAX_CAP);
+    maxloc_ = vxCreateArray(context, VX_TYPE_COORDINATES2D, MAX_CAP);
+    ASSERT(vxGetStatus((vx_reference)minloc_) == VX_SUCCESS && vxGetStatus((vx_reference)maxloc_) == VX_SUCCESS);
+
+    rng = CT()->seed_;
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int return_loc = CT_RNG_NEXT_INT(rng, 0, 2);
+        int return_count = CT_RNG_NEXT_INT(rng, 0, 2);
+        uint32_t stride;
+        int width, height;
+
+        if( ct_check_any_size() )
+        {
+            width = ct_roundf(ct_log_rng(&rng, 0, 10));
+            height = ct_roundf(ct_log_rng(&rng, 0, 10));
+
+            width = CT_MAX(width, 1);
+            height = CT_MAX(height, 1);
+        }
+        else
+        {
+            width = 640;
+            height = 480;
+        }
+
+        ct_update_progress(iter, niters);
+
+        src0 = ct_allocate_ct_image_random(width, height, format, &rng, a, b);
+        stride = ct_stride_bytes(src0);
+        if( iter % 3 == 0 )
+        {
+            int mm[2], maxk;
+            reference_minmax(src0, &mm[0], &mm[1]);
+            maxk = CT_RNG_NEXT_INT(rng, 0, 100);
+            // make sure that there are several pixels with minimum/maximum value
+            ct_set_random_pixels(src0, &rng, maxk, 2, mm);
+        }
+        reference_minmaxloc(src0, &minval0, &maxval0, &mincount0, &maxcount0);
+        src = ct_image_to_vx_image(src0, context);
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuMinMaxLoc(context, src, minval_, maxval_,
+                         return_loc ? minloc_ : 0,
+                         return_loc ? maxloc_ : 0,
+                         return_count ? mincount_ : 0,
+                         return_count ? maxcount_ : 0));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxMinMaxLocNode(graph, src, minval_, maxval_,
+                                   return_loc ? minloc_ : 0,
+                                   return_loc ? maxloc_ : 0,
+                                   return_count ? mincount_ : 0,
+                                   return_count ? maxcount_ : 0);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+        }
+
+        minval = ct_scalar_as_int(minval_);
+        maxval = ct_scalar_as_int(maxval_);
+        if( return_count )
+        {
+            mincount = ct_scalar_as_int(mincount_);
+            maxcount = ct_scalar_as_int(maxcount_);
+        }
+        else
+        {
+            mincount = mincount0;
+            maxcount = maxcount0;
+        }
+
+        if( minval != minval0 || maxval != maxval0 || mincount != mincount0 || maxcount != maxcount0 )
+        {
+            CT_RecordFailureAtFormat("Test case %d. width=%d, height=%d,\n"
+                                     "\tExpected: minval=%d, maxval=%d, mincount=%d, maxcount=%d\n"
+                                     "\tActual:   minval=%d, maxval=%d, mincount=%d, maxcount=%d\n",
+                                     __FUNCTION__, __FILE__, __LINE__,
+                                     iter, width, height,
+                                     minval0, maxval0, mincount0, maxcount0,
+                                     minval, maxval, mincount, maxcount);
+            break;
+        }
+
+        if( return_loc )
+        {
+            uint8_t* roi_ptr = src0->data.y;
+            for( k = 0; k < 2; k++ )
+            {
+                int val0 = k == 0 ? minval : maxval;
+                uint32_t i, count = k == 0 ? mincount : maxcount;
+                vx_array loc = k == 0 ? minloc_ : maxloc_;
+                vx_enum tp;
+                union
+                {
+                    uint8_t u8;
+                    int16_t s16;
+                    int32_t s32;
+                }
+                uval;
+                if( format == VX_DF_IMAGE_U8 )
+                    uval.u8 = (uint8_t)val0;
+                else if( format == VX_DF_IMAGE_S16 )
+                    uval.s16 = (int16_t)val0;
+                else
+                    uval.s32 = (int32_t)val0;
+
+                tp = ct_read_array(loc, (void**)&ptbuf, &bufbytes, &npoints, &bufcap);
+                ASSERT(tp == VX_TYPE_COORDINATES2D);
+                ASSERT(npoints == CT_MIN(bufcap, (vx_size)count));
+
+                ct_sort_points(ptbuf, npoints);
+                for( i = 0; i < npoints; i++ )
+                {
+                    Point p = ptbuf[i];
+                    if( i > 0 )
+                    {
+                        // all the extrema locations should be different
+                        ASSERT(p.x != ptbuf[i-1].x || p.y != ptbuf[i-1].y);
+                    }
+                    // value at each extrema location should match the extremum value
+                    ASSERT(memcmp(roi_ptr + p.y*stride + p.x*pixsize, &uval, pixsize) == 0);
+                }
+            }
+        }
+
+        VX_CALL(vxReleaseImage(&src));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+
+    VX_CALL(vxReleaseScalar(&minval_));
+    VX_CALL(vxReleaseScalar(&maxval_));
+    VX_CALL(vxReleaseScalar(&mincount_));
+    VX_CALL(vxReleaseScalar(&maxcount_));
+    VX_CALL(vxReleaseArray(&minloc_));
+    VX_CALL(vxReleaseArray(&maxloc_));
+
+    if(ptbuf)
+        ct_free_mem(ptbuf);
+}
+
+TESTCASE_TESTS(MinMaxLoc, testOnRandom)
diff --git a/test_conformance/test_module/CMakeLists.txt b/test_conformance/test_module/CMakeLists.txt
new file mode 100644
index 0000000..c5ea101
--- /dev/null
+++ b/test_conformance/test_module/CMakeLists.txt
@@ -0,0 +1,63 @@
+#
+
+# Copyright (c) 2011-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+include_directories( BEFORE
+                     ${CMAKE_CURRENT_SOURCE_DIR} 
+                     ${CMAKE_SOURCE_DIR}/include
+                     ${OPENVX_INCLUDES} )
+
+# set target name
+set( TARGET_NAME_TESTMODULE_LIB test-testmodule-lib )
+# set target name
+set( TARGET_NAME_TESTMODULE test-testmodule )
+
+if(CYGWIN)
+    set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
+    set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll.a")
+    set( OPENVX_BUILDING_EXPORT_DEF -DVX_API_ENTRY=__attribute__\(\(dllexport\)\) )
+endif()
+
+if ((WIN32) OR (CYGWIN))
+   add_definitions( ${OPENVX_BUILDING_EXPORT_DEF} )
+endif ((WIN32) OR (CYGWIN))
+
+# add a target named ${TARGET_NAME}
+add_library (${TARGET_NAME_TESTMODULE_LIB}  vx_testmodule_lib.c)
+
+target_link_libraries( ${TARGET_NAME_TESTMODULE_LIB} openvx-interface )
+
+if ((WIN32) OR (CYGWIN))
+   set( DEF_FILE testmodule.def )
+endif ((WIN32) OR (CYGWIN))
+# add a target named ${TARGET_NAME}
+add_library (${TARGET_NAME_TESTMODULE} SHARED vx_testmodule_module.c ${DEF_FILE})
+
+if (CYGWIN)
+   set_target_properties( ${TARGET_NAME_TESTMODULE} PROPERTIES LINK_FLAGS ${CMAKE_CURRENT_SOURCE_DIR}/${DEF_FILE} )
+endif (CYGWIN)
+
+target_link_libraries( ${TARGET_NAME_TESTMODULE} test-testmodule-lib openvx-interface )
+
+install ( TARGETS ${TARGET_NAME_TESTMODULE_LIB} ${TARGET_NAME_TESTMODULE} ${TARGET_NAME_TESTMODULE}
+          RUNTIME DESTINATION bin
+          ARCHIVE DESTINATION bin
+          LIBRARY DESTINATION bin )
+		  
+set_target_properties( ${TARGET_NAME_TESTMODULE_LIB} PROPERTIES FOLDER ${TESTMODULE_FOLDER} )
+set_target_properties( ${TARGET_NAME_TESTMODULE} PROPERTIES FOLDER ${TESTMODULE_FOLDER} )
+set_target_properties( ${TARGET_NAME_TESTMODULE} PROPERTIES FOLDER ${TESTMODULE_FOLDER} )
diff --git a/test_conformance/test_module/concerto.mak b/test_conformance/test_module/concerto.mak
new file mode 100644
index 0000000..62831cd
--- /dev/null
+++ b/test_conformance/test_module/concerto.mak
@@ -0,0 +1,34 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+_MODULE     := test-testmodule-lib
+include $(PRELUDE)
+TARGET      := test-testmodule-lib
+TARGETTYPE  := library
+CSOURCES    := vx_testmodule_lib.c
+SHARED_LIBS := openvx
+include $(FINALE)
+
+_MODULE     := test-testmodule
+include $(PRELUDE)
+TARGET      := test-testmodule
+TARGETTYPE  := dsmo
+DEFFILE     := testmodule.def
+CSOURCES    := vx_testmodule_module.c
+SHARED_LIBS := openvx
+include $(FINALE)
diff --git a/test_conformance/test_module/testmodule.def b/test_conformance/test_module/testmodule.def
new file mode 100644
index 0000000..6c63f2c
--- /dev/null
+++ b/test_conformance/test_module/testmodule.def
@@ -0,0 +1,5 @@
+LIBRARY "test-testmodule.dll"
+VERSION 1.0
+EXPORTS
+    vxPublishKernels
+    vxUnpublishKernels
diff --git a/test_conformance/test_module/vx_lib_testmodule.h b/test_conformance/test_module/vx_lib_testmodule.h
new file mode 100644
index 0000000..31f3d04
--- /dev/null
+++ b/test_conformance/test_module/vx_lib_testmodule.h
@@ -0,0 +1,109 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+#ifndef _OPENVX_EXT_TESTMODULE_H_
+#define _OPENVX_EXT_TESTMODULE_H_
+
+/*!
+ * \file
+ * \brief Module with test kernel for use in tests.
+ *
+ * \defgroup group_testmodule_lib The module with test kernel for use in tests
+ *
+ */
+
+#include <VX/vx.h>
+
+/*!
+ * \file vx_lib_testmodule.h
+ * \brief The header for test kernel module
+ */
+
+/*! \brief The TestModule Data area in bytes
+ * \ingroup group_testmodule_lib
+ */
+#define TESTMODULE_DATA_AREA (1024)
+
+/*! \brief The required number of items in the temp array
+ * \ingroup group_testmodule_lib
+ */
+#define TESTMODULE_TEMP_NUMITEMS (374)
+
+/*! \brief The minimum value of the scalar for the TestModule Kernel.
+ * \ingroup group_testmodule_lib
+ */
+#define TESTMODULE_VALUE_MIN   (-10)
+
+/*! \brief The maximum value of the scalar for the TestModule Kernel.
+ * \ingroup group_testmodule_lib
+ */
+#define TESTMODULE_VALUE_MAX  (10)
+
+//! [KERNEL ENUM]
+#define VX_KERNEL_NAME_KHR_TESTMODULE "org.khronos.test.testmodule"
+/*! \brief The TESTMODULE Example Library Set
+ * \ingroup group_testmodule_lib
+ */
+#define VX_LIBRARY_TESTMODULE (0x4) // assigned from Khronos, vendors control their own
+
+/*! \brief The list of TestModule Kernels.
+ * \ingroup group_testmodule_lib
+ */
+enum vx_kernel_testmodule_ext_e {
+    /*! \brief The Example User Defined Kernel */
+    VX_KERNEL_KHR_TESTMODULE = VX_KERNEL_BASE(VX_ID_DEFAULT, VX_LIBRARY_TESTMODULE) + 0x0,
+    // up to 0xFFF kernel enums can be created.
+};
+//! [KERNEL ENUM]
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//! [node]
+/*! \brief [Graph] This is an example ISV or OEM provided node which executes
+ * in the Graph to call the TestModule Kernel.
+ * \param [in] graph The handle to the graph in which to instantiate the node.
+ * \param [in] input The input image.
+ * \param [in] value The input scalar value
+ * \param [out] output The output image.
+ * \param [in,out] temp A temp array for some data which is needed for
+ * every iteration.
+ * \ingroup group_example_kernel
+ */
+vx_node vxTestModuleNode(vx_graph graph, vx_image input, vx_uint32 value, vx_image output, vx_array temp);
+//! [node]
+
+//! [vxu]
+/*! \brief [Immediate] This is an example of an immediate mode version of the TESTMODULE node.
+ * \param [in] context The overall context of the implementation.
+ * \param [in] input The input image.
+ * \param [in] value The input scalar value
+ * \param [out] output The output image.
+ * \param [in,out] temp A temp array for some data which is needed for
+ * every iteration.
+ * \ingroup group_example_kernel
+ */
+vx_status vxuTestModule(vx_context context, vx_image input, vx_uint32 value, vx_image output, vx_array temp);
+//! [vxu]
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/test_conformance/test_module/vx_testmodule_lib.c b/test_conformance/test_module/vx_testmodule_lib.c
new file mode 100644
index 0000000..1858813
--- /dev/null
+++ b/test_conformance/test_module/vx_testmodule_lib.c
@@ -0,0 +1,96 @@
+/*
+
+ * Copyright (c) 2013-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+
+#include "vx_lib_testmodule.h"
+
+#define dimof(x) (sizeof(x)/sizeof(x[0]))
+
+//! [node]
+vx_node vxTestModuleNode(vx_graph graph, vx_image input, vx_uint32 value, vx_image output, vx_array temp)
+{
+    vx_uint32 i;
+    vx_node node = 0;
+    vx_context context = vxGetContext((vx_reference)graph);
+    vx_status status = vxLoadKernels(context, "test");
+    if (status == VX_SUCCESS)
+    {
+        //! [test node]
+        vx_kernel kernel = vxGetKernelByName(context, VX_KERNEL_NAME_KHR_TESTMODULE);
+        if (kernel)
+        {
+            node = vxCreateGenericNode(graph, kernel);
+            if (vxGetStatus((vx_reference)node) == VX_SUCCESS)
+            {
+                vx_status statuses[4];
+                vx_scalar scalar = vxCreateScalar(context, VX_TYPE_INT32, &value);
+                statuses[0] = vxSetParameterByIndex(node, 0, (vx_reference)input);
+                statuses[1] = vxSetParameterByIndex(node, 1, (vx_reference)scalar);
+                statuses[2] = vxSetParameterByIndex(node, 2, (vx_reference)output);
+                statuses[3] = vxSetParameterByIndex(node, 3, (vx_reference)temp);
+                vxReleaseScalar(&scalar);
+                for (i = 0; i < dimof(statuses); i++)
+                {
+                    if (statuses[i] != VX_SUCCESS)
+                    {
+                        status = VX_ERROR_INVALID_PARAMETERS;
+                        vxReleaseNode(&node);
+                        vxReleaseKernel(&kernel);
+                        node = 0;
+                        kernel = 0;
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                vxReleaseKernel(&kernel);
+            }
+        }
+        else
+        {
+            vxUnloadKernels(context, "test");
+        }
+        //! [test node]
+    }
+    return node;
+}
+//! [node]
+
+//! [vxu]
+vx_status vxuTestModule(vx_context context, vx_image input, vx_uint32 value, vx_image output, vx_array temp)
+{
+    vx_status status = VX_FAILURE;
+    vx_graph graph = vxCreateGraph(context);
+    if (vxGetStatus((vx_reference)graph) == VX_SUCCESS)
+    {
+        vx_node node = vxTestModuleNode(graph, input, value, output, temp);
+        if (node)
+        {
+            status = vxVerifyGraph(graph);
+            if (status == VX_SUCCESS)
+            {
+                status = vxProcessGraph(graph);
+            }
+            vxReleaseNode(&node);
+        }
+        vxReleaseGraph(&graph);
+    }
+    return status;
+}
+//! [vxu]
diff --git a/test_conformance/test_module/vx_testmodule_module.c b/test_conformance/test_module/vx_testmodule_module.c
new file mode 100644
index 0000000..ca8e0de
--- /dev/null
+++ b/test_conformance/test_module/vx_testmodule_module.c
@@ -0,0 +1,281 @@
+/*
+
+ * Copyright (c) 2013-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+
+#include "vx_lib_testmodule.h"
+
+/*! An internal definition of the order of the parameters to the function.
+ * This list must match the parameter list in the function and in the
+ * publish kernel list.
+ * \ingroup group_testmodule_kernel
+ */
+typedef enum _test_params_e {
+    TESTMODULE_PARAM_INPUT = 0,
+    TESTMODULE_PARAM_VALUE,
+    TESTMODULE_PARAM_OUTPUT,
+    TESTMODULE_PARAM_TEMP
+} test_params_e;
+
+/*! \brief An example parameter validator.
+ * \param [in] node The handle to the node.
+ * \param [in] parameters The array of parameters to be validated.
+ * \param [in] num Number of parameters to be validated.
+ * \param [out] metas The array of metadata used to check output parameters only.
+ * \return A \ref vx_status_e enumeration.
+ * \ingroup group_testmodule_kernel
+ */
+vx_status VX_CALLBACK TestModuleValidator(vx_node node, const vx_reference parameters[], vx_uint32 num, vx_meta_format metas[])
+{
+    vx_uint32 i;
+
+    if (num != (TESTMODULE_PARAM_TEMP + 1))
+        return VX_ERROR_INVALID_PARAMETERS;
+
+    for (i = 0u; i < num; i++)
+    {
+        if (!parameters[i])
+            return VX_ERROR_INVALID_REFERENCE;
+
+        switch (i)
+        {
+            case TESTMODULE_PARAM_INPUT:
+            {
+                vx_df_image df_image = 0;
+
+                if (vxQueryImage((vx_image)parameters[i], VX_IMAGE_FORMAT, &df_image, sizeof(df_image)) != VX_SUCCESS)
+                    return VX_ERROR_INVALID_PARAMETERS;
+
+                if (df_image != VX_DF_IMAGE_U8)
+                    return VX_ERROR_INVALID_VALUE;
+
+            }   break;
+            case TESTMODULE_PARAM_VALUE:
+            {
+                vx_enum type = 0;
+                vx_int32 value = 0;
+
+                if (vxQueryScalar((vx_scalar)parameters[i], VX_SCALAR_TYPE, &type, sizeof(type)) != VX_SUCCESS)
+                    return VX_ERROR_INVALID_PARAMETERS;
+
+                if (type != VX_TYPE_INT32 ||
+                    vxCopyScalar((vx_scalar)parameters[i], &value, VX_READ_ONLY, VX_MEMORY_TYPE_HOST) != VX_SUCCESS)
+                    return VX_ERROR_INVALID_PARAMETERS;
+
+                if (TESTMODULE_VALUE_MIN >= value || value >= TESTMODULE_VALUE_MAX)
+                    return VX_ERROR_INVALID_VALUE;
+
+            }   break;
+            case TESTMODULE_PARAM_OUTPUT:
+            {
+                vx_image input = (vx_image)parameters[TESTMODULE_PARAM_INPUT];
+                vx_uint32 width = 0, height = 0;
+                vx_df_image format = VX_DF_IMAGE_VIRT;
+
+                if (!metas[i])
+                    return VX_ERROR_INVALID_REFERENCE;
+
+                if (vxQueryImage(input, VX_IMAGE_FORMAT, &format, sizeof(format)) != VX_SUCCESS ||
+                    vxQueryImage(input, VX_IMAGE_WIDTH, &width, sizeof(width)) != VX_SUCCESS ||
+                    vxQueryImage(input, VX_IMAGE_HEIGHT, &height, sizeof(height)) != VX_SUCCESS)
+                    return VX_ERROR_INVALID_PARAMETERS;
+
+                if (vxSetMetaFormatAttribute(metas[i], VX_IMAGE_WIDTH, &width, sizeof(width)) != VX_SUCCESS ||
+                    vxSetMetaFormatAttribute(metas[i], VX_IMAGE_HEIGHT, &height, sizeof(height)) != VX_SUCCESS ||
+                    vxSetMetaFormatAttribute(metas[i], VX_IMAGE_FORMAT, &format, sizeof(format)))
+                    return VX_ERROR_INVALID_VALUE;
+
+            }   break;
+            case TESTMODULE_PARAM_TEMP:
+            {
+                vx_size num_items = 0;
+
+                if (vxQueryArray((vx_array)parameters[i], VX_ARRAY_NUMITEMS, &num_items, sizeof(num_items)) != VX_SUCCESS)
+                    return VX_ERROR_INVALID_PARAMETERS;
+
+                if (num_items < TESTMODULE_TEMP_NUMITEMS)
+                    return VX_ERROR_INVALID_DIMENSION;
+
+            }   break;
+            default:
+                return VX_ERROR_INVALID_PARAMETERS;
+        }
+    }
+
+    return VX_SUCCESS;
+}
+
+/*!
+ * \brief The private kernel function for TestModule.
+ * \note This is not called directly by users.
+ * \param [in] node The handle to the node this kernel is instanced into.
+ * \param [in] parameters The array of \ref vx_reference references.
+ * \param [in] num The number of parameters in the array.
+ * functions.
+ * \return A \ref vx_status_e enumeration.
+ * \retval VX_SUCCESS Successful return.
+ * \retval VX_ERROR_INVALID_PARAMETER The input or output image were
+ * of the incorrect dimensions.
+ * \ingroup group_testmodule_kernel
+ */
+vx_status VX_CALLBACK TestModuleKernel(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    vx_status status = VX_ERROR_INVALID_PARAMETERS;
+    if (num == 4)
+    {
+        vx_image input  = (vx_image)parameters[0];
+        vx_scalar scalar = (vx_scalar)parameters[1];
+        vx_image output = (vx_image)parameters[2];
+        vx_array temp  = (vx_array)parameters[3];
+        void *buf, *in = NULL, *out = NULL;
+        vx_uint32 y, x;
+        vx_int32 value = 0;
+        vx_imagepatch_addressing_t addr1, addr2;
+        vx_rectangle_t rect;
+        vx_enum item_type = VX_TYPE_INVALID;
+        vx_size num_items = 0, capacity = 0;
+        vx_size stride = 0;
+        vx_map_id map_id_input, map_id_output, map_id_array;
+
+        status = VX_SUCCESS;
+
+        status |= vxCopyScalar(scalar, &value, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+        status |= vxGetValidRegionImage(input, &rect);
+        status |= vxMapImagePatch(input, &rect, 0, &map_id_input, &addr1, &in, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);
+        status |= vxMapImagePatch(output, &rect, 0, &map_id_output, &addr2, &out, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);
+        status |= vxQueryArray(temp, VX_ARRAY_ITEMTYPE, &item_type, sizeof(item_type));
+        status |= vxQueryArray(temp, VX_ARRAY_NUMITEMS, &num_items, sizeof(num_items));
+        status |= vxQueryArray(temp, VX_ARRAY_CAPACITY, &capacity, sizeof(capacity));
+        status |= vxMapArrayRange(temp, 0, num_items, &map_id_array, &stride, &buf, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+        for (y = 0; y < addr1.dim_y; y+=addr1.step_y)
+        {
+            for (x = 0; x < addr1.dim_x; x+=addr1.step_x)
+            {
+                // do some operation...
+            }
+        }
+        status |= vxUnmapArrayRange(temp, map_id_array);
+        status |= vxUnmapImagePatch(output, map_id_output);
+        status |= vxUnmapImagePatch(input, map_id_input);
+    }
+    return status;
+}
+
+/*! \brief An initializer function.
+ * \param [in] node The handle to the node this kernel is instanced into.
+ * \param [in] parameters The array of \ref vx_reference references.
+ * \param [in] num The number of parameters in the array.
+ * functions.
+ * \return A \ref vx_status_e enumeration.
+ * \retval VX_SUCCESS Successful return.
+ * \retval VX_ERROR_INVALID_PARAMETER The input or output image were
+ * of the incorrect dimensions.
+ * \ingroup group_testmodule_kernel
+ */
+vx_status VX_CALLBACK TestModuleInitialize(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    /* TestModule requires no initialization of memory or resources */
+    return VX_SUCCESS;
+}
+
+/*! \brief A deinitializer function.
+ * \param [in] node The handle to the node this kernel is instanced into.
+ * \param [in] parameters The array of \ref vx_reference references.
+ * \param [in] num The number of parameters in the array.
+ * functions.
+ * \return A \ref vx_status_e enumeration.
+ * \retval VX_SUCCESS Successful return.
+ * \retval VX_ERROR_INVALID_PARAMETER The input or output image were
+ * of the incorrect dimensions.
+ * \ingroup group_testmodule_kernel
+ */
+vx_status VX_CALLBACK TestModuleDeinitialize(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    /* TestModule requires no de-initialization of memory or resources */
+    return VX_SUCCESS;
+}
+
+//**********************************************************************
+//  PUBLIC FUNCTION
+//**********************************************************************
+
+/*! \brief The entry point into this module to add the extensions to OpenVX.
+ * \param [in] context The handle to the implementation context.
+ * \return A \ref vx_status_e enumeration. Returns errors if some or all kernels were not added
+ * correctly.
+ * \note This follows the function pointer definition of a \ref vx_publish_kernels_f
+ * and uses the predefined name for the entry point, "vxPublishKernels".
+ * \ingroup group_testmodule_kernel
+ */
+/*VX_API_ENTRY*/ vx_status VX_API_CALL vxPublishKernels(vx_context context)
+{
+    vx_status status = VX_SUCCESS;
+    vx_kernel kernel = vxAddUserKernel(context,
+                                    "org.khronos.test.testmodule",
+                                    VX_KERNEL_KHR_TESTMODULE,
+                                    TestModuleKernel,
+                                    4,
+                                    TestModuleValidator,
+                                    TestModuleInitialize,
+                                    TestModuleDeinitialize);
+    if (kernel)
+    {
+        vx_size size = TESTMODULE_DATA_AREA;
+        status = vxAddParameterToKernel(kernel, 0, VX_INPUT, VX_TYPE_IMAGE, VX_PARAMETER_STATE_REQUIRED);
+        if (status != VX_SUCCESS) goto exit;
+        status = vxAddParameterToKernel(kernel, 1, VX_INPUT, VX_TYPE_SCALAR, VX_PARAMETER_STATE_REQUIRED);
+        if (status != VX_SUCCESS) goto exit;
+        status = vxAddParameterToKernel(kernel, 2, VX_OUTPUT, VX_TYPE_IMAGE, VX_PARAMETER_STATE_REQUIRED);
+        if (status != VX_SUCCESS) goto exit;
+        status = vxAddParameterToKernel(kernel, 3, VX_OUTPUT, VX_TYPE_ARRAY, VX_PARAMETER_STATE_REQUIRED);
+        if (status != VX_SUCCESS) goto exit;
+        status = vxSetKernelAttribute(kernel, VX_KERNEL_LOCAL_DATA_SIZE, &size, sizeof(size));
+        if (status != VX_SUCCESS) goto exit;
+        status = vxFinalizeKernel(kernel);
+        if (status != VX_SUCCESS) goto exit;
+    }
+exit:
+    if (status != VX_SUCCESS) {
+        vxRemoveKernel(kernel);
+    }
+    return status;
+}
+
+/*! \brief The destructor to remove a user loaded module from OpenVX.
+ * \param [in] context The handle to the implementation context.
+ * \return A \ref vx_status_e enumeration. Returns errors if some or all kernels were not added
+ * correctly.
+ * \note This follows the function pointer definition of a \ref vx_unpublish_kernels_f
+ * and uses the predefined name for the entry point, "vxUnpublishKernels".
+ * \ingroup group_testmodule_kernel
+ */
+/*VX_API_ENTRY*/ vx_status VX_API_CALL vxUnpublishKernels(vx_context context)
+{
+    vx_status status = VX_SUCCESS;
+    vx_kernel kernel = vxGetKernelByName(context, "org.khronos.test.testmodule");
+    vx_kernel kernelcpy = kernel;
+
+    if (kernel)
+    {
+        status = vxReleaseKernel(&kernelcpy);
+        if (status == VX_SUCCESS)
+        {
+            status = vxRemoveKernel(kernel);
+        }
+    }
+    return status;
+}
diff --git a/test_conformance/test_multiply.c b/test_conformance/test_multiply.c
new file mode 100644
index 0000000..16f74bc
--- /dev/null
+++ b/test_conformance/test_multiply.c
@@ -0,0 +1,506 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include <math.h>
+
+#ifdef _MSC_VER
+#define ONE_255 (1.0f/255)
+#else
+#define ONE_255 0x1.010102p-8f
+#endif
+#define ONE_2_0 1.0f
+#define ONE_2_1 (1.0f/(1<<1))
+#define ONE_2_2 (1.0f/(1<<2))
+#define ONE_2_3 (1.0f/(1<<3))
+#define ONE_2_4 (1.0f/(1<<4))
+#define ONE_2_5 (1.0f/(1<<5))
+#define ONE_2_6 (1.0f/(1<<6))
+#define ONE_2_7 (1.0f/(1<<7))
+#define ONE_2_8 (1.0f/(1<<8))
+#define ONE_2_9 (1.0f/(1<<9))
+#define ONE_2_10 (1.0f/(1<<10))
+#define ONE_2_11 (1.0f/(1<<11))
+#define ONE_2_12 (1.0f/(1<<12))
+#define ONE_2_13 (1.0f/(1<<13))
+#define ONE_2_14 (1.0f/(1<<14))
+#define ONE_2_15 (1.0f/(1<<15))
+
+#define ONE_255_STR "(1/255)"
+#define ONE_2_0_STR "(1/2^0)"
+#define ONE_2_1_STR "(1/2^1)"
+#define ONE_2_2_STR "(1/2^2)"
+#define ONE_2_3_STR "(1/2^3)"
+#define ONE_2_4_STR "(1/2^4)"
+#define ONE_2_5_STR "(1/2^5)"
+#define ONE_2_6_STR "(1/2^6)"
+#define ONE_2_7_STR "(1/2^7)"
+#define ONE_2_8_STR "(1/2^8)"
+#define ONE_2_9_STR "(1/2^9)"
+#define ONE_2_10_STR "(1/2^10)"
+#define ONE_2_11_STR "(1/2^11)"
+#define ONE_2_12_STR "(1/2^12)"
+#define ONE_2_13_STR "(1/2^13)"
+#define ONE_2_14_STR "(1/2^14)"
+#define ONE_2_15_STR "(1/2^15)"
+
+//#define CT_EXECUTE_ASYNC
+
+static void referenceMultiply(CT_Image src0, CT_Image src1, CT_Image dst, CT_Image dst_plus_1, vx_float32 scale, enum vx_convert_policy_e policy)
+{
+    int32_t min_bound, max_bound;
+    uint32_t i, j;
+
+    ASSERT(src0 && src1 && dst && dst_plus_1);
+    ASSERT(src0->width  == src1->width  && src0->width  == dst->width  && src0->width  == dst_plus_1->width);
+    ASSERT(src0->height == src1->height && src0->height == dst->height && src0->height == dst_plus_1->height);
+    ASSERT(dst->format == dst_plus_1->format);
+
+    switch (policy)
+    {
+        case VX_CONVERT_POLICY_SATURATE:
+            if (dst->format == VX_DF_IMAGE_U8)
+            {
+                min_bound = 0;
+                max_bound = 255;
+            }
+            else if (dst->format == VX_DF_IMAGE_S16)
+            {
+                min_bound = -32768;
+                max_bound =  32767;
+            }
+            else
+                FAIL("Unsupported result format: (%.4s)", &dst->format);
+            break;
+        case VX_CONVERT_POLICY_WRAP:
+            min_bound = INT32_MIN;
+            max_bound = INT32_MAX;
+            break;
+        default: FAIL("Unknown owerflow policy"); break;
+    };
+
+#define MULTIPLY_LOOP(s0, s1, r)                                                                                \
+    do{                                                                                                         \
+        for (i = 0; i < dst->height; ++i)                                                                       \
+            for (j = 0; j < dst->width; ++j)                                                                    \
+            {                                                                                                   \
+                int32_t val0 = src0->data.s0[i * src0->stride + j];                                             \
+                int32_t val1 = src1->data.s1[i * src1->stride + j];                                             \
+                /* use double precision because in S16*S16 case (val0*val1) can be not representable as float */\
+                int32_t res0 = (int32_t)floor(((double)(val0 * val1)) * scale);                                 \
+                int32_t res1 = res0 + 1;                                                                        \
+                dst->data.r[i * dst->stride + j] = (res0 < min_bound ? min_bound :                              \
+                                                                        (res0 > max_bound ? max_bound : res0)); \
+                dst_plus_1->data.r[i * dst_plus_1->stride + j] = (res1 < min_bound ? min_bound :                \
+                                                                        (res1 > max_bound ? max_bound : res1)); \
+            }                                                                                                   \
+    }while(0)
+
+    if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_U8)
+        MULTIPLY_LOOP(y, y, y);
+    else if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16)
+        MULTIPLY_LOOP(y, y, s16);
+    else if (src0->format == VX_DF_IMAGE_U8 && src1->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_S16)
+        MULTIPLY_LOOP(y, s16, s16);
+    else if (src0->format == VX_DF_IMAGE_S16 && src1->format == VX_DF_IMAGE_U8 && dst->format == VX_DF_IMAGE_S16)
+        MULTIPLY_LOOP(s16, y, s16);
+    else if (src0->format == VX_DF_IMAGE_S16 && src1->format == VX_DF_IMAGE_S16 && dst->format == VX_DF_IMAGE_S16)
+        MULTIPLY_LOOP(s16, s16, s16);
+    else
+        FAIL("Unsupported combination of argument formats: %.4s + %.4s = %.4s", &src0->format, &src1->format, &dst->format);
+
+#undef MULTIPLY_LOOP
+}
+
+typedef struct {
+    const char* name;
+    enum vx_convert_policy_e overflow_policy;
+    int width, height;
+    vx_df_image arg1_format, arg2_format, result_format;
+    enum vx_round_policy_e round_policy;
+    vx_float32 scale;
+} formats_arg, fuzzy_arg;
+
+#define FORMATS_ARG(owp, f1, f2, fr, rp, scale)                 \
+    ARG(#owp "/" #rp " " #f1 "*" #f2 "*" scale##_STR "=" #fr,   \
+        VX_CONVERT_POLICY_##owp, 0, 0, VX_DF_IMAGE_##f1, VX_DF_IMAGE_##f2, VX_DF_IMAGE_##fr, VX_ROUND_POLICY_##rp, scale)
+
+#define FUZZY_ARG(owp, w, h, f1, f2, fr, rp, scale)                         \
+    ARG(#owp "/" #rp " " #w "x" #h " " #f1 "*" #f2 "*" scale##_STR "=" #fr, \
+        VX_CONVERT_POLICY_##owp, w, h, VX_DF_IMAGE_##f1, VX_DF_IMAGE_##f2, VX_DF_IMAGE_##fr, VX_ROUND_POLICY_##rp, scale)
+
+#define APPEND_SCALE(macro, ...)                                \
+    CT_EXPAND(macro(__VA_ARGS__, TO_NEAREST_EVEN, ONE_255)),    \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_0)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_1)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_2)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_3)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_4)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_5)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_6)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_7)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_8)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_9)),            \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_10)),           \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_11)),           \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_12)),           \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_13)),           \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_14)),           \
+    CT_EXPAND(macro(__VA_ARGS__, TO_ZERO, ONE_2_15))
+
+#define MUL_INVALID_FORMATS(owp)                    \
+    APPEND_SCALE(FORMATS_ARG, owp, S16, S16, U8),   \
+    APPEND_SCALE(FORMATS_ARG, owp, S16, U8,  U8),   \
+    APPEND_SCALE(FORMATS_ARG, owp, U8,  S16, U8)
+
+#define MUL_INFERENCE_FORMATS(opw)                  \
+    APPEND_SCALE(FORMATS_ARG, opw, S16, S16, S16),  \
+    APPEND_SCALE(FORMATS_ARG, opw, S16, U8,  S16),  \
+    APPEND_SCALE(FORMATS_ARG, opw, U8,  S16, S16),  \
+    APPEND_SCALE(FORMATS_ARG, opw, U8,  U8,  S16)
+
+#define MUL_VALID_FORMATS(opw) MUL_INFERENCE_FORMATS(opw), APPEND_SCALE(FORMATS_ARG, opw, U8, U8, U8)
+
+#define MUL_FUZZY_ARGS(owp)                                 \
+    APPEND_SCALE(FUZZY_ARG, owp, 640, 480, U8, U8, U8),     \
+    APPEND_SCALE(FUZZY_ARG, owp, 640, 480, U8, U8, S16),    \
+    APPEND_SCALE(FUZZY_ARG, owp, 640, 480, U8, S16, S16),   \
+    APPEND_SCALE(FUZZY_ARG, owp, 640, 480, S16, U8, S16),   \
+    APPEND_SCALE(FUZZY_ARG, owp, 640, 480, S16, S16, S16),  \
+                                                            \
+    ARG_EXTENDED_BEGIN(),                                   \
+    APPEND_SCALE(FUZZY_ARG, owp, 15, 15, U8, U8, U8),       \
+    APPEND_SCALE(FUZZY_ARG, owp, 15, 15, U8, U8, S16),      \
+    APPEND_SCALE(FUZZY_ARG, owp, 15, 15, U8, S16, S16),     \
+    APPEND_SCALE(FUZZY_ARG, owp, 15, 15, S16, U8, S16),     \
+    APPEND_SCALE(FUZZY_ARG, owp, 15, 15, S16, S16, S16),    \
+                                                            \
+    APPEND_SCALE(FUZZY_ARG, owp, 1280, 720, U8, U8, U8),    \
+    APPEND_SCALE(FUZZY_ARG, owp, 1280, 720, U8, U8, S16),   \
+    APPEND_SCALE(FUZZY_ARG, owp, 1280, 720, U8, S16, S16),  \
+    APPEND_SCALE(FUZZY_ARG, owp, 1280, 720, S16, U8, S16),  \
+    APPEND_SCALE(FUZZY_ARG, owp, 1280, 720, S16, S16, S16), \
+    ARG_EXTENDED_END()
+
+TESTCASE(vxuMultiply, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxMultiply,  CT_VXContext, ct_setup_vx_context, 0)
+
+TEST_WITH_ARG(vxuMultiply, testNegativeFormat, formats_arg, MUL_INVALID_FORMATS(SATURATE), MUL_INVALID_FORMATS(WRAP))
+{
+    vx_image src1, src2, dst;
+    vx_float32 scale_val = arg_->scale;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, 32, 32, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, 32, 32, arg_->arg2_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    // The output image can be VX_DF_IMAGE_U8 only if both source images are
+    // VX_DF_IMAGE_U8 and the output image is explicitly set to VX_DF_IMAGE_U8. It is
+    // otherwise VX_DF_IMAGE_S16.
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxuMultiply(context, src1, src2, scale_val, arg_->overflow_policy, arg_->round_policy, dst));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+}
+
+TEST_WITH_ARG(vxMultiply, testNegativeFormat, formats_arg, MUL_INVALID_FORMATS(SATURATE), MUL_INVALID_FORMATS(WRAP))
+{
+    vx_image src1, src2, dst;
+    vx_graph graph;
+    vx_scalar scale;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(src1  = vxCreateImage(context, 32, 32, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2  = vxCreateImage(context, 32, 32, arg_->arg2_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(scale = vxCreateScalar(context, VX_TYPE_FLOAT32, &arg_->scale),   VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(vxMultiplyNode(graph, src1, src2, scale, arg_->overflow_policy, arg_->round_policy, dst), VX_TYPE_NODE);
+
+    // The output image can be VX_DF_IMAGE_U8 only if both source images are
+    // VX_DF_IMAGE_U8 and the output image is explicitly set to VX_DF_IMAGE_U8. It is
+    // otherwise VX_DF_IMAGE_S16.
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseScalar(&scale));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TEST_WITH_ARG(vxuMultiply, testNegativeSizes, formats_arg, MUL_VALID_FORMATS(SATURATE), MUL_VALID_FORMATS(WRAP))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_float32 scale_val = arg_->scale;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, arg_->arg2_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, arg_->arg2_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, arg_->result_format), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1_64x64, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x32, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2_32x64, &CT()->seed_));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuMultiply(context, src1_32x32, src2_32x32, scale_val, arg_->overflow_policy, arg_->round_policy, dst88x16));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuMultiply(context, src1_32x32, src2_32x64, scale_val, arg_->overflow_policy, arg_->round_policy, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuMultiply(context, src1_64x64, src2_32x32, scale_val, arg_->overflow_policy, arg_->round_policy, dst32x32));
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuMultiply(context, src1_64x64, src2_32x64, scale_val, arg_->overflow_policy, arg_->round_policy, dst32x32));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+}
+
+TEST_WITH_ARG(vxMultiply, testNegativeSizes, formats_arg, MUL_VALID_FORMATS(SATURATE), MUL_VALID_FORMATS(WRAP))
+{
+    vx_image src1_32x32, src1_64x64, src2_32x32, src2_32x64, dst32x32, dst88x16;
+    vx_graph graph1, graph2, graph3, graph4;
+    vx_scalar scale;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1_32x32 = vxCreateImage(context, 32, 32, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src1_64x64 = vxCreateImage(context, 64, 64, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x32 = vxCreateImage(context, 32, 32, arg_->arg2_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2_32x64 = vxCreateImage(context, 32, 64, arg_->arg2_format), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst32x32 = vxCreateImage(context, 32, 32, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(scale = vxCreateScalar(context, VX_TYPE_FLOAT32, &arg_->scale), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph1 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(vxMultiplyNode(graph1, src1_32x32, src2_32x32, scale, arg_->overflow_policy, arg_->round_policy, dst88x16), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph1));
+
+    ASSERT_VX_OBJECT(graph2 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(vxMultiplyNode(graph2, src1_32x32, src2_32x64, scale, arg_->overflow_policy, arg_->round_policy, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph2));
+
+    ASSERT_VX_OBJECT(graph3 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(vxMultiplyNode(graph3, src1_64x64, src2_32x32, scale, arg_->overflow_policy, arg_->round_policy, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph3));
+
+    ASSERT_VX_OBJECT(graph4 = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(vxMultiplyNode(graph4, src1_64x64, src2_32x64, scale, arg_->overflow_policy, arg_->round_policy, dst32x32), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph4));
+
+    VX_CALL(vxReleaseImage(&src1_32x32));
+    VX_CALL(vxReleaseImage(&src2_32x32));
+    VX_CALL(vxReleaseImage(&src1_64x64));
+    VX_CALL(vxReleaseImage(&src2_32x64));
+    VX_CALL(vxReleaseImage(&dst32x32));
+    VX_CALL(vxReleaseImage(&dst88x16));
+    VX_CALL(vxReleaseScalar(&scale));
+    VX_CALL(vxReleaseGraph(&graph1));
+    VX_CALL(vxReleaseGraph(&graph2));
+    VX_CALL(vxReleaseGraph(&graph3));
+    VX_CALL(vxReleaseGraph(&graph4));
+}
+
+static vx_image inference_image;
+static vx_enum  inference_image_format;
+static vx_action VX_CALLBACK inference_image_test(vx_node node)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = 0;
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_WIDTH,   &width,   sizeof(width)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_FORMAT,  &format,  sizeof(format)));
+
+    EXPECT_EQ_INT(640, width);
+    EXPECT_EQ_INT(480, height);
+    EXPECT_EQ_INT(inference_image_format, format);
+
+    return VX_ACTION_CONTINUE;
+}
+
+TEST_WITH_ARG(vxMultiply, testInference, formats_arg, MUL_INFERENCE_FORMATS(SATURATE), MUL_INFERENCE_FORMATS(WRAP))
+{
+    vx_image src1, src2, dst, gr;
+    vx_graph graph;
+    vx_scalar scale;
+    vx_node n, tmp;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(src1  = vxCreateImage(context, 640, 480, arg_->arg1_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2  = vxCreateImage(context, 640, 480, arg_->arg2_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst   = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(scale = vxCreateScalar(context, VX_TYPE_FLOAT32, &arg_->scale), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(n     = vxMultiplyNode(graph, src1, src2, scale, arg_->overflow_policy, arg_->round_policy, dst), VX_TYPE_NODE);
+
+    // grounding
+    ASSERT_VX_OBJECT(gr    = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(tmp   = vxAddNode(graph, dst, src2, VX_CONVERT_POLICY_WRAP, gr), VX_TYPE_NODE);
+
+    // test
+    inference_image = dst;
+    inference_image_format = arg_->result_format;
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxAssignNodeCallback(n, inference_image_test));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&n));
+    VX_CALL(vxReleaseNode(&tmp));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&gr));
+    VX_CALL(vxReleaseScalar(&scale));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TEST_WITH_ARG(vxuMultiply, testFuzzy, fuzzy_arg, MUL_FUZZY_ARGS(SATURATE), MUL_FUZZY_ARGS(WRAP))
+{
+    vx_image src1, src2, dst;
+    vx_float32 scale_val = arg_->scale;
+    CT_Image ref1, ref2, refdst, refdst_plus_1, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg2_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, arg_->width, arg_->height, arg_->result_format), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuMultiply(context, src1, src2, scale_val, arg_->overflow_policy, arg_->round_policy, dst));
+
+    ASSERT_NO_FAILURE({
+        ref1  = ct_image_from_vx_image(src1);
+        ref2  = ct_image_from_vx_image(src2);
+        vxdst = ct_image_from_vx_image(dst);
+        refdst        = ct_allocate_image(arg_->width, arg_->height, arg_->result_format);
+        refdst_plus_1 = ct_allocate_image(arg_->width, arg_->height, arg_->result_format);
+
+        referenceMultiply(ref1, ref2, refdst, refdst_plus_1, arg_->scale, arg_->overflow_policy);
+    });
+
+    if (arg_->scale == ONE_2_0)
+        ASSERT_EQ_CTIMAGE(refdst, vxdst);
+    else
+    {
+        // (|ref-v| <= 1 && |ref+1-v| <= 1)  is equivalent to (v == ref || v == ref + 1)
+        if (arg_->overflow_policy == VX_CONVERT_POLICY_WRAP)
+        {
+            EXPECT_CTIMAGE_NEARWRAP(refdst, vxdst, 1, CTIMAGE_ALLOW_WRAP);
+            EXPECT_CTIMAGE_NEARWRAP(refdst_plus_1, vxdst, 1, CTIMAGE_ALLOW_WRAP);
+        }
+        else
+        {
+            EXPECT_CTIMAGE_NEAR(refdst, vxdst, 1);
+            EXPECT_CTIMAGE_NEAR(refdst_plus_1, vxdst, 1);
+        }
+    }
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src1);
+    EXPECT_EQ_PTR(NULL, src2);
+}
+
+TEST_WITH_ARG(vxMultiply, testFuzzy, fuzzy_arg, MUL_FUZZY_ARGS(SATURATE), MUL_FUZZY_ARGS(WRAP))
+{
+    vx_image src1, src2, dst;
+    vx_graph graph;
+    vx_scalar scale = 0;
+    CT_Image ref1, ref2, refdst, refdst_plus_1, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, arg_->width, arg_->height, arg_->result_format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(scale = vxCreateScalar(context, VX_TYPE_FLOAT32, &arg_->scale), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg1_format),   VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, arg_->width, arg_->height, arg_->arg2_format),   VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(src1, &CT()->seed_));
+    ASSERT_NO_FAILURE(ct_fill_image_random(src2, &CT()->seed_));
+
+    // build one-node graph
+    ASSERT_VX_OBJECT(vxMultiplyNode(graph, src1, src2, scale, arg_->overflow_policy, arg_->round_policy, dst), VX_TYPE_NODE);
+
+    // run graph
+#ifdef CT_EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ASSERT_NO_FAILURE({
+        ref1  = ct_image_from_vx_image(src1);
+        ref2  = ct_image_from_vx_image(src2);
+        vxdst = ct_image_from_vx_image(dst);
+        refdst        = ct_allocate_image(arg_->width, arg_->height, arg_->result_format);
+        refdst_plus_1 = ct_allocate_image(arg_->width, arg_->height, arg_->result_format);
+
+        referenceMultiply(ref1, ref2, refdst, refdst_plus_1, arg_->scale, arg_->overflow_policy);
+    });
+
+    if (arg_->scale == ONE_2_0)
+        ASSERT_EQ_CTIMAGE(refdst, vxdst);
+    else
+    {
+        // (|ref-v| <= 1 && |ref+1-v| <= 1)  is equivalent to (v == ref || v == ref + 1)
+        if (arg_->overflow_policy == VX_CONVERT_POLICY_WRAP)
+        {
+            EXPECT_CTIMAGE_NEARWRAP(refdst, vxdst, 1, CTIMAGE_ALLOW_WRAP);
+            EXPECT_CTIMAGE_NEARWRAP(refdst_plus_1, vxdst, 1, CTIMAGE_ALLOW_WRAP);
+        }
+        else
+        {
+            EXPECT_CTIMAGE_NEAR(refdst, vxdst, 1);
+            EXPECT_CTIMAGE_NEAR(refdst_plus_1, vxdst, 1);
+        }
+    }
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseScalar(&scale));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(vxuMultiply, DISABLED_testNegativeFormat, DISABLED_testNegativeSizes,                testFuzzy)
+TESTCASE_TESTS(vxMultiply,  DISABLED_testNegativeFormat, DISABLED_testNegativeSizes, testInference, testFuzzy)
diff --git a/test_conformance/test_nonlinearfilter.c b/test_conformance/test_nonlinearfilter.c
new file mode 100644
index 0000000..d5ad0cc
--- /dev/null
+++ b/test_conformance/test_nonlinearfilter.c
@@ -0,0 +1,412 @@
+/*
+
+ * Copyright (c) 2016-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+#include "shared_functions.h"
+
+TESTCASE(NonLinearFilter, CT_VXContext, ct_setup_vx_context, 0)
+
+
+#define MASK_SIZE_MAX (5)
+
+#ifndef MIN
+#define MIN(_a,_b) (((_a) < (_b)) ? (_a) : (_b))
+#endif
+#ifndef MAX
+#define MAX(_a,_b) (((_a) > (_b)) ? (_a) : (_b))
+#endif
+
+TEST(NonLinearFilter, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_matrix matrix = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    matrix = vxCreateMatrixFromPattern(context, VX_PATTERN_CROSS, 5, 5);
+    ASSERT_VX_OBJECT(matrix, VX_TYPE_MATRIX);
+
+    ASSERT_VX_OBJECT(node = vxNonLinearFilterNode(graph, VX_NONLINEAR_FILTER_MEDIAN, src_image, matrix, dst_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(matrix == 0);
+    ASSERT(src_image == 0);
+}
+
+static CT_Image generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+        image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static int vx_uint8_compare(const void *p1, const void *p2)
+{
+    vx_uint8 a = *(vx_uint8 *)p1;
+    vx_uint8 b = *(vx_uint8 *)p2;
+    if (a > b)
+        return 1;
+    else if (a == b)
+        return 0;
+    else
+        return -1;
+}
+
+static void filter_calculate(vx_enum function, CT_Image src, vx_coordinates2d_t* origin, vx_int32 cols, vx_int32 rows, vx_uint8* mask, vx_border_t* border, int32_t x, int32_t y, uint8_t *data)
+{
+    vx_uint8 values[MASK_SIZE_MAX * MASK_SIZE_MAX];
+
+    vx_int32 i, j, ci, cj, m = 0, v = 0;
+    vx_int32 cx = origin->x;
+    vx_int32 cy = origin->y;
+
+    for (j = y - cy; j < y - cy + rows; ++j)
+    {
+        for (i = x - cx; i < x - cx + cols; ++i, ++m)
+        {
+            if (mask[m])
+            {
+                ci = MAX(0, MIN(i, (vx_int32)src->width - 1));
+                cj = MAX(0, MIN(j, (vx_int32)src->height - 1));
+
+                values[v++] = (border->mode == VX_BORDER_CONSTANT && (i != ci || j != cj)) ? border->constant_value.U8 : *CT_IMAGE_DATA_PTR_8U(src, ci, cj);
+            }
+        }
+    }
+
+    qsort(values, v, sizeof(vx_uint8), vx_uint8_compare);
+
+    switch (function)
+    {
+    case VX_NONLINEAR_FILTER_MIN: *data = values[0]; break; /* minimal value */
+    case VX_NONLINEAR_FILTER_MAX: *data = values[v - 1]; break; /* maximum value */
+    case VX_NONLINEAR_FILTER_MEDIAN: *data = values[v / 2]; break; /* pick the middle value */
+    }
+}
+
+void filter_create_reference_image(vx_enum function, CT_Image src, vx_coordinates2d_t* origin, vx_size cols, vx_size rows, vx_uint8* mask, CT_Image* pdst, vx_border_t* border)
+{
+    CT_Image dst = NULL;
+
+    CT_ASSERT(src->format == VX_DF_IMAGE_U8);
+
+    dst = ct_allocate_image(src->width, src->height, VX_DF_IMAGE_U8);
+
+    if (border->mode == VX_BORDER_UNDEFINED)
+    {
+        vx_uint32 left = origin->x;
+        vx_uint32 top = origin->y;
+        vx_uint32 right = (vx_uint32)(cols - origin->x - 1);
+        vx_uint32 bottom = (vx_uint32)(rows - origin->y - 1);
+
+        CT_FILL_IMAGE_8U(return, dst,
+            if (x >= left && y >= top && x < src->width - right && y < src->height - bottom)
+                filter_calculate(function, src, origin, (vx_int32)cols, (vx_int32)rows, mask, border, x, y, dst_data);
+        );
+    }
+    else
+    {
+        CT_FILL_IMAGE_8U(return, dst,
+            filter_calculate(function, src, origin, (vx_int32)cols, (vx_int32)rows, mask, border, x, y, dst_data);
+        );
+    }
+
+    *pdst = dst;
+}
+
+static void pattern_check(vx_uint8* mask, vx_size cols, vx_size rows, vx_enum pattern)
+{
+    vx_size x, y;
+
+    ASSERT(pattern != VX_PATTERN_OTHER);
+
+    for (y = 0; y < rows; ++y)
+    {
+        for (x = 0; x < cols; ++x)
+        {
+            vx_uint8 value = mask[x + y * cols];
+            vx_uint8 ref = 0;
+            switch (pattern)
+            {
+            case VX_PATTERN_BOX: ref = 255; break;
+            case VX_PATTERN_CROSS: ref = ((y == rows / 2) || (x == cols / 2)) ? 255 : 0; break;
+            case VX_PATTERN_DISK:
+                ref = (((y - rows / 2.0 + 0.5) * (y - rows / 2.0 + 0.5)) / ((rows / 2.0) * (rows / 2.0)) +
+                    ((x - cols / 2.0 + 0.5) * (x - cols / 2.0 + 0.5)) / ((cols / 2.0) * (cols / 2.0)))
+                    <= 1 ? 255 : 0;
+                break;
+            }
+
+            ASSERT(value == ref);
+        }
+    }
+}
+
+static void filter_check(vx_enum function, CT_Image src, vx_matrix mask, CT_Image dst, vx_border_t* border)
+{
+    CT_Image dst_ref = NULL;
+    ASSERT(src && dst && mask && border);
+
+    vx_size rows, cols;
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_ROWS, &rows, sizeof(rows)));
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_COLUMNS, &cols, sizeof(cols)));
+
+    vx_coordinates2d_t origin;
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_ORIGIN, &origin, sizeof(origin)));
+
+    vx_enum pattern = 0;
+    vx_uint8 m[MASK_SIZE_MAX * MASK_SIZE_MAX];
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_PATTERN, &pattern, sizeof(pattern)));
+    VX_CALL(vxCopyMatrix(mask, m, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    ASSERT_NO_FAILURE(pattern_check(m, cols, rows, pattern));
+
+    ASSERT_NO_FAILURE(filter_create_reference_image(function, src, &origin, cols, rows, m, &dst_ref, border));
+
+    ASSERT_NO_FAILURE(
+    if (border->mode == VX_BORDER_UNDEFINED)
+    {
+        vx_int32 left = origin.x;
+        vx_int32 top = origin.y;
+        vx_int32 right = (vx_int32)(cols - origin.x - 1);
+        vx_int32 bottom = (vx_int32)(rows - origin.y - 1);
+
+        ct_adjust_roi(dst, left, top, right, bottom);
+        ct_adjust_roi(dst_ref, left, top, right, bottom);
+    }
+    );
+
+    EXPECT_EQ_CTIMAGE(dst_ref, dst);
+
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST ===\n");
+        ct_dump_image_info(dst);
+        printf("=== EXPECTED ===\n");
+        ct_dump_image_info(dst_ref);
+    }
+#endif
+}
+
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_size mask_size;
+    vx_enum function;
+    vx_enum pattern;
+    vx_border_t border;
+    int width, height;
+} Filter_Arg;
+
+
+#define ADD_FUNCTIONS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_NONLINEAR_FILTER_MIN", __VA_ARGS__, VX_NONLINEAR_FILTER_MIN)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_NONLINEAR_FILTER_MAX", __VA_ARGS__, VX_NONLINEAR_FILTER_MAX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_NONLINEAR_FILTER_MEDIAN", __VA_ARGS__, VX_NONLINEAR_FILTER_MEDIAN))
+
+#define ADD_PATTERNS_BOX_CROSS_DISK(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_PATTERN_BOX", __VA_ARGS__, VX_PATTERN_BOX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_PATTERN_CROSS", __VA_ARGS__, VX_PATTERN_CROSS)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_PATTERN_DISK", __VA_ARGS__, VX_PATTERN_DISK))
+
+#define ADD_PATTERNS_BOX_CROSS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_PATTERN_BOX", __VA_ARGS__, VX_PATTERN_BOX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_PATTERN_CROSS", __VA_ARGS__, VX_PATTERN_CROSS))
+
+#define FILTER_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput/mask=3x3", ADD_FUNCTIONS, ADD_PATTERNS_BOX_CROSS, ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, generate_random, NULL, 3), \
+    CT_GENERATE_PARAMETERS("randomInput/mask=5x5", ADD_FUNCTIONS, ADD_PATTERNS_BOX_CROSS_DISK, ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, generate_random, NULL, 5)
+
+
+TEST_WITH_ARG(NonLinearFilter, testGraphProcessing, Filter_Arg,
+    FILTER_PARAMETERS
+    )
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_matrix mask = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum pattern = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    mask = vxCreateMatrixFromPattern(context, arg_->pattern, arg_->mask_size, arg_->mask_size);
+    ASSERT_VX_OBJECT(mask, VX_TYPE_MATRIX);
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_PATTERN, &pattern, sizeof(pattern)));
+    ASSERT_EQ_INT(arg_->pattern, pattern);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxNonLinearFilterNode(graph, arg_->function, src_image, mask, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(filter_check(arg_->function, src, mask, dst, &border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseMatrix(&mask));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(mask == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(NonLinearFilter, testImmediateProcessing, Filter_Arg,
+    FILTER_PARAMETERS
+    )
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_matrix mask = 0;
+    vx_enum pattern = 0;
+
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    mask = vxCreateMatrixFromPattern(context, arg_->pattern, arg_->mask_size, arg_->mask_size);
+    ASSERT_VX_OBJECT(mask, VX_TYPE_MATRIX);
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_PATTERN, &pattern, sizeof(pattern)));
+    ASSERT_EQ_INT(arg_->pattern, pattern);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuNonLinearFilter(context, arg_->function, src_image, mask, dst_image));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(filter_check(arg_->function, src, mask, dst, &border));
+
+    VX_CALL(vxReleaseMatrix(&mask));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(mask == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(NonLinearFilter, testGraphProcessingWithNondefaultOrginMatrix, Filter_Arg,
+    FILTER_PARAMETERS
+    )
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_matrix mask = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum pattern = 0;
+    vx_size origin = 0;
+    CT_Image src = NULL, dst = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_image = ct_create_similar_image(src_image);
+    ASSERT_VX_OBJECT(dst_image, VX_TYPE_IMAGE);
+
+    origin = arg_->mask_size/2 - 1;
+    mask = vxCreateMatrixFromPatternAndOrigin(context, arg_->pattern, arg_->mask_size, arg_->mask_size, origin, origin);
+    ASSERT_VX_OBJECT(mask, VX_TYPE_MATRIX);
+    VX_CALL(vxQueryMatrix(mask, VX_MATRIX_PATTERN, &pattern, sizeof(pattern)));
+    ASSERT_EQ_INT(arg_->pattern, pattern);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxNonLinearFilterNode(graph, arg_->function, src_image, mask, dst_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(filter_check(arg_->function, src, mask, dst, &border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseMatrix(&mask));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(mask == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+TESTCASE_TESTS(NonLinearFilter, testNodeCreation, testGraphProcessing, testImmediateProcessing, testGraphProcessingWithNondefaultOrginMatrix)
diff --git a/test_conformance/test_nonmaxsuppression.c b/test_conformance/test_nonmaxsuppression.c
new file mode 100644
index 0000000..6d4d26f
--- /dev/null
+++ b/test_conformance/test_nonmaxsuppression.c
@@ -0,0 +1,401 @@
+/*
+
+ * Copyright (c) 2017-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+
+#include "test_engine/test.h"
+
+#include <stdint.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+TESTCASE(Nonmaxsuppression, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(Nonmaxsuppression, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0;
+    vx_image mask = 0;
+    vx_image output = 0;
+    vx_uint32 src_width, src_height;
+    
+    vx_int32 wsize = 3;
+
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    src_width = 64;
+    src_height = 32;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(mask = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(node = vxNonMaxSuppressionNode(graph, input, mask, wsize, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&input));
+    VX_CALL(vxReleaseImage(&mask));
+    VX_CALL(vxReleaseImage(&output));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(output == 0);
+    ASSERT(mask == 0);
+    ASSERT(input == 0);
+}
+
+static CT_Image nonmaxsuppression_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+        image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_S16, &CT()->seed_, 0, 256));
+
+    return image;
+}
+static CT_Image nonmaxsuppression_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+static CT_Image nonmax_golden(vx_image input, vx_image mask, vx_int32 wsize)
+{
+    vx_status status = VX_FAILURE;
+    vx_int32 height, width;
+    vx_uint8 mask_data = 0;
+
+    void *src_base = NULL;
+    void *mask_base = NULL;
+    void *dst_base = NULL;
+
+    vx_imagepatch_addressing_t src_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_imagepatch_addressing_t mask_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_rectangle_t src_rect, mask_rect;
+    vx_map_id src_map_id = 0;
+    vx_map_id mask_map_id = 0;
+
+    status = vxGetValidRegionImage(input, &src_rect);
+    status |= vxMapImagePatch(input, &src_rect, 0, &src_map_id, &src_addr, &src_base, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0);
+
+    if (mask != NULL)
+    {
+        status |= vxGetValidRegionImage(mask, &mask_rect);
+        status |= vxMapImagePatch(mask, &mask_rect, 0, &mask_map_id, &mask_addr, (void **)&mask_base, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+    }
+    vx_df_image format = 0;
+    status |= vxQueryImage(input, VX_IMAGE_FORMAT, &format, sizeof(format));
+
+    width = src_addr.dim_x;
+    height = src_addr.dim_y;
+
+    CT_Image output = ct_allocate_image(width, height, format);
+    dst_base = ct_image_get_plane_base(output, 0);
+    vx_int32 border = wsize / 2;
+
+    for (vx_int32 x = border; x < (width - border); x++)
+    {
+        for (vx_int32 y = border; y < (height - border); y++)
+        {
+            vx_uint8 *_mask;
+            if (mask != NULL)
+            {
+                _mask = (vx_uint8 *)vxFormatImagePatchAddress2d(mask_base, x, y, &mask_addr);
+            }
+            else
+            {
+                _mask = &mask_data;
+            }
+            void *val_p = vxFormatImagePatchAddress2d(src_base, x, y, &src_addr);
+            void *dest = (vx_int16*)dst_base + y * output->stride + x;
+            vx_int32 src_val = *(vx_int16 *)val_p;
+            if (*_mask != 0)
+            {
+                *(vx_int16 *)dest = (vx_int16)src_val;
+            }
+            else
+            {
+                vx_bool flag = 1;
+                for (vx_int32 i = -border; i <= border; i++)
+                {
+                    for (vx_int32 j = -border; j <= border; j++)
+                    {
+                        void *neighbor = vxFormatImagePatchAddress2d(src_base, x + i, y + j, &src_addr);
+			if (mask != NULL)
+			{
+				_mask = (vx_uint8 *)vxFormatImagePatchAddress2d(mask_base, x + i, y + j, &mask_addr);
+			}
+			else
+			{
+				_mask = &mask_data;
+			}
+                        vx_int32 neighbor_val = *(vx_int16 *)neighbor;
+                        if ((*_mask == 0)
+			   && (((j < 0 || (j == 0 && i <= 0)) && (src_val < neighbor_val))
+			      || ((j > 0 || (j == 0 && i > 0)) && (src_val <= neighbor_val))))
+                        {
+                            flag = 0;
+                            break;
+                        }
+                    }
+                    if (flag == 0)
+                    {
+                        break;
+                    }
+                }
+                if (flag)
+                {
+                    *(vx_int16 *)dest = (vx_int16)src_val;
+                }
+                else
+                {
+                    *(vx_int16 *)dest = INT16_MIN;
+                }
+            }
+        }
+    }
+    status |= vxUnmapImagePatch(input, src_map_id);
+    if (mask != NULL)
+    {
+        status |= vxUnmapImagePatch(mask, mask_map_id);
+    }
+
+    return output;
+}
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_int32 wsize;
+    vx_bool _mask;
+    vx_df_image format;
+    const char* result_filename;
+} Arg;
+
+#define PARAMETERS \
+    ARG("case_1_nomask_u8_nms", nonmaxsuppression_read_image, "blurred_lena_gray.bmp", 1, vx_false_e, VX_DF_IMAGE_U8, "nms_1_nomask.bmp"), \
+    ARG("case_3_nomask_u8_nms", nonmaxsuppression_read_image, "blurred_lena_gray.bmp", 3, vx_false_e, VX_DF_IMAGE_U8, "nms_3_nomask.bmp"), \
+    ARG("case_5_nomask_u8_nms", nonmaxsuppression_read_image, "blurred_lena_gray.bmp", 5, vx_false_e, VX_DF_IMAGE_U8, "nms_5_nomask.bmp"), \
+    ARG("case_1_mask_u8_nms", nonmaxsuppression_read_image, "blurred_lena_gray.bmp", 1, vx_true_e, VX_DF_IMAGE_U8, "nms_1_mask.bmp"), \
+    ARG("case_3_mask_u8_nms", nonmaxsuppression_read_image, "blurred_lena_gray.bmp", 3, vx_true_e, VX_DF_IMAGE_U8, "nms_3_mask.bmp"), \
+    ARG("case_5_mask_u8_nms", nonmaxsuppression_read_image, "blurred_lena_gray.bmp", 5, vx_true_e, VX_DF_IMAGE_U8, "nms_5_mask.bmp"), \
+    ARG("case_1_nomask_s16_nms", nonmaxsuppression_generate_random, NULL, 1, vx_false_e, VX_DF_IMAGE_S16, NULL), \
+    ARG("case_3_nomask_s16_nms", nonmaxsuppression_generate_random, NULL, 3, vx_false_e, VX_DF_IMAGE_S16, NULL), \
+    ARG("case_5_nomask_s16_nms", nonmaxsuppression_generate_random, NULL, 5, vx_false_e, VX_DF_IMAGE_S16, NULL), \
+    ARG("case_1_mask_s16_nms", nonmaxsuppression_generate_random, NULL, 1, vx_true_e, VX_DF_IMAGE_S16, NULL), \
+    ARG("case_3_mask_s16_nms", nonmaxsuppression_generate_random, NULL, 3, vx_true_e, VX_DF_IMAGE_S16, NULL), \
+    ARG("case_5_mask_s16_nms", nonmaxsuppression_generate_random, NULL, 5, vx_true_e, VX_DF_IMAGE_S16, NULL), \
+
+TEST_WITH_ARG(Nonmaxsuppression, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    vx_image input = 0;
+    vx_image mask = 0;
+    vx_image output = 0;
+    vx_uint32 src_width, src_height;
+
+    vx_int32 wsize = arg_->wsize;
+    vx_int32 border = wsize/2;
+    CT_Image src = NULL, ct_output = NULL;
+
+    vx_status status;
+
+    void *mask_base = NULL;
+    vx_imagepatch_addressing_t mask_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_rectangle_t mask_rect;
+    vx_map_id mask_map_id = 0;
+    if (arg_->format == VX_DF_IMAGE_U8)
+    {
+        ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    }
+    else
+    {
+        ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 640, 480));
+    }
+    src_width = src->width;
+    src_height = src->height;
+
+    ASSERT_VX_OBJECT(input = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, src_width, src_height, arg_->format), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    if (arg_->_mask)
+    {
+        ASSERT_VX_OBJECT(mask = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        status = vxGetValidRegionImage(mask, &mask_rect);
+        status |= vxMapImagePatch(mask, &mask_rect, 0, &mask_map_id, &mask_addr, (void **)&mask_base, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+        for (vx_uint32 i = 0; i < src_width; i++)
+        {
+            for (vx_uint32 j = 0; j < src_height; j++)
+            {
+                void *src = vxFormatImagePatchAddress2d(mask_base, i, j, &mask_addr);
+                if (i % 2 == 0 && j % 2 == 0)
+                {
+                    *(vx_uint8 *)src = 1;
+                }
+                else
+                {
+                    *(vx_uint8 *)src = 0;
+                }
+               
+            }
+        }
+        status |= vxUnmapImagePatch(mask, mask_map_id);
+    }
+
+    ASSERT_VX_OBJECT(node = vxNonMaxSuppressionNode(graph, input, mask, wsize, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(ct_output = ct_image_from_vx_image(output));
+    CT_Image golden_image;
+    if (arg_->format == VX_DF_IMAGE_U8)
+    {
+        golden_image = arg_->generator(arg_->result_filename, 0, 0);
+    }
+    else
+    {
+        golden_image = nonmax_golden(input, mask, wsize);
+    }
+    ct_adjust_roi(ct_output, border, border, border, border);
+    ct_adjust_roi(golden_image, border, border, border, border);
+    EXPECT_EQ_CTIMAGE(golden_image, ct_output);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&input));
+    if (arg_->_mask)
+    {
+        VX_CALL(vxReleaseImage(&mask));
+    }
+    VX_CALL(vxReleaseImage(&output));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(output == 0);
+    ASSERT(mask == 0);
+    ASSERT(input == 0);
+}
+
+TEST_WITH_ARG(Nonmaxsuppression, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+
+    vx_image input = 0;
+    vx_image mask = 0;
+    vx_image output = 0;
+    vx_uint32 src_width, src_height;
+
+    vx_int32 wsize = arg_->wsize;
+    vx_int32 border = wsize/2;
+    CT_Image src = NULL, ct_output = NULL;
+
+    vx_status status;
+
+    void *mask_base = NULL;
+    vx_imagepatch_addressing_t mask_addr = VX_IMAGEPATCH_ADDR_INIT;
+    vx_rectangle_t mask_rect;
+    vx_map_id mask_map_id = 0;
+
+    if (arg_->format == VX_DF_IMAGE_U8)
+    {
+        ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 0, 0));
+    }
+    else
+    {
+        ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, 640, 480));
+    }
+    src_width = src->width;
+    src_height = src->height;
+
+    ASSERT_VX_OBJECT(input = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, src_width, src_height, arg_->format), VX_TYPE_IMAGE);
+
+    if (arg_->_mask)
+    {
+        ASSERT_VX_OBJECT(mask = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        status = vxGetValidRegionImage(mask, &mask_rect);
+        status |= vxMapImagePatch(mask, &mask_rect, 0, &mask_map_id, &mask_addr, (void **)&mask_base, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0);
+        for (vx_uint32 i = 0; i < src_width; i++)
+        {
+            for (vx_uint32 j = 0; j < src_height; j++)
+            {
+                void *src = vxFormatImagePatchAddress2d(mask_base, i, j, &mask_addr);
+                if (i % 2 == 0 && j % 2 == 0)
+                {
+                    *(vx_uint8 *)src = 1;
+                }
+                else
+                {
+                    *(vx_uint8 *)src = 0;
+                }
+            }
+        }
+        status |= vxUnmapImagePatch(mask, mask_map_id);
+    }
+    VX_CALL(vxuNonMaxSuppression(context, input, mask, wsize, output));
+
+    ASSERT_NO_FAILURE(ct_output = ct_image_from_vx_image(output));
+
+    CT_Image golden_image;
+    if (arg_->format == VX_DF_IMAGE_U8)
+    {
+        golden_image = arg_->generator(arg_->result_filename, 0, 0);
+    }
+    else
+    {
+        golden_image = nonmax_golden(input, mask, wsize);
+    }
+
+    ct_adjust_roi(ct_output, border, border, border, border);
+    ct_adjust_roi(golden_image, border, border, border, border);
+    EXPECT_EQ_CTIMAGE(golden_image, ct_output);
+
+    VX_CALL(vxReleaseImage(&input));
+    if (arg_->_mask)
+    {
+        VX_CALL(vxReleaseImage(&mask));
+    }
+    VX_CALL(vxReleaseImage(&output));
+
+    ASSERT(output == 0);
+    ASSERT(mask == 0);
+    ASSERT(input == 0);
+    ASSERT(graph == 0);
+}
+
+TESTCASE_TESTS(Nonmaxsuppression,
+               testNodeCreation,
+               testGraphProcessing,
+               testImmediateProcessing)
diff --git a/test_conformance/test_not.c b/test_conformance/test_not.c
new file mode 100644
index 0000000..5ef9366
--- /dev/null
+++ b/test_conformance/test_not.c
@@ -0,0 +1,230 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+//#define CT_EXECUTE_ASYNC
+
+static void referenceNot(CT_Image src, CT_Image dst)
+{
+    uint32_t i, j;
+
+    ASSERT(src && dst);
+    ASSERT(src->width == dst->width);
+    ASSERT(src->height == dst->height);
+    ASSERT(src->format == dst->format && src->format == VX_DF_IMAGE_U8);
+
+    for (i = 0; i < dst->height; ++i)
+        for (j = 0; j < dst->width; ++j)
+            dst->data.y[i * dst->stride + j] = ~src->data.y[i * src->stride + j];
+}
+
+static void fillSquence(CT_Image dst, uint32_t seq_init)
+{
+    uint32_t i, j;
+    uint32_t val = seq_init;
+
+    ASSERT(dst);
+    ASSERT(dst->format == VX_DF_IMAGE_U8);
+
+    for (i = 0; i < dst->height; ++i)
+        for (j = 0; j < dst->width; ++j)
+            dst->data.y[i * dst->stride + j] = ++val;
+}
+
+TESTCASE(vxuNot, CT_VXContext, ct_setup_vx_context, 0)
+TESTCASE(vxNot,  CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(vxuNot, testNegativeSizes)
+{
+    vx_image src16x88, dst88x16;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src16x88 = vxCreateImage(context, 16, 88, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    // initialize to guarantee that images are allocated
+    ASSERT_NO_FAILURE(ct_fill_image_random(src16x88, &CT()->seed_));
+
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxuNot(context, src16x88, dst88x16));
+
+    VX_CALL(vxReleaseImage(&src16x88));
+    VX_CALL(vxReleaseImage(&dst88x16));
+}
+
+TEST(vxNot, testNegativeSizes)
+{
+    vx_image src16x88, dst88x16;
+    vx_graph graph;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(src16x88 = vxCreateImage(context, 16, 88, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst88x16 = vxCreateImage(context, 88, 16, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(vxNotNode(graph, src16x88, dst88x16), VX_TYPE_NODE);
+    EXPECT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseImage(&src16x88));
+    VX_CALL(vxReleaseImage(&dst88x16));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+static vx_image inference_image;
+static vx_action VX_CALLBACK inference_image_test(vx_node node)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = 0;
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_WIDTH,   &width,   sizeof(width)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(inference_image, VX_IMAGE_FORMAT,  &format,  sizeof(format)));
+
+    EXPECT_EQ_INT(640, width);
+    EXPECT_EQ_INT(480, height);
+    EXPECT_EQ_INT(VX_DF_IMAGE_U8, format);
+
+    return VX_ACTION_CONTINUE;
+}
+
+TEST(vxNot, testInference)
+{
+    vx_image src, dst, gr;
+    vx_graph graph;
+    vx_node n, tmp;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(src   = vxCreateImage(context, 640, 480, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst   = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(n     = vxNotNode(graph, src, dst), VX_TYPE_NODE);
+
+    // grounding
+    ASSERT_VX_OBJECT(gr    = vxCreateImage(context, 640, 480, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(tmp   = vxAddNode(graph, dst, src, VX_CONVERT_POLICY_WRAP, gr), VX_TYPE_NODE);
+
+    // test
+    inference_image = dst;
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxAssignNodeCallback(n, inference_image_test));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&n));
+    VX_CALL(vxReleaseNode(&tmp));
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&gr));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+typedef struct {
+    const char* name;
+    uint32_t width;
+    uint32_t height;
+} size_arg;
+
+#define SIZE_ARG(w,h) ARG(#w "x" #h, w, h)
+
+#define NOT_SIZE_ARGS       \
+    SIZE_ARG(640, 480),     \
+    ARG_EXTENDED_BEGIN(),   \
+    SIZE_ARG(1, 1),         \
+    SIZE_ARG(15, 17),       \
+    SIZE_ARG(32, 32),       \
+    SIZE_ARG(1231, 1234),   \
+    SIZE_ARG(1280, 720),    \
+    SIZE_ARG(1920, 1080),   \
+    ARG_EXTENDED_END()
+
+TEST_WITH_ARG(vxuNot, testSizes, size_arg, NOT_SIZE_ARGS)
+{
+    vx_image src, dst;
+    CT_Image ref_src, refdst, vxdst;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_NO_FAILURE({
+        ref_src = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8);
+        fillSquence(ref_src, (uint32_t)CT()->seed_);
+        src = ct_image_to_vx_image(ref_src, context);
+    });
+
+    ASSERT_VX_OBJECT(dst = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuNot(context, src, dst));
+
+    ASSERT_NO_FAILURE({
+        vxdst = ct_image_from_vx_image(dst);
+        refdst = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8);
+        referenceNot(ref_src, refdst);
+    });
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    // checked release vx images
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseImage(&src));
+    EXPECT_EQ_PTR(NULL, dst);
+    EXPECT_EQ_PTR(NULL, src);
+}
+
+TEST_WITH_ARG(vxNot, testSizes, size_arg, NOT_SIZE_ARGS)
+{
+    vx_image src, dst;
+    CT_Image ref_src, refdst, vxdst;
+    vx_graph graph;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_NO_FAILURE({
+        ref_src = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8);
+        fillSquence(ref_src, (uint32_t)CT()->seed_);
+        src = ct_image_to_vx_image(ref_src, context);
+    });
+
+    // build one-node graph
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(dst   = vxCreateImage(context, arg_->width, arg_->height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(vxNotNode(graph, src, dst), VX_TYPE_NODE);
+
+    // run graph
+#ifdef CT_EXECUTE_ASYNC
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxScheduleGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxWaitGraph(graph));
+#else
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxProcessGraph(graph));
+#endif
+
+    ASSERT_NO_FAILURE({
+        vxdst = ct_image_from_vx_image(dst);
+        refdst = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8);
+        referenceNot(ref_src, refdst);
+    });
+
+    ASSERT_EQ_CTIMAGE(refdst, vxdst);
+
+    VX_CALL(vxReleaseImage(&src));
+    VX_CALL(vxReleaseImage(&dst));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+
+TESTCASE_TESTS(vxuNot, DISABLED_testNegativeSizes,                testSizes)
+TESTCASE_TESTS(vxNot,  DISABLED_testNegativeSizes, testInference, testSizes)
+
diff --git a/test_conformance/test_object_array.c b/test_conformance/test_object_array.c
new file mode 100644
index 0000000..84e787e
--- /dev/null
+++ b/test_conformance/test_object_array.c
@@ -0,0 +1,323 @@
+/*
+
+ * Copyright (c) 2015-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(ObjectArray, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char* testName;
+    const char* p;
+    vx_enum item_type;
+} Obj_Array_Arg;
+
+
+static vx_reference own_create_exemplar(vx_context context, vx_enum item_type)
+{
+    vx_reference exemplar = NULL;
+
+    vx_uint8 value = 0;
+    vx_enum format = VX_DF_IMAGE_U8;
+    vx_uint32 obj_width = 128, obj_height = 128;
+    vx_enum obj_item_type = VX_TYPE_UINT8;
+    vx_size capacity = 100;
+    vx_size levels = 8;
+    vx_float32 scale = 0.5f;
+    vx_size bins = 36;
+    vx_int32 offset = 0;
+    vx_uint32 range = 360;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_size lut_num_items = 100;
+    vx_size m = 5, n = 5;
+
+    switch (item_type)
+    {
+        case VX_TYPE_IMAGE:
+            exemplar = (vx_reference)vxCreateImage(context, obj_width, obj_height, format);
+            break;
+        case VX_TYPE_ARRAY:
+            exemplar = (vx_reference)vxCreateArray(context, obj_item_type, capacity);
+            break;
+        case VX_TYPE_PYRAMID:
+            exemplar = (vx_reference)vxCreatePyramid(context, levels, scale, obj_width, obj_height, format);
+            break;
+        case VX_TYPE_SCALAR:
+            exemplar = (vx_reference)vxCreateScalar(context, obj_item_type, &value);
+            break;
+        case VX_TYPE_MATRIX:
+            exemplar = (vx_reference)vxCreateMatrix(context, obj_item_type, m, n);
+            break;
+        case VX_TYPE_DISTRIBUTION:
+            exemplar = (vx_reference)vxCreateDistribution(context, bins, offset, range);
+            break;
+        case VX_TYPE_REMAP:
+            exemplar = (vx_reference)vxCreateRemap(context, obj_width, obj_height, obj_width, obj_height);
+            break;
+        case VX_TYPE_LUT:
+            exemplar = (vx_reference)vxCreateLUT(context, obj_item_type, lut_num_items);
+            break;
+        case VX_TYPE_THRESHOLD:
+            exemplar = (vx_reference)vxCreateThreshold(context, thresh_type, obj_item_type);
+            break;
+        default:
+            break;
+    }
+
+    return exemplar;
+}
+
+static void own_check_meta(vx_reference item, vx_reference ref)
+{
+    vx_enum ref_type, item_type;
+
+    VX_CALL(vxQueryReference(ref, VX_REFERENCE_TYPE, &ref_type, sizeof(ref_type)));
+
+    VX_CALL(vxQueryReference(item, VX_REFERENCE_TYPE, &item_type, sizeof(item_type)));
+
+    ASSERT(item_type == ref_type);
+
+    switch (item_type)
+    {
+        case VX_TYPE_IMAGE:
+        {
+            vx_uint32 ref_width, item_width;
+            vx_uint32 ref_height, item_height;
+            vx_df_image ref_format, item_format;
+
+            VX_CALL(vxQueryImage((vx_image)ref, VX_IMAGE_WIDTH, &ref_width, sizeof(ref_width)));
+            VX_CALL(vxQueryImage((vx_image)ref, VX_IMAGE_HEIGHT, &ref_height, sizeof(ref_height)));
+            VX_CALL(vxQueryImage((vx_image)ref, VX_IMAGE_FORMAT, &ref_format, sizeof(ref_format)));
+
+            VX_CALL(vxQueryImage((vx_image)item, VX_IMAGE_WIDTH, &item_width, sizeof(item_width)));
+            VX_CALL(vxQueryImage((vx_image)item, VX_IMAGE_HEIGHT, &item_height, sizeof(item_height)));
+            VX_CALL(vxQueryImage((vx_image)item, VX_IMAGE_FORMAT, &item_format, sizeof(item_format)));
+
+            ASSERT(ref_width == item_width);
+            ASSERT(ref_height == item_height);
+            ASSERT(ref_format == item_format);
+        }   break;
+        case VX_TYPE_ARRAY:
+        {
+            vx_size ref_capacity, item_capacity;
+            vx_enum ref_itemtype, item_itemtype;
+
+            VX_CALL(vxQueryArray((vx_array)ref, VX_ARRAY_CAPACITY, &ref_capacity, sizeof(ref_capacity)));
+            VX_CALL(vxQueryArray((vx_array)ref, VX_ARRAY_ITEMTYPE, &ref_itemtype, sizeof(ref_itemtype)));
+
+            VX_CALL(vxQueryArray((vx_array)item, VX_ARRAY_CAPACITY, &item_capacity, sizeof(item_capacity)));
+            VX_CALL(vxQueryArray((vx_array)item, VX_ARRAY_ITEMTYPE, &item_itemtype, sizeof(item_itemtype)));
+
+            ASSERT(ref_capacity == item_capacity);
+            ASSERT(ref_itemtype == item_itemtype);
+        }   break;
+        case VX_TYPE_PYRAMID:
+        {
+            vx_uint32 ref_width, item_width;
+            vx_uint32 ref_height, item_height;
+            vx_df_image ref_format, item_format;
+            vx_size ref_levels, item_levels;
+            vx_float32 ref_scale, item_scale;
+
+            VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_WIDTH, &ref_width, sizeof(ref_width)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_HEIGHT, &ref_height, sizeof(ref_height)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_FORMAT, &ref_format, sizeof(ref_format)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_LEVELS, &ref_levels, sizeof(ref_levels)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)ref, VX_PYRAMID_SCALE, &ref_scale, sizeof(ref_scale)));
+
+            VX_CALL(vxQueryPyramid((vx_pyramid)item, VX_PYRAMID_WIDTH, &item_width, sizeof(item_width)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)item, VX_PYRAMID_HEIGHT, &item_height, sizeof(item_height)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)item, VX_PYRAMID_FORMAT, &item_format, sizeof(item_format)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)item, VX_PYRAMID_LEVELS, &item_levels, sizeof(item_levels)));
+            VX_CALL(vxQueryPyramid((vx_pyramid)item, VX_PYRAMID_SCALE, &item_scale, sizeof(item_scale)));
+
+            ASSERT(ref_width == item_width);
+            ASSERT(ref_height == item_height);
+            ASSERT(ref_format == item_format);
+            ASSERT(ref_levels == item_levels);
+            ASSERT(ref_scale == item_scale);
+        }   break;
+        case VX_TYPE_SCALAR:
+        {
+            vx_enum ref_type, item_type;
+
+            VX_CALL(vxQueryScalar((vx_scalar)ref, VX_SCALAR_TYPE, &ref_type, sizeof(ref_type)));
+
+            VX_CALL(vxQueryScalar((vx_scalar)item, VX_SCALAR_TYPE, &item_type, sizeof(item_type)));
+
+            ASSERT(ref_type == item_type);
+        }   break;
+        case VX_TYPE_MATRIX:
+        {
+            vx_enum ref_type, item_type;
+            vx_size ref_rows, item_rows;
+            vx_size ref_cols, item_cols;
+
+            VX_CALL(vxQueryMatrix((vx_matrix)ref, VX_MATRIX_TYPE, &ref_type, sizeof(ref_type)));
+            VX_CALL(vxQueryMatrix((vx_matrix)ref, VX_MATRIX_ROWS, &ref_rows, sizeof(ref_rows)));
+            VX_CALL(vxQueryMatrix((vx_matrix)ref, VX_MATRIX_COLUMNS, &ref_cols, sizeof(ref_cols)));
+
+            VX_CALL(vxQueryMatrix((vx_matrix)item, VX_MATRIX_TYPE, &item_type, sizeof(item_type)));
+            VX_CALL(vxQueryMatrix((vx_matrix)item, VX_MATRIX_ROWS, &item_rows, sizeof(item_rows)));
+            VX_CALL(vxQueryMatrix((vx_matrix)item, VX_MATRIX_COLUMNS, &item_cols, sizeof(item_cols)));
+
+            ASSERT(ref_type == item_type);
+            ASSERT(ref_rows == item_rows);
+            ASSERT(ref_cols == item_cols);
+        }   break;
+        case VX_TYPE_DISTRIBUTION:
+        {
+            vx_size ref_bins, item_bins;
+            vx_int32 ref_offset, item_offset;
+            vx_uint32 ref_range, item_range;
+
+            VX_CALL(vxQueryDistribution((vx_distribution)ref, VX_DISTRIBUTION_BINS, &ref_bins, sizeof(ref_bins)));
+            VX_CALL(vxQueryDistribution((vx_distribution)ref, VX_DISTRIBUTION_OFFSET, &ref_offset, sizeof(ref_offset)));
+            VX_CALL(vxQueryDistribution((vx_distribution)ref, VX_DISTRIBUTION_RANGE, &ref_range, sizeof(ref_range)));
+
+            VX_CALL(vxQueryDistribution((vx_distribution)item, VX_DISTRIBUTION_BINS, &item_bins, sizeof(item_bins)));
+            VX_CALL(vxQueryDistribution((vx_distribution)item, VX_DISTRIBUTION_OFFSET, &item_offset, sizeof(item_offset)));
+            VX_CALL(vxQueryDistribution((vx_distribution)item, VX_DISTRIBUTION_RANGE, &item_range, sizeof(item_range)));
+
+            ASSERT(ref_bins == item_bins);
+            ASSERT(ref_offset == item_offset);
+            ASSERT(ref_range == item_range);
+        }   break;
+        case VX_TYPE_REMAP:
+        {
+            vx_uint32 ref_srcwidth, item_srcwidth;
+            vx_uint32 ref_srcheight, item_srcheight;
+            vx_uint32 ref_dstwidth, item_dstwidth;
+            vx_uint32 ref_dstheight, item_dstheight;
+
+            VX_CALL(vxQueryRemap((vx_remap)ref, VX_REMAP_SOURCE_WIDTH, &ref_srcwidth, sizeof(ref_srcwidth)));
+            VX_CALL(vxQueryRemap((vx_remap)ref, VX_REMAP_SOURCE_HEIGHT, &ref_srcheight, sizeof(ref_srcheight)));
+            VX_CALL(vxQueryRemap((vx_remap)ref, VX_REMAP_DESTINATION_WIDTH, &ref_dstwidth, sizeof(ref_dstwidth)));
+            VX_CALL(vxQueryRemap((vx_remap)ref, VX_REMAP_DESTINATION_HEIGHT, &ref_dstheight, sizeof(ref_dstheight)));
+
+            VX_CALL(vxQueryRemap((vx_remap)item, VX_REMAP_SOURCE_WIDTH, &item_srcwidth, sizeof(item_srcwidth)));
+            VX_CALL(vxQueryRemap((vx_remap)item, VX_REMAP_SOURCE_HEIGHT, &item_srcheight, sizeof(item_srcheight)));
+            VX_CALL(vxQueryRemap((vx_remap)item, VX_REMAP_DESTINATION_WIDTH, &item_dstwidth, sizeof(item_dstwidth)));
+            VX_CALL(vxQueryRemap((vx_remap)item, VX_REMAP_DESTINATION_HEIGHT, &item_dstheight, sizeof(item_dstheight)));
+
+            ASSERT(ref_srcwidth == item_srcwidth);
+            ASSERT(ref_srcheight == item_srcheight);
+            ASSERT(ref_dstwidth == item_dstwidth);
+            ASSERT(ref_dstheight == item_dstheight);
+        }   break;
+        case VX_TYPE_LUT:
+        {
+            vx_enum ref_type, item_type;
+            vx_size ref_count, item_count;
+
+            VX_CALL(vxQueryLUT((vx_lut)ref, VX_LUT_TYPE, &ref_type, sizeof(ref_type)));
+            VX_CALL(vxQueryLUT((vx_lut)ref, VX_LUT_COUNT, &ref_count, sizeof(ref_count)));
+
+            VX_CALL(vxQueryLUT((vx_lut)item, VX_LUT_TYPE, &item_type, sizeof(item_type)));
+            VX_CALL(vxQueryLUT((vx_lut)item, VX_LUT_COUNT, &item_count, sizeof(item_count)));
+
+            ASSERT(ref_type == item_type);
+            ASSERT(ref_count == item_count);
+        }   break;
+        case VX_TYPE_THRESHOLD:
+        {
+            vx_enum ref_type, item_type;
+
+            VX_CALL(vxQueryThreshold((vx_threshold)ref, VX_THRESHOLD_TYPE, &ref_type, sizeof(ref_type)));
+
+            VX_CALL(vxQueryThreshold((vx_threshold)item, VX_THRESHOLD_TYPE, &item_type, sizeof(item_type)));
+
+            ASSERT(ref_type == item_type);
+        }   break;
+        default:
+            ASSERT(0 == 1);
+    }
+}
+
+#define OBJECT_ARRAY_NUM_ITEMS 10
+
+#define ADD_VX_OBJECT_ARRAY_TYPES(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_IMAGE", __VA_ARGS__, VX_TYPE_IMAGE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_ARRAY", __VA_ARGS__, VX_TYPE_ARRAY)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_PYRAMID", __VA_ARGS__, VX_TYPE_PYRAMID)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_SCALAR", __VA_ARGS__, VX_TYPE_SCALAR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_MATRIX", __VA_ARGS__, VX_TYPE_MATRIX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_DISTRIBUTION", __VA_ARGS__, VX_TYPE_DISTRIBUTION)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_REMAP", __VA_ARGS__, VX_TYPE_REMAP)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_LUT", __VA_ARGS__, VX_TYPE_LUT)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TYPE_THRESHOLD", __VA_ARGS__, VX_TYPE_THRESHOLD ))
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("object_array", ADD_VX_OBJECT_ARRAY_TYPES, ARG, NULL)
+
+TEST_WITH_ARG(ObjectArray, test_vxCreateObjectArray, Obj_Array_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_reference exemplar = NULL;
+    vx_size num_items = OBJECT_ARRAY_NUM_ITEMS;
+    vx_enum item_type = arg_->item_type;
+
+    vx_object_array object_array = 0;
+
+    vx_reference actual_item = NULL;
+    vx_enum actual_type = VX_TYPE_INVALID;
+    vx_size actual_num_items = 0;
+
+    vx_uint32 i;
+
+    ASSERT_VX_OBJECT(exemplar = own_create_exemplar(context, item_type), (enum vx_type_e)item_type);
+
+    /* 1. check if object array can be created with allowed types*/
+    ASSERT_VX_OBJECT(object_array = vxCreateObjectArray(context, exemplar, num_items), VX_TYPE_OBJECT_ARRAY);
+
+    /* 2. check if object array's actual item_type corresponds to requested item_type */
+    VX_CALL(vxQueryObjectArray(object_array, VX_OBJECT_ARRAY_ITEMTYPE, &actual_type, sizeof(actual_type)));
+    ASSERT_EQ_INT(item_type, actual_type);
+
+    /* 3. check if object array's actual item_size corresponds to requested item_type size */
+    VX_CALL(vxQueryObjectArray(object_array, VX_OBJECT_ARRAY_NUMITEMS, &actual_num_items, sizeof(actual_num_items)));
+    ASSERT_EQ_INT(num_items, actual_num_items);
+
+    /* 4. check meta formats of objects in object array */
+    for (i = 0u; i < num_items; i++)
+    {
+        ASSERT_VX_OBJECT(actual_item = vxGetObjectArrayItem(object_array, i), (enum vx_type_e)item_type);
+
+        ASSERT_NO_FAILURE(own_check_meta(actual_item, exemplar));
+
+        VX_CALL(vxReleaseReference(&actual_item));
+        ASSERT(actual_item == 0);
+    }
+
+    /* 5. check that we can't get item out of object array's range */
+    actual_item = vxGetObjectArrayItem(object_array, (vx_uint32)num_items);
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxGetStatus((vx_reference)actual_item));
+
+    VX_CALL(vxReleaseReference(&exemplar));
+    ASSERT(exemplar == 0);
+
+    VX_CALL(vxReleaseObjectArray(&object_array));
+    ASSERT(object_array == 0);
+}
+
+TESTCASE_TESTS(
+    ObjectArray,
+    test_vxCreateObjectArray)
diff --git a/test_conformance/test_optflowpyrlk.c b/test_conformance/test_optflowpyrlk.c
new file mode 100644
index 0000000..ad0790d
--- /dev/null
+++ b/test_conformance/test_optflowpyrlk.c
@@ -0,0 +1,471 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <string.h>
+
+#include "shared_functions.h"
+
+#define MAX_POINTS 100
+
+TESTCASE(OptFlowPyrLK, CT_VXContext, ct_setup_vx_context, 0)
+
+static vx_array own_create_keypoint_array(vx_context context, vx_size count, vx_keypoint_t* keypoints)
+{
+    vx_array arr = 0;
+
+    ASSERT_VX_OBJECT_(return 0, arr = vxCreateArray(context, VX_TYPE_KEYPOINT, count), VX_TYPE_ARRAY);
+
+#if 0
+    {
+    vx_size i;
+    vx_size stride = 0;
+    void* ptr = 0;
+
+    VX_CALL_(return 0, vxAccessArrayRange(arr, 0, count, &stride, &ptr, VX_WRITE_ONLY));
+
+    for (i = 0; i < count; i++)
+    {
+        vx_keypoint_t* k = (vx_keypoint_t*)(((char*)ptr) + i * stride);
+        memcpy(k, &keypoints[i], sizeof(vx_keypoint_t));
+    }
+
+    VX_CALL_(return 0, vxCommitArrayRange(arr, 0, count, ptr));
+    }
+#else
+    VX_CALL_(return 0, vxAddArrayItems(arr, count, keypoints, sizeof(vx_keypoint_t)));
+#endif
+
+    return arr;
+}
+
+TEST(OptFlowPyrLK, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image[2] = {0, 0};
+    vx_pyramid src_pyr[2] = {0, 0};
+    vx_keypoint_t kp[] = {
+            {10, 10, 1, 0, 0, 1, 0},
+            {20, 10, 1, 0, 0, 1, 0},
+            {20, 20, 1, 0, 0, 1, 0}
+    };
+    vx_array old_points_arr = 0, new_points_arr = 0;
+    vx_float32 eps = 0.01f;
+    vx_uint32 num_iter = 10;
+    vx_bool use_estimations = vx_true_e;
+    vx_scalar vx_eps = 0, vx_num_iter = 0, vx_use_estimations = 0;
+    vx_size winSize = 5;
+    vx_graph graph = 0;
+    vx_node src_pyr_node[2] = {0, 0}, node = 0;
+
+    ASSERT_VX_OBJECT(src_image[0] = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src_image[1] = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(old_points_arr = own_create_keypoint_array(context, sizeof(kp) / sizeof(kp[0]), kp), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(new_points_arr = vxCreateArray(context, VX_TYPE_KEYPOINT, sizeof(kp) / sizeof(kp[0])), VX_TYPE_ARRAY);
+
+    ASSERT_VX_OBJECT(vx_eps = vxCreateScalar(context, VX_TYPE_FLOAT32, &eps), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(vx_num_iter = vxCreateScalar(context, VX_TYPE_UINT32, &num_iter), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(vx_use_estimations = vxCreateScalar(context, VX_TYPE_BOOL, &use_estimations), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(src_pyr[0] = vxCreateVirtualPyramid(graph, 4, VX_SCALE_PYRAMID_HALF, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(src_pyr[1] = vxCreateVirtualPyramid(graph, 4, VX_SCALE_PYRAMID_HALF, 0, 0, VX_DF_IMAGE_VIRT), VX_TYPE_PYRAMID);
+
+    ASSERT_VX_OBJECT(src_pyr_node[0] = vxGaussianPyramidNode(graph, src_image[0], src_pyr[0]), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(src_pyr_node[1] = vxGaussianPyramidNode(graph, src_image[1], src_pyr[1]), VX_TYPE_NODE);
+
+    ASSERT_VX_OBJECT(node = vxOpticalFlowPyrLKNode(graph, src_pyr[0], src_pyr[1],
+            old_points_arr, old_points_arr, new_points_arr,
+            VX_TERM_CRITERIA_BOTH, vx_eps, vx_num_iter, vx_use_estimations,
+            winSize), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseNode(&src_pyr_node[0]));
+    VX_CALL(vxReleaseNode(&src_pyr_node[1]));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseScalar(&vx_eps));
+    VX_CALL(vxReleaseScalar(&vx_num_iter));
+    VX_CALL(vxReleaseScalar(&vx_use_estimations));
+    VX_CALL(vxReleaseArray(&old_points_arr));
+    VX_CALL(vxReleaseArray(&new_points_arr));
+    VX_CALL(vxReleasePyramid(&src_pyr[0]));
+    VX_CALL(vxReleasePyramid(&src_pyr[1]));
+    VX_CALL(vxReleaseImage(&src_image[0]));
+    VX_CALL(vxReleaseImage(&src_image[1]));
+}
+
+
+static CT_Image optflow_pyrlk_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static vx_size own_read_keypoints(const char* fileName, vx_keypoint_t** p_old_points, vx_keypoint_t** p_new_points)
+{
+    size_t sz = 0;
+    void* buf = 0;
+    char file[MAXPATHLENGTH];
+
+    sz = snprintf(file, MAXPATHLENGTH, "%s/%s", ct_get_test_file_path(), fileName);
+    ASSERT_(return 0, (sz < MAXPATHLENGTH));
+#if 1
+    FILE* f = fopen(file, "rb");
+    ASSERT_(return 0, f);
+    fseek(f, 0, SEEK_END);
+
+    sz = ftell(f);
+    fseek(f, 0, SEEK_SET);
+
+    ASSERT_(return 0, buf = ct_alloc_mem(sz + 1));
+    ASSERT_(return 0, sz == fread(buf, 1, sz, f));
+    fclose(f); f = NULL;
+    ((char*)buf)[sz] = 0;
+#else
+    sz = ...
+    buf = ...
+#endif
+
+    ASSERT_(return 0, *p_old_points = ct_alloc_mem(sizeof(vx_keypoint_t) * MAX_POINTS));
+    ASSERT_(return 0, *p_new_points = ct_alloc_mem(sizeof(vx_keypoint_t) * MAX_POINTS));
+
+    {
+        int num = 0;
+        char* pos = buf;
+        char* next = 0;
+        while(pos && (next = strchr(pos, '\n')))
+        {
+            int id = 0, status = 0;
+            float x1, y1, x2, y2;
+
+            int res;
+
+            *next = 0;
+            res = sscanf(pos, "%d %d %g %g %g %g", &id, &status, &x1, &y1, &x2, &y2);
+            pos = next + 1;
+            if (res == 6)
+            {
+                (*p_old_points)[num].x = (vx_int32)x1;
+                (*p_old_points)[num].y = (vx_int32)y1;
+                (*p_old_points)[num].strength = 1;
+                (*p_old_points)[num].scale = 0;
+                (*p_old_points)[num].orientation = 0;
+                (*p_old_points)[num].tracking_status = 1;
+                (*p_old_points)[num].error = 0;
+
+                (*p_new_points)[num].x = (vx_int32)x2;
+                (*p_new_points)[num].y = (vx_int32)y2;
+                (*p_new_points)[num].strength = 1;
+                (*p_new_points)[num].scale = 0;
+                (*p_new_points)[num].orientation = 0;
+                (*p_new_points)[num].tracking_status = status;
+                (*p_new_points)[num].error = 0;
+
+                num++;
+            }
+            else
+                break;
+        }
+
+        ct_free_mem(buf);
+
+        return num;
+    }
+}
+
+static void own_keypoints_check(vx_size num_points,
+        vx_keypoint_t* old_points, vx_keypoint_t* new_points_ref, vx_keypoint_t* new_points)
+{
+    vx_size i;
+    int num_valid_points = 0;
+    int num_lost = 0;
+    int num_errors = 0;
+    int num_tracked_points = 0;
+
+    for (i = 0; i < num_points; i++)
+    {
+        vx_int32 dx, dy;
+        if (new_points_ref[i].tracking_status == 0)
+            continue;
+        num_valid_points++;
+        if (new_points[i].tracking_status == 0)
+        {
+            num_lost++;
+            continue;
+        }
+        num_tracked_points++;
+        dx = new_points_ref[i].x - new_points[i].x;
+        dy = new_points_ref[i].y - new_points[i].y;
+        if ((dx * dx + dy * dy) > 2 * 2)
+        {
+            num_errors++;
+        }
+    }
+
+    if (num_lost > (int)(num_valid_points * 0.05f))
+        CT_ADD_FAILURE("Too many lost points: %d (threshold %d)\n",
+                num_lost, (int)(num_valid_points * 0.05f));
+    if (num_errors > (int)(num_tracked_points * 0.10f))
+        CT_ADD_FAILURE("Too many bad points: %d (threshold %d, both tracked points %d)\n",
+                num_errors, (int)(num_tracked_points * 0.10f), num_tracked_points);
+
+#if 0
+    if (CT_HasFailure())
+    {
+        for (i = 0; i < num_points; i++)
+        {
+            printf("i=%d status = %d->%d  x =  %d -> %d ? %d    y = %d -> %d ? %d\n", (int)i,
+                    new_points_ref[i].tracking_status, new_points[i].tracking_status,
+                    old_points[i].x, new_points_ref[i].x, new_points[i].x,
+                    old_points[i].y, new_points_ref[i].y, new_points[i].y);
+        }
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* src1_fileName;
+    const char* src2_fileName;
+    const char* points_fileName;
+    vx_size winSize;
+    int useReferencePyramid;
+} Arg;
+
+
+#define PARAMETERS \
+    ARG("case1/5x5/ReferencePyramid", optflow_pyrlk_read_image, "optflow_00.bmp", "optflow_01.bmp", "optflow_pyrlk_5x5.txt", 5, 1), \
+    ARG("case1/9x9/ReferencePyramid", optflow_pyrlk_read_image, "optflow_00.bmp", "optflow_01.bmp", "optflow_pyrlk_9x9.txt", 9, 1), \
+    ARG("DISABLED_case1/5x5", optflow_pyrlk_read_image, "optflow_00.bmp", "optflow_01.bmp", "optflow_pyrlk_5x5.txt", 5, 0), \
+    ARG("DISABLED_case1/9x9", optflow_pyrlk_read_image, "optflow_00.bmp", "optflow_01.bmp", "optflow_pyrlk_9x9.txt", 9, 0), \
+
+TEST_WITH_ARG(OptFlowPyrLK, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   src_image[2] = { 0, 0 };
+    vx_pyramid src_pyr[2]   = { 0, 0 };
+    vx_array old_points_arr = 0;
+    vx_array new_points_arr = 0;
+    vx_float32 eps_val      = 0.001f;
+    vx_uint32  num_iter_val = 100;
+    vx_bool   use_estimations_val = vx_true_e;
+    vx_scalar eps                 = 0;
+    vx_scalar num_iter            = 0;
+    vx_scalar use_estimations     = 0;
+    vx_size   winSize             = arg_->winSize;
+    vx_graph graph = 0;
+    vx_node src_pyr_node[2] = { 0, 0 };
+    vx_node node = 0;
+
+    vx_size num_points = 0;
+    vx_keypoint_t* old_points = 0;
+    vx_keypoint_t* new_points_ref = 0;
+    vx_keypoint_t* new_points = 0;
+    vx_size new_points_size = 0;
+
+    vx_size max_window_dim = 0;
+
+    CT_Image src_ct_image[2] = {0, 0};
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_OPTICAL_FLOW_MAX_WINDOW_DIMENSION, &max_window_dim, sizeof(max_window_dim)));
+    if (winSize > max_window_dim)
+    {
+        printf("%d window dim is not supported. Skip test\n", (int)winSize);
+        return;
+    }
+
+    ASSERT_NO_FAILURE(src_ct_image[0] = arg_->generator(arg_->src1_fileName, 0, 0));
+    ASSERT_NO_FAILURE(src_ct_image[1] = arg_->generator(arg_->src2_fileName, 0, 0));
+
+    ASSERT_VX_OBJECT(src_image[0] = ct_image_to_vx_image(src_ct_image[0], context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src_image[1] = ct_image_to_vx_image(src_ct_image[1], context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(src_pyr[0] = vxCreatePyramid(context, 4, VX_SCALE_PYRAMID_HALF, src_ct_image[0]->width, src_ct_image[0]->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(src_pyr[1] = vxCreatePyramid(context, 4, VX_SCALE_PYRAMID_HALF, src_ct_image[0]->width, src_ct_image[0]->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+
+    ASSERT_NO_FAILURE(num_points = own_read_keypoints(arg_->points_fileName, &old_points, &new_points_ref));
+
+    ASSERT_VX_OBJECT(old_points_arr = own_create_keypoint_array(context, num_points, old_points), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(new_points_arr = vxCreateArray(context, VX_TYPE_KEYPOINT, num_points), VX_TYPE_ARRAY);
+
+    ASSERT_VX_OBJECT(eps             = vxCreateScalar(context, VX_TYPE_FLOAT32, &eps_val), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(num_iter        = vxCreateScalar(context, VX_TYPE_UINT32, &num_iter_val), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(use_estimations = vxCreateScalar(context, VX_TYPE_BOOL, &use_estimations_val), VX_TYPE_SCALAR);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    if (arg_->useReferencePyramid)
+    {
+        vx_border_t border = { VX_BORDER_REPLICATE };
+        ASSERT_NO_FAILURE(gaussian_pyramid_fill_reference(src_ct_image[0], src_pyr[0], 4, VX_SCALE_PYRAMID_HALF, border));
+        ASSERT_NO_FAILURE(gaussian_pyramid_fill_reference(src_ct_image[1], src_pyr[1], 4, VX_SCALE_PYRAMID_HALF, border));
+    }
+    else
+    {
+#if 0
+        ASSERT_VX_OBJECT(src_pyr_node[0] = vxGaussianPyramidNode(graph, src_image[0], src_pyr[0]), VX_TYPE_NODE);
+        ASSERT_VX_OBJECT(src_pyr_node[1] = vxGaussianPyramidNode(graph, src_image[1], src_pyr[1]), VX_TYPE_NODE);
+#else
+        VX_CALL(vxuGaussianPyramid(context, src_image[0], src_pyr[0]));
+        VX_CALL(vxuGaussianPyramid(context, src_image[1], src_pyr[1]));
+#endif
+    }
+
+    ASSERT_VX_OBJECT(node = vxOpticalFlowPyrLKNode(
+        graph,
+        src_pyr[0], src_pyr[1],
+        old_points_arr, old_points_arr, new_points_arr,
+        VX_TERM_CRITERIA_BOTH, eps, num_iter, use_estimations, winSize), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+    VX_CALL(vxProcessGraph(graph)); // it is ok to call processing twice, isn't it?
+
+    ASSERT(VX_TYPE_KEYPOINT == ct_read_array(new_points_arr, (void**)&new_points, 0, &new_points_size, 0));
+    ASSERT(new_points_size == num_points);
+
+    ASSERT_NO_FAILURE(own_keypoints_check(num_points, old_points, new_points_ref, new_points));
+
+    ct_free_mem(new_points);
+    ct_free_mem(new_points_ref);
+    ct_free_mem(old_points);
+
+    VX_CALL(vxReleaseNode(&node));
+    if(src_pyr_node[0])
+        VX_CALL(vxReleaseNode(&src_pyr_node[0]));
+    if(src_pyr_node[1])
+        VX_CALL(vxReleaseNode(&src_pyr_node[1]));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseScalar(&eps));
+    VX_CALL(vxReleaseScalar(&num_iter));
+    VX_CALL(vxReleaseScalar(&use_estimations));
+    VX_CALL(vxReleaseArray(&old_points_arr));
+    VX_CALL(vxReleaseArray(&new_points_arr));
+    VX_CALL(vxReleasePyramid(&src_pyr[0]));
+    VX_CALL(vxReleasePyramid(&src_pyr[1]));
+    VX_CALL(vxReleaseImage(&src_image[0]));
+    VX_CALL(vxReleaseImage(&src_image[1]));
+}
+
+TEST_WITH_ARG(OptFlowPyrLK, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   src_image[2] = {0, 0};
+    vx_pyramid src_pyr[2] = {0, 0};
+    vx_array   old_points_arr = 0;
+    vx_array   new_points_arr = 0;
+    vx_float32 eps_val = 0.001f;
+    vx_uint32  num_iter_val = 100;
+    vx_bool    use_estimations_val = vx_true_e;
+    vx_scalar  eps = 0;
+    vx_scalar  num_iter = 0;
+    vx_scalar  use_estimations = 0;
+    vx_size    winSize = arg_->winSize;
+
+    vx_size num_points = 0;
+    vx_keypoint_t* old_points = 0;
+    vx_keypoint_t* new_points_ref = 0;
+    vx_keypoint_t* new_points = 0;
+    vx_size new_points_size = 0;
+
+    vx_size max_window_dim = 0;
+
+    CT_Image src_ct_image[2] = {0, 0};
+
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_OPTICAL_FLOW_MAX_WINDOW_DIMENSION, &max_window_dim, sizeof(max_window_dim)));
+    if (winSize > max_window_dim)
+    {
+        printf("%d window dim is not supported. Skip test\n", (int)winSize);
+        return;
+    }
+
+    ASSERT_NO_FAILURE(src_ct_image[0] = arg_->generator(arg_->src1_fileName, 0, 0));
+    ASSERT_NO_FAILURE(src_ct_image[1] = arg_->generator(arg_->src2_fileName, 0, 0));
+
+    ASSERT_VX_OBJECT(src_image[0] = ct_image_to_vx_image(src_ct_image[0], context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src_image[1] = ct_image_to_vx_image(src_ct_image[1], context), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(src_pyr[0] = vxCreatePyramid(context, 4, VX_SCALE_PYRAMID_HALF, src_ct_image[0]->width, src_ct_image[0]->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+    ASSERT_VX_OBJECT(src_pyr[1] = vxCreatePyramid(context, 4, VX_SCALE_PYRAMID_HALF, src_ct_image[0]->width, src_ct_image[0]->height, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+
+    ASSERT_NO_FAILURE(num_points = own_read_keypoints(arg_->points_fileName, &old_points, &new_points_ref));
+
+    ASSERT_VX_OBJECT(old_points_arr = own_create_keypoint_array(context, num_points, old_points), VX_TYPE_ARRAY);
+    ASSERT_VX_OBJECT(new_points_arr = vxCreateArray(context, VX_TYPE_KEYPOINT, num_points), VX_TYPE_ARRAY);
+
+    ASSERT_VX_OBJECT(eps             = vxCreateScalar(context, VX_TYPE_FLOAT32, &eps_val), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(num_iter        = vxCreateScalar(context, VX_TYPE_UINT32, &num_iter_val), VX_TYPE_SCALAR);
+    ASSERT_VX_OBJECT(use_estimations = vxCreateScalar(context, VX_TYPE_BOOL, &use_estimations_val), VX_TYPE_SCALAR);
+
+    if (arg_->useReferencePyramid)
+    {
+        vx_border_t border = { VX_BORDER_REPLICATE };
+        ASSERT_NO_FAILURE(gaussian_pyramid_fill_reference(src_ct_image[0], src_pyr[0], 4, VX_SCALE_PYRAMID_HALF, border));
+        ASSERT_NO_FAILURE(gaussian_pyramid_fill_reference(src_ct_image[1], src_pyr[1], 4, VX_SCALE_PYRAMID_HALF, border));
+    }
+    else
+    {
+        VX_CALL(vxuGaussianPyramid(context, src_image[0], src_pyr[0]));
+        VX_CALL(vxuGaussianPyramid(context, src_image[1], src_pyr[1]));
+    }
+
+    VX_CALL(vxuOpticalFlowPyrLK(
+        context,
+        src_pyr[0], src_pyr[1],
+        old_points_arr, old_points_arr, new_points_arr,
+        VX_TERM_CRITERIA_BOTH, eps, num_iter, use_estimations, winSize));
+
+    ASSERT(VX_TYPE_KEYPOINT == ct_read_array(new_points_arr, (void**)&new_points, 0, &new_points_size, 0));
+    ASSERT(new_points_size == num_points);
+
+    ASSERT_NO_FAILURE(own_keypoints_check(num_points, old_points, new_points_ref, new_points));
+
+    ct_free_mem(new_points);
+    ct_free_mem(new_points_ref);
+    ct_free_mem(old_points);
+    VX_CALL(vxReleaseScalar(&eps));
+    VX_CALL(vxReleaseScalar(&num_iter));
+    VX_CALL(vxReleaseScalar(&use_estimations));
+    VX_CALL(vxReleaseArray(&old_points_arr));
+    VX_CALL(vxReleaseArray(&new_points_arr));
+    VX_CALL(vxReleasePyramid(&src_pyr[0]));
+    VX_CALL(vxReleasePyramid(&src_pyr[1]));
+    VX_CALL(vxReleaseImage(&src_image[0]));
+    VX_CALL(vxReleaseImage(&src_image[1]));
+}
+
+TESTCASE_TESTS(OptFlowPyrLK,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+        )
diff --git a/test_conformance/test_phase.c b/test_conformance/test_phase.c
new file mode 100644
index 0000000..ae0e212
--- /dev/null
+++ b/test_conformance/test_phase.c
@@ -0,0 +1,215 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <math.h>
+
+#include "shared_functions.h"
+
+static void reference_phase(CT_Image dx, CT_Image dy, CT_Image phase)
+{
+    uint32_t x, y, width, height, dxstride, dystride, phasestride;
+
+    ASSERT(dx && dy && phase);
+    ASSERT(dx->format == VX_DF_IMAGE_S16 && dy->format == VX_DF_IMAGE_S16 && phase->format == VX_DF_IMAGE_U8);
+    ASSERT(dx->width > 0 && dx->height > 0 &&
+           dx->width == dy->width && dx->height == dy->height &&
+           dx->width == phase->width && dx->height == phase->height);
+    width = dx->width;
+    height = dy->height;
+    dxstride = ct_stride_bytes(dx);
+    dystride = ct_stride_bytes(dy);
+    phasestride = ct_stride_bytes(phase);
+
+    for( y = 0; y < height; y++ )
+    {
+        const int16_t* dxptr = (const int16_t*)(dx->data.y + y*dxstride);
+        const int16_t* dyptr = (const int16_t*)(dy->data.y + y*dystride);
+        uint8_t* phaseptr = (uint8_t*)(phase->data.y + y*phasestride);
+        for( x = 0; x < width; x++ )
+        {
+            double val = atan2(dyptr[x], dxptr[x])*256/(M_PI*2);
+            int ival;
+            if( val < 0 )
+                val += 256.;
+            ival = (int)floor(val + 0.5);
+            if( ival >= 256 )
+                ival -= 256;
+            phaseptr[x] = CT_CAST_U8(ival);
+        }
+    }
+}
+
+
+TESTCASE(Phase, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    int use_sobel;
+    vx_df_image format;
+} format_arg;
+
+#undef UseSobel
+#undef Random
+#define UseSobel 1
+#define Random 0
+
+#define PHASE_TEST_CASE(imm, sob, tp) \
+    {#imm "/" #sob "/" #tp, CT_##imm##_MODE, sob, VX_DF_IMAGE_##tp}
+
+TEST_WITH_ARG(Phase, testOnRandom, format_arg,
+              PHASE_TEST_CASE(Immediate, UseSobel, S16),
+              PHASE_TEST_CASE(Immediate, Random, S16),
+              PHASE_TEST_CASE(Graph, UseSobel, S16),
+              PHASE_TEST_CASE(Graph, Random, S16),
+              )
+{
+    int dxformat = arg_->format;
+    int mode = arg_->mode;
+    int use_sobel = arg_->use_sobel;
+    int srcformat = dxformat == VX_DF_IMAGE_S16 ? VX_DF_IMAGE_U8 : -1;
+    int phaseformat = dxformat == VX_DF_IMAGE_S16 ? VX_DF_IMAGE_U8 : -1;
+    vx_image presrc=0, src=0, dx=0, dy=0, phase=0;
+    CT_Image src0, dx0, dy0, phase0, phase1;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_context context = context_->vx_context_;
+    int iter, niters = 100;
+    uint64_t rng;
+    int srcmin = 0, srcmax = 256;
+    int dxmin = -32768, dxmax = 32768;
+    vx_border_t border;
+
+    ASSERT( srcformat != -1 && phaseformat != -1 );
+    rng = CT()->seed_;
+    border.mode = //VX_BORDER_MODE_UNDEFINED;
+                  VX_BORDER_REPLICATE;
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS,
+                        vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER,
+                                              &border, sizeof(border)));
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width = ct_roundf(ct_log_rng(&rng, 0, 10));
+        int height = ct_roundf(ct_log_rng(&rng, 0, 10));
+
+        width = CT_MAX(width, 1);
+        height = CT_MAX(height, 1);
+
+        if( !ct_check_any_size() )
+        {
+            width = CT_MIN((width + 7) & -8, 640);
+            height = CT_MIN((height + 7) & -8, 480);
+        }
+
+        ct_update_progress(iter, niters);
+
+        if( use_sobel )
+        {
+            CT_Image box_img;
+
+            width = CT_MAX(width, 3);
+            height = CT_MAX(height, 3);
+
+            ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, srcformat, &rng, srcmin, srcmax));
+            ASSERT_EQ_INT(VX_DF_IMAGE_S16, dxformat);
+            ASSERT_NO_FAILURE(box_img = box3x3_create_reference_image(src0, border));
+            ASSERT_NO_FAILURE(sobel3x3_create_reference_image(box_img, border, &dx0, &dy0));
+
+            if( border.mode == VX_BORDER_UNDEFINED )
+            {
+                width -= 2;
+                height -= 2;
+                ASSERT_NO_FAILURE(ct_adjust_roi(dx0, 1, 1, 1, 1));
+                ASSERT_NO_FAILURE(ct_adjust_roi(dy0, 1, 1, 1, 1));
+            }
+
+            if (NULL != dx)
+                VX_CALL(vxReleaseImage(&dx));
+
+            if (NULL != dy)
+                VX_CALL(vxReleaseImage(&dy));
+        }
+        else
+        {
+            int k, maxk = CT_RNG_NEXT_INT(rng, 0, 20);
+            int extreme_vals[] = { dxmin, 0, dxmax };
+            ASSERT_NO_FAILURE(dx0 = ct_allocate_ct_image_random(width, height, dxformat, &rng, dxmin, dxmax));
+            ASSERT_NO_FAILURE(dy0 = ct_allocate_ct_image_random(width, height, dxformat, &rng, dxmin, dxmax));
+
+            // add some extreme points to the generated Images
+            for( k = 0; k < maxk; k++ )
+            {
+                int x = CT_RNG_NEXT_INT(rng, 0, width);
+                int y = CT_RNG_NEXT_INT(rng, 0, height);
+                int dxval = extreme_vals[CT_RNG_NEXT_INT(rng, 0, 3)];
+                int dyval = extreme_vals[CT_RNG_NEXT_INT(rng, 0, 3)];
+                dx0->data.s16[dx0->stride*y + x] = (int16_t)dxval;
+                dy0->data.s16[dy0->stride*y + x] = (int16_t)dyval;
+            }
+            presrc = src = 0;
+        }
+
+        dx = ct_image_to_vx_image(dx0, context);
+        ASSERT_VX_OBJECT(dx, VX_TYPE_IMAGE);
+        dy = ct_image_to_vx_image(dy0, context);
+        ASSERT_VX_OBJECT(dy, VX_TYPE_IMAGE);
+
+        ASSERT_NO_FAILURE(phase0 = ct_allocate_image(width, height, phaseformat));
+        ASSERT_NO_FAILURE(reference_phase(dx0, dy0, phase0));
+        phase = vxCreateImage(context, width, height, phaseformat);
+        ASSERT_VX_OBJECT(phase, VX_TYPE_IMAGE);
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuPhase(context, dx, dy, phase));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxPhaseNode(graph, dx, dy, phase);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+        }
+        phase1 = ct_image_from_vx_image(phase);
+
+        ASSERT_CTIMAGE_NEARWRAP(phase0, phase1, 1, 0);
+        if(presrc)
+            VX_CALL(vxReleaseImage(&presrc));
+        if(src)
+            VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dx));
+        VX_CALL(vxReleaseImage(&dy));
+        VX_CALL(vxReleaseImage(&phase));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+}
+
+TESTCASE_TESTS(Phase, testOnRandom)
diff --git a/test_conformance/test_remap.c b/test_conformance/test_remap.c
new file mode 100644
index 0000000..b28752d
--- /dev/null
+++ b/test_conformance/test_remap.c
@@ -0,0 +1,857 @@
+/*
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include <math.h>
+#include <float.h>
+
+TESTCASE(Remap, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(Remap, testNodeCreation)
+{
+    vx_uint32 i;
+    vx_uint32 j;
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, output = 0;
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+    vx_uint32 dst_width;
+    vx_uint32 dst_height;
+    vx_remap map = 0;
+    vx_enum attr_name[] =
+    {
+        VX_REMAP_SOURCE_WIDTH,
+        VX_REMAP_SOURCE_HEIGHT,
+        VX_REMAP_DESTINATION_WIDTH,
+        VX_REMAP_DESTINATION_HEIGHT
+    };
+    vx_uint32 attr_val[4];
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum interp = VX_INTERPOLATION_NEAREST_NEIGHBOR;
+
+    src_width = 16;
+    src_height = 32;
+    dst_width = 128;
+    dst_height = 64;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, src_width, src_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, dst_width, dst_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    map = vxCreateRemap(context, src_width, src_height, dst_width, dst_height);
+    ASSERT_VX_OBJECT(map, VX_TYPE_REMAP);
+
+    vx_rectangle_t rect = { 0, 0, dst_width, dst_height};
+    vx_size stride = dst_width;
+    vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+    vx_size size = stride * dst_height;
+    vx_coordinates2df_t *ptr_w = ct_calloc(size, sizeof(vx_coordinates2df_t));
+    ASSERT(ptr_w);
+
+    for (i = 0; i < dst_height; i++)
+    {
+        for (j = 0; j < dst_width; j++)
+        {
+            vx_coordinates2df_t *coord_ptr = &(ptr_w[i * stride + j]);
+            coord_ptr->x = (vx_float32)j;
+            coord_ptr->y = (vx_float32)i;
+        }
+    }
+
+    VX_CALL(vxCopyRemapPatch(map, &rect, stride_y, ptr_w, VX_TYPE_COORDINATES2DF, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+    ct_free_mem(ptr_w);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxRemapNode(graph, input, map, interp, output);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+    VX_CALL(vxQueryRemap(map, attr_name[0], &attr_val[0], sizeof(attr_val[0])));
+    if (attr_val[0] != src_width)
+    {
+        CT_FAIL("check for remap attribute VX_REMAP_SOURCE_WIDTH failed\n");
+    }
+    VX_CALL(vxQueryRemap(map, attr_name[1], &attr_val[1], sizeof(attr_val[1])));
+    if (attr_val[1] != src_height)
+    {
+        CT_FAIL("check for remap attribute VX_REMAP_SOURCE_HEIGHT failed\n");
+    }
+    VX_CALL(vxQueryRemap(map, attr_name[2], &attr_val[2], sizeof(attr_val[2])));
+    if (attr_val[2] != dst_width)
+    {
+        CT_FAIL("check for remap attribute VX_REMAP_DESTINATION_WIDTH failed\n");
+    }
+    VX_CALL(vxQueryRemap(map, attr_name[3], &attr_val[3], sizeof(attr_val[3])));
+    if (attr_val[3] != dst_height)
+    {
+        CT_FAIL("check for remap attribute VX_REMAP_DESTINATION_HEIGHT failed\n");
+    }
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(output == 0);
+    ASSERT(map == 0);
+    ASSERT(input == 0);
+}
+
+#define SRC_WIDTH       128
+#define SRC_HEIGHT      128
+
+#define VX_MAP_IDENT         0
+#define VX_MAP_SCALE         1
+#define VX_MAP_SCALE_ROTATE  2
+#define VX_MAP_RANDOM        3
+
+#define VX_NN_AREA_SIZE         1.5
+#define VX_BILINEAR_TOLERANCE   1
+
+static CT_Image remap_read_image_8u(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+
+    return image;
+}
+
+static CT_Image remap_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+#define RND_FLT(low, high)      (vx_float32)CT_RNG_NEXT_REAL(CT()->seed_, low, high);
+
+static vx_remap remap_generate_map(vx_context context, int src_width, int src_height, int dst_width, int dst_height, int type)
+{
+    vx_uint32 i;
+    vx_uint32 j;
+    vx_float32 x;
+    vx_float32 y;
+    vx_remap map = 0;
+
+    map = vxCreateRemap(context, src_width, src_height, dst_width, dst_height);
+    if (vxGetStatus((vx_reference)map) == VX_SUCCESS)
+    {
+        vx_float32 mat[3][2];
+        vx_float32 angle, scale_x, scale_y, cos_a, sin_a;
+        if (VX_MAP_IDENT == type)
+        {
+            mat[0][0] = 1.f;
+            mat[0][1] = 0.f;
+
+            mat[1][0] = 0.f;
+            mat[1][1] = 1.f;
+
+            mat[2][0] = 0.f;
+            mat[2][1] = 0.f;
+        }
+        else if (VX_MAP_SCALE == type)
+        {
+            scale_x = src_width  / (vx_float32)dst_width;
+            scale_y = src_height / (vx_float32)dst_height;
+
+            mat[0][0] = scale_x;
+            mat[0][1] = 0.f;
+
+            mat[1][0] = 0.f;
+            mat[1][1] = scale_y;
+
+            mat[2][0] = 0.f;
+            mat[2][1] = 0.f;
+        }
+        else if (VX_MAP_SCALE_ROTATE == type)
+        {
+            angle = M_PIF / RND_FLT(3.f, 6.f);
+            scale_x = src_width  / (vx_float32)dst_width;
+            scale_y = src_height / (vx_float32)dst_height;
+            cos_a = cosf(angle);
+            sin_a = sinf(angle);
+
+            mat[0][0] = cos_a * scale_x;
+            mat[0][1] = sin_a * scale_y;
+
+            mat[1][0] = -sin_a * scale_x;
+            mat[1][1] = cos_a  * scale_y;
+
+            mat[2][0] = 0.f;
+            mat[2][1] = 0.f;
+        }
+        else// if (VX_MATRIX_RANDOM == type)
+        {
+            angle = M_PIF / RND_FLT(3.f, 6.f);
+            scale_x = src_width / (vx_float32)dst_width;
+            scale_y = src_height / (vx_float32)dst_height;
+            cos_a = cosf(angle);
+            sin_a = sinf(angle);
+
+            mat[0][0] = cos_a * RND_FLT(scale_x / 2.f, scale_x);
+            mat[0][1] = sin_a * RND_FLT(scale_y / 2.f, scale_y);
+
+            mat[1][0] = -sin_a * RND_FLT(scale_y / 2.f, scale_y);
+            mat[1][1] = cos_a  * RND_FLT(scale_x / 2.f, scale_x);
+
+            mat[2][0] = src_width  / 5.f * RND_FLT(-1.f, 1.f);
+            mat[2][1] = src_height / 5.f * RND_FLT(-1.f, 1.f);
+        }
+
+
+        vx_rectangle_t rect = { 0, 0, dst_width, dst_height};
+        vx_size stride = dst_width;
+        vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+        vx_size size = stride * dst_height;
+        vx_coordinates2df_t *ptr_w = ct_calloc(size, sizeof(vx_coordinates2df_t));
+        ASSERT_(return 0, ptr_w);
+
+        for (i = 0; i < (vx_uint32)dst_height; i++)
+        {
+            for (j = 0; j < (vx_uint32)dst_width; j++)
+            {
+                x = j * mat[0][0] + i * mat[1][0] + mat[2][0];
+                y = j * mat[0][1] + i * mat[1][1] + mat[2][1];
+                vx_coordinates2df_t *coord_ptr = &(ptr_w[i * stride + j]);
+                coord_ptr->x = x;
+                coord_ptr->y = y;
+            }
+        }
+
+        vxCopyRemapPatch(map, &rect, stride_y, ptr_w, VX_TYPE_COORDINATES2DF, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);    
+        ct_free_mem(ptr_w);
+    }
+
+    return map;
+}
+
+
+static int remap_check_pixel(CT_Image input, CT_Image output, int x, int y, vx_float32 _x0,
+     vx_float32 _y0, vx_enum interp_type, vx_border_t border, vx_remap map, vx_bool do_report)
+{
+    vx_float64 x0, y0, xlower, ylower, s, t;
+    vx_int32 xi, yi;
+    int candidate;
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(output, x, y);
+
+    x0 = (vx_float64)_x0;
+    y0 = (vx_float64)_y0;
+
+    if (VX_INTERPOLATION_NEAREST_NEIGHBOR == interp_type)
+    {
+        for (yi = (vx_int32)ceil(y0 - VX_NN_AREA_SIZE); (vx_float64)yi <= y0 + VX_NN_AREA_SIZE; yi++)
+        {
+            for (xi = (vx_int32)ceil(x0 - VX_NN_AREA_SIZE); (vx_float64)xi <= x0 + VX_NN_AREA_SIZE; xi++)
+            {
+                if (0 <= xi && 0 <= yi && xi < (vx_int32)input->width && yi < (vx_int32)input->height)
+                {
+                    candidate = *CT_IMAGE_DATA_PTR_8U(input, xi, yi);
+                }
+                else if (VX_BORDER_CONSTANT == border.mode)
+                {
+                    candidate = border.constant_value.U8;
+                }
+                else if (VX_BORDER_REPLICATE == border.mode)
+                {
+                    candidate = CT_IMAGE_DATA_REPLICATE_8U(input, xi, yi);
+                }
+                else
+                {
+                    candidate = -1;
+                }
+                if (candidate == -1 || candidate == res)
+                    return 0;
+            }
+        }
+        if (do_report)
+            CT_FAIL_(return 1, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+        else
+            return 1;
+    }
+    else if (VX_INTERPOLATION_BILINEAR == interp_type)
+    {
+        xlower = floor(x0);
+        ylower = floor(y0);
+
+        s = x0 - xlower;
+        t = y0 - ylower;
+
+        xi = (vx_int32)xlower;
+        yi = (vx_int32)ylower;
+
+        candidate = -1;
+        if (VX_BORDER_UNDEFINED == border.mode)
+        {
+            if (xi >= 0 && yi >= 0 && xi < (vx_int32)input->width - 1 && yi < (vx_int32)input->height - 1)
+            {
+                candidate = (int)((1. - s) * (1. - t) * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi    , yi    ) +
+                                        s  * (1. - t) * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi + 1, yi    ) +
+                                  (1. - s) *       t  * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi    , yi + 1) +
+                                        s  *       t  * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi + 1, yi + 1));
+            }
+        }
+        else if (VX_BORDER_CONSTANT == border.mode)
+        {
+            candidate = (int)((1. - s) * (1. - t) * (vx_float64)CT_IMAGE_DATA_CONSTANT_8U(input, xi    , yi    , border.constant_value.U8) +
+                                    s  * (1. - t) * (vx_float64)CT_IMAGE_DATA_CONSTANT_8U(input, xi + 1, yi    , border.constant_value.U8) +
+                              (1. - s) *       t  * (vx_float64)CT_IMAGE_DATA_CONSTANT_8U(input, xi    , yi + 1, border.constant_value.U8) +
+                                    s  *       t  * (vx_float64)CT_IMAGE_DATA_CONSTANT_8U(input, xi + 1, yi + 1, border.constant_value.U8));
+        }
+        else if (VX_BORDER_REPLICATE == border.mode)
+        {
+            candidate = (int)((1. - s) * (1. - t) * (vx_float64)CT_IMAGE_DATA_REPLICATE_8U(input, xi    , yi    ) +
+                                    s  * (1. - t) * (vx_float64)CT_IMAGE_DATA_REPLICATE_8U(input, xi + 1, yi    ) +
+                              (1. - s) *       t  * (vx_float64)CT_IMAGE_DATA_REPLICATE_8U(input, xi    , yi + 1) +
+                                    s  *       t  * (vx_float64)CT_IMAGE_DATA_REPLICATE_8U(input, xi + 1, yi + 1));
+        }
+        if (candidate == -1 || (abs(candidate - res) <= VX_BILINEAR_TOLERANCE))
+            return 0;
+        return 1;
+    }
+    if (do_report)
+        CT_FAIL_(return 1, "Interpolation type undefined");
+    else
+        return 1;
+}
+
+static void remap_validate(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_remap map)
+{
+    vx_uint32 err_count = 0;
+
+    ASSERT(output != NULL);
+    ASSERT(output->format == VX_DF_IMAGE_U8);
+    ASSERT(output->width > 0);
+    ASSERT(output->height > 0);
+    {
+        vx_rectangle_t rect = { 0, 0, output->width, output->height};
+        vx_size stride = output->width;
+        vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+        vx_size size = stride * output->height;
+        vx_coordinates2df_t *ptr_r = ct_calloc(size, sizeof(vx_coordinates2df_t));
+        ASSERT(ptr_r);
+        vxCopyRemapPatch(map, &rect, stride_y, ptr_r, VX_TYPE_COORDINATES2DF, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+        uint32_t x, y;
+        for (y = 0; y < output->height; y++) {
+            for (x = 0; x < output->width; x++) {
+                uint8_t* dst_data = CT_IMAGE_DATA_PTR_8U(output, x, y); (void)dst_data;
+                {
+                    vx_coordinates2df_t *coord_ptr = &(ptr_r[y * stride + x]);
+                    ASSERT_NO_FAILURE(err_count += remap_check_pixel(input, output, x, y, coord_ptr->x, coord_ptr->y,
+                                                                     interp_type, border, map, vx_true_e));
+                }
+            }
+        }
+        ct_free_mem(ptr_r);
+    }
+
+    if (10 * err_count > output->width * output->height)
+        CT_FAIL_(return, "Check failed for %d pixels", err_count);
+}
+
+static vx_bool remap_is_equal(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_remap map)
+{
+    if( (output != NULL) &&
+        (output->format == VX_DF_IMAGE_U8) &&
+        (output->width > 0) &&
+        (output->height > 0))
+    {
+        vx_rectangle_t rect = { 0, 0, output->width, output->height};
+        vx_size stride = output->width;
+        vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride);
+        vx_size size = stride * output->height;
+        vx_coordinates2df_t *ptr_r = ct_calloc(size, sizeof(vx_coordinates2df_t));
+        ASSERT_(return vx_false_e, ptr_r);
+        vxCopyRemapPatch(map, &rect, stride_y, ptr_r, VX_TYPE_COORDINATES2DF, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+        uint32_t x, y;
+        for (y = 0; y < output->height; y++) {
+            for (x = 0; x < output->width; x++) {
+                uint8_t* dst_data = CT_IMAGE_DATA_PTR_8U(output, x, y); (void)dst_data;
+                {
+                    vx_coordinates2df_t *coord_ptr = &(ptr_r[y * stride + x]);
+                    if (0 != remap_check_pixel(input, output, x, y, coord_ptr->x, coord_ptr->y,
+                                               interp_type, border, map, vx_false_e))
+                    {
+                        ct_free_mem(ptr_r);
+                        return vx_false_e;
+                    }
+                }
+            }
+        }
+        ct_free_mem(ptr_r);
+        return vx_true_e;
+    }
+    else
+    {
+        return vx_false_e;
+    }
+}
+
+static void remap_check(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_remap map)
+{
+    ASSERT(input && output);
+    ASSERT( (interp_type == VX_INTERPOLATION_NEAREST_NEIGHBOR) ||
+            (interp_type == VX_INTERPOLATION_BILINEAR));
+
+    ASSERT( (border.mode == VX_BORDER_UNDEFINED) ||
+            (border.mode == VX_BORDER_CONSTANT) );
+
+    remap_validate(input, output, interp_type, border, map);
+    if (CT_HasFailure())
+    {
+        printf("=== INPUT ===\n");
+        ct_dump_image_info(input);
+        printf("=== OUTPUT ===\n");
+        ct_dump_image_info(output);
+    }
+}
+
+static void remap_check_param(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_remap map)
+{
+    ASSERT(input && output);
+    ASSERT( (interp_type == VX_INTERPOLATION_NEAREST_NEIGHBOR) ||
+            (interp_type == VX_INTERPOLATION_BILINEAR));
+
+    ASSERT( (border.mode == VX_BORDER_UNDEFINED) ||
+            (border.mode == VX_BORDER_CONSTANT) ||
+            (border.mode == VX_BORDER_REPLICATE) );
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char*      fileName;
+    int width, height;
+    vx_border_t border;
+    vx_enum border_policy;
+    vx_enum interp_type;
+    int map_type;
+} Arg;
+
+#define ADD_VX_BORDERS_REMAP_FULL(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_UNDEFINED", __VA_ARGS__, { VX_BORDER_UNDEFINED, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=0", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=1", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 1 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=127", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 127 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=255", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 255 }} }))
+
+#define ADD_VX_BORDERS_REMAP_SMALL(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_UNDEFINED", __VA_ARGS__, { VX_BORDER_UNDEFINED, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=127", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 127 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_REPLICATE", __VA_ARGS__, { VX_BORDER_REPLICATE, {{ 0 }} }))
+
+#define ADD_VX_BORDERS_POLICY(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/DEFAULT_TO_UNDEFINED", __VA_ARGS__, VX_BORDER_POLICY_DEFAULT_TO_UNDEFINED)), \
+    CT_EXPAND(nextmacro(testArgName "/RETURN_ERROR", __VA_ARGS__, VX_BORDER_POLICY_RETURN_ERROR))
+
+#define ADD_VX_BORDERS_NO_POLICY(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "", __VA_ARGS__, (vx_enum)0))
+
+#define ADD_VX_INTERP_TYPE_REMAP(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_NEAREST_NEIGHBOR", __VA_ARGS__, VX_INTERPOLATION_NEAREST_NEIGHBOR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_BILINEAR", __VA_ARGS__, VX_INTERPOLATION_BILINEAR ))
+
+#define ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_NEAREST_NEIGHBOR", __VA_ARGS__, VX_INTERPOLATION_NEAREST_NEIGHBOR))
+
+#define ADD_VX_INTERPOLATION_TYPE_BILINEAR(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_BILINEAR", __VA_ARGS__, VX_INTERPOLATION_BILINEAR ))
+
+#define ADD_VX_MAP_PARAM_REMAP_FULL(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_MAP_IDENT", __VA_ARGS__,        VX_MAP_IDENT)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MAP_SCALE", __VA_ARGS__,        VX_MAP_SCALE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MAP_SCALE_ROTATE", __VA_ARGS__, VX_MAP_SCALE_ROTATE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MAP_RANDOM", __VA_ARGS__,       VX_MAP_RANDOM))
+
+#define ADD_VX_MAP_PARAM_REMAP_SMALL(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_MAP_IDENT", __VA_ARGS__,        VX_MAP_IDENT))
+
+#define REMAP_PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_REMAP_FULL, ADD_VX_BORDERS_NO_POLICY, ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR, ADD_VX_MAP_PARAM_REMAP_FULL, ARG, remap_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_REMAP_FULL, ADD_VX_BORDERS_NO_POLICY, ADD_VX_INTERP_TYPE_REMAP, ADD_VX_MAP_PARAM_REMAP_FULL, ARG, remap_read_image_8u, "lena.bmp")
+
+#define POLICY_PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_REMAP_SMALL, ADD_VX_BORDERS_POLICY, ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR, ADD_VX_MAP_PARAM_REMAP_SMALL, ARG, remap_generate_random, NULL)
+
+TEST_WITH_ARG(Remap, testGraphProcessing, Arg,
+    REMAP_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_image input_image = 0, output_image = 0;
+    vx_remap map = 0;
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, SRC_WIDTH, SRC_HEIGHT));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(map = remap_generate_map(context, input->width, input->height, arg_->width, arg_->height, arg_->map_type), VX_TYPE_REMAP);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxRemapNode(graph, input_image, map, arg_->interp_type, output_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+    ASSERT_NO_FAILURE(remap_check(input, output, arg_->interp_type, arg_->border, map));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(map == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(Remap, testImmediateProcessing, Arg,
+    REMAP_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    vx_remap map = 0;
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, SRC_WIDTH, SRC_HEIGHT));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(map = remap_generate_map(context, input->width, input->height, arg_->width, arg_->height, arg_->map_type), VX_TYPE_REMAP);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuRemap(context, input_image, map, arg_->interp_type, output_image));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    ASSERT_NO_FAILURE(remap_check(input, output, arg_->interp_type, arg_->border, map));
+
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(map == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(Remap, testImmediatePolicy, Arg,
+    POLICY_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    vx_remap map = 0;
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+    vx_enum border_policy = arg_->border_policy;
+    vx_enum actual_policy = border_policy;
+
+    vx_status expected_status = VX_SUCCESS;
+    vx_status status = VX_SUCCESS;
+    vx_border_t checked_border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, SRC_WIDTH, SRC_HEIGHT));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(map = remap_generate_map(context, input->width, input->height, arg_->width, arg_->height, arg_->map_type), VX_TYPE_REMAP);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    /* Now VX_CONTEXT_IMMEDIATE_BORDER_POLICY is readonly */
+    /* VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER_POLICY, &border_policy, sizeof(border_policy))); */
+    VX_CALL(vxQueryContext(context, VX_CONTEXT_IMMEDIATE_BORDER_POLICY, &actual_policy, sizeof(actual_policy)));
+    border_policy = actual_policy;
+
+    status = vxuRemap(context, input_image, map, arg_->interp_type, output_image);
+
+    checked_border = border;
+    if (border.mode == VX_BORDER_REPLICATE)
+    {
+        checked_border.mode = VX_BORDER_UNDEFINED;
+        switch (border_policy)
+        {
+        case VX_BORDER_POLICY_DEFAULT_TO_UNDEFINED:
+            expected_status = VX_SUCCESS;
+            break;
+        case VX_BORDER_POLICY_RETURN_ERROR:
+            expected_status = VX_ERROR_NOT_SUPPORTED;
+            break;
+        default:
+            expected_status = VX_FAILURE;
+            break;
+        }
+    }
+    else
+    {
+        expected_status = VX_SUCCESS;
+    }
+        
+    if (status == VX_SUCCESS)
+    {
+        ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+        if ((border.mode == VX_BORDER_REPLICATE) && (checked_border.mode != border.mode))
+        {
+            /* In case of VX_BORDER_POLICY_DEFAULT_TO_UNDEFINED vxu function can return VX_SUCCESS in both cases
+             * a) it supports VX_BORDER_REPLICATE, and VX_BORDER_REPLICATE actually used;
+             * b) it doesn't support VX_BORDER_REPLICATE, and VX_BORDER_UNDEFINED actually used instead.
+             * Using API we can't distingish the cases, so we must check both
+             */
+            vx_bool equal = vx_false_e;
+            ASSERT_NO_FAILURE(remap_check_param(input, output, arg_->interp_type, border, map));
+            equal = remap_is_equal(input, output, arg_->interp_type, border, map);
+            if (equal == vx_false_e)
+                equal = remap_is_equal(input, output, arg_->interp_type, checked_border, map);
+            if (equal == vx_false_e)
+                ASSERT_NO_FAILURE(remap_check(input, output, arg_->interp_type, border, map));
+        }
+        else
+        {
+            ASSERT_NO_FAILURE(remap_check(input, output, arg_->interp_type, border, map));
+        }
+    }
+    else
+    {
+        ASSERT_EQ_VX_STATUS(expected_status, status);
+    }
+
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(map == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST(Remap, testNodeVirtualCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_uint32 src_width;
+    vx_uint32 src_height;
+    vx_uint32 dst_width;
+    vx_uint32 dst_height;
+    vx_remap map = 0;
+    vx_graph graph = 0;
+
+    src_width = 16;
+    src_height = 32;
+    dst_width = 128;
+    dst_height = 64;
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    map = vxCreateVirtualRemap(graph, src_width, src_height, dst_width, dst_height);
+    ASSERT_VX_OBJECT(map, VX_TYPE_REMAP);
+
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseRemap(&map));
+
+    ASSERT(graph == 0);
+    ASSERT(map == 0);
+}
+
+/* ******************vxCopyRemapPatch tests*****************/
+TESTCASE(vxCopyRemapPatch, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(vxCopyRemapPatch, testCopyRandomReamp)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    vx_remap map = 0;
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border;
+    border.mode = VX_BORDER_UNDEFINED;
+
+    vx_size src_width = 16;
+    vx_size src_height = 32;
+    vx_size dst_width = 128;
+    vx_size dst_height = 64;
+
+    //first: Create 'input' and 'output' images no need to have them big .
+    //       Initialize 'input' with some values(preferably different for each pixel).
+    //       Initialize 'output' with 0.
+    ASSERT_NO_FAILURE(input = remap_generate_random("remap", src_width, src_height));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(dst_width, dst_height, VX_DF_IMAGE_U8));
+
+    //second: Create a remap object and initialize the remap object with some values(copy 'WRITE'),
+    //        preferably different for each cooridinate
+    //        Read the remap object (copy 'READ') into a buffer different form the one use for the WRITE, and check that it's OK
+    //        (if not different, the READ could do nothing and have correct result)
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(map = remap_generate_map(context, input->width, input->height, output->width, output->height, VX_MAP_IDENT), VX_TYPE_REMAP);
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    //third: Execute a graph with a 'remap' node
+    VX_CALL(vxuRemap(context, input_image, map, VX_INTERPOLATION_NEAREST_NEIGHBOR, output_image));
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    //fourth: Check that the content of the 'output' image is consistent with the input image
+    //        and the values copied into the remap object
+    ASSERT_NO_FAILURE(remap_check(input, output, VX_INTERPOLATION_NEAREST_NEIGHBOR, border, map));
+
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(map == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+/* *****************vxMapRemapPatch tests*******************************/
+TESTCASE(vxMapRemapPatch, CT_VXContext, ct_setup_vx_context, 0)
+
+static void remap_validate_for_map(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_remap map)
+{
+    vx_uint32 err_count = 0;
+
+    ASSERT(output != NULL);
+    ASSERT(output->format == VX_DF_IMAGE_U8);
+    ASSERT(output->width > 0);
+    ASSERT(output->height > 0);
+    {
+        vx_rectangle_t rect = { 0, 0, output->width, output->height};
+
+        vx_size map_stride_y = 0;
+        vx_coordinates2df_t *ptr_r = 0;
+        vx_map_id map_id;
+        vxMapRemapPatch(map, &rect, &map_id, &map_stride_y, (void **)&ptr_r, VX_TYPE_COORDINATES2DF, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+        uint32_t x, y;
+        for (y = 0; y < output->height; y++) {
+            for (x = 0; x < output->width; x++) {
+                uint8_t* dst_data = CT_IMAGE_DATA_PTR_8U(output, x, y); (void)dst_data;
+                {
+                    vx_coordinates2df_t *coord_ptr = (vx_coordinates2df_t *)(
+                                ((vx_uint8 *)ptr_r) +
+                                x*sizeof(vx_coordinates2df_t) +
+                                y * map_stride_y /* map in bytes */
+                                );
+                    ASSERT_NO_FAILURE(err_count += remap_check_pixel(input, output, x, y, coord_ptr->x, coord_ptr->y,
+                                                                     interp_type, border, map, vx_true_e));
+                }
+            }
+        }
+
+        vxUnmapRemapPatch(map, map_id);
+    }
+
+    if (10 * err_count > output->width * output->height)
+        CT_FAIL_(return, "Check failed for %d pixels", err_count);
+}
+
+TEST(vxMapRemapPatch, testMapRandomRemap)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    vx_remap map = 0;
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border;
+    border.mode = VX_BORDER_UNDEFINED;
+
+    vx_size src_width = 16;
+    vx_size src_height = 32;
+    vx_size dst_width = 128;
+    vx_size dst_height = 64;
+
+    //first: Create 'input' and 'output' images no need to have them big .
+    //       Initialize 'input' with some values(preferably different for each pixel).
+    //       Initialize 'output' with 0.
+    ASSERT_NO_FAILURE(input = remap_generate_random("remap", src_width, src_height));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(dst_width, dst_height, VX_DF_IMAGE_U8));
+
+    //second: Create a remap object and initialize the remap object with some values(copy 'WRITE'),
+    //        preferably different for each cooridinate
+    //        Read the remap object (copy 'READ') into a buffer different form the one use for the WRITE, and check that it's OK
+    //        (if not different, the READ could do nothing and have correct result)
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(map = remap_generate_map(context, input->width, input->height, output->width, output->height, VX_MAP_IDENT), VX_TYPE_REMAP);
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    //third: Execute a graph with a 'remap' node
+    VX_CALL(vxuRemap(context, input_image, map, VX_INTERPOLATION_NEAREST_NEIGHBOR, output_image));
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    //fourth: Check that the content of the 'output' image is consistent with the input image
+    //        and the values copied into the remap object
+    ASSERT_NO_FAILURE(remap_validate_for_map(input, output, VX_INTERPOLATION_NEAREST_NEIGHBOR, border, map));
+
+    VX_CALL(vxReleaseRemap(&map));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(map == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(Remap,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing,
+        testImmediatePolicy,
+        testNodeVirtualCreation
+)
+
+TESTCASE_TESTS(vxCopyRemapPatch, testCopyRandomReamp)
+TESTCASE_TESTS(vxMapRemapPatch, testMapRandomRemap)
+
diff --git a/test_conformance/test_scalar.c b/test_conformance/test_scalar.c
new file mode 100644
index 0000000..eb9944c
--- /dev/null
+++ b/test_conformance/test_scalar.c
@@ -0,0 +1,334 @@
+/*
+
+ * Copyright (c) 2016-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <float.h>
+#include <VX/vx.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(Scalar, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef union
+{
+    vx_char     chr;
+    vx_int8     s08;
+    vx_uint8    u08;
+    vx_int16    s16;
+    vx_uint16   u16;
+    vx_int32    s32;
+    vx_uint32   u32;
+    vx_int64    s64;
+    vx_uint64   u64;
+    vx_float32  f32;
+    vx_float64  f64;
+    vx_enum     enm;
+    vx_size     size;
+    vx_df_image fcc;
+    vx_bool     boolean;
+    vx_uint8    data[8];
+
+} scalar_val;
+
+typedef struct
+{
+    const char* name;
+    vx_enum data_type;
+} format_arg;
+
+static void own_init_scalar_value(vx_enum type, scalar_val* val, vx_bool variant)
+{
+    switch (type)
+    {
+    case VX_TYPE_CHAR:     val->chr = variant == vx_true_e ? 1 : 2; break;
+    case VX_TYPE_INT8:     val->s08 = variant == vx_true_e ? 2 : 3; break;
+    case VX_TYPE_UINT8:    val->u08 = variant == vx_true_e ? 3 : 4; break;
+    case VX_TYPE_INT16:    val->s16 = variant == vx_true_e ? 4 : 5; break;
+    case VX_TYPE_UINT16:   val->u16 = variant == vx_true_e ? 5 : 6; break;
+    case VX_TYPE_INT32:    val->s32 = variant == vx_true_e ? 6 : 7; break;
+    case VX_TYPE_UINT32:   val->u32 = variant == vx_true_e ? 7 : 8; break;
+    case VX_TYPE_INT64:    val->s64 = variant == vx_true_e ? 8 : 9; break;
+    case VX_TYPE_UINT64:   val->u64 = variant == vx_true_e ? 9 : 10; break;
+    case VX_TYPE_FLOAT32:  val->f32 = variant == vx_true_e ? 1.5f : 9.9f; break;
+    case VX_TYPE_FLOAT64:  val->f64 = variant == vx_true_e ? 1.5 : 9.9; break;
+    case VX_TYPE_ENUM:     val->enm = variant == vx_true_e ? VX_BORDER_CONSTANT : VX_BORDER_REPLICATE; break;
+    case VX_TYPE_SIZE:     val->size = variant == vx_true_e ? 10 : 999; break;
+    case VX_TYPE_DF_IMAGE: val->fcc = variant == vx_true_e ? VX_DF_IMAGE_RGB : VX_DF_IMAGE_U8; break;
+    case VX_TYPE_BOOL:     val->boolean = variant == vx_true_e ? vx_true_e : vx_false_e; break;
+
+    default:
+        FAIL("Unsupported type: (%.4s)", &type);
+    }
+    return;
+}
+
+TEST_WITH_ARG(Scalar, testCreateScalar, format_arg,
+    ARG_ENUM(VX_TYPE_CHAR),
+    ARG_ENUM(VX_TYPE_INT8),
+    ARG_ENUM(VX_TYPE_UINT8),
+    ARG_ENUM(VX_TYPE_INT16),
+    ARG_ENUM(VX_TYPE_UINT16),
+    ARG_ENUM(VX_TYPE_INT32),
+    ARG_ENUM(VX_TYPE_UINT32),
+    ARG_ENUM(VX_TYPE_INT64),
+    ARG_ENUM(VX_TYPE_UINT64),
+    ARG_ENUM(VX_TYPE_FLOAT32),
+    ARG_ENUM(VX_TYPE_FLOAT64),
+    ARG_ENUM(VX_TYPE_ENUM),
+    ARG_ENUM(VX_TYPE_SIZE),
+    ARG_ENUM(VX_TYPE_DF_IMAGE),
+    ARG_ENUM(VX_TYPE_BOOL)
+    )
+{
+    vx_context context = context_->vx_context_;
+    vx_scalar  scalar = 0;
+    vx_enum    ref_type = arg_->data_type;
+    scalar_val ref;
+
+    own_init_scalar_value(ref_type, &ref, vx_true_e);
+
+    ASSERT_VX_OBJECT(scalar = vxCreateScalar(context, ref_type, &ref), VX_TYPE_SCALAR);
+
+    VX_CALL(vxReleaseScalar(&scalar));
+
+    ASSERT(scalar == 0);
+
+    return;
+} /* testCreateScalar() */
+
+TEST_WITH_ARG(Scalar, testQueryScalar, format_arg,
+    ARG_ENUM(VX_TYPE_CHAR),
+    ARG_ENUM(VX_TYPE_INT8),
+    ARG_ENUM(VX_TYPE_UINT8),
+    ARG_ENUM(VX_TYPE_INT16),
+    ARG_ENUM(VX_TYPE_UINT16),
+    ARG_ENUM(VX_TYPE_INT32),
+    ARG_ENUM(VX_TYPE_UINT32),
+    ARG_ENUM(VX_TYPE_INT64),
+    ARG_ENUM(VX_TYPE_UINT64),
+    ARG_ENUM(VX_TYPE_FLOAT32),
+    ARG_ENUM(VX_TYPE_FLOAT64),
+    ARG_ENUM(VX_TYPE_ENUM),
+    ARG_ENUM(VX_TYPE_SIZE),
+    ARG_ENUM(VX_TYPE_DF_IMAGE),
+    ARG_ENUM(VX_TYPE_BOOL)
+    )
+{
+    vx_context context   = context_->vx_context_;
+    vx_scalar  scalar    = 0;
+    vx_enum    ref_type = arg_->data_type;
+    vx_enum    tst_type = 0;
+    scalar_val ref;
+
+    own_init_scalar_value(ref_type, &ref, vx_true_e);
+
+    ASSERT_VX_OBJECT(scalar = vxCreateScalar(context, ref_type, &ref), VX_TYPE_SCALAR);
+
+    VX_CALL(vxQueryScalar(scalar, VX_SCALAR_TYPE, &tst_type, sizeof(tst_type)));
+    ASSERT_EQ_INT(ref_type, tst_type);
+
+    VX_CALL(vxReleaseScalar(&scalar));
+
+    ASSERT(scalar == 0);
+
+    return;
+} /* testQueryScalar() */
+
+TEST_WITH_ARG(Scalar, testCopyScalar, format_arg,
+    ARG_ENUM(VX_TYPE_CHAR),
+    ARG_ENUM(VX_TYPE_INT8),
+    ARG_ENUM(VX_TYPE_UINT8),
+    ARG_ENUM(VX_TYPE_INT16),
+    ARG_ENUM(VX_TYPE_UINT16),
+    ARG_ENUM(VX_TYPE_INT32),
+    ARG_ENUM(VX_TYPE_UINT32),
+    ARG_ENUM(VX_TYPE_INT64),
+    ARG_ENUM(VX_TYPE_UINT64),
+    ARG_ENUM(VX_TYPE_FLOAT32),
+    ARG_ENUM(VX_TYPE_FLOAT64),
+    ARG_ENUM(VX_TYPE_ENUM),
+    ARG_ENUM(VX_TYPE_SIZE),
+    ARG_ENUM(VX_TYPE_DF_IMAGE),
+    ARG_ENUM(VX_TYPE_BOOL)
+    )
+{
+    vx_context context   = context_->vx_context_;
+    vx_scalar  scalar    = 0;
+    vx_enum    type = arg_->data_type;
+    scalar_val val1;
+    scalar_val val2;
+    scalar_val tst;
+
+    own_init_scalar_value(type, &val1, vx_true_e);
+    own_init_scalar_value(type, &val2, vx_false_e);
+
+    ASSERT_VX_OBJECT(scalar = vxCreateScalar(context, type, &val1), VX_TYPE_SCALAR);
+
+    VX_CALL(vxCopyScalar(scalar, &tst, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    switch (type)
+    {
+    case VX_TYPE_CHAR:
+        ASSERT_EQ_INT(val1.chr, tst.chr);
+        break;
+
+    case VX_TYPE_INT8:
+        ASSERT_EQ_INT(val1.s08, tst.s08);
+        break;
+
+    case VX_TYPE_UINT8:
+        ASSERT_EQ_INT(val1.u08, tst.u08);
+        break;
+
+    case VX_TYPE_INT16:
+        ASSERT_EQ_INT(val1.s16, tst.s16);
+        break;
+
+    case VX_TYPE_UINT16:
+        ASSERT_EQ_INT(val1.u16, tst.u16);
+        break;
+
+    case VX_TYPE_INT32:
+        ASSERT_EQ_INT(val1.s32, tst.s32);
+        break;
+
+    case VX_TYPE_UINT32:
+        ASSERT_EQ_INT(val1.u32, tst.u32);
+        break;
+
+    case VX_TYPE_INT64:
+        ASSERT_EQ_INT(val1.s64, tst.s64);
+        break;
+
+    case VX_TYPE_UINT64:
+        ASSERT_EQ_INT(val1.u64, tst.u64);
+        break;
+
+    case VX_TYPE_FLOAT32:
+        ASSERT(fabs(val1.f32 - tst.f32) < 0.000001f);
+        break;
+
+    case VX_TYPE_FLOAT64:
+        ASSERT(fabs(val1.f64 - tst.f64) < 0.000001f);
+        break;
+
+    case VX_TYPE_DF_IMAGE:
+        ASSERT_EQ_INT(val1.fcc, tst.fcc);
+        break;
+
+    case VX_TYPE_ENUM:
+        ASSERT_EQ_INT(val1.enm, tst.enm);
+        break;
+
+    case VX_TYPE_SIZE:
+        ASSERT_EQ_INT(val1.size, tst.size);
+        break;
+
+    case VX_TYPE_BOOL:
+        ASSERT_EQ_INT(val1.boolean, tst.boolean);
+        break;
+
+    default:
+        FAIL("Unsupported type: (%.4s)", &type);
+        break;
+    }
+
+    /* change scalar value */
+    VX_CALL(vxCopyScalar(scalar, &val2, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+    /* read value back */
+    VX_CALL(vxCopyScalar(scalar, &tst, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+    switch (type)
+    {
+    case VX_TYPE_CHAR:
+        ASSERT_EQ_INT(val2.chr, tst.chr);
+        break;
+
+    case VX_TYPE_INT8:
+        ASSERT_EQ_INT(val2.s08, tst.s08);
+        break;
+
+    case VX_TYPE_UINT8:
+        ASSERT_EQ_INT(val2.u08, tst.u08);
+        break;
+
+    case VX_TYPE_INT16:
+        ASSERT_EQ_INT(val2.s16, tst.s16);
+        break;
+
+    case VX_TYPE_UINT16:
+        ASSERT_EQ_INT(val2.u16, tst.u16);
+        break;
+
+    case VX_TYPE_INT32:
+        ASSERT_EQ_INT(val2.s32, tst.s32);
+        break;
+
+    case VX_TYPE_UINT32:
+        ASSERT_EQ_INT(val2.u32, tst.u32);
+        break;
+
+    case VX_TYPE_INT64:
+        ASSERT_EQ_INT(val2.s64, tst.s64);
+        break;
+
+    case VX_TYPE_UINT64:
+        ASSERT_EQ_INT(val2.u64, tst.u64);
+        break;
+
+    case VX_TYPE_FLOAT32:
+        ASSERT(fabs(val2.f32 - tst.f32) < 0.000001f);
+        break;
+
+    case VX_TYPE_FLOAT64:
+        ASSERT(fabs(val2.f64 - tst.f64) < 0.000001f);
+        break;
+
+    case VX_TYPE_DF_IMAGE:
+        ASSERT_EQ_INT(val2.fcc, tst.fcc);
+        break;
+
+    case VX_TYPE_ENUM:
+        ASSERT_EQ_INT(val2.enm, tst.enm);
+        break;
+
+    case VX_TYPE_SIZE:
+        ASSERT_EQ_INT(val2.size, tst.size);
+        break;
+
+    case VX_TYPE_BOOL:
+        ASSERT_EQ_INT(val2.boolean, tst.boolean);
+        break;
+
+    default:
+        FAIL("Unsupported type: (%.4s)", &type);
+        break;
+    }
+
+    VX_CALL(vxReleaseScalar(&scalar));
+
+    ASSERT(scalar == 0);
+
+    return;
+} /* testCopyScalar() */
+
+TESTCASE_TESTS(Scalar,
+    testCreateScalar,
+    testQueryScalar,
+    testCopyScalar
+    )
diff --git a/test_conformance/test_scale.c b/test_conformance/test_scale.c
new file mode 100644
index 0000000..9b4d225
--- /dev/null
+++ b/test_conformance/test_scale.c
@@ -0,0 +1,602 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include <math.h> // floorf
+
+TESTCASE(Scale, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(Scale, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxScaleImageNode(graph, src_image, dst_image, VX_INTERPOLATION_NEAREST_NEIGHBOR), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+static CT_Image scale_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image _scale_generate_simple_gradient(int width, int height, int step_x, int step_y, int offset)
+{
+    CT_Image image = NULL;
+    uint32_t x, y;
+
+    ASSERT_(return 0, step_x > 0);
+    ASSERT_(return 0, step_y > 0);
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+
+    for (y = 0; y < image->height; y++)
+    {
+        for (x = 0; x < image->width; x++)
+        {
+            uint8_t* ptr = CT_IMAGE_DATA_PTR_8U(image, x, y);
+            int v = offset + (y / step_y) + (x / step_x);
+            *ptr = (uint8_t)v;
+        }
+    }
+
+    return image;
+}
+
+static CT_Image scale_generate_gradient_2x2(const char* fileName, int width, int height)
+{
+    return _scale_generate_simple_gradient(width, height, 2, 2, 0);
+}
+
+static CT_Image scale_generate_gradient_16x16(const char* fileName, int width, int height)
+{
+    return _scale_generate_simple_gradient(width, height, 16, 16, 32);
+}
+
+static CT_Image scale_generate_pattern3x3(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    uint32_t x, y;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+
+    for (y = 0; y < image->height; y++)
+    {
+        for (x = 0; x < image->width; x++)
+        {
+            uint8_t* ptr = CT_IMAGE_DATA_PTR_8U(image, x, y);
+            int v = ((y % 3) == 1 && (x % 3) == 1) ? 0 : 255;
+            *ptr = (uint8_t)v;
+        }
+    }
+
+    return image;
+}
+
+static CT_Image scale_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static vx_int32 ct_image_get_pixel_8u(CT_Image img, int x, int y, vx_border_t border)
+{
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        if (x < 0 || x >= (int)img->width || y < 0 || y >= (int)img->height)
+            return -1; //border
+        return *CT_IMAGE_DATA_PTR_8U(img, x, y);
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        return CT_IMAGE_DATA_REPLICATE_8U(img, x, y);
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        return CT_IMAGE_DATA_CONSTANT_8U(img, x, y, border.constant_value.U8);
+    }
+    else
+    {
+        CT_FAIL_(return -1, "Invalid border type");
+    }
+}
+
+static int scale_check_pixel(CT_Image src, CT_Image dst, int x, int y, vx_enum interpolation, vx_border_t border)
+{
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(dst, x, y);
+    vx_float32 x_src = (((vx_float32)x + 0.5f) * (vx_float32)src->width / (vx_float32)dst->width) - 0.5f;
+    vx_float32 y_src = (((vx_float32)y + 0.5f) * (vx_float32)src->height / (vx_float32)dst->height) - 0.5f;
+    int x_min = (int)floorf(x_src), y_min = (int)floorf(y_src);
+    if (interpolation == VX_INTERPOLATION_NEAREST_NEIGHBOR)
+    {
+        int sx, sy;
+        for (sy = -1; sy <= 1; sy++)
+        {
+            for (sx = -1; sx <= 1; sx++)
+            {
+                vx_int32 candidate = 0;
+                ASSERT_NO_FAILURE_(return 0, candidate = ct_image_get_pixel_8u(src, x_min + sx, y_min + sy, border));
+                if (candidate == -1 || candidate == res)
+                    return 1;
+            }
+        }
+        CT_FAIL_(return 0, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+    }
+    if (interpolation == VX_INTERPOLATION_BILINEAR)
+    {
+        vx_float32 s = x_src - x_min;
+        vx_float32 t = y_src - y_min;
+        vx_int32 p00 = ct_image_get_pixel_8u(src, x_min + 0, y_min + 0, border);
+        vx_int32 p01 = ct_image_get_pixel_8u(src, x_min + 0, y_min + 1, border);
+        vx_int32 p10 = ct_image_get_pixel_8u(src, x_min + 1, y_min + 0, border);
+        vx_int32 p11 = ct_image_get_pixel_8u(src, x_min + 1, y_min + 1, border);
+        vx_float32 ref_float;
+        vx_int32 ref;
+
+        // If the computed coordinate is very close to the boundary (1e-7), we don't
+        // consider it out-of-bound, in order to handle potential float accuracy errors
+        vx_bool defined = (vx_bool)((p00 != -1) && (p10 != -1) && (p01 != -1) && (p11 != -1));
+        if (defined == vx_false_e)
+        {
+            vx_bool defined_any = (vx_bool)((p00 != -1) || (p10 != -1) || (p01 != -1) || (p11 != -1));
+            if (defined_any)
+            {
+                if ((p00 == -1 || p10 == -1) && fabs(t - 1.0) <= 1e-7)
+                    p00 = p10 = 0;
+                else if ((p01 == -1 || p11 == -1) && fabs(t - 0.0) <= 1e-7)
+                    p01 = p11 = 0;
+                if ((p00 == -1 || p01 == -1) && fabs(s - 1.0) <= 1e-7)
+                    p00 = p01 = 0;
+                else if ((p10 == -1 || p11 == -1) && fabs(s - 0.0) <= 1e-7)
+                    p10 = p11 = 0;
+                defined = (vx_bool)((p00 != -1) && (p10 != -1) && (p01 != -1) && (p11 != -1));
+            }
+        }
+        if (defined == vx_false_e) {
+            return 1;
+        }
+
+        // Compute the expected result (float)
+        ref_float = (1 - s) * (1 - t) * p00 +
+                    (    s) * (1 - t) * p10 +
+                    (1 - s) * (    t) * p01 +
+                    (    s) * (    t) * p11;
+
+        // Take the nearest integer to avoid problems with casts in case of float rounding errors
+        // (e.g: 30.999999 should give 31, not 30)
+        ref = (vx_int32)(ref_float + 0.5f);
+
+        // A difference of 1 is allowed
+        if (abs(res - ref) <= 1) {
+            return 1;
+        }
+
+        return 0; // don't generate failure, we will check num failed pixels later
+    }
+    if (interpolation == VX_INTERPOLATION_AREA)
+    {
+        vx_int32 v_min = 256, v_max = -1;
+        int sx, sy;
+        // check values at 5x5 area
+        for (sy = -2; sy <= 2; sy++)
+        {
+            for (sx = -2; sx <= 2; sx++)
+            {
+                vx_int32 candidate = 0;
+                ASSERT_NO_FAILURE_(return 0, candidate = ct_image_get_pixel_8u(src, x_min + sx, y_min + sy, border));
+                if (candidate == -1)
+                    return 1;
+                if (v_min > candidate)
+                    v_min = candidate;
+                if (v_max < candidate)
+                    v_max = candidate;
+            }
+            if (v_min <= res && v_max >= res)
+                return 1;
+        }
+        CT_FAIL_(return 0, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+    }
+    CT_FAIL_(return 0, "NOT IMPLEMENTED");
+}
+
+static int scale_check_pixel_exact(CT_Image src, CT_Image dst, int x, int y, vx_enum interpolation, vx_border_t border)
+{
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(dst, x, y);
+    vx_float32 x_src = (((vx_float32)x + 0.5f) * (vx_float32)src->width / (vx_float32)dst->width) - 0.5f;
+    vx_float32 y_src = (((vx_float32)y + 0.5f) * (vx_float32)src->height / (vx_float32)dst->height) - 0.5f;
+    vx_float32 x_minf = floorf(x_src);
+    vx_float32 y_minf = floorf(y_src);
+    int x_min = (vx_int32)x_minf;
+    int y_min = (vx_int32)y_minf;
+    int x_ref = x_min;
+    int y_ref = y_min;
+    if (x_src - x_minf >= 0.5f)
+        x_ref++;
+    if (y_src - y_minf >= 0.5f)
+        y_ref++;
+    if (interpolation == VX_INTERPOLATION_NEAREST_NEIGHBOR)
+    {
+        vx_int32 ref = ct_image_get_pixel_8u(src, x_ref, y_ref, border);
+        if (ref == -1 || ref == res)
+            return 1;
+        CT_FAIL_(return 0, "Check failed for pixel (%d, %d): %d (expected %d)", x, y, (int)res, (int)ref);
+    }
+    if (interpolation == VX_INTERPOLATION_BILINEAR)
+    {
+        vx_float32 s = x_src - x_minf;
+        vx_float32 t = y_src - y_minf;
+        vx_int32 p00 = ct_image_get_pixel_8u(src, x_min + 0, y_min + 0, border);
+        vx_int32 p01 = ct_image_get_pixel_8u(src, x_min + 0, y_min + 1, border);
+        vx_int32 p10 = ct_image_get_pixel_8u(src, x_min + 1, y_min + 0, border);
+        vx_int32 p11 = ct_image_get_pixel_8u(src, x_min + 1, y_min + 1, border);
+        vx_float32 ref_float;
+        vx_int32 ref;
+
+        // If the computed coordinate is very close to the boundary (1e-7), we don't
+        // consider it out-of-bound, in order to handle potential float accuracy errors
+        vx_bool defined = (vx_bool)((p00 != -1) && (p10 != -1) && (p01 != -1) && (p11 != -1));
+        if (defined == vx_false_e)
+        {
+            vx_bool defined_any = (vx_bool)((p00 != -1) || (p10 != -1) || (p01 != -1) || (p11 != -1));
+            if (defined_any)
+            {
+                if ((p00 == -1 || p10 == -1) && fabs(t - 1.0) <= 1e-7)
+                    p00 = p10 = 0;
+                else if ((p01 == -1 || p11 == -1) && fabs(t - 0.0) <= 1e-7)
+                    p01 = p11 = 0;
+                if ((p00 == -1 || p01 == -1) && fabs(s - 1.0) <= 1e-7)
+                    p00 = p01 = 0;
+                else if ((p10 == -1 || p11 == -1) && fabs(s - 0.0) <= 1e-7)
+                    p10 = p11 = 0;
+                defined = (vx_bool)((p00 != -1) && (p10 != -1) && (p01 != -1) && (p11 != -1));
+            }
+        }
+        if (defined == vx_false_e) {
+            return 1;
+        }
+
+        // Compute the expected result (float)
+        ref_float = (1 - s) * (1 - t) * p00 +
+                    (    s) * (1 - t) * p10 +
+                    (1 - s) * (    t) * p01 +
+                    (    s) * (    t) * p11;
+
+        // Take the nearest integer to avoid problems with casts in case of float rounding errors
+        // (e.g: 30.999999 should give 31, not 30)
+        ref = (vx_int32)(ref_float + 0.5f);
+
+        // The result must be exact
+        if (ref == res) {
+            return 1;
+        }
+
+        CT_FAIL_(return 0, "Check failed for pixel (%d, %d): %d (expected %d)", x, y, (int)res, (int)ref);
+    }
+    if (interpolation == VX_INTERPOLATION_AREA)
+    {
+        vx_int32 ref;
+        ASSERT_(return 0, dst->width % src->width == 0 && dst->height % src->height == 0);
+        ref = ct_image_get_pixel_8u(src, x_ref, y_ref, border);
+        if (ref == -1)
+            return 1;
+        if (ref == res)
+            return 1;
+        CT_FAIL_(return 0, "Check failed for pixel (%d, %d): %d (expected %d)", x, y, (int)res, (int)ref);
+    }
+    CT_FAIL_(return 0, "NOT IMPLEMENTED");
+}
+
+static void scale_validate(CT_Image src, CT_Image dst, vx_enum interpolation, vx_border_t border, int exact)
+{
+    int num_failed = 0;
+    if (src->width == dst->width && src->height == dst->height) // special case for scale=1.0
+    {
+        ASSERT_EQ_CTIMAGE(src, dst);
+        return;
+    }
+    CT_FILL_IMAGE_8U(, dst,
+            {
+                int check;
+                if (exact == 0)
+                    ASSERT_NO_FAILURE(check = scale_check_pixel(src, dst, x, y, interpolation, border));
+                else
+                    ASSERT_NO_FAILURE(check = scale_check_pixel_exact(src, dst, x, y, interpolation, border));
+                if (check == 0) {
+                    num_failed++;
+                }
+            });
+    if (interpolation == VX_INTERPOLATION_BILINEAR)
+    {
+        int total = dst->width * dst->height;
+        if (num_failed * 100 > total * 2) // 98% should be valid
+        {
+            CT_FAIL("Check failed: %g (%d) pixels are wrong", (float)num_failed / total, num_failed);
+        }
+    }
+}
+
+static void scale_check(CT_Image src, CT_Image dst, vx_enum interpolation, vx_border_t border, int exact)
+{
+    ASSERT(src && dst);
+    scale_validate(src, dst, interpolation, border, exact);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info_ex(src, 16, 8);
+        printf("=== DST ===\n");
+        ct_dump_image_info_ex(dst, 16, 8);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    int dummy;
+    vx_enum interpolation;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    void (*dst_size_generator)(int width, int height, int* dst_width, int* dst_height);
+    int exact_result;
+    int width, height;
+    vx_border_t border;
+} Arg;
+
+
+void dst_size_generator_1_1(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = width;
+    *dst_height = height;
+}
+
+void dst_size_generator_1_2(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = width * 2;
+    *dst_height = height * 2;
+}
+
+void dst_size_generator_1_3(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = width * 3;
+    *dst_height = height * 3;
+}
+
+void dst_size_generator_2_1(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = (width + 1) / 2;
+    *dst_height = (height + 1) / 2;
+}
+
+void dst_size_generator_3_1(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = (width + 2) / 3;
+    *dst_height = (height + 2) / 3;
+}
+
+void dst_size_generator_4_1(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = (width + 3) / 4;
+    *dst_height = (height + 3) / 4;
+}
+
+void dst_size_generator_5_1(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = (width + 4) / 5;
+    *dst_height = (height + 4) / 5;
+}
+
+void dst_size_generator_SCALE_PYRAMID_ORB(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = (int)(width * VX_SCALE_PYRAMID_ORB);
+    *dst_height = (int)(height * VX_SCALE_PYRAMID_ORB);
+}
+
+void dst_size_generator_SCALE_NEAR_UP(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = width + 1;
+    *dst_height = height + 1;
+}
+
+void dst_size_generator_SCALE_NEAR_DOWN(int width, int height, int* dst_width, int* dst_height)
+{
+    *dst_width = width - 1;
+    *dst_height = height - 1;
+}
+
+#define STR_VX_INTERPOLATION_NEAREST_NEIGHBOR "NN"
+#define STR_VX_INTERPOLATION_BILINEAR "BILINEAR"
+#define STR_VX_INTERPOLATION_AREA "AREA"
+
+#define SCALE_TEST(interpolation, inputDataGenerator, inputDataFile, scale, exact, nextmacro, ...) \
+    CT_EXPAND(nextmacro(STR_##interpolation "/" inputDataFile "/" #scale, __VA_ARGS__, \
+            interpolation, inputDataGenerator, inputDataFile, dst_size_generator_ ## scale, exact))
+
+#define ADD_DST_SIZE_NN(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/1_1", __VA_ARGS__, dst_size_generator_1_1)), \
+    CT_EXPAND(nextmacro(testArgName "/1_2", __VA_ARGS__, dst_size_generator_1_2)), \
+    CT_EXPAND(nextmacro(testArgName "/2_1", __VA_ARGS__, dst_size_generator_2_1)), \
+    CT_EXPAND(nextmacro(testArgName "/3_1", __VA_ARGS__, dst_size_generator_3_1)), \
+    CT_EXPAND(nextmacro(testArgName "/4_1", __VA_ARGS__, dst_size_generator_4_1))
+
+#define ADD_DST_SIZE_BILINEAR(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/1:1", __VA_ARGS__, dst_size_generator_1_1)), \
+    CT_EXPAND(nextmacro(testArgName "/1:2", __VA_ARGS__, dst_size_generator_1_2)), \
+    CT_EXPAND(nextmacro(testArgName "/2:1", __VA_ARGS__, dst_size_generator_2_1)), \
+    CT_EXPAND(nextmacro(testArgName "/3:1", __VA_ARGS__, dst_size_generator_3_1)), \
+    CT_EXPAND(nextmacro(testArgName "/4:1", __VA_ARGS__, dst_size_generator_4_1))
+
+#define ADD_DST_SIZE_AREA(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/1:1", __VA_ARGS__, dst_size_generator_1_1)), \
+    CT_EXPAND(nextmacro(testArgName "/87:100", __VA_ARGS__, dst_size_generator_87_100)), \
+    CT_EXPAND(nextmacro(testArgName "/4:1", __VA_ARGS__, dst_size_generator_4_1))
+
+#define ADD_SIZE_96x96(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=96x96", __VA_ARGS__, 96, 96))
+
+#define ADD_SIZE_100x100(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=100x100", __VA_ARGS__, 100, 100))
+
+#define PARAMETERS \
+    /* 1:1 scale */ \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 1_1, 1, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 1_1, 1, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_generate_random, "random", 1_1, 1, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    /* NN upscale with integer factor */ \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 1_2, 1, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 1_3, 1, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_read_image, "lena.bmp", 1_2, 1, ADD_SIZE_NONE, ADD_VX_BORDERS, ARG, 0), \
+    /* NN downscale with odd integer factor */\
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 3_1, 1, ADD_SIZE_96x96, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 5_1, 1, ADD_SIZE_100x100, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_pattern3x3, "pattern3x3", 3_1, 1, ADD_SIZE_96x96, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_read_image, "lena.bmp", 3_1, 0, ADD_SIZE_NONE, ADD_VX_BORDERS, ARG, 0), \
+    /* other NN downscales */ \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 2_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", 4_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", SCALE_PYRAMID_ORB, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    /* BILINEAR upscale with integer factor */ \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 1_2, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 1_3, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    /* BILINEAR downscales */ \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 2_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 3_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 4_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", 5_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", SCALE_PYRAMID_ORB, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    /* AREA tests */ \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_generate_gradient_16x16, "gradient16x16", 4_1, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_read_image, "lena.bmp", 4_1, 0, ADD_SIZE_NONE, ADD_VX_BORDERS, ARG, 0), \
+    /* AREA upscale */ \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_generate_random, "random", 1_2, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_generate_random, "random", 1_3, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    /* other */ \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", SCALE_NEAR_UP, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", SCALE_NEAR_UP, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_generate_random, "random", SCALE_NEAR_UP, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_NEAREST_NEIGHBOR, scale_generate_random, "random", SCALE_NEAR_DOWN, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_BILINEAR,         scale_generate_random, "random", SCALE_NEAR_DOWN, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+    SCALE_TEST(VX_INTERPOLATION_AREA,             scale_generate_random, "random", SCALE_NEAR_DOWN, 0, ADD_SIZE_SMALL_SET, ADD_VX_BORDERS, ARG, 0), \
+
+TEST_WITH_ARG(Scale, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    int dst_width = 0, dst_height = 0;
+    vx_image src_image = 0, dst_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst = NULL;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(arg_->dst_size_generator(src->width, src->height, &dst_width, &dst_height));
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, dst_width, dst_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxScaleImageNode(graph, src_image, dst_image, arg_->interpolation), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &arg_->border, sizeof(arg_->border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(scale_check(src, dst, arg_->interpolation, arg_->border, arg_->exact_result));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Scale, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    int dst_width = 0, dst_height = 0;
+    vx_image src_image = 0, dst_image = 0;
+
+    CT_Image src = NULL, dst = NULL;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(arg_->dst_size_generator(src->width, src->height, &dst_width, &dst_height));
+
+    ASSERT_VX_OBJECT(dst_image = vxCreateImage(context, dst_width, dst_height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &arg_->border, sizeof(arg_->border)));
+
+    VX_CALL(vxuScaleImage(context, src_image, dst_image, arg_->interpolation));
+
+    ASSERT_NO_FAILURE(dst = ct_image_from_vx_image(dst_image));
+
+    ASSERT_NO_FAILURE(scale_check(src, dst, arg_->interpolation, arg_->border, arg_->exact_result));
+
+    VX_CALL(vxReleaseImage(&dst_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Scale, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_smoke.c b/test_conformance/test_smoke.c
new file mode 100644
index 0000000..313ae5d
--- /dev/null
+++ b/test_conformance/test_smoke.c
@@ -0,0 +1,587 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <string.h>
+
+TESTCASE(SmokeTest, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct _mystruct {
+    vx_uint32 some_uint;
+    vx_float64 some_double;
+} mystruct;
+
+TEST(SmokeTest, test_vxRegisterUserStruct)
+{
+    vx_context context = context_->vx_context_;
+    vx_enum mytype = 0;
+    vx_array array = 0;
+    vx_enum type = 0;
+    vx_size sz = 0;
+
+    mytype = vxRegisterUserStruct(context, sizeof(mystruct));
+    ASSERT(mytype >= VX_TYPE_USER_STRUCT_START);
+
+    ASSERT_VX_OBJECT(array = vxCreateArray(context, mytype, 10), VX_TYPE_ARRAY);
+
+    VX_CALL(vxQueryArray(array, VX_ARRAY_ITEMTYPE, &type, sizeof(type)));
+    ASSERT_EQ_INT(mytype, type);
+
+    VX_CALL(vxQueryArray(array, VX_ARRAY_ITEMSIZE, &sz, sizeof(sz)));
+    ASSERT_EQ_INT(sizeof(mystruct), sz);
+
+    VX_CALL(vxReleaseArray(&array));
+    ASSERT(array == 0);
+}
+
+
+TEST(SmokeTest, test_vxHint)
+{
+    vx_image image = 0;
+    vx_graph graph = 0;
+    vx_context context = context_->vx_context_;
+
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+//    VX_CALL(vxHint((vx_reference)image, VX_HINT_SERIALIZE, 0, 0));
+//    VX_CALL(vxHint((vx_reference)graph, VX_HINT_SERIALIZE, 0, 0));
+//    VX_CALL(vxHint((vx_reference)context, VX_HINT_SERIALIZE, 0, 0));
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT_EQ_PTR(0, image);
+    ASSERT_EQ_PTR(0, graph);
+}
+
+
+TEST(SmokeTest, test_vxReleaseReference)
+{
+    vx_context context = context_->vx_context_;
+    vx_uint32 ref_count0 = 0;
+    vx_uint32 ref_count1 = 0;
+    vx_reference ref = 0;
+
+    {
+        /* test context reference */
+        ref = (vx_reference)context;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)context;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+    }
+
+    {
+        /* test graph reference */
+        vx_graph graph = 0;
+        EXPECT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ref = (vx_reference)graph;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)graph;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    {
+        /* test node reference */
+        vx_graph graph = 0;
+        vx_node node = 0;
+        vx_image src1 = 0;
+        vx_image src2 = 0;
+        vx_image dst = 0;
+        EXPECT_VX_OBJECT(src1 = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        EXPECT_VX_OBJECT(src2 = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        EXPECT_VX_OBJECT(dst  = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        EXPECT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        EXPECT_VX_OBJECT(node = vxAddNode(graph, src1, src2, VX_CONVERT_POLICY_WRAP, dst), VX_TYPE_NODE);
+        ref = (vx_reference)node;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)node;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseImage(&src1));
+        VX_CALL(vxReleaseImage(&src2));
+        VX_CALL(vxReleaseImage(&dst));
+        VX_CALL(vxReleaseNode(&node));
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    {
+        /* test array reference */
+        vx_array array = 0;
+        EXPECT_VX_OBJECT(array = vxCreateArray(context, VX_TYPE_KEYPOINT, 32), VX_TYPE_ARRAY);
+        ref = (vx_reference)array;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)array;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseArray(&array));
+    }
+
+    {
+        /* test convolution reference */
+        vx_convolution convolution = 0;
+        EXPECT_VX_OBJECT(convolution = vxCreateConvolution(context, 5, 5), VX_TYPE_CONVOLUTION);
+        ref = (vx_reference)convolution;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)convolution;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseConvolution(&convolution));
+    }
+
+    {
+        /* test distribution reference */
+        vx_distribution distribution = 0;
+        EXPECT_VX_OBJECT(distribution = vxCreateDistribution(context, 32, 0, 255), VX_TYPE_DISTRIBUTION);
+        ref = (vx_reference)distribution;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)distribution;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseDistribution(&distribution));
+    }
+
+    {
+        /* test image reference */
+        vx_image image = 0;
+        EXPECT_VX_OBJECT(image = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        ref = (vx_reference)image;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)image;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseImage(&image));
+    }
+
+    {
+        /* test LUT reference */
+        vx_lut lut = 0;
+        EXPECT_VX_OBJECT(lut = vxCreateLUT(context, VX_TYPE_UINT8, 127), VX_TYPE_LUT);
+        ref = (vx_reference)lut;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)lut;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseLUT(&lut));
+    }
+
+    {
+        /* test graph reference */
+        vx_graph graph = 0;
+        EXPECT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+        ref = (vx_reference)graph;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)graph;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseGraph(&graph));
+    }
+
+    {
+        /* test matrix reference */
+        vx_matrix matrix = 0;
+        EXPECT_VX_OBJECT(matrix = vxCreateMatrix(context, VX_TYPE_FLOAT32, 32, 32), VX_TYPE_MATRIX);
+        ref = (vx_reference)matrix;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)matrix;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseMatrix(&matrix));
+    }
+
+    {
+        /* test pyramid reference */
+        vx_pyramid pyramid = 0;
+        EXPECT_VX_OBJECT(pyramid = vxCreatePyramid(context, 3, VX_SCALE_PYRAMID_HALF, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_PYRAMID);
+        ref = (vx_reference)pyramid;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)pyramid;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleasePyramid(&pyramid));
+    }
+
+    {
+        /* test remap reference */
+        vx_remap remap = 0;
+        EXPECT_VX_OBJECT(remap = vxCreateRemap(context, 320, 240, 160, 120), VX_TYPE_REMAP);
+        ref = (vx_reference)remap;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)remap;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseRemap(&remap));
+    }
+
+    {
+        /* test scalar reference */
+        vx_scalar scalar = 0;
+        vx_uint32 val = 5;
+        EXPECT_VX_OBJECT(scalar = vxCreateScalar(context, VX_TYPE_UINT32, &val), VX_TYPE_SCALAR);
+        ref = (vx_reference)scalar;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)scalar;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseScalar(&scalar));
+    }
+
+    {
+        /* test threshold reference */
+        vx_threshold threshold = 0;
+        EXPECT_VX_OBJECT(threshold = vxCreateThreshold(context, VX_THRESHOLD_TYPE_BINARY, VX_TYPE_UINT8), VX_TYPE_THRESHOLD);
+        ref = (vx_reference)threshold;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)threshold;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseThreshold(&threshold));
+    }
+
+    {
+        /* test delay reference */
+        vx_delay delay = 0;
+        vx_image exemplar = 0;
+        EXPECT_VX_OBJECT(exemplar = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+        EXPECT_VX_OBJECT(delay = vxCreateDelay(context, (vx_reference)exemplar, 5), VX_TYPE_DELAY);
+        ref = (vx_reference)delay;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)delay;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseImage(&exemplar));
+        VX_CALL(vxReleaseDelay(&delay));
+    }
+
+    {
+        /* test kernel reference */
+        vx_kernel kernel = 0;
+        EXPECT_VX_OBJECT(kernel = vxGetKernelByEnum(context, VX_KERNEL_ADD), VX_TYPE_KERNEL);
+        ref = (vx_reference)kernel;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)kernel;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseKernel(&kernel));
+    }
+
+    {
+        /* test parameter reference */
+        vx_kernel kernel = 0;
+        vx_parameter parameter = 0;
+        EXPECT_VX_OBJECT(kernel = vxGetKernelByEnum(context, VX_KERNEL_ADD), VX_TYPE_KERNEL);
+        EXPECT_VX_OBJECT(parameter = vxGetKernelParameterByIndex(kernel, 0), VX_TYPE_PARAMETER);
+        ref = (vx_reference)parameter;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count0, sizeof(ref_count0)), VX_SUCCESS);
+        VX_CALL(vxRetainReference(ref));
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 1);
+        VX_CALL(vxReleaseReference(&ref));
+        ref = (vx_reference)parameter;
+        ref_count1 = 0;
+        ASSERT_EQ_VX_STATUS(vxQueryReference(ref, VX_REFERENCE_COUNT, (void*)&ref_count1, sizeof(ref_count1)), VX_SUCCESS);
+        ASSERT_EQ_INT(ref_count1 - ref_count0, 0);
+
+        VX_CALL(vxReleaseKernel(&kernel));
+        VX_CALL(vxReleaseParameter(&parameter));
+    }
+
+}
+
+
+TEST(SmokeTest, test_vxRetainReference)
+{
+    vx_image image = 0;
+    vx_graph graph = 0;
+    vx_reference image_ref = 0, graph_ref = 0;
+    vx_uint32 image_count = 0, graph_count = 0;
+    vx_context context = context_->vx_context_;
+    vx_uint32 num_refs1 = 0, num_refs2 = 0, num_refs3 = 0, num_refs4 = 0;
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_REFERENCES, (void*)&num_refs1, sizeof(num_refs1)), VX_SUCCESS);
+
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_REFERENCES, (void*)&num_refs2, sizeof(num_refs2)), VX_SUCCESS);
+    ASSERT_EQ_INT(num_refs2, num_refs1+2);
+
+    image_ref = (vx_reference)image;
+    graph_ref = (vx_reference)graph;
+    ASSERT_EQ_VX_STATUS(vxQueryReference(image_ref, VX_REFERENCE_COUNT, (void*)&image_count, sizeof(image_count)), VX_SUCCESS);
+    ASSERT_EQ_VX_STATUS(vxQueryReference(graph_ref, VX_REFERENCE_COUNT, (void*)&graph_count, sizeof(graph_count)), VX_SUCCESS);
+    ASSERT_EQ_INT(image_count, 1);
+    ASSERT_EQ_INT(graph_count, 1);
+
+    image_ref = (vx_reference)image;
+    graph_ref = (vx_reference)graph;
+    VX_CALL(vxRetainReference(image_ref));
+    VX_CALL(vxRetainReference(graph_ref));
+
+    image_ref = (vx_reference)image;
+    graph_ref = (vx_reference)graph;
+    ASSERT_EQ_VX_STATUS(vxQueryReference(image_ref, VX_REFERENCE_COUNT, (void*)&image_count, sizeof(image_count)), VX_SUCCESS);
+    ASSERT_EQ_VX_STATUS(vxQueryReference(graph_ref, VX_REFERENCE_COUNT, (void*)&graph_count, sizeof(graph_count)), VX_SUCCESS);
+    ASSERT_EQ_INT(image_count, 2);
+    ASSERT_EQ_INT(graph_count, 2);
+
+    image_ref = (vx_reference)image;
+    graph_ref = (vx_reference)graph;
+    VX_CALL(vxReleaseReference(&image_ref));
+    VX_CALL(vxReleaseReference(&graph_ref));
+
+    ASSERT_EQ_PTR(0, image_ref);
+    ASSERT_EQ_PTR(0, graph_ref);
+
+    image_ref = (vx_reference)image;
+    graph_ref = (vx_reference)graph;
+    ASSERT_EQ_VX_STATUS(vxQueryReference(image_ref, VX_REFERENCE_COUNT, (void*)&image_count, sizeof(image_count)), VX_SUCCESS);
+    ASSERT_EQ_VX_STATUS(vxQueryReference(graph_ref, VX_REFERENCE_COUNT, (void*)&graph_count, sizeof(graph_count)), VX_SUCCESS);
+    ASSERT_EQ_INT(image_count, 1);
+    ASSERT_EQ_INT(graph_count, 1);
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_REFERENCES, (void*)&num_refs3, sizeof(num_refs3)), VX_SUCCESS);
+    ASSERT_EQ_INT(num_refs3, num_refs1+2);
+
+    image_ref = (vx_reference)image;
+    graph_ref = (vx_reference)graph;
+    VX_CALL(vxReleaseReference(&image_ref));
+    VX_CALL(vxReleaseReference(&graph_ref));
+
+    ASSERT_EQ_PTR(0, image_ref);
+    ASSERT_EQ_PTR(0, graph_ref);
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_REFERENCES, (void*)&num_refs4, sizeof(num_refs4)), VX_SUCCESS);
+    ASSERT_EQ_INT(num_refs4, num_refs1);
+}
+
+TEST(SmokeTest, test_vxUnloadKernels)
+{
+    vx_context context = context_->vx_context_;
+    vx_kernel kernel = NULL;
+    vx_int32 num_modules1;
+    vx_int32 num_modules2;
+    vx_int32 num_unique_kernels1;
+    vx_int32 num_unique_kernels2;
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_MODULES, (void*)&num_modules1, sizeof(num_modules1)), VX_SUCCESS);
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, (void*)&num_unique_kernels1, sizeof(num_unique_kernels1)), VX_SUCCESS);
+    ASSERT(num_modules1 >= 0u);
+    ASSERT(num_unique_kernels1 > 0u);
+
+    kernel = vxGetKernelByName(context, "org.khronos.test.testmodule");
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxGetStatus((vx_reference)kernel));
+
+    VX_CALL(vxLoadKernels(context, "test-testmodule"));
+    ASSERT_VX_OBJECT(kernel = vxGetKernelByName(context, "org.khronos.test.testmodule"), VX_TYPE_KERNEL);
+    VX_CALL(vxReleaseKernel(&kernel));
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_MODULES, (void*)&num_modules2, sizeof(num_modules1)), VX_SUCCESS);
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, (void*)&num_unique_kernels2, sizeof(num_unique_kernels2)), VX_SUCCESS);
+    ASSERT(num_modules2 > num_modules1);
+    ASSERT(num_unique_kernels2 > num_unique_kernels1);
+
+    VX_CALL(vxUnloadKernels(context, "test-testmodule"));
+
+    kernel = vxGetKernelByName(context, "org.khronos.test.testmodule");
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxGetStatus((vx_reference)kernel));
+
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_MODULES, (void*)&num_modules2, sizeof(num_modules1)), VX_SUCCESS);
+    ASSERT_EQ_VX_STATUS(vxQueryContext(context, VX_CONTEXT_UNIQUE_KERNELS, (void*)&num_unique_kernels2, sizeof(num_unique_kernels2)), VX_SUCCESS);
+    ASSERT(num_modules2 == num_modules1);
+    ASSERT(num_unique_kernels2 == num_unique_kernels1);
+}
+
+TEST(SmokeTest, test_vxSetReferenceName)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_image image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8);
+    const char* image_name = "Image";
+    char* actual_name = NULL;
+
+    VX_CALL(vxSetReferenceName((vx_reference)image, image_name));
+    VX_CALL(vxQueryReference((vx_reference)image, VX_REFERENCE_NAME, &actual_name, sizeof(actual_name)));
+
+    ASSERT(0 == strcmp(image_name, actual_name));
+
+    VX_CALL(vxReleaseImage(&image));
+}
+
+TEST(SmokeTest, test_vxSetParameterByIndex)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_enum kernel_id = VX_KERNEL_SOBEL_3x3; /* params: 0:req 1:opt 2:opt */
+    vx_graph graph = NULL;
+    vx_kernel kernel = NULL;
+    vx_node node = NULL;
+    vx_uint32 width = 32, height = 32;
+    vx_image image = NULL;
+    vx_image dy = NULL;
+    vx_uint32 node_parameters = 0;
+    vx_uint32 i;
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(kernel = vxGetKernelByEnum(context, kernel_id), VX_TYPE_KERNEL);
+    ASSERT_VX_OBJECT(node = vxCreateGenericNode(graph, kernel), VX_TYPE_NODE);
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dy = vxCreateImage(context, width, height, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryNode(node, VX_NODE_PARAMETERS, &node_parameters, sizeof(node_parameters)));
+
+    // 1. check that vxCreateGenericNode sets all params to NULL
+    for (i = 0; i < node_parameters; ++i)
+    {
+        vx_parameter param = NULL;
+        vx_reference ref = NULL;
+
+        ASSERT_VX_OBJECT(param = vxGetParameterByIndex(node, i), VX_TYPE_PARAMETER);
+
+        VX_CALL(vxQueryParameter(param, VX_PARAMETER_REF, &ref, sizeof(ref)));
+        ASSERT(ref == NULL);
+
+        VX_CALL(vxReleaseParameter(&param));
+    }
+
+    // 2. check that vxSetParameterByIndex failed to set required params to NULL
+    ASSERT(node_parameters == 3);
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxSetParameterByIndex(node, 0, (vx_reference)NULL)); // required parameter
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetParameterByIndex(node, 1, (vx_reference)NULL)); // output images are optional
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetParameterByIndex(node, 2, (vx_reference)dy)); // (but at least one should specified)
+
+    // 3. check that vxVerifyGraph does not allow required params to be NULL
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxSetParameterByIndex(node, 0, (vx_reference)image));
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseImage(&dy));
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseKernel(&kernel));
+    VX_CALL(vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(SmokeTest,
+        test_vxRegisterUserStruct,
+        test_vxHint,
+        test_vxReleaseReference,
+        test_vxRetainReference,
+        test_vxUnloadKernels,
+        test_vxSetReferenceName,
+        test_vxSetParameterByIndex
+        )
diff --git a/test_conformance/test_sobel3x3.c b/test_conformance/test_sobel3x3.c
new file mode 100644
index 0000000..767406c
--- /dev/null
+++ b/test_conformance/test_sobel3x3.c
@@ -0,0 +1,337 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include "shared_functions.h"
+
+
+TESTCASE(Sobel3x3, CT_VXContext, ct_setup_vx_context, 0)
+
+
+TEST(Sobel3x3, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_x_image = 0, dst_y_image;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_x_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(dst_y_image = vxCreateImage(context, 128, 128, VX_DF_IMAGE_S16), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxSobel3x3Node(graph, src_image, dst_x_image, dst_y_image), VX_TYPE_NODE);
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseImage(&dst_x_image));
+    VX_CALL(vxReleaseImage(&dst_y_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst_x_image == 0);
+    ASSERT(dst_y_image == 0);
+    ASSERT(src_image == 0);
+}
+
+
+// Generate input to cover these requirements:
+// There should be a image with randomly generated pixel intensities.
+static CT_Image sobel3x3_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+static CT_Image sobel3x3_read_image(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+    ASSERT_(return 0, width == 0 && height == 0);
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+    return image;
+}
+
+static int16_t sobel_x_get(int32_t *values)
+{
+    int32_t res = (-values[0])     + (values[2]) +
+                  (-values[3] * 2) + (values[5] * 2) +
+                  (-values[6])     + (values[8]);
+    return (int16_t)res;
+}
+
+static int16_t sobel_y_get(int32_t *values)
+{
+    int32_t res = (-values[0])     + (values[6]) +
+                  (-values[1] * 2) + (values[7] * 2) +
+                  (-values[2])     + (values[8]);
+    return (int16_t)res;
+}
+
+static void sobel3x3_calculate(CT_Image src, uint32_t x, uint32_t y, int16_t *sobel_x, int16_t *sobel_y)
+{
+    int32_t values[9] = {
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y - 0),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x - 1, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 0, y + 1),
+        (int32_t)*CT_IMAGE_DATA_PTR_8U(src, x + 1, y + 1)
+    };
+    *sobel_x = sobel_x_get(values);
+    *sobel_y = sobel_y_get(values);
+}
+
+static void sobel3x3_calculate_replicate(CT_Image src, uint32_t x_, uint32_t y_, int16_t *sobel_x, int16_t *sobel_y)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y - 0),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x - 1, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 0, y + 1),
+        (int32_t)CT_IMAGE_DATA_REPLICATE_8U(src, x + 1, y + 1)
+    };
+    *sobel_x = sobel_x_get(values);
+    *sobel_y = sobel_y_get(values);
+}
+
+static void sobel3x3_calculate_constant(CT_Image src, uint32_t x_, uint32_t y_, vx_uint32 constant_value, int16_t *sobel_x, int16_t *sobel_y)
+{
+    int32_t x = (int)x_;
+    int32_t y = (int)y_;
+    int32_t values[9] = {
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y - 0, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x - 1, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 0, y + 1, constant_value),
+        (int32_t)CT_IMAGE_DATA_CONSTANT_8U(src, x + 1, y + 1, constant_value)
+    };
+    *sobel_x = sobel_x_get(values);
+    *sobel_y = sobel_y_get(values);
+}
+
+
+void sobel3x3_create_reference_image(CT_Image src, vx_border_t border, CT_Image *p_dst_x, CT_Image *p_dst_y)
+{
+    CT_Image dst_x = NULL, dst_y = NULL;
+
+    CT_ASSERT(src->format == VX_DF_IMAGE_U8);
+
+    dst_x = ct_allocate_image(src->width, src->height, VX_DF_IMAGE_S16);
+    dst_y = ct_allocate_image(src->width, src->height, VX_DF_IMAGE_S16);
+
+    if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        CT_FILL_IMAGE_16S(return, dst_x,
+                if (x >= 1 && y >= 1 && x < src->width - 1 && y < src->height - 1)
+                {
+                    int16_t* dst_y_data = CT_IMAGE_DATA_PTR_16S(dst_y, x, y);
+                    sobel3x3_calculate(src, x, y, dst_data, dst_y_data);
+                });
+    }
+    else if (border.mode == VX_BORDER_REPLICATE)
+    {
+        CT_FILL_IMAGE_16S(return, dst_x,
+                {
+                    int16_t* dst_y_data = CT_IMAGE_DATA_PTR_16S(dst_y, x, y);
+                    sobel3x3_calculate_replicate(src, x, y, dst_data, dst_y_data);
+                });
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 constant_value = border.constant_value.U32;
+        CT_FILL_IMAGE_16S(return, dst_x,
+                {
+                    int16_t* dst_y_data = CT_IMAGE_DATA_PTR_16S(dst_y, x, y);
+                    sobel3x3_calculate_constant(src, x, y, constant_value, dst_data, dst_y_data);
+                });
+    }
+    else
+    {
+        ASSERT_(return, 0);
+    }
+
+    *p_dst_x = dst_x;
+    *p_dst_y = dst_y;
+}
+
+
+static void sobel3x3_check(CT_Image src, CT_Image dst_x, CT_Image dst_y, vx_border_t border)
+{
+    CT_Image dst_x_ref = NULL, dst_y_ref = NULL;
+
+    ASSERT(src && dst_x && dst_y);
+
+    ASSERT_NO_FAILURE(sobel3x3_create_reference_image(src, border, &dst_x_ref, &dst_y_ref));
+
+    ASSERT_NO_FAILURE(
+        if (border.mode == VX_BORDER_UNDEFINED)
+        {
+            ct_adjust_roi(dst_x,  1, 1, 1, 1);
+            ct_adjust_roi(dst_x_ref, 1, 1, 1, 1);
+            ct_adjust_roi(dst_y,  1, 1, 1, 1);
+            ct_adjust_roi(dst_y_ref, 1, 1, 1, 1);
+        }
+    );
+
+    EXPECT_EQ_CTIMAGE(dst_x_ref, dst_x);
+    EXPECT_EQ_CTIMAGE(dst_y_ref, dst_y);
+#if 0
+    if (CT_HasFailure())
+    {
+        printf("=== SRC ===\n");
+        ct_dump_image_info(src);
+        printf("=== DST X ===\n");
+        ct_dump_image_info(dst_x);
+        printf("=== EXPECTED X ===\n");
+        ct_dump_image_info(dst_x_ref);
+        printf("=== DST Y ===\n");
+        ct_dump_image_info(dst_y);
+        printf("=== EXPECTED Y ===\n");
+        ct_dump_image_info(dst_y_ref);
+    }
+#endif
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image (*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    vx_border_t border;
+    int width, height;
+} Filter_Arg;
+
+#define SOBEL_PARAMETERS \
+    CT_GENERATE_PARAMETERS("randomInput", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_SMALL_SET, ARG, sobel3x3_generate_random, NULL), \
+    CT_GENERATE_PARAMETERS("lena", ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY, ADD_SIZE_NONE, ARG, sobel3x3_read_image, "lena.bmp")
+
+TEST_WITH_ARG(Sobel3x3, testGraphProcessing, Filter_Arg,
+    SOBEL_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_x_image = 0, dst_y_image = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    CT_Image src = NULL, dst_x = NULL, dst_y = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_x_image = ct_create_similar_image_with_format(src_image, VX_DF_IMAGE_S16);
+    ASSERT_VX_OBJECT(dst_x_image, VX_TYPE_IMAGE);
+
+    dst_y_image = ct_create_similar_image_with_format(src_image, VX_DF_IMAGE_S16);
+    ASSERT_VX_OBJECT(dst_y_image, VX_TYPE_IMAGE);
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    node = vxSobel3x3Node(graph, src_image, dst_x_image, dst_y_image);
+    ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(dst_x = ct_image_from_vx_image(dst_x_image));
+    ASSERT_NO_FAILURE(dst_y = ct_image_from_vx_image(dst_y_image));
+
+    ASSERT_NO_FAILURE(sobel3x3_check(src, dst_x, dst_y, border));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+
+    VX_CALL(vxReleaseImage(&dst_x_image));
+    VX_CALL(vxReleaseImage(&dst_y_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_x_image == 0);
+    ASSERT(dst_y_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TEST_WITH_ARG(Sobel3x3, testImmediateProcessing, Filter_Arg,
+    SOBEL_PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src_image = 0, dst_x_image = 0, dst_y_image = 0;
+
+    CT_Image src = NULL, dst_x = NULL, dst_y = NULL;
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height));
+
+    ASSERT_VX_OBJECT(src_image = ct_image_to_vx_image(src, context), VX_TYPE_IMAGE);
+
+    dst_x_image = ct_create_similar_image_with_format(src_image, VX_DF_IMAGE_S16);
+    ASSERT_VX_OBJECT(dst_x_image, VX_TYPE_IMAGE);
+
+    dst_y_image = ct_create_similar_image_with_format(src_image, VX_DF_IMAGE_S16);
+    ASSERT_VX_OBJECT(dst_y_image, VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuSobel3x3(context, src_image, dst_x_image, dst_y_image));
+
+    ASSERT_NO_FAILURE(dst_x = ct_image_from_vx_image(dst_x_image));
+    ASSERT_NO_FAILURE(dst_y = ct_image_from_vx_image(dst_y_image));
+
+    ASSERT_NO_FAILURE(sobel3x3_check(src, dst_x, dst_y, border));
+
+    VX_CALL(vxReleaseImage(&dst_x_image));
+    VX_CALL(vxReleaseImage(&dst_y_image));
+    VX_CALL(vxReleaseImage(&src_image));
+
+    ASSERT(dst_x_image == 0);
+    ASSERT(dst_y_image == 0);
+    ASSERT(src_image == 0);
+}
+
+TESTCASE_TESTS(Sobel3x3, testNodeCreation, testGraphProcessing, testImmediateProcessing)
diff --git a/test_conformance/test_target.c b/test_conformance/test_target.c
new file mode 100644
index 0000000..6b08863
--- /dev/null
+++ b/test_conformance/test_target.c
@@ -0,0 +1,110 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <VX/vx_kernels.h>
+
+
+TESTCASE(Target, CT_VXContext, ct_setup_vx_context, 0)
+
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    vx_enum target_enum;
+    const char* target_string;
+
+} SetTarget_Arg;
+
+
+#define ADD_SET_TARGET_PARAMETERS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_TARGET_ANY", __VA_ARGS__, VX_TARGET_ANY, NULL)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TARGET_STRING=any", __VA_ARGS__, VX_TARGET_STRING, "any")), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TARGET_STRING=aNy", __VA_ARGS__, VX_TARGET_STRING, "aNy")), \
+    CT_EXPAND(nextmacro(testArgName "/VX_TARGET_STRING=ANY", __VA_ARGS__, VX_TARGET_STRING, "ANY"))
+
+#define SET_NODE_TARGET_PARAMETERS \
+    CT_GENERATE_PARAMETERS("target", ADD_SET_TARGET_PARAMETERS, ARG, NULL)
+
+#define SET_IMM_MODE_TARGET_PARAMETERS \
+    CT_GENERATE_PARAMETERS("target", ADD_SET_TARGET_PARAMETERS, ARG, NULL)
+
+TEST_WITH_ARG(Target, testvxSetNodeTarget, SetTarget_Arg, SET_NODE_TARGET_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_image src1 = 0;
+    vx_image src2 = 0;
+    vx_image dst = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+    ASSERT_VX_OBJECT(node = vxAddNode(graph, src1, src2, VX_CONVERT_POLICY_WRAP, dst), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeTarget(node, arg_->target_enum, arg_->target_string));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+
+    return;
+}
+
+
+TEST_WITH_ARG(Target, testvxSetImmediateModeTarget, SetTarget_Arg, SET_IMM_MODE_TARGET_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_image src1 = 0;
+    vx_image src2 = 0;
+    vx_image dst = 0;
+
+    ASSERT_VX_OBJECT(src1 = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(src2 = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(dst  = vxCreateImage(context, 320, 240, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    VX_CALL(vxSetImmediateModeTarget(context, arg_->target_enum, arg_->target_string));
+
+    VX_CALL(vxuAdd(context, src1, src2, VX_CONVERT_POLICY_WRAP, dst));
+
+    VX_CALL(vxReleaseImage(&src1));
+    VX_CALL(vxReleaseImage(&src2));
+    VX_CALL(vxReleaseImage(&dst));
+
+    return;
+}
+
+
+TESTCASE_TESTS(Target,
+        testvxSetNodeTarget,
+        testvxSetImmediateModeTarget
+        )
diff --git a/test_conformance/test_tensor_networks.c b/test_conformance/test_tensor_networks.c
new file mode 100644
index 0000000..775f285
--- /dev/null
+++ b/test_conformance/test_tensor_networks.c
@@ -0,0 +1,364 @@
+/*
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef OPENVX_USE_NN_16
+
+#include "test_tensor_util.h"
+
+#include "Networks/src/common.h"
+#include "Networks/src/graph.h"
+#include "Networks/src/load_weights.h"
+#include "Networks/src/graph_process.h"
+
+#include <stdio.h>
+
+
+TESTCASE(TensorNetworks, CT_VXContext, ct_setup_vx_context, 0)
+
+
+/****************************************************************************
+ *                                                                          *
+ *                              Reference Values                            *
+ *                                                                          *
+ ***************************************************************************/
+
+typedef struct
+{
+    const char * file;
+    int alexnet_classification;
+} ref_t;
+
+const ref_t refs[] = {
+	{ "00000000.jpg", 89 },
+	{ "00000001.jpg", 89 },
+	{ "00000002.jpg", 89 },
+	{ "00000003.jpg", 89 },
+	{ "00000004.jpg", 109 },
+	{ "00000005.jpg", 109 },
+	{ "00000006.jpg", 109 },
+	{ "00000007.jpg", 109 },
+	{ "00000008.jpg", 109 },
+	{ "00000009.jpg", 125 },
+	{ "00000010.jpg", 132 },
+	{ "00000011.jpg", 215 },
+	{ "00000012.jpg", 345 },
+	{ "00000013.jpg", 366 },
+	{ "00000014.jpg", 366 },
+	{ "00000015.jpg", 393 },
+	{ "00000016.jpg", 397 },
+	{ "00000017.jpg", 397 },
+	{ "00000018.jpg", 401 },
+	{ "00000019.jpg", 401 },
+	{ "00000020.jpg", 401 },
+	{ "00000021.jpg", 404 },
+	{ "00000022.jpg", 406 },
+	{ "00000023.jpg", 406 },
+	{ "00000024.jpg", 409 },
+	{ "00000025.jpg", 412 },
+	{ "00000026.jpg", 417 },
+	{ "00000027.jpg", 417 },
+	{ "00000028.jpg", 418 },
+	{ "00000029.jpg", 418 },
+	{ "00000030.jpg", 426 },
+	{ "00000031.jpg", 434 },
+	{ "00000032.jpg", 441 },
+	{ "00000033.jpg", 460 },
+	{ "00000034.jpg", 470 },
+	{ "00000035.jpg", 470 },
+	{ "00000036.jpg", 479 },
+	{ "00000037.jpg", 484 },
+	{ "00000038.jpg", 484 },
+	{ "00000039.jpg", 506 },
+	{ "00000040.jpg", 507 },
+	{ "00000041.jpg", 520 },
+	{ "00000042.jpg", 520 },
+	{ "00000043.jpg", 527 },
+	{ "00000044.jpg", 528 },
+	{ "00000045.jpg", 528 },
+	{ "00000046.jpg", 530 },
+	{ "00000047.jpg", 531 },
+	{ "00000048.jpg", 567 },
+	{ "00000049.jpg", 574 },
+	{ "00000050.jpg", 574 },
+	{ "00000051.jpg", 574 },
+	{ "00000052.jpg", 576 },
+	{ "00000053.jpg", 611 },
+	{ "00000054.jpg", 611 },
+	{ "00000055.jpg", 611 },
+	{ "00000056.jpg", 625 },
+	{ "00000057.jpg", 632 },
+	{ "00000058.jpg", 632 },
+	{ "00000059.jpg", 632 },
+	{ "00000060.jpg", 632 },
+	{ "00000061.jpg", 651 },
+	{ "00000062.jpg", 651 },
+	{ "00000063.jpg", 673 },
+	{ "00000064.jpg", 681 },
+	{ "00000065.jpg", 703 },
+	{ "00000066.jpg", 703 },
+	{ "00000067.jpg", 703 },
+	{ "00000068.jpg", 722 },
+	{ "00000069.jpg", 726 },
+	{ "00000070.jpg", 726 },
+	{ "00000071.jpg", 726 },
+	{ "00000072.jpg", 726 },
+	{ "00000073.jpg", 727 },
+	{ "00000074.jpg", 733 },
+	{ "00000075.jpg", 745 },
+	{ "00000076.jpg", 752 },
+	{ "00000077.jpg", 752 },
+	{ "00000078.jpg", 759 },
+	{ "00000079.jpg", 761 },
+	{ "00000080.jpg", 809 },
+	{ "00000081.jpg", 809 },
+	{ "00000082.jpg", 823 },
+	{ "00000083.jpg", 823 },
+	{ "00000084.jpg", 823 },
+	{ "00000085.jpg", 823 },
+	{ "00000086.jpg", 823 },
+	{ "00000087.jpg", 840 },
+	{ "00000088.jpg", 845 },
+	{ "00000089.jpg", 845 },
+	{ "00000090.jpg", 845 },
+	{ "00000091.jpg", 845 },
+	{ "00000092.jpg", 847 },
+	{ "00000093.jpg", 847 },
+	{ "00000094.jpg", 852 },
+	{ "00000095.jpg", 852 },
+	{ "00000096.jpg", 852 },
+	{ "00000097.jpg", 852 },
+	{ "00000098.jpg", 852 },
+	{ "00000099.jpg", 852 },
+	{ "00000100.jpg", 852 },
+	{ "00000101.jpg", 867 },
+	{ "00000102.jpg", 870 },
+	{ "00000103.jpg", 894 },
+	{ "00000104.jpg", 894 },
+	{ "00000105.jpg", 894 },
+	{ "00000106.jpg", 896 },
+	{ "00000107.jpg", 896 },
+	{ "00000108.jpg", 898 },
+	{ "00000109.jpg", 935 },
+	{ "00000110.jpg", 937 },
+	{ "00000111.jpg", 938 },
+	{ "00000112.jpg", 971 },
+	{ "00000113.jpg", 971 },
+	{ "00000114.jpg", 971 },
+	{ "00000115.jpg", 971 },
+	{ "00000116.jpg", 972 },
+	{ "00000117.jpg", 972 },
+	{ "00000118.jpg", 973 },
+	{ "00000119.jpg", 990 },
+	{ "00000120.jpg", 999 },
+};
+
+
+const int refs_count = sizeof(refs) / sizeof(refs[0]);
+
+const int alexnet_correct_detections = 95;
+const int min_correct_alexnet = 83; //alexnet_correct_detections - refs_count / 10;
+
+
+/****************************************************************************
+ *                                                                          *
+ *                             Common Network Code                          *
+ *                                                                          *
+ ***************************************************************************/
+
+
+/****************************************************************************
+ *                                                                          *
+ *                                Test Code                                 *
+ *                                                                          *
+ ***************************************************************************/
+
+
+/****************************************************************************
+ *                                                                          *
+ *                                 AlexNet                                  *
+ *                                                                          *
+ ***************************************************************************/
+
+// NOTE: Most of the following is taken from the auto generated MO code
+
+TEST(TensorNetworks, AlexNetTestNetwork)
+{
+    vx_status status   = VX_SUCCESS;
+    vx_context context = context_->vx_context_;
+    vx_graph graph     = NULL;
+    char weights_path_full[MAXPATHLENGTH];
+
+    ObjectRefType            vxObjects[MAX_REFERENCE_OBJECTS];
+    ObjectRefContainerType   vxObjectsContainer;
+
+    vxObjectsContainer.count    = 0;
+    vxObjectsContainer.pObjects = &vxObjects[0];
+
+    const char * images_path = "images";
+    const char * weights_path = "../test_conformance/Networks/Binaries/Alexnet";
+    snprintf(weights_path_full, MAXPATHLENGTH, "%s/%s", ct_get_test_file_path(), weights_path);
+
+    // Register OpenVX log callback
+    vxRegisterLogCallback(context, (vx_log_callback_f)VXLog, vx_true_e);
+
+    int correct_detections = 0;
+
+    // Create the OpenVX graph instance
+    graph = vxCreateGraph(context);
+    status |= vxGetStatus((vx_reference)graph);
+    if(status == VX_SUCCESS)
+    {        
+        /*
+         * List of nodes to define a graph partition to create (use for debug purposes)
+         * Note: 1) If the list is empty, the entire graph will be created
+         *       2) The developer is responsible to initialize the graph partition input and process the outputs
+         */
+        char** includeNodesList = NULL; //[] = { }; // List of nodes to include (specified by node name). If empty, all graph nodes will be created.
+        size_t filteredNodeCount = 0;//sizeof(includeNodesList) / sizeof(char *);
+        // Call the graph factory to construct the graph structure
+        status = _GraphFactoryAlexnet(context, graph, &vxObjectsContainer, includeNodesList, filteredNodeCount);
+        if(status == VX_SUCCESS)
+        {
+            // Initialize graph weights and biases
+            status = initAllWeightsAlexnet(&vxObjectsContainer, weights_path_full);
+            if(status == VX_SUCCESS)
+            {
+                // Get reference to the graph input
+                vx_tensor input = (vx_tensor)GetObjectRef(&vxObjectsContainer, "cnn_input");
+
+                // Verify OpenVX graph integrity
+                status = vxVerifyGraph(graph);
+                if(status == VX_SUCCESS)
+                {
+                    for (int image_num = 0; image_num < refs_count; ++image_num)
+                    {
+                        char image_file[255] = "";
+                        int n = snprintf(image_file, sizeof(image_file), "%s/%s/%s",ct_get_test_file_path(), images_path, refs[image_num].file);
+                        EXPECT_EQ_INT(n >= 0, 1);
+                        EXPECT_EQ_INT(n < sizeof(image_file), 1);
+                        if (n < 0 || n >= sizeof(image_file)) continue;
+
+                        // Initialize graph input
+                        status = preprocess(input, image_file);
+                        if(status == VX_SUCCESS)
+                        {
+                            // Process the OpenVX graph
+                            status = vxProcessGraph(graph);
+                            if(status == VX_SUCCESS)
+                            {
+                                // Get reference to the graph output
+                                vx_tensor output = (vx_tensor)GetObjectRef(&vxObjectsContainer, "cnn_output");
+
+                                // Process graph output
+                                int detected_class;
+                                status = postprocess(output, &detected_class);
+                                if(status != VX_SUCCESS)
+                                {
+                                    WriteLog("ERROR: failed to process graph execution results (vx_status=%s)\n", getVxStatusDesc(status));
+                                }
+                                printf("predicted class: %d, expected class: %d\n", detected_class, refs[image_num].alexnet_classification);
+
+                                if (detected_class == refs[image_num].alexnet_classification)
+                                {
+                                    ++correct_detections;
+                                }
+
+                                status = debugDumpLayers(&vxObjectsContainer);
+                                if(status != VX_SUCCESS)
+                                {
+                                    WriteLog("ERROR: failed to dump all layers post graph execution results (vx_status=%s)\n", getVxStatusDesc(status));
+                                }
+                            }
+                            else
+                            {
+                                WriteLog("ERROR: failed to process graph outputs (vx_status=%s)\n", getVxStatusDesc(status));
+                            }
+                        }
+                        else
+                        {
+                            WriteLog("ERROR: failed to process graph inputs (vx_status=%s)\n", getVxStatusDesc(status));
+                        }
+                    }
+                }
+                else
+                {
+                    WriteLog("ERROR: failed to verify graph (vx_status=%s)\n", getVxStatusDesc(status));
+                }
+            }
+            else
+            {
+                WriteLog("ERROR: failed to load weights\n");
+            }
+        }
+        else
+        {
+            WriteLog("ERROR: failed to build graph (vx_status=%s)\n", getVxStatusDesc(status));
+        }
+    }
+    else
+    {
+        WriteLog("ERROR: failed to create graph (vx_status=%s)\n", getVxStatusDesc(status));
+    }
+
+    // Release all OpenVX objects
+    ReleaseObjects(&vxObjectsContainer);
+
+    if(graph)
+    {
+        // Release OpenVX graph
+        status = vxReleaseGraph(&graph);        
+        if(status != VX_SUCCESS)
+        {
+            WriteLog("ERROR: failed to release graph (vx_status=%s)\n", getVxStatusDesc(status));
+        }
+    }
+    
+    VX_CALL(status);
+    if (correct_detections < min_correct_alexnet)
+    {
+        printf("correct detections: %d out of %d (ref has %d correct) min required to pass: %d\n",
+               correct_detections, refs_count, alexnet_correct_detections, min_correct_alexnet);
+        EXPECT_EQ_INT(correct_detections >= min_correct_alexnet, 1);
+    }
+}
+
+/****************************************************************************
+ *                                                                          *
+ *                                 GoogleNet                                *
+ *                                                                          *
+ ***************************************************************************/
+
+//TEST(TensorNetworks, GoogleNet)
+//{
+//}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                                    FCN                                   *
+ *                                                                          *
+ ***************************************************************************/
+
+//TEST(TensorNetworks, FCN)
+//{
+//}
+
+TESTCASE_TESTS(TensorNetworks,
+    AlexNetTestNetwork
+//    GoogleNet,
+//    FCN
+)
+#endif
diff --git a/test_conformance/test_tensor_nn.c b/test_conformance/test_tensor_nn.c
new file mode 100644
index 0000000..fd0fb6a
--- /dev/null
+++ b/test_conformance/test_tensor_nn.c
@@ -0,0 +1,2689 @@
+/*
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef OPENVX_USE_NN
+
+#include "test_tensor_util.h"
+
+TESTCASE(TensorNN, CT_VXContext, ct_setup_vx_context, 0)
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxConvolutionLayer                         *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownGetConvPoolRandParams(
+        uint64_t * rng,
+        size_t pad_sz, size_t kernel_sz,
+        size_t dilation, // 0 in pooling
+        bool use_ceil,
+        /*OUT*/ size_t * input_sz,
+        /*OUT*/ size_t * stride,
+        /*OUT*/ size_t * output_sz)
+{
+    const int min_input = MAX(kernel_sz + (kernel_sz - 1) * dilation - 2 * pad_sz, 1);
+    const int max_input = MIN(min_input, TEST_TENSOR_MAX_DIM_SZ) + 5;
+    *input_sz = (size_t)CT_RNG_NEXT_INT(*rng, min_input, max_input);
+
+    const size_t stride_candidate = (size_t)CT_RNG_NEXT_INT(*rng, 1, 4);
+    const size_t round_addition = use_ceil ? stride_candidate - 1 : 0;
+    const size_t numerator = *input_sz + 2 * pad_sz - (kernel_sz + (kernel_sz - 1) * dilation);
+    *output_sz = (numerator + round_addition) / stride_candidate + 1;
+
+    // There's an ambiguity in the stride determination for ex.
+    //      2 = (6 + 2 * 0 - 1) / stride + 1
+    // would be correct with a stride of 3, 4 or, 5.
+    // We therefore pick the smallest stride satisying the equation.
+    size_t t = stride_candidate;
+    while (t > 1 && (numerator + (use_ceil ? t - 2 : 0)) / (t - 1) + 1 == *output_sz) --t;
+    *stride = t;
+}
+
+static void ownConvolution(
+        enum TestTensorDF fmt,
+        const void * input_ptr, tensor_desc_t input,
+        const void * weight_ptr, tensor_desc_t weight,
+        const void * bias_ptr, tensor_desc_t bias,
+        vx_size pad_x, vx_size pad_y,
+        vx_size stride_x, vx_size stride_y,
+        bool wrap,  // true for WRAP, else SATURATE
+        bool to_ne, // true for ROUND_TO_NE, else ROUND_TO_ZERO
+        vx_size dilation_x, vx_size dilation_y,
+        void * output_ptr, tensor_desc_t output)
+{
+    assert(fmt == TT_Q78 || fmt == TT_U8 || fmt == TT_S8);
+
+    assert(input.dim_num == 3 || input.dim_num == 4);
+    assert(weight.dim_num == 4);
+    assert(bias.dim_num == 0 || bias.dim_num == 1 || bias.dim_num == 3);
+    assert(output.dim_num == input.dim_num);
+
+    const size_t input_w = input.dims[0];
+    const size_t input_h = input.dims[1];
+    const size_t input_c = input.dims[2];
+    const size_t input_b = input.dim_num > 3 ? input.dims[3] : 1;
+
+    const size_t weight_w = weight.dims[0];
+    const size_t weight_h = weight.dims[1];
+    const size_t weight_ifm = weight.dims[2];
+    const size_t weight_ofm = weight.dims[3];
+
+    const bool bias_present = !!bias.dim_num;
+    const bool bias_shared = bias.dim_num == 1;
+    const size_t bias_w = bias.dim_num > 0 ? bias.dims[0] : 0;
+    const size_t bias_h = bias.dim_num > 1 ? bias.dims[1] : 1;
+    const size_t bias_ofm = bias.dim_num > 2 ? bias.dims[2] : 1;
+
+    const size_t output_w = output.dims[0];
+    const size_t output_h = output.dims[1];
+    const size_t output_c = output.dims[2];
+    const size_t output_b = output.dim_num > 3 ? output.dims[3] : 1;
+
+    assert(weight_w + (weight_w - 1) * dilation_x <= input_w + 2 * pad_x);
+    assert(weight_h + (weight_h - 1) * dilation_y <= input_h + 2 * pad_y);
+    assert(weight_ifm == input_c);
+    assert(weight_ofm == output_c);
+
+    if (bias_shared)
+    {
+        assert(bias_w == weight_ofm);
+    }
+    else if (bias_present)
+    {
+        assert(bias_w == output_w);
+        assert(bias_h == output_h);
+        assert(bias_ofm == output_c);
+    }
+
+    assert(output_b == input_b);
+
+    ownAssertStridesModSizeof(fmt, input);
+    ownAssertStridesModSizeof(fmt, weight);
+    ownAssertStridesModSizeof(fmt, bias);
+    ownAssertStridesModSizeof(fmt, output);
+
+    // Input and output pointers for the current batch being processed,
+    // Note: The compiler should've been able to hoist this out... And
+    // there's a bunch of other possible hoising iopportunities here.
+    const char * in_b_ptr = input_ptr;
+    char * out_b_ptr = output_ptr;
+
+    for (size_t b = 0; b < output_b; ++b)
+    for (size_t ofm = 0; ofm < output_c; ++ofm)
+    for (size_t y = 0; y < output_h; ++y)
+    for (size_t x = 0; x < output_w; ++x)
+    {
+        int32_t sum = 0;
+        if (bias_present)
+        {
+            const size_t bias_byte_offset =
+                bias_shared
+                ? (bias.strides[0] * ofm)
+                : (bias.strides[2] * ofm + bias.strides[1] * y + bias.strides[0] * x);
+
+            sum = ownLoadValueAsRawInt(fmt, (char *)bias_ptr + bias_byte_offset);
+        }
+        
+        const size_t xx = x * stride_x;
+        const size_t yy = y * stride_y;
+
+        for (size_t ifm = 0; ifm < input_c; ++ifm)
+        {
+            for (size_t w_y = 0; w_y < weight_h; ++w_y)
+            for (size_t w_x = 0; w_x < weight_w; ++w_x)
+            {
+                const size_t tmp_x = xx + w_x * (dilation_x + 1) + dilation_x;
+                const size_t tmp_y = yy + w_y * (dilation_y + 1) + dilation_y;
+
+                if (tmp_x >= pad_x && tmp_x < input_w + pad_x &&
+                    tmp_y >= pad_y && tmp_y < input_h + pad_y)
+                {
+                    const size_t input_byte_offset =
+                        (b ? input.strides[3] * b : 0) +
+                        input.strides[2] * ifm +
+                        input.strides[1] * (tmp_y - pad_y) +
+                        input.strides[0] * (tmp_x - pad_x);
+                    const size_t weight_byte_offset =
+                        weight.strides[3] * ofm +
+                        weight.strides[2] * ifm +
+                        weight.strides[1] * w_y +
+                        weight.strides[0] * w_x;
+
+                    const int_fast32_t i_val = ownLoadValueAsRawInt(fmt, in_b_ptr + input_byte_offset);
+                    const int_fast32_t w_val = ownLoadValueAsRawInt(fmt, (char *)weight_ptr + weight_byte_offset);
+
+                    // This is ok since all of them fit into int32_t
+                    sum = ownApplyWrapRoundingToAccum(fmt, i_val * w_val, wrap, to_ne) + sum;
+                }
+            }
+            sum = ownWrapOrSat(fmt, sum, wrap);
+        }
+
+        // The step here could be added to the loops instead of recalcing
+        // if, but does the compiler fail to hoist them out???
+        const size_t output_byte_offset =
+            (b ? output.strides[3] * b : 0) +
+            output.strides[2] * ofm +
+            output.strides[1] * y +
+            output.strides[0] * x;
+        ownStoreRawIntValue(fmt, sum, out_b_ptr + output_byte_offset);
+    }
+}
+
+enum TT_CONVOLUTION_BIAS_TYPE
+{
+    BIAS_NONE,
+    BIAS_SHARED,
+    BIAS_PER_LOC,
+};
+
+typedef struct
+{
+    const char * name;
+    enum TestTensorDF fmt;
+    vx_size weight_w;
+    vx_size weight_h;
+
+    vx_size padding_x;
+    vx_size padding_y;
+    enum vx_convert_policy_e convert_policy;
+    enum vx_round_policy_e rounding_policy;
+    enum vx_nn_rounding_type_e down_scale_size_rounding;
+    vx_size dilation_x;
+    vx_size dilation_y;
+
+    int batching_dim;
+    enum TT_CONVOLUTION_BIAS_TYPE bias_type;
+} test_convolution_layer_arg;
+
+#define TT_CONVOLUTION_CASES_BASE(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,BATCH_,BIAS_) \
+    ARG(NAME_"_SZ_X"#SZ_X_"_Y"#SZ_Y_"_PAD_X"#PAD_X_"_Y"#PAD_Y_"_DILATION_X"#D_X_"_Y"#D_Y_,                          \
+        TT_##FMT_, SZ_X_, SZ_Y_, PAD_X_, PAD_Y_, VX_CONVERT_POLICY_##OF_, VX_ROUND_POLICY_TO_##ROUND_,              \
+        VX_NN_DS_SIZE_ROUNDING_##DS_ROUND_, D_X_, D_Y_, BATCH_, BIAS_),
+
+#define TT_CONVOLUTION_CASES_5(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,BATCH_)                          \
+    TT_CONVOLUTION_CASES_BASE(NAME_"_NOBIAS",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,BATCH_,BIAS_NONE)        \
+    TT_CONVOLUTION_CASES_BASE(NAME_"_SHAREDBIAS",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,BATCH_,BIAS_SHARED)  \
+    TT_CONVOLUTION_CASES_BASE(NAME_"_PERLOCBIAS",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,BATCH_,BIAS_PER_LOC)
+
+#define TT_CONVOLUTION_CASES_4(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_)         \
+    TT_CONVOLUTION_CASES_5(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,0)           \
+    TT_CONVOLUTION_CASES_5(NAME_"_BATCH",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,D_X_,D_Y_,1)
+
+#define TT_CONVOLUTION_CASES_3(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_)   \
+    TT_CONVOLUTION_CASES_4(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,0,0) \
+    TT_CONVOLUTION_CASES_4(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,0,1) \
+    TT_CONVOLUTION_CASES_4(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,DS_ROUND_,1,0)
+
+#define TT_CONVOLUTION_CASES_2(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_)             \
+    TT_CONVOLUTION_CASES_3(NAME_"_FLOOR",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,FLOOR)   \
+    TT_CONVOLUTION_CASES_3(NAME_"_CEIL",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,CEILING)
+
+#define TT_CONVOLUTION_CASES_1(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_)                \
+    TT_CONVOLUTION_CASES_2(NAME_"_ZERO",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ZERO)        \
+    TT_CONVOLUTION_CASES_2(NAME_"_NE",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,NEAREST_EVEN)
+
+#define TT_CONVOLUTION_CASES_0(FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_)                  \
+    TT_CONVOLUTION_CASES_1(#FMT_"_WRAP",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,WRAP)    \
+    TT_CONVOLUTION_CASES_1(#FMT_"_SAT",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,SATURATE)
+
+#define TT_CONVOLUTION_CASES_EXTRA(FMT_)    \
+     TT_CONVOLUTION_CASES_0(FMT_,3,4,1,2)
+
+#define TT_CONVOLUTION_CASES_ALEXNET(FMT_)  \
+    TT_CONVOLUTION_CASES_0(FMT_,11,11,0,0)  \
+    TT_CONVOLUTION_CASES_0(FMT_,6,6,0,0)    \
+    TT_CONVOLUTION_CASES_0(FMT_,5,5,0,0)    \
+    TT_CONVOLUTION_CASES_0(FMT_,3,3,0,0)
+
+#define TT_CONVOLUTION_CASES_ALL()      \
+    TT_CONVOLUTION_CASES_ALEXNET(U8)    \
+    TT_CONVOLUTION_CASES_EXTRA(U8)
+
+TEST_WITH_ARG(TensorNN, testConvolutionLayer, test_convolution_layer_arg,
+    TT_CONVOLUTION_CASES_ALL()
+)
+{
+    assert (arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+    assert (arg_->batching_dim >= 0);
+    assert (arg_->bias_type == BIAS_NONE || arg_->bias_type == BIAS_SHARED || arg_->bias_type == BIAS_PER_LOC);
+    assert (arg_->convert_policy == VX_CONVERT_POLICY_WRAP ||
+            arg_->convert_policy == VX_CONVERT_POLICY_SATURATE);
+    assert (arg_->rounding_policy == VX_ROUND_POLICY_TO_ZERO ||
+            arg_->rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN);
+    assert (arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_FLOOR ||
+            arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_CEILING);
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= (size_t)(3 + arg_->batching_dim));
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    const size_t inout_dim_num = 3 + arg_->batching_dim;
+    const size_t weight_dim_num = 4;
+    const size_t bias_dim_num =
+        arg_->bias_type == BIAS_NONE ? 0 :
+        arg_->bias_type == BIAS_SHARED ? 1 : 3;
+
+    size_t in_dims[4];
+    size_t weight_dims[4];
+    size_t bias_dims[3];
+    size_t out_dims[4];
+
+    size_t in_strides[4];
+    size_t weight_strides[4];
+    size_t bias_strides[3];
+    size_t out_strides[4];
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        size_t input_w, stride_x, output_w;
+        ownGetConvPoolRandParams(
+                &rng,
+                arg_->padding_x, arg_->weight_w,
+                arg_->dilation_x,
+                arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_CEILING,
+                &input_w, &stride_x, &output_w);
+
+        size_t input_h, stride_y, output_h;
+        ownGetConvPoolRandParams(
+                &rng,
+                arg_->padding_y, arg_->weight_h,
+                arg_->dilation_y,
+                arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_CEILING,
+                &input_h, &stride_y, &output_h);
+
+        in_dims[0] = input_w;
+        in_dims[1] = input_h;
+        for (vx_size i = 2; i < inout_dim_num; ++i)
+        {
+            in_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        }
+
+        out_dims[0] = output_w;
+        out_dims[1] = output_h;
+        out_dims[2] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        for (vx_size i = 3; i < inout_dim_num; ++i)
+        {
+            out_dims[i] = in_dims[i];
+        }
+
+        weight_dims[0] = arg_->weight_w;
+        weight_dims[1] = arg_->weight_h;
+        weight_dims[2] = in_dims[2];
+        weight_dims[3] = out_dims[2];
+
+        if (bias_dim_num == 1) { bias_dims[0] = out_dims[2]; }
+        else if (bias_dim_num == 3)
+        {
+            bias_dims[0] = out_dims[0];
+            bias_dims[1] = out_dims[1];
+            bias_dims[2] = out_dims[2];
+        }
+
+        vx_tensor in_tensor = vxCreateTensor(context_->vx_context_, inout_dim_num, in_dims, data_type, fixed_point_position);
+        vx_tensor weight_tensor = vxCreateTensor(context_->vx_context_, weight_dim_num, weight_dims, data_type, fixed_point_position);
+        vx_tensor bias_tensor = bias_dim_num ? vxCreateTensor(context_->vx_context_, bias_dim_num, bias_dims, data_type, fixed_point_position) : NULL;
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, inout_dim_num, out_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(weight_tensor, VX_TYPE_TENSOR);
+        if (bias_dim_num) { ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR); }
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        ownGetFlatByteStrides(arg_->fmt, in_dims, inout_dim_num, in_strides);
+        ownGetFlatByteStrides(arg_->fmt, weight_dims, weight_dim_num, weight_strides);
+        ownGetFlatByteStrides(arg_->fmt, bias_dims, bias_dim_num, bias_strides);
+        ownGetFlatByteStrides(arg_->fmt, out_dims, inout_dim_num, out_strides);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          in_dims: { "); for (size_t i = 0; i < inout_dim_num; ++i) { printf("%zu, ", in_dims[i]); } printf(" }, \n");
+            printf("\t          weight_dims: { "); for (size_t i = 0; i < weight_dim_num; ++i) { printf("%zu, ", weight_dims[i]); } printf(" }, \n");
+            if (bias_dim_num)
+            {
+                printf("\t          bias_dims: { "); for (size_t i = 0; i < bias_dim_num; ++i) { printf("%zu, ", bias_dims[i]); } printf(" }, \n");
+            }
+            printf("\t          out_dims: { "); for (size_t i = 0; i < inout_dim_num; ++i) { printf("%zu, ", out_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        const size_t in_bytes = in_dims[inout_dim_num-1] * in_strides[inout_dim_num-1];
+        const size_t weight_bytes = weight_dims[weight_dim_num-1] * weight_strides[weight_dim_num-1];
+        const size_t bias_bytes = bias_dim_num ? bias_dims[bias_dim_num-1] * bias_strides[bias_dim_num-1] : 0;
+        const size_t out_bytes = out_dims[inout_dim_num-1] * out_strides[inout_dim_num-1];
+
+        const size_t in_count = in_bytes / sizeof_data_type;
+        const size_t weight_count = weight_bytes / sizeof_data_type;
+        const size_t bias_count = bias_bytes / sizeof_data_type;
+
+        void * const in = malloc(in_bytes);
+        void * const weight = malloc(weight_bytes);
+        void * const bias = bias_dim_num ? malloc(bias_bytes) : NULL;
+        void * const out = malloc(out_bytes);
+        void * const refs = malloc(out_bytes);
+        ASSERT(in && weight && (!bias_count || bias) && out && refs);
+
+        {
+            const int conv_prod_count = arg_->weight_w * arg_->weight_h * in_dims[2];
+
+            ownFillSmallRandData(arg_->fmt, &rng, in_count, conv_prod_count, in);
+            ownFillSmallRandData(arg_->fmt, &rng, weight_count, conv_prod_count, weight);
+            if (bias_dim_num) { ownFillRandData(arg_->fmt, &rng, bias_count, bias); }
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in_tensor, inout_dim_num, view_start, in_dims, in_strides, in, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            VX_CALL(vxCopyTensorPatch(weight_tensor, weight_dim_num, view_start, weight_dims, weight_strides, weight, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            if (bias_dim_num)
+            {
+                VX_CALL(vxCopyTensorPatch(bias_tensor, bias_dim_num, view_start, bias_dims, bias_strides, bias, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            }
+            VX_CALL(vxCopyTensorPatch(out_tensor, inout_dim_num, view_start, out_dims, out_strides, out, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            const vx_nn_convolution_params_t params =
+            {
+                arg_->padding_x, arg_->padding_y, arg_->convert_policy, arg_->rounding_policy,
+                arg_->down_scale_size_rounding, arg_->dilation_x, arg_->dilation_y
+            };
+            vx_node node = vxConvolutionLayer(graph, in_tensor, weight_tensor, bias_tensor, &params, sizeof(params), out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            tensor_desc_t in_td = { inout_dim_num, in_dims, in_strides };
+            tensor_desc_t weight_td = { weight_dim_num, weight_dims, weight_strides };
+            tensor_desc_t bias_td = { bias_dim_num, bias_dims, bias_strides };
+            tensor_desc_t out_td = { inout_dim_num, out_dims, out_strides };
+
+            ownConvolution(
+                    arg_->fmt,
+                    in, in_td,
+                    weight, weight_td,
+                    bias, bias_td,
+                    arg_->padding_x, arg_->padding_y,
+                    stride_x, stride_y,
+                    arg_->convert_policy == VX_CONVERT_POLICY_WRAP,
+                    arg_->rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN,
+                    arg_->dilation_x, arg_->dilation_y,
+                    refs, out_td);
+
+            const vx_size view_start[5] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, inout_dim_num, view_start, out_dims, out_strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, out_dims, inout_dim_num, out_strides,
+                        refs, out_dims, inout_dim_num, out_strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&in_tensor));
+        VX_CALL(vxReleaseTensor(&weight_tensor));
+        if (bias_dim_num) { VX_CALL(vxReleaseTensor(&bias_tensor)); }
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in_tensor);
+        EXPECT_EQ_PTR(NULL, weight_tensor);
+        EXPECT_EQ_PTR(NULL, bias_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in);
+        free(weight);
+        free(bias);
+        free(out);
+        free(refs);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxFullyConnectedLayer                      *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownFullyConnected(
+        enum TestTensorDF fmt,
+        const void * input_ptr, tensor_desc_t input,
+        const void * weight_ptr, tensor_desc_t weight,
+        const void * bias_ptr, tensor_desc_t bias,
+        bool wrap,  // true for WRAP, else SATURATE
+        bool to_ne, // true for ROUND_TO_NE, else ROUND_TO_ZERO
+        void * output_ptr, tensor_desc_t output)
+{
+    assert (fmt == TT_Q78 || fmt == TT_U8 || fmt == TT_S8);
+
+    const size_t batch_dim_num = output.dim_num - 1;
+    assert (batch_dim_num >= 0 && batch_dim_num <= 3);
+
+    const size_t core_dim_num = input.dim_num - batch_dim_num;
+    assert ((core_dim_num == 1 && weight.dim_num == 2) ||
+            (core_dim_num == 3 && (weight.dim_num == 2 || weight.dim_num == 4)));
+
+    assert (bias.dim_num == !!bias_ptr);
+    const bool bias_present = !!bias.dim_num;
+
+    if (core_dim_num == 1)
+    {
+        assert (weight.dims[0] == input.dims[0]);
+    }
+    else if (weight.dim_num == 2)
+    {
+        assert (weight.dims[0] == input.dims[0] * input.dims[1] * input.dims[2]);
+    }
+    else
+    {
+        assert (weight.dims[0] == input.dims[0]);
+        assert (weight.dims[1] == input.dims[1]);
+        assert (weight.dims[2] == input.dims[2]);
+    }
+
+    assert (weight.dims[weight.dim_num - 1] == output.dims[0]);
+    assert (!bias_present || bias.dims[0] == output.dims[0]);
+
+    for (size_t i = 0; i < batch_dim_num; ++i)
+    {
+        assert (output.dims[i + 1] == input.dims[i + core_dim_num]);
+    }
+
+    ownAssertStridesModSizeof(fmt, input);
+    ownAssertStridesModSizeof(fmt, weight);
+    ownAssertStridesModSizeof(fmt, bias);
+    ownAssertStridesModSizeof(fmt, output);
+
+    const size_t tmp_batch_dims[3] =
+    {
+        (batch_dim_num > 0 ? output.dims[1] : 1),
+        (batch_dim_num > 1 ? output.dims[2] : 1),
+        (batch_dim_num > 2 ? output.dims[3] : 1),
+    };
+
+    const size_t tmp_input_dims[3] =
+    {
+        (core_dim_num == 3 ? input.dims[0] : 1),
+        (core_dim_num == 3 ? input.dims[1] : 1),
+        input.dims[core_dim_num - 1],
+    };
+
+    const size_t ofm_num = output.dims[0];
+
+    for (size_t b2 = 0; b2 < tmp_batch_dims[2]; ++b2)
+    for (size_t b1 = 0; b1 < tmp_batch_dims[1]; ++b1)
+    for (size_t b0 = 0; b0 < tmp_batch_dims[0]; ++b0)
+    for (size_t ofm = 0; ofm < ofm_num; ++ofm)
+    {
+        int_fast32_t sum =
+            bias_present ? ownLoadValueAsRawInt(fmt, (char *)bias_ptr + bias.strides[0] * ofm) : 0;
+
+        for (size_t ifm = 0; ifm < tmp_input_dims[2]; ++ifm)
+        for (size_t y = 0; y < tmp_input_dims[1]; ++y)
+        for (size_t x = 0; x < tmp_input_dims[0]; ++x)
+        {
+            size_t weight_byte_offset = weight.strides[weight.dim_num-1] * ofm;
+            if (core_dim_num == 1)
+            {
+                weight_byte_offset += weight.strides[0] * ifm;
+            }
+            else if (weight.dim_num == 2)
+            {
+                const size_t count = x + tmp_input_dims[0] * (y + tmp_input_dims[1] * ifm);
+                weight_byte_offset += weight.strides[0] * count;
+            }
+            else
+            {
+                weight_byte_offset +=
+                    weight.strides[2] * ifm +
+                    weight.strides[1] * y +
+                    weight.strides[0] * x;
+            }
+
+            const size_t input_byte_offset =
+                (batch_dim_num > 2 ? input.strides[core_dim_num + 2] * b2 : 0) +
+                (batch_dim_num > 1 ? input.strides[core_dim_num + 1] * b1 : 0) +
+                (batch_dim_num > 0 ? input.strides[core_dim_num + 0] * b0 : 0) +
+                input.strides[core_dim_num - 1] * ifm +
+                (core_dim_num == 3 ? input.strides[1] * y : 0) +
+                (core_dim_num == 3 ? input.strides[0] * x : 0);
+
+            const int_fast32_t w_val = ownLoadValueAsRawInt(fmt, (char *)weight_ptr + weight_byte_offset);
+            const int_fast32_t i_val = ownLoadValueAsRawInt(fmt, (char *)input_ptr + input_byte_offset);
+
+            // This is ok since all of them fit into int32_t
+            sum = ownApplyWrapRoundingToAccum(fmt, i_val * w_val, wrap, to_ne) + sum;
+        }
+
+        sum = ownWrapOrSat(fmt, sum, wrap);
+
+        const size_t output_byte_offset =
+            (batch_dim_num > 2 ? output.strides[3] * b2 : 0) +
+            (batch_dim_num > 1 ? output.strides[2] * b1 : 0) +
+            (batch_dim_num > 0 ? output.strides[1] * b0 : 0) +
+            output.strides[0] * ofm;
+
+        ownStoreRawIntValue(fmt, sum, (char *)output_ptr + output_byte_offset);
+    }
+}
+
+typedef struct
+{
+    const char * name;
+    enum TestTensorDF fmt;
+
+    enum vx_convert_policy_e overflow_policy;
+    enum vx_round_policy_e rounding_policy;
+
+    vx_size core_dim;
+    vx_size weight_dim;
+    bool bias_present;
+    vx_size batch_dim;
+} test_fully_connected_layer_arg;
+
+#define TT_FULLYCONNECTED_CASES_BASE(NAME_,FMT_,OF_,ROUND_,CORE_DIMS_,W_DIMS_,BATCH_,BIAS_) \
+    ARG(NAME_"_COREDIMS_"#CORE_DIMS_"_WEIGHTDIMS_"#W_DIMS_"_BATCHDIMS_"#BATCH_,             \
+        TT_##FMT_,VX_CONVERT_POLICY_##OF_, VX_ROUND_POLICY_TO_##ROUND_,                     \
+        CORE_DIMS_, W_DIMS_, BIAS_, BATCH_),
+
+#define TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,CORE_DIMS_,W_DIM_,BATCH_)           \
+    TT_FULLYCONNECTED_CASES_BASE(NAME_"_NOBIAS",FMT_,OF_,ROUND_,CORE_DIMS_,W_DIM_,BATCH_,0) \
+    TT_FULLYCONNECTED_CASES_BASE(NAME_"_BIAS",FMT_,OF_,ROUND_,CORE_DIMS_,W_DIM_,BATCH_,1)
+
+#define TT_FULLYCONNECTED_CASES_2(NAME_,FMT_,OF_,ROUND_)    \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,1,2,0)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,1,2,1)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,1,2,2)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,1,2,3)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,3,2,0)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,3,2,1)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,3,4,0)  \
+    TT_FULLYCONNECTED_CASES_3(NAME_,FMT_,OF_,ROUND_,3,4,1)
+
+#define TT_FULLYCONNECTED_CASES_1(NAME_,FMT_,OF_)               \
+    TT_FULLYCONNECTED_CASES_2(NAME_"_ZERO",FMT_,OF_,ZERO)       \
+    TT_FULLYCONNECTED_CASES_2(NAME_"_NE",FMT_,OF_,NEAREST_EVEN)
+
+#define TT_FULLYCONNECTED_CASES_0(FMT_)                     \
+    TT_FULLYCONNECTED_CASES_1(#FMT_"_WRAP",FMT_,WRAP)       \
+    TT_FULLYCONNECTED_CASES_1(#FMT_"_SAT",FMT_,SATURATE)    \
+
+#define TT_FULLYCONNECTED_CASES_ALL()   \
+    TT_FULLYCONNECTED_CASES_0(U8)
+
+TEST_WITH_ARG(TensorNN, testFullyConnectedLayer, test_fully_connected_layer_arg,
+        TT_FULLYCONNECTED_CASES_ALL()
+)
+{
+    assert (arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+    assert (arg_->overflow_policy == VX_CONVERT_POLICY_WRAP ||
+            arg_->overflow_policy == VX_CONVERT_POLICY_SATURATE);
+    assert (arg_->rounding_policy == VX_ROUND_POLICY_TO_ZERO ||
+            arg_->rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN);
+    assert ((arg_->core_dim == 1 && arg_->weight_dim == 2) ||
+            (arg_->core_dim == 3 && (arg_->weight_dim == 2 || arg_->weight_dim == 4)));
+    assert (arg_->batch_dim >= 0 && arg_->core_dim + arg_->batch_dim <= 4);
+
+    {   // TODO: ownTestGetMaxDims() ?
+        vx_size max_dims = 0;
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= 4);
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    const size_t in_dim_num = arg_->core_dim + arg_->batch_dim;
+    const size_t weight_dim_num = arg_->weight_dim;
+    const size_t bias_dim_num = arg_->bias_present;
+    const size_t out_dim_num = 1 + arg_->batch_dim;
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        vx_size in_dims[4];
+        vx_size weight_dims[4];
+        vx_size bias_dims[1];
+        vx_size out_dims[4];
+        {
+            for (size_t i = 0; i < in_dim_num; ++i) 
+            {
+                in_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+            }
+
+            out_dims[0] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+            for (size_t i = 0; i < arg_->batch_dim; ++i)
+            {
+                out_dims[i + 1] = in_dims[i + arg_->core_dim];
+            }
+
+            weight_dims[weight_dim_num-1] = out_dims[0];
+            if (arg_->core_dim == 1)
+            {
+                weight_dims[0] = in_dims[0];
+            }
+            else if (arg_->weight_dim == 2)
+            {
+                weight_dims[0] = in_dims[0] * in_dims[1] * in_dims[2];
+            }
+            else
+            {
+                weight_dims[0] = in_dims[0];
+                weight_dims[1] = in_dims[1];
+                weight_dims[2] = in_dims[2];
+            } 
+
+            if (bias_dim_num) bias_dims[0] = out_dims[0];
+        }
+
+        vx_size in_strides[4];
+        vx_size weight_strides[4];
+        vx_size bias_strides[1];
+        vx_size out_strides[4];
+        ownGetFlatByteStrides(arg_->fmt, in_dims, in_dim_num, in_strides);
+        ownGetFlatByteStrides(arg_->fmt, weight_dims, weight_dim_num, weight_strides);
+        ownGetFlatByteStrides(arg_->fmt, bias_dims, bias_dim_num, bias_strides);
+        ownGetFlatByteStrides(arg_->fmt, out_dims, out_dim_num, out_strides);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          in_dims: { "); for (size_t i = 0; i < in_dim_num; ++i) { printf("%zu, ", in_dims[i]); } printf(" }, \n");
+            printf("\t          weight_dims: { "); for (size_t i = 0; i < weight_dim_num; ++i) { printf("%zu, ", weight_dims[i]); } printf(" }, \n");
+            if (bias_dim_num)
+            {
+                printf("\t          bias_dims: { "); for (size_t i = 0; i < bias_dim_num; ++i) { printf("%zu, ", bias_dims[i]); } printf(" }, \n");
+            }
+            printf("\t          out_dims: { "); for (size_t i = 0; i < out_dim_num; ++i) { printf("%zu, ", out_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        const size_t in_bytes = in_dims[in_dim_num-1] * in_strides[in_dim_num-1];
+        const size_t weight_bytes = weight_dims[weight_dim_num-1] * weight_strides[weight_dim_num-1];
+        const size_t bias_bytes = bias_dim_num ? bias_dims[bias_dim_num-1] * bias_strides[bias_dim_num-1] : 0;
+        const size_t out_bytes = out_dims[out_dim_num-1] * out_strides[out_dim_num-1];
+
+        const size_t in_count = in_bytes / sizeof_data_type;
+        const size_t weight_count = bias_bytes / sizeof_data_type;
+        const size_t bias_count = bias_bytes / sizeof_data_type;
+
+        void * const in = malloc(in_bytes);
+        void * const weight = malloc(weight_bytes);
+        void * const bias = bias_dim_num ? malloc(bias_bytes) : NULL;
+        void * const out = malloc(out_bytes);
+        void * const refs = malloc(out_bytes);
+        ASSERT(in && weight && (!bias_dim_num || bias) && out && refs);
+
+        vx_tensor in_tensor = vxCreateTensor(context_->vx_context_, in_dim_num, in_dims, data_type, fixed_point_position);
+        vx_tensor weight_tensor = vxCreateTensor(context_->vx_context_, weight_dim_num, weight_dims, data_type, fixed_point_position);
+        vx_tensor bias_tensor =
+            bias_dim_num
+            ? vxCreateTensor(context_->vx_context_, bias_dim_num, bias_dims, data_type, fixed_point_position)
+            : NULL;
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, out_dim_num, out_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(weight_tensor, VX_TYPE_TENSOR);
+        if (bias_dim_num) { ASSERT_VX_OBJECT(bias_tensor, VX_TYPE_TENSOR); }
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        {
+            size_t fc_prod_count = 1;
+            for (size_t i = 0; i < weight_dim_num - 1; ++ i)
+            {
+                fc_prod_count *= weight_dims[i];
+            }
+
+            ownFillSmallRandData(arg_->fmt, &rng, in_count, fc_prod_count, in);
+            ownFillSmallRandData(arg_->fmt, &rng, weight_count, fc_prod_count, weight);
+            if (bias_dim_num) { ownFillRandData(arg_->fmt, &rng, bias_count, bias); }
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in_tensor, in_dim_num, view_start, in_dims, in_strides, in, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            VX_CALL(vxCopyTensorPatch(weight_tensor, weight_dim_num, view_start, weight_dims, weight_strides, weight, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            if (bias_dim_num)
+            {
+                VX_CALL(vxCopyTensorPatch(bias_tensor, bias_dim_num, view_start, bias_dims, bias_strides, bias, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            }
+            VX_CALL(vxCopyTensorPatch(out_tensor, out_dim_num, view_start, out_dims, out_strides, out, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxFullyConnectedLayer(
+                    graph,
+                    in_tensor, weight_tensor, bias_tensor,
+                    arg_->overflow_policy,
+                    arg_->rounding_policy,
+                    out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            tensor_desc_t in_td = { in_dim_num, in_dims, in_strides };
+            tensor_desc_t weight_td = { weight_dim_num, weight_dims, weight_strides };
+            tensor_desc_t bias_td = { bias_dim_num, bias_dims, bias_strides };
+            tensor_desc_t out_td = { out_dim_num, out_dims, out_strides };
+
+            ownFullyConnected(
+                    arg_->fmt,
+                    in, in_td,
+                    weight, weight_td,
+                    bias, bias_td,
+                    arg_->overflow_policy == VX_CONVERT_POLICY_WRAP,
+                    arg_->rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN,
+                    refs, out_td);
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, out_dim_num, view_start, out_dims, out_strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, out_dims, out_dim_num, out_strides,
+                        refs, out_dims, out_dim_num, out_strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&in_tensor));
+        VX_CALL(vxReleaseTensor(&weight_tensor));
+        if (bias_dim_num) { VX_CALL(vxReleaseTensor(&bias_tensor)); }
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in_tensor);
+        EXPECT_EQ_PTR(NULL, weight_tensor);
+        EXPECT_EQ_PTR(NULL, bias_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in);
+        free(weight);
+        free(bias);
+        free(out);
+        free(refs);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxPoolingLayer                             *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownPooling(
+        enum TestTensorDF fmt,
+        const void * input_ptr, tensor_desc_t input,
+        bool max_pooling,   // MAX vs AVG pooling
+        size_t size_x, size_t size_y,
+        size_t pad_x, size_t pad_y,
+        size_t stride_x, size_t stride_y,
+        void * output_ptr, tensor_desc_t output)
+{
+    assert(input.dim_num == 3 || input.dim_num == 4);
+    assert(output.dim_num == input.dim_num);
+
+    const size_t input_w = input.dims[0];
+    const size_t input_h = input.dims[1];
+    const size_t input_c = input.dims[2];
+    const size_t input_b = input.dim_num > 3 ? input.dims[3] : 1;
+
+    const size_t output_w = output.dims[0];
+    const size_t output_h = output.dims[1];
+    const size_t output_c = output.dims[2];
+    const size_t output_b = output.dim_num > 3 ? output.dims[3] : 1;
+
+    assert(input_w + 2 * pad_x >= size_x);
+    assert(input_h + 2 * pad_y >= size_y);
+//    assert(missing_div_with_round_mode((input_w + 2 * pad_x - size_x), stride_x) + 1 == output_w);
+//    assert(missing_div_with_round_mode((input_h + 2 * pad_y - size_y), stride_y) + 1 == output_h);
+
+    //TODO: verify this is enforced by the input/output validators
+    assert(output_c == input_c);
+    assert(output_b == input_b);
+
+    // Since we calc offsets manually and cast to (int16_t *), we expect the-
+    // alignment to be correct already
+    ownAssertStridesModSizeof (fmt, input);
+    ownAssertStridesModSizeof (fmt, output);
+
+    //TODO: previously there was a 1d/3d stride for ofm but there's no 1D pool, right?
+
+    // Input and output pointers for the current batch being processed,
+    // Note: The compiler should've been able to hoist this out... And
+    // there's a bunch of other possible hoising iopportunities here.
+    const char * in_b_ptr = input_ptr;
+    char * out_b_ptr = output_ptr;
+
+    for (size_t b = 0; b < output_b; ++b, in_b_ptr += input.strides[3], out_b_ptr += output.strides[3])
+    for (size_t c = 0; c < output_c; ++c)
+    for (size_t y = 0; y < output_h; ++y)
+    for (size_t x = 0; x < output_w; ++x)
+    {
+        int32_t result = max_pooling ? ownGetMinValue(fmt) : 0;
+
+        const size_t xx_start = CLAMP(x * stride_x,          pad_x, input_w + pad_x) - pad_x;
+        const size_t xx_after = CLAMP(x * stride_x + size_x, pad_x, input_w + pad_x) - pad_x;
+
+        const size_t yy_start = CLAMP(y * stride_y,          pad_y, input_h + pad_y) - pad_y;
+        const size_t yy_after = CLAMP(y * stride_y + size_y, pad_y, input_h + pad_y) - pad_y;
+
+        for (size_t yy = yy_start; yy < yy_after; ++yy)
+        for (size_t xx = xx_start; xx < xx_after; ++xx)
+        {
+            const size_t input_byte_offset =
+                input.strides[2] * c +
+                input.strides[1] * yy +
+                input.strides[0] * xx;
+            const int32_t i_val = ownLoadValueAsRawInt(fmt, in_b_ptr + input_byte_offset);
+
+            result = max_pooling? MAX(result, i_val) : (result + i_val);
+        }
+
+        if (!max_pooling)
+        {
+            //result = conversion_24_8(result / (int16_t)(size_x * size_y));
+          result = CLAMP(result / (int32_t)(size_x * size_y), ownGetMinValue(fmt), ownGetMaxValue(fmt));
+        }
+
+        const size_t output_byte_offset =
+            output.strides[2] * c +
+            output.strides[1] * y +
+            output.strides[0] * x;
+        ownStoreRawIntValue(fmt, result, out_b_ptr + output_byte_offset);
+    }
+}
+
+typedef struct
+{
+    const char * name;
+    enum TestTensorDF fmt;
+    enum vx_nn_pooling_type_e pooling_type;
+
+    vx_size size_x;
+    vx_size size_y;
+    vx_size padding_x;
+    vx_size padding_y;
+    enum vx_nn_rounding_type_e down_scale_size_rounding;
+
+    bool batching_dim;
+} test_pooling_layer_arg;
+
+#define TT_POOLING_CASES_BASE(NAME_,FMT_,TYPE_,ROUND_,SX_,SY_,PX_,PY_,BATCH_)   \
+    ARG(#FMT_"_SIZE_X"#SX_"_Y"#SY_"_PAD_X"#PX_"_Y"#PY_"_"#TYPE_""NAME_,         \
+        TT_##FMT_, VX_NN_POOLING_##TYPE_, SX_, SY_, PX_, PY_,                   \
+        VX_NN_DS_SIZE_ROUNDING_##ROUND_, BATCH_),
+
+#define TT_POOLING_CASES_2(FMT_,TYPE_,ROUND_,SX_,SY_,PX_,PY_)           \
+    TT_POOLING_CASES_BASE("",FMT_,TYPE_,ROUND_,SX_,SY_,PX_,PY_,0)       \
+    TT_POOLING_CASES_BASE("_BATCH",FMT_,TYPE_,ROUND_,SX_,SY_,PX_,PY_,1)
+
+#define TT_POOLING_CASES_1(FMT_,TYPE_,ROUND_)   \
+    TT_POOLING_CASES_2(FMT_,TYPE_,ROUND_,3,4,1,2)
+
+#define TT_POOLING_CASES_0(FMT_,TYPE_)      \
+    TT_POOLING_CASES_1(FMT_,TYPE_,FLOOR)    \
+    TT_POOLING_CASES_1(FMT_,TYPE_,CEILING)
+
+#define TT_POOLING_CASES_EXTRA(FMT_)    \
+    TT_POOLING_CASES_0(FMT_,MAX)        \
+    TT_POOLING_CASES_0(FMT_,AVG)
+
+#define TT_POOLING_CASES_ALEXNET(FMT_)          \
+    TT_POOLING_CASES_2(FMT_,MAX,FLOOR,3,3,0,0)
+
+#define TT_POOLING_CASES_ALL()      \
+    TT_POOLING_CASES_ALEXNET(U8)    \
+    TT_POOLING_CASES_EXTRA(U8)
+
+TEST_WITH_ARG(TensorNN, testPoolingLayer, test_pooling_layer_arg,
+        TT_POOLING_CASES_ALL()
+)
+{
+    assert (arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+    assert (arg_->pooling_type == VX_NN_POOLING_MAX ||
+            arg_->pooling_type == VX_NN_POOLING_AVG);
+    assert (arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_FLOOR ||
+            arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_CEILING);
+    assert (arg_->batching_dim == 0 || arg_->batching_dim == 1);
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= (size_t)(3 + arg_->batching_dim));
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    const size_t dim_num = 3 + arg_->batching_dim;
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        size_t input_w, stride_x, output_w;
+        ownGetConvPoolRandParams(
+                &rng,
+                arg_->padding_x, arg_->size_x,
+                0 /* there's no dilation in pooling */,
+                arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_CEILING,
+                &input_w, &stride_x, &output_w);
+
+        size_t input_h, stride_y, output_h;
+        ownGetConvPoolRandParams(
+                &rng,
+                arg_->padding_y, arg_->size_y,
+                0 /* there's no dilation in pooling */,
+                arg_->down_scale_size_rounding == VX_NN_DS_SIZE_ROUNDING_CEILING,
+                &input_h, &stride_y, &output_h);
+
+        const size_t chan = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        const size_t batch = arg_->batching_dim ? (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1) : 0;
+
+        const vx_size in_dims[4] = { input_w, input_h, chan, batch };
+        const vx_size out_dims[4] = { output_w, output_h, chan, batch };
+
+        vx_size in_strides[4];
+        vx_size out_strides[4];
+        ownGetFlatByteStrides(arg_->fmt, in_dims, dim_num, in_strides);
+        ownGetFlatByteStrides(arg_->fmt, out_dims, dim_num, out_strides);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          in_dims: { "); for (size_t i = 0; i < dim_num; ++i) { printf("%zu, ", in_dims[i]); } printf(" }, \n");
+            printf("\t          out_dims: { "); for (size_t i = 0; i < dim_num; ++i) { printf("%zu, ", out_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        const size_t in_bytes = in_dims[dim_num-1] * in_strides[dim_num-1];
+        const size_t out_bytes = out_dims[dim_num-1] * out_strides[dim_num-1];
+
+        const size_t in_count = in_bytes / sizeof_data_type;
+
+        void * const in = malloc(in_bytes);
+        void * const out = malloc(out_bytes);
+        void * const refs = malloc(out_bytes);
+        ASSERT(in && out && refs);
+
+        vx_tensor in_tensor = vxCreateTensor(context_->vx_context_, dim_num, in_dims, data_type, fixed_point_position);
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, dim_num, out_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        {
+            // No real need to fo ownFillSmallRandData here because of the
+            // guranteed 32bit accum and our data counts being small.
+            ownFillRandData(arg_->fmt, &rng, in_count, in); 
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in_tensor, dim_num, view_start, in_dims, in_strides, in, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxPoolingLayer(
+                    graph, in_tensor, arg_->pooling_type,
+                    arg_->size_x, arg_->size_y,
+                    arg_->padding_x, arg_->padding_y,
+                    arg_->down_scale_size_rounding,
+                    out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            tensor_desc_t in_td = { dim_num, in_dims, in_strides };
+            tensor_desc_t out_td = { dim_num, out_dims, out_strides };
+
+            ownPooling(
+                    arg_->fmt,
+                    in, in_td,
+                    arg_->pooling_type == VX_NN_POOLING_MAX,
+                    arg_->size_x, arg_->size_y,
+                    arg_->padding_x, arg_->padding_y,
+                    stride_x, stride_y,
+                    refs, out_td);
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, dim_num, view_start, out_dims, out_strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, out_dims, dim_num, out_strides,
+                        refs, out_dims, dim_num, out_strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&in_tensor));
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in);
+        free(out);
+        free(refs);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxSoftmaxLayer                             *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownSoftmax(
+        enum TestTensorDF fmt,
+        const void * input_ptr, tensor_desc_t input,
+        void * output_ptr, tensor_desc_t output)
+{
+//TODO: @Tomer, should we allow extra batch dims beyond 4? conv and poll have upto 3 of them! if not we can just discard this define and its usage
+#define SOFTMAX_ALLOW_EXTRA_DIMS
+    
+#ifdef SOFTMAX_ALLOW_EXTRA_DIMS
+    assert(input.dim_num >= 1 && input.dim_num <= 4);
+#else
+    assert(input.dim_num >= 1 && input.dim_num < MAX_NUM_OF_DIMENSIONS);
+#endif
+
+    assert(input.dim_num == output.dim_num);
+
+    // Since we calc offsets manually and cast to (int16_t *), we expect the-
+    // alignment to be correct already
+    ownAssertStridesModSizeof (fmt, input);
+    ownAssertStridesModSizeof (fmt, output);
+
+    // We precalc and store the key (summation) index and the rest of the dims
+    // which describe batching before the main loop for clarity, since the later may be partially shifted depending on the key dim.
+
+    size_t key_sz = 0;
+    size_t key_in_stride = 0;
+    
+#ifdef SOFTMAX_ALLOW_EXTRA_DIMS
+    size_t batch_sz[5] = { 1, 1, 1, 1, 1 };
+    size_t batch_in_strides[5] = { 0 };
+    size_t batch_out_strides[5] = { 0 };
+#else
+    size_t batch_sz[3] = { 1, 1, 1 };
+    size_t batch_in_strides[3] = { 0 };
+    size_t batch_out_strides[3] = { 0 };
+#endif
+
+#if 1
+    {
+        size_t key = input.dim_num > 2 ? 2 : 0;
+
+        key_sz = input.dims[key];
+        key_in_stride = input.strides[key];
+
+        for (size_t i = 0; i < input.dim_num - 1; ++i)
+        {
+            size_t idx = i < key ? i : i + 1;
+
+            batch_sz[i] = input.dims[idx];
+            batch_in_strides[i] = input.strides[idx];
+            batch_out_strides[i] = output.strides[idx];
+        }
+    }
+#else
+    switch (input.dim_num)
+    {
+#ifdef SOFTMAX_ALLOW_EXTRA_DIMS
+    case 6:
+        batch_sz[4] = input.dims[5];
+        batch_in_strides[4] = input.strides[5];
+        batch_out_strides[4] = output.strides[5];
+        /* fallthrough */
+    case 5:
+        batch_sz[3] = input.dims[4];
+        batch_in_strides[3] = input.strides[4];
+        batch_out_strides[3] = output.strides[4];
+        /* fallthrough */
+#endif
+    case 4:
+        batch_sz[2] = input.dims[3];
+        batch_in_strides[2] = input.strides[3];
+        batch_out_strides[2] = output.strides[3];
+        /* fallthrough */
+    case 3:
+        key_sz = input.dims[2];
+        key_in_stride = input.strides[2];
+
+        batch_sz[1] = input.dims[1];
+        batch_in_strides[1] = input.strides[1];
+        batch_out_strides[1] = output.strides[1];
+
+        batch_sz[0] = input.dims[0];
+        batch_in_strides[0] = input.strides[0];
+        batch_out_strides[0] = output.strides[0];
+        break;
+    case 2:
+        batch_sz[0] = input.dims[1];
+        batch_in_strides[0] = input.strides[1];
+        batch_out_strides[0] = output.strides[1];
+        /* fallthrough */
+    case 1:
+        key_sz = input.dims[0];
+        key_in_stride = input.strides[0];
+        break;
+    default:
+        assert(0);
+    }
+#endif
+
+// The main loop calculation can be done with a double accumulator, float with
+// value normalization (exp(val-max_val)) to avoid getting to inf or plain -
+// float. Leaving all 3 here for result comparision, since the spec has nothing
+// about required accumulator width.
+//
+// Note: For U8, S8 all 3 will result in the same results. But for Q78, because
+//       summing exp(127) is quite large for a single precision float, using it
+//       may already result in inf within the summation causing all values to
+//       0 after softmax! And obviously for F32, the change of getting there is
+//       even higher.
+//
+// Set to 0 for float, 1 for double, 2 for float with norm.
+#define SOFTMAX_ACCUM_TYPE 0
+
+#ifdef SOFTMAX_ALLOW_EXTRA_DIMS
+    for (size_t b4 = 0; b4 < batch_sz[4]; ++b4)
+    for (size_t b3 = 0; b3 < batch_sz[3]; ++b3)
+#endif
+    for (size_t b2 = 0; b2 < batch_sz[2]; ++b2)
+    for (size_t b1 = 0; b1 < batch_sz[1]; ++b1)
+    for (size_t b0 = 0; b0 < batch_sz[0]; ++b0)
+    {
+        // Input and output pointers for the current batch being processed.
+        const char * in_b_ptr = (char*)input_ptr +
+            batch_in_strides[2] * b2 +
+            batch_in_strides[1] * b1 +
+            batch_in_strides[0] * b0;
+        char * out_b_ptr = (char*)output_ptr +
+            batch_out_strides[2] * b2 +
+            batch_out_strides[1] * b1 +
+            batch_out_strides[0] * b0;
+
+#ifdef SOFTMAX_ALLOW_EXTRA_DIMS
+            in_b_ptr += batch_in_strides[4] * b4 + batch_in_strides[3] * b3;
+            out_b_ptr += batch_out_strides[4] * b4 + batch_out_strides[3] * b3;
+#endif
+
+#if SOFTMAX_ACCUM_TYPE == 0
+        float sum = 0.f;
+
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int_fast32_t in = ownLoadValueAsRawInt(fmt, in_b_ptr + key_in_stride * i);
+            float in_val = ownUnquantize(fmt, in);
+
+            sum += expf(in_val);
+        }
+
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int_fast32_t in = ownLoadValueAsRawInt(fmt, in_b_ptr + key_in_stride * i);
+            float in_val = ownUnquantize(fmt, in);
+
+            ownStoreRawIntValue(fmt, ownQuantize(fmt, expf(in_val) / sum), out_b_ptr + key_in_stride * i);
+        }
+#elif SOFTMAX_ACCUM_TYPE == 1
+        double sum = 0.;
+
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int16_t * in_ptr = (int16_t *)(in_b_ptr + key_in_stride * i);
+            float in_val = UNQUANTIZE(*in_ptr);
+
+            sum += exp(in_val);
+        }
+
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int16_t * in_ptr = (int16_t *)(in_b_ptr + key_in_stride * i);
+            float in_val = UNQUANTIZE(*in_ptr);
+
+            int16_t * out_ptr = (int16_t *)(out_b_ptr + key_in_stride * i);
+            *out_ptr = QUANTIZE(exp(in_val) / sum);
+        }
+#elif SOFTMAX_ACCUM_TYPE == 2
+        float max_val = -FLT_MAX;
+        float sum = 0.f;
+
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int16_t * in_ptr = (int16_t *)(in_b_ptr + key_in_stride * i);
+            float in_val = UNQUANTIZE(*in_ptr);
+
+            max_val = MAX(max_val, in_val);
+        }
+        
+        // Note: It may be benificial to cache the exponents
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int16_t * in_ptr = (int16_t *)(in_b_ptr + key_in_stride * i);
+            float in_val = UNQUANTIZE(*in_ptr);
+
+            sum += expf(in_val - max_val);
+        }
+
+        for (size_t i = 0; i < key_sz; ++i)
+        {
+            const int16_t * in_ptr = (int16_t *)(in_b_ptr + key_in_stride * i);
+            float in_val = UNQUANTIZE(*in_ptr);
+
+            int16_t * out_ptr = (int16_t *)(out_b_ptr + key_in_stride * i);
+            *out_ptr = QUANTIZE(expf(in_val - max_val) / sum);
+        }
+#else
+#error SOFTMAX_ACCUM_TYPE must be 0..2
+#endif
+    }
+}
+
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+    vx_size dim_num;
+} test_softmax_layer_arg;
+
+#define TT_SOFTMAX_CASES_BASE(FMT_,DIMS_)       \
+    ARG(#FMT_"_DIMS"#DIMS_, TT_##FMT_, DIMS_),
+
+#define TT_SOFTMAX_CASES_0(FMT_)    \
+    TT_SOFTMAX_CASES_BASE(FMT_,1)   \
+    TT_SOFTMAX_CASES_BASE(FMT_,2)   \
+    TT_SOFTMAX_CASES_BASE(FMT_,3)   \
+    TT_SOFTMAX_CASES_BASE(FMT_,4)
+
+#define TT_SOFTMAX_CASES_ALL()  \
+    TT_SOFTMAX_CASES_0(U8)
+
+TEST_WITH_ARG(TensorNN, testSoftmaxLayer, test_softmax_layer_arg,
+        TT_SOFTMAX_CASES_ALL()
+)
+{
+    assert (arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+    assert (arg_->dim_num >= 1 && arg_->dim_num <=4);
+
+    {   // TODO: ownTestGetMaxDims() ?
+        vx_size max_dims = 0;
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= arg_->dim_num); 
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        size_t dims[4];
+        for (size_t i = 0; i < arg_->dim_num; ++i)
+        {
+            dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        }
+
+        size_t strides[4];
+        ownGetFlatByteStrides(arg_->fmt, dims, arg_->dim_num, strides);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: { dims: { ");
+            for (size_t i = 0; i < arg_->dim_num; ++i) { printf("%zu, ", dims[i]); }
+            printf(" } }\n");
+        }
+
+        const size_t bytes = dims[arg_->dim_num-1] * strides[arg_->dim_num-1];
+        const size_t count = bytes / sizeof_data_type;
+
+        void * const in = malloc(bytes);
+        void * const out = malloc(bytes);
+        void * const refs = malloc(bytes);
+        ASSERT(in && out && refs);
+
+        vx_tensor in_tensor = vxCreateTensor(context_->vx_context_, arg_->dim_num, dims, data_type, fixed_point_position);
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, arg_->dim_num, dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        {
+            // No real need to fo ownFillSmallRandData here because of the
+            // guranteed 32bit accum and our data counts being small.
+            ownFillRandData(arg_->fmt, &rng, count, in); 
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in_tensor, arg_->dim_num, view_start, dims, strides, in, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxSoftmaxLayer(graph, in_tensor, out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            tensor_desc_t td = { arg_->dim_num, dims, strides };
+            ownSoftmax(arg_->fmt, in, td, refs, td);
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, arg_->dim_num, view_start, dims, strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, dims, arg_->dim_num, strides,
+                        refs, dims, arg_->dim_num, strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&in_tensor));
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in);
+        free(out);
+        free(refs);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          test vxNormalizationlayer                       *
+ *                                                                          *
+ ***************************************************************************/
+
+//static void ownNormalization() { /*TODO*/ }
+//
+//typedef struct
+//{
+//    const char * name;
+//
+//    enum TestTensorDF fmt;
+//} test_normalization_layer_arg;
+//
+//TEST_WITH_ARG(TensorNN, testNormalizationLayer, test_normalization_layer_arg,
+//        ARG("Q78", TT_Q78),
+//)
+//{
+//}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          test vxActivationLayer                          *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownActivation(
+        enum TestTensorDF fmt,
+        const void * input_ptr, tensor_desc_t input,
+        enum vx_nn_activation_function_e func,
+        float a, float b,
+        void * output_ptr, tensor_desc_t output)
+{
+    assert (func == VX_NN_ACTIVATION_LOGISTIC ||
+            func == VX_NN_ACTIVATION_HYPERBOLIC_TAN ||
+            func == VX_NN_ACTIVATION_RELU ||
+            func == VX_NN_ACTIVATION_BRELU ||
+            func == VX_NN_ACTIVATION_SOFTRELU ||
+            func == VX_NN_ACTIVATION_ABS ||
+            func == VX_NN_ACTIVATION_SQUARE ||
+            func == VX_NN_ACTIVATION_SQRT ||
+            func == VX_NN_ACTIVATION_LINEAR);
+    
+    assert (input.dim_num == output.dim_num);
+    assert (input.dim_num > 0 && input.dim_num <= 4);
+
+    for (size_t i = 0; i < input.dim_num; ++i)
+    {
+        assert (input.dims[i] == output.dims[i]);
+    }
+
+    ownAssertStridesModSizeof(fmt, input);
+    ownAssertStridesModSizeof(fmt, output);
+
+    const size_t dim0 = output.dims[0];
+    const size_t dim1 = output.dim_num > 1 ? output.dims[1]: 1;
+    const size_t dim2 = output.dim_num > 2 ? output.dims[2]: 1;
+    const size_t dim3 = output.dim_num > 3 ? output.dims[3]: 1;
+
+    for (size_t i3 = 0; i3 < dim3; ++i3)
+    for (size_t i2 = 0; i2 < dim2; ++i2)
+    for (size_t i1 = 0; i1 < dim1; ++i1)
+    for (size_t i0 = 0; i0 < dim0; ++i0)
+    {
+        const size_t input_byte_offset =
+            (input.dim_num > 3 ? input.strides[3] * i3 : 0) +
+            (input.dim_num > 2 ? input.strides[2] * i2 : 0) +
+            (input.dim_num > 1 ? input.strides[1] * i1 : 0) +
+            input.strides[0] * i0;
+
+        int_fast32_t val = ownLoadValueAsRawInt(fmt, (char*)input_ptr + input_byte_offset);
+
+        //TODO: should we check that val is a legal input for the functoin?
+
+        switch(func)
+        {
+            case VX_NN_ACTIVATION_LOGISTIC:
+                val = (int)(1 / (1 + exp(val)));    //TODO: conversion issue?
+                break;
+            case VX_NN_ACTIVATION_HYPERBOLIC_TAN:
+                val = (int)(a * tanh(b * val));     //TODO: conversion issue?
+                break;
+            case VX_NN_ACTIVATION_RELU:
+                val = MAX(0, val);
+                break;
+            case VX_NN_ACTIVATION_BRELU:
+                val = MIN(a, MAX(0, val));          //TODO: conversion issue?
+                break;
+            case VX_NN_ACTIVATION_SOFTRELU:
+                val = log(1 + exp(val));            //TODO: conversion issue?
+                break;
+            case VX_NN_ACTIVATION_ABS:
+                val = val < 0 ? - val : val;
+                break;
+            case VX_NN_ACTIVATION_SQUARE:
+                val = val * val;
+                break;
+            case VX_NN_ACTIVATION_SQRT:
+                val = sqrt(val);                    //TODO: conversoin issue?
+                break;
+            case VX_NN_ACTIVATION_LINEAR:
+                val = a * val + b;
+                break;
+            default:
+                assert(0);
+        }
+
+        const size_t output_byte_offset =
+            (output.dim_num > 3 ? output.strides[3] * i3 : 0) +
+            (output.dim_num > 2 ? output.strides[2] * i2 : 0) +
+            (output.dim_num > 1 ? output.strides[1] * i1 : 0) +
+            output.strides[0] * i0;
+
+        val = ownWrapOrSat(fmt, val, false);    //TODO: what should be done here??
+        ownStoreRawIntValue(fmt, val, (char*)output_ptr + output_byte_offset);
+    }
+}
+
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+    vx_size dim_num;
+
+    enum vx_nn_activation_function_e func;
+    vx_float32 a;
+    vx_float32 b;
+} test_activation_layer_arg;
+
+#define TT_ACTIVATION_CASES_BASE(NAME_,FMT_,DIMS_,FUNC_,A_,B_)      \
+    ARG(#FMT_"_DIMS"#DIMS_"_"#FUNC_""NAME_,                         \
+            TT_##FMT_, DIMS_, VX_NN_ACTIVATION_##FUNC_, A_, B_),
+
+//TODO: what do we want to test here???
+#define TT_ACTIVATION_CASES_1(FMT_,DIM_)                            \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,LOGISTIC,0,0)             \
+    TT_ACTIVATION_CASES_BASE("_A1_B1",FMT_,DIM_,HYPERBOLIC_TAN,1,1) \
+    TT_ACTIVATION_CASES_BASE("_A2_B2",FMT_,DIM_,HYPERBOLIC_TAN,2,2) \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,RELU,0,0)
+#ifdef ACTIVATION_EXTRA
+    TT_ACTIVATION_CASES_BASE("_A50",FMT_,DIM_,BRELU,50,0)           \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,SOFTRELU,0,0)             \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,ABS,0,0)                  \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,SQUARE,0,0)               \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,SQRT,0,0)                 \
+    TT_ACTIVATION_CASES_BASE("",FMT_,DIM_,LINEAR,1,0)               \
+    TT_ACTIVATION_CASES_BASE("_Ahalf_B2",FMT_,DIM_,LINEAR,.5f,2)
+#endif //ACTIVATION_EXTRA
+
+#define TT_ACTIVATION_CASES_0(FMT_) \
+    TT_ACTIVATION_CASES_1(FMT_,1)   \
+    TT_ACTIVATION_CASES_1(FMT_,2)   \
+    TT_ACTIVATION_CASES_1(FMT_,3)   \
+    TT_ACTIVATION_CASES_1(FMT_,4)
+
+#define TT_ACTIVATION_CASES_ALL()   \
+    TT_ACTIVATION_CASES_0(U8)
+
+TEST_WITH_ARG(TensorNN, testActivationLayer, test_activation_layer_arg,
+        TT_ACTIVATION_CASES_ALL()
+)
+{
+    assert (arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+    assert (arg_->dim_num >= 1 && arg_->dim_num <= 4);
+    assert (arg_->func == VX_NN_ACTIVATION_LOGISTIC ||
+            arg_->func == VX_NN_ACTIVATION_HYPERBOLIC_TAN ||
+            arg_->func == VX_NN_ACTIVATION_RELU ||
+            arg_->func == VX_NN_ACTIVATION_BRELU ||
+            arg_->func == VX_NN_ACTIVATION_SOFTRELU ||
+            arg_->func == VX_NN_ACTIVATION_ABS ||
+            arg_->func == VX_NN_ACTIVATION_SQUARE ||
+            arg_->func == VX_NN_ACTIVATION_SQRT ||
+            arg_->func == VX_NN_ACTIVATION_LINEAR);
+    assert (arg_->a >= 0.f && arg_->b >= 0.f);
+
+    {   // TODO: ownTestGetMaxDims() ?
+        vx_size max_dims = 0;
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= arg_->dim_num); 
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        size_t dims[4];
+        for (size_t i = 0; i < arg_->dim_num; ++i)
+        {
+            dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        }
+
+        size_t strides[4];
+        ownGetFlatByteStrides(arg_->fmt, dims, arg_->dim_num, strides);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: { dims: { ");
+            for (size_t i = 0; i < arg_->dim_num; ++i) { printf("%zu, ", dims[i]); }
+            printf(" } }\n");
+        }
+
+        const size_t bytes = dims[arg_->dim_num-1] * strides[arg_->dim_num-1];
+        const size_t count = bytes / sizeof_data_type;
+
+        void * const in = malloc(bytes);
+        void * const out = malloc(bytes);
+        void * const refs = malloc(bytes);
+        ASSERT(in && out && refs);
+
+        vx_tensor in_tensor = vxCreateTensor(context_->vx_context_, arg_->dim_num, dims, data_type, fixed_point_position);
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, arg_->dim_num, dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        {
+            ownFillRandData(arg_->fmt, &rng, count, in); 
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in_tensor, arg_->dim_num, view_start, dims, strides, in, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxActivationLayer(graph, in_tensor, arg_->func, arg_->a, arg_->b, out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            tensor_desc_t td = { arg_->dim_num, dims, strides };
+            ownActivation(arg_->fmt, in, td, arg_->func, arg_->a, arg_->b, refs, td);
+
+            const vx_size view_start[4] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, arg_->dim_num, view_start, dims, strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, dims, arg_->dim_num, strides,
+                        refs, dims, arg_->dim_num, strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&in_tensor));
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in);
+        free(out);
+        free(refs);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxROIPoolingLayer                          *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownROIPooling(
+        enum TestTensorDF fmt,
+        const void * data, vx_size data_dim_num, const vx_size * data_dims, const vx_size * data_strides,
+        const void * rois, vx_size rois_dim_num, const vx_size * rois_dims, const vx_size * rois_strides,
+        void * out, vx_size out_dim_num, const vx_size * out_dims, const vx_size * out_strides)
+{
+    assert ((data_dim_num == 3 && rois_dim_num == 2 && out_dim_num == 4) ||
+            (data_dim_num == 4 && rois_dim_num == 3 && out_dim_num == 5));
+
+    // format: [batch][channels][height][width]
+    const size_t data_w = data_dims[0];
+    const size_t data_h = data_dims[1];
+    const size_t data_c = data_dims[2];
+    const size_t data_b = data_dim_num == 4 ? data_dims[3] : 1;
+
+    // format: [batch][roi_count][4]
+    const size_t rois_d = rois_dims[0];
+    const size_t rois_r = rois_dims[1];
+    const size_t rois_b = rois_dim_num == 3 ? rois_dims[2] : 1;
+
+    // format: [batch][roi_count][channels][height][width]
+    const size_t out_w = out_dims[0];
+    const size_t out_h = out_dims[1];
+    const size_t out_c = out_dims[2];
+    const size_t out_r = out_dims[3];
+    const size_t out_b = out_dim_num == 5 ? out_dims[4] : 1;
+
+    assert(data_c == out_c);
+    assert(data_b == rois_b && data_b == out_b);
+    assert(rois_d == 4);
+    assert(rois_r == out_r);
+
+    {
+        size_t sizeof_data_type = 0;
+        switch(fmt)
+        {
+            case TT_Q78: sizeof_data_type = sizeof(vx_int16); break;
+            case TT_U8: sizeof_data_type = sizeof(vx_uint8); break;
+            case TT_S8: sizeof_data_type = sizeof(vx_int8); break;
+            default: assert(0);
+        }
+        for (size_t i = 0; i < data_dim_num; ++i) { assert(data_strides[i] % sizeof_data_type == 0); }
+        for (size_t i = 0; i < rois_dim_num; ++i) { assert(rois_strides[i] % sizeof_data_type == 0); }
+        for (size_t i = 0; i < out_dim_num; ++i) { assert(out_strides[i] % sizeof_data_type == 0); }
+    }
+
+    const int_fast32_t lowest_val = ownGetMinValue(fmt);
+
+    for (size_t b = 0; b < out_b; ++b)
+    for (size_t r = 0; r < out_r; ++r)
+    for (size_t c = 0; c < out_c; ++c)
+    for (size_t y = 0; y < out_h; ++y)
+    for (size_t x = 0; x < out_w; ++x)
+    {
+        const char * roi_b_ptr = (char*)rois + rois_strides[1] * r + (b ? rois_strides[2] * b : 0);
+
+        const int roi_x0 = ownLoadValueAsRawInt(fmt, roi_b_ptr + rois_strides[0] * 0);
+        const int roi_y0 = ownLoadValueAsRawInt(fmt, roi_b_ptr + rois_strides[0] * 1);
+        const int roi_x1 = ownLoadValueAsRawInt(fmt, roi_b_ptr + rois_strides[0] * 2);
+        const int roi_y1 = ownLoadValueAsRawInt(fmt, roi_b_ptr + rois_strides[0] * 3);
+
+        // The final coordinate is within the ROI => +1
+        // And we treat malformed dimensions as 1
+        const int roi_w = MAX(roi_x1 - roi_x0, 0) + 1;
+        const int roi_h = MAX(roi_y1 - roi_y0, 0) + 1;
+
+        // Note that "after" is rounded up else we get the last cell,
+        // instead of the cell beyond.
+        //
+        // For ex. with src being a 6 cell row and dst being a 4 cell one:
+        // >>> [((x + 0) * 6) // 4 for x in range(4)]   # "begin" values
+        // [0, 1, 3, 4]                                 # as expected
+        // >>> [((x + 1) * 6) // 4 for x in range(4)]   # "after" values
+        // [1, 3, 4, 6]                                 # [2, 3, 5, 6] expected!
+        const int dx_begin = ((x + 0) * roi_w) / out_w;
+        const int dy_begin = ((y + 0) * roi_h) / out_h;
+        const int dx_after = ((x + 1) * roi_w + (out_w - 1)) / out_w;
+        const int dy_after = ((y + 1) * roi_h + (out_h - 1)) / out_h;
+
+        // clamp in case roi_x or roi_y were unreasonable
+        const int x_begin = CLAMP((size_t)(roi_x0 + dx_begin), 0, data_w);
+        const int y_begin = CLAMP((size_t)(roi_y0 + dy_begin), 0, data_h);
+        const int x_after = CLAMP((size_t)(roi_x0 + dx_after), 0, data_w);
+        const int y_after = CLAMP((size_t)(roi_y0 + dy_after), 0, data_h);
+
+        const char * data_b_ptr = (char*)data + data_strides[3] * b + data_strides[2] * c;
+
+        // If there's no values for the current roi, we default to 0
+        const bool non_empty = (x_begin < x_after && y_begin < y_after);
+        int res = non_empty ? lowest_val : 0;
+
+        for (int yy = y_begin; yy < y_after; ++yy)
+        for (int xx = x_begin; xx < x_after; ++xx)
+        {
+            const void * val_ptr = data_b_ptr + data_strides[1] * yy + data_strides[0] * xx;
+            int val = ownLoadValueAsRawInt(fmt, val_ptr);
+
+            res = MAX(res, val);
+        }
+
+        const size_t output_byte_offset =
+            out_strides[4] * b +
+            out_strides[3] * r + out_strides[2] * c +
+            out_strides[1] * y + out_strides[0] * x;
+        ownStoreRawIntValue(fmt, res, (char*)out + output_byte_offset);
+    }
+}
+
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+    bool with_batching;
+} test_roi_pooling_arg;
+
+TEST_WITH_ARG(TensorNN, testROIPoolingLayer, test_roi_pooling_arg,
+        ARG("Q78", TT_Q78, false),
+        ARG("U8", TT_U8, false),
+        ARG("S8", TT_S8, false),
+
+        ARG("Q78_Bathcing", TT_Q78, true),
+        ARG("U8_Batching", TT_U8, true),
+        ARG("S8_Batching", TT_S8, true),
+)
+{
+    assert(arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= (size_t)(arg_->with_batching ? 5 : 4));
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    const size_t data_dim_num = arg_->with_batching ? 4 : 3;
+    const size_t rois_dim_num = arg_->with_batching ? 3 : 2;
+    const size_t out_dim_num = arg_->with_batching ? 5 : 4;
+
+    size_t * const data_dims = malloc(sizeof(*data_dims) * data_dim_num);
+    size_t * const rois_dims = malloc(sizeof(*rois_dims) * rois_dim_num);
+    size_t * const out_dims = malloc(sizeof(*out_dims) * out_dim_num);
+    ASSERT(data_dims && rois_dims && out_dims);
+    
+    size_t * const data_strides = malloc(sizeof(*data_strides) * data_dim_num);
+    size_t * const rois_strides = malloc(sizeof(*rois_strides) * rois_dim_num);
+    size_t * const out_strides = malloc(sizeof(*out_strides) * out_dim_num);
+    ASSERT(data_strides && rois_strides && out_strides);
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        for (vx_size i = 0; i < data_dim_num; ++i)
+        {
+            data_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+            data_strides[i] = i ? data_strides[i-1] * data_dims[i-1] : sizeof_data_type;
+        }
+
+        rois_dims[0] = 4;
+        rois_dims[1] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+        out_dims[0] = data_dims[0];
+        out_dims[1] = data_dims[1];
+        out_dims[2] = data_dims[2];
+        out_dims[3] = rois_dims[1];
+
+        if (arg_->with_batching)
+        {
+            out_dims[4] = rois_dims[2] = data_dims[3];
+        }
+
+        vx_tensor data_tensor = vxCreateTensor(context_->vx_context_, data_dim_num, data_dims, data_type, fixed_point_position);
+        vx_tensor rois_tensor = vxCreateTensor(context_->vx_context_, rois_dim_num, rois_dims, data_type, fixed_point_position);
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, out_dim_num, out_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(data_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(rois_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        for (size_t i = 0; i < rois_dim_num; ++i)
+        {
+            rois_strides[i] = i ? rois_strides[i-1] * rois_dims[i-1] : sizeof_data_type;
+        }
+        for (size_t i = 0; i < out_dim_num; ++i)
+        {
+            out_strides[i] = i ? out_strides[i-1] * out_dims[i-1] : sizeof_data_type;
+        }
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          data_dims: { "); for (size_t i = 0; i < data_dim_num; ++i) { printf("%zu, ", data_dims[i]); } printf(" }, \n");
+            printf("\t          rois_dims: { "); for (size_t i = 0; i < rois_dim_num; ++i) { printf("%zu, ", rois_dims[i]); } printf(" }, \n");
+            printf("\t          out_dims: { "); for (size_t i = 0; i < out_dim_num; ++i) { printf("%zu, ", out_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        const size_t data_bytes = data_dims[data_dim_num-1] * data_strides[data_dim_num-1];
+        const size_t rois_bytes = rois_dims[rois_dim_num-1] * rois_strides[rois_dim_num-1];
+        const size_t out_bytes = out_dims[out_dim_num-1] * out_strides[out_dim_num-1];
+
+        const size_t data_count = data_bytes / sizeof_data_type;
+
+        void * const data = malloc(data_bytes);
+        void * const rois = malloc(rois_bytes);
+        void * const out = malloc(out_bytes);
+        void * const refs = malloc(out_bytes);
+        ASSERT(data && rois && out && refs);
+
+        {
+            ownFillRandData(arg_->fmt, &rng, data_count, data);
+            for (size_t i = 0; i < rois_dims[1]; ++i)
+            {
+                switch(arg_->fmt)
+                {
+                    case TT_Q78:
+                        ((vx_int16*)rois)[4*i+0] = (vx_int16)CT_RNG_NEXT_INT(rng, -2, data_dims[0] + 2);
+                        ((vx_int16*)rois)[4*i+1] = (vx_int16)CT_RNG_NEXT_INT(rng, -2, data_dims[1] + 2);
+                        ((vx_int16*)rois)[4*i+2] = (vx_int16)CT_RNG_NEXT_INT(rng, -2, data_dims[0] + 2);
+                        ((vx_int16*)rois)[4*i+3] = (vx_int16)CT_RNG_NEXT_INT(rng, -2, data_dims[1] + 2);
+                        break;
+                    case TT_U8:
+                        ((vx_uint8*)rois)[4*i+0] = (vx_uint8)CT_RNG_NEXT_INT(rng, 0, data_dims[0] + 2);
+                        ((vx_uint8*)rois)[4*i+1] = (vx_uint8)CT_RNG_NEXT_INT(rng, 0, data_dims[1] + 2);
+                        ((vx_uint8*)rois)[4*i+2] = (vx_uint8)CT_RNG_NEXT_INT(rng, 0, data_dims[0] + 2);
+                        ((vx_uint8*)rois)[4*i+3] = (vx_uint8)CT_RNG_NEXT_INT(rng, 0, data_dims[1] + 2);
+                        break;
+                    case TT_S8:
+                        ((vx_int8*)rois)[4*i+0] = (vx_int8)CT_RNG_NEXT_INT(rng, -2, data_dims[0] + 2);
+                        ((vx_int8*)rois)[4*i+1] = (vx_int8)CT_RNG_NEXT_INT(rng, -2, data_dims[1] + 2);
+                        ((vx_int8*)rois)[4*i+2] = (vx_int8)CT_RNG_NEXT_INT(rng, -2, data_dims[0] + 2);
+                        ((vx_int8*)rois)[4*i+3] = (vx_int8)CT_RNG_NEXT_INT(rng, -2, data_dims[1] + 2);
+                        break;
+                    default:
+                        assert(0);
+                }
+            }
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(data_tensor, data_dim_num, view_start, data_dims, data_strides, data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            VX_CALL(vxCopyTensorPatch(rois_tensor, rois_dim_num, view_start, rois_dims, rois_strides, rois, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        // Third step is creating, running and disposing of the graph.
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+
+            const vx_nn_roi_pool_params_t roi_pool_params = { VX_NN_POOLING_MAX };
+            vx_node node = vxROIPoolingLayer(graph, data_tensor, rois_tensor, &roi_pool_params, sizeof(roi_pool_params), out_tensor);
+
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            ownROIPooling(
+                    arg_->fmt,
+                    data, data_dim_num, data_dims, data_strides,
+                    rois, rois_dim_num, rois_dims, rois_strides,
+                    refs, out_dim_num, out_dims, out_strides);
+
+            const size_t view_start[5] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, out_dim_num, view_start, out_dims, out_strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, out_dims, 2, out_strides,
+                        refs, out_dims, 2, out_strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&data_tensor));
+        VX_CALL(vxReleaseTensor(&rois_tensor));
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, data_tensor);
+        EXPECT_EQ_PTR(NULL, rois_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(data);
+        free(rois);
+        free(out);
+        free(refs);
+    }
+
+    free(data_dims);
+    free(rois_dims);
+    free(out_dims);
+
+    free(data_strides);
+    free(rois_strides);
+    free(out_strides);
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          test vxDeconvolutionLayer                       *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownGetDeconvRandParams(
+        uint64_t * rng,
+        size_t pad_sz, size_t kernel_sz,
+        size_t a,
+        /*OUT*/ size_t * input_sz,
+        /*OUT*/ size_t * upscale,
+        /*OUT*/ size_t * output_sz)
+{
+    *upscale = (size_t)CT_RNG_NEXT_INT(*rng, a + 1, a + 3);
+
+    const int tmp = (2 * (int)pad_sz - (int)kernel_sz - (int)a + ((int)*upscale - 1)) /(int)*upscale;
+
+    const int min_input = 2 + MAX(tmp, 0);  //TODO: can we lower this?
+    const int max_input = MIN(min_input, TEST_TENSOR_MAX_DIM_SZ) + 5;
+    *input_sz = (size_t)CT_RNG_NEXT_INT(*rng, min_input, max_input);
+
+    *output_sz = (*input_sz - 1) * *upscale + kernel_sz + a - 2 * pad_sz;
+}
+
+static void ownDeconvolution(
+        enum TestTensorDF fmt,
+        const void * input_ptr, tensor_desc_t input,
+        const void * weight_ptr, tensor_desc_t weight,
+        const void * bias_ptr, tensor_desc_t bias,
+        vx_size pad_x, vx_size pad_y,
+        vx_size upscale_x, vx_size upscale_y,
+        bool wrap,  // true for WRAP, else SATURATE
+        bool to_ne, // true for ROUND_TO_NE, else ROUND_TO_ZERO
+        vx_size a_x, vx_size a_y,
+        void * output_ptr, tensor_desc_t output)
+{
+    assert(fmt == TT_Q78 || fmt == TT_U8 || fmt == TT_S8);
+
+    assert(input.dim_num == 3 || input.dim_num == 4);
+    assert(weight.dim_num == 4);
+    assert(bias.dim_num == 0 || bias.dim_num == 1 || bias.dim_num == 3);
+    assert(output.dim_num == input.dim_num);
+
+    const size_t input_w = input.dims[0];
+    const size_t input_h = input.dims[1];
+    const size_t input_c = input.dims[2];
+    const size_t input_b = input.dim_num > 3 ? input.dims[3] : 1;
+
+    const size_t weight_w = weight.dims[0];
+    const size_t weight_h = weight.dims[1];
+    const size_t weight_ifm = weight.dims[2];
+    const size_t weight_ofm = weight.dims[3];
+
+    const bool bias_present = !!bias.dim_num;
+    const bool bias_shared = bias.dim_num == 1;
+    const size_t bias_w = bias.dim_num > 0 ? bias.dims[0] : 0;
+    const size_t bias_h = bias.dim_num > 1 ? bias.dims[1] : 1;
+    const size_t bias_ofm = bias.dim_num > 2 ? bias.dims[2] : 1;
+
+    const size_t output_w = output.dims[0];
+    const size_t output_h = output.dims[1];
+    const size_t output_c = output.dims[2];
+    const size_t output_b = output.dim_num > 3 ? output.dims[3] : 1;
+
+    assert(weight_ifm == input_c);
+    assert(weight_ofm == output_c);
+
+    assert(upscale_x > 0 && upscale_y > 0);
+    assert(a_x < upscale_x && a_y < upscale_y);
+    assert((input_w - 1) * upscale_x + weight_w + a_x > 2 * pad_x);
+    assert((input_h - 1) * upscale_y + weight_h + a_y > 2 * pad_y);
+    assert(output_w == (input_w - 1) * upscale_x + weight_w + a_x - 2 * pad_x);
+    assert(output_h == (input_h - 1) * upscale_y + weight_h + a_y - 2 * pad_y);
+
+    assert(weight_w >= pad_x + 1);
+    assert(weight_h >= pad_y + 1);
+    const size_t start_x_pad = weight_w - pad_x - 1;
+    const size_t start_y_pad = weight_h - pad_y - 1;
+
+    // NOTE:
+    // The complete input width being sampled is,
+    //  start_x_pad + ((input_w - 1) * upscale_x + 1) + after_x_pad
+    // which is
+    //  (input_w - 1) * upscale_x + 2 * weight_w - 2 * pad_x - 1 + a_x
+    // and the stride being 1, the output width comes down to this plus 1 - weight_w
+    // which ends up being
+    //  (input_w - 1) * upscale_x + weight_w - 2 * pad_x + a_x
+    // which is exactly output_w
+
+    if (bias_shared)
+    {
+        assert(bias_w == weight_ofm);
+    }
+    else if (bias_present)
+    {
+        assert(bias_w == output_w);
+        assert(bias_h == output_h);
+        assert(bias_ofm == output_c);
+    }
+
+    assert(output_b == input_b);
+
+    ownAssertStridesModSizeof(fmt, input);
+    ownAssertStridesModSizeof(fmt, weight);
+    ownAssertStridesModSizeof(fmt, bias);
+    ownAssertStridesModSizeof(fmt, output);
+
+    // Input and output pointers for the current batch being processed,
+    // Note: The compiler should've been able to hoist this out... And
+    // there's a bunch of other possible hoising iopportunities here.
+    const char * in_b_ptr = input_ptr;
+    char * out_b_ptr = output_ptr;
+
+    for (size_t b = 0; b < output_b; ++b)
+    for (size_t ofm = 0; ofm < output_c; ++ofm)
+    for (size_t y = 0; y < output_h; ++y)
+    for (size_t x = 0; x < output_w; ++x)
+    {
+        int32_t sum = 0;
+        if (bias_present)
+        {
+            const size_t bias_byte_offset =
+                bias_shared
+                ? (bias.strides[0] * ofm)
+                : (bias.strides[2] * ofm + bias.strides[1] * y + bias.strides[0] * x);
+
+            sum = ownLoadValueAsRawInt(fmt, (char *)bias_ptr + bias_byte_offset);
+        }
+        
+        for (size_t ifm = 0; ifm < input_c; ++ifm)
+        {
+            for (size_t w_y = 0; w_y < weight_h; ++w_y)
+            for (size_t w_x = 0; w_x < weight_w; ++w_x)
+            {
+                if (x + w_x >= start_x_pad && x + w_x < input_w + start_x_pad &&
+                    y + w_y >= start_y_pad && y + w_y < input_h + start_y_pad)
+                {
+                    const size_t xx = x + w_x - start_x_pad;
+                    const size_t yy = y + w_y - start_y_pad;
+
+                    if (xx % upscale_x == 0 && yy % upscale_y == 0)
+                    {
+                        const size_t input_byte_offset =
+                            (b ? input.strides[3] * b : 0) +
+                            input.strides[2] * ifm +
+                            input.strides[1] * (yy / upscale_y) +
+                            input.strides[0] * (xx / upscale_x);
+                        const size_t weight_byte_offset =
+                            weight.strides[3] * ofm +
+                            weight.strides[2] * ifm +
+                            weight.strides[1] * w_y +
+                            weight.strides[0] * w_x;
+
+                        const int_fast32_t i_val = ownLoadValueAsRawInt(fmt, in_b_ptr + input_byte_offset);
+                        const int_fast32_t w_val = ownLoadValueAsRawInt(fmt, (char *)weight_ptr + weight_byte_offset);
+
+                        // This is ok since all of them fit into int32_t
+                        sum = ownApplyWrapRoundingToAccum(fmt, i_val * w_val, wrap, to_ne) + sum;
+                    }
+                }
+            }
+            sum = ownWrapOrSat(fmt, sum, wrap);
+        }
+
+        // The step here could be added to the loops instead of recalcing
+        // if, but does the compiler fail to hoist them out???
+        const size_t output_byte_offset =
+            (b ? output.strides[3] * b : 0) +
+            output.strides[2] * ofm +
+            output.strides[1] * y +
+            output.strides[0] * x;
+        ownStoreRawIntValue(fmt, sum, out_b_ptr + output_byte_offset);
+    }
+}
+
+typedef struct
+{
+    const char * name;
+    enum TestTensorDF fmt;
+    vx_size weight_w;
+    vx_size weight_h;
+
+    vx_size padding_x;
+    vx_size padding_y;
+    enum vx_convert_policy_e convert_policy;
+    enum vx_round_policy_e rounding_policy;
+    vx_size a_x;
+    vx_size a_y;
+
+    int batching_dim;
+    enum TT_CONVOLUTION_BIAS_TYPE bias_type;
+} test_deconvolution_layer_arg;
+
+//TODO: take a more thorugh look at these, taken form conv
+#define TT_DECONVOLUTION_CASES_BASE(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,BATCH_,BIAS_) \
+    ARG(NAME_"_SZ_X"#SZ_X_"_Y"#SZ_Y_"_PAD_X"#PAD_X_"_Y"#PAD_Y_"_A_X"#A_X_"_Y"#A_Y_,                         \
+        TT_##FMT_, SZ_X_, SZ_Y_, PAD_X_, PAD_Y_, VX_CONVERT_POLICY_##OF_, VX_ROUND_POLICY_TO_##ROUND_,      \
+        A_X_, A_Y_, BATCH_, BIAS_),
+
+#define TT_DECONVOLUTION_CASES_4(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,BATCH_)                          \
+    TT_DECONVOLUTION_CASES_BASE(NAME_"_NOBIAS",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,BATCH_,BIAS_NONE)        \
+    TT_DECONVOLUTION_CASES_BASE(NAME_"_SHAREDBIAS",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,BATCH_,BIAS_SHARED)  \
+    TT_DECONVOLUTION_CASES_BASE(NAME_"_PERLOCBIAS",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,BATCH_,BIAS_PER_LOC)
+
+#define TT_DECONVOLUTION_CASES_3(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_)         \
+    TT_DECONVOLUTION_CASES_4(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,0)           \
+    TT_DECONVOLUTION_CASES_4(NAME_"_BATCH",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,A_X_,A_Y_,1)
+
+#define TT_DECONVOLUTION_CASES_2(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_)   \
+    TT_DECONVOLUTION_CASES_3(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,0,0)   \
+    TT_DECONVOLUTION_CASES_3(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,0,1)   \
+    TT_DECONVOLUTION_CASES_3(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ROUND_,1,0)
+
+#define TT_DECONVOLUTION_CASES_1(NAME_,FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_)              \
+    TT_DECONVOLUTION_CASES_2(NAME_"_ZERO",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,ZERO)      \
+    TT_DECONVOLUTION_CASES_2(NAME_"_NE",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,OF_,NEAREST_EVEN)
+
+#define TT_DECONVOLUTION_CASES_0(FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_)                \
+    TT_DECONVOLUTION_CASES_1(#FMT_"_WRAP",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,WRAP)  \
+    TT_DECONVOLUTION_CASES_1(#FMT_"_SAT",FMT_,SZ_X_,SZ_Y_,PAD_X_,PAD_Y_,SATURATE)
+
+#define TT_DECONVOLUTION_CASES_EXTRA(FMT_)      \
+    TT_DECONVOLUTION_CASES_0(FMT_,11,11,0,0)    \
+    TT_DECONVOLUTION_CASES_0(FMT_,6,6,0,0)      \
+    TT_DECONVOLUTION_CASES_0(FMT_,5,5,0,0)      \
+    TT_DECONVOLUTION_CASES_0(FMT_,3,3,0,0)      \
+    TT_DECONVOLUTION_CASES_0(FMT_,3,4,1,2)
+
+#define TT_DECONVOLUTION_CASES_ALL()    \
+    TT_DECONVOLUTION_CASES_EXTRA(U8)
+
+TEST_WITH_ARG(TensorNN, testDeconvolutionLayer, test_deconvolution_layer_arg,
+        TT_DECONVOLUTION_CASES_ALL()
+)
+{
+    assert (arg_->fmt == TT_Q78 || arg_->fmt == TT_U8 || arg_->fmt == TT_S8);
+    assert (arg_->batching_dim >= 0);
+    assert (arg_->bias_type == BIAS_NONE || arg_->bias_type == BIAS_SHARED || arg_->bias_type == BIAS_PER_LOC);
+    assert (arg_->convert_policy == VX_CONVERT_POLICY_WRAP ||
+            arg_->convert_policy == VX_CONVERT_POLICY_SATURATE);
+    assert (arg_->rounding_policy == VX_ROUND_POLICY_TO_ZERO ||
+            arg_->rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN);
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims >= (size_t)(3 + arg_->batching_dim));
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    const size_t inout_dim_num = 3 + arg_->batching_dim;
+    const size_t weight_dim_num = 4;
+    const size_t bias_dim_num =
+        arg_->bias_type == BIAS_NONE ? 0 :
+        arg_->bias_type == BIAS_SHARED ? 1 : 3;
+
+    size_t in_dims[4];
+    size_t weight_dims[4];
+    size_t bias_dims[3];
+    size_t out_dims[4];
+
+    size_t in_strides[4];
+    size_t weight_strides[4];
+    size_t bias_strides[3];
+    size_t out_strides[4];
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter);
+            fflush(stdout);
+        }
+
+        size_t input_w, upscale_x, output_w;
+        ownGetDeconvRandParams(
+                &rng,
+                arg_->padding_x, arg_->weight_w,
+                arg_->a_x,
+                &input_w, &upscale_x, &output_w);
+
+        size_t input_h, upscale_y, output_h;
+        ownGetDeconvRandParams(
+                &rng,
+                arg_->padding_y, arg_->weight_h,
+                arg_->a_y,
+                &input_h, &upscale_y, &output_h);
+
+        in_dims[0] = input_w;
+        in_dims[1] = input_h;
+        for (vx_size i = 2; i < inout_dim_num; ++i)
+        {
+            in_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        }
+
+        out_dims[0] = output_w;
+        out_dims[1] = output_h;
+        out_dims[2] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        for (vx_size i = 3; i < inout_dim_num; ++i)
+        {
+            out_dims[i] = in_dims[i];
+        }
+
+        weight_dims[0] = arg_->weight_w;
+        weight_dims[1] = arg_->weight_h;
+        weight_dims[2] = in_dims[2];
+        weight_dims[3] = out_dims[2];
+
+        if (bias_dim_num == 1) { bias_dims[0] = out_dims[2]; }
+        else if (bias_dim_num == 3)
+        {
+            bias_dims[0] = out_dims[0];
+            bias_dims[1] = out_dims[1];
+            bias_dims[2] = out_dims[2];
+        }
+
+        vx_tensor in_tensor = vxCreateTensor(context_->vx_context_, inout_dim_num, in_dims, data_type, fixed_point_position);
+        vx_tensor weight_tensor = vxCreateTensor(context_->vx_context_, weight_dim_num, weight_dims, data_type, fixed_point_position);
+        vx_tensor bias_tensor = bias_dim_num ? vxCreateTensor(context_->vx_context_, bias_dim_num, bias_dims, data_type, fixed_point_position) : NULL;
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, inout_dim_num, out_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(weight_tensor, VX_TYPE_TENSOR);
+        if (bias_dim_num) { ASSERT_VX_OBJECT(in_tensor, VX_TYPE_TENSOR); }
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        ownGetFlatByteStrides(arg_->fmt, in_dims, inout_dim_num, in_strides);
+        ownGetFlatByteStrides(arg_->fmt, weight_dims, weight_dim_num, weight_strides);
+        ownGetFlatByteStrides(arg_->fmt, bias_dims, bias_dim_num, bias_strides);
+        ownGetFlatByteStrides(arg_->fmt, out_dims, inout_dim_num, out_strides);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          in_dims: { "); for (size_t i = 0; i < inout_dim_num; ++i) { printf("%zu, ", in_dims[i]); } printf(" }, \n");
+            printf("\t          weight_dims: { "); for (size_t i = 0; i < weight_dim_num; ++i) { printf("%zu, ", weight_dims[i]); } printf(" }, \n");
+            if (bias_dim_num)
+            {
+                printf("\t          bias_dims: { "); for (size_t i = 0; i < bias_dim_num; ++i) { printf("%zu, ", bias_dims[i]); } printf(" }, \n");
+            }
+            printf("\t          out_dims: { "); for (size_t i = 0; i < inout_dim_num; ++i) { printf("%zu, ", out_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        const size_t in_bytes = in_dims[inout_dim_num-1] * in_strides[inout_dim_num-1];
+        const size_t weight_bytes = weight_dims[weight_dim_num-1] * weight_strides[weight_dim_num-1];
+        const size_t bias_bytes = bias_dim_num ? bias_dims[bias_dim_num-1] * bias_strides[bias_dim_num-1] : 0;
+        const size_t out_bytes = out_dims[inout_dim_num-1] * out_strides[inout_dim_num-1];
+
+        const size_t in_count = in_bytes / sizeof_data_type;
+        const size_t weight_count = weight_bytes / sizeof_data_type;
+        const size_t bias_count = bias_bytes / sizeof_data_type;
+
+        void * const in = malloc(in_bytes);
+        void * const weight = malloc(weight_bytes);
+        void * const bias = bias_dim_num ? malloc(bias_bytes) : NULL;
+        void * const out = malloc(out_bytes);
+        void * const refs = malloc(out_bytes);
+        ASSERT(in && weight && (!bias_count || bias) && out && refs);
+
+        {
+            const int deconv_prod_count = arg_->weight_w * arg_->weight_h * in_dims[2];
+
+            ownFillSmallRandData(arg_->fmt, &rng, in_count, deconv_prod_count, in);
+            ownFillSmallRandData(arg_->fmt, &rng, weight_count, deconv_prod_count, weight);
+            if (bias_dim_num) { ownFillRandData(arg_->fmt, &rng, bias_count, bias); }
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in_tensor, inout_dim_num, view_start, in_dims, in_strides, in, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            VX_CALL(vxCopyTensorPatch(weight_tensor, weight_dim_num, view_start, weight_dims, weight_strides, weight, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            if (bias_dim_num)
+            {
+                VX_CALL(vxCopyTensorPatch(bias_tensor, bias_dim_num, view_start, bias_dims, bias_strides, bias, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            }
+            VX_CALL(vxCopyTensorPatch(out_tensor, inout_dim_num, view_start, out_dims, out_strides, out, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            const vx_nn_deconvolution_params_t params =
+            {
+                arg_->padding_x, arg_->padding_y, arg_->convert_policy, arg_->rounding_policy,
+//                arg_->down_scale_size_rounding,
+                arg_->a_x, arg_->a_y
+            };
+            vx_node node = vxDeconvolutionLayer(graph, in_tensor, weight_tensor, bias_tensor, &params, sizeof(params), out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            tensor_desc_t in_td = { inout_dim_num, in_dims, in_strides };
+            tensor_desc_t weight_td = { weight_dim_num, weight_dims, weight_strides };
+            tensor_desc_t bias_td = { bias_dim_num, bias_dims, bias_strides };
+            tensor_desc_t out_td = { inout_dim_num, out_dims, out_strides };
+
+            ownDeconvolution(
+                    arg_->fmt,
+                    in, in_td,
+                    weight, weight_td,
+                    bias, bias_td,
+                    arg_->padding_x, arg_->padding_y,
+                    upscale_x, upscale_y,
+                    arg_->convert_policy == VX_CONVERT_POLICY_WRAP,
+                    arg_->rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN,
+                    arg_->a_x, arg_->a_y,
+                    refs, out_td);
+
+            const vx_size view_start[5] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, inout_dim_num, view_start, out_dims, out_strides, out, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out, out_dims, inout_dim_num, out_strides,
+                        refs, out_dims, inout_dim_num, out_strides,
+                        8, //0, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)refs + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&in_tensor));
+        VX_CALL(vxReleaseTensor(&weight_tensor));
+        if (bias_dim_num) { VX_CALL(vxReleaseTensor(&bias_tensor)); }
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in_tensor);
+        EXPECT_EQ_PTR(NULL, weight_tensor);
+        EXPECT_EQ_PTR(NULL, bias_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in);
+        free(weight);
+        free(bias);
+        free(out);
+        free(refs);
+    }
+}
+
+TESTCASE_TESTS(TensorNN,
+    /* vx_khr_nn.h function tests */
+    testConvolutionLayer,
+    testFullyConnectedLayer,
+    testPoolingLayer,
+    testSoftmaxLayer,
+//    testNormalizationLayer,
+    testActivationLayer,
+    testROIPoolingLayer,
+    testDeconvolutionLayer
+)
+#endif
diff --git a/test_conformance/test_tensor_op.c b/test_conformance/test_tensor_op.c
new file mode 100644
index 0000000..832f31d
--- /dev/null
+++ b/test_conformance/test_tensor_op.c
@@ -0,0 +1,1556 @@
+/*
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_tensor_util.h"
+
+
+TESTCASE(TensorOp, CT_VXContext, ct_setup_vx_context, 0)
+
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxTensorAddNode                            *
+ *                          Test vxTensorMultiplyNode                       *
+ *                          Test vxTensorSubtractNode                       *
+ *                                                                          *
+ ***************************************************************************/
+
+enum TestTensorOp
+{
+    TT_ADD,
+    TT_SUB,
+    TT_MUL,
+};
+
+static void ownCheckAddSubMulResult(
+        const void * in0_ptr, const vx_size * in0_dims, const vx_size * in0_strides,
+        const void * in1_ptr, const vx_size * in1_dims, const vx_size * in1_strides,
+        enum TestTensorDF fmt,
+        enum TestTensorOp op,
+        vx_size dim_num,
+        vx_size out_count,
+        bool wrap,  // true for WRAP, else SATURATE
+        bool to_ne, // true for ROUND_TO_NE, else ROUND_TO_ZERO (only used for fmt == TT_MUL)
+        vx_float32 scale,   // only used for fmt == TT_MUL
+        void * out_ptr, const vx_size * out_dims, const vx_size * out_strides)
+{
+    double q78_scale = (double)scale / Q78_SCALE;
+
+    for (size_t index = 0; index < out_count; ++index)
+    {
+        const size_t in0_byte_offset = ownGetFlatByteOffsetWithBroadcast(index, dim_num, in0_dims, in0_strides, out_dims);
+        const size_t in1_byte_offset = ownGetFlatByteOffsetWithBroadcast(index, dim_num, in1_dims, in1_strides, out_dims);
+        const size_t out_byte_offset = ownGetFlatByteOffset(index, dim_num, out_dims, out_strides);
+
+        const char * in0_b_ptr = (char*)in0_ptr + in0_byte_offset;
+        const char * in1_b_ptr = (char*)in1_ptr + in1_byte_offset;
+        const char * out_b_ptr = (char*)out_ptr + out_byte_offset;
+
+        switch (fmt)
+        {
+        case TT_Q78:
+            {
+                const vx_int16 in0 = *(vx_int16*)in0_b_ptr;
+                const vx_int16 in1 = *(vx_int16*)in1_b_ptr;
+                const vx_int16 out = *(vx_int16*)out_b_ptr;
+                int16_t ref;
+
+                switch (op)
+                {
+                case TT_ADD:
+                    {
+                        int32_t tmp = in0 + in1;
+                        ref = wrap ? trunc_to_int16(tmp) : CLAMP(tmp, INT16_MIN, INT16_MAX);
+                    }
+                    break;
+                case TT_SUB:
+                    {
+                        int32_t tmp = in0 - in1;
+                        ref = wrap ? trunc_to_int16(tmp) : CLAMP(tmp, INT16_MIN, INT16_MAX);
+                    }
+                    break;
+                case TT_MUL:
+                    {
+                        double tmp = in0 * in1 * q78_scale;
+                        tmp = to_ne ? nearbyint(tmp) : trunc(tmp); 
+                        ref = wrap ? trunc_to_int16(tmp) : CLAMP(tmp, INT16_MIN, INT16_MAX);
+                    }
+                    break;
+                default: assert(0);
+                }
+
+                const int max_raw_int_diff = 1;
+                if (I64_ABS_DIFF(ref, out) > max_raw_int_diff) {
+                    printf("DIFF!!! { idx: %zu, in0: %f, in0_raw: 0x%04X, in1: %f, in1_raw: 0x%04X, out: %f, out_raw: 0x%04X, ref: %f, ref_raw: 0x%04X\n }\n",
+                            index, in0 / 256.f, in0, in1 / 256.f, in1, out / 256.f, out, ref / 256.f, ref);
+                    if (max_raw_int_diff)
+                    {
+                        if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                            ASSERT_EQ_INT(I64_ABS_DIFF(ref, out) > max_raw_int_diff, 0);
+                        else
+                            EXPECT_EQ_INT(I64_ABS_DIFF(ref, out) > max_raw_int_diff, 0);
+                    }
+                    else
+                    {
+                        if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                            ASSERT_EQ_INT(ref, out);
+                        else
+                            EXPECT_EQ_INT(ref, out);
+                    }
+                }
+            }
+            break;
+        case TT_U8:
+            {
+                const vx_uint8 in0 = *(vx_uint8*)in0_b_ptr;
+                const vx_uint8 in1 = *(vx_uint8*)in1_b_ptr;
+                const vx_uint8 out = *(vx_uint8*)out_b_ptr;
+                uint8_t ref;
+
+                switch (op)
+                {
+                case TT_ADD:
+                    {
+                        int32_t tmp = in0 + in1;
+                        ref = wrap ? tmp : CLAMP(tmp, 0, UINT8_MAX);
+                    }
+                    break;
+                case TT_SUB:
+                    {
+                        int32_t tmp = in0 - in1;
+                        ref = wrap ? tmp : CLAMP(tmp, 0, UINT8_MAX);
+                    }
+                    break;
+                case TT_MUL:
+                    {
+                        double tmp = in0 * in1 * scale;
+                        tmp = to_ne ? nearbyint(tmp) : trunc(tmp); 
+                        ref = wrap ? tmp : CLAMP(tmp, 0, UINT8_MAX);
+                    }
+                    break;
+                default: assert(0);
+                }
+
+                if (ref != out)
+                    printf("DIFF!!! { idx: %zu, in0: %d, in1: %d, out: %d, ref: %d }\n", index, in0, in1, out, ref);
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT_EQ_INT(out, ref); else EXPECT_EQ_INT(out, ref);
+            }
+            break;
+        case TT_S8:
+            {
+                const vx_int8 in0 = *(vx_int8*)in0_b_ptr;
+                const vx_int8 in1 = *(vx_int8*)in1_b_ptr;
+                const vx_int8 out = *(vx_int8*)out_b_ptr;
+                int8_t ref;
+
+                switch (op)
+                {
+                case TT_ADD:
+                    {
+                        int32_t tmp = in0 + in1;
+                        ref = wrap ? trunc_to_int8(tmp) : CLAMP(tmp, INT8_MIN, INT8_MAX);
+                    }
+                    break;
+                case TT_SUB:
+                    {
+                        int32_t tmp = in0 - in1;
+                        ref = wrap ? trunc_to_int8(tmp) : CLAMP(tmp, INT8_MIN, INT8_MAX);
+                    }
+                    break;
+                case TT_MUL:
+                    {
+                        double tmp = in0 * in1 * scale;
+                        tmp = to_ne ? nearbyint(tmp) : trunc(tmp); 
+                        ref = wrap ? trunc_to_int8(tmp) : CLAMP(tmp, INT8_MIN, INT8_MAX);
+                    }
+                    break;
+                default: assert(0);
+                }
+
+                if (ref != out)
+                    printf("DIFF!!! { idx: %zu, in0: %d, in1: %d, out: %d, ref: %d }\n", index, in0, in1, out, ref);
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT_EQ_INT(out, ref); else EXPECT_EQ_INT(out, ref);
+            }
+            break;
+        default: assert(0);
+        }
+    }
+}
+
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+    enum TestTensorOp op;
+
+    enum vx_convert_policy_e convert_policy;
+    enum vx_round_policy_e rounding_policy;
+    vx_float32 scale;
+} test_tensor_elementwise_op_arg;
+
+#define TT_ELEMENTWISE_OP_BASE(NAME_,FMT_,OP_,OF_,ROUND_,SCALE_)                            \
+    ARG(NAME_,TT_##FMT_,TT_##OP_,VX_CONVERT_POLICY_##OF_,VX_ROUND_POLICY_TO_##ROUND_,SCALE_),
+
+#define TT_ELEMENTWISE_OP_MUL2(NAME_,FMT_,OF_,ROUND_)                           \
+    TT_ELEMENTWISE_OP_BASE(NAME_"_1f",FMT_,MUL,OF_,ROUND_,1.f)                  \
+    TT_ELEMENTWISE_OP_BASE(NAME_"_1_255f",FMT_,MUL,OF_,ROUND_,(1.f/255))        \
+    TT_ELEMENTWISE_OP_BASE(NAME_"_1_32768f",FMT_,MUL,OF_,ROUND_,(1.f/(1<<15)))
+
+#define TT_ELEMENTWISE_OP_MUL(NAME_,FMT_,OF_)                   \
+    TT_ELEMENTWISE_OP_MUL2(NAME_"_ZERO",FMT_,OF_,ZERO)          \
+    TT_ELEMENTWISE_OP_MUL2(NAME_"_NE",FMT_,OF_,NEAREST_EVEN)
+
+#define TT_ELEMENTWISE_OP1(NAME_,FMT_,OF_)                      \
+    TT_ELEMENTWISE_OP_BASE(NAME_"_ADD",FMT_,ADD,OF_,ZERO, 1)    \
+    TT_ELEMENTWISE_OP_BASE(NAME_"_SUB",FMT_,SUB,OF_,ZERO, 1)    \
+    TT_ELEMENTWISE_OP_MUL(NAME_"_MUL",FMT_,OF_)
+
+#define TT_ELEMENTWISE_OP0(FMT_)                    \
+    TT_ELEMENTWISE_OP1(#FMT_"_WRAP",FMT_,WRAP)      \
+    TT_ELEMENTWISE_OP1(#FMT_"_SAT",FMT_,SATURATE)
+
+#define TT_ELEMENTWISE_OP_ALL() \
+    TT_ELEMENTWISE_OP0(Q78)     \
+    TT_ELEMENTWISE_OP0(U8)      \
+    TT_ELEMENTWISE_OP0(S8)
+
+TEST_WITH_ARG(TensorOp, testTensorElementwiseOp, test_tensor_elementwise_op_arg,
+        TT_ELEMENTWISE_OP_ALL()
+)
+{
+    const vx_context context = context_->vx_context_;
+
+    const enum TestTensorDF fmt = arg_->fmt;
+    const enum TestTensorOp op = arg_->op;
+
+    const enum vx_convert_policy_e overflow_policy = arg_->convert_policy;
+    const enum vx_round_policy_e rounding_policy = arg_->rounding_policy;
+    const vx_float32 scale = arg_->scale;
+
+    assert(fmt == TT_Q78 || fmt == TT_U8 || fmt == TT_S8);
+    assert(op == TT_ADD || op == TT_SUB || op == TT_MUL);
+    assert(overflow_policy == VX_CONVERT_POLICY_WRAP || overflow_policy == VX_CONVERT_POLICY_SATURATE);
+    assert(rounding_policy == VX_ROUND_POLICY_TO_ZERO || rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN);
+    
+    // Only MUL supports rounding_policy and scale, we chose not to allow anything but default values for other ops
+    assert(TT_MUL || (rounding_policy == VX_ROUND_POLICY_TO_ZERO && scale == 1.f));
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    size_t * const in0_dims = malloc(sizeof(*in0_dims) * max_dims);
+    size_t * const in1_dims = malloc(sizeof(*in1_dims) * max_dims);
+    size_t * const out_dims = malloc(sizeof(*out_dims) * max_dims);
+    ASSERT(in0_dims && in1_dims && out_dims);
+
+    size_t * const in0_strides = malloc(sizeof(*in0_strides) * max_dims);
+    size_t * const in1_strides = malloc(sizeof(*in1_strides) * max_dims);
+    size_t * const out_strides = malloc(sizeof(*out_strides) * max_dims);
+    ASSERT(in0_strides && in1_strides && out_strides);
+
+    // The test strategy is a simple one: For each of the 1..max_dims supported
+    // we test a TEST_TENSOR_NUM_ITERATIONS of random dim and broadcast
+    // configurations. This approach may have issues if the implementation
+    // supports a lot of dimensions since their random size being up to
+    // TEST_TENSOR_MAX_DIM_SZ, could result in a huge memory requirement.
+    // However from previous experience we expect this to typically be 4-6 dims.
+    // The other issue is that we do not test huge dimensions.
+    // Further limitations include lack of virtual/ view inputs and outputs as -
+    // well as lack of modified stride testing etc.
+
+    // Note that iter is the inner loop, so that if two implementations support
+    // D1 and D2 dims resp. the same (pseudo-random) values would be used when
+    // testing the common min(D1, D2) dimensions.
+    for (vx_size dims = 1; dims <= max_dims; ++dims)
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("dims #: %zu,\titer #: %d\n", dims, iter);
+            fflush(stdout);
+        }
+
+        // First step is to get some random dim sizes, calc the strides and create the tensors.
+
+        for (vx_size i = 0; i < dims; ++i)
+        {
+            const size_t new_dim = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+            const int mask0 = !!CT_RNG_NEXT_INT(rng, 0, TEST_TENSOR_INVERSE_MASK_PROBABILITY);
+            const int mask1 = !!CT_RNG_NEXT_INT(rng, 0, TEST_TENSOR_INVERSE_MASK_PROBABILITY);
+
+            // Note: Broadcasting is described as for each dim, either in0 and in1 have the same
+            // size or "1" for a broadcasted value. And the output is strictly determined by them
+            // so that the implementation is required to support
+            // { in0, in1, out } = { 1, 5, 5 } but not { in0, in1, out } = { 1, 1, 5 }
+            // even though the KHR sample implementation currently supports both.
+            in0_dims[i] = mask0 ? new_dim : 1;
+            in1_dims[i] = mask1 ? new_dim : 1;
+            out_dims[i] = mask0 || mask1 ? new_dim : 1;
+
+            in0_strides[i] = i ? in0_strides[i - 1] * in0_dims[i - 1] : sizeof_data_type;
+            in1_strides[i] = i ? in1_strides[i - 1] * in1_dims[i - 1] : sizeof_data_type;
+            out_strides[i] = i ? out_strides[i - 1] * out_dims[i - 1] : sizeof_data_type;
+        }
+
+        vx_tensor in0_tensor = vxCreateTensor(context, dims, in0_dims, data_type, fixed_point_position);
+        vx_tensor in1_tensor = vxCreateTensor(context, dims, in1_dims, data_type, fixed_point_position);
+        vx_tensor out_tensor = vxCreateTensor(context, dims, out_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(in0_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(in1_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        const size_t in0_bytes = in0_dims[dims - 1] * in0_strides[dims - 1];
+        const size_t in1_bytes = in1_dims[dims - 1] * in1_strides[dims - 1];
+        const size_t out_bytes = out_dims[dims - 1] * out_strides[dims - 1];
+
+        const size_t in0_count = in0_bytes / sizeof_data_type;
+        const size_t in1_count = in1_bytes / sizeof_data_type;
+        const size_t out_count = out_bytes / sizeof_data_type;
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          dim_num: %zu,\n", dims);
+            printf("\t          in0 : { dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", in0_dims[i]); } printf(" }, count: %zu, bytes: %zu },\n", in0_count, in0_bytes);
+            printf("\t          in1 : { dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", in1_dims[i]); } printf(" }, count: %zu, bytes: %zu },\n", in1_count, in1_bytes);
+            printf("\t          out : { dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", out_dims[i]); } printf(" }, count: %zu, bytes: %zu },\n", out_count, out_bytes);
+            printf("\t        }\n");
+        }
+
+        //TODO: This is pretty wasteful as it's repeating a lot of work per iteration:
+        //      Both in the repeated malloc + free and inefficient data population
+        //      which discards much of the random data, only using a part of it.
+
+        // Second step is to allocate the input and output data locations and populate the inputs.
+
+        void * const in0_data = malloc(in0_bytes);
+        void * const in1_data = malloc(in1_bytes);
+        void * const out_data = malloc(out_bytes);
+        ASSERT(in0_data && in1_data && out_data);
+
+        {
+            ownFillRandData(fmt, &rng, in0_count, in0_data);
+            ownFillRandData(fmt, &rng, in1_count, in1_data);
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(in0_tensor, dims, view_start, in0_dims, in0_strides, in0_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+            VX_CALL(vxCopyTensorPatch(in1_tensor, dims, view_start, in1_dims, in1_strides, in1_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        // Third step is creating, running and disposing of the graph.
+        {
+            vx_graph graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = NULL;
+
+            switch (op)
+            {
+            case TT_ADD:
+                node = vxTensorAddNode(graph, in0_tensor, in1_tensor, overflow_policy, out_tensor);
+                break;
+            case TT_SUB:
+                node = vxTensorSubtractNode(graph, in0_tensor, in1_tensor, overflow_policy, out_tensor);
+                break;
+            case TT_MUL:
+            {
+                vx_scalar scalar = vxCreateScalar(context, VX_TYPE_FLOAT32, &scale);
+                ASSERT_VX_OBJECT(scalar, VX_TYPE_SCALAR);
+
+                node = vxTensorMultiplyNode(graph, in0_tensor, in1_tensor, scalar, overflow_policy, rounding_policy, out_tensor);
+
+                VX_CALL(vxReleaseScalar(&scalar));
+                EXPECT_EQ_PTR(NULL, scalar);
+                break;
+            }
+            default:
+                ASSERT(0);
+                // Not implemented;
+            }
+
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            const size_t view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(out_tensor, dims, view_start, out_dims, out_strides, out_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            ownCheckAddSubMulResult(
+                    in0_data, in0_dims, in0_strides,
+                    in1_data, in1_dims, in1_strides,
+                    fmt,
+                    op,
+                    dims,
+                    out_count,
+                    overflow_policy == VX_CONVERT_POLICY_WRAP,
+                    rounding_policy == VX_ROUND_POLICY_TO_NEAREST_EVEN,
+                    scale,
+                    out_data, out_dims, out_strides);
+        }
+
+        VX_CALL(vxReleaseTensor(&in0_tensor));
+        VX_CALL(vxReleaseTensor(&in1_tensor));
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, in0_tensor);
+        EXPECT_EQ_PTR(NULL, in1_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(in0_data);
+        free(in1_data);
+        free(out_data);
+    }
+
+    free(in0_dims);
+    free(in1_dims);
+    free(out_dims);
+
+    free(in0_strides);
+    free(in1_strides);
+    free(out_strides);
+}
+
+/****************************************************************************
+ *                                                                          *
+ *                              LUT Test                                    *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownFillRandDataForLUT(
+        enum TestTensorDF fmt,
+        uint64_t * rng,
+        size_t index_count,
+        size_t lut_count,
+        size_t lut_offset,
+        /*OUT*/ void * data)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            for(size_t i = 0; i < index_count; ++i)
+                ((vx_int16*)data)[i] = (vx_int16)(CT_RNG_NEXT_INT(*rng, 0, lut_count) - lut_offset);
+            break;
+        case TT_U8:
+            for(size_t i = 0; i < index_count; ++i)
+                ((vx_uint8*)data)[i] = (vx_uint8)(CT_RNG_NEXT_INT(*rng, 0, lut_count) - lut_offset);
+            break;
+//        case TT_S8:
+//            for(size_t i = 0; i < index_count; ++i)
+//                ((vx_int8*)data)[i] = (vx_int8)(CT_RNG_NEXT_INT(*rng, 0, lut_count) - lut_offset);
+//            break;
+        default:
+            assert(0);
+    }
+}
+
+static void ownUnpackFormatForLUT(
+        enum TestTensorDF fmt,
+        /*OUT*/ vx_size * lut_max_count,
+        /*OUT*/ vx_enum * lut_data_type)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            *lut_max_count = UINT16_MAX;
+            *lut_data_type = VX_TYPE_INT16;
+            break;
+        case TT_U8:
+//        case TT_S8:
+            *lut_max_count = UINT8_MAX;
+            *lut_data_type = VX_TYPE_UINT8;
+            break;
+        default:
+            assert(0);
+    }
+}
+
+//TODO: test_tensor_lut_op_arg and test_tensor_transpose_op_arg are basically identical - unify them?
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+} test_tensor_lut_op_arg;
+
+TEST_WITH_ARG(TensorOp, testTensorTableLookupOp, test_tensor_lut_op_arg,
+        ARG("Q78_TABLELOOKUP", TT_Q78),
+        ARG("U8_TABLELOOKUP", TT_U8),
+//        ARG("S8_TABLELOOKUP", TT_S8),
+)
+{
+    const vx_context context = context_->vx_context_;
+
+    const enum TestTensorDF fmt = arg_->fmt;
+    assert(fmt == TT_Q78 || fmt == TT_U8);// || fmt == TT_S8);
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    vx_size lut_max_count;
+    vx_enum lut_data_type;
+    ownUnpackFormatForLUT(fmt, &lut_max_count, &lut_data_type);
+
+    size_t * const tensor_dims = malloc(sizeof(*tensor_dims) * max_dims);
+    size_t * const tensor_strides = malloc(sizeof(*tensor_strides) * max_dims);
+    ASSERT(tensor_dims && tensor_strides);
+    
+    // The strategy is a simple one: For each of the 1..max_dims supported,
+    // we test a TEST_TENSOR_NUM_ITERATIONS of random tensor and LUT configs.
+    // While LUT should be (Not verified) sufficiently tested by the Non NN
+    // tests, we preffer to use random LUT dims and data each iteration anyway
+    // since the whole test should't take long and this can be used as a
+    // standalone conformance part for our own tests.
+    //TODO: @Tomer, should we rather use a single (per fmt) randomly populated
+    //      LUT, instead, anyway? Or is this acceptable?
+
+    // Note that iter is the inner loop, so that if two implementations support
+    // D1 and D2 dims resp. the same (pseudo-random) values would be used when
+    // testing the common min(D1, D2) dimensions.
+    for (vx_size dims = 1; dims <= max_dims; ++dims)
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("dims #: %zu,\titer #: %d\n", dims, iter);
+            fflush(stdout);
+        }
+
+        // First step is to get some random dim sizes, calc the strides and create the tensors.
+
+        for (vx_size i = 0; i < dims; ++i)
+        {
+            tensor_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+            tensor_strides[i] = i ? tensor_strides[i-1] * tensor_dims[i-1] : sizeof_data_type;
+        }
+
+        vx_tensor src_tensor = vxCreateTensor(context, dims, tensor_dims, data_type, fixed_point_position);
+        vx_tensor dst_tensor = vxCreateTensor(context, dims, tensor_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(src_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(dst_tensor, VX_TYPE_TENSOR);
+
+        const size_t tensor_bytes = tensor_dims[dims-1] * tensor_strides[dims-1];
+        const size_t tensor_count = tensor_bytes / sizeof_data_type;
+
+        const vx_size lut_count = (vx_size)CT_RNG_NEXT_INT(rng, 1, lut_max_count+1);
+        const vx_uint32 lut_offset = (lut_data_type == VX_TYPE_INT16) ? (vx_uint32)(lut_count / 2) : 0;
+
+        vx_lut lut = vxCreateLUT(context, lut_data_type, lut_count);
+        ASSERT_VX_OBJECT(lut, VX_TYPE_LUT);
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          tensor_dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", tensor_dims[i]); } printf(" }, \n");
+            printf("\t          LUT_count: %zu,", lut_count);
+            printf("\t        }\n");
+        }
+
+        void * const src_data = malloc(tensor_bytes);
+        void * const dst_data = malloc(tensor_bytes);
+        void * const lut_data = malloc(sizeof_data_type * lut_count);
+        ASSERT(src_data && dst_data && lut_data);
+
+        {   //TODO: ownTestInitTensors(..) ?
+            ownFillRandDataForLUT(fmt, &rng, tensor_count, lut_count, lut_offset, src_data);
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(src_tensor, dims, view_start, tensor_dims, tensor_strides, src_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        {
+            for (size_t i = 0; i < lut_count; ++i)
+            {
+                switch (fmt)
+                {
+                case TT_Q78:
+                    ((vx_int16*)lut_data)[i] = (vx_int16)(CT_RNG_NEXT_INT(rng, INT16_MIN, INT16_MAX + 1));
+                    break;
+                case TT_U8:
+//                case TT_S8:
+                    ((vx_uint8*)lut_data)[i] = (vx_uint8)(CT_RNG_NEXT_INT(rng, 0, UINT8_MAX + 1));
+                    break;
+                default: assert(0);
+                }
+            }
+
+            VX_CALL(vxCopyLUT(lut, lut_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        // Third step is creating, running and disposing of the graph.
+        {
+            vx_graph graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxTensorTableLookupNode(graph, src_tensor, lut, dst_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+        
+        // Verify the reuslts
+        {
+            const size_t view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(dst_tensor, dims, view_start, tensor_dims, tensor_strides, dst_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            for (size_t index = 0; index < tensor_count; ++index)
+            {
+                const size_t tensor_byte_offset = ownGetFlatByteOffset(index, dims, tensor_dims, tensor_strides);
+
+                switch(fmt)
+                {
+                case TT_Q78:
+                {
+                    const vx_int16 res = *(vx_int16*)((char*)dst_data + tensor_byte_offset);
+                    const vx_int16 val = *(vx_int16*)((char*)src_data + tensor_byte_offset);
+                    const int16_t ref = *((vx_int16*)lut_data + (size_t)((int32_t)lut_offset + (int32_t)val));
+
+                    if (res != ref)
+                    {
+                        printf("DIFF!!!\t\t{ src[%zu] : %f (raw: %d), LUT[%d + %u]: %f (raw: %d), res[%zu]: %f (raw: %d) }\n",
+                            tensor_byte_offset / sizeof(vx_int16), val / 256.f, val,
+                            val, lut_offset, ref / 256.f, ref,
+                            tensor_byte_offset / sizeof(vx_int16), res / 256.f, res);
+                    }
+                    if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                    {
+                        ASSERT_EQ_INT(res, ref);
+                    }
+                    else
+                    {
+                        EXPECT_EQ_INT(res, ref);
+                    }
+                }
+                break;
+                case TT_U8:
+                {
+                    const vx_uint8 res = *(vx_uint8*)((char*)dst_data + tensor_byte_offset);
+                    const vx_uint8 val = *(vx_uint8*)((char*)src_data + tensor_byte_offset);
+                    const uint8_t ref = *((vx_uint8*)lut_data + (size_t)((int32_t)lut_offset + (int32_t)val));
+
+                    if (res != ref)
+                    {
+                        printf("DIFF!!!\t\t{ src[%zu] : %d, LUT[%d + %u]: %d, res[%zu]: %d }\n",
+                            tensor_byte_offset / sizeof(vx_uint8), val,
+                            val, lut_offset, ref,
+                            tensor_byte_offset / sizeof(vx_uint8), res);
+                    }
+                    if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                    {
+                        ASSERT_EQ_INT(res, ref);
+                    }
+                    else
+                    {
+                        EXPECT_EQ_INT(res, ref);
+                    }
+                }
+                break;
+//                case TT_S8:
+//                {
+//                    const vx_int8 res = *(vx_int8*)(dst_data + tensor_byte_offset);
+//                    const uint8_t val = *(uint8_t*)(src_data + tensor_byte_offset);
+//                    const vx_int8 ref = *((vx_int8*)lut_data + (size_t)((int32_t)lut_offset + (int32_t)val));
+//
+//                    if (res != ref)
+//                    {
+//                        printf("DIFF!!!\t\t{ src[%zu] : %d, LUT[%d + %u]: %d, res[%zu]: %d }\n",
+//                            tensor_byte_offset / sizeof(vx_int8), val,
+//                            val, lut_offset, ref,
+//                            tensor_byte_offset / sizeof(vx_int8), res);
+//                    }
+//                    if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+//                    {
+//                        ASSERT_EQ_INT(res, ref);
+//                    }
+//                    else
+//                    {
+//                        EXPECT_EQ_INT(res, ref);
+//                    }
+//                }
+//                break;
+                default: assert(0);
+                }
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&src_tensor));
+        VX_CALL(vxReleaseTensor(&dst_tensor));
+        VX_CALL(vxReleaseLUT(&lut));
+
+        EXPECT_EQ_PTR(NULL, src_tensor);
+        EXPECT_EQ_PTR(NULL, dst_tensor);
+        EXPECT_EQ_PTR(NULL, lut);
+
+        free(src_data);
+        free(dst_data);
+    }
+
+    free(tensor_dims);
+    free(tensor_strides);
+}
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxTensorTransposeNode                      *
+ *                                                                          *
+ ***************************************************************************/
+
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+} test_tensor_transpose_op_arg;
+
+TEST_WITH_ARG(TensorOp, testTensorTransposeOp, test_tensor_transpose_op_arg,
+        ARG("Q78_TRANSPOSE", TT_Q78),
+        ARG("U8_TRANSPOSE", TT_U8),
+        ARG("S8_TRANSPOSE", TT_S8),
+)
+{
+    const vx_context context = context_->vx_context_;
+
+    const enum TestTensorDF fmt = arg_->fmt;
+    assert(fmt == TT_Q78 || fmt == TT_U8 || fmt == TT_S8);
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    size_t * const src_dims = malloc(sizeof(*src_dims) * max_dims);
+    size_t * const dst_dims = malloc(sizeof(*dst_dims) * max_dims);
+    ASSERT(src_dims && dst_dims);
+
+    //TODO: fix the following comment after its settlted :)
+    // The way we implement the transposed query is simply swapping 2 of the
+    // relevant dims strides in swizzled strides compared to original ones
+    size_t * const src_strides = malloc(sizeof(*src_strides) * max_dims);
+    size_t * const dst_strides = malloc(sizeof(*dst_strides) * max_dims);
+    size_t * const ref_strides = malloc(sizeof(*ref_strides) * max_dims);
+    ASSERT(src_strides && dst_strides && ref_strides);
+
+    //TODO: @Tomer, should swapping a dim with itself be acceptable?
+    
+    // The strategy is a simple one: For each of the 1..max_dims supported,
+    // we test all n^2 possible 2 dim combos for transposition.
+    // We choose to do so since $sum_{n=1}^{max_dims} n ^2 ~ O(n^3)# which
+    // isn't much for any practical number of supported dimensions.
+    // An alternative method could be similar to the one used in the
+    // Elementwise Op tests, where we ran TEST_TENSOR_NUM_ITERATIONS iters
+    // with random 2 dim choice. But for practical values of max_dims (~6?)
+    // it's hardly any different.
+    //TODO: @Tomer, do you preffer the ranom approach?
+    //
+    // Not that we still chose to use the psuedo random data rather than
+    // sequential values since the S8/U8 types would force a short repeating
+    // pattern making it slightly harder to debug and possibly missing
+    // perfectly aligned tranpose cases, however unlikely... :)
+    
+    // Note that iter is the inner loop, so that if two implementations support
+    // D1 and D2 dims resp. the same (pseudo-random) values would be used when
+    // testing the common min(D1, D2) dimensions.
+    //TODO: If a single dim cannot be "transposed with itself" (copy/NOP for virt), start from 2
+    for (vx_size dims = 1; dims <= max_dims; ++dims)
+    for (vx_size transpose_dim0 = 0; transpose_dim0 < dims; ++transpose_dim0)
+    for (vx_size transpose_dim1 = 1; transpose_dim1 < dims; ++transpose_dim1)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("dims: %zu, transpose_dim0: %zu, transpose_dim1: %zu\n", dims, transpose_dim0, transpose_dim1);
+            fflush(stdout);
+        }
+
+        // First step is to get some random dim sizes, calc the strides and create the tensors.
+
+        {
+            for (vx_size i = 0; i < dims; ++i)
+            {
+                src_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+                dst_dims[i] = src_dims[i];
+
+                src_strides[i] = i ? src_strides[i - 1] * src_dims[i - 1] : sizeof_data_type;
+                ref_strides[i] = src_strides[i];
+            }
+
+            dst_dims[transpose_dim1] = src_dims[transpose_dim0];
+            dst_dims[transpose_dim0] = src_dims[transpose_dim1];
+            ref_strides[transpose_dim1] = src_strides[transpose_dim0];
+            ref_strides[transpose_dim0] = src_strides[transpose_dim1];
+
+            for (vx_size i = 0; i < dims; ++i)
+            {
+                dst_strides[i] = i ? dst_strides[i - 1] * dst_dims[i - 1] : sizeof_data_type;
+            }
+        }
+
+        vx_tensor src_tensor = vxCreateTensor(context, dims, src_dims, data_type, fixed_point_position);
+        vx_tensor dst_tensor = vxCreateTensor(context, dims, dst_dims, data_type, fixed_point_position);
+        ASSERT_VX_OBJECT(src_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(dst_tensor, VX_TYPE_TENSOR);
+
+        const size_t bytes = src_dims[dims - 1] * src_strides[dims - 1];
+        const size_t count = bytes / sizeof_data_type;
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          src_dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", src_dims[i]); } printf(" },\n");
+            printf("\t          dst_dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", dst_dims[i]); } printf(" },\n");
+            printf("            count: %zu, bytes: %zu,\n", count, bytes);
+            printf("            tensor_transpose_dims: { %zu, %zu }\n", transpose_dim0, transpose_dim1);
+            printf("\t        }\n");
+        }
+        
+        //TODO: This is pretty wasteful as it's repeating a lot of work per iteration:
+        //      Both in the repeated malloc + free and inefficient data population
+        //      which discards much of the random data, only using a part of it.
+
+        // Second step is to allocate the input and output data locations and populate the inputs.
+
+        void * const src_data = malloc(bytes);
+        void * const dst_data = malloc(bytes);
+        ASSERT(src_data && dst_data);
+
+        {   //TODO: ownTestInitTensors(..) ?
+            ownFillRandData(fmt, &rng, count, src_data);
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(src_tensor, dims, view_start, src_dims, src_strides, src_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        // Third step is creating, running and disposing of the graph.
+        {
+            vx_graph graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_node node = vxTensorTransposeNode(graph, src_tensor, dst_tensor, transpose_dim0, transpose_dim1);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the results
+        {
+            const size_t view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(dst_tensor, dims, view_start, dst_dims, dst_strides, dst_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            for (size_t index = 0; index < count; ++index)
+            {
+                const size_t res_byte_offset = ownGetFlatByteOffset(index, dims, dst_dims, dst_strides);
+                const size_t ref_byte_offset = ownGetFlatByteOffset(index, dims, dst_dims, ref_strides);
+
+                //TODO: can unify the following to avoid the copy pasta...
+
+                switch(fmt)
+                {
+                case TT_Q78:
+                {
+                    const vx_int16 res = *(vx_int16*)((char*)dst_data + res_byte_offset);
+                    const vx_int16 ref = *(vx_int16*)((char*)src_data + ref_byte_offset);
+
+                    if (res != ref)
+                    {
+                        printf("DIFF!!!\t\t{ src[%zu]: %f (raw: %d), dst[%zu]: %f (raw: %d) }\n",
+                            ref_byte_offset / sizeof(vx_int16), ref / 256.f, ref,
+                            res_byte_offset / sizeof(vx_int16), res / 256.f, res);
+                    }
+                    if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                    {
+                        ASSERT_EQ_INT(res, ref);
+                    }
+                    else
+                    {
+                        EXPECT_EQ_INT(res, ref);
+                    }
+                }
+                break;
+                case TT_U8:
+                {
+                    const vx_uint8 res = *(vx_uint8*)((char*)dst_data + res_byte_offset);
+                    const vx_uint8 ref = *(vx_uint8*)((char*)src_data + ref_byte_offset);
+
+                    if (res != ref)
+                    {
+                        printf("DIFF!!!\t\t{ src[%zu]: %d, dst[%zu]: %d }\n",
+                            ref_byte_offset / sizeof(vx_uint8), ref,
+                            res_byte_offset / sizeof(vx_uint8), res);
+                    }
+                    if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                    {
+                        ASSERT_EQ_INT(res, ref);
+                    }
+                    else
+                    {
+                        EXPECT_EQ_INT(res, ref);
+                    }
+                }
+                break;
+                case TT_S8:
+                {
+                    const vx_int8 res = *(vx_int8*)((char*)dst_data + res_byte_offset);
+                    const vx_int8 ref = *(vx_int8*)((char*)src_data + ref_byte_offset);
+
+                    if (res != ref)
+                    {
+                        printf("DIFF!!!\t\t{ src[%zu]: %d, dst[%zu]: %d }\n",
+                            ref_byte_offset / sizeof(vx_int8), ref,
+                            res_byte_offset / sizeof(vx_int8), res);
+                    }
+                    if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR)
+                    {
+                        ASSERT_EQ_INT(res, ref);
+                    }
+                    else
+                    {
+                        EXPECT_EQ_INT(res, ref);
+                    }
+                }
+                break;
+                default: assert(0);
+                } 
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&src_tensor));
+        VX_CALL(vxReleaseTensor(&dst_tensor));
+        EXPECT_EQ_PTR(NULL, src_tensor);
+        EXPECT_EQ_PTR(NULL, dst_tensor);
+
+        free(src_data);
+        free(dst_data);
+    }
+
+    free(src_dims);
+    free(dst_dims);
+
+    free(src_strides);
+    free(dst_strides);
+    free(ref_strides);
+}
+
+/****************************************************************************
+ *                                                                          *
+ *                          Test vxTensorConvertDepthNode                   *
+ *                                                                          *
+ ***************************************************************************/
+
+typedef struct
+{
+    const char * name;
+
+    enum vx_convert_policy_e policy;
+    enum TestTensorDF src_fmt;
+    enum TestTensorDF dst_fmt;
+
+    float offset;
+    float norm;
+} test_tensor_convert_depth_op_arg;
+
+//TODO: what kind of configs do we want to test? It doesn't have to be full width conversions
+TEST_WITH_ARG(TensorOp, testTensorConvertDepthOp, test_tensor_convert_depth_op_arg,
+        ARG("DEPTH_CONVERT_SAT_Q78_TO_Q78_FULL", VX_CONVERT_POLICY_SATURATE, TT_Q78, TT_Q78, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_Q78_TO_U8_FULL", VX_CONVERT_POLICY_SATURATE, TT_Q78, TT_U8, 128.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_Q78_TO_S8_FULL", VX_CONVERT_POLICY_SATURATE, TT_Q78, TT_S8, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_U8_TO_Q78_FULL", VX_CONVERT_POLICY_SATURATE, TT_U8, TT_Q78, -128.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_U8_TO_U8_FULL", VX_CONVERT_POLICY_SATURATE, TT_U8, TT_U8, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_U8_TO_S8_FULL", VX_CONVERT_POLICY_SATURATE, TT_U8, TT_S8, -128.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_S8_TO_Q78_FULL", VX_CONVERT_POLICY_SATURATE, TT_S8, TT_Q78, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_S8_TO_U8_FULL", VX_CONVERT_POLICY_SATURATE, TT_S8, TT_U8, 128.f, 1.f),
+        ARG("DEPTH_CONVERT_SAT_S8_TO_S8_FULL", VX_CONVERT_POLICY_SATURATE, TT_S8, TT_S8, 0.f, 1.f),
+
+        ARG("DEPTH_CONVERT_WRAP_Q78_TO_Q78_FULL", VX_CONVERT_POLICY_WRAP, TT_Q78, TT_Q78, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_Q78_TO_U8_FULL", VX_CONVERT_POLICY_WRAP, TT_Q78, TT_U8, 128.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_Q78_TO_S8_FULL", VX_CONVERT_POLICY_WRAP, TT_Q78, TT_S8, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_U8_TO_Q78_FULL", VX_CONVERT_POLICY_WRAP, TT_U8, TT_Q78, -128.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_U8_TO_U8_FULL", VX_CONVERT_POLICY_WRAP, TT_U8, TT_U8, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_U8_TO_S8_FULL", VX_CONVERT_POLICY_WRAP, TT_U8, TT_S8, -128.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_S8_TO_Q78_FULL", VX_CONVERT_POLICY_WRAP, TT_S8, TT_Q78, 0.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_S8_TO_U8_FULL", VX_CONVERT_POLICY_WRAP, TT_S8, TT_U8, 128.f, 1.f),
+        ARG("DEPTH_CONVERT_WRAP_S8_TO_S8_FULL", VX_CONVERT_POLICY_WRAP, TT_S8, TT_S8, 0.f, 1.f),
+)
+{
+    const vx_context context = context_->vx_context_;
+
+    const enum TestTensorDF src_fmt = arg_->src_fmt;
+    const enum TestTensorDF dst_fmt = arg_->dst_fmt;
+    assert(src_fmt == TT_Q78 || src_fmt == TT_U8 || src_fmt == TT_S8);
+    assert(dst_fmt == TT_Q78 || dst_fmt == TT_U8 || dst_fmt == TT_S8);
+
+    const enum vx_convert_policy_e policy = arg_->policy;
+    assert(policy == VX_CONVERT_POLICY_SATURATE || policy == VX_CONVERT_POLICY_WRAP);
+
+    const float offset = arg_->offset;
+    const float norm = arg_->norm;
+
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum src_data_type;
+    vx_enum dst_data_type;
+    vx_uint8 src_fixed_point_position;
+    vx_uint8 dst_fixed_point_position;
+    vx_size src_sizeof_data_type;
+    vx_size dst_sizeof_data_type;
+    ownUnpackFormat(src_fmt, &src_data_type, &src_fixed_point_position, &src_sizeof_data_type);
+    ownUnpackFormat(dst_fmt, &dst_data_type, &dst_fixed_point_position, &dst_sizeof_data_type);
+
+    size_t * const tensor_dims = malloc(sizeof(*tensor_dims) * max_dims);
+    size_t * const src_tensor_strides = malloc(sizeof(*src_tensor_strides) * max_dims);
+    size_t * const dst_tensor_strides = malloc(sizeof(*dst_tensor_strides) * max_dims);
+    ASSERT(tensor_dims && src_tensor_strides && dst_tensor_strides);
+
+    //TODO: what's the testing strategy here? missing desc.
+
+    // Note that iter is the inner loop, so that if two implementations support
+    // D1 and D2 dims resp. the same (pseudo-random) values would be used when
+    // testing the common min(D1, D2) dimensions.
+    for (vx_size dims = 1; dims <= max_dims; ++dims)
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("dims #: %zu,\titer #: %d\n", dims, iter);
+            fflush(stdout);
+        }
+
+        // First step is to get some random dim sizes, calc the strides and create the tensors.
+
+        for (vx_size i = 0; i < dims; ++i)
+        {
+            tensor_dims[i] = (size_t)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+            src_tensor_strides[i] = i ? src_tensor_strides[i-1] * tensor_dims[i-1] : src_sizeof_data_type;
+            dst_tensor_strides[i] = i ? dst_tensor_strides[i-1] * tensor_dims[i-1] : dst_sizeof_data_type;
+        }
+
+        vx_tensor src_tensor = vxCreateTensor(context, dims, tensor_dims, src_data_type, src_fixed_point_position);
+        vx_tensor dst_tensor = vxCreateTensor(context, dims, tensor_dims, dst_data_type, dst_fixed_point_position);
+        ASSERT_VX_OBJECT(src_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(dst_tensor, VX_TYPE_TENSOR);
+
+        const size_t src_tensor_bytes = tensor_dims[dims-1] * src_tensor_strides[dims-1];
+        const size_t dst_tensor_bytes = tensor_dims[dims-1] * dst_tensor_strides[dims-1];
+        const size_t count = src_tensor_bytes / src_sizeof_data_type;
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          tensor_dims: { "); for (size_t i = 0; i < dims; ++i) { printf("%zu, ", tensor_dims[i]); } printf(" }, \n");
+            printf("\t        }\n");
+        }
+
+        void * const src_data = malloc(src_tensor_bytes);
+        void * const dst_data = malloc(dst_tensor_bytes);
+        ASSERT(src_data && dst_data);
+
+        {   //TODO: ownTestInitTensors(..) ?
+            ownFillRandData(src_fmt, &rng, count, src_data);
+
+            vx_size view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(src_tensor, dims, view_start, tensor_dims, src_tensor_strides, src_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        // Third step is creating, running and disposing of the graph.
+        {
+            vx_graph graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_scalar norm_sc = vxCreateScalar(context, VX_TYPE_FLOAT32, &norm);
+            vx_scalar offset_sc = vxCreateScalar(context, VX_TYPE_FLOAT32, &offset);
+            ASSERT_VX_OBJECT(norm_sc, VX_TYPE_SCALAR);
+            ASSERT_VX_OBJECT(offset_sc, VX_TYPE_SCALAR);
+
+            vx_node node = vxTensorConvertDepthNode(graph, src_tensor, policy, norm_sc, offset_sc, dst_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxReleaseScalar(&norm_sc));
+            VX_CALL(vxReleaseScalar(&offset_sc));
+            EXPECT_EQ_PTR(NULL, norm_sc);
+            EXPECT_EQ_PTR(NULL, offset_sc);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        // Verify the reuslts
+        {
+            const size_t view_start[MAX_TENSOR_DIMS] = { 0 };
+            VX_CALL(vxCopyTensorPatch(dst_tensor, dims, view_start, tensor_dims, dst_tensor_strides, dst_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            const float scale = 1.f / norm;
+            const bool wrap = policy == VX_CONVERT_POLICY_WRAP;
+
+            for (size_t index = 0; index < count; ++index)
+            {
+                const size_t src_tensor_byte_offset = ownGetFlatByteOffset(index, dims, tensor_dims, src_tensor_strides);
+                const size_t dst_tensor_byte_offset = ownGetFlatByteOffset(index, dims, tensor_dims, dst_tensor_strides);
+
+                float tmp;
+
+                switch(src_fmt)
+                {
+                case TT_Q78:
+                  tmp = *(vx_int16*)((char*)src_data + src_tensor_byte_offset);
+                    tmp /= Q78_SCALE;
+                    break;
+                case TT_U8:
+                    tmp = *(vx_uint8*)((char*)src_data + src_tensor_byte_offset);
+                    break;
+                case TT_S8:
+                    tmp = *(vx_int8*)((char*)src_data + src_tensor_byte_offset);
+                    break;
+                default: assert(0);
+                }
+
+                tmp = (tmp - offset) * scale;
+
+                //TODO: missing allowed eps
+                //TODO: missing diff printf
+                switch(dst_fmt)
+                {
+                case TT_Q78:
+                    {
+                        tmp *= Q78_SCALE;
+                        vx_int16 ref = wrap ? (vx_int16)tmp : CLAMP(tmp, INT16_MIN, INT16_MAX); //TODO: cast issue?
+                        vx_int16 res = *(vx_int16*)((char*)dst_data + dst_tensor_byte_offset);
+                        if (res != ref) printf("DIFF!!!\n");
+                        if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT_EQ_INT(res, ref); else EXPECT_EQ_INT(res, ref);
+                    }
+                    break;
+                case TT_U8:
+                    {
+                        vx_uint8 ref = wrap ? (vx_uint8)tmp : CLAMP(tmp, 0, UINT8_MAX);  // CLAMP not really needed
+                        vx_uint8 res = *(vx_uint8*)((char*)dst_data + dst_tensor_byte_offset);
+                        if (res != ref) printf("DIFF!!!\n");
+                        if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT_EQ_INT(res, ref); else EXPECT_EQ_INT(res, ref);
+                    }
+                    break;
+                case TT_S8:
+                    {
+                        vx_int8 ref = wrap ? (vx_int8)tmp : (vx_int8)CLAMP(tmp, INT8_MIN, INT8_MAX); //TODO: cast issue?
+                        vx_int8 res = *(vx_int8*)((char*)dst_data + dst_tensor_byte_offset);
+                        if (res != ref) printf("DIFF!!!\n");
+                        if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT_EQ_INT(res, ref); else EXPECT_EQ_INT(res, ref);
+                    }
+                    break;
+                default: assert(0);
+                }
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&src_tensor));
+        VX_CALL(vxReleaseTensor(&dst_tensor));
+        EXPECT_EQ_PTR(NULL, src_tensor);
+        EXPECT_EQ_PTR(NULL, dst_tensor);
+
+        free(src_data);
+        free(dst_data);
+    }
+
+    free(tensor_dims);
+    free(src_tensor_strides);
+    free(dst_tensor_strides);
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                     Test vxTensorMatrixMultiplyNode                      *
+ *                                                                          *
+ ***************************************************************************/
+
+static void ownTensorMatrixMultiply(
+        enum TestTensorDF fmt,
+        const void * a_data, const vx_size * a_dims, const vx_size * a_strides, bool a_transposed,
+        const void * b_data, const vx_size * b_dims, const vx_size * b_strides, bool b_transposed,
+        const void * c_data, const vx_size * c_dims, const vx_size * c_strides, bool c_transposed,
+        void * ref_data, const vx_size * out_dims, const vx_size * out_strides)
+{
+    const vx_size aa_strides[2] = { a_strides[a_transposed], a_strides[1-a_transposed] };
+    const vx_size bb_strides[2] = { b_strides[b_transposed], b_strides[1-b_transposed] };
+    const vx_size cc_strides[2] = { c_strides[c_transposed], c_strides[1-c_transposed] };
+    size_t common_dim = a_dims[a_transposed];
+
+    switch(fmt)
+    {
+        case TT_Q78:
+            {
+                for (size_t y = 0; y < out_dims[1]; ++y)
+                for (size_t x = 0; x < out_dims[0]; ++x)
+                {
+                    int_fast32_t accum = 0;
+
+                    for (size_t i = 0; i < common_dim; ++i)
+                    {
+                        int_fast32_t a_val = *(vx_int16*)((char*)a_data + aa_strides[1] * y + aa_strides[0] * i);
+                        int_fast32_t b_val = *(vx_int16*)((char*)b_data + bb_strides[1] * i + bb_strides[0] * x);
+
+                        accum += a_val * b_val;
+                    }
+
+                    if (c_data)
+                    {
+                        accum += *(vx_int16*)((char*)c_data + cc_strides[1] * y + cc_strides[0] * x) * Q78_SCALE;
+                    }
+
+                    *(vx_int16*)((char*)ref_data + out_strides[1] * y + out_strides[0] * x) =
+                        CLAMP((accum + Q78_HALF) / Q78_SCALE, INT16_MIN, INT16_MAX);
+                }
+            }
+            break;
+        case TT_U8:
+            {
+                for (size_t y = 0; y < out_dims[1]; ++y)
+                for (size_t x = 0; x < out_dims[0]; ++x)
+                {
+                    int_fast32_t accum = 0;
+
+                    for (size_t i = 0; i < common_dim; ++i)
+                    {
+                        int_fast32_t a_val = *(vx_uint8*)((char*)a_data + aa_strides[1] * y + aa_strides[0] * i);
+                        int_fast32_t b_val = *(vx_uint8*)((char*)b_data + bb_strides[1] * i + bb_strides[0] * x);
+
+                        accum += a_val * b_val;
+                    }
+
+                    if (c_data)
+                    {
+                        accum += *(vx_uint8*)((char*)c_data + cc_strides[1] * y + cc_strides[0] * x);
+                    }
+
+                    *(vx_uint8*)((char*)ref_data + out_strides[1] * y + out_strides[0] * x) =
+                        CLAMP(accum, 0, UINT8_MAX);
+                }
+            }
+            break;
+        case TT_S8:
+            {
+                for (size_t y = 0; y < out_dims[1]; ++y)
+                for (size_t x = 0; x < out_dims[0]; ++x)
+                {
+                    int_fast32_t accum = 0;
+
+                    for (size_t i = 0; i < common_dim; ++i)
+                    {
+                        int_fast32_t a_val = *(vx_int8*)((char*)a_data + aa_strides[1] * y + aa_strides[0] * i);
+                        int_fast32_t b_val = *(vx_int8*)((char*)b_data + bb_strides[1] * i + bb_strides[0] * x);
+
+                        accum += a_val * b_val;
+                    }
+
+                    if (c_data)
+                    {
+                        accum += *(vx_int8*)((char*)c_data + cc_strides[1] * y + cc_strides[0] * x);
+                    }
+
+                    *(vx_int8*)((char*)ref_data + out_strides[1] * y + out_strides[0] * x) =
+                        CLAMP(accum, INT8_MIN, INT8_MAX);
+                }
+            }
+            break;
+        default:
+            assert(0);
+    }
+}
+
+typedef struct
+{
+    const char * name;
+
+    enum TestTensorDF fmt;
+    bool c_present;
+
+    bool a_transposed;
+    bool b_transposed;
+    bool c_transposed;  // ingored unless c_present
+} test_tensor_matrix_multiply_op_arg;
+
+//TODO: what kind of configs do we want to test? It doesn't have to be full width conversions
+#define TT_TENSOR_MAD_BASE(S_,FMT_,C_PRESENT_,A_T_,B_T_,C_T_)   \
+    ARG("MAD_"S_, TT_ ## FMT_,C_PRESENT_,A_T_,B_T_,C_T_),
+
+#define TT_TENSOR_MAD_B(S_,FMT_,A_,B_)                  \
+    TT_TENSOR_MAD_BASE(S_,FMT_,false,A_,B_,false)       \
+    TT_TENSOR_MAD_BASE(S_"_C",FMT_,true,A_,B_,false)    \
+    TT_TENSOR_MAD_BASE(S_"_CT",FMT_,true,A_,B_,true)
+
+#define TT_TENSOR_MAD_A(S_,FMT_,A_)         \
+    TT_TENSOR_MAD_B(S_ "_B",FMT_,A_,false)  \
+    TT_TENSOR_MAD_B(S_ "_BT",FMT_,A_,true)
+
+#define TT_TENSOR_MAD_0(FMT_)               \
+    TT_TENSOR_MAD_A(#FMT_"_A", FMT_,false)  \
+    TT_TENSOR_MAD_A(#FMT_"_AT",FMT_,true)
+
+#define TT_TENSOR_MAD_ALL() \
+    TT_TENSOR_MAD_0(Q78)    \
+    TT_TENSOR_MAD_0(U8)     \
+    TT_TENSOR_MAD_0(S8)
+
+TEST_WITH_ARG(TensorOp, testTensorMatrixMultiplyOp, test_tensor_matrix_multiply_op_arg,
+        TT_TENSOR_MAD_ALL()
+)
+{
+    vx_size max_dims = 0;
+    {   // TODO: ownTestGetMaxDims() ?
+        VX_CALL(vxQueryContext(context_->vx_context_, VX_CONTEXT_MAX_TENSOR_DIMS, &max_dims, sizeof(max_dims)));
+        ASSERT(max_dims > 3);
+        if(!DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS) max_dims = 4; else max_dims = MIN(max_dims, MAX_TENSOR_DIMS);
+    }
+
+    uint64_t rng;
+    {   // TODO: ownTestGetRNG() ?
+        uint64_t * seed = &CT()->seed_;
+        ASSERT(!!seed);
+        CT_RNG_INIT(rng, *seed);
+    }
+
+    vx_enum data_type;
+    vx_uint8 fixed_point_position;
+    vx_size sizeof_data_type;
+    ownUnpackFormat(arg_->fmt, &data_type, &fixed_point_position, &sizeof_data_type);
+
+    for (int iter = 0; iter < TEST_TENSOR_NUM_ITERATIONS; ++iter)
+    {
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("iter #: %d\n", iter); fflush(stdout);
+        }
+
+        const vx_size m = (vx_size)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        const vx_size n = (vx_size)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+        const vx_size k = (vx_size)CT_RNG_NEXT_INT(rng, TEST_TENSOR_MIN_DIM_SZ, TEST_TENSOR_MAX_DIM_SZ+1);
+
+        // Not that unlike common GEMM, here we do not update an existing c but
+        // output to a different tensor!
+
+        const vx_size a_dims[2] = { arg_->a_transposed ? m : n, arg_->a_transposed ? n : m };
+        const vx_size b_dims[2] = { arg_->b_transposed ? n : k, arg_->b_transposed ? k : n };
+        const vx_size c_dims[2] = { arg_->c_transposed ? m : k, arg_->c_transposed ? k : m };
+        const vx_size out_dims[2] = { k, m };
+
+        if (DEBUG_TEST_TENSOR_ENABLE_PRINTF)
+        {
+            printf("\tconfig: {\n");
+            printf("\t          a_dims: { %zu, %zu },\n", a_dims[0], a_dims[1]);
+            printf("\t          b_dims: { %zu, %zu },\n", b_dims[0], b_dims[1]);
+            if (arg_->c_present)
+                printf("\t          c_dims: { %zu, %zu },\n", c_dims[0], c_dims[1]);
+            printf("\t          out_dims: { %zu, %zu },\n", out_dims[0], out_dims[1]);
+            printf("\t        }\n");
+        }
+
+        const vx_size a_strides[2] = { sizeof_data_type, sizeof_data_type * a_dims[0] };
+        const vx_size b_strides[2] = { sizeof_data_type, sizeof_data_type * b_dims[0] };
+        const vx_size c_strides[2] = { sizeof_data_type, sizeof_data_type * c_dims[0] };
+        const vx_size out_strides[2] = { sizeof_data_type, sizeof_data_type * out_dims[0] };
+
+        void * a_data = malloc(m * n * sizeof_data_type);
+        void * b_data = malloc(n * k * sizeof_data_type);
+        void * c_data = arg_->c_present ? malloc(m * k * sizeof_data_type) : NULL;
+        void * out_data = malloc(m * k * sizeof_data_type);
+        void * ref_data = malloc(m * k * sizeof_data_type);
+        ASSERT(a_data && b_data && (!arg_->c_present || c_data) && out_data && ref_data);
+
+        // Since we check the sum of products here, and te accumulator is only
+        // supposed to be 32 bits, we need smaller values so that the intermidiate
+        // results don't exceed it.
+        ownFillSmallRandData(arg_->fmt, &rng, m * n, a_dims[0] + 1, a_data);
+        ownFillSmallRandData(arg_->fmt, &rng, n * k, a_dims[0] + 1, b_data);
+        if (arg_->c_present) { ownFillSmallRandData(arg_->fmt, &rng, m * k, a_dims[0] + 1, c_data); }
+
+        vx_tensor a_tensor = vxCreateTensor(context_->vx_context_, 2, a_dims, data_type, fixed_point_position);
+        vx_tensor b_tensor = vxCreateTensor(context_->vx_context_, 2, b_dims, data_type, fixed_point_position);
+        vx_tensor c_tensor = arg_->c_present ? vxCreateTensor(context_->vx_context_, 2, c_dims, data_type, fixed_point_position) : NULL;
+        vx_tensor out_tensor = vxCreateTensor(context_->vx_context_, 2, out_dims, data_type, fixed_point_position);
+
+        ASSERT_VX_OBJECT(a_tensor, VX_TYPE_TENSOR);
+        ASSERT_VX_OBJECT(b_tensor, VX_TYPE_TENSOR);
+        if (arg_->c_present)
+        {
+            ASSERT_VX_OBJECT(c_tensor, VX_TYPE_TENSOR);
+        }
+        ASSERT_VX_OBJECT(out_tensor, VX_TYPE_TENSOR);
+
+        vx_size view_start[2] = { 0, 0 };
+        VX_CALL(vxCopyTensorPatch(a_tensor, 2, view_start, a_dims, a_strides, a_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        VX_CALL(vxCopyTensorPatch(b_tensor, 2, view_start, b_dims, b_strides, b_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        if (arg_->c_present)
+        {
+            VX_CALL(vxCopyTensorPatch(c_tensor, 2, view_start, c_dims, c_strides, c_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        // Create, run and dispose of the graph
+        {
+            vx_graph graph = vxCreateGraph(context_->vx_context_);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+            vx_tensor_matrix_multiply_params_t params = { arg_->a_transposed, arg_->b_transposed, arg_->c_transposed };
+            vx_node node = vxTensorMatrixMultiplyNode(graph, a_tensor, b_tensor, c_tensor, &params, out_tensor);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            VX_CALL(vxReleaseNode(&node));
+            EXPECT_EQ_PTR(NULL, node);
+
+            VX_CALL(vxVerifyGraph(graph));
+            VX_CALL(vxProcessGraph(graph));
+
+            VX_CALL(vxReleaseGraph(&graph));
+            EXPECT_EQ_PTR(NULL, graph);
+        }
+
+        {
+            ownTensorMatrixMultiply(
+                    arg_->fmt,
+                    a_data, a_dims, a_strides, arg_->a_transposed,
+                    b_data, b_dims, b_strides, arg_->b_transposed,
+                    c_data, c_dims, c_strides, arg_->c_transposed,
+                    ref_data, out_dims, out_strides);
+
+            VX_CALL(vxCopyTensorPatch(out_tensor, 2, view_start, out_dims, out_strides, out_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+            size_t first_diff_index;
+            size_t first_diff_byte_offset0;
+            size_t first_diff_byte_offset1;
+            if (!ownExpectIdenticalData(
+                        arg_->fmt,
+                        out_data, out_dims, 2, out_strides,
+                        ref_data, out_dims, 2, out_strides,
+                        8, //(arg_->fmt == TT_Q78 ? 1 : 0),
+                        &first_diff_index,
+                        &first_diff_byte_offset0,
+                        &first_diff_byte_offset1))
+            {
+                printf("DIFF! { idx: %zu, out: ", first_diff_index);
+                ownPrettyPrintVal(arg_->fmt, (char*)out_data + first_diff_byte_offset0);
+                printf(", ref: ");
+                ownPrettyPrintVal(arg_->fmt, (char*)ref_data + first_diff_byte_offset1);
+                printf(" }\n");
+
+                if (!DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR) ASSERT(0);
+            }
+        }
+
+        VX_CALL(vxReleaseTensor(&a_tensor));
+        VX_CALL(vxReleaseTensor(&b_tensor));
+        if (arg_->c_present) VX_CALL(vxReleaseTensor(&c_tensor));
+        VX_CALL(vxReleaseTensor(&out_tensor));
+        EXPECT_EQ_PTR(NULL, a_tensor);
+        EXPECT_EQ_PTR(NULL, b_tensor);
+        EXPECT_EQ_PTR(NULL, c_tensor);
+        EXPECT_EQ_PTR(NULL, out_tensor);
+
+        free(a_data);
+        free(b_data);
+        free(c_data);
+        free(out_data);
+    }
+}
+
+TESTCASE_TESTS(TensorOp,
+    /* vx_nodes.h function tests */
+    testTensorElementwiseOp,
+    testTensorTableLookupOp,
+    testTensorTransposeOp,
+    testTensorConvertDepthOp,
+    testTensorMatrixMultiplyOp
+    /* minigraph tests */
+    /*, testTensorOpSanity*/
+)
diff --git a/test_conformance/test_tensor_util.h b/test_conformance/test_tensor_util.h
new file mode 100644
index 0000000..6acd1f3
--- /dev/null
+++ b/test_conformance/test_tensor_util.h
@@ -0,0 +1,452 @@
+//#define TT_ENABLE_MINIGRAPH_TEST
+
+
+
+#include "test_engine/test.h"
+
+#include <VX/vx_types.h>
+#include <VX/vx_khr_nn.h>
+
+#include <assert.h>
+#include <limits.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+
+// Temporary defines for debug: Set to 0 when not used.
+#define DEBUG_TEST_TENSOR_ENABLE_PRINTF 0
+#define DEBUG_TEST_TENSOR_CONTINUE_AFTER_ERROR 0
+
+// The conformance tests must only check the first 4 dimes, the rest being
+// left to internal validation. However these tests already include support
+// for upto the max reported dim by the context. Enabling this option will
+// check dims > 4 upto 6, if supported by the impl.
+#define DEBUG_TEST_TENSOR_BEYOND_FOUR_DIMS 1
+
+//NOTE: TEST_TENSOR_MAX_DIM_SZ may be overriden in vxConvolutionLayer tests
+#define TEST_TENSOR_NUM_ITERATIONS              1
+#define TEST_TENSOR_MIN_DIM_SZ                  1
+#define TEST_TENSOR_MAX_DIM_SZ                  20
+#define TEST_TENSOR_INVERSE_MASK_PROBABILITY    4
+#define TEST_TENSOR_INVERSE_SHRINK_PROBABILITY  8
+
+
+/****************************************************************************
+ *                                                                          *
+ *                            Common Format Utils                           *
+ *                                                                          *
+ ***************************************************************************/
+
+#define MIN(a, b)   ((a) < (b) ? (a) : (b))
+#define MAX(a, b)   ((a) < (b) ? (b) : (a))
+#define CLAMP(v, lower, upper) MAX((lower), MIN((v), (upper)))
+
+#define Q78_FIXED_POINT_POSITION 8
+#define Q78_SCALE   (1 << Q78_FIXED_POINT_POSITION)
+#define Q78_HALF    (1 << (Q78_FIXED_POINT_POSITION - 1))
+
+enum TestTensorDF
+{
+    TT_Q78,
+    TT_U8,
+    TT_S8,
+};
+
+static CT_INLINE int_fast32_t ownLoadValueAsRawInt(enum TestTensorDF fmt, const void * p)
+{
+    switch(fmt)
+    {
+        case TT_Q78: return *(vx_int16*)p;
+        case TT_U8: return *(vx_uint8*)p;
+        case TT_S8: return *(vx_int8*)p;
+        default: assert(0); return 0;
+    }
+}
+
+static CT_INLINE void ownStoreRawIntValue(enum TestTensorDF fmt, int_fast32_t val, void * p)
+{
+    switch(fmt)
+    {
+        case TT_Q78: *(vx_int16*)p = val; break;
+        case TT_U8: *(vx_uint8*)p = val; break;
+        case TT_S8: *(vx_int8*)p = val; break;
+        default: assert(0);
+    }
+}
+
+// Avoid impl defined behaviour when casting non representable values to signed
+//TODO: is trunc indeed the type of cast the OpenVX spec demands??
+static CT_INLINE int8_t trunc_to_int8(int_fast32_t val)
+{
+    union { int8_t i; uint8_t u; } tmp;
+    tmp.u = val;
+    return tmp.i;
+}
+
+// Avoid impl defined behaviour when casting non representable values to signed
+//TODO: is trunc indeed the type of cast the OpenVX spec demands??
+static CT_INLINE int16_t trunc_to_int16(int_fast32_t val)
+{
+    union { int16_t i; uint16_t u; } tmp;
+    tmp.u = val;
+    return tmp.i;
+}
+
+static CT_INLINE int_fast32_t ownWrapOrSat(enum TestTensorDF fmt, int_fast32_t val, bool wrap)
+{
+    switch(fmt)
+    {
+        case TT_Q78: return wrap? trunc_to_int16(val) : CLAMP(val, INT16_MIN, INT16_MAX);
+        case TT_U8: return wrap? (uint8_t)val : CLAMP(val, 0, UINT8_MAX);
+        case TT_S8: return wrap? trunc_to_int16(val) : CLAMP(val, INT8_MIN, INT8_MAX);
+        default: assert(0); return 0;
+    }
+}
+
+// Finalize the accum (sum of products) by applying rounding, norm and OF
+//
+// Rounding and scaling only apply to Q78, where the product results in 16
+// "fractional" bits, rather than the normal 8.
+static CT_INLINE int_fast32_t ownApplyWrapRoundingToAccum(
+        enum TestTensorDF fmt, int_fast32_t val,
+        bool wrap,  // true for WRAP, else SATURATE
+        bool to_ne) // true for ROUND_TO_NE, else ROUND_TO_ZERO
+{
+    if (fmt == TT_Q78)
+    {
+       if (to_ne)
+       {
+           val += Q78_HALF;
+       }
+
+       val /= Q78_SCALE;
+    }
+
+    return ownWrapOrSat(fmt, val, wrap);
+}
+
+static CT_INLINE float ownUnquantize(enum TestTensorDF fmt, int_fast32_t val)
+{
+    return fmt == TT_Q78 ? ((float)val / Q78_SCALE) : val;
+}
+
+static CT_INLINE int_fast32_t ownQuantize(enum TestTensorDF fmt, float val)
+{
+    if (fmt == TT_Q78) val *= Q78_SCALE;
+
+    return ownWrapOrSat(fmt, val, false);
+}
+
+static CT_INLINE int_fast32_t ownGetMinValue(enum TestTensorDF fmt)
+{
+    switch(fmt)
+    {
+        case TT_Q78: return INT16_MIN;
+        case TT_U8: return 0;
+        case TT_S8: return INT8_MIN;
+        default: assert(0); return 0;
+    }
+}
+
+static CT_INLINE int_fast32_t ownGetMaxValue(enum TestTensorDF fmt)
+{
+    switch(fmt)
+    {
+        case TT_Q78: return INT16_MAX;
+        case TT_U8: return UINT8_MAX;
+        case TT_S8: return INT8_MAX;
+        default: assert(0); return 0;
+    }
+}
+
+static int_fast32_t ownGetSizeofType(enum TestTensorDF fmt)
+{
+    switch(fmt)
+    {
+        case TT_Q78: return sizeof(vx_int16);
+        case TT_U8: return sizeof(vx_uint8);
+        case TT_S8: return sizeof(vx_int8);
+        default: assert(0); return 1;
+    }
+}
+
+static CT_INLINE void ownPrettyPrintVal(
+        enum TestTensorDF fmt,
+        void * v)
+{
+    switch(fmt)
+    {
+        case TT_Q78: printf("Q78{ .val: %f, .raw: %d }", *(vx_int16*)v / 256.f, *(vx_int16*)v); break;
+        case TT_U8: printf("U8{ .val: %d }", *(vx_uint8*)v); break;
+        case TT_S8: printf("S8{ .val: %d }", *(vx_int8*)v); break;
+        default: assert(0);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                            Common Tensor Utils                           *
+ *                                                                          *
+ ***************************************************************************/
+
+// TODO: get rid of this, the test shouldn't have a hardcoded dim num!!!
+// We assume that the OVX context supports no more than MAX_TENSOR_DIMS
+// dimensions. This is used for the explicit for iterator as well array
+// sizes. In practice only min(MAX_TENSOR_DIMS, OVX supported max dims)
+// are used by the test.
+// We should avoid it by looping up-to the item count and % by the dims
+// as well as using dynamic arrays for the views and strides, if this
+// won't suffice...
+#define MAX_TENSOR_DIMS 6
+
+typedef struct {
+    size_t dim_num;
+    const size_t * dims;
+    const size_t * strides;
+} tensor_desc_t;
+
+static CT_INLINE size_t ownGetFlatByteOffset(
+        size_t index,
+        vx_size dim_num,
+        const vx_size * in_dims,
+        const vx_size * in_strides)
+{
+    size_t res = 0;
+
+    for (vx_size d = 0; d < dim_num; ++d)
+    {
+        res += in_strides[d] * (index % in_dims[d]);
+        index /= in_dims[d];
+    }
+
+    return res;
+}
+
+static CT_INLINE size_t ownGetFlatByteOffsetWithBroadcast(
+        size_t index,
+        vx_size dim_num,
+        const vx_size * in_dims,
+        const vx_size * in_strides,
+        const vx_size * out_dims)
+{
+    size_t res = 0;
+
+    for (vx_size d = 0; d < dim_num; ++d)
+    {
+        if (in_dims[d] == out_dims[d])
+            res += in_strides[d] * (index % out_dims[d]);
+
+        index /= out_dims[d];
+    }
+
+    return res;
+}
+
+static size_t ownGetItemCount(vx_size dim_num, const vx_size * dims)
+{
+    if (!dim_num) return 0;
+
+    size_t res = dims[0];
+    for (vx_size i = 1; i < dim_num; ++i)
+        res *= dims[i];
+
+    return res;
+}
+
+static CT_INLINE void ownGetFlatByteStrides(
+        enum TestTensorDF fmt,
+        const size_t * dims,
+        size_t dim_num,
+        /*OUT*/ size_t * strides)
+{
+    const size_t sizeof_type = ownGetSizeofType(fmt);
+
+    for (size_t i = 0; i < dim_num; ++i)
+    {
+        strides[i] = i ? strides[i-1] * dims[i-1] : sizeof_type;
+    }
+}
+
+// Since we calc offsets manually and cast to ptr type, we expect the strides
+// to have the correct alignment
+static void ownAssertStridesModSizeof(enum TestTensorDF fmt, tensor_desc_t td)
+{
+    const size_t sizeof_type = ownGetSizeofType(fmt);
+
+    for (size_t i = 0; i < td.dim_num; ++i)
+    {
+        assert(td.strides[i] % sizeof_type == 0);
+    }
+}
+
+
+/****************************************************************************
+ *                                                                          *
+ *                              Generic Test Code                           *
+ *                                                                          *
+ ***************************************************************************/
+
+#define I64_ABS_DIFF(a, b) ((a) < (b) ? (int64_t)(b) - (a) : (int64_t)(a) - (b))
+
+static void ownUnpackFormat(
+        enum TestTensorDF fmt,
+        /*OUT*/ vx_enum * data_type,
+        /*OUT*/ vx_uint8 * fixed_point_position,
+        /*out*/ vx_size * sizeof_data_type)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            *data_type = VX_TYPE_INT16;
+            *fixed_point_position = Q78_FIXED_POINT_POSITION;
+            *sizeof_data_type = sizeof(vx_int16);
+            break;
+        case TT_U8:
+            *data_type = VX_TYPE_UINT8;
+            *fixed_point_position = 0;
+            *sizeof_data_type = sizeof(vx_uint8);
+            break;
+        case TT_S8:
+            *data_type = VX_TYPE_INT8;
+            *fixed_point_position = 0;
+            *sizeof_data_type = sizeof(vx_int8);
+            break;
+        default:
+            assert(0);
+    }
+}
+
+static void ownFillRandData(
+        enum TestTensorDF fmt,
+        uint64_t * rng,
+        size_t count,
+        /*OUT*/ void * data)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            for(size_t i = 0; i < count; ++i)
+                ((vx_int16*)data)[i] = (vx_int16)CT_RNG_NEXT_INT(*rng, INT16_MIN, INT16_MAX+1);
+            break;
+        case TT_U8:
+            for(size_t i = 0; i < count; ++i)
+                ((vx_uint8*)data)[i] = (vx_uint8)CT_RNG_NEXT_INT(*rng, 0, UINT8_MAX+1);
+            break;
+        case TT_S8:
+            for(size_t i = 0; i < count; ++i)
+                ((vx_int8*)data)[i] = (vx_int8)CT_RNG_NEXT_INT(*rng, INT8_MIN, INT8_MAX+1);
+            break;
+        default:
+            assert(0);
+    }
+}
+
+// Some test for things like MatrixMultiply and Convolution perform a sum of
+// products. The accumulator for these formats is supposed to have 32 bits
+// and the behaviour for overflowing the accumulator is impl. defined.
+// We therefore need to use sufficiently small values to avoid this issue in
+// the tests.
+static void ownFillSmallRandData(
+        enum TestTensorDF fmt,
+        uint64_t * rng,
+        size_t count,
+        int estimated_item_summation_count,
+        /*OUT*/ void * data)
+{
+    switch(fmt)
+    {
+        case TT_Q78:
+            {
+                int16_t lower = INT16_MIN / sqrt(estimated_item_summation_count);
+                int16_t upper = INT16_MAX / sqrt(estimated_item_summation_count);
+
+                for(size_t i = 0; i < count; ++i)
+                    ((vx_int16*)data)[i] = (vx_int16)CT_RNG_NEXT_INT(*rng, lower, upper + 1);
+            }
+            break;
+        case TT_U8:
+            {
+                uint8_t upper = UINT8_MAX / sqrt(estimated_item_summation_count);
+
+                for(size_t i = 0; i < count; ++i)
+                    ((vx_uint8*)data)[i] = (vx_uint8)CT_RNG_NEXT_INT(*rng, 0, upper + 1);
+            }
+            break;
+        case TT_S8:
+            {
+                int8_t lower = INT8_MIN / sqrt(estimated_item_summation_count);
+                int8_t upper = INT8_MAX / sqrt(estimated_item_summation_count);
+
+                for(size_t i = 0; i < count; ++i)
+                    ((vx_int8*)data)[i] = (vx_int8)CT_RNG_NEXT_INT(*rng, lower, upper + 1);
+            }
+            break;
+        default:
+            assert(0);
+    }
+}
+
+// Expecting identical item count, check if the contents are identical
+// upto layout.
+static bool ownExpectIdenticalData(
+        enum TestTensorDF fmt,
+        const void * data0, const vx_size * dims0, vx_size dim_num0, const vx_size * strides0,
+        const void * data1, const vx_size * dims1, vx_size dim_num1, const vx_size * strides1,
+        const int max_raw_int_diff,
+        /*OUT*/ size_t * first_diff_index,          // only updated if res is false
+        /*OUT*/ size_t * first_diff_byte_offset0,   // only updated if res is false
+        /*OUT*/ size_t * first_diff_byte_offset1)   // only updated if res is false
+{
+    size_t count = ownGetItemCount(dim_num0, dims0);
+    assert(count == ownGetItemCount(dim_num1, dims1));
+
+    for (size_t i = 0; i < count; ++i)
+    {
+        const size_t byte_offset0 = ownGetFlatByteOffset(i, dim_num0, dims0, strides0);
+        const size_t byte_offset1 = ownGetFlatByteOffset(i, dim_num1, dims1, strides1);
+
+        int32_t a, b;
+
+        switch(fmt)
+        {
+            case TT_Q78:
+                a = *(vx_int16*)((char*)data0 + byte_offset0);
+                b = *(vx_int16*)((char*)data1 + byte_offset1);
+                break;
+            case TT_U8:
+                a = *(vx_uint8*)((char*)data0 + byte_offset0);
+                b = *(vx_uint8*)((char*)data1 + byte_offset1);
+                break;
+            case TT_S8:
+                a = *(vx_int8*)((char*)data0 + byte_offset0);
+                b = *(vx_int8*)((char*)data1 + byte_offset1);
+                break;
+            default:
+                assert(0);
+        }
+
+        if (I64_ABS_DIFF(a, b) > max_raw_int_diff) {
+            if (first_diff_index) *first_diff_index = i;
+            if (first_diff_byte_offset0) *first_diff_byte_offset0 = byte_offset0;
+            if (first_diff_byte_offset1) *first_diff_byte_offset1 = byte_offset1;
+            
+            if (max_raw_int_diff)
+            {
+                EXPECT_EQ_INT(I64_ABS_DIFF(a, b) > max_raw_int_diff, 0);
+            }
+            else
+            {
+                EXPECT_EQ_INT(a, b);
+            }
+
+            return false;
+        }
+    }
+
+    return true;
+}
+
diff --git a/test_conformance/test_threshold.c b/test_conformance/test_threshold.c
new file mode 100644
index 0000000..778c815
--- /dev/null
+++ b/test_conformance/test_threshold.c
@@ -0,0 +1,276 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+
+#include <VX/vx.h>
+#include <VX/vxu.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+static void reference_threshold(CT_Image src, CT_Image dst, vx_enum ttype, int ta, int tb, int true_val, int false_val)
+{
+    uint32_t x, y, width, height, srcstride, dststride;
+
+    ASSERT(src && dst);
+    ASSERT((src->format == VX_DF_IMAGE_U8 || src->format == VX_DF_IMAGE_S16) && dst->format == VX_DF_IMAGE_U8);
+    ASSERT(src->width > 0 && src->height > 0 &&
+           src->width == dst->width && src->height == dst->height);
+    width = src->width;
+    height = src->height;
+    srcstride = ct_stride_bytes(src);
+    dststride = ct_stride_bytes(dst);
+
+    if(src->format == VX_DF_IMAGE_U8)
+    {
+        for( y = 0; y < height; y++ )
+        {
+            const uint8_t* srcptr = src->data.y + y*srcstride;
+            uint8_t* dstptr = dst->data.y + y*dststride;
+            if( ttype == VX_THRESHOLD_TYPE_BINARY )
+            {
+                for( x = 0; x < width; x++ )
+                    dstptr[x] = srcptr[x] > ta ? true_val : false_val;
+            }
+            else
+            {
+                for( x = 0; x < width; x++ )
+                    dstptr[x] = srcptr[x] < ta || srcptr[x] > tb ? false_val : true_val;
+            }
+        }
+    }
+    else
+    {
+        for( y = 0; y < height; y++ )
+        {
+            int16_t dst_value = 0;
+            const int16_t* srcptr = (const int16_t*)(src->data.y + y*srcstride);
+            uint8_t* dstptr = dst->data.y + y*dststride;
+            if( ttype == VX_THRESHOLD_TYPE_BINARY )
+            {
+                for( x = 0; x < width; x++ )
+                {
+                    dst_value = srcptr[x] > ta ? true_val : false_val;
+
+                    dst_value = (dst_value < 0 ? 0 : dst_value);
+                    dst_value = (dst_value > UINT8_MAX ? UINT8_MAX : dst_value);
+                    dstptr[x] = (uint8_t)dst_value;
+                }
+            }
+            else
+            {
+                for( x = 0; x < width; x++ )
+                {
+                    dst_value = srcptr[x] < ta || srcptr[x] > tb ? false_val : true_val;
+
+                    dst_value = (dst_value < 0 ? 0 : dst_value);
+                    dst_value = (dst_value > UINT8_MAX ? UINT8_MAX : dst_value);
+                    dstptr[x] = (uint8_t)dst_value;
+                }
+            }
+        }
+    }
+}
+
+
+TESTCASE(Threshold, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct {
+    const char* name;
+    int mode;
+    vx_enum ttype;
+    int format;
+} format_arg;
+
+#define THRESHOLD_CASE(imm, ttype, format) { #imm "/" #ttype "/" #format "/U8", CT_##imm##_MODE, VX_THRESHOLD_TYPE_##ttype, VX_DF_IMAGE_##format}
+
+#define CT_THRESHOLD_TRUE_VALUE  255
+#define CT_THRESHOLD_FALSE_VALUE 0
+
+TEST_WITH_ARG(Threshold, testOnRandom, format_arg,
+              THRESHOLD_CASE(Immediate, BINARY, U8),
+              THRESHOLD_CASE(Immediate, BINARY, S16),
+              THRESHOLD_CASE(Immediate, RANGE, U8),
+              THRESHOLD_CASE(Immediate, RANGE, S16),
+              THRESHOLD_CASE(Graph, BINARY, U8),
+              THRESHOLD_CASE(Graph, BINARY, S16),
+              THRESHOLD_CASE(Graph, RANGE, U8),
+              THRESHOLD_CASE(Graph, RANGE, S16),
+              )
+{
+    int format = arg_->format;
+    int ttype = arg_->ttype;
+    int mode = arg_->mode;
+    vx_image src, dst;
+    vx_threshold vxt;
+    CT_Image src0, dst0, dst1;
+    vx_node node = 0;
+    vx_graph graph = 0;
+    vx_context context = context_->vx_context_;
+    int iter, niters = 100;
+    uint64_t rng;
+    int a = 0, b = 256;
+    int true_val = CT_THRESHOLD_TRUE_VALUE;
+    int false_val = CT_THRESHOLD_FALSE_VALUE;
+
+    rng = CT()->seed_;
+
+    for( iter = 0; iter < niters; iter++ )
+    {
+        int width, height;
+
+        uint8_t _ta = CT_RNG_NEXT_INT(rng, 0, 256), _tb = CT_RNG_NEXT_INT(rng, 0, 256);
+        vx_int32 ta = CT_MIN(_ta, _tb), tb = CT_MAX(_ta, _tb);
+
+        if( ct_check_any_size() )
+        {
+            width = ct_roundf(ct_log_rng(&rng, 0, 10));
+            height = ct_roundf(ct_log_rng(&rng, 0, 10));
+            width = CT_MAX(width, 1);
+            height = CT_MAX(height, 1);
+        }
+        else
+        {
+            width = 640;
+            height = 480;
+        }
+
+        ct_update_progress(iter, niters);
+
+        ASSERT_NO_FAILURE(src0 = ct_allocate_ct_image_random(width, height, format, &rng, a, b));
+        if( iter % 20 == 0 )
+        {
+            uint8_t val = (uint8_t)CT_RNG_NEXT_INT(rng, a, b);
+            ct_memset(src0->data.y, val, ct_stride_bytes(src0)*src0->height);
+        }
+        ASSERT_NO_FAILURE(dst0 = ct_allocate_image(width, height, VX_DF_IMAGE_U8));
+        ASSERT_NO_FAILURE(reference_threshold(src0, dst0, ttype, ta, tb, true_val, false_val));
+
+        src = ct_image_to_vx_image(src0, context);
+        dst = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
+        ASSERT_VX_OBJECT(dst, VX_TYPE_IMAGE);
+        vxt = vxCreateThresholdForImage(context,  ttype, format, VX_DF_IMAGE_U8);
+        if( ttype == VX_THRESHOLD_TYPE_BINARY )
+        {
+              vx_pixel_value_t pa;
+              pa.S32 = ta;
+              ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdValue(vxt, &pa, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+        else
+        {
+            vx_pixel_value_t pa, pb;
+            pa.S32 = ta;
+            pb.S32 = tb;
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdRange(vxt, &pa, &pb, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        }
+
+        vx_pixel_value_t ptrue, pfalse;
+        ptrue.S32 = true_val;
+        pfalse.S32 = false_val;
+        ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxCopyThresholdOutput(vxt, &ptrue, &pfalse, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+        if( mode == CT_Immediate_MODE )
+        {
+            ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxuThreshold(context, src, vxt, dst));
+        }
+        else
+        {
+            graph = vxCreateGraph(context);
+            ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+            node = vxThresholdNode(graph, src, vxt, dst);
+            ASSERT_VX_OBJECT(node, VX_TYPE_NODE);
+            if (vxIsGraphVerified(graph))
+            {
+                /* do not expect graph to be in verified state before vxGraphVerify call */
+                CT_FAIL("check for vxIsGraphVerified() failed\n");
+            }
+            VX_CALL(vxVerifyGraph(graph));
+            if(!vxIsGraphVerified(graph))
+            {
+                /* expect graph to be in verified state before vxGraphVerify call */
+                /* NB, according to the spec, vxProcessGraph may also do graph verification */
+                CT_FAIL("check for vxIsGraphVerified() failed\n");
+            }
+            VX_CALL(vxProcessGraph(graph));
+        }
+
+        dst1 = ct_image_from_vx_image(dst);
+
+        ASSERT_CTIMAGE_NEAR(dst0, dst1, 0);
+        VX_CALL(vxReleaseImage(&src));
+        VX_CALL(vxReleaseImage(&dst));
+        VX_CALL(vxReleaseThreshold(&vxt));
+        if(node)
+            VX_CALL(vxReleaseNode(&node));
+        if(graph)
+            VX_CALL(vxReleaseGraph(&graph));
+        ASSERT(node == 0 && graph == 0);
+        CT_CollectGarbage(CT_GC_IMAGE);
+    }
+}
+
+
+typedef struct {
+    const char* name;
+    vx_enum src_type;
+    vx_enum dst_type;
+} threshold_create_arg;
+
+#define THRESHOLD_CREATE(src_type, dst_type) {#src_type "/" #dst_type, VX_DF_IMAGE_##src_type,  VX_DF_IMAGE_##dst_type}
+
+TEST_WITH_ARG(Threshold, testThresholdCreation, threshold_create_arg,
+              THRESHOLD_CREATE(U8, U8),
+              THRESHOLD_CREATE(S16, U8),
+              )
+{
+    vx_context context = context_->vx_context_;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+
+    vx_threshold threshold;
+    ASSERT_VX_OBJECT(threshold = vxCreateThresholdForImage(context, thresh_type, arg_->src_type, arg_->dst_type), VX_TYPE_THRESHOLD);
+
+    vx_df_image input_type, output_type;
+    vxQueryThreshold(threshold,  VX_THRESHOLD_INPUT_FORMAT, &input_type, sizeof(vx_df_image));
+    vxQueryThreshold(threshold,  VX_THRESHOLD_OUTPUT_FORMAT, &output_type, sizeof(vx_df_image));
+    ASSERT_EQ_INT(arg_->src_type, input_type);
+    ASSERT_EQ_INT(arg_->dst_type, output_type);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseThreshold(&threshold));
+}
+
+TEST_WITH_ARG(Threshold, testVirtualThresholdCreation, threshold_create_arg,
+              THRESHOLD_CREATE(U8, U8),
+              THRESHOLD_CREATE(S16, U8),
+              )
+{
+    vx_context context = context_->vx_context_;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_graph graph = vxCreateGraph(context);
+
+    vx_threshold threshold;
+    ASSERT_VX_OBJECT(threshold = vxCreateVirtualThresholdForImage(graph, thresh_type, arg_->src_type, arg_->dst_type), VX_TYPE_THRESHOLD);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseThreshold(&threshold));
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseGraph(&graph));
+}
+
+TESTCASE_TESTS(Threshold,
+               testThresholdCreation,
+               testVirtualThresholdCreation,
+               testOnRandom
+               )
diff --git a/test_conformance/test_usernode.c b/test_conformance/test_usernode.c
new file mode 100644
index 0000000..20c8897
--- /dev/null
+++ b/test_conformance/test_usernode.c
@@ -0,0 +1,1064 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_engine/test.h"
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#define VX_KERNEL_CONFORMANCE_TEST_OWN_BAD (VX_KERNEL_BASE(VX_ID_DEFAULT, 0) + 0)
+#define VX_KERNEL_CONFORMANCE_TEST_OWN_BAD_NAME "org.khronos.openvx.test.own_bad"
+
+#define VX_KERNEL_CONFORMANCE_TEST_OWN (VX_KERNEL_BASE(VX_ID_DEFAULT, 0) + 1)
+#define VX_KERNEL_CONFORMANCE_TEST_OWN_NAME "org.khronos.openvx.test.own"
+
+#define VX_KERNEL_CONFORMANCE_TEST_OWN_USER (VX_KERNEL_BASE(VX_ID_DEFAULT, 0) + 2)
+#define VX_KERNEL_CONFORMANCE_TEST_OWN_USER_NAME "org.khronos.openvx.test.own_user"
+
+TESTCASE(UserNode, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef enum _own_params_e
+{
+    OWN_PARAM_INPUT = 0,
+    OWN_PARAM_OUTPUT,
+} own_params_e;
+
+static enum vx_type_e type = VX_TYPE_INVALID;
+static enum vx_type_e objarray_itemtype = VX_TYPE_INVALID;
+
+static vx_size local_size = 0;
+static vx_bool is_kernel_alloc = vx_false_e;
+static vx_size local_size_auto_alloc = 0;
+static vx_size local_size_kernel_alloc = 0;
+
+static vx_status set_local_size_status_init = VX_SUCCESS;
+static vx_status set_local_ptr_status_init = VX_SUCCESS;
+
+static vx_status query_local_size_status_deinit = VX_SUCCESS;
+static vx_status query_local_ptr_status_deinit = VX_SUCCESS;
+static vx_status set_local_size_status_deinit = VX_SUCCESS;
+static vx_status set_local_ptr_status_deinit = VX_SUCCESS;
+
+
+static vx_status VX_CALLBACK own_set_image_valid_rect(
+    vx_node node,
+    vx_uint32 index,
+    const vx_rectangle_t* const input_valid[],
+    vx_rectangle_t* const output_valid[])
+{
+    vx_status status = VX_FAILURE;
+
+    if (index == OWN_PARAM_OUTPUT)
+    {
+        output_valid[0]->start_x = input_valid[0]->start_x + 2;
+        output_valid[0]->start_y = input_valid[0]->start_y + 2;
+        output_valid[0]->end_x   = input_valid[0]->end_x - 2;
+        output_valid[0]->end_y   = input_valid[0]->end_y - 2;
+
+        status = VX_SUCCESS;
+    }
+
+    return status;
+}
+
+static vx_bool is_validator_called = vx_false_e;
+static vx_status VX_CALLBACK own_ValidatorMetaFromRef(vx_node node, const vx_reference parameters[], vx_uint32 num, vx_meta_format metas[])
+{
+    is_validator_called = vx_true_e;
+    ASSERT_VX_OBJECT_(return VX_FAILURE, node, VX_TYPE_NODE);
+
+    vx_reference input = parameters[OWN_PARAM_INPUT];
+    ASSERT_VX_OBJECT_(return VX_FAILURE, input, type);
+    vx_reference output = parameters[OWN_PARAM_OUTPUT];
+    ASSERT_VX_OBJECT_(return VX_FAILURE, output, type);
+
+    vx_meta_format meta = metas[OWN_PARAM_OUTPUT];
+
+    vx_enum in_ref_type = VX_TYPE_INVALID;
+    VX_CALL_(return VX_ERROR_INVALID_PARAMETERS, vxQueryReference(input, VX_REFERENCE_TYPE, &in_ref_type, sizeof(vx_enum)));
+    vx_enum out_ref_type = VX_TYPE_INVALID;
+    VX_CALL_(return VX_ERROR_INVALID_PARAMETERS, vxQueryReference(output, VX_REFERENCE_TYPE, &out_ref_type, sizeof(vx_enum)));
+
+    if (in_ref_type == out_ref_type)
+    {
+        vx_enum format = VX_DF_IMAGE_U8;
+        vx_uint32 src_width = 128, src_height = 128;
+        vx_uint32 dst_width = 256, dst_height = 256;
+        vx_enum item_type = (type == VX_TYPE_OBJECT_ARRAY) ? objarray_itemtype : VX_TYPE_UINT8;
+        vx_size capacity = 20;
+        vx_size bins = 36;
+        vx_int32 offset = 0;
+        vx_uint32 range = 360;
+        vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+        vx_size num_items = 100;
+        vx_size m = 5, n = 5;
+
+        vx_enum actual_format = VX_TYPE_INVALID;
+        vx_uint32 actual_src_width = 128, actual_src_height = 128;
+        vx_uint32 actual_dst_width = 256, actual_dst_height = 256;
+        vx_enum actual_item_type = VX_TYPE_INVALID;
+        vx_size actual_capacity = 0;
+        vx_size actual_levels = 0;
+        vx_float32 actual_scale = 0;
+        vx_size actual_bins = 0;
+        vx_int32 actual_offset = -1;
+        vx_uint32 actual_range = 0;
+        vx_enum actual_thresh_type = VX_TYPE_INVALID;
+        vx_size actual_num_items = 0;
+        vx_size actual_m = 0, actual_n = 0;
+        switch (type)
+        {
+        case VX_TYPE_IMAGE:
+            VX_CALL_(return VX_FAILURE, vxQueryImage((vx_image)input, VX_IMAGE_FORMAT, &actual_format, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxQueryImage((vx_image)input, VX_IMAGE_WIDTH, &actual_src_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxQueryImage((vx_image)input, VX_IMAGE_HEIGHT, &actual_src_height, sizeof(vx_uint32)));
+
+            if (format == actual_format && src_width == actual_src_width && src_height == actual_src_height)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+                vx_kernel_image_valid_rectangle_f callback = &own_set_image_valid_rect;
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_VALID_RECT_CALLBACK, &callback, sizeof(callback)));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_ARRAY:
+            VX_CALL_(return VX_FAILURE, vxQueryArray((vx_array)input, VX_ARRAY_ITEMTYPE, &actual_item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxQueryArray((vx_array)input, VX_ARRAY_CAPACITY, &actual_capacity, sizeof(vx_size)));
+
+            if (actual_item_type == item_type && actual_capacity == capacity)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_PYRAMID:
+            VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_FORMAT, &actual_format, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_WIDTH, &actual_src_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_HEIGHT, &actual_src_height, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_LEVELS, &actual_levels, sizeof(vx_size)));
+            VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_SCALE, &actual_scale, sizeof(vx_float32)));
+
+            if (actual_format == format &&
+                actual_src_width == src_width && actual_src_height == src_height &&
+                actual_dst_width == dst_width && actual_dst_width == dst_width)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_SCALAR:
+            VX_CALL_(return VX_FAILURE, vxQueryScalar((vx_scalar)input, VX_SCALAR_TYPE, &actual_item_type, sizeof(vx_enum)));
+
+            if (actual_item_type == item_type)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            break;
+        case VX_TYPE_MATRIX:
+            VX_CALL_(return VX_FAILURE, vxQueryMatrix((vx_matrix)input, VX_MATRIX_TYPE, &actual_item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxQueryMatrix((vx_matrix)input, VX_MATRIX_ROWS, &actual_m, sizeof(vx_size)));
+            VX_CALL_(return VX_FAILURE, vxQueryMatrix((vx_matrix)input, VX_MATRIX_COLUMNS, &actual_n, sizeof(vx_size)));
+
+            if (actual_item_type == item_type && actual_m == m && actual_n == n)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_DISTRIBUTION:
+            VX_CALL_(return VX_FAILURE, vxQueryDistribution((vx_distribution)input, VX_DISTRIBUTION_BINS, &actual_bins, sizeof(vx_size)));
+            VX_CALL_(return VX_FAILURE, vxQueryDistribution((vx_distribution)input, VX_DISTRIBUTION_OFFSET, &actual_offset, sizeof(vx_int32)));
+            VX_CALL_(return VX_FAILURE, vxQueryDistribution((vx_distribution)input, VX_DISTRIBUTION_RANGE, &actual_range, sizeof(vx_uint32)));
+
+            if (actual_bins == bins && actual_offset == offset && actual_range == range)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_REMAP:
+            VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_SOURCE_WIDTH, &actual_src_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_SOURCE_HEIGHT, &actual_src_height, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_DESTINATION_WIDTH, &actual_dst_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_DESTINATION_HEIGHT, &actual_dst_height, sizeof(vx_uint32)));
+
+            if (actual_src_width == src_width && actual_src_height == src_height &&
+                actual_dst_width == dst_width && actual_dst_height == dst_height)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_LUT:
+            VX_CALL_(return VX_FAILURE, vxQueryLUT((vx_lut)input, VX_LUT_TYPE, &actual_item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxQueryLUT((vx_lut)input, VX_LUT_COUNT, &actual_num_items, sizeof(vx_size)));
+            if (actual_item_type == item_type && actual_num_items == num_items)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_THRESHOLD:
+            VX_CALL_(return VX_FAILURE, vxQueryThreshold((vx_threshold)input, VX_THRESHOLD_TYPE, &actual_thresh_type, sizeof(vx_enum)));
+            if (actual_thresh_type == thresh_type)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        case VX_TYPE_OBJECT_ARRAY:
+            VX_CALL_(return VX_FAILURE, vxQueryObjectArray((vx_object_array)input, VX_OBJECT_ARRAY_ITEMTYPE, &actual_item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxQueryObjectArray((vx_object_array)input, VX_OBJECT_ARRAY_NUMITEMS, &actual_capacity, sizeof(vx_size)));
+
+            if (actual_item_type == item_type && actual_capacity == capacity)
+            {
+                VX_CALL_(return VX_FAILURE, vxSetMetaFormatFromReference(meta, input));
+            }
+            else
+            {
+                return VX_ERROR_INVALID_PARAMETERS;
+            }
+            break;
+        default:
+            return VX_ERROR_INVALID_PARAMETERS;
+            break;
+        }
+
+    }
+
+    return VX_SUCCESS;
+}
+
+static vx_status VX_CALLBACK own_ValidatorMetaFromAttr(vx_node node, const vx_reference parameters[], vx_uint32 num, vx_meta_format metas[])
+{
+    is_validator_called = vx_true_e;
+    ASSERT_VX_OBJECT_(return VX_FAILURE, node, VX_TYPE_NODE);
+
+    vx_reference input = parameters[OWN_PARAM_INPUT];
+
+    vx_meta_format meta = metas[OWN_PARAM_OUTPUT];
+
+    vx_enum format = VX_DF_IMAGE_U8;
+    vx_uint32 src_width = 128, src_height = 128;
+    vx_uint32 dst_width = 256, dst_height = 256;
+    vx_enum item_type = (type == VX_TYPE_OBJECT_ARRAY) ? objarray_itemtype : VX_TYPE_UINT8;
+    vx_size capacity = 20;
+    vx_size levels = 8;
+    vx_float32 scale = 0.5f;
+    vx_size bins = 36;
+    vx_int32 offset = 0;
+    vx_uint32 range = 360;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_size num_items = 100;
+    vx_size m = 5, n = 5;
+
+    vx_enum actual_format = VX_TYPE_INVALID;
+    vx_uint32 actual_src_width = 128, actual_src_height = 128;
+    vx_uint32 actual_dst_width = 256, actual_dst_height = 256;
+    vx_enum actual_item_type = VX_TYPE_INVALID;
+    vx_size actual_capacity = 0;
+    vx_size actual_levels = 0;
+    vx_float32 actual_scale = 0;
+    vx_size actual_bins = 0;
+    vx_int32 actual_offset = -1;
+    vx_uint32 actual_range = 0;
+    vx_enum actual_thresh_type = VX_TYPE_INVALID;
+    vx_size actual_num_items = 0;
+    vx_size actual_m = 0, actual_n = 0;
+    switch (type)
+    {
+    case VX_TYPE_IMAGE:
+        VX_CALL_(return VX_FAILURE, vxQueryImage((vx_image)input, VX_IMAGE_FORMAT, &actual_format, sizeof(vx_enum)));
+        VX_CALL_(return VX_FAILURE, vxQueryImage((vx_image)input, VX_IMAGE_WIDTH, &actual_src_width, sizeof(vx_uint32)));
+        VX_CALL_(return VX_FAILURE, vxQueryImage((vx_image)input, VX_IMAGE_HEIGHT, &actual_src_height, sizeof(vx_uint32)));
+
+        if (format == actual_format && src_width == actual_src_width && src_height == actual_src_height)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_IMAGE_FORMAT, &format, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_IMAGE_WIDTH, &src_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_IMAGE_HEIGHT, &src_height, sizeof(vx_uint32)));
+            vx_kernel_image_valid_rectangle_f callback = &own_set_image_valid_rect;
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_VALID_RECT_CALLBACK, &callback, sizeof(callback)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_ARRAY:
+        VX_CALL_(return VX_FAILURE, vxQueryArray((vx_array)input, VX_ARRAY_ITEMTYPE, &actual_item_type, sizeof(vx_enum)));
+        VX_CALL_(return VX_FAILURE, vxQueryArray((vx_array)input, VX_ARRAY_CAPACITY, &actual_capacity, sizeof(vx_size)));
+
+        if (actual_item_type == item_type && actual_capacity == capacity)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_ARRAY_ITEMTYPE, &item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_ARRAY_CAPACITY, &capacity, sizeof(vx_size)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_PYRAMID:
+        VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_FORMAT, &actual_format, sizeof(vx_enum)));
+        VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_WIDTH, &actual_src_width, sizeof(vx_uint32)));
+        VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_HEIGHT, &actual_src_height, sizeof(vx_uint32)));
+        VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_LEVELS, &actual_levels, sizeof(vx_size)));
+        VX_CALL_(return VX_FAILURE, vxQueryPyramid((vx_pyramid)input, VX_PYRAMID_SCALE, &actual_scale, sizeof(vx_float32)));
+
+        if (actual_format == format &&
+            actual_src_width == src_width && actual_src_height == src_height &&
+            actual_dst_width == dst_width && actual_dst_width == dst_width)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_PYRAMID_FORMAT, &format, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_PYRAMID_WIDTH, &src_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_PYRAMID_HEIGHT, &src_height, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_PYRAMID_LEVELS, &levels, sizeof(vx_size)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_PYRAMID_SCALE, &scale, sizeof(vx_float32)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_SCALAR:
+        VX_CALL_(return VX_FAILURE, vxQueryScalar((vx_scalar)input, VX_SCALAR_TYPE, &actual_item_type, sizeof(vx_enum)));
+
+        if (actual_item_type == item_type)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_SCALAR_TYPE, &item_type, sizeof(vx_enum)));
+        }
+        break;
+    case VX_TYPE_MATRIX:
+        VX_CALL_(return VX_FAILURE, vxQueryMatrix((vx_matrix)input, VX_MATRIX_TYPE, &actual_item_type, sizeof(vx_enum)));
+        VX_CALL_(return VX_FAILURE, vxQueryMatrix((vx_matrix)input, VX_MATRIX_ROWS, &actual_m, sizeof(vx_size)));
+        VX_CALL_(return VX_FAILURE, vxQueryMatrix((vx_matrix)input, VX_MATRIX_COLUMNS, &actual_n, sizeof(vx_size)));
+
+        if (actual_item_type == item_type && actual_m == m && actual_n == n)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_MATRIX_TYPE, &item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_MATRIX_ROWS, &m, sizeof(vx_size)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_MATRIX_COLUMNS, &n, sizeof(vx_size)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_DISTRIBUTION:
+        VX_CALL_(return VX_FAILURE, vxQueryDistribution((vx_distribution)input, VX_DISTRIBUTION_BINS, &actual_bins, sizeof(vx_size)));
+        VX_CALL_(return VX_FAILURE, vxQueryDistribution((vx_distribution)input, VX_DISTRIBUTION_OFFSET, &actual_offset, sizeof(vx_int32)));
+        VX_CALL_(return VX_FAILURE, vxQueryDistribution((vx_distribution)input, VX_DISTRIBUTION_RANGE, &actual_range, sizeof(vx_uint32)));
+
+        if (actual_bins == bins && actual_offset == offset && actual_range == range)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_DISTRIBUTION_BINS, &bins, sizeof(vx_size)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_DISTRIBUTION_OFFSET, &offset, sizeof(vx_int32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_DISTRIBUTION_RANGE, &range, sizeof(vx_uint32)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_REMAP:
+        VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_SOURCE_WIDTH, &actual_src_width, sizeof(vx_uint32)));
+        VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_SOURCE_HEIGHT, &actual_src_height, sizeof(vx_uint32)));
+        VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_DESTINATION_WIDTH, &actual_dst_width, sizeof(vx_uint32)));
+        VX_CALL_(return VX_FAILURE, vxQueryRemap((vx_remap)input, VX_REMAP_DESTINATION_HEIGHT, &actual_dst_height, sizeof(vx_uint32)));
+
+        if (actual_src_width == src_width && actual_src_height == src_height &&
+            actual_dst_width == dst_width && actual_dst_height == dst_height)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_REMAP_SOURCE_WIDTH, &src_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_REMAP_SOURCE_HEIGHT, &src_height, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_REMAP_DESTINATION_WIDTH, &dst_width, sizeof(vx_uint32)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_REMAP_DESTINATION_HEIGHT, &dst_height, sizeof(vx_uint32)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_LUT:
+        VX_CALL_(return VX_FAILURE, vxQueryLUT((vx_lut)input, VX_LUT_TYPE, &actual_item_type, sizeof(vx_enum)));
+        VX_CALL_(return VX_FAILURE, vxQueryLUT((vx_lut)input, VX_LUT_COUNT, &actual_num_items, sizeof(vx_size)));
+        if (actual_item_type == item_type && actual_num_items == num_items)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_LUT_TYPE, &item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_LUT_COUNT, &num_items, sizeof(vx_size)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_THRESHOLD:
+        VX_CALL_(return VX_FAILURE, vxQueryThreshold((vx_threshold)input, VX_THRESHOLD_TYPE, &actual_thresh_type, sizeof(vx_enum)));
+        if (actual_thresh_type == thresh_type)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_THRESHOLD_TYPE, &thresh_type, sizeof(vx_enum)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    case VX_TYPE_OBJECT_ARRAY:
+        VX_CALL_(return VX_FAILURE, vxQueryObjectArray((vx_object_array)input, VX_OBJECT_ARRAY_ITEMTYPE, &actual_item_type, sizeof(vx_enum)));
+        VX_CALL_(return VX_FAILURE, vxQueryObjectArray((vx_object_array)input, VX_OBJECT_ARRAY_NUMITEMS, &actual_capacity, sizeof(vx_size)));
+
+        if (actual_item_type == item_type && actual_capacity == capacity)
+        {
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_OBJECT_ARRAY_ITEMTYPE, &item_type, sizeof(vx_enum)));
+            VX_CALL_(return VX_FAILURE, vxSetMetaFormatAttribute(meta, VX_OBJECT_ARRAY_NUMITEMS, &capacity, sizeof(vx_size)));
+        }
+        else
+        {
+            return VX_ERROR_INVALID_PARAMETERS;
+        }
+        break;
+    default:
+        return VX_ERROR_INVALID_PARAMETERS;
+        break;
+    }
+
+    return VX_SUCCESS;
+}
+
+static vx_bool is_kernel_called = vx_false_e;
+static vx_status VX_CALLBACK own_Kernel(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    is_kernel_called = vx_true_e;
+    ASSERT_VX_OBJECT_(return VX_FAILURE, node, VX_TYPE_NODE);
+    EXPECT(parameters != NULL);
+    EXPECT(num == 2);
+    if (parameters != NULL && num == 2)
+    {
+        EXPECT_VX_OBJECT(parameters[0], type);
+        EXPECT_VX_OBJECT(parameters[1], type);
+    }
+
+    return VX_SUCCESS;
+}
+
+static vx_bool is_initialize_called = vx_false_e;
+static vx_status VX_CALLBACK own_Initialize(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    vx_size size = 0;
+    void* ptr = NULL;
+    is_initialize_called = vx_true_e;
+    ASSERT_VX_OBJECT_(return VX_FAILURE, node, VX_TYPE_NODE);
+    EXPECT(parameters != NULL);
+    EXPECT(num == 2);
+    if (parameters != NULL && num == 2)
+    {
+        EXPECT_VX_OBJECT(parameters[0], type);
+        EXPECT_VX_OBJECT(parameters[1], type);
+    }
+    if (local_size_kernel_alloc > 0)
+    {
+        size = local_size_kernel_alloc;
+        ptr = ct_calloc(1, local_size_kernel_alloc);
+    }
+    set_local_size_status_init = vxSetNodeAttribute(node, VX_NODE_LOCAL_DATA_SIZE, &size, sizeof(size));
+    set_local_ptr_status_init = vxSetNodeAttribute(node, VX_NODE_LOCAL_DATA_PTR, &ptr, sizeof(ptr));
+    return VX_SUCCESS;
+}
+
+static vx_bool is_deinitialize_called = vx_false_e;
+static vx_status VX_CALLBACK own_Deinitialize(vx_node node, const vx_reference *parameters, vx_uint32 num)
+{
+    vx_size size = 0;
+    void* ptr = NULL;
+    is_deinitialize_called = vx_true_e;
+    EXPECT(node != 0);
+    EXPECT(parameters != NULL);
+    EXPECT(num == 2);
+    if (parameters != NULL && num == 2)
+    {
+        EXPECT_VX_OBJECT(parameters[0], type);
+        EXPECT_VX_OBJECT(parameters[1], type);
+    }
+    query_local_size_status_deinit = vxQueryNode(node, VX_NODE_LOCAL_DATA_SIZE, &size, sizeof(size));
+    query_local_ptr_status_deinit = vxQueryNode(node, VX_NODE_LOCAL_DATA_PTR, &ptr, sizeof(ptr));
+    if (local_size_kernel_alloc > 0)
+    {
+        size = 0;
+        if (ptr != NULL)
+        {
+            ct_free_mem(ptr);
+            ptr = NULL;
+        }
+    }
+    set_local_size_status_deinit = vxSetNodeAttribute(node, VX_NODE_LOCAL_DATA_SIZE, &size, sizeof(size));
+    set_local_ptr_status_deinit = vxSetNodeAttribute(node, VX_NODE_LOCAL_DATA_PTR, &ptr, sizeof(ptr));
+    return VX_SUCCESS;
+}
+
+static void own_register_kernel(vx_context context, vx_bool is_meta_from_ref)
+{
+    vx_kernel kernel = 0;
+    vx_size size = local_size_auto_alloc;
+
+    if (is_meta_from_ref)
+    {
+        ASSERT_VX_OBJECT(kernel = vxAddUserKernel(
+            context,
+            VX_KERNEL_CONFORMANCE_TEST_OWN_USER_NAME,
+            VX_KERNEL_CONFORMANCE_TEST_OWN_USER,
+            own_Kernel,
+            2,
+            own_ValidatorMetaFromRef,
+            own_Initialize,
+            own_Deinitialize), VX_TYPE_KERNEL);
+    }
+    else
+    {
+        ASSERT_VX_OBJECT(kernel = vxAddUserKernel(
+            context,
+            VX_KERNEL_CONFORMANCE_TEST_OWN_USER_NAME,
+            VX_KERNEL_CONFORMANCE_TEST_OWN_USER,
+            own_Kernel,
+            2,
+            own_ValidatorMetaFromAttr,
+            own_Initialize,
+            own_Deinitialize), VX_TYPE_KERNEL);
+    }
+
+    VX_CALL(vxAddParameterToKernel(kernel, OWN_PARAM_INPUT, VX_INPUT, type, VX_PARAMETER_STATE_REQUIRED));
+    {
+        vx_parameter parameter = 0;
+        vx_enum direction = 0;
+        ASSERT_VX_OBJECT(parameter = vxGetKernelParameterByIndex(kernel, OWN_PARAM_INPUT), VX_TYPE_PARAMETER);
+        VX_CALL(vxQueryParameter(parameter, VX_PARAMETER_DIRECTION, &direction, sizeof(direction)));
+        ASSERT(direction == VX_INPUT);
+        VX_CALL(vxReleaseParameter(&parameter));
+    }
+    VX_CALL(vxAddParameterToKernel(kernel, OWN_PARAM_OUTPUT, VX_OUTPUT, type, VX_PARAMETER_STATE_REQUIRED));
+    {
+        vx_parameter parameter = 0;
+        vx_enum direction = 0;
+        ASSERT_VX_OBJECT(parameter = vxGetKernelParameterByIndex(kernel, OWN_PARAM_OUTPUT), VX_TYPE_PARAMETER);
+        VX_CALL(vxQueryParameter(parameter, VX_PARAMETER_DIRECTION, &direction, sizeof(direction)));
+        ASSERT(direction == VX_OUTPUT);
+        VX_CALL(vxReleaseParameter(&parameter));
+    }
+    VX_CALL(vxSetKernelAttribute(kernel, VX_KERNEL_LOCAL_DATA_SIZE, &size, sizeof(size)));
+    VX_CALL(vxFinalizeKernel(kernel));
+    VX_CALL(vxReleaseKernel(&kernel));
+}
+
+typedef struct {
+    const char* name;
+    vx_enum type;
+    vx_bool is_meta_from_ref;
+    vx_size local_size;
+    vx_bool is_kernel_alloc;
+} type_arg;
+
+#define ADD_TYPE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "IMAGE", __VA_ARGS__, VX_TYPE_IMAGE)), \
+    CT_EXPAND(nextmacro(testArgName "ARRAY", __VA_ARGS__, VX_TYPE_ARRAY)), \
+    CT_EXPAND(nextmacro(testArgName "PYRAMID", __VA_ARGS__, VX_TYPE_PYRAMID)), \
+    CT_EXPAND(nextmacro(testArgName "SCALAR", __VA_ARGS__, VX_TYPE_SCALAR)), \
+    CT_EXPAND(nextmacro(testArgName "DISTRIBUTION", __VA_ARGS__, VX_TYPE_DISTRIBUTION)), \
+    CT_EXPAND(nextmacro(testArgName "MATRIX", __VA_ARGS__, VX_TYPE_MATRIX)), \
+    CT_EXPAND(nextmacro(testArgName "THRESHOLD", __VA_ARGS__, VX_TYPE_THRESHOLD)), \
+    CT_EXPAND(nextmacro(testArgName "LUT", __VA_ARGS__, VX_TYPE_LUT)), \
+    CT_EXPAND(nextmacro(testArgName "REMAP", __VA_ARGS__, VX_TYPE_REMAP))
+
+#define ADD_FROM_FLAG(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "_FROM_REF", __VA_ARGS__, vx_true_e)), \
+    CT_EXPAND(nextmacro(testArgName "_FROM_ATTR", __VA_ARGS__, vx_false_e))
+
+#define ADD_LOCAL_SIZE_AND_ALLOC(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/LOCAL_SIZE=0", __VA_ARGS__, 0, vx_false_e)), \
+    CT_EXPAND(nextmacro(testArgName "/LOCAL_SIZE=10/ALLOC=AUTO", __VA_ARGS__, 10, vx_false_e)), \
+    CT_EXPAND(nextmacro(testArgName "/LOCAL_SIZE=10/ALLOC=KERNEL", __VA_ARGS__, 10, vx_true_e))
+
+#define USERKERNEL_PARAMETERS \
+    CT_GENERATE_PARAMETERS("", ADD_TYPE, ADD_FROM_FLAG, ADD_LOCAL_SIZE_AND_ALLOC, ARG)
+
+TEST_WITH_ARG(UserNode, testUserKernel, type_arg, USERKERNEL_PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_reference src = 0, dst = 0;
+    vx_graph graph = 0;
+    vx_kernel user_kernel = 0;
+    vx_node node = 0;
+    vx_bool is_meta_from_ref = arg_->is_meta_from_ref;
+
+    uint64_t *seed = &CT()->seed_;
+    vx_uint8 value = 0;
+    vx_enum format = VX_DF_IMAGE_U8;
+    vx_uint32 src_width = 128, src_height = 128;
+    vx_uint32 dst_width = 256, dst_height = 256;
+    vx_enum item_type = VX_TYPE_UINT8;
+    vx_size capacity = 20;
+    vx_size levels = 8;
+    vx_float32 scale = 0.5f;
+    vx_size bins = 36;
+    vx_int32 offset = 0;
+    vx_uint32 range = 360;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_int32 thresh_val = 128;
+    vx_size num_items = 100;
+    vx_size m = 5, n = 5;
+    vx_size i, j;
+
+    int phase = 0;
+
+    type = (enum vx_type_e)arg_->type;
+    local_size = arg_->local_size;
+    is_kernel_alloc = arg_->is_kernel_alloc;
+
+    if (is_kernel_alloc == vx_false_e)
+    {
+        local_size_auto_alloc = local_size;
+        local_size_kernel_alloc = 0;
+    }
+    else
+    {
+        local_size_auto_alloc = 0;
+        local_size_kernel_alloc = local_size;
+    }
+
+    is_validator_called = vx_false_e;
+    is_kernel_called = vx_false_e;
+    is_initialize_called = vx_false_e;
+    is_deinitialize_called = vx_false_e;
+
+    switch (type)
+    {
+    case VX_TYPE_IMAGE:
+        {
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateImage(context, src_width, src_height, format), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateImage(context, src_width, src_height, format), type);
+        }
+        break;
+
+    case VX_TYPE_ARRAY:
+        {
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateArray(context, item_type, capacity), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateArray(context, item_type, capacity), type);
+        }
+        break;
+
+    case VX_TYPE_PYRAMID:
+        {
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreatePyramid(context, levels, scale, src_width, src_height, format), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreatePyramid(context, levels, scale, src_width, src_height, format), type);
+        }
+        break;
+
+    case VX_TYPE_SCALAR:
+        {
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateScalar(context, item_type, &value), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateScalar(context, item_type, &value), type);
+        }
+        break;
+
+    case VX_TYPE_MATRIX:
+        {
+            vx_uint8 *data = ct_alloc_mem(m * n * sizeof(vx_uint8));
+
+            for (i = 0; i < m * n; i++)
+            {
+                data[i] = (vx_uint8)CT_RNG_NEXT_INT(*seed, 0, 256);
+            }
+
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateMatrix(context, item_type, m, n), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateMatrix(context, item_type, m, n), type);
+
+            VX_CALL(vxCopyMatrix((vx_matrix)src, (void *)data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+            ct_free_mem(data);
+        }
+        break;
+
+    case VX_TYPE_DISTRIBUTION:
+        {
+            vx_uint32 *data = ct_alloc_mem(bins * sizeof(vx_uint32));
+
+            for (i = 0; i < bins; i++)
+            {
+                data[i] = (vx_uint32)CT_RNG_NEXT_INT(*seed, 0, 256);
+            }
+
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateDistribution(context, bins, offset, range), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateDistribution(context, bins, offset, range), type);
+
+            VX_CALL(vxCopyDistribution((vx_distribution)src, (void *)data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+            ct_free_mem(data);
+        }
+        break;
+
+    case VX_TYPE_REMAP:
+        {
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateRemap(context, src_width, src_height, dst_width, dst_height), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateRemap(context, src_width, src_height, dst_width, dst_height), type);
+
+            for (i = 0; i < dst_width; i++)
+            {
+                for (j = 0; j < dst_height; j++)
+                {
+                    VX_CALL(vxSetRemapPoint((vx_remap)src, i, j, (vx_float32)((i + j) % src_width), (vx_float32)((i * j) % src_height)));
+                }
+            }
+        }
+        break;
+
+    case VX_TYPE_LUT:
+        {
+            vx_uint8 *data = ct_alloc_mem(num_items * sizeof(vx_uint8));
+
+            for (i = 0; i < num_items; i++)
+            {
+                data[i] = (vx_uint8)CT_RNG_NEXT_INT(*seed, 0, 256);
+            }
+
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateLUT(context, item_type, num_items), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateLUT(context, item_type, num_items), type);
+
+            VX_CALL(vxCopyLUT((vx_lut)src, (void *)data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+            ct_free_mem(data);
+        }
+        break;
+
+    case VX_TYPE_THRESHOLD:
+        {
+            ASSERT_VX_OBJECT(src = (vx_reference)vxCreateThreshold(context, thresh_type, item_type), type);
+            ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateThreshold(context, thresh_type, item_type), type);
+
+            VX_CALL(vxSetThresholdAttribute((vx_threshold)src, VX_THRESHOLD_THRESHOLD_VALUE, (void *)&thresh_val, sizeof(thresh_val)));
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    ASSERT_NO_FAILURE(own_register_kernel(context, is_meta_from_ref));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(user_kernel = vxGetKernelByName(context, VX_KERNEL_CONFORMANCE_TEST_OWN_USER_NAME), VX_TYPE_KERNEL);
+    ASSERT_VX_OBJECT(node = vxCreateGenericNode(graph, user_kernel), VX_TYPE_NODE);
+
+    VX_CALL(vxSetParameterByIndex(node, 0, (vx_reference)src));
+    VX_CALL(vxSetParameterByIndex(node, 1, (vx_reference)dst));
+
+    // graph verification, first-time, and re-verify
+
+    for (phase = 0; phase < 2; ++phase)
+    {
+        vx_size size = 0;
+        void* ptr = NULL;
+
+        is_initialize_called = vx_false_e;
+        is_deinitialize_called = vx_false_e;
+        is_validator_called = vx_false_e;
+        set_local_size_status_init = VX_FAILURE;
+        set_local_ptr_status_init = VX_FAILURE;
+        query_local_size_status_deinit = VX_FAILURE;
+        query_local_ptr_status_deinit = VX_FAILURE;
+        set_local_size_status_deinit = VX_FAILURE;
+        set_local_ptr_status_deinit = VX_FAILURE;
+
+        VX_CALL(vxVerifyGraph(graph));
+
+        ASSERT(is_initialize_called == vx_true_e);
+        if (phase == 0)
+            ASSERT(is_deinitialize_called == vx_false_e);
+        else
+            ASSERT(is_deinitialize_called == vx_true_e);
+        ASSERT(is_validator_called == vx_true_e);
+
+        VX_CALL(vxQueryNode(node, VX_NODE_LOCAL_DATA_SIZE, &size, sizeof(size)));
+        VX_CALL(vxQueryNode(node, VX_NODE_LOCAL_DATA_PTR, &ptr, sizeof(ptr)));
+
+        ASSERT(VX_SUCCESS != vxSetNodeAttribute(node, VX_NODE_LOCAL_DATA_SIZE, &size, sizeof(size)));
+        ASSERT(VX_SUCCESS != vxSetNodeAttribute(node, VX_NODE_LOCAL_DATA_PTR, &ptr, sizeof(ptr)));
+
+        ASSERT(size == local_size);
+        if (size > 0)
+            ASSERT(ptr != NULL);
+        else
+            ASSERT(ptr == NULL);
+
+        if (local_size_auto_alloc == 0) // change allowed
+        {
+            ASSERT(set_local_size_status_init == VX_SUCCESS);
+            ASSERT(set_local_ptr_status_init == VX_SUCCESS);
+            if (is_deinitialize_called)
+            {
+                ASSERT(set_local_size_status_deinit == VX_SUCCESS);
+                ASSERT(set_local_ptr_status_deinit == VX_SUCCESS);
+            }
+        }
+        else // change does not allowed: error must be generated
+        {
+            ASSERT(set_local_size_status_init != VX_SUCCESS);
+            ASSERT(set_local_ptr_status_init != VX_SUCCESS);
+            if (is_deinitialize_called)
+            {
+                ASSERT(set_local_size_status_deinit != VX_SUCCESS);
+                ASSERT(set_local_ptr_status_deinit != VX_SUCCESS);
+            }
+        }
+    }
+
+    // execute graph
+
+    is_initialize_called = vx_false_e;
+    is_deinitialize_called = vx_false_e;
+    is_validator_called = vx_false_e;
+    is_kernel_called = vx_false_e;
+
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT(is_initialize_called == vx_false_e);
+    ASSERT(is_deinitialize_called == vx_false_e);
+    ASSERT(is_validator_called == vx_false_e);
+    ASSERT(is_kernel_called == vx_true_e);
+
+    if (VX_TYPE_IMAGE == type)
+    {
+        vx_rectangle_t in_rect;
+        vx_rectangle_t out_rect;
+
+        VX_CALL(vxGetValidRegionImage((vx_image)src, &in_rect));
+        VX_CALL(vxGetValidRegionImage((vx_image)dst, &out_rect));
+
+        ASSERT_EQ_INT(in_rect.start_x + 2, out_rect.start_x);
+        ASSERT_EQ_INT(in_rect.start_y + 2, out_rect.start_y);
+        ASSERT_EQ_INT(in_rect.end_x - 2, out_rect.end_x);
+        ASSERT_EQ_INT(in_rect.end_y - 2, out_rect.end_y);
+    }
+
+    // finalization
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    /* user kernel should be removed only after all references to it released */
+    /* Note, vxRemoveKernel doesn't zeroing kernel ref */
+    VX_CALL(vxRemoveKernel(user_kernel));
+
+    VX_CALL(vxReleaseReference(&dst));
+    VX_CALL(vxReleaseReference(&src));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst == 0);
+    ASSERT(src == 0);
+}
+
+TEST_WITH_ARG(UserNode, testUserKernelObjectArray, type_arg,
+    ARG("IMAGE_FROM_REF", VX_TYPE_IMAGE, vx_true_e),
+    ARG("ARRAY_FROM_REF", VX_TYPE_ARRAY, vx_true_e),
+    ARG("PYRAMID_FROM_REF", VX_TYPE_PYRAMID, vx_true_e),
+    ARG("SCALAR_FROM_REF", VX_TYPE_SCALAR, vx_true_e),
+    ARG("DISTRIBUTION_FROM_REF", VX_TYPE_DISTRIBUTION, vx_true_e),
+    ARG("MATRIX_FROM_REF", VX_TYPE_MATRIX, vx_true_e),
+    ARG("THRESHOLD_FROM_REF", VX_TYPE_THRESHOLD, vx_true_e),
+    ARG("LUT_FROM_REF", VX_TYPE_LUT, vx_true_e),
+    ARG("REMAP_FROM_REF", VX_TYPE_REMAP, vx_true_e),
+    ARG("IMAGE_FROM_ATTR", VX_TYPE_IMAGE, vx_false_e),
+    ARG("ARRAY_FROM_ATTR",VX_TYPE_ARRAY, vx_false_e),
+    ARG("PYRAMID_FROM_ATTR",VX_TYPE_PYRAMID, vx_false_e),
+    ARG("SCALAR_FROM_ATTR",VX_TYPE_SCALAR, vx_false_e),
+    ARG("DISTRIBUTION_FROM_ATTR",VX_TYPE_DISTRIBUTION, vx_false_e),
+    ARG("MATRIX_FROM_ATTR",VX_TYPE_MATRIX, vx_false_e),
+    ARG("THRESHOLD_FROM_ATTR",VX_TYPE_THRESHOLD, vx_false_e),
+    ARG("LUT_FROM_ATTR",VX_TYPE_LUT, vx_false_e),
+    ARG("REMAP_FROM_ATTR",VX_TYPE_REMAP, vx_false_e)
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_reference exemplar = 0, src = 0, dst = 0;
+    vx_graph graph = 0;
+    vx_kernel user_kernel = 0;
+    vx_node node = 0;
+    vx_bool is_meta_from_ref = arg_->is_meta_from_ref;
+    objarray_itemtype = (enum vx_type_e)arg_->type;
+    type = VX_TYPE_OBJECT_ARRAY;
+
+    is_validator_called = vx_false_e;
+    is_kernel_called = vx_false_e;
+    is_initialize_called = vx_false_e;
+    is_deinitialize_called = vx_false_e;
+
+    vx_uint8 value = 0;
+    vx_enum format = VX_DF_IMAGE_U8;
+    vx_uint32 src_width = 128, src_height = 128;
+    vx_uint32 dst_width = 256, dst_height = 256;
+    vx_enum item_type = VX_TYPE_UINT8;
+    vx_size capacity = 20;
+    vx_size levels = 8;
+    vx_float32 scale = 0.5f;
+    vx_size bins = 36;
+    vx_int32 offset = 0;
+    vx_uint32 range = 360;
+    vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY;
+    vx_size num_items = 100;
+    vx_size m = 5, n = 5;
+    switch (objarray_itemtype)
+    {
+    case VX_TYPE_IMAGE:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateImage(context, src_width, src_height, format), objarray_itemtype);
+        break;
+    case VX_TYPE_ARRAY:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateArray(context, item_type, capacity), objarray_itemtype);
+        break;
+    case VX_TYPE_PYRAMID:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreatePyramid(context, levels, scale, src_width, src_height, format), objarray_itemtype);
+        break;
+    case VX_TYPE_SCALAR:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateScalar(context, item_type, &value), objarray_itemtype);
+        break;
+    case VX_TYPE_MATRIX:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateMatrix(context, item_type, m, n), objarray_itemtype);
+        break;
+    case VX_TYPE_DISTRIBUTION:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateDistribution(context, bins, offset, range), objarray_itemtype);
+        break;
+    case VX_TYPE_REMAP:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateRemap(context, src_width, src_height, dst_width, dst_height), objarray_itemtype);
+        break;
+    case VX_TYPE_LUT:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateLUT(context, item_type, num_items), objarray_itemtype);
+        break;
+    case VX_TYPE_THRESHOLD:
+        ASSERT_VX_OBJECT(exemplar = (vx_reference)vxCreateThreshold(context, thresh_type, item_type), objarray_itemtype);
+        break;
+    default:
+        break;
+    }
+
+    ASSERT_VX_OBJECT(src = (vx_reference)vxCreateObjectArray(context, exemplar, capacity), VX_TYPE_OBJECT_ARRAY);
+    ASSERT_VX_OBJECT(dst = (vx_reference)vxCreateObjectArray(context, exemplar, capacity), VX_TYPE_OBJECT_ARRAY);
+
+    ASSERT_NO_FAILURE(own_register_kernel(context, is_meta_from_ref));
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(user_kernel = vxGetKernelByName(context, VX_KERNEL_CONFORMANCE_TEST_OWN_USER_NAME), VX_TYPE_KERNEL);
+    ASSERT_VX_OBJECT(node = vxCreateGenericNode(graph, user_kernel), VX_TYPE_NODE);
+
+    VX_CALL(vxSetParameterByIndex(node, 0, (vx_reference)src));
+    VX_CALL(vxSetParameterByIndex(node, 1, (vx_reference)dst));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    /* user kernel should be removed only after all references to it released */
+    /* Note, vxRemoveKernel doesn't zeroing kernel ref */
+    VX_CALL(vxRemoveKernel(user_kernel));
+
+    VX_CALL(vxReleaseReference(&dst));
+    VX_CALL(vxReleaseReference(&src));
+    VX_CALL(vxReleaseReference(&exemplar));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(dst == 0);
+    ASSERT(src == 0);
+    ASSERT(exemplar == 0);
+
+    ASSERT(is_validator_called == vx_true_e);
+    ASSERT(is_kernel_called == vx_true_e);
+    ASSERT(is_initialize_called == vx_true_e);
+    ASSERT(is_deinitialize_called == vx_true_e);
+}
+
+TEST(UserNode, testRemoveKernel)
+{
+    vx_context context = context_->vx_context_;
+    vx_kernel kernel = 0;
+
+    EXPECT_VX_OBJECT(kernel = vxGetKernelByEnum(context, VX_KERNEL_ADD), VX_TYPE_KERNEL);
+    // Only kernels added through vxAddUserKernel can be removed
+    ASSERT_EQ_VX_STATUS(VX_ERROR_INVALID_PARAMETERS, vxRemoveKernel(kernel));
+    VX_CALL(vxReleaseKernel(&kernel));
+
+    ASSERT_VX_OBJECT(kernel = vxAddUserKernel(
+            context,
+            VX_KERNEL_CONFORMANCE_TEST_OWN_BAD_NAME,
+            VX_KERNEL_CONFORMANCE_TEST_OWN_BAD,
+            own_Kernel,
+            2,
+            own_ValidatorMetaFromRef,
+            own_Initialize,
+            own_Deinitialize), VX_TYPE_KERNEL);
+
+    VX_CALL(vxRemoveKernel(kernel));
+}
+
+TEST(UserNode, testOutDelay)
+{
+    vx_context context = context_->vx_context_;
+    vx_kernel kernel = 0;
+
+    ASSERT_VX_OBJECT(kernel = vxAddUserKernel(
+        context,
+        VX_KERNEL_CONFORMANCE_TEST_OWN_BAD_NAME,
+        VX_KERNEL_CONFORMANCE_TEST_OWN_BAD,
+        own_Kernel,
+        2,
+        own_ValidatorMetaFromRef,
+        own_Initialize,
+        own_Deinitialize), VX_TYPE_KERNEL);
+
+    ASSERT_NE_VX_STATUS(vxAddParameterToKernel(kernel, 0, VX_OUTPUT, VX_TYPE_DELAY, VX_PARAMETER_STATE_REQUIRED), VX_SUCCESS);
+
+    VX_CALL(vxRemoveKernel(kernel));
+}
+
+TESTCASE_TESTS(UserNode,
+        testUserKernel,
+        testUserKernelObjectArray,
+        testRemoveKernel,
+        testOutDelay
+        )
diff --git a/test_conformance/test_vximage.c b/test_conformance/test_vximage.c
new file mode 100644
index 0000000..6257c54
--- /dev/null
+++ b/test_conformance/test_vximage.c
@@ -0,0 +1,3939 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(Image, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char* name;
+    vx_df_image format;
+} format_arg;
+
+TEST_WITH_ARG(Image, testRngImageCreation, format_arg,
+    ARG_ENUM(VX_DF_IMAGE_U8),
+    ARG_ENUM(VX_DF_IMAGE_U16),
+    ARG_ENUM(VX_DF_IMAGE_S16),
+    ARG_ENUM(VX_DF_IMAGE_U32),
+    ARG_ENUM(VX_DF_IMAGE_S32),
+    ARG_ENUM(VX_DF_IMAGE_RGB),
+    ARG_ENUM(VX_DF_IMAGE_RGBX),
+    ARG_ENUM(VX_DF_IMAGE_NV12),
+    ARG_ENUM(VX_DF_IMAGE_NV21),
+    ARG_ENUM(VX_DF_IMAGE_UYVY),
+    ARG_ENUM(VX_DF_IMAGE_YUYV),
+    ARG_ENUM(VX_DF_IMAGE_IYUV),
+    ARG_ENUM(VX_DF_IMAGE_YUV4),
+    ARG_ENUM(VX_DF_IMAGE_VIRT),
+)
+{
+    vx_context  context = context_->vx_context_;
+    vx_image    image   = 0;
+    vx_image    clone   = 0;
+    vx_df_image format  = arg_->format;
+
+    image = vxCreateImage(context, 4, 4, format);
+
+    if (format == VX_DF_IMAGE_VIRT)
+    {
+        ASSERT_NE_VX_STATUS(VX_SUCCESS, vxGetStatus((vx_reference)image));
+        PASS();
+    }
+
+    // VX_CALL(ct_dump_vx_image_info(image));
+
+    ASSERT_VX_OBJECT(image, VX_TYPE_IMAGE);
+
+    ct_fill_image_random(image, &CT()->seed_);
+
+    clone = ct_clone_image(image, 0);
+    ASSERT_VX_OBJECT(clone, VX_TYPE_IMAGE);
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseImage(&clone));
+
+    ASSERT(image == 0);
+    ASSERT(clone == 0);
+}
+
+TEST_WITH_ARG(Image, testVirtualImageCreation, format_arg,
+    ARG_ENUM(VX_DF_IMAGE_U8),
+    ARG_ENUM(VX_DF_IMAGE_U16),
+    ARG_ENUM(VX_DF_IMAGE_S16),
+    ARG_ENUM(VX_DF_IMAGE_U32),
+    ARG_ENUM(VX_DF_IMAGE_S32),
+    ARG_ENUM(VX_DF_IMAGE_RGB),
+    ARG_ENUM(VX_DF_IMAGE_RGBX),
+    ARG_ENUM(VX_DF_IMAGE_NV12),
+    ARG_ENUM(VX_DF_IMAGE_NV21),
+    ARG_ENUM(VX_DF_IMAGE_UYVY),
+    ARG_ENUM(VX_DF_IMAGE_YUYV),
+    ARG_ENUM(VX_DF_IMAGE_IYUV),
+    ARG_ENUM(VX_DF_IMAGE_YUV4),
+    ARG_ENUM(VX_DF_IMAGE_VIRT),
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0;
+    vx_image   clone   = 0;
+    vx_df_image  format  = arg_->format;
+
+    vx_graph graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    image = vxCreateVirtualImage(graph, 4, 4, format);
+    ASSERT_VX_OBJECT(image, VX_TYPE_IMAGE);
+
+    clone = ct_clone_image(image, graph);
+    ASSERT_VX_OBJECT(clone, VX_TYPE_IMAGE);
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseImage(&clone));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(image == 0);
+    ASSERT(clone == 0);
+    ASSERT(graph == 0);
+}
+
+typedef struct {
+    const char* name;
+    int width;
+    int height;
+    vx_df_image format;
+} dims_arg;
+
+TEST_WITH_ARG(Image, testVirtualImageCreationDims, dims_arg,
+    ARG("0_0_REAL", 0, 0, VX_DF_IMAGE_U8),
+    ARG("DISABLED_0_4_REAL", 0, 4, VX_DF_IMAGE_U8),
+    ARG("DISABLED_4_0_REAL", 4, 0, VX_DF_IMAGE_U8),
+    ARG("4_4_REAL", 4, 4, VX_DF_IMAGE_U8),
+    ARG("0_0_VIRT", 0, 0, VX_DF_IMAGE_VIRT),
+    ARG("DISABLED_0_4_VIRT", 0, 4, VX_DF_IMAGE_VIRT),
+    ARG("DISABLED_4_0_VIRT", 4, 0, VX_DF_IMAGE_VIRT),
+    ARG("4_4_VIRT", 4, 4, VX_DF_IMAGE_VIRT),
+    )
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0;
+    vx_image   clone   = 0;
+
+    vx_graph graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    image = vxCreateVirtualImage(graph, arg_->width, arg_->height, arg_->format);
+    ASSERT_VX_OBJECT(image, VX_TYPE_IMAGE);
+
+    clone = ct_clone_image(image, graph);
+    ASSERT_VX_OBJECT(clone, VX_TYPE_IMAGE);
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseImage(&clone));
+    VX_CALL(vxReleaseGraph(&graph));
+
+    ASSERT(image == 0);
+    ASSERT(clone == 0);
+    ASSERT(graph == 0);
+}
+
+
+TEST_WITH_ARG(Image, testConvert_CT_Image, format_arg,
+    ARG_ENUM(VX_DF_IMAGE_U8),
+    ARG_ENUM(VX_DF_IMAGE_U16),
+    ARG_ENUM(VX_DF_IMAGE_S16),
+    ARG_ENUM(VX_DF_IMAGE_U32),
+    ARG_ENUM(VX_DF_IMAGE_S32),
+    ARG_ENUM(VX_DF_IMAGE_RGB),
+    ARG_ENUM(VX_DF_IMAGE_RGBX),
+    ARG_ENUM(VX_DF_IMAGE_NV12),
+    ARG_ENUM(VX_DF_IMAGE_NV21),
+    ARG_ENUM(VX_DF_IMAGE_UYVY),
+    ARG_ENUM(VX_DF_IMAGE_YUYV),
+    ARG_ENUM(VX_DF_IMAGE_IYUV),
+    ARG_ENUM(VX_DF_IMAGE_YUV4),
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0,
+               image2  = 0;
+    CT_Image   ctimg   = 0,
+               ctimg2  = 0;
+
+    image = vxCreateImage(context, 16, 16, arg_->format);
+    ASSERT_VX_OBJECT(image, VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(ct_fill_image_random(image, &CT()->seed_));
+
+    ASSERT_NO_FAILURE(ctimg = ct_image_from_vx_image(image));
+
+    ASSERT_NO_FAILURE(image2 = ct_image_to_vx_image(ctimg, context));
+
+    ASSERT_NO_FAILURE(ctimg2 = ct_image_from_vx_image(image2));
+
+    ASSERT_EQ_CTIMAGE(ctimg, ctimg2);
+
+    VX_CALL(vxReleaseImage(&image));
+    VX_CALL(vxReleaseImage(&image2));
+
+    ASSERT(image == 0);
+    ASSERT(image2 == 0);
+}
+
+
+/* ***************************************************************************
+//  local auxiliary functions
+*/
+
+/*
+// Generate input random pixel values
+*/
+static CT_Image own_generate_rand_image(const char* fileName, int width, int height, vx_df_image format)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+        image = ct_allocate_ct_image_random(width, height, format, &CT()->seed_, 0, 256));
+
+    return image;
+} /* own_generate_rand_image() */
+
+
+static
+vx_uint32 own_plane_subsampling_x(vx_df_image format, vx_uint32 plane)
+{
+    int subsampling_x = 0;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        subsampling_x = (0 == plane) ? 1 : 2;
+        break;
+
+    default:
+        subsampling_x = 1;
+        break;
+    }
+
+    return subsampling_x;
+}
+
+static
+vx_uint32 own_plane_subsampling_y(vx_df_image format, vx_uint32 plane)
+{
+    int subsampling_y = 0;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        subsampling_y = (0 == plane) ? 1 : 2;
+        break;
+
+    default:
+        subsampling_y = 1;
+        break;
+    }
+
+    return subsampling_y;
+}
+
+static
+vx_uint32 own_elem_size(vx_df_image format, vx_uint32 plane)
+{
+    int channel_step_x = 0;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+        channel_step_x = 1;
+        break;
+
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+        channel_step_x = 2;
+        break;
+
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGBX:
+        channel_step_x = 4;
+        break;
+
+    case VX_DF_IMAGE_RGB:
+        channel_step_x = 3;
+        break;
+
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        channel_step_x = 2;
+        break;
+
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_YUV4:
+        channel_step_x = 1;
+        break;
+
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        channel_step_x = (0 == plane) ? 1 : 2;
+        break;
+
+    default:
+        channel_step_x = 0;
+    }
+
+    return channel_step_x;
+}
+
+typedef struct
+{
+    const char*      testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char*      fileName;
+    int              width;
+    int              height;
+    vx_df_image      format;
+
+} CreateImageFromHandle_Arg;
+
+
+#define VX_PLANE_MAX (4)
+
+#undef ADD_IMAGE_FORMAT
+#define ADD_IMAGE_FORMAT(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U8", __VA_ARGS__, VX_DF_IMAGE_U8)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U16", __VA_ARGS__, VX_DF_IMAGE_U16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_S16", __VA_ARGS__, VX_DF_IMAGE_S16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U32", __VA_ARGS__, VX_DF_IMAGE_U32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_S32", __VA_ARGS__, VX_DF_IMAGE_S32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_RGB", __VA_ARGS__, VX_DF_IMAGE_RGB)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_RGBX", __VA_ARGS__, VX_DF_IMAGE_RGBX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_UYVY", __VA_ARGS__, VX_DF_IMAGE_UYVY)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUYV", __VA_ARGS__, VX_DF_IMAGE_YUYV)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV12", __VA_ARGS__, VX_DF_IMAGE_NV12)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV21", __VA_ARGS__, VX_DF_IMAGE_NV21)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUV4", __VA_ARGS__, VX_DF_IMAGE_YUV4)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_IYUV", __VA_ARGS__, VX_DF_IMAGE_IYUV))
+
+#define CREATE_IMAGE_FROM_HANDLE_PARAMETERS \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(Image, testCreateImageFromHandle, CreateImageFromHandle_Arg, CREATE_IMAGE_FROM_HANDLE_PARAMETERS)
+{
+    vx_uint32 n;
+    vx_uint32 nplanes;
+    vx_context context = context_->vx_context_;
+    vx_image image = 0;
+    vx_imagepatch_addressing_t addr[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+
+    int channel[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    CT_Image src = NULL;
+    CT_Image tst = NULL;
+
+    void* ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    switch (arg_->format)
+    {
+    case VX_DF_IMAGE_U8:
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+        channel[0] = VX_CHANNEL_0;
+        break;
+
+    case VX_DF_IMAGE_RGB:
+    case VX_DF_IMAGE_RGBX:
+        channel[0] = VX_CHANNEL_R;
+        channel[1] = VX_CHANNEL_G;
+        channel[2] = VX_CHANNEL_B;
+        channel[3] = VX_CHANNEL_A;
+        break;
+
+    case VX_DF_IMAGE_UYVY:
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+    case VX_DF_IMAGE_YUV4:
+    case VX_DF_IMAGE_IYUV:
+        channel[0] = VX_CHANNEL_Y;
+        channel[1] = VX_CHANNEL_U;
+        channel[2] = VX_CHANNEL_V;
+        break;
+
+    default:
+        ASSERT(0);
+    }
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    ASSERT_NO_FAILURE(nplanes = ct_get_num_planes(arg_->format));
+
+    for (n = 0; n < nplanes; n++)
+    {
+        addr[n].dim_x    = src->width / ct_image_get_channel_subsampling_x(src, channel[n]);
+        addr[n].dim_y    = src->height / ct_image_get_channel_subsampling_y(src, channel[n]);
+        addr[n].stride_x = ct_image_get_channel_step_x(src, channel[n]);
+        addr[n].stride_y = ct_image_get_channel_step_y(src, channel[n]);
+
+        ptrs[n] = ct_image_get_plane_base(src, n);
+    }
+
+    EXPECT_VX_OBJECT(image = vxCreateImageFromHandle(context, arg_->format, addr, ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(tst = ct_image_from_vx_image(image));
+
+    EXPECT_EQ_CTIMAGE(src, tst);
+
+    VX_CALL(vxReleaseImage(&image));
+
+    ASSERT(image == 0);
+} /* testCreateImageFromHandle() */
+
+
+static uint32_t own_stride_bytes(vx_df_image format, int step)
+{
+    uint32_t factor = 0;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+    case VX_DF_IMAGE_NV21:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_YUV4:
+    case VX_DF_IMAGE_IYUV:
+        factor = 1;
+        break;
+
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        factor = 2;
+        break;
+
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGBX:
+        factor = 4;
+        break;
+
+    case VX_DF_IMAGE_RGB:
+        factor = 3;
+        break;
+
+    default:
+        ASSERT_(return 0, 0);
+    }
+
+    return step*factor;
+}
+
+
+static int own_get_channel_step_x(vx_df_image format, vx_enum channel)
+{
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+        return 1;
+
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+        return 2;
+
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGBX:
+        return 4;
+
+    case VX_DF_IMAGE_RGB:
+        return 3;
+
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        if (channel == VX_CHANNEL_Y)
+            return 2;
+        return 4;
+
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_YUV4:
+        return 1;
+
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        if (channel == VX_CHANNEL_Y)
+            return 1;
+        return 2;
+
+    default:
+        ASSERT_(return 0, 0);
+    }
+
+    return 0;
+}
+
+
+static int own_get_channel_step_y(vx_df_image format, vx_enum channel, int step)
+{
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+        return step;
+
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+        return step * 2;
+
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGBX:
+        return step * 4;
+
+    case VX_DF_IMAGE_RGB:
+        return step * 3;
+
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        return step * 2;
+
+    case VX_DF_IMAGE_IYUV:
+        return (channel == VX_CHANNEL_Y) ? step : step / 2;
+
+    case VX_DF_IMAGE_YUV4:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        return step;
+
+    default:
+        ASSERT_(return 0, 0);
+    }
+
+    return 0;
+}
+
+
+static int own_get_channel_subsampling_x(vx_df_image format, vx_enum channel)
+{
+    if (channel == VX_CHANNEL_Y)
+        return 1;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        return 2;
+    }
+
+    return 1;
+}
+
+
+int own_get_channel_subsampling_y(vx_df_image format, vx_enum channel)
+{
+    if (channel == VX_CHANNEL_Y)
+        return 1;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        return 2;
+
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        return 1;
+    }
+
+    return 1;
+}
+
+
+static unsigned int own_image_bits_per_pixel(vx_df_image format, unsigned int p)
+{
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+        return 8 * 1;
+
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+    case VX_DF_IMAGE_UYVY:
+    case VX_DF_IMAGE_YUYV:
+        return 8 * 2;
+
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGBX:
+        return 8 * 4;
+
+    case VX_DF_IMAGE_RGB:
+    case VX_DF_IMAGE_YUV4:
+        return 8 * 3;
+
+    case VX_DF_IMAGE_IYUV:
+        return 8 * 3 / 2;
+
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        if (p == 0)
+            return 8 * 1;
+        else
+            return 8 * 2;
+
+    default:
+        CT_RecordFailure();
+        return 0;
+    };
+}
+
+static size_t own_plane_size(uint32_t width, uint32_t height, unsigned int p, vx_df_image format)
+{
+    return (size_t)(width * height * own_image_bits_per_pixel(format, p) / 8);
+}
+
+
+/*
+// Allocates image plane pointers from user controlled memory according to format, width, height params
+// and initialize with some value
+*/
+static void own_allocate_image_ptrs(
+    vx_df_image format, int width, int height,
+    vx_uint32* nplanes, void* ptrs[], vx_imagepatch_addressing_t addr[],
+    vx_pixel_value_t* val)
+{
+    unsigned int p;
+    int channel[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+        channel[0] = VX_CHANNEL_0;
+        break;
+
+    case VX_DF_IMAGE_RGB:
+    case VX_DF_IMAGE_RGBX:
+        channel[0] = VX_CHANNEL_R;
+        channel[1] = VX_CHANNEL_G;
+        channel[2] = VX_CHANNEL_B;
+        channel[3] = VX_CHANNEL_A;
+        break;
+
+    case VX_DF_IMAGE_UYVY:
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+    case VX_DF_IMAGE_YUV4:
+    case VX_DF_IMAGE_IYUV:
+        channel[0] = VX_CHANNEL_Y;
+        channel[1] = VX_CHANNEL_U;
+        channel[2] = VX_CHANNEL_V;
+        break;
+
+    default:
+        ASSERT(0);
+    }
+
+    ASSERT_NO_FAILURE(*nplanes = ct_get_num_planes(format));
+
+    for (p = 0; p < *nplanes; p++)
+    {
+        size_t plane_size = 0;
+
+        vx_uint32 subsampling_x = own_get_channel_subsampling_x(format, channel[p]);
+        vx_uint32 subsampling_y = own_get_channel_subsampling_y(format, channel[p]);
+
+        addr[p].dim_x    = width  / subsampling_x;
+        addr[p].dim_y    = height / subsampling_y;
+        addr[p].stride_x = own_get_channel_step_x(format, channel[p]);
+        addr[p].stride_y = own_get_channel_step_y(format, channel[p], width);
+
+        plane_size = addr[p].stride_y * addr[p].dim_y;
+
+        if (plane_size != 0)
+        {
+            ptrs[p] = ct_alloc_mem(plane_size);
+            /* init memory */
+            ct_memset(ptrs[p], val->reserved[p], plane_size);
+        }
+    }
+
+    return;
+}
+
+
+typedef struct
+{
+    const char*      testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char*      fileName;
+    int              width;
+    int              height;
+    vx_df_image      format;
+    vx_bool          have_roi;
+
+} SwapImageHandle_Arg;
+
+
+#define VX_PLANE_MAX (4)
+
+#define ADD_IMAGE_FORMAT(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U8", __VA_ARGS__, VX_DF_IMAGE_U8)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U16", __VA_ARGS__, VX_DF_IMAGE_U16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_S16", __VA_ARGS__, VX_DF_IMAGE_S16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U32", __VA_ARGS__, VX_DF_IMAGE_U32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_S32", __VA_ARGS__, VX_DF_IMAGE_S32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_RGB", __VA_ARGS__, VX_DF_IMAGE_RGB)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_RGBX", __VA_ARGS__, VX_DF_IMAGE_RGBX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_UYVY", __VA_ARGS__, VX_DF_IMAGE_UYVY)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUYV", __VA_ARGS__, VX_DF_IMAGE_YUYV)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV12", __VA_ARGS__, VX_DF_IMAGE_NV12)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV21", __VA_ARGS__, VX_DF_IMAGE_NV21)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUV4", __VA_ARGS__, VX_DF_IMAGE_YUV4)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_IYUV", __VA_ARGS__, VX_DF_IMAGE_IYUV))
+
+#define ADD_IMAGE_ROI(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/ROI=true", __VA_ARGS__, vx_true_e)), \
+    CT_EXPAND(nextmacro(testArgName "/ROI=false", __VA_ARGS__, vx_false_e))
+
+#define SWAP_IMAGE_HANDLE_PARAMETERS \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ADD_IMAGE_ROI, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(Image, testSwapImageHandle, SwapImageHandle_Arg, SWAP_IMAGE_HANDLE_PARAMETERS)
+{
+    vx_uint32 n;
+    vx_context context = context_->vx_context_;
+    vx_image image1 = 0;
+    vx_image image2 = 0;
+    vx_imagepatch_addressing_t addr1[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    vx_imagepatch_addressing_t addr2[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+
+    vx_uint32 nplanes1 = 0;
+    vx_uint32 nplanes2 = 0;
+    vx_pixel_value_t val1;
+    vx_pixel_value_t val2;
+    vx_pixel_value_t val3;
+    void* mem1_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+    void* mem2_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+    void* prev_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+    CT_Image img1 = 0;
+    CT_Image img2 = 0;
+    CT_Image tst1 = 0;
+    CT_Image tst2 = 0;
+
+    val1.reserved[0] = 0x11;
+    val1.reserved[1] = 0x22;
+    val1.reserved[2] = 0x33;
+    val1.reserved[3] = 0x44;
+
+    val2.reserved[0] = 0x99;
+    val2.reserved[1] = 0x88;
+    val2.reserved[2] = 0x77;
+    val2.reserved[3] = 0x66;
+
+    val3.reserved[0] = 0xaa;
+    val3.reserved[1] = 0xbb;
+    val3.reserved[2] = 0xcc;
+    val3.reserved[3] = 0xdd;
+
+    own_allocate_image_ptrs(arg_->format, arg_->width, arg_->height, &nplanes1, mem1_ptrs, addr1, &val1);
+    own_allocate_image_ptrs(arg_->format, arg_->width, arg_->height, &nplanes2, mem2_ptrs, addr2, &val2);
+    EXPECT_EQ_INT(nplanes1, nplanes2);
+
+    EXPECT_VX_OBJECT(image1 = vxCreateImageFromHandle(context, arg_->format, addr1, mem1_ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+    EXPECT_VX_OBJECT(image2 = vxCreateImageFromHandle(context, arg_->format, addr2, mem2_ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(img1 = ct_image_from_vx_image(image1));
+    ASSERT_NO_FAILURE(img2 = ct_image_from_vx_image(image2));
+
+    if (arg_->have_roi == vx_true_e)
+    {
+        vx_image roi1 = 0;
+        vx_image roi2 = 0;
+        vx_uint32 roi1_width;
+        vx_uint32 roi1_height;
+
+        vx_rectangle_t roi1_rect =
+        {
+            arg_->width / 2,
+            arg_->height / 2,
+            arg_->width,
+            arg_->height
+        };
+
+        vx_rectangle_t roi2_rect;
+
+        /* first level subimage */
+        ASSERT_VX_OBJECT(roi1 = vxCreateImageFromROI(image1, &roi1_rect), VX_TYPE_IMAGE);
+
+        VX_CALL(vxQueryImage(roi1, VX_IMAGE_WIDTH, &roi1_width, sizeof(vx_uint32)));
+        VX_CALL(vxQueryImage(roi1, VX_IMAGE_HEIGHT, &roi1_height, sizeof(vx_uint32)));
+
+        roi2_rect.start_x = roi1_width / 2;
+        roi2_rect.start_y = roi1_height / 2;
+        roi2_rect.end_x   = roi1_width;
+        roi2_rect.end_y   = roi1_height;
+
+        /* second level subimage */
+        ASSERT_VX_OBJECT(roi2 = vxCreateImageFromROI(roi1, &roi2_rect), VX_TYPE_IMAGE);
+
+        /* try to get back ROI pointers */        
+        ASSERT_NE_VX_STATUS(VX_SUCCESS, vxSwapImageHandle(roi2, NULL, prev_ptrs, nplanes1));
+
+        /* try to replace and get back ROI pointers */
+        ASSERT_NE_VX_STATUS(VX_SUCCESS, vxSwapImageHandle(roi2, mem2_ptrs, prev_ptrs, nplanes1));
+
+        /* check the content of roi2 image equal image1 */
+        for (n = 0; n < nplanes1; n++)
+        {
+            unsigned int i;
+            unsigned int j;
+            vx_rectangle_t rect_roi2 = { 0, 0, 0, 0 };
+
+            vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+
+            vx_map_id map_id;
+
+            void* plane_ptr = 0;
+
+            VX_CALL(vxGetValidRegionImage(roi2, &rect_roi2));
+            VX_CALL(vxMapImagePatch(roi2, &rect_roi2, n, &map_id, &addr, &plane_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (i = 0; i < addr.dim_y; i += addr.step_y)
+            {
+                for (j = 0; j < addr.dim_x; j += addr.step_x)
+                {
+                    unsigned char* p = vxFormatImagePatchAddress2d(plane_ptr, j, i, &addr);
+                    if (p[0] != val1.reserved[n])
+                        CT_FAIL("ROI content mismath at [x=%d, y=%d]: expected %d, actual %d", j, i, val1, p[0]);
+                }
+            }
+            VX_CALL(vxUnmapImagePatch(roi2, map_id));
+        }
+
+        /* replace image pointers */
+        VX_CALL(vxSwapImageHandle(image1, mem2_ptrs, NULL, nplanes1));
+
+        /* check the content of roi2 image equal image2 */
+        for (n = 0; n < nplanes1; n++)
+        {
+            unsigned int i;
+            unsigned int j;
+            vx_rectangle_t rect_roi2 = { 0, 0, 0, 0 };
+
+            vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+
+            vx_map_id map_id;
+
+            void* plane_ptr = 0;
+
+            VX_CALL(vxGetValidRegionImage(roi2, &rect_roi2));
+            VX_CALL(vxMapImagePatch(roi2, &rect_roi2, n, &map_id, &addr, &plane_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            for (i = 0; i < addr.dim_y; i += addr.step_y)
+            {
+                for (j = 0; j < addr.dim_x; j += addr.step_x)
+                {
+                    unsigned char* p = vxFormatImagePatchAddress2d(plane_ptr, j, i, &addr);
+                    if (p[0] != val2.reserved[n])
+                        CT_FAIL("ROI content mismath at [x=%d, y=%d]: expected %d, actual %d", j, i, val2, p[0]);
+                }
+            }
+            VX_CALL(vxUnmapImagePatch(roi2, map_id));
+        }
+
+        /* modify the content of roi2 */
+        for (n = 0; n < nplanes1; n++)
+        {
+            unsigned int i;
+            unsigned int j;
+            vx_rectangle_t rect_roi2 = { 0, 0, 0, 0 };
+
+            vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+
+            vx_map_id map_id;
+
+            void* plane_ptr = 0;
+
+            VX_CALL(vxGetValidRegionImage(roi2, &rect_roi2));
+            VX_CALL(vxMapImagePatch(roi2, &rect_roi2, n, &map_id, &addr, &plane_ptr, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, 0));
+            for (i = 0; i < addr.dim_y; i += addr.step_y)
+            {
+                for (j = 0; j < addr.dim_x; j += addr.step_x)
+                {
+                    unsigned char* p = vxFormatImagePatchAddress2d(plane_ptr, j, i, &addr);
+                    *p = val3.reserved[n];
+                }
+            }
+            VX_CALL(vxUnmapImagePatch(roi2, map_id));
+        }
+
+        /* reclaim image ptrs */
+        VX_CALL(vxSwapImageHandle(image1, NULL, prev_ptrs, nplanes1));
+
+        /* check that the reclaimed host memory contains the correct data */
+        for (n = 0; n < nplanes2; n++)
+        {
+            vx_uint8* plane_ptr = prev_ptrs[n];
+            vx_uint32 i;
+            vx_uint32 j;
+            vx_uint32 subsampling_x = own_plane_subsampling_x(arg_->format, n);
+            vx_uint32 subsampling_y = own_plane_subsampling_y(arg_->format, n);
+            vx_uint32 start_x = (roi1_rect.start_x + roi2_rect.start_x) / subsampling_x;
+            vx_uint32 start_y = (roi1_rect.start_y + roi2_rect.start_y) / subsampling_y;
+            vx_uint32 end_x   = (vx_uint32)(arg_->width  / subsampling_x);
+            vx_uint32 end_y   = (vx_uint32)(arg_->height / subsampling_y);
+
+            for (i = 0; i < addr2[n].dim_y; i++)
+            {
+                for (j = 0; j < addr2[n].dim_x; j++)
+                {
+                    unsigned int k = i * addr2[n].stride_y + j * addr2[n].stride_x;
+
+                    unsigned char p = plane_ptr[k];
+
+                    if (i >= start_y && i <= end_y - 1 &&
+                        j >= start_x && j <= end_x - 1)
+                    {
+                        if (p != val3.reserved[n])
+                            CT_FAIL("ROI content mismath at [x=%d, y=%d]: expected %d, actual %d", j, i, val3, p);
+                    }
+                    else
+                    {
+                        if (p != val2.reserved[n])
+                            CT_FAIL("ROI content mismath at [x=%d, y=%d]: expected %d, actual %d", j, i, val2, p);
+                    }
+                }
+            }
+        }
+
+        /* check that pointers are reclaimed in ROI */
+        for (n = 0; n < nplanes1; n++)
+        {
+            if (prev_ptrs[n] != NULL)
+            {
+                vx_rectangle_t rect = { 0, 0, 0, 0 };
+
+                vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+
+                vx_map_id map_id;
+
+                void* plane_ptr = 0;
+
+                vx_uint8* ptr = (vx_uint8*)prev_ptrs[n];
+
+                EXPECT_EQ_PTR(mem2_ptrs[n], ptr);
+
+                ct_free_mem(ptr);
+                prev_ptrs[n] = NULL;
+                mem2_ptrs[n] = NULL;
+
+                VX_CALL(vxGetValidRegionImage(roi2, &rect));
+
+                EXPECT_EQ_INT(VX_ERROR_NO_MEMORY, vxMapImagePatch(roi2, &rect, n, &map_id, &addr, &plane_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            }
+        }
+
+        VX_CALL(vxReleaseImage(&roi1));
+        VX_CALL(vxReleaseImage(&roi2));
+        ASSERT(roi1 == 0);
+        ASSERT(roi2 == 0);
+    }
+    else
+    {
+        /* replace image ptrs */
+        VX_CALL(vxSwapImageHandle(image1, mem2_ptrs, prev_ptrs, nplanes1));
+        ASSERT_NO_FAILURE(tst2 = ct_image_from_vx_image(image1));
+
+        /* 1. verify content of image is changed to the second image */
+        EXPECT_EQ_CTIMAGE(tst2, img2);
+
+        /* 2. verify we get back original image ptrs */
+        for (n = 0; n < nplanes1; n++)
+        {
+            EXPECT_EQ_PTR(mem1_ptrs[n], prev_ptrs[n]);
+        }
+
+        /* 3. verify we get back content of the original image */
+        {
+            vx_image tmp = 0;
+            EXPECT_VX_OBJECT(tmp = vxCreateImageFromHandle(context, arg_->format, addr1, prev_ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+            ASSERT_NO_FAILURE(tst1 = ct_image_from_vx_image(tmp));
+            EXPECT_EQ_CTIMAGE(tst1, img1);
+            VX_CALL(vxSwapImageHandle(tmp, NULL, NULL, nplanes1));
+            VX_CALL(vxReleaseImage(&tmp));
+        }
+
+        /* 4. check if image ptrs were replaced */
+        for (n = 0; n < nplanes1; n++)
+        {
+            if (prev_ptrs[n] != NULL)
+            {
+                vx_rectangle_t rect = { 0, 0, 0, 0 };
+
+                vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+
+                vx_map_id map_id;
+
+                void* plane_ptr = 0;
+
+                VX_CALL(vxGetValidRegionImage(image1, &rect));
+
+                VX_CALL(vxMapImagePatch(image1, &rect, n, &map_id, &addr, &plane_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+
+                EXPECT_EQ_PTR(mem2_ptrs[n], plane_ptr);
+
+                VX_CALL(vxUnmapImagePatch(image1, map_id));
+            }
+        }
+
+        /* reclaim image ptrs */
+        VX_CALL(vxSwapImageHandle(image1, NULL, prev_ptrs, nplanes1));
+        VX_CALL(vxSwapImageHandle(image2, NULL, NULL, nplanes2));
+
+        /* 5. check if image ptrs were reclaimed */
+        for (n = 0; n < nplanes1; n++)
+        {
+            if (prev_ptrs[n] != NULL)
+            {
+                vx_rectangle_t rect = { 0, 0, 0, 0 };
+
+                vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+
+                vx_map_id map_id;
+
+                void* plane_ptr = 0;
+
+                vx_uint8* ptr = (vx_uint8*)prev_ptrs[n];
+
+                EXPECT_EQ_PTR(mem2_ptrs[n], ptr);
+
+                ct_free_mem(ptr);
+                prev_ptrs[n] = NULL;
+                mem2_ptrs[n] = NULL;
+
+                VX_CALL(vxGetValidRegionImage(image1, &rect));
+
+                EXPECT_EQ_INT(VX_ERROR_NO_MEMORY, vxMapImagePatch(image1, &rect, n, &map_id, &addr, &plane_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+            }
+        }
+    }
+
+    for (n = 0; n < VX_PLANE_MAX; n++)
+    {
+        if (mem1_ptrs[n] != NULL)
+        {
+            ct_free_mem(mem1_ptrs[n]);
+            mem1_ptrs[n] = NULL;
+        }
+    }
+
+    VX_CALL(vxReleaseImage(&image1));
+    VX_CALL(vxReleaseImage(&image2));
+
+    ASSERT(image1 == 0);
+    ASSERT(image2 == 0);
+} /* testSwapImageHandle() */
+
+
+typedef struct
+{
+    const char*      testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char*      fileName;
+    int              width;
+    int              height;
+    vx_df_image      format;
+
+} FormatImagePatchAddress1d_Arg;
+
+
+#define VX_PLANE_MAX (4)
+
+#define ADD_IMAGE_FORMAT(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U8", __VA_ARGS__, VX_DF_IMAGE_U8)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U16", __VA_ARGS__, VX_DF_IMAGE_U16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_S16", __VA_ARGS__, VX_DF_IMAGE_S16)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_U32", __VA_ARGS__, VX_DF_IMAGE_U32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_S32", __VA_ARGS__, VX_DF_IMAGE_S32)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_RGB", __VA_ARGS__, VX_DF_IMAGE_RGB)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_RGBX", __VA_ARGS__, VX_DF_IMAGE_RGBX)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_UYVY", __VA_ARGS__, VX_DF_IMAGE_UYVY)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUYV", __VA_ARGS__, VX_DF_IMAGE_YUYV)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV12", __VA_ARGS__, VX_DF_IMAGE_NV12)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV21", __VA_ARGS__, VX_DF_IMAGE_NV21)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUV4", __VA_ARGS__, VX_DF_IMAGE_YUV4)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_IYUV", __VA_ARGS__, VX_DF_IMAGE_IYUV))
+
+#define FORMAT_IMAGE_PATCH_ADDRESS_1D_PARAMETERS \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(Image, testFormatImagePatchAddress1d, FormatImagePatchAddress1d_Arg, FORMAT_IMAGE_PATCH_ADDRESS_1D_PARAMETERS)
+{
+    vx_uint8* p1;
+    vx_uint8* p2;
+    vx_uint32 i;
+    vx_int32  j;
+    vx_uint32 n;
+    vx_uint32 nplanes;
+    vx_context context = context_->vx_context_;
+    vx_image image1 = 0;
+    vx_image image2 = 0;
+    vx_rectangle_t rect = { 0, 0, 0, 0 };
+    vx_imagepatch_addressing_t addr1[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    vx_imagepatch_addressing_t addr2[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+
+    vx_map_id map_id1;
+    vx_map_id map_id2;
+
+    CT_Image src = NULL;
+    CT_Image tst = NULL;
+
+    void* ptrs1[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+    void* ptrs2[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    ASSERT_NO_FAILURE(src = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    image1 = ct_image_to_vx_image(src, context);
+    ASSERT_VX_OBJECT(image1, VX_TYPE_IMAGE);
+
+    image2 = vxCreateImage(context, arg_->width, arg_->height, arg_->format);
+    ASSERT_VX_OBJECT(image2, VX_TYPE_IMAGE);
+
+    ASSERT_NO_FAILURE(nplanes = ct_get_num_planes(arg_->format));
+
+    for (n = 0; n < nplanes; n++)
+    {
+        rect.start_x = 0;
+        rect.start_y = 0;
+        rect.end_x = src->width;
+        rect.end_y = src->height;
+
+        VX_CALL(vxMapImagePatch(image1, &rect, n, &map_id1, &addr1[n], &ptrs1[n], VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0));
+        VX_CALL(vxMapImagePatch(image2, &rect, n, &map_id2, &addr2[n], &ptrs2[n], VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0));
+
+        /* use linear addressing function */
+        for (i = 0; i < addr1[n].dim_x*addr1[n].dim_y; i += addr1[n].step_x)
+        {
+            p1 = vxFormatImagePatchAddress1d(ptrs1[n], i, &addr1[n]);
+            p2 = vxFormatImagePatchAddress1d(ptrs2[n], i, &addr2[n]);
+            for (j = 0; j < addr1[n].stride_x; j++)
+                p2[j] = p1[j];
+        }
+
+        VX_CALL(vxUnmapImagePatch(image1, map_id1));
+        VX_CALL(vxUnmapImagePatch(image2, map_id2));
+    }
+
+    ASSERT_NO_FAILURE(tst = ct_image_from_vx_image(image2));
+
+    ASSERT_EQ_CTIMAGE(tst, src);
+
+    VX_CALL(vxReleaseImage(&image1));
+    VX_CALL(vxReleaseImage(&image2));
+
+    ASSERT(image1 == 0);
+    ASSERT(image2 == 0);
+} /* testFormatImagePatchAddress1d() */
+
+TEST_WITH_ARG(Image, testvxSetImagePixelValues, format_arg,
+    ARG_ENUM(VX_DF_IMAGE_U8),
+    ARG_ENUM(VX_DF_IMAGE_U16),
+    ARG_ENUM(VX_DF_IMAGE_S16),
+    ARG_ENUM(VX_DF_IMAGE_U32),
+    ARG_ENUM(VX_DF_IMAGE_S32),
+    ARG_ENUM(VX_DF_IMAGE_RGB),
+    ARG_ENUM(VX_DF_IMAGE_RGBX),
+    ARG_ENUM(VX_DF_IMAGE_NV12),
+    ARG_ENUM(VX_DF_IMAGE_NV21),
+    ARG_ENUM(VX_DF_IMAGE_UYVY),
+    ARG_ENUM(VX_DF_IMAGE_YUYV),
+    ARG_ENUM(VX_DF_IMAGE_IYUV),
+    ARG_ENUM(VX_DF_IMAGE_YUV4),
+)
+{
+    vx_context  context = context_->vx_context_;
+    vx_image    image   = 0;
+    CT_Image   ctimg   = 0;
+    CT_Image   refimg  = 0;
+    int i;
+    vx_df_image format  = arg_->format;
+
+    image = vxCreateImage(context, 640, 480, format);
+    ASSERT_VX_OBJECT(image, VX_TYPE_IMAGE);
+
+    vx_pixel_value_t vals;
+
+    vals.reserved[0] = 0x11;
+    vals.reserved[1] = 0x22;
+    vals.reserved[2] = 0x33;
+    vals.reserved[3] = 0x44;
+	
+    vx_status status = vxSetImagePixelValues(image, &vals);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, status);
+
+    ASSERT_NO_FAILURE(ctimg = ct_image_from_vx_image(image));
+
+    ASSERT_NO_FAILURE(refimg = ct_allocate_image(640, 480, arg_->format));
+	
+    switch (arg_->format)
+    {
+        case VX_DF_IMAGE_U8:
+            ct_memset(refimg->data.y, vals.U8, 640*480);
+            break;
+        case VX_DF_IMAGE_U16:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.u16[i] = vals.U16;
+            break;
+        case VX_DF_IMAGE_S16:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.s16[i] = vals.S16;
+            break;
+        case VX_DF_IMAGE_U32:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.u32[i] = vals.U32;
+            break;
+        case VX_DF_IMAGE_S32:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.s32[i] = vals.S32;
+            break;
+        case VX_DF_IMAGE_RGB:
+            for (i = 0; i < 640*480; ++i)
+            {
+                refimg->data.rgb[i].r = vals.RGB[0];
+                refimg->data.rgb[i].g = vals.RGB[1];
+                refimg->data.rgb[i].b = vals.RGB[2];
+            }
+            break;
+        case VX_DF_IMAGE_RGBX:
+            for (i = 0; i < 640*480; ++i)
+            {
+                refimg->data.rgbx[i].r = vals.RGBX[0];
+                refimg->data.rgbx[i].g = vals.RGBX[1];
+                refimg->data.rgbx[i].b = vals.RGBX[2];
+                refimg->data.rgbx[i].x = vals.RGBX[3];
+            }
+            break;
+        case VX_DF_IMAGE_YUV4:
+            ct_memset(refimg->data.y + 640*480*0, vals.YUV[0], 640*480);
+            ct_memset(refimg->data.y + 640*480*1, vals.YUV[1], 640*480);
+            ct_memset(refimg->data.y + 640*480*2, vals.YUV[2], 640*480);
+            break;
+        case VX_DF_IMAGE_IYUV:
+            ct_memset(refimg->data.y, vals.YUV[0], 640 * 480);
+            ct_memset(refimg->data.y + 640*480, vals.YUV[1], 640/2*480/2);
+            ct_memset(refimg->data.y + 640*480 + 640/2*480/2, vals.YUV[2], 640/2*480/2);
+            break;
+        case VX_DF_IMAGE_NV12:
+            ct_memset(refimg->data.y, vals.YUV[0], 640 * 480);
+            for (i = 0; i < 640/2*480/2; ++i)
+            {
+                refimg->data.y[640*480 + 2 * i + 0] = vals.YUV[1];
+                refimg->data.y[640*480 + 2 * i + 1] = vals.YUV[2];
+            }
+            break;
+        case VX_DF_IMAGE_NV21:
+            ct_memset(refimg->data.y, vals.YUV[0], 640 * 480);
+            for (i = 0; i < 640/2*480/2; ++i)
+            {
+                refimg->data.y[640*480 + 2 * i + 0] = vals.YUV[2];
+                refimg->data.y[640*480 + 2 * i + 1] = vals.YUV[1];
+            }
+            break;
+        case VX_DF_IMAGE_YUYV:
+            for (i = 0; i < 640/2*480; ++i)
+            {
+                refimg->data.yuyv[i].y0 = vals.YUV[0];
+                refimg->data.yuyv[i].y1 = vals.YUV[0];
+                refimg->data.yuyv[i].u = vals.YUV[1];
+                refimg->data.yuyv[i].v = vals.YUV[2];
+            }
+            break;
+        case VX_DF_IMAGE_UYVY:
+            for (i = 0; i < 640/2*480; ++i)
+            {
+                refimg->data.uyvy[i].y0 = vals.YUV[0];
+                refimg->data.uyvy[i].y1 = vals.YUV[0];
+                refimg->data.uyvy[i].u = vals.YUV[1];
+                refimg->data.uyvy[i].v = vals.YUV[2];
+            }
+            break;
+    };
+
+    EXPECT_EQ_CTIMAGE(refimg, ctimg);
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+}
+
+TEST_WITH_ARG(Image, testUniformImage, format_arg,
+    ARG_ENUM(VX_DF_IMAGE_U8),
+    ARG_ENUM(VX_DF_IMAGE_U16),
+    ARG_ENUM(VX_DF_IMAGE_S16),
+    ARG_ENUM(VX_DF_IMAGE_U32),
+    ARG_ENUM(VX_DF_IMAGE_S32),
+    ARG_ENUM(VX_DF_IMAGE_RGB),
+    ARG_ENUM(VX_DF_IMAGE_RGBX),
+    ARG_ENUM(VX_DF_IMAGE_NV12),
+    ARG_ENUM(VX_DF_IMAGE_NV21),
+    ARG_ENUM(VX_DF_IMAGE_UYVY),
+    ARG_ENUM(VX_DF_IMAGE_YUYV),
+    ARG_ENUM(VX_DF_IMAGE_IYUV),
+    ARG_ENUM(VX_DF_IMAGE_YUV4),
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0;
+    CT_Image   ctimg   = 0;
+    CT_Image   refimg  = 0;
+    int i;
+
+    vx_pixel_value_t vals;
+
+    vals.reserved[0] = 0x11;
+    vals.reserved[1] = 0x22;
+    vals.reserved[2] = 0x33;
+    vals.reserved[3] = 0x44;
+
+    ASSERT_VX_OBJECT(image = vxCreateUniformImage(context, 640, 480, arg_->format, &vals), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(ctimg = ct_image_from_vx_image(image));
+
+    ASSERT_NO_FAILURE(refimg = ct_allocate_image(640, 480, arg_->format));
+
+    switch (arg_->format)
+    {
+        case VX_DF_IMAGE_U8:
+            ct_memset(refimg->data.y, vals.U8, 640*480);
+            break;
+        case VX_DF_IMAGE_U16:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.u16[i] = vals.U16;
+            break;
+        case VX_DF_IMAGE_S16:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.s16[i] = vals.S16;
+            break;
+        case VX_DF_IMAGE_U32:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.u32[i] = vals.U32;
+            break;
+        case VX_DF_IMAGE_S32:
+            for (i = 0; i < 640*480; ++i)
+                refimg->data.s32[i] = vals.S32;
+            break;
+        case VX_DF_IMAGE_RGB:
+            for (i = 0; i < 640*480; ++i)
+            {
+                refimg->data.rgb[i].r = vals.RGB[0];
+                refimg->data.rgb[i].g = vals.RGB[1];
+                refimg->data.rgb[i].b = vals.RGB[2];
+            }
+            break;
+        case VX_DF_IMAGE_RGBX:
+            for (i = 0; i < 640*480; ++i)
+            {
+                refimg->data.rgbx[i].r = vals.RGBX[0];
+                refimg->data.rgbx[i].g = vals.RGBX[1];
+                refimg->data.rgbx[i].b = vals.RGBX[2];
+                refimg->data.rgbx[i].x = vals.RGBX[3];
+            }
+            break;
+        case VX_DF_IMAGE_YUV4:
+            ct_memset(refimg->data.y + 640*480*0, vals.YUV[0], 640*480);
+            ct_memset(refimg->data.y + 640*480*1, vals.YUV[1], 640*480);
+            ct_memset(refimg->data.y + 640*480*2, vals.YUV[2], 640*480);
+            break;
+        case VX_DF_IMAGE_IYUV:
+            ct_memset(refimg->data.y, vals.YUV[0], 640 * 480);
+            ct_memset(refimg->data.y + 640*480, vals.YUV[1], 640/2*480/2);
+            ct_memset(refimg->data.y + 640*480 + 640/2*480/2, vals.YUV[2], 640/2*480/2);
+            break;
+        case VX_DF_IMAGE_NV12:
+            ct_memset(refimg->data.y, vals.YUV[0], 640 * 480);
+            for (i = 0; i < 640/2*480/2; ++i)
+            {
+                refimg->data.y[640*480 + 2 * i + 0] = vals.YUV[1];
+                refimg->data.y[640*480 + 2 * i + 1] = vals.YUV[2];
+            }
+            break;
+        case VX_DF_IMAGE_NV21:
+            ct_memset(refimg->data.y, vals.YUV[0], 640 * 480);
+            for (i = 0; i < 640/2*480/2; ++i)
+            {
+                refimg->data.y[640*480 + 2 * i + 0] = vals.YUV[2];
+                refimg->data.y[640*480 + 2 * i + 1] = vals.YUV[1];
+            }
+            break;
+        case VX_DF_IMAGE_YUYV:
+            for (i = 0; i < 640/2*480; ++i)
+            {
+                refimg->data.yuyv[i].y0 = vals.YUV[0];
+                refimg->data.yuyv[i].y1 = vals.YUV[0];
+                refimg->data.yuyv[i].u = vals.YUV[1];
+                refimg->data.yuyv[i].v = vals.YUV[2];
+            }
+            break;
+        case VX_DF_IMAGE_UYVY:
+            for (i = 0; i < 640/2*480; ++i)
+            {
+                refimg->data.uyvy[i].y0 = vals.YUV[0];
+                refimg->data.uyvy[i].y1 = vals.YUV[0];
+                refimg->data.uyvy[i].u = vals.YUV[1];
+                refimg->data.uyvy[i].v = vals.YUV[2];
+            }
+            break;
+    };
+
+    EXPECT_EQ_CTIMAGE(refimg, ctimg);
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+} /* testUniformImage() */
+
+static void mem_free(void**ptr)
+{
+    ct_free_mem(*ptr);
+    *ptr = 0;
+}
+
+TEST(Image, testComputeImagePatchSize)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0;
+    vx_pixel_value_t val = {{ 0xAB }};
+    vx_size memsz;
+    vx_size count_pixels = 0;
+    vx_uint32 i;
+    vx_uint32 j;
+    vx_uint8* buffer;
+    vx_uint8* buffer0;
+    vx_rectangle_t rect             = { 0, 0, 640, 480 };
+    vx_imagepatch_addressing_t addr = { 640, 480, 1, 640 };
+
+    ASSERT_VX_OBJECT(image = vxCreateUniformImage(context, 640, 480, VX_DF_IMAGE_U8, &val), VX_TYPE_IMAGE);
+
+    memsz = vxComputeImagePatchSize(image, &rect, 0);
+    ASSERT(memsz >= 640*480);
+
+    ASSERT(buffer = ct_alloc_mem(memsz));
+    CT_RegisterForGarbageCollection(buffer, mem_free, CT_GC_OBJECT);
+    buffer0 = buffer;
+
+    // copy image data to our buffer
+    VX_CALL(vxCopyImagePatch(image, &rect, 0, &addr, buffer, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+    ASSERT_EQ_PTR(buffer0, buffer);
+
+    for (i = 0; i < 480; ++i)
+    {
+        for (j = 0; j < 640; ++j)
+        {
+            vx_uint8* ptr = buffer + i * addr.stride_y + j;
+
+            // no out-of-bound access
+            ASSERT(ptr >= buffer && (vx_size)(ptr - buffer) < memsz);
+
+            count_pixels += (*ptr == val.U8);
+        }
+    }
+
+    ASSERT_EQ_INT(640*480, count_pixels);
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+} /* testComputeImagePatchSize() */
+
+#define IMAGE_SIZE_X 320
+#define IMAGE_SIZE_Y 200
+#define PATCH_SIZE_X 33
+#define PATCH_SIZE_Y 12
+#define PATCH_ORIGIN_X 51
+#define PATCH_ORIGIN_Y 15
+
+TEST(Image, testAccessCopyWrite)
+{
+    vx_context context = context_->vx_context_;
+    vx_uint8 *localPatchDense = ct_alloc_mem(PATCH_SIZE_X*PATCH_SIZE_Y*sizeof(vx_uint8));
+    vx_uint8 *localPatchSparse = ct_alloc_mem(PATCH_SIZE_X*PATCH_SIZE_Y*3*3*sizeof(vx_uint8));
+    vx_image image;
+    int x, y;
+    vx_map_id map_id;
+
+    ASSERT_VX_OBJECT( image = vxCreateImage(context, IMAGE_SIZE_X, IMAGE_SIZE_Y, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    /* Image Initialization */
+    {
+        vx_rectangle_t rectFull = {0, 0, IMAGE_SIZE_X, IMAGE_SIZE_Y};
+        vx_imagepatch_addressing_t addrFull;
+        vx_uint8 *p = NULL, *pLine, *pPixel = NULL;
+        VX_CALL( vxMapImagePatch(image, &rectFull, 0, &map_id, &addrFull, (void **)&p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        for (y = 0, pLine = p; y < IMAGE_SIZE_Y; y++, pLine += addrFull.stride_y) {
+            for (x = 0, pPixel = pLine; x < IMAGE_SIZE_X; x++, pPixel += addrFull.stride_x) {
+                *pPixel = 0;
+            }
+        }
+        VX_CALL( vxUnmapImagePatch(image, map_id));
+
+        /* Buffer Initialization */
+        for (y = 0; y < PATCH_SIZE_Y; y++) {
+            for (x = 0; x < PATCH_SIZE_X; x++) {
+                localPatchDense[x + y*PATCH_SIZE_X] = x + y;
+
+                localPatchSparse[3*x + 3*y*3*PATCH_SIZE_X] = 2*(x + y);
+                localPatchSparse[(3*x+1) + 3*y*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[(3*x+2) + 3*y*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x + (3*y+1)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[(3*x+1) + (3*y+1)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[(3*x+2) + (3*y+1)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x + (3*y+2)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[(3*x+1) + (3*y+2)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[(3*x+2) + (3*y+2)*3*PATCH_SIZE_X] = 0;
+            }
+        }
+    }
+
+    /* Write, COPY, No spacing */
+    {
+        vx_rectangle_t rectPatch = {PATCH_ORIGIN_X, PATCH_ORIGIN_Y, PATCH_ORIGIN_X+PATCH_SIZE_X, PATCH_ORIGIN_Y+PATCH_SIZE_Y};
+        vx_imagepatch_addressing_t addrPatch = {PATCH_SIZE_X, PATCH_SIZE_Y,
+                                                sizeof(vx_uint8), PATCH_SIZE_X*sizeof(vx_uint8),
+                                                VX_SCALE_UNITY, VX_SCALE_UNITY,
+                                                1, 1 };
+        vx_uint8 *p = &localPatchDense[0];
+        VX_CALL( vxCopyImagePatch(image, &rectPatch, 0, &addrPatch, (void *)p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localPatchDense[0]);
+    }
+    /* Check (MAP) */
+    {
+        vx_rectangle_t rectFull = {0, 0, IMAGE_SIZE_X, IMAGE_SIZE_Y};
+        vx_imagepatch_addressing_t addrFull;
+        vx_uint8 *p = NULL, *pLine, *pPixel = NULL;
+        VX_CALL( vxMapImagePatch(image, &rectFull, 0, &map_id, &addrFull, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        for (y = 0, pLine = p; y < IMAGE_SIZE_Y; y++, pLine += addrFull.stride_y) {
+            for (x = 0, pPixel = pLine; x < IMAGE_SIZE_X; x++, pPixel += addrFull.stride_x) {
+                if ( (x<PATCH_ORIGIN_X) || (x>=PATCH_ORIGIN_X+PATCH_SIZE_X) ||
+                     (y<PATCH_ORIGIN_Y) || (y>=PATCH_ORIGIN_Y+PATCH_SIZE_Y) ) {
+                    ASSERT( *pPixel == 0);
+                }
+                else {
+                    ASSERT( *pPixel == (x + y - PATCH_ORIGIN_X - PATCH_ORIGIN_Y));
+                }
+            }
+        }
+        VX_CALL( vxUnmapImagePatch(image, map_id));
+    }
+
+
+    /* Write, COPY, Spacing */
+    {
+        vx_rectangle_t rectPatch = {PATCH_ORIGIN_X, PATCH_ORIGIN_Y, PATCH_ORIGIN_X+PATCH_SIZE_X, PATCH_ORIGIN_Y+PATCH_SIZE_Y};
+        vx_imagepatch_addressing_t addrPatch = {PATCH_SIZE_X, PATCH_SIZE_Y,
+                                                3*sizeof(vx_uint8), 3*3*PATCH_SIZE_X*sizeof(vx_uint8),
+                                                VX_SCALE_UNITY, VX_SCALE_UNITY,
+                                                1, 1 };
+        vx_uint8 *p = &localPatchSparse[0];
+        VX_CALL( vxCopyImagePatch(image, &rectPatch, 0, &addrPatch, (void *)p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localPatchSparse[0]);
+    }
+    /* Check (MAP) */
+    {
+        vx_rectangle_t rectFull = {0, 0, IMAGE_SIZE_X, IMAGE_SIZE_Y};
+        vx_imagepatch_addressing_t addrFull;
+        vx_uint8 *p = NULL, *pLine, *pPixel = NULL;
+        VX_CALL( vxMapImagePatch(image, &rectFull, 0, &map_id, &addrFull, (void **)&p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        for (y = 0, pLine = p; y < IMAGE_SIZE_Y; y++, pLine += addrFull.stride_y) {
+            for (x = 0, pPixel = pLine; x < IMAGE_SIZE_X; x++, pPixel += addrFull.stride_x) {
+                if ( (x<PATCH_ORIGIN_X) || (x>=PATCH_ORIGIN_X+PATCH_SIZE_X) ||
+                     (y<PATCH_ORIGIN_Y) || (y>=PATCH_ORIGIN_Y+PATCH_SIZE_Y) ) {
+                    ASSERT( *pPixel == 0);
+                }
+                else {
+                    ASSERT( *pPixel == (2*(x + y - PATCH_ORIGIN_X - PATCH_ORIGIN_Y)));
+                }
+            }
+        }
+        VX_CALL( vxUnmapImagePatch(image, map_id));
+    }
+
+
+
+    VX_CALL( vxReleaseImage(&image) );
+    ASSERT( image == 0);
+
+    ct_free_mem(localPatchDense);
+    ct_free_mem(localPatchSparse);
+} /* testAccessCopyWrite() */
+
+TEST(Image, testAccessCopyRead)
+{
+    vx_context context = context_->vx_context_;
+    vx_uint8 *localPatchDense = ct_alloc_mem(PATCH_SIZE_X*PATCH_SIZE_Y*sizeof(vx_uint8));
+    vx_uint8 *localPatchSparse = ct_alloc_mem(PATCH_SIZE_X*PATCH_SIZE_Y*3*3*sizeof(vx_uint8));
+    vx_image image;
+    int x, y;
+    vx_map_id map_id;
+
+    ASSERT_VX_OBJECT( image = vxCreateImage(context, IMAGE_SIZE_X, IMAGE_SIZE_Y, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+
+    /* Image Initialization */
+    {
+        vx_rectangle_t rectFull = {0, 0, IMAGE_SIZE_X, IMAGE_SIZE_Y};
+        vx_imagepatch_addressing_t addrFull;
+        vx_uint8 *p = NULL, *pLine, *pPixel = NULL;
+        VX_CALL( vxMapImagePatch(image, &rectFull, 0, &map_id, &addrFull, (void **)&p, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X));
+        for (y = 0, pLine = p; y < IMAGE_SIZE_Y; y++, pLine += addrFull.stride_y) {
+            for (x = 0, pPixel = pLine; x < IMAGE_SIZE_X; x++, pPixel += addrFull.stride_x) {
+                *pPixel = x + y;
+            }
+        }
+        VX_CALL( vxUnmapImagePatch(image, map_id));
+
+        /* Buffer Initialization */
+        for (y = 0; y < PATCH_SIZE_Y; y++) {
+            for (x = 0; x < PATCH_SIZE_X; x++) {
+                localPatchDense[x + y*PATCH_SIZE_X] = 0;
+
+                localPatchSparse[3*x + 3*y*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x+1 + 3*y*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x+2 + 3*y*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x + (3*y+1)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x+1 + (3*y+1)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x+2 + (3*y+1)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x + (3*y+2)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x+1 + (3*y+2)*3*PATCH_SIZE_X] = 0;
+                localPatchSparse[3*x+2 + (3*y+2)*3*PATCH_SIZE_X] = 0;
+            }
+        }
+    }
+
+    /* READ, COPY, No spacing */
+    {
+        vx_rectangle_t rectPatch = {PATCH_ORIGIN_X, PATCH_ORIGIN_Y, PATCH_ORIGIN_X+PATCH_SIZE_X, PATCH_ORIGIN_Y+PATCH_SIZE_Y};
+        vx_imagepatch_addressing_t addrPatch = {PATCH_SIZE_X, PATCH_SIZE_Y,
+                                                sizeof(vx_uint8), PATCH_SIZE_X*sizeof(vx_uint8),
+                                                VX_SCALE_UNITY, VX_SCALE_UNITY,
+                                                1, 1 };
+        vx_uint8 *p = &localPatchDense[0];
+        VX_CALL( vxCopyImagePatch(image, &rectPatch, 0, &addrPatch, (void *)p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localPatchDense[0]);
+        ASSERT(addrPatch.stride_x == sizeof(vx_uint8));
+        ASSERT(addrPatch.stride_y == PATCH_SIZE_X*sizeof(vx_uint8));
+    }
+    /* Check */
+    for (y = 0; y < PATCH_SIZE_Y; y++) {
+        for (x = 0; x < PATCH_SIZE_X; x++) {
+            ASSERT(localPatchDense[x + y*PATCH_SIZE_X] == x + y + PATCH_ORIGIN_X + PATCH_ORIGIN_Y);
+        }
+    }
+
+    /* READ, COPY, Spacing */
+    {
+        vx_rectangle_t rectPatch = {PATCH_ORIGIN_X, PATCH_ORIGIN_Y, PATCH_ORIGIN_X+PATCH_SIZE_X, PATCH_ORIGIN_Y+PATCH_SIZE_Y};
+        vx_imagepatch_addressing_t addrPatch = {PATCH_SIZE_X, PATCH_SIZE_Y,
+                                                3*sizeof(vx_uint8), 3*3*PATCH_SIZE_X*sizeof(vx_uint8),
+                                                VX_SCALE_UNITY, VX_SCALE_UNITY,
+                                                1, 1 };
+        vx_uint8 *p = &localPatchSparse[0];
+        VX_CALL( vxCopyImagePatch(image, &rectPatch, 0, &addrPatch, (void *)p, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+        ASSERT(p == &localPatchSparse[0]);
+        ASSERT(addrPatch.stride_x == 3*sizeof(vx_uint8));
+        ASSERT(addrPatch.stride_y == 3*3*PATCH_SIZE_X*sizeof(vx_uint8));
+    }
+    /* Check */
+    for (y = 0; y < PATCH_SIZE_Y; y++) {
+        for (x = 0; x < PATCH_SIZE_X; x++) {
+            ASSERT(localPatchSparse[3*x + 3*y*3*PATCH_SIZE_X] == x + y + PATCH_ORIGIN_X + PATCH_ORIGIN_Y);
+            ASSERT(localPatchSparse[3*x+1 + 3*y*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x+2 + 3*y*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x + (3*y+1)*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x+1 + (3*y+1)*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x+2 + (3*y+1)*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x + (3*y+2)*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x+1 + (3*y+2)*3*PATCH_SIZE_X] == 0);
+            ASSERT(localPatchSparse[3*x+2 + (3*y+2)*3*PATCH_SIZE_X] == 0);
+        }
+    }
+
+    VX_CALL( vxReleaseImage(&image) );
+    ASSERT( image == 0);
+
+    ct_free_mem(localPatchDense);
+    ct_free_mem(localPatchSparse);
+} /* testAccessCopyRead() */
+
+TEST(Image, testAccessCopyWriteUniformImage)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0;
+    vx_uint32 width = 320;
+    vx_uint32 height = 240;
+    vx_map_id map_id;
+
+    vx_pixel_value_t vals = {{0xFF}};
+    ASSERT_VX_OBJECT(image = vxCreateUniformImage(context, width, height, VX_DF_IMAGE_U8, &vals), VX_TYPE_IMAGE);
+    vx_rectangle_t rect = {0, 0, 320, 240};
+    vx_imagepatch_addressing_t addr;
+    vx_uint8 *internal_data = NULL;
+    //can get read-access
+    vx_status status = vxMapImagePatch(image, &rect, 0, &map_id, &addr, (void **)&internal_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, status);
+    status = vxUnmapImagePatch(image, map_id);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, status);
+    //can not get write-access
+    vx_uint32 roi_width = 128;
+    vx_uint32 roi_height = 128;
+    vx_rectangle_t roi_rect = {0, 0, roi_width, roi_height};
+    vx_uint8 *external_data = (vx_uint8 *)ct_alloc_mem(roi_width * roi_height * sizeof(vx_uint8));
+
+    //Write is not be allowed for uniformimage
+    status = vxCopyImagePatch(image, &roi_rect, 0, &addr, (void *)external_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, status);
+
+    //ok to read
+    status = vxCopyImagePatch(image, &roi_rect, 0, &addr, (void *)external_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, status);
+
+    //test ROI image(from uniform image), behaviour must be equal to uniform image
+    vx_image roi_image = 0;
+    internal_data = NULL;
+
+    ASSERT_VX_OBJECT(roi_image = vxCreateImageFromROI(image, &roi_rect), VX_TYPE_IMAGE);
+    status = vxMapImagePatch(roi_image, &roi_rect, 0, &map_id, &addr, (void **)&internal_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, status);
+    status = vxUnmapImagePatch(roi_image, map_id);
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, status);
+
+    status = vxCopyImagePatch(roi_image, &roi_rect, 0, &addr, (void *)external_data, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, status);
+
+    status = vxCopyImagePatch(roi_image, &roi_rect, 0, &addr, (void *)external_data, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+    ASSERT_NE_VX_STATUS(VX_SUCCESS, status);
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&image));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxReleaseImage(&roi_image));
+    ASSERT(image == 0);
+    ASSERT(roi_image == 0);
+
+    ct_free_mem(external_data);
+} /* testAccessCopyWriteUniformImage() */
+
+TEST(Image, testQueryImage)
+{
+    vx_context context = context_->vx_context_;
+    vx_image   image   = 0;
+    vx_df_image format = 0;
+    vx_uint32 width = 0;
+    vx_uint32 height = 0;
+    vx_size planes = 0;
+    vx_enum space = 0;
+    vx_enum range = 0;
+    vx_enum memory_type = 0;
+
+    image = vxCreateImage(context, 640, 480, VX_DF_IMAGE_U8);
+
+    ASSERT_VX_OBJECT(image, VX_TYPE_IMAGE);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_FORMAT,  &format,  sizeof(format)));
+    ASSERT_EQ_INT(VX_DF_IMAGE_U8, format);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_WIDTH,  &width,  sizeof(width)));
+    ASSERT_EQ_INT(640, width);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)));
+    ASSERT_EQ_INT(480, height);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_PLANES,  &planes,  sizeof(planes)));
+    ASSERT_EQ_INT(1, planes);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_SPACE,  &space,  sizeof(space)));
+    ASSERT_EQ_INT(VX_COLOR_SPACE_NONE, space);
+
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_RANGE,  &range,  sizeof(range)));
+    ASSERT_EQ_INT(VX_CHANNEL_RANGE_FULL, range);
+/* commented out untill spec clarifies VX_IMAGE_SIZE in more details:
+   - is that memory size actually allocated
+   - is that min number of bytes to store pixels
+   - is that number of bytes it would occupy in memory once allocated (with strides)
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_SIZE,  &image_size,  sizeof(image_size)));
+    ASSERT_EQ_INT(0, image_size);
+*/
+    ASSERT_EQ_VX_STATUS(VX_SUCCESS, vxQueryImage(image, VX_IMAGE_MEMORY_TYPE,  &memory_type,  sizeof(memory_type)));
+    ASSERT_EQ_INT(VX_MEMORY_TYPE_NONE, memory_type);
+
+    VX_CALL(vxReleaseImage(&image));
+} /* testQueryImage() */
+
+
+/*
+// Check image patch data in user memory against constant pixel value
+// Note:
+//  can't use vxFormatImagePatchAddress2d for user memory layout
+*/
+void own_check_image_patch_uniform(vx_pixel_value_t* ref_val, void* ptr, vx_imagepatch_addressing_t* addr, vx_uint32 plane, vx_df_image format)
+{
+    vx_uint32 x;
+    vx_uint32 y;
+
+    for (y = 0; y < addr->dim_y; y++)
+    {
+        for (x = 0; x < addr->dim_x; x++)
+        {
+            switch (format)
+            {
+            case VX_DF_IMAGE_U8:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                vx_uint8  ref = ref_val->U8;
+                ASSERT_EQ_INT(ref, tst[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_U16:
+            {
+                vx_uint16* tst = (vx_uint16*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                vx_uint16  ref = ref_val->U16;
+                ASSERT_EQ_INT(ref, tst[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_S16:
+            {
+                vx_int16* tst = (vx_int16*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                vx_int16  ref = ref_val->S16;
+                ASSERT_EQ_INT(ref, tst[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_U32:
+            {
+                vx_uint32* tst = (vx_uint32*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                vx_uint32  ref = ref_val->U32;
+                ASSERT_EQ_INT(ref, tst[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_S32:
+            {
+                vx_int32* tst = (vx_int32*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                vx_int32  ref = ref_val->S32;
+                ASSERT_EQ_INT(ref, tst[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_RGB:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                ASSERT_EQ_INT(ref_val->RGB[0], tst[0]);
+                ASSERT_EQ_INT(ref_val->RGB[1], tst[1]);
+                ASSERT_EQ_INT(ref_val->RGB[2], tst[2]);
+            }
+            break;
+
+            case VX_DF_IMAGE_RGBX:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                ASSERT_EQ_INT(ref_val->RGBX[0], tst[0]);
+                ASSERT_EQ_INT(ref_val->RGBX[1], tst[1]);
+                ASSERT_EQ_INT(ref_val->RGBX[2], tst[2]);
+                ASSERT_EQ_INT(ref_val->RGBX[3], tst[3]);
+            }
+            break;
+
+            case VX_DF_IMAGE_YUYV:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+
+                vx_uint8 tst_u_or_v = tst[1];
+
+                ASSERT_EQ_INT(ref_val->YUV[0], tst[0]); // Y
+
+                if (x & 1)
+                    ASSERT_EQ_INT(ref_val->YUV[2], tst_u_or_v); // V
+                else
+                    ASSERT_EQ_INT(ref_val->YUV[1], tst_u_or_v); // U
+            }
+            break;
+
+            case VX_DF_IMAGE_UYVY:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+
+                vx_uint8 tst_u_or_v = tst[0];
+
+                ASSERT_EQ_INT(ref_val->YUV[0], tst[1]); // Y
+
+                if (x & 1)
+                    ASSERT_EQ_INT(ref_val->YUV[2], tst_u_or_v); // V
+                else
+                    ASSERT_EQ_INT(ref_val->YUV[1], tst_u_or_v); // U
+            }
+            break;
+
+            case VX_DF_IMAGE_NV12:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+
+                if (0 == plane)
+                    ASSERT_EQ_INT(ref_val->YUV[0], tst[0]); // Y
+                else
+                {
+                    ASSERT_EQ_INT(ref_val->YUV[1], tst[0]); // U
+                    ASSERT_EQ_INT(ref_val->YUV[2], tst[1]); // V
+                }
+            }
+            break;
+
+            case VX_DF_IMAGE_NV21:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+
+                if (0 == plane)
+                    ASSERT_EQ_INT(ref_val->YUV[0], tst[0]); // Y
+                else
+                {
+                    ASSERT_EQ_INT(ref_val->YUV[1], tst[1]); // U
+                    ASSERT_EQ_INT(ref_val->YUV[2], tst[0]); // V
+                }
+            }
+            break;
+
+            case VX_DF_IMAGE_YUV4:
+            case VX_DF_IMAGE_IYUV:
+            {
+                vx_uint8* tst = (vx_uint8*)((vx_uint8*)ptr + y * addr->stride_y + x * addr->stride_x);
+                ASSERT_EQ_INT(ref_val->YUV[plane], tst[0]);
+            }
+            break;
+
+            default:
+                FAIL("unexpected image format: (%.4s)", format);
+            break;
+            } /* switch format */
+        } /* for addr.dim_x */
+    } /* for addr.dim_y */
+
+    return;
+} /* own_check_image_patch_uniform() */
+
+/*
+//  Fill image patch info according to user memory layout
+*/
+void own_image_patch_from_ct_image(CT_Image ref, vx_imagepatch_addressing_t* ref_addr, void** ref_ptrs, vx_df_image format)
+{
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+    {
+        ref_addr[0].dim_x   = ref->width;
+        ref_addr[0].dim_y   = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.y;
+    }
+    break;
+
+    case VX_DF_IMAGE_U16:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_uint16);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_uint16);
+
+        ref_ptrs[0] = ref->data.u16;
+    }
+    break;
+
+    case VX_DF_IMAGE_S16:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_int16);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_int16);
+
+        ref_ptrs[0] = ref->data.s16;
+    }
+    break;
+
+    case VX_DF_IMAGE_U32:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_uint32);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_uint32);
+
+        ref_ptrs[0] = ref->data.u32;
+    }
+    break;
+
+    case VX_DF_IMAGE_S32:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_int32);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_int32);
+
+        ref_ptrs[0] = ref->data.s32;
+    }
+    break;
+
+    case VX_DF_IMAGE_RGB:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = 3 * sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * 3 * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.rgb;
+    }
+    break;
+
+    case VX_DF_IMAGE_RGBX:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = 4 * sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * 4 * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.rgbx;
+    }
+    break;
+
+    case VX_DF_IMAGE_UYVY:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = 2 * sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * 2 * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.uyvy;
+    }
+    break;
+
+    case VX_DF_IMAGE_YUYV:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = 2 * sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * 2 * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.yuyv;
+    }
+    break;
+
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.yuv;
+
+        ref_addr[1].dim_x    = ref->width / 2;
+        ref_addr[1].dim_y    = ref->height / 2;
+        ref_addr[1].stride_x = 2 * sizeof(vx_uint8);
+        ref_addr[1].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[1] = (vx_uint8*)((vx_uint8*)ref->data.yuv + ref->height * ref->stride * sizeof(vx_uint8));
+    }
+    break;
+
+    case VX_DF_IMAGE_YUV4:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[0] = (vx_uint8*)((vx_uint8*)ref->data.yuv + 0 * ref->height * ref->stride * sizeof(vx_uint8));
+
+        ref_addr[1].dim_x    = ref->width;
+        ref_addr[1].dim_y    = ref->height;
+        ref_addr[1].stride_x = sizeof(vx_uint8);
+        ref_addr[1].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[1] = (vx_uint8*)((vx_uint8*)ref->data.yuv + 1 * ref->height * ref->stride * sizeof(vx_uint8));
+
+        ref_addr[2].dim_x    = ref->width;
+        ref_addr[2].dim_y    = ref->height;
+        ref_addr[2].stride_x = sizeof(vx_uint8);
+        ref_addr[2].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[2] = (vx_uint8*)((vx_uint8*)ref->data.yuv + 2 * ref->height * ref->stride * sizeof(vx_uint8));
+    }
+    break;
+
+    case VX_DF_IMAGE_IYUV:
+    {
+        ref_addr[0].dim_x    = ref->width;
+        ref_addr[0].dim_y    = ref->height;
+        ref_addr[0].stride_x = sizeof(vx_uint8);
+        ref_addr[0].stride_y = ref->stride * sizeof(vx_uint8);
+
+        ref_ptrs[0] = ref->data.yuv;
+
+        ref_addr[1].dim_x    = ref->width / 2;
+        ref_addr[1].dim_y    = ref->height / 2;
+        ref_addr[1].stride_x = sizeof(vx_uint8);
+        ref_addr[1].stride_y = (ref->width / 2) * sizeof(vx_uint8);
+
+        ref_ptrs[1] = (vx_uint8*)((vx_uint8*)ref->data.yuv + ref->height * ref->stride * sizeof(vx_uint8));
+
+        ref_addr[2].dim_x    = ref->width / 2;
+        ref_addr[2].dim_y    = ref->height / 2;
+        ref_addr[2].stride_x = sizeof(vx_uint8);
+        ref_addr[2].stride_y = (ref->width / 2) * sizeof(vx_uint8);
+
+        ref_ptrs[2] = (vx_uint8*)((vx_uint8*)ref->data.yuv +
+            ref->height * ref->stride * sizeof(vx_uint8) +
+            (ref->height / 2) * (ref->width / 2) * sizeof(vx_uint8));
+    }
+    break;
+
+    default:
+        FAIL("unexpected image format: (%.4s)", format);
+        break;
+    } /* switch format */
+
+    return;
+} /* own_image_patch_from_ct_image() */
+
+void own_check_image_patch_plane_user_layout(CT_Image ref, vx_imagepatch_addressing_t* tst_addr, void* ptr, vx_uint32 plane, vx_df_image format)
+{
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 elem_size = own_elem_size(format, plane);
+
+    for (y = 0; y < tst_addr->dim_y; y++)
+    {
+        for (x = 0; x < tst_addr->dim_x; x++)
+        {
+            switch (format)
+            {
+            case VX_DF_IMAGE_U8:
+            {
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.y + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_U16:
+            {
+                vx_uint16* tst_ptr = (vx_uint16*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint16* ref_ptr = (vx_uint16*)((vx_uint8*)ref->data.u16 + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_S16:
+            {
+                vx_int16* tst_ptr = (vx_int16*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_int16* ref_ptr = (vx_int16*)((vx_uint8*)ref->data.s16 + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_U32:
+            {
+                vx_uint32* tst_ptr = (vx_uint32*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint32* ref_ptr = (vx_uint32*)((vx_uint8*)ref->data.u32 + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_S32:
+            {
+                vx_int32* tst_ptr = (vx_int32*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_int32* ref_ptr = (vx_int32*)((vx_uint8*)ref->data.s32 + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_RGB:
+            {
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgb + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]);
+                ASSERT_EQ_INT(ref_ptr[2], tst_ptr[2]);
+            }
+            break;
+
+            case VX_DF_IMAGE_RGBX:
+            {
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgbx + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]);
+                ASSERT_EQ_INT(ref_ptr[2], tst_ptr[2]);
+                ASSERT_EQ_INT(ref_ptr[3], tst_ptr[3]);
+            }
+            break;
+
+            case VX_DF_IMAGE_YUYV:
+            {
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.yuyv + y * ref->stride * elem_size + x * elem_size);
+
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]); // Y
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]); // U or V
+            }
+            break;
+
+            case VX_DF_IMAGE_UYVY:
+            {
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.uyvy + y * ref->stride * elem_size + x * elem_size);
+
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]); // U or V
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]); // Y
+            }
+            break;
+
+            case VX_DF_IMAGE_NV12:
+            case VX_DF_IMAGE_NV21:
+            {
+                vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride * elem_size + x * elem_size);
+
+                if (0 == plane)
+                    ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]); // Y
+                else
+                {
+                    ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+                    ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]);
+                }
+            }
+            break;
+
+            case VX_DF_IMAGE_IYUV:
+            {
+                vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_YUV4:
+            {
+                vx_uint8* tst_ptr = (vx_uint8*)((vx_uint8*)ptr + y * tst_addr->stride_y + x * tst_addr->stride_x);
+                vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * ref->stride * elem_size + x * elem_size);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            default:
+                FAIL("unexpected image format: (%.4s)", format);
+                break;
+            } /* switch format */
+        } /* for tst_addr.dim_x */
+    } /* for tst_addr.dim_y */
+
+    return;
+} /* own_check_image_patch_plane_user_layout() */
+
+void own_check_image_patch_plane_vx_layout(CT_Image ctimg, vx_imagepatch_addressing_t* vx_addr, void* p_vx_base, vx_uint32 plane, vx_df_image format)
+{
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 ct_elem_size = own_elem_size(format, plane);
+    void*     p_ct_base = ct_image_get_plane_base(ctimg, plane);
+
+    for (y = 0; y < vx_addr->dim_y; y += vx_addr->step_y)
+    {
+        for (x = 0; x < vx_addr->dim_x; x += vx_addr->step_x)
+        {
+            switch (format)
+            {
+            case VX_DF_IMAGE_U8:
+            {
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_U16:
+            {
+                vx_uint16* ref_ptr = (vx_uint16*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint16* tst_ptr = (vx_uint16*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_S16:
+            {
+                vx_int16* ref_ptr = (vx_int16*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_int16* tst_ptr = (vx_int16*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_U32:
+            {
+                vx_uint32* ref_ptr = (vx_uint32*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint32* tst_ptr = (vx_uint32*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_S32:
+            {
+                vx_int32* ref_ptr = (vx_int32*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_int32* tst_ptr = (vx_int32*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_RGB:
+            {
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]);
+                ASSERT_EQ_INT(ref_ptr[2], tst_ptr[2]);
+            }
+            break;
+
+            case VX_DF_IMAGE_RGBX:
+            {
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]);
+                ASSERT_EQ_INT(ref_ptr[2], tst_ptr[2]);
+                ASSERT_EQ_INT(ref_ptr[3], tst_ptr[3]);
+            }
+            break;
+
+            case VX_DF_IMAGE_YUYV:
+            {
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]); // Y
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]); // U or V
+            }
+            break;
+
+            case VX_DF_IMAGE_UYVY:
+            {
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]); // U or V
+                ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]); // Y
+            }
+            break;
+
+            case VX_DF_IMAGE_NV12:
+            case VX_DF_IMAGE_NV21:
+            {
+                vx_uint32 stride = (0 == plane) ? ctimg->stride : ctimg->width / 2;
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * stride + x);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+
+                if (0 == plane)
+                    ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]); // Y
+                else
+                {
+                    ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+                    ASSERT_EQ_INT(ref_ptr[1], tst_ptr[1]);
+                }
+            }
+            break;
+
+            case VX_DF_IMAGE_IYUV:
+            {
+                vx_uint32 stride = (0 == plane) ? ctimg->stride : ctimg->width / 2;
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * stride / vx_addr->step_y + x / vx_addr->step_x);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            case VX_DF_IMAGE_YUV4:
+            {
+                vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, vx_addr);
+                ASSERT_EQ_INT(ref_ptr[0], tst_ptr[0]);
+            }
+            break;
+
+            default:
+                FAIL("unexpected image format: (%.4s)", format);
+                break;
+            } /* switch format */
+        } /* for tst_addr.dim_x */
+    } /* for tst_addr.dim_y */
+
+    return;
+} /* own_check_image_patch_plane_vx_layout() */
+
+
+/* ***************************************************************************
+//  vxCopyImagePatch tests
+*/
+TESTCASE(vxCopyImagePatch, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char* testName;
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} ReadUniformImage_Arg;
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("uniform", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, NULL)
+
+/*
+// test vxCopyImagePatch in READ_ONLY mode from uniform image,
+// independed from vxCopyImagePatch in write mode
+// or vxAccessImagePatch/vxCommitImagePatch functions
+*/
+TEST_WITH_ARG(vxCopyImagePatch, testReadUniformImage, ReadUniformImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    vx_image image = 0;
+    vx_pixel_value_t ref_val;
+
+    ref_val.reserved[0] = 0x55;
+    ref_val.reserved[1] = 0xaa;
+    ref_val.reserved[2] = 0x33;
+    ref_val.reserved[3] = 0x77;
+
+    /* image with reference data */
+    ASSERT_VX_OBJECT(image = vxCreateUniformImage(context, arg_->width, arg_->height, arg_->format, &ref_val), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+        void*   ptr = 0;
+        vx_size sz  = 0;
+
+        sz = vxComputeImagePatchSize(image, &rect, (vx_uint32)plane);
+
+        ptr = ct_alloc_mem(sz);
+        ASSERT(NULL != ptr);
+
+        addr.dim_x    = arg_->width  / own_plane_subsampling_x(arg_->format, plane);
+        addr.dim_y    = arg_->height / own_plane_subsampling_y(arg_->format, plane);
+        addr.stride_x = own_elem_size(arg_->format, plane);
+        addr.stride_y = addr.dim_x * addr.stride_x;
+
+        /* read image patch */
+        VX_CALL(vxCopyImagePatch(image, &rect, plane, &addr, ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+        /* check if equal to reference data */
+        own_check_image_patch_uniform(&ref_val, ptr, &addr, plane, arg_->format);
+
+        ct_free_mem(ptr);
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testReadUniformImage() */
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} ReadRandomImage_Arg;
+
+#ifdef PARAMETERS
+#undef PARAMETERS
+#endif
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxCopyImagePatch, testReadRandomImage, ReadRandomImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    vx_image image = 0;
+    CT_Image ref = 0;
+    vx_imagepatch_addressing_t ref_addr[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    void* ref_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    ASSERT_NO_FAILURE(ref = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    own_image_patch_from_ct_image(ref, ref_addr, ref_ptrs, arg_->format);
+
+    ASSERT_VX_OBJECT(image = vxCreateImageFromHandle(context, arg_->format, ref_addr, ref_ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        void* ptr = 0;
+        vx_size sz = 0;
+        vx_uint32 elem_size = own_elem_size(arg_->format, plane);
+
+        sz = vxComputeImagePatchSize(image, &rect, plane);
+
+        ptr = ct_alloc_mem(sz);
+        ASSERT(NULL != ptr);
+
+        tst_addr.dim_x    = arg_->width  / own_plane_subsampling_x(arg_->format, plane);
+        tst_addr.dim_y    = arg_->height / own_plane_subsampling_y(arg_->format, plane);
+        tst_addr.stride_x = elem_size;
+        tst_addr.stride_y = tst_addr.dim_x * tst_addr.stride_x;
+
+        VX_CALL(vxCopyImagePatch(image, &rect, plane, &tst_addr, ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+        /* check if image patch plane equal to reference data */
+        own_check_image_patch_plane_user_layout(ref, &tst_addr, ptr, plane, arg_->format);
+
+        ct_free_mem(ptr);
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testReadRandomImage() */
+
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} WriteRandomImage_Arg;
+
+#ifdef PARAMETERS
+#undef PARAMETERS
+#endif
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxCopyImagePatch, testWriteRandomImage, WriteRandomImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    vx_image image = 0;
+    CT_Image ref = 0;
+    vx_rectangle_t rect = { 0, 0, arg_->width, arg_->height };
+    vx_imagepatch_addressing_t ref_addr[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    void* ref_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    ASSERT_NO_FAILURE(ref = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, arg_->width, arg_->height, arg_->format), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    own_image_patch_from_ct_image(ref, ref_addr, ref_ptrs, arg_->format);
+
+    /* write reference data to image */
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        VX_CALL(vxCopyImagePatch(image, &rect, plane, &ref_addr[plane], ref_ptrs[plane], VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+    }
+
+    /* get data from image to external memory to compare with reference */
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect     = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        void* ptr = 0;
+        vx_size sz = 0;
+        vx_uint32 elem_size = own_elem_size(arg_->format, plane);
+
+        sz = vxComputeImagePatchSize(image, &rect, plane);
+
+        ptr = ct_alloc_mem(sz);
+        ASSERT(NULL != ptr);
+
+        tst_addr.dim_x    = arg_->width  / own_plane_subsampling_x(arg_->format, plane);
+        tst_addr.dim_y    = arg_->height / own_plane_subsampling_y(arg_->format, plane);
+        tst_addr.stride_x = elem_size;
+        tst_addr.stride_y = tst_addr.dim_x * tst_addr.stride_x;
+
+        VX_CALL(vxCopyImagePatch(image, &rect, plane, &tst_addr, ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
+
+        /* check if image patch plane equal to reference data */
+        own_check_image_patch_plane_user_layout(ref, &tst_addr, ptr, plane, arg_->format);
+
+        ct_free_mem(ptr);
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testWriteRandomImage() */
+
+
+/* ***************************************************************************
+//  vxMapImagePatch tests
+*/
+TESTCASE(vxMapImagePatch, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char* testName;
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} MapReadUniformImage_Arg;
+
+
+#undef PARAMETERS
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("uniform", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, NULL)
+
+/*
+// test vxMapImagePatch in READ_ONLY mode from uniform image,
+// independed from vxMapImagePatch/vxCopyImagePatch in write mode
+// or vxAccessImagePatch/vxCommitImagePatch functions
+*/
+TEST_WITH_ARG(vxMapImagePatch, testMapReadUniformImage, MapReadUniformImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 plane;
+    vx_size  num_planes = 0;
+    vx_image image = 0;
+    vx_pixel_value_t ref_val;
+
+    ref_val.reserved[0] = 0x55;
+    ref_val.reserved[1] = 0xaa;
+    ref_val.reserved[2] = 0x33;
+    ref_val.reserved[3] = 0x77;
+
+    ASSERT_VX_OBJECT(image = vxCreateUniformImage(context, arg_->width, arg_->height, arg_->format, &ref_val), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        void*   ptr = 0;
+
+        VX_CALL(vxMapImagePatch(image, &rect, (vx_uint32)plane, &map_id, &addr, &ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        for (y = 0; y < addr.dim_y; y += addr.step_y)
+        {
+            for (x = 0; x < addr.dim_x; x += addr.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.reserved[0], tst[0]);
+                }
+                break;
+
+                case VX_DF_IMAGE_U16:
+                {
+                    vx_uint16* tst = (vx_uint16*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.U16, tst[0]);
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* tst = (vx_int16*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.S16, tst[0]);
+                }
+                break;
+
+                case VX_DF_IMAGE_U32:
+                {
+                    vx_uint32* tst = (vx_uint32*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.U32, tst[0]);
+                }
+                break;
+
+                case VX_DF_IMAGE_S32:
+                {
+                    vx_int32* tst = (vx_int32*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.S32, tst[0]);
+                }
+                break;
+
+                case VX_DF_IMAGE_RGB:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.RGB[0], tst[0]);
+                    ASSERT_EQ_INT(ref_val.RGB[1], tst[1]);
+                    ASSERT_EQ_INT(ref_val.RGB[2], tst[2]);
+                }
+                break;
+
+                case VX_DF_IMAGE_RGBX:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.RGBX[0], tst[0]);
+                    ASSERT_EQ_INT(ref_val.RGBX[1], tst[1]);
+                    ASSERT_EQ_INT(ref_val.RGBX[2], tst[2]);
+                    ASSERT_EQ_INT(ref_val.RGBX[3], tst[3]);
+                }
+                break;
+
+                case VX_DF_IMAGE_YUYV:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+
+                    vx_uint8 tst_u_or_v = tst[1];
+
+                    ASSERT_EQ_INT(ref_val.YUV[0], tst[0]); // Y
+
+                    if (x & 1)
+                        ASSERT_EQ_INT(ref_val.YUV[2], tst_u_or_v); // V
+                    else
+                        ASSERT_EQ_INT(ref_val.YUV[1], tst_u_or_v); // U
+                }
+                break;
+
+                case VX_DF_IMAGE_UYVY:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+
+                    vx_uint8 tst_u_or_v = tst[0];
+
+                    ASSERT_EQ_INT(ref_val.YUV[0], tst[1]); // Y
+
+                    if (x & 1)
+                        ASSERT_EQ_INT(ref_val.YUV[2], tst_u_or_v); // V
+                    else
+                        ASSERT_EQ_INT(ref_val.YUV[1], tst_u_or_v); // U
+                }
+                break;
+
+                case VX_DF_IMAGE_NV12:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+
+                    if (0 == plane)
+                        ASSERT_EQ_INT(ref_val.YUV[0], tst[0]); // Y
+                    else
+                    {
+                        ASSERT_EQ_INT(ref_val.YUV[1], tst[0]); // U
+                        ASSERT_EQ_INT(ref_val.YUV[2], tst[1]); // V
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_NV21:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+
+                    if (0 == plane)
+                        ASSERT_EQ_INT(ref_val.YUV[0], tst[0]); // Y
+                    else
+                    {
+                        ASSERT_EQ_INT(ref_val.YUV[1], tst[1]); // U
+                        ASSERT_EQ_INT(ref_val.YUV[2], tst[0]); // V
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_YUV4:
+                case VX_DF_IMAGE_IYUV:
+                {
+                    vx_uint8* tst = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &addr);
+                    ASSERT_EQ_INT(ref_val.YUV[plane], tst[0]);
+                }
+                break;
+
+                default:
+                    FAIL("unexpected image format: (%.4s)", arg_->format);
+                break;
+                } /* switch format */
+            } /* for addr.dim_x */
+        } /* for addr.dim_y */
+
+        VX_CALL(vxUnmapImagePatch(image, map_id));
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testMapReadUniformImage() */
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} MapReadRandomImage_Arg;
+
+#ifdef PARAMETERS
+#undef PARAMETERS
+#endif
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxMapImagePatch, testMapReadRandomImage, MapReadRandomImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    vx_image image = 0;
+    CT_Image ref = 0;
+    vx_imagepatch_addressing_t ref_addr[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    void* ref_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    ASSERT_NO_FAILURE(ref = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    own_image_patch_from_ct_image(ref, ref_addr, ref_ptrs, arg_->format);
+
+    ASSERT_VX_OBJECT(image = vxCreateImageFromHandle(context, arg_->format, ref_addr, ref_ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect     = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr = 0;
+
+        VX_CALL(vxMapImagePatch(image, &rect, plane, &map_id, &tst_addr, &ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        /* check if image patch plane equal to reference data */
+        own_check_image_patch_plane_vx_layout(ref, &tst_addr, ptr, plane, arg_->format);
+
+        VX_CALL(vxUnmapImagePatch(image, map_id));
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testMapReadRandomImage() */
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} MapReadWriteRandomImage_Arg;
+
+#ifdef PARAMETERS
+#undef PARAMETERS
+#endif
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxMapImagePatch, testMapReadWriteRandomImage, MapReadWriteRandomImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    vx_image image = 0;
+    CT_Image ref = 0;
+    vx_imagepatch_addressing_t ref_addr[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    void* ref_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    /* generate random reference data */
+    ASSERT_NO_FAILURE(ref = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    /* image patch info for generated data */
+    own_image_patch_from_ct_image(ref, ref_addr, ref_ptrs, arg_->format);
+
+    /* image to test with generated reference data */
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, arg_->width, arg_->height, arg_->format), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr = 0;
+
+        /* fill image with generated data from image patch */
+        VX_CALL(vxCopyImagePatch(image, &rect, plane, &ref_addr[plane], ref_ptrs[plane], VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
+
+        /* map image patch for read and write */
+        VX_CALL(vxMapImagePatch(image, &rect, plane, &map_id, &tst_addr, &ptr, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST, flags));
+
+        /* check if image patch plane equal to reference data */
+        own_check_image_patch_plane_vx_layout(ref, &tst_addr, ptr, plane, arg_->format);
+
+        /* modify mapped image patch data (i.e. increment with saturation each pixel value) */
+        for (y = 0; y < tst_addr.dim_y; y += tst_addr.step_y)
+        {
+            for (x = 0; x < tst_addr.dim_x; x += tst_addr.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_U16:
+                {
+                    vx_uint16* tst_ptr = (vx_uint16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint16)(tst_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* tst_ptr = (vx_int16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_int16)(tst_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_U32:
+                {
+                    vx_uint32* tst_ptr = (vx_uint32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint32)(tst_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_S32:
+                {
+                    vx_int32* tst_ptr = (vx_int32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_int32)(tst_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_RGB:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(tst_ptr[1] + 1);
+                    tst_ptr[2] = (vx_uint8)(tst_ptr[2] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_RGBX:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(tst_ptr[1] + 1);
+                    tst_ptr[2] = (vx_uint8)(tst_ptr[2] + 1);
+                    tst_ptr[3] = (vx_uint8)(tst_ptr[3] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_YUYV:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(tst_ptr[1] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_UYVY:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(tst_ptr[1] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_NV12:
+                case VX_DF_IMAGE_NV21:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    if (0 == plane)
+                        tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                    else
+                    {
+                        tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                        tst_ptr[1] = (vx_uint8)(tst_ptr[1] + 1);
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_IYUV:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_YUV4:
+                {
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(tst_ptr[0] + 1);
+                }
+                break;
+
+                default:
+                    FAIL("unexpected image format: (%.4s)", arg_->format);
+                break;
+                } /* switch format */
+            } /* for tst_addr.dim_x */
+        } /* for tst_addr.dim_y */
+
+        /* commit modified image patch */
+        VX_CALL(vxUnmapImagePatch(image, map_id));
+    } /* for num_planes */
+
+    /* check if modified image patch was actually commited into image */
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr = 0;
+        vx_uint32 elem_size = own_elem_size(arg_->format, plane);
+
+        /* map image patch for read */
+        VX_CALL(vxMapImagePatch(image, &rect, (vx_uint32)plane, &map_id, &tst_addr, &ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        /* check if pixel values are incremented */
+        for (y = 0; y < tst_addr.dim_y; y += tst_addr.step_y)
+        {
+            for (x = 0; x < tst_addr.dim_x; x += tst_addr.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.y + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_U16:
+                {
+                    vx_uint16* ref_ptr = (vx_uint16*)((vx_uint8*)ref->data.u16 + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint16* tst_ptr = (vx_uint16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint16)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* ref_ptr = (vx_int16*)((vx_uint8*)ref->data.s16 + y * ref->stride * elem_size + x * elem_size);
+                    vx_int16* tst_ptr = (vx_int16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_int16)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_U32:
+                {
+                    vx_uint32* ref_ptr = (vx_uint32*)((vx_uint8*)ref->data.u32 + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint32* tst_ptr = (vx_uint32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint32)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_S32:
+                {
+                    vx_int32* ref_ptr = (vx_int32*)((vx_uint8*)ref->data.s32 + y * ref->stride * elem_size + x * elem_size);
+                    vx_int32* tst_ptr = (vx_int32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_int32)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_RGB:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgb + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1));
+                    ASSERT_EQ_INT(ref_ptr[2], (vx_uint8)(tst_ptr[2] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_RGBX:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgbx + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1));
+                    ASSERT_EQ_INT(ref_ptr[2], (vx_uint8)(tst_ptr[2] - 1));
+                    ASSERT_EQ_INT(ref_ptr[3], (vx_uint8)(tst_ptr[3] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_YUYV:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.yuyv + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1)); // Y
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1)); // U or V
+                }
+                break;
+
+                case VX_DF_IMAGE_UYVY:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.uyvy + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1)); // U or V
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1)); // Y
+                }
+                break;
+
+                case VX_DF_IMAGE_NV12:
+                case VX_DF_IMAGE_NV21:
+                {
+                    vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride + x);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    if (0 == plane)
+                        ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1)); // Y
+                    else
+                    {
+                        ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                        ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1));
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_IYUV:
+                {
+                    vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride / tst_addr.step_y + x / tst_addr.step_x);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_YUV4:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                }
+                break;
+
+                default:
+                    FAIL("unexpected image format: (%.4s)", arg_->format);
+                break;
+                } /* switch format */
+            } /* for tst_addr.dim_x */
+        } /* for tst_addr.dim_y */
+
+        VX_CALL(vxUnmapImagePatch(image, map_id));
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testMapReadWriteRandomImage() */
+
+typedef struct
+{
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char* fileName;
+    int width;
+    int height;
+    vx_df_image format;
+
+} MapWriteRandomImage_Arg;
+
+#ifdef PARAMETERS
+#undef PARAMETERS
+#endif
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxMapImagePatch, testMapWriteRandomImage, MapWriteRandomImage_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+
+    vx_uint32 x;
+    vx_uint32 y;
+    vx_uint32 plane;
+    vx_size num_planes = 0;
+    vx_image image = 0;
+    CT_Image ref = 0;
+    vx_imagepatch_addressing_t ref_addr[VX_PLANE_MAX] =
+    {
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT,
+        VX_IMAGEPATCH_ADDR_INIT
+    };
+    void* ref_ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+    /* generate random reference data */
+    ASSERT_NO_FAILURE(ref = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    /* image patch info for generated data */
+    own_image_patch_from_ct_image(ref, ref_addr, ref_ptrs, arg_->format);
+
+    /* image to test with generated reference data */
+    ASSERT_VX_OBJECT(image = vxCreateImage(context, arg_->width, arg_->height, arg_->format), VX_TYPE_IMAGE);
+
+    VX_CALL(vxQueryImage(image, VX_IMAGE_PLANES, &num_planes, sizeof(num_planes)));
+
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr = 0;
+        vx_uint32 elem_size = own_elem_size(arg_->format, plane);
+
+        /* map image patch for write */
+        VX_CALL(vxMapImagePatch(image, &rect, plane, &map_id, &tst_addr, &ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        /* modify mapped image patch (write incremented reference pixel values) */
+        for (y = 0; y < tst_addr.dim_y; y += tst_addr.step_y)
+        {
+            for (x = 0; x < tst_addr.dim_x; x += tst_addr.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.y + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_U16:
+                {
+                    vx_uint16* ref_ptr = (vx_uint16*)((vx_uint8*)ref->data.u16 + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint16* tst_ptr = (vx_uint16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint16)(ref_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* ref_ptr = (vx_int16*)((vx_uint8*)ref->data.s16 + y * ref->stride * elem_size + x * elem_size);
+                    vx_int16* tst_ptr = (vx_int16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_int16)(ref_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_U32:
+                {
+                    vx_uint32* ref_ptr = (vx_uint32*)((vx_uint8*)ref->data.u32 + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint32* tst_ptr = (vx_uint32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint32)(ref_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_S32:
+                {
+                    vx_int32* ref_ptr = (vx_int32*)((vx_uint8*)ref->data.s32 + y * ref->stride * elem_size + x * elem_size);
+                    vx_int32* tst_ptr = (vx_int32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_int32)(ref_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_RGB:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgb + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(ref_ptr[1] + 1);
+                    tst_ptr[2] = (vx_uint8)(ref_ptr[2] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_RGBX:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgbx + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(ref_ptr[1] + 1);
+                    tst_ptr[2] = (vx_uint8)(ref_ptr[2] + 1);
+                    tst_ptr[3] = (vx_uint8)(ref_ptr[3] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_YUYV:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.yuyv + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(ref_ptr[1] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_UYVY:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.uyvy + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                    tst_ptr[1] = (vx_uint8)(ref_ptr[1] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_NV12:
+                case VX_DF_IMAGE_NV21:
+                {
+                    vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride + x);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    if (0 == plane)
+                        tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                    else
+                    {
+                        tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                        tst_ptr[1] = (vx_uint8)(ref_ptr[1] + 1);
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_IYUV:
+                {
+                    vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride / tst_addr.step_y + x / tst_addr.step_x);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                }
+                break;
+
+                case VX_DF_IMAGE_YUV4:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    tst_ptr[0] = (vx_uint8)(ref_ptr[0] + 1);
+                }
+                break;
+
+                default:
+                    FAIL("unexpected image format: (%.4s)", arg_->format);
+                break;
+                } /* switch format */
+            } /* for tst_addr.dim_x */
+        } /* for tst_addr.dim_y */
+
+        /* commit modified image patch */
+        VX_CALL(vxUnmapImagePatch(image, map_id));
+    } /* for num_planes */
+
+    /* check if modified image patch was actually commited into image */
+    for (plane = 0; plane < (vx_uint32)num_planes; plane++)
+    {
+        vx_rectangle_t             rect = { 0, 0, arg_->width, arg_->height };
+        vx_imagepatch_addressing_t tst_addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        vx_uint32 flags = VX_NOGAP_X;
+        void* ptr = 0;
+        vx_uint32 elem_size = own_elem_size(arg_->format, plane);
+
+        /* map image patch for read */
+        VX_CALL(vxMapImagePatch(image, &rect, plane, &map_id, &tst_addr, &ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, flags));
+
+        /* check if pixel values are incremented */
+        for (y = 0; y < tst_addr.dim_y; y += tst_addr.step_y)
+        {
+            for (x = 0; x < tst_addr.dim_x; x += tst_addr.step_x)
+            {
+                switch (arg_->format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.y + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_U16:
+                {
+                    vx_uint16* ref_ptr = (vx_uint16*)((vx_uint8*)ref->data.u16 + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint16* tst_ptr = (vx_uint16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint16)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* ref_ptr = (vx_int16*)((vx_uint8*)ref->data.s16 + y * ref->stride * elem_size + x * elem_size);
+                    vx_int16* tst_ptr = (vx_int16*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_int16)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_U32:
+                {
+                    vx_uint32* ref_ptr = (vx_uint32*)((vx_uint8*)ref->data.u32 + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint32* tst_ptr = (vx_uint32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint32)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_S32:
+                {
+                    vx_int32* ref_ptr = (vx_int32*)((vx_uint8*)ref->data.s32 + y * ref->stride * elem_size + x * elem_size);
+                    vx_int32* tst_ptr = (vx_int32*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_int32)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_RGB:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgb + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1));
+                    ASSERT_EQ_INT(ref_ptr[2], (vx_uint8)(tst_ptr[2] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_RGBX:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.rgbx + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1));
+                    ASSERT_EQ_INT(ref_ptr[2], (vx_uint8)(tst_ptr[2] - 1));
+                    ASSERT_EQ_INT(ref_ptr[3], (vx_uint8)(tst_ptr[3] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_YUYV:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.yuyv + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1)); // Y
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1)); // U or V
+                }
+                break;
+
+                case VX_DF_IMAGE_UYVY:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)((vx_uint8*)ref->data.uyvy + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1)); // U or V
+                    ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1)); // Y
+                }
+                break;
+
+                case VX_DF_IMAGE_NV12:
+                case VX_DF_IMAGE_NV21:
+                {
+                    vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride + x);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+
+                    if (0 == plane)
+                        ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1)); // Y
+                    else
+                    {
+                        ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                        ASSERT_EQ_INT(ref_ptr[1], (vx_uint8)(tst_ptr[1] - 1));
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_IYUV:
+                {
+                    vx_uint32 stride = (0 == plane) ? ref->stride : ref->width / 2;
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * stride / tst_addr.step_y + x / tst_addr.step_x);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                }
+                break;
+
+                case VX_DF_IMAGE_YUV4:
+                {
+                    vx_uint8* ref_ptr = (vx_uint8*)(ct_image_get_plane_base(ref, plane) + y * ref->stride * elem_size + x * elem_size);
+                    vx_uint8* tst_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(ptr, x, y, &tst_addr);
+                    ASSERT_EQ_INT(ref_ptr[0], (vx_uint8)(tst_ptr[0] - 1));
+                }
+                break;
+
+                default:
+                    FAIL("unexpected image format: (%.4s)", arg_->format);
+                break;
+                } /* switch format */
+            } /* for tst_addr.dim_x */
+        } /* for tst_addr.dim_y */
+
+        VX_CALL(vxUnmapImagePatch(image, map_id));
+    } /* for num_planes */
+
+    VX_CALL(vxReleaseImage(&image));
+    ASSERT(image == 0);
+
+    return;
+} /* testMapWriteRandomImage() */
+
+
+/* ***************************************************************************
+//  vxCreateImageFromChannel tests
+*/
+TESTCASE(vxCreateImageFromChannel, CT_VXContext, ct_setup_vx_context, 0)
+
+typedef struct
+{
+    const char*      testName;
+    CT_Image(*generator)(const char* fileName, int width, int height, vx_df_image format);
+    const char*      fileName;
+    int              width;
+    int              height;
+    vx_df_image      format;
+    vx_enum          channel;
+
+} CreateImageFromChannel_Arg;
+
+
+#define ADD_IMAGE_FORMAT_444(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_YUV4", __VA_ARGS__, VX_DF_IMAGE_YUV4))
+
+#define ADD_IMAGE_FORMAT_420(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_IYUV", __VA_ARGS__, VX_DF_IMAGE_IYUV)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV12", __VA_ARGS__, VX_DF_IMAGE_NV12)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_DF_IMAGE_NV21", __VA_ARGS__, VX_DF_IMAGE_NV21))
+
+#define ADD_IMAGE_CHANNEL_YUV(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_CHANNEL_Y", __VA_ARGS__, VX_CHANNEL_Y)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_CHANNEL_U", __VA_ARGS__, VX_CHANNEL_U)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_CHANNEL_V", __VA_ARGS__, VX_CHANNEL_V))
+
+#define ADD_IMAGE_CHANNEL_Y(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_CHANNEL_Y", __VA_ARGS__, VX_CHANNEL_Y))
+
+#undef PARAMETERS
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("uniform", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT_444, ADD_IMAGE_CHANNEL_YUV, ARG, NULL, NULL), \
+    CT_GENERATE_PARAMETERS("uniform", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT_420, ADD_IMAGE_CHANNEL_Y, ARG, NULL, NULL)
+
+
+TEST_WITH_ARG(vxCreateImageFromChannel, testChannelFromUniformImage, CreateImageFromChannel_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src = 0;
+    vx_image ref = 0;
+    vx_image tst = 0;
+    vx_uint32 width  = arg_->width;
+    vx_uint32 height = arg_->height;
+    vx_pixel_value_t pixel_value;
+
+    pixel_value.YUV[0] = 0x55;
+    pixel_value.YUV[1] = 0xAA;
+    pixel_value.YUV[2] = 0x33;
+
+    EXPECT_VX_OBJECT(src = vxCreateUniformImage(context, arg_->width, arg_->height, arg_->format, &pixel_value), VX_TYPE_IMAGE);
+
+    if (VX_CHANNEL_Y != arg_->channel && VX_DF_IMAGE_IYUV == arg_->format)
+    {
+        width  /= 2;
+        height /= 2;
+    }
+
+    EXPECT_VX_OBJECT(ref = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    VX_CALL(vxuChannelExtract(context, src, arg_->channel, ref));
+
+    EXPECT_VX_OBJECT(tst = vxCreateImageFromChannel(src, arg_->channel), VX_TYPE_IMAGE);
+
+    {
+        CT_Image image_ref = ct_image_from_vx_image(ref);
+        CT_Image image_tst = ct_image_from_vx_image(tst);
+
+        EXPECT_EQ_CTIMAGE(image_ref, image_tst);
+    }
+
+    VX_CALL(vxReleaseImage(&ref));
+    VX_CALL(vxReleaseImage(&tst));
+    VX_CALL(vxReleaseImage(&src));
+}
+
+#undef PARAMETERS
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT_444, ADD_IMAGE_CHANNEL_YUV, ARG, own_generate_rand_image, NULL), \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT_420, ADD_IMAGE_CHANNEL_Y, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxCreateImageFromChannel, testChannelFromRandomImage, CreateImageFromChannel_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src = 0;
+    vx_image ref = 0;
+    vx_image tst = 0;
+    vx_uint32 width  = arg_->width;
+    vx_uint32 height = arg_->height;
+    CT_Image image = NULL;
+
+    ASSERT_NO_FAILURE(image = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    EXPECT_VX_OBJECT(src = ct_image_to_vx_image(image, context), VX_TYPE_IMAGE);
+
+    if (VX_CHANNEL_Y != arg_->channel && VX_DF_IMAGE_IYUV == arg_->format)
+    {
+        width  /= 2;
+        height /= 2;
+    }
+
+    EXPECT_VX_OBJECT(ref = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    VX_CALL(vxuChannelExtract(context, src, arg_->channel, ref));
+
+    EXPECT_VX_OBJECT(tst = vxCreateImageFromChannel(src, arg_->channel), VX_TYPE_IMAGE);
+
+    {
+        /* 1. check if image created from channel is equal to channel extracted from image */
+        CT_Image image_ref = ct_image_from_vx_image(ref);
+        CT_Image image_tst = ct_image_from_vx_image(tst);
+
+        EXPECT_EQ_CTIMAGE(image_ref, image_tst);
+    }
+
+    {
+        /* 2. check if modification of image created from channel reflected into channel of original image */
+        vx_uint32 i;
+        vx_uint32 j;
+        vx_uint32 p = (VX_CHANNEL_Y == arg_->channel ? 0 : (VX_CHANNEL_U == arg_->channel ? 1 : 2));
+        vx_rectangle_t rect = { 1, 1, 6, 6 };
+        vx_imagepatch_addressing_t addr =
+        {
+            rect.end_x - rect.start_x,
+            rect.end_y - rect.start_y,
+            1,
+            rect.end_x - rect.start_x
+        };
+
+        vx_size sz = 0;
+        void* ptr = 0;
+
+        sz = vxComputeImagePatchSize(tst, &rect, 0);
+
+        ptr = ct_alloc_mem(sz);
+
+        /* fill image patch with some values */
+        for (i = 0; i < addr.dim_y; i++)
+        {
+            vx_uint8* p = (vx_uint8*)ptr + i * addr.stride_x;
+            for (j = 0; j < addr.dim_x; j++)
+            {
+                p[j] = (vx_uint8)(i + j);
+            }
+        }
+
+        /* copy patch to channel image */
+        vxCopyImagePatch(tst, &rect, 0, &addr, ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+
+        /* clean patch memory */
+        ct_memset(ptr, 0, sz);
+
+        /* get channel patch from original image */
+        vxCopyImagePatch(src, &rect, p, &addr, ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+        /* check channel changes has been reflected into original image */
+        for (i = 0; i < addr.dim_y; i++)
+        {
+            vx_uint8* p = (vx_uint8*)ptr + i * addr.stride_x;
+            for (j = 0; j < addr.dim_x; j++)
+            {
+                EXPECT_EQ_INT((vx_uint8)(i + j), p[j]);
+            }
+        }
+
+        ct_free_mem(ptr);
+    }
+
+    {
+        /* 3. check if modification of channel in original image reflected into image created from channel */
+        vx_uint32 i;
+        vx_uint32 j;
+        vx_uint32 p = (VX_CHANNEL_Y == arg_->channel ? 0 : (VX_CHANNEL_U == arg_->channel ? 1 : 2));
+        vx_rectangle_t rect = { 1, 1, 6, 6 };
+        vx_imagepatch_addressing_t addr =
+        {
+            rect.end_x - rect.start_x,
+            rect.end_y - rect.start_y,
+            1,
+            rect.end_x - rect.start_x
+        };
+
+        vx_size sz = 0;
+        void* ptr = 0;
+
+        sz = vxComputeImagePatchSize(src, &rect, p);
+
+        ptr = ct_alloc_mem(sz);
+
+        /* fill image patch with some values */
+        for (i = 0; i < addr.dim_y; i++)
+        {
+            vx_uint8* p = (vx_uint8*)ptr + i * addr.stride_x;
+            for (j = 0; j < addr.dim_x; j++)
+            {
+                p[j] = (vx_uint8)(i + j);
+            }
+        }
+
+        /* copy patch to channel of original image */
+        vxCopyImagePatch(src, &rect, p, &addr, ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
+
+        /* clean patch memory */
+        ct_memset(ptr, 0, sz);
+
+        /* get patch from image created from channel */
+        vxCopyImagePatch(tst, &rect, 0, &addr, ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+        /* check changes of channel in original image has been reflected into channel image */
+        for (i = 0; i < addr.dim_y; i++)
+        {
+            vx_uint8* p = (vx_uint8*)ptr + i * addr.stride_x;
+            for (j = 0; j < addr.dim_x; j++)
+            {
+                EXPECT_EQ_INT((vx_uint8)(i + j), p[j]);
+            }
+        }
+
+        ct_free_mem(ptr);
+    }
+
+    VX_CALL(vxReleaseImage(&ref));
+    VX_CALL(vxReleaseImage(&tst));
+    VX_CALL(vxReleaseImage(&src));
+}
+
+#undef PARAMETERS
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT_444, ADD_IMAGE_CHANNEL_YUV, ARG, own_generate_rand_image, NULL), \
+    CT_GENERATE_PARAMETERS("rand", ADD_SIZE_SMALL_SET, ADD_IMAGE_FORMAT_420, ADD_IMAGE_CHANNEL_Y, ARG, own_generate_rand_image, NULL)
+
+TEST_WITH_ARG(vxCreateImageFromChannel, testChannelFromHandle, CreateImageFromChannel_Arg, PARAMETERS)
+{
+    vx_context context = context_->vx_context_;
+    vx_image src = 0;
+    vx_image ref = 0;
+    vx_image tst = 0;
+
+    vx_uint32 width  = arg_->width;
+    vx_uint32 height = arg_->height;
+
+    CT_Image image = NULL;
+
+    ASSERT_NO_FAILURE(image = arg_->generator(arg_->fileName, arg_->width, arg_->height, arg_->format));
+
+    {
+        vx_uint32 n;
+        vx_uint32 nplanes;
+
+        vx_enum channel[VX_PLANE_MAX] = { VX_CHANNEL_Y, VX_CHANNEL_U, VX_CHANNEL_V, 0 };
+
+        vx_imagepatch_addressing_t addr[VX_PLANE_MAX] =
+        {
+            VX_IMAGEPATCH_ADDR_INIT,
+            VX_IMAGEPATCH_ADDR_INIT,
+            VX_IMAGEPATCH_ADDR_INIT,
+            VX_IMAGEPATCH_ADDR_INIT
+        };
+        void* ptrs[VX_PLANE_MAX] = { 0, 0, 0, 0 };
+
+        ASSERT_NO_FAILURE(nplanes = ct_get_num_planes(arg_->format));
+
+        for (n = 0; n < nplanes; n++)
+        {
+            addr[n].dim_x    = image->width  / ct_image_get_channel_subsampling_x(image, channel[n]);
+            addr[n].dim_y    = image->height / ct_image_get_channel_subsampling_y(image, channel[n]);
+            addr[n].stride_x = ct_image_get_channel_step_x(image, channel[n]);
+            addr[n].stride_y = ct_image_get_channel_step_y(image, channel[n]);
+
+            ptrs[n] = ct_image_get_plane_base(image, n);
+        }
+
+        EXPECT_VX_OBJECT(src = vxCreateImageFromHandle(context, arg_->format, addr, ptrs, VX_MEMORY_TYPE_HOST), VX_TYPE_IMAGE);
+    }
+
+    if (VX_CHANNEL_Y != arg_->channel && VX_DF_IMAGE_IYUV == arg_->format)
+    {
+        width  /= 2;
+        height /= 2;
+    }
+
+    EXPECT_VX_OBJECT(ref = vxCreateImage(context, width, height, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    VX_CALL(vxuChannelExtract(context, src, arg_->channel, ref));
+
+    EXPECT_VX_OBJECT(tst = vxCreateImageFromChannel(src, arg_->channel), VX_TYPE_IMAGE);
+
+    {
+        CT_Image image_ref = ct_image_from_vx_image(ref);
+        CT_Image image_tst = ct_image_from_vx_image(tst);
+
+        EXPECT_EQ_CTIMAGE(image_ref, image_tst);
+    }
+
+    VX_CALL(vxReleaseImage(&ref));
+    VX_CALL(vxReleaseImage(&tst));
+    VX_CALL(vxReleaseImage(&src));
+}
+
+
+TESTCASE_TESTS(Image,
+    testRngImageCreation,
+    testVirtualImageCreation,
+    testVirtualImageCreationDims,
+    testCreateImageFromHandle,
+    testSwapImageHandle,
+    testFormatImagePatchAddress1d,
+    testConvert_CT_Image,
+    testvxSetImagePixelValues,
+    testUniformImage,
+    testComputeImagePatchSize,
+    DISABLED_testAccessCopyWrite,
+    DISABLED_testAccessCopyRead,
+    DISABLED_testAccessCopyWriteUniformImage,
+    testQueryImage
+    )
+
+TESTCASE_TESTS(vxCopyImagePatch,
+    testReadUniformImage,
+    testReadRandomImage,
+    testWriteRandomImage)
+
+TESTCASE_TESTS(vxMapImagePatch,
+    testMapReadUniformImage,
+    testMapReadRandomImage,
+    testMapReadWriteRandomImage,
+    testMapWriteRandomImage)
+
+TESTCASE_TESTS(vxCreateImageFromChannel,
+    testChannelFromUniformImage,
+    testChannelFromRandomImage,
+    testChannelFromHandle)
+
diff --git a/test_conformance/test_warpaffine.c b/test_conformance/test_warpaffine.c
new file mode 100644
index 0000000..700597d
--- /dev/null
+++ b/test_conformance/test_warpaffine.c
@@ -0,0 +1,447 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+TESTCASE(WarpAffine, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(WarpAffine, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, output = 0;
+    vx_matrix matrix = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum type = VX_INTERPOLATION_NEAREST_NEIGHBOR;
+    const vx_enum matrix_type = VX_TYPE_FLOAT32;
+    const vx_size matrix_rows = 3;
+    const vx_size matrix_cols = 2;
+    const vx_size matrix_data_size = 4 * matrix_rows * matrix_cols;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(matrix = vxCreateMatrix(context, matrix_type, matrix_cols, matrix_rows), VX_TYPE_MATRIX);
+
+    {
+        vx_enum ch_matrix_type;
+        vx_size ch_matrix_rows, ch_matrix_cols, ch_data_size;
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_TYPE, &ch_matrix_type, sizeof(ch_matrix_type)));
+        if (matrix_type != ch_matrix_type)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_TYPE failed\n");
+        }
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ROWS, &ch_matrix_rows, sizeof(ch_matrix_rows)));
+        if (matrix_rows != ch_matrix_rows)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_ROWS failed\n");
+        }
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_COLUMNS, &ch_matrix_cols, sizeof(ch_matrix_cols)));
+        if (matrix_cols != ch_matrix_cols)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_COLUMNS failed\n");
+        }
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_SIZE, &ch_data_size, sizeof(ch_data_size)));
+        if (matrix_data_size > ch_data_size)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_SIZE failed\n");
+        }
+    }
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxWarpAffineNode(graph, input, matrix, type, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(matrix == 0);
+    ASSERT(output == 0);
+    ASSERT(input == 0);
+}
+
+enum CT_AffineMatrixType {
+    VX_MATRIX_IDENT = 0,
+    VX_MATRIX_ROTATE_90,
+    VX_MATRIX_SCALE,
+    VX_MATRIX_SCALE_ROTATE,
+    VX_MATRIX_RANDOM
+};
+
+#define VX_NN_AREA_SIZE         1.5
+#define VX_BILINEAR_TOLERANCE   1
+
+static CT_Image warp_affine_read_image_8u(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+
+    return image;
+}
+
+static CT_Image warp_affine_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+#define RND_FLT(low, high)      (vx_float32)CT_RNG_NEXT_REAL(CT()->seed_, low, high);
+static void warp_affine_generate_matrix(vx_float32* m, int src_width, int src_height, int dst_width, int dst_height, int type)
+{
+    vx_float32 mat[3][2];
+    vx_float32 angle, scale_x, scale_y, cos_a, sin_a;
+    if (VX_MATRIX_IDENT == type)
+    {
+        mat[0][0] = 1.f;
+        mat[0][1] = 0.f;
+
+        mat[1][0] = 0.f;
+        mat[1][1] = 1.f;
+
+        mat[2][0] = 0.f;
+        mat[2][1] = 0.f;
+    }
+    else if (VX_MATRIX_ROTATE_90 == type)
+    {
+        mat[0][0] = 0.f;
+        mat[0][1] = 1.f;
+
+        mat[1][0] = -1.f;
+        mat[1][1] = 0.f;
+
+        mat[2][0] = (vx_float32)src_width;
+        mat[2][1] = 0.f;
+    }
+    else if (VX_MATRIX_SCALE == type)
+    {
+        scale_x = src_width / (vx_float32)dst_width;
+        scale_y = src_height / (vx_float32)dst_height;
+
+        mat[0][0] = scale_x;
+        mat[0][1] = 0.f;
+
+        mat[1][0] = 0.f;
+        mat[1][1] = scale_y;
+
+        mat[2][0] = 0.f;
+        mat[2][1] = 0.f;
+    }
+    else if (VX_MATRIX_SCALE_ROTATE == type)
+    {
+        angle = M_PIF / RND_FLT(3.f, 6.f);
+        scale_x = src_width / (vx_float32)dst_width;
+        scale_y = src_height / (vx_float32)dst_height;
+        cos_a = cosf(angle);
+        sin_a = sinf(angle);
+
+        mat[0][0] = cos_a * scale_x;
+        mat[0][1] = sin_a * scale_y;
+
+        mat[1][0] = -sin_a * scale_x;
+        mat[1][1] = cos_a  * scale_y;
+
+        mat[2][0] = 0.f;
+        mat[2][1] = 0.f;
+    }
+    else// if (VX_MATRIX_RANDOM == type)
+    {
+        angle = M_PIF / RND_FLT(3.f, 6.f);
+        scale_x = src_width / (vx_float32)dst_width;
+        scale_y = src_height / (vx_float32)dst_height;
+        cos_a = cosf(angle);
+        sin_a = sinf(angle);
+
+        mat[0][0] = cos_a * RND_FLT(scale_x / 2.f, scale_x);
+        mat[0][1] = sin_a * RND_FLT(scale_y / 2.f, scale_y);
+
+        mat[1][0] = -sin_a * RND_FLT(scale_y / 2.f, scale_y);
+        mat[1][1] = cos_a  * RND_FLT(scale_x / 2.f, scale_x);
+
+        mat[2][0] = src_width  / 5.f * RND_FLT(-1.f, 1.f);
+        mat[2][1] = src_height / 5.f * RND_FLT(-1.f, 1.f);
+    }
+    memcpy(m, mat, sizeof(mat));
+}
+
+static vx_matrix warp_affine_create_matrix(vx_context context, vx_float32 *m)
+{
+    vx_matrix matrix;
+    matrix = vxCreateMatrix(context, VX_TYPE_FLOAT32, 2, 3);
+    if (vxGetStatus((vx_reference)matrix) == VX_SUCCESS)
+    {
+        if (VX_SUCCESS != vxCopyMatrix(matrix, m, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST))
+        {
+            VX_CALL_(return 0, vxReleaseMatrix(&matrix));
+        }
+    }
+    return matrix;
+}
+
+
+static int warp_affine_check_pixel(CT_Image input, CT_Image output, int x, int y, vx_enum interp_type, vx_border_t border, vx_float32 *m)
+{
+    vx_float64 x0, y0, xlower, ylower, s, t;
+    vx_int32 xi, yi;
+    int candidate;
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(output, x, y);
+
+    x0 = (vx_float64)m[2 * 0 + 0] * (vx_float64)x + (vx_float64)m[2 * 1 + 0] * (vx_float64)y + (vx_float64)m[2 * 2 + 0];
+    y0 = (vx_float64)m[2 * 0 + 1] * (vx_float64)x + (vx_float64)m[2 * 1 + 1] * (vx_float64)y + (vx_float64)m[2 * 2 + 1];
+
+    if (VX_INTERPOLATION_NEAREST_NEIGHBOR == interp_type)
+    {
+        for (yi = (vx_int32)ceil(y0 - VX_NN_AREA_SIZE); (vx_float64)yi <= y0 + VX_NN_AREA_SIZE; yi++)
+        {
+            for (xi = (vx_int32)ceil(x0 - VX_NN_AREA_SIZE); (vx_float64)xi <= x0 + VX_NN_AREA_SIZE; xi++)
+            {
+                if (0 <= xi && 0 <= yi && xi < (vx_int32)input->width && yi < (vx_int32)input->height)
+                {
+                    candidate = *CT_IMAGE_DATA_PTR_8U(input, xi, yi);
+                }
+                else if (VX_BORDER_CONSTANT == border.mode)
+                {
+                    candidate = border.constant_value.U8;
+                }
+                else
+                {
+                    candidate = -1;
+                }
+                if (candidate == -1 || candidate == res)
+                    return 0;
+            }
+        }
+        CT_FAIL_(return 1, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+    }
+    else if (VX_INTERPOLATION_BILINEAR == interp_type)
+    {
+        xlower = floor(x0);
+        ylower = floor(y0);
+
+        s = x0 - xlower;
+        t = y0 - ylower;
+
+        xi = (vx_int32)xlower;
+        yi = (vx_int32)ylower;
+
+        candidate = -1;
+        if (VX_BORDER_UNDEFINED == border.mode)
+        {
+            if (0 <= xi && 0 <= yi && xi < (vx_int32)input->width - 1 && yi < (vx_int32)input->height - 1)
+            {
+                candidate = (int)((1. - s) * (1. - t) * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi    , yi    ) +
+                                        s  * (1. - t) * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi + 1, yi    ) +
+                                  (1. - s) *       t  * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi    , yi + 1) +
+                                        s  *       t  * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi + 1, yi + 1));
+            }
+        }
+        else if (VX_BORDER_CONSTANT == border.mode)
+        {
+            candidate = (int)((1. - s) * (1. - t) * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi    , yi    , border.constant_value.U8) +
+                                    s  * (1. - t) * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi + 1, yi    , border.constant_value.U8) +
+                              (1. - s) *       t  * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi    , yi + 1, border.constant_value.U8) +
+                                    s  *       t  * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi + 1, yi + 1, border.constant_value.U8));
+        }
+        if (candidate == -1 || (abs(candidate - res) <= VX_BILINEAR_TOLERANCE))
+            return 0;
+        return 1;
+    }
+    CT_FAIL_(return 1, "Interpolation type undefined");
+}
+
+static void warp_affine_validate(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_float32* m)
+{
+    vx_uint32 err_count = 0;
+
+    CT_FILL_IMAGE_8U(, output,
+            {
+                ASSERT_NO_FAILURE(err_count += warp_affine_check_pixel(input, output, x, y, interp_type, border, m));
+            });
+    if (10 * err_count > output->width * output->height)
+        CT_FAIL_(return, "Check failed for %d pixels", err_count);
+}
+
+static void warp_affine_check(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_float32* m)
+{
+    ASSERT(input && output);
+    ASSERT( (interp_type == VX_INTERPOLATION_NEAREST_NEIGHBOR) ||
+            (interp_type == VX_INTERPOLATION_BILINEAR));
+
+    ASSERT( (border.mode == VX_BORDER_UNDEFINED) ||
+            (border.mode == VX_BORDER_CONSTANT));
+
+    warp_affine_validate(input, output, interp_type, border, m);
+    if (CT_HasFailure())
+    {
+        printf("=== INPUT ===\n");
+        ct_dump_image_info(input);
+        printf("=== OUTPUT ===\n");
+        ct_dump_image_info(output);
+        printf("Matrix:\n%g %g %g\n%g %g %g\n",
+                m[0], m[2], m[4],
+                m[1], m[3], m[5]);
+    }
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char* fileName;
+    int src_width, src_height;
+    int width, height;
+    vx_border_t border;
+    vx_enum interp_type;
+    int matrix_type;
+} Arg;
+
+#define ADD_VX_BORDERS_WARP_AFFINE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_UNDEFINED", __VA_ARGS__, { VX_BORDER_UNDEFINED, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=0", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=1", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 1 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=127", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 127 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=255", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 255 }} }))
+
+#define ADD_VX_INTERP_TYPE_WARP_AFFINE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_NEAREST_NEIGHBOR", __VA_ARGS__, VX_INTERPOLATION_NEAREST_NEIGHBOR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_BILINEAR", __VA_ARGS__, VX_INTERPOLATION_BILINEAR ))
+
+#define ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_NEAREST_NEIGHBOR", __VA_ARGS__, VX_INTERPOLATION_NEAREST_NEIGHBOR))
+
+#define ADD_VX_MATRIX_PARAM_WARP_AFFINE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_IDENT", __VA_ARGS__,        VX_MATRIX_IDENT)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_ROTATE_90", __VA_ARGS__,    VX_MATRIX_ROTATE_90)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_SCALE", __VA_ARGS__,        VX_MATRIX_SCALE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_SCALE_ROTATE", __VA_ARGS__, VX_MATRIX_SCALE_ROTATE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_RANDOM", __VA_ARGS__,       VX_MATRIX_RANDOM))
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_WARP_AFFINE, ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR, ADD_VX_MATRIX_PARAM_WARP_AFFINE, ARG, warp_affine_generate_random, NULL, 128, 128), \
+    CT_GENERATE_PARAMETERS("lena", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_WARP_AFFINE, ADD_VX_INTERP_TYPE_WARP_AFFINE, ADD_VX_MATRIX_PARAM_WARP_AFFINE, ARG, warp_affine_read_image_8u, "lena.bmp", 0, 0)
+
+TEST_WITH_ARG(WarpAffine, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_image input_image = 0, output_image = 0;
+    vx_matrix matrix = 0;
+    vx_float32 m[6];
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->src_width, arg_->src_height));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(warp_affine_generate_matrix(m, input->width, input->height, arg_->width, arg_->height, arg_->matrix_type));
+    ASSERT_VX_OBJECT(matrix = warp_affine_create_matrix(context, m), VX_TYPE_MATRIX);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxWarpAffineNode(graph, input_image, matrix, arg_->interp_type, output_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+    ASSERT_NO_FAILURE(warp_affine_check(input, output, arg_->interp_type, arg_->border, m));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(matrix == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(WarpAffine, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    vx_matrix matrix = 0;
+    vx_float32 m[6];
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->src_width, arg_->src_height));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(warp_affine_generate_matrix(m, input->width, input->height, arg_->width, arg_->height, arg_->matrix_type));
+    ASSERT_VX_OBJECT(matrix = warp_affine_create_matrix(context, m), VX_TYPE_MATRIX);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuWarpAffine(context, input_image, matrix, arg_->interp_type, output_image));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    ASSERT_NO_FAILURE(warp_affine_check(input, output, arg_->interp_type, arg_->border, m));
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(matrix == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(WarpAffine,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_conformance/test_warpperspective.c b/test_conformance/test_warpperspective.c
new file mode 100644
index 0000000..9ee0aed
--- /dev/null
+++ b/test_conformance/test_warpperspective.c
@@ -0,0 +1,475 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <VX/vx.h>
+#include <VX/vxu.h>
+
+#include "test_engine/test.h"
+
+static CT_Image own_read_image_8u(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+
+    return image;
+}
+
+static CT_Image own_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+
+TESTCASE(WarpPerspective, CT_VXContext, ct_setup_vx_context, 0)
+
+TEST(WarpPerspective, testNodeCreation)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input = 0, output = 0;
+    vx_matrix matrix = 0;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_enum type = VX_INTERPOLATION_NEAREST_NEIGHBOR;
+    const vx_enum matrix_type = VX_TYPE_FLOAT32;
+    const vx_size matrix_rows = 3;
+    const vx_size matrix_cols = 3;
+    const vx_size matrix_data_size = 4 * matrix_rows * matrix_cols;
+
+    ASSERT_VX_OBJECT(input = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output = vxCreateImage(context, 128, 128, VX_DF_IMAGE_U8), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(matrix = vxCreateMatrix(context, matrix_type, matrix_cols, matrix_rows), VX_TYPE_MATRIX);
+
+    {
+        vx_enum ch_matrix_type;
+        vx_size ch_matrix_rows, ch_matrix_cols, ch_data_size;
+
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_TYPE, &ch_matrix_type, sizeof(ch_matrix_type)));
+        if (matrix_type != ch_matrix_type)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_TYPE failed\n");
+        }
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_ROWS, &ch_matrix_rows, sizeof(ch_matrix_rows)));
+        if (matrix_rows != ch_matrix_rows)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_ROWS failed\n");
+        }
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_COLUMNS, &ch_matrix_cols, sizeof(ch_matrix_cols)));
+        if (matrix_cols != ch_matrix_cols)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_COLUMNS failed\n");
+        }
+        VX_CALL(vxQueryMatrix(matrix, VX_MATRIX_SIZE, &ch_data_size, sizeof(ch_data_size)));
+        if (matrix_data_size > ch_data_size)
+        {
+            CT_FAIL("check for Matrix attribute VX_MATRIX_SIZE failed\n");
+        }
+    }
+
+    graph = vxCreateGraph(context);
+    ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxWarpPerspectiveNode(graph, input, matrix, type, output), VX_TYPE_NODE);
+
+    VX_CALL(vxVerifyGraph(graph));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&output));
+    VX_CALL(vxReleaseImage(&input));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(matrix == 0);
+    ASSERT(output == 0);
+    ASSERT(input == 0);
+}
+
+
+enum CT_PerspectiveMatrixType {
+    VX_MATRIX_IDENT = 0,
+    VX_MATRIX_SCALE,
+    VX_MATRIX_SCALE_ROTATE,
+    VX_MATRIX_RANDOM
+};
+
+#define VX_NN_AREA_SIZE         1.5
+#define VX_BILINEAR_TOLERANCE   1
+
+static CT_Image warp_perspective_read_image_8u(const char* fileName, int width, int height)
+{
+    CT_Image image = NULL;
+
+    image = ct_read_image(fileName, 1);
+    ASSERT_(return 0, image);
+    ASSERT_(return 0, image->format == VX_DF_IMAGE_U8);
+
+    return image;
+}
+
+static CT_Image warp_perspective_generate_random(const char* fileName, int width, int height)
+{
+    CT_Image image;
+
+    ASSERT_NO_FAILURE_(return 0,
+            image = ct_allocate_ct_image_random(width, height, VX_DF_IMAGE_U8, &CT()->seed_, 0, 256));
+
+    return image;
+}
+
+#define RND_FLT(low, high)      (vx_float32)CT_RNG_NEXT_REAL(CT()->seed_, low, high);
+static void warp_perspective_generate_matrix(vx_float32 *m, int src_width, int src_height, int dst_width, int dst_height, int type)
+{
+    vx_float32 mat[3][3];
+    vx_float32 angle, scale_x, scale_y, cos_a, sin_a;
+    if (VX_MATRIX_IDENT == type)
+    {
+        mat[0][0] = 1.f;
+        mat[0][1] = 0.f;
+        mat[0][2] = 0.f;
+
+        mat[1][0] = 0.f;
+        mat[1][1] = 1.f;
+        mat[1][2] = 0.f;
+
+        mat[2][0] = 0.f;
+        mat[2][1] = 0.f;
+        mat[2][2] = 1.f;
+    }
+    else if (VX_MATRIX_SCALE == type)
+    {
+        scale_x = src_width / (vx_float32)dst_width;
+        scale_y = src_height / (vx_float32)dst_height;
+
+        mat[0][0] = scale_x;
+        mat[0][1] = 0.f;
+        mat[0][2] = 0.f;
+
+        mat[1][0] = 0.f;
+        mat[1][1] = scale_y;
+        mat[1][2] = 0.f;
+
+        mat[2][0] = 0.f;
+        mat[2][1] = 0.f;
+        mat[2][2] = 1.f;
+    }
+    else if (VX_MATRIX_SCALE_ROTATE == type)
+    {
+        angle = M_PIF / RND_FLT(3.f, 6.f);
+        scale_x = src_width / (vx_float32)dst_width;
+        scale_y = src_height / (vx_float32)dst_height;
+        cos_a = cosf(angle);
+        sin_a = sinf(angle);
+
+        mat[0][0] = cos_a * scale_x;
+        mat[0][1] = sin_a * scale_y;
+        mat[0][2] = 0.f;
+
+        mat[1][0] = -sin_a * scale_x;
+        mat[1][1] = cos_a  * scale_y;
+        mat[1][2] = 0.f;
+
+        mat[2][0] = 0.f;
+        mat[2][1] = 0.f;
+        mat[2][2] = 1.f;
+    }
+    else// if (VX_MATRIX_RANDOM == type)
+    {
+        angle = M_PIF / RND_FLT(3.f, 6.f);
+        scale_x = src_width / (vx_float32)dst_width;
+        scale_y = src_height / (vx_float32)dst_height;
+        cos_a = cosf(angle);
+        sin_a = sinf(angle);
+
+        mat[0][0] = cos_a * RND_FLT(scale_x / 2.f, scale_x);
+        mat[0][1] = sin_a * RND_FLT(scale_y / 2.f, scale_y);
+        mat[0][2] = RND_FLT(0.f, 0.1f);
+
+        mat[1][0] = -sin_a * RND_FLT(scale_y / 2.f, scale_y);
+        mat[1][1] = cos_a  * RND_FLT(scale_x / 2.f, scale_x);
+        mat[1][2] = RND_FLT(0.f, 0.1f);
+
+        mat[2][0] = src_width  / 5.f * RND_FLT(-1.f, 1.f);
+        mat[2][1] = src_height / 5.f * RND_FLT(-1.f, 1.f);
+        mat[2][2] = 1.f;
+    }
+    memcpy(m, mat, sizeof(mat));
+}
+
+static vx_matrix warp_perspective_create_matrix(vx_context context, vx_float32 *m)
+{
+    vx_matrix matrix;
+    matrix = vxCreateMatrix(context, VX_TYPE_FLOAT32, 3, 3);
+    if (vxGetStatus((vx_reference)matrix) == VX_SUCCESS)
+    {
+        if (VX_SUCCESS != vxCopyMatrix(matrix, m, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST))
+        {
+            VX_CALL_(return 0, vxReleaseMatrix(&matrix));
+        }
+    }
+    return matrix;
+}
+
+static int warp_perspective_check_pixel(CT_Image input, CT_Image output, int x, int y, vx_enum interp_type, vx_border_t border, vx_float32 *m)
+{
+    vx_float64 x0, y0, z0, xlower, ylower, s, t;
+    vx_int32 xi, yi;
+    int candidate;
+    vx_uint8 res = *CT_IMAGE_DATA_PTR_8U(output, x, y);
+
+    x0 = (vx_float64)m[3 * 0 + 0] * (vx_float64)x + (vx_float64)m[3 * 1 + 0] * (vx_float64)y + (vx_float64)m[3 * 2 + 0];
+    y0 = (vx_float64)m[3 * 0 + 1] * (vx_float64)x + (vx_float64)m[3 * 1 + 1] * (vx_float64)y + (vx_float64)m[3 * 2 + 1];
+    z0 = (vx_float64)m[3 * 0 + 2] * (vx_float64)x + (vx_float64)m[3 * 1 + 2] * (vx_float64)y + (vx_float64)m[3 * 2 + 2];
+    if (fabs(z0) < DBL_MIN)
+        return 0;
+
+    x0 = x0 / z0;
+    y0 = y0 / z0;
+    if (VX_INTERPOLATION_NEAREST_NEIGHBOR == interp_type)
+    {
+        for (yi = (vx_int32)ceil(y0 - VX_NN_AREA_SIZE); (vx_float64)yi <= y0 + VX_NN_AREA_SIZE; yi++)
+        {
+            for (xi = (vx_int32)ceil(x0 - VX_NN_AREA_SIZE); (vx_float64)xi <= x0 + VX_NN_AREA_SIZE; xi++)
+            {
+                if (0 <= xi && 0 <= yi && xi < (vx_int32)input->width && yi < (vx_int32)input->height)
+                {
+                    candidate = *CT_IMAGE_DATA_PTR_8U(input, xi, yi);
+                }
+                else if (VX_BORDER_CONSTANT == border.mode)
+                {
+                    candidate = border.constant_value.U8;
+                }
+                else
+                {
+                    candidate = -1;
+                }
+                if (candidate == -1 || candidate == res)
+                    return 0;
+            }
+        }
+        CT_FAIL_(return 1, "Check failed for pixel (%d, %d): %d", x, y, (int)res);
+    }
+    else if (VX_INTERPOLATION_BILINEAR == interp_type)
+    {
+        xlower = floor(x0);
+        ylower = floor(y0);
+
+        s = x0 - xlower;
+        t = y0 - ylower;
+
+        xi = (vx_int32)xlower;
+        yi = (vx_int32)ylower;
+
+        candidate = -1;
+        if (VX_BORDER_UNDEFINED == border.mode)
+        {
+            if (xi >= 0 && yi >= 0 && xi < (vx_int32)input->width - 1 && yi < (vx_int32)input->height - 1)
+            {
+                candidate = (int)((1. - s) * (1. - t) * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi    , yi    ) +
+                                        s  * (1. - t) * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi + 1, yi    ) +
+                                  (1. - s) *       t  * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi    , yi + 1) +
+                                        s  *       t  * (vx_float64) *CT_IMAGE_DATA_PTR_8U(input, xi + 1, yi + 1));
+            }
+        }
+        else if (VX_BORDER_CONSTANT == border.mode)
+        {
+            candidate = (int)((1. - s) * (1. - t) * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi    , yi    , border.constant_value.U8) +
+                                    s  * (1. - t) * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi + 1, yi    , border.constant_value.U8) +
+                              (1. - s) *       t  * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi    , yi + 1, border.constant_value.U8) +
+                                    s  *       t  * (vx_float32)CT_IMAGE_DATA_CONSTANT_8U(input, xi + 1, yi + 1, border.constant_value.U8));
+        }
+        if (candidate == -1 || (abs(candidate - res) <= VX_BILINEAR_TOLERANCE))
+            return 0;
+        return 1;
+    }
+    CT_FAIL_(return 1, "Interpolation type undefined");
+}
+
+static void warp_perspective_validate(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_float32 *m)
+{
+    vx_uint32 err_count = 0;
+
+    CT_FILL_IMAGE_8U(, output,
+            {
+                ASSERT_NO_FAILURE(err_count += warp_perspective_check_pixel(input, output, x, y, interp_type, border, m));
+            });
+    if (10 * err_count > output->width * output->height)
+        CT_FAIL_(return, "Check failed for %d pixels", err_count);
+}
+
+static void warp_perspective_check(CT_Image input, CT_Image output, vx_enum interp_type, vx_border_t border, vx_float32* m)
+{
+    ASSERT(input && output);
+    ASSERT( (interp_type == VX_INTERPOLATION_NEAREST_NEIGHBOR) ||
+            (interp_type == VX_INTERPOLATION_BILINEAR));
+
+    ASSERT( (border.mode == VX_BORDER_UNDEFINED) ||
+            (border.mode == VX_BORDER_CONSTANT));
+
+    warp_perspective_validate(input, output, interp_type, border, m);
+    if (CT_HasFailure())
+    {
+        printf("=== INPUT ===\n");
+        ct_dump_image_info(input);
+        printf("=== OUTPUT ===\n");
+        ct_dump_image_info(output);
+        printf("Matrix:\n%g %g %g\n%g %g %g\n%g %g %g\n",
+                m[0], m[3], m[6],
+                m[1], m[4], m[7],
+                m[2], m[5], m[8]);
+    }
+}
+
+typedef struct {
+    const char* testName;
+    CT_Image(*generator)(const char* fileName, int width, int height);
+    const char*      fileName;
+    int src_width, src_height;
+    int width, height;
+    vx_border_t border;
+    vx_enum interp_type;
+    int matrix_type;
+} Arg;
+
+#define ADD_VX_BORDERS_WARP_PERSPECTIVE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_UNDEFINED", __VA_ARGS__, { VX_BORDER_UNDEFINED, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=0", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=1", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 1 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=127", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 127 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=255", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 255 }} }))
+
+#define ADD_VX_INTERP_TYPE_WARP_PERSPECTIVE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_NEAREST_NEIGHBOR", __VA_ARGS__, VX_INTERPOLATION_NEAREST_NEIGHBOR)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_BILINEAR", __VA_ARGS__, VX_INTERPOLATION_BILINEAR ))
+
+#define ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_INTERPOLATION_NEAREST_NEIGHBOR", __VA_ARGS__, VX_INTERPOLATION_NEAREST_NEIGHBOR))
+
+#define ADD_VX_MATRIX_PARAM_WARP_PERSPECTIVE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_IDENT", __VA_ARGS__,        VX_MATRIX_IDENT)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_SCALE", __VA_ARGS__,        VX_MATRIX_SCALE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_SCALE_ROTATE", __VA_ARGS__, VX_MATRIX_SCALE_ROTATE)), \
+    CT_EXPAND(nextmacro(testArgName "/VX_MATRIX_RANDOM", __VA_ARGS__,       VX_MATRIX_RANDOM))
+
+
+#define PARAMETERS \
+    CT_GENERATE_PARAMETERS("random", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_WARP_PERSPECTIVE, ADD_VX_INTERPOLATION_TYPE_NEAREST_NEIGHBOR, ADD_VX_MATRIX_PARAM_WARP_PERSPECTIVE, ARG, own_generate_random, NULL, 128, 128), \
+    CT_GENERATE_PARAMETERS("lena", ADD_SIZE_SMALL_SET, ADD_VX_BORDERS_WARP_PERSPECTIVE, ADD_VX_INTERP_TYPE_WARP_PERSPECTIVE, ADD_VX_MATRIX_PARAM_WARP_PERSPECTIVE, ARG, own_read_image_8u, "lena.bmp", 0, 0)
+
+
+TEST_WITH_ARG(WarpPerspective, testGraphProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_graph graph = 0;
+    vx_node node = 0;
+    vx_image input_image = 0, output_image = 0;
+    vx_matrix matrix = 0;
+    vx_float32 m[9];
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->src_width, arg_->src_height));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(warp_perspective_generate_matrix(m, input->width, input->height, arg_->width, arg_->height, arg_->matrix_type));
+    ASSERT_VX_OBJECT(matrix = warp_perspective_create_matrix(context, m), VX_TYPE_MATRIX);
+
+    ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
+
+    ASSERT_VX_OBJECT(node = vxWarpPerspectiveNode(graph, input_image, matrix, arg_->interp_type, output_image), VX_TYPE_NODE);
+
+    VX_CALL(vxSetNodeAttribute(node, VX_NODE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxVerifyGraph(graph));
+    VX_CALL(vxProcessGraph(graph));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+    ASSERT_NO_FAILURE(warp_perspective_check(input, output, arg_->interp_type, arg_->border, m));
+
+    VX_CALL(vxReleaseNode(&node));
+    VX_CALL(vxReleaseGraph(&graph));
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(node == 0);
+    ASSERT(graph == 0);
+    ASSERT(matrix == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TEST_WITH_ARG(WarpPerspective, testImmediateProcessing, Arg,
+    PARAMETERS
+)
+{
+    vx_context context = context_->vx_context_;
+    vx_image input_image = 0, output_image = 0;
+    vx_matrix matrix = 0;
+    vx_float32 m[9];
+
+    CT_Image input = NULL, output = NULL;
+
+    vx_border_t border = arg_->border;
+
+    ASSERT_NO_FAILURE(input = arg_->generator(arg_->fileName, arg_->src_width, arg_->src_height));
+    ASSERT_NO_FAILURE(output = ct_allocate_image(arg_->width, arg_->height, VX_DF_IMAGE_U8));
+
+    ASSERT_VX_OBJECT(input_image = ct_image_to_vx_image(input, context), VX_TYPE_IMAGE);
+    ASSERT_VX_OBJECT(output_image = ct_image_to_vx_image(output, context), VX_TYPE_IMAGE);
+    ASSERT_NO_FAILURE(warp_perspective_generate_matrix(m, input->width, input->height, arg_->width, arg_->height, arg_->matrix_type));
+    ASSERT_VX_OBJECT(matrix = warp_perspective_create_matrix(context, m), VX_TYPE_MATRIX);
+
+    VX_CALL(vxSetContextAttribute(context, VX_CONTEXT_IMMEDIATE_BORDER, &border, sizeof(border)));
+
+    VX_CALL(vxuWarpPerspective(context, input_image, matrix, arg_->interp_type, output_image));
+
+    ASSERT_NO_FAILURE(output = ct_image_from_vx_image(output_image));
+
+    ASSERT_NO_FAILURE(warp_perspective_check(input, output, arg_->interp_type, arg_->border, m));
+
+    VX_CALL(vxReleaseMatrix(&matrix));
+    VX_CALL(vxReleaseImage(&output_image));
+    VX_CALL(vxReleaseImage(&input_image));
+
+    ASSERT(matrix == 0);
+    ASSERT(output_image == 0);
+    ASSERT(input_image == 0);
+}
+
+TESTCASE_TESTS(WarpPerspective,
+        testNodeCreation,
+        testGraphProcessing,
+        testImmediateProcessing
+)
diff --git a/test_data/baboon.bmp b/test_data/baboon.bmp
new file mode 100644
index 0000000..b69a7f8
--- /dev/null
+++ b/test_data/baboon.bmp
Binary files differ
diff --git a/test_data/blurred_lena_gray.bmp b/test_data/blurred_lena_gray.bmp
new file mode 100644
index 0000000..db2ed23
--- /dev/null
+++ b/test_data/blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_100_120_L1_blurred_lena_gray.bmp b/test_data/canny_3x3_100_120_L1_blurred_lena_gray.bmp
new file mode 100644
index 0000000..10fa198
--- /dev/null
+++ b/test_data/canny_3x3_100_120_L1_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_100_120_L1_lena_gray.bmp b/test_data/canny_3x3_100_120_L1_lena_gray.bmp
new file mode 100644
index 0000000..1516604
--- /dev/null
+++ b/test_data/canny_3x3_100_120_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_100_120_L2_blurred_lena_gray.bmp b/test_data/canny_3x3_100_120_L2_blurred_lena_gray.bmp
new file mode 100644
index 0000000..5a4ae34
--- /dev/null
+++ b/test_data/canny_3x3_100_120_L2_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_100_120_L2_lena_gray.bmp b/test_data/canny_3x3_100_120_L2_lena_gray.bmp
new file mode 100644
index 0000000..9abbe6e
--- /dev/null
+++ b/test_data/canny_3x3_100_120_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_120_120_L1_lena_gray.bmp b/test_data/canny_3x3_120_120_L1_lena_gray.bmp
new file mode 100644
index 0000000..c7f07cc
--- /dev/null
+++ b/test_data/canny_3x3_120_120_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_150_220_L1_blurred_lena_gray.bmp b/test_data/canny_3x3_150_220_L1_blurred_lena_gray.bmp
new file mode 100644
index 0000000..956b5f6
--- /dev/null
+++ b/test_data/canny_3x3_150_220_L1_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_150_220_L1_lena_gray.bmp b/test_data/canny_3x3_150_220_L1_lena_gray.bmp
new file mode 100644
index 0000000..ca410d4
--- /dev/null
+++ b/test_data/canny_3x3_150_220_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_150_220_L2_blurred_lena_gray.bmp b/test_data/canny_3x3_150_220_L2_blurred_lena_gray.bmp
new file mode 100644
index 0000000..76d6f73
--- /dev/null
+++ b/test_data/canny_3x3_150_220_L2_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_150_220_L2_lena_gray.bmp b/test_data/canny_3x3_150_220_L2_lena_gray.bmp
new file mode 100644
index 0000000..f8e1d72
--- /dev/null
+++ b/test_data/canny_3x3_150_220_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_70_71_L1_blurred_lena_gray.bmp b/test_data/canny_3x3_70_71_L1_blurred_lena_gray.bmp
new file mode 100644
index 0000000..5ebb530
--- /dev/null
+++ b/test_data/canny_3x3_70_71_L1_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_70_71_L1_lena_gray.bmp b/test_data/canny_3x3_70_71_L1_lena_gray.bmp
new file mode 100644
index 0000000..465cbf9
--- /dev/null
+++ b/test_data/canny_3x3_70_71_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_70_71_L2_blurred_lena_gray.bmp b/test_data/canny_3x3_70_71_L2_blurred_lena_gray.bmp
new file mode 100644
index 0000000..6ab8f40
--- /dev/null
+++ b/test_data/canny_3x3_70_71_L2_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_70_71_L2_lena_gray.bmp b/test_data/canny_3x3_70_71_L2_lena_gray.bmp
new file mode 100644
index 0000000..4cc6425
--- /dev/null
+++ b/test_data/canny_3x3_70_71_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_90_125_L1_blurred_lena_gray.bmp b/test_data/canny_3x3_90_125_L1_blurred_lena_gray.bmp
new file mode 100644
index 0000000..0e7709c
--- /dev/null
+++ b/test_data/canny_3x3_90_125_L1_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_90_130_L1_lena_gray.bmp b/test_data/canny_3x3_90_130_L1_lena_gray.bmp
new file mode 100644
index 0000000..fcbe972
--- /dev/null
+++ b/test_data/canny_3x3_90_130_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_90_130_L2_blurred_lena_gray.bmp b/test_data/canny_3x3_90_130_L2_blurred_lena_gray.bmp
new file mode 100644
index 0000000..027d7f0
--- /dev/null
+++ b/test_data/canny_3x3_90_130_L2_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_3x3_90_130_L2_lena_gray.bmp b/test_data/canny_3x3_90_130_L2_lena_gray.bmp
new file mode 100644
index 0000000..6132a88
--- /dev/null
+++ b/test_data/canny_3x3_90_130_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_100_100_L1_lena_gray.bmp b/test_data/canny_5x5_100_100_L1_lena_gray.bmp
new file mode 100644
index 0000000..23956a9
--- /dev/null
+++ b/test_data/canny_5x5_100_100_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_100_120_L1_blurred_lena_gray.bmp b/test_data/canny_5x5_100_120_L1_blurred_lena_gray.bmp
new file mode 100644
index 0000000..7d754fe
--- /dev/null
+++ b/test_data/canny_5x5_100_120_L1_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_100_120_L1_lena_gray.bmp b/test_data/canny_5x5_100_120_L1_lena_gray.bmp
new file mode 100644
index 0000000..825bd93
--- /dev/null
+++ b/test_data/canny_5x5_100_120_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_100_120_L2_blurred_lena_gray.bmp b/test_data/canny_5x5_100_120_L2_blurred_lena_gray.bmp
new file mode 100644
index 0000000..ecc0a23
--- /dev/null
+++ b/test_data/canny_5x5_100_120_L2_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_100_120_L2_lena_gray.bmp b/test_data/canny_5x5_100_120_L2_lena_gray.bmp
new file mode 100644
index 0000000..32c5f96
--- /dev/null
+++ b/test_data/canny_5x5_100_120_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_1200_1440_L1_lena_gray.bmp b/test_data/canny_5x5_1200_1440_L1_lena_gray.bmp
new file mode 100644
index 0000000..8b05443
--- /dev/null
+++ b/test_data/canny_5x5_1200_1440_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_5x5_1200_1440_L2_lena_gray.bmp b/test_data/canny_5x5_1200_1440_L2_lena_gray.bmp
new file mode 100644
index 0000000..813a268
--- /dev/null
+++ b/test_data/canny_5x5_1200_1440_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_100_120_L1_blurred_lena_gray.bmp b/test_data/canny_7x7_100_120_L1_blurred_lena_gray.bmp
new file mode 100644
index 0000000..0bbdcbb
--- /dev/null
+++ b/test_data/canny_7x7_100_120_L1_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_100_120_L1_lena_gray.bmp b/test_data/canny_7x7_100_120_L1_lena_gray.bmp
new file mode 100644
index 0000000..b4b7485
--- /dev/null
+++ b/test_data/canny_7x7_100_120_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_100_120_L2_blurred_lena_gray.bmp b/test_data/canny_7x7_100_120_L2_blurred_lena_gray.bmp
new file mode 100644
index 0000000..d620b00
--- /dev/null
+++ b/test_data/canny_7x7_100_120_L2_blurred_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_100_120_L2_lena_gray.bmp b/test_data/canny_7x7_100_120_L2_lena_gray.bmp
new file mode 100644
index 0000000..561ce7c
--- /dev/null
+++ b/test_data/canny_7x7_100_120_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_16000_19200_L1_lena_gray.bmp b/test_data/canny_7x7_16000_19200_L1_lena_gray.bmp
new file mode 100644
index 0000000..f4ada78
--- /dev/null
+++ b/test_data/canny_7x7_16000_19200_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_16000_19200_L2_lena_gray.bmp b/test_data/canny_7x7_16000_19200_L2_lena_gray.bmp
new file mode 100644
index 0000000..30605a7
--- /dev/null
+++ b/test_data/canny_7x7_16000_19200_L2_lena_gray.bmp
Binary files differ
diff --git a/test_data/canny_7x7_80_80_L1_lena_gray.bmp b/test_data/canny_7x7_80_80_L1_lena_gray.bmp
new file mode 100644
index 0000000..afedbd1
--- /dev/null
+++ b/test_data/canny_7x7_80_80_L1_lena_gray.bmp
Binary files differ
diff --git a/test_data/colors.bmp b/test_data/colors.bmp
new file mode 100644
index 0000000..6a0921b
--- /dev/null
+++ b/test_data/colors.bmp
Binary files differ
diff --git a/test_data/harriscorners/hc_fsc.bmp b/test_data/harriscorners/hc_fsc.bmp
new file mode 100644
index 0000000..e23a191
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc.bmp
Binary files differ
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_3_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_3_3.txt
new file mode 100644
index 0000000..9e5604f
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_3_3.txt
@@ -0,0 +1,124 @@
+123
+193 199 9.2637e+011
+234 304 9.09528e+011
+327 387 8.82552e+011
+160 272 8.69034e+011
+335 264 8.67667e+011
+265 232 8.64265e+011
+420 148 8.64e+011
+255 357 8.43996e+011
+225 130 8.25407e+011
+277 409 8.17461e+011
+203 379 8.15396e+011
+285 284 8.12161e+011
+207 166 7.9013e+011
+386 328 7.88009e+011
+355 315 7.87369e+011
+438 193 7.84907e+011
+295 163 7.83566e+011
+355 116 7.76582e+011
+249 268 7.60458e+011
+258 149 7.42723e+011
+394 214 7.41334e+011
+327 182 7.33874e+011
+409 178 7.33773e+011
+209 252 7.20508e+011
+213 252 7.18843e+011
+230 305 7.18314e+011
+319 302 7.17451e+011
+343 146 7.12643e+011
+227 218 7.09407e+011
+413 259 7.05167e+011
+245 181 7.00102e+011
+347 232 6.99443e+011
+359 400 6.98424e+011
+288 83 6.97956e+011
+275 113 6.96411e+011
+228 216 6.95925e+011
+302 336 6.95884e+011
+383 245 6.90528e+011
+278 200 6.89492e+011
+367 282 6.84523e+011
+291 372 6.81098e+011
+237 393 6.81093e+011
+239 98 6.76557e+011
+175 237 6.72564e+011
+196 288 6.62199e+011
+269 320 6.60679e+011
+308 132 6.52207e+011
+331 265 6.49964e+011
+306 335 6.49632e+011
+127 347 6.48588e+011
+248 270 6.43654e+011
+195 290 6.29284e+011
+181 325 6.19817e+011
+315 213 6.13043e+011
+368 280 6.05875e+011
+177 326 6.03464e+011
+142 311 6.00834e+011
+375 165 5.9975e+011
+259 147 5.92057e+011
+261 233 5.87064e+011
+299 248 5.77978e+011
+298 251 5.75891e+011
+351 315 5.75121e+011
+338 350 5.69661e+011
+375 162 5.6831e+011
+340 350 5.66415e+011
+240 181 5.60121e+011
+162 362 5.55089e+011
+281 284 5.43315e+011
+216 344 5.42916e+011
+363 195 5.42011e+011
+393 210 5.40883e+011
+268 322 5.32589e+011
+310 422 5.29508e+011
+217 342 5.242e+011
+297 247 5.21638e+011
+320 300 5.16459e+011
+311 214 5.14122e+011
+348 230 5.12553e+011
+277 196 5.12364e+011
+366 278 5.07261e+011
+608 240 5.06536e+011
+323 387 5.05725e+011
+257 145 4.99105e+011
+339 353 4.93093e+011
+326 178 4.91127e+011
+359 196 4.76137e+011
+405 179 4.74446e+011
+309 130 4.68398e+011
+318 298 4.61835e+011
+449 162 4.50714e+011
+346 228 4.39933e+011
+339 146 4.3761e+011
+546 37 4.24742e+011
+215 340 4.21955e+011
+399 295 4.18076e+011
+386 130 3.98535e+011
+372 366 3.95913e+011
+320 98 3.83848e+011
+378 246 3.71715e+011
+307 128 3.703e+011
+251 358 3.65166e+011
+271 113 3.41708e+011
+424 227 3.33328e+011
+629 240 3.23141e+011
+290 164 3.1637e+011
+602 170 1.45361e+011
+59 391 1.32337e+011
+598 173 1.17203e+011
+461 22 1.13642e+011
+33 377 1.13083e+011
+534 42 1.12569e+011
+537 45 9.34681e+010
+445 31 8.93609e+010
+200 8 8.66138e+010
+634 323 8.59606e+010
+609 171 7.46826e+010
+540 29 5.92976e+010
+274 478 5.56231e+010
+203 70 5.15149e+010
+33 382 4.91205e+010
+618 174 4.84058e+010
+74 350 4.67664e+010
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_3_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_3_5.txt
new file mode 100644
index 0000000..8950349
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_3_5.txt
@@ -0,0 +1,119 @@
+118
+420 149 6.30483e+012
+239 99 6.29582e+012
+247 268 6.24305e+012
+195 288 6.13067e+012
+268 320 6.12932e+012
+207 167 5.95926e+012
+298 248 5.9368e+012
+227 216 5.92047e+012
+308 133 5.87985e+012
+289 372 5.86352e+012
+248 271 5.8351e+012
+339 350 5.83181e+012
+367 280 5.8085e+012
+258 147 5.74835e+012
+175 238 5.74223e+012
+374 162 5.71748e+012
+307 335 5.62873e+012
+347 230 5.60197e+012
+386 328 5.56045e+012
+227 219 5.55725e+012
+216 342 5.54029e+012
+348 233 5.53108e+012
+278 198 5.52891e+012
+327 386 5.42977e+012
+307 130 5.42494e+012
+203 378 5.42142e+012
+375 165 5.42054e+012
+269 323 5.40621e+012
+288 83 5.3978e+012
+193 199 5.36408e+012
+182 325 5.36402e+012
+356 314 5.33816e+012
+319 300 5.32739e+012
+235 304 5.32558e+012
+355 116 5.31084e+012
+336 264 5.2938e+012
+438 192 5.26842e+012
+327 180 5.2553e+012
+368 283 5.25029e+012
+319 303 5.23715e+012
+258 149 5.23144e+012
+394 212 5.12581e+012
+161 272 5.12406e+012
+225 129 5.12317e+012
+412 259 5.1158e+012
+299 251 5.11122e+012
+290 375 5.0944e+012
+277 409 5.09321e+012
+328 183 5.08853e+012
+286 284 5.07578e+012
+142 312 5.04181e+012
+278 200 5.0164e+012
+394 214 4.98182e+012
+214 251 4.96803e+012
+266 232 4.95664e+012
+316 213 4.93937e+012
+256 357 4.85184e+012
+340 353 4.70688e+012
+217 345 4.66753e+012
+245 180 4.58517e+012
+284 284 4.56628e+012
+229 305 4.56171e+012
+359 399 4.55175e+012
+296 163 4.52605e+012
+383 245 4.48237e+012
+409 178 4.43294e+012
+364 195 4.42132e+012
+344 146 4.35282e+012
+330 265 4.28205e+012
+309 422 4.26507e+012
+237 392 4.25788e+012
+260 233 4.1843e+012
+281 285 4.13775e+012
+127 346 4.11327e+012
+608 239 4.11009e+012
+301 336 4.07876e+012
+276 113 4.05007e+012
+208 252 4.04135e+012
+371 366 4.02276e+012
+250 358 3.97158e+012
+350 315 3.91591e+012
+322 388 3.90815e+012
+239 181 3.89865e+012
+424 228 3.77996e+012
+310 214 3.72799e+012
+162 361 3.70266e+012
+338 147 3.68572e+012
+398 295 3.64727e+012
+270 114 3.64205e+012
+290 164 3.62828e+012
+319 98 3.59227e+012
+404 179 3.56357e+012
+176 326 3.53723e+012
+378 246 3.45047e+012
+385 131 3.43194e+012
+358 196 3.41622e+012
+448 162 3.23216e+012
+546 37 2.60179e+012
+628 239 2.24287e+012
+598 174 1.45013e+012
+32 377 1.20928e+012
+461 21 1.05912e+012
+60 390 9.36681e+011
+445 31 9.13381e+011
+602 170 8.62147e+011
+618 174 7.30519e+011
+199 8 7.03236e+011
+537 45 6.966e+011
+534 42 6.88658e+011
+605 169 6.88351e+011
+634 322 6.08736e+011
+609 170 5.34571e+011
+544 41 4.13763e+011
+540 29 4.10544e+011
+33 381 4.07217e+011
+203 70 3.94772e+011
+454 23 3.73909e+011
+39 372 3.49613e+011
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_3_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_3_7.txt
new file mode 100644
index 0000000..997f625
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_3_7.txt
@@ -0,0 +1,108 @@
+107
+248 268 1.87908e+013
+195 288 1.84493e+013
+298 248 1.83784e+013
+367 279 1.82967e+013
+268 320 1.82014e+013
+227 216 1.81487e+013
+258 147 1.80749e+013
+339 350 1.80155e+013
+278 197 1.7928e+013
+347 229 1.78843e+013
+308 130 1.75619e+013
+289 371 1.75313e+013
+374 162 1.74798e+013
+394 211 1.74525e+013
+319 299 1.74414e+013
+327 179 1.73845e+013
+216 341 1.73451e+013
+232 305 1.6197e+013
+305 335 1.61725e+013
+421 150 1.58082e+013
+354 314 1.56539e+013
+328 183 1.5624e+013
+212 251 1.55921e+013
+284 284 1.55769e+013
+228 220 1.5558e+013
+333 264 1.55524e+013
+208 168 1.54429e+013
+279 201 1.53532e+013
+320 303 1.53311e+013
+248 272 1.53073e+013
+308 133 1.53021e+013
+239 100 1.52484e+013
+325 387 1.51867e+013
+395 215 1.51843e+013
+263 233 1.51833e+013
+375 166 1.50878e+013
+356 117 1.49416e+013
+289 84 1.48307e+013
+180 325 1.4813e+013
+243 181 1.44369e+013
+254 357 1.43933e+013
+407 178 1.40154e+013
+313 213 1.39748e+013
+308 335 1.39138e+013
+381 245 1.37664e+013
+175 239 1.37644e+013
+204 378 1.34537e+013
+386 327 1.34062e+013
+412 258 1.33845e+013
+161 271 1.33285e+013
+226 129 1.32466e+013
+361 195 1.31853e+013
+183 325 1.3173e+013
+357 314 1.314e+013
+341 146 1.30429e+013
+437 191 1.30403e+013
+293 163 1.29859e+013
+273 113 1.29434e+013
+287 283 1.28496e+013
+257 356 1.27957e+013
+215 251 1.2755e+013
+278 408 1.26728e+013
+142 313 1.25758e+013
+194 199 1.2574e+013
+236 304 1.2208e+013
+358 398 1.20319e+013
+246 180 1.18527e+013
+370 366 1.17395e+013
+249 358 1.1643e+013
+321 388 1.16119e+013
+207 253 1.13426e+013
+309 421 1.12996e+013
+397 296 1.10686e+013
+259 233 1.09553e+013
+423 228 1.0949e+013
+269 114 1.07467e+013
+309 214 1.06221e+013
+128 346 1.05324e+013
+289 164 1.05309e+013
+237 391 1.04227e+013
+377 246 1.02469e+013
+318 98 1.015e+013
+609 239 9.97081e+012
+384 131 9.94259e+012
+448 163 9.86564e+012
+357 196 9.81781e+012
+162 360 9.38448e+012
+547 38 6.71251e+012
+628 238 6.27403e+012
+599 174 5.32455e+012
+32 378 3.60313e+012
+604 169 2.74492e+012
+460 20 2.72419e+012
+617 175 2.49147e+012
+61 390 2.39475e+012
+445 32 2.17261e+012
+535 43 1.86019e+012
+537 44 1.83713e+012
+199 8 1.71654e+012
+633 322 1.55388e+012
+38 373 1.14445e+012
+551 40 1.10723e+012
+610 170 1.08892e+012
+203 69 1.00688e+012
+27 373 1.00668e+012
+454 23 1.00662e+012
+540 29 9.98629e+011
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_5_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_5_3.txt
new file mode 100644
index 0000000..625db26
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_5_3.txt
@@ -0,0 +1,136 @@
+135
+420 148 2.5474e+016
+386 328 2.48823e+016
+355 116 2.41246e+016
+193 199 2.40366e+016
+234 304 2.37577e+016
+258 149 2.36803e+016
+438 192 2.36412e+016
+265 232 2.27493e+016
+288 83 2.26334e+016
+394 214 2.25462e+016
+160 272 2.25409e+016
+239 99 2.24873e+016
+335 264 2.23492e+016
+207 166 2.23005e+016
+327 182 2.21446e+016
+327 386 2.18602e+016
+319 302 2.18555e+016
+412 259 2.17164e+016
+203 379 2.1626e+016
+278 200 2.15127e+016
+308 132 2.14405e+016
+277 409 2.14265e+016
+225 130 2.1346e+016
+286 284 2.11137e+016
+375 165 2.10792e+016
+255 357 2.10181e+016
+175 237 2.07472e+016
+227 218 2.06908e+016
+347 232 2.04878e+016
+359 400 2.03855e+016
+249 268 1.99292e+016
+367 282 1.98698e+016
+409 178 1.98621e+016
+237 393 1.97688e+016
+295 163 1.96886e+016
+181 325 1.9532e+016
+306 335 1.93484e+016
+195 291 1.93469e+016
+248 270 1.93314e+016
+383 245 1.9206e+016
+291 372 1.90761e+016
+315 213 1.90072e+016
+355 314 1.87508e+016
+213 252 1.83891e+016
+270 320 1.82696e+016
+228 216 1.81413e+016
+343 146 1.81396e+016
+298 251 1.81379e+016
+245 181 1.7993e+016
+142 311 1.79656e+016
+269 323 1.75969e+016
+162 362 1.74074e+016
+275 113 1.73876e+016
+196 288 1.72848e+016
+363 195 1.68968e+016
+393 210 1.68811e+016
+127 347 1.67405e+016
+230 305 1.65961e+016
+366 278 1.63821e+016
+309 422 1.62451e+016
+340 353 1.62186e+016
+216 344 1.60684e+016
+338 349 1.59274e+016
+297 247 1.58644e+016
+302 336 1.58365e+016
+277 196 1.57447e+016
+368 280 1.57154e+016
+290 375 1.56415e+016
+341 350 1.5593e+016
+209 252 1.54363e+016
+299 248 1.54093e+016
+326 178 1.53966e+016
+331 265 1.52052e+016
+257 145 1.49496e+016
+318 298 1.48623e+016
+376 162 1.4847e+016
+194 287 1.48259e+016
+346 228 1.47336e+016
+320 300 1.45939e+016
+373 161 1.45601e+016
+279 197 1.45361e+016
+351 315 1.43272e+016
+240 181 1.42134e+016
+260 233 1.40163e+016
+267 319 1.37298e+016
+177 326 1.37261e+016
+218 341 1.36657e+016
+309 130 1.35754e+016
+226 215 1.3534e+016
+395 211 1.34999e+016
+546 37 1.33834e+016
+281 285 1.32355e+016
+215 340 1.2993e+016
+310 214 1.28088e+016
+322 387 1.27714e+016
+398 295 1.25656e+016
+307 128 1.24405e+016
+449 162 1.22946e+016
+372 366 1.20829e+016
+608 240 1.20715e+016
+404 179 1.19288e+016
+424 228 1.18928e+016
+320 98 1.17592e+016
+339 147 1.12669e+016
+359 196 1.12199e+016
+378 246 1.08813e+016
+385 130 1.05377e+016
+251 358 1.04521e+016
+290 164 1.04339e+016
+270 113 1.00116e+016
+263 234 9.33011e+015
+629 239 8.57294e+015
+407 180 8.45233e+015
+253 359 8.0154e+015
+381 247 7.99729e+015
+293 165 6.32565e+015
+273 115 5.87353e+015
+461 22 3.72946e+015
+33 377 3.63357e+015
+598 173 3.56759e+015
+534 42 3.47792e+015
+602 170 3.37368e+015
+59 391 3.16533e+015
+634 323 3.00003e+015
+537 45 2.86518e+015
+445 31 2.78964e+015
+199 8 2.47938e+015
+203 70 1.84788e+015
+638 311 1.77874e+015
+540 29 1.72551e+015
+33 382 1.67949e+015
+609 171 1.65743e+015
+605 169 1.42444e+015
+544 41 1.36966e+015
+618 174 1.32818e+015
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_5_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_5_5.txt
new file mode 100644
index 0000000..ca1742f
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_5_5.txt
@@ -0,0 +1,119 @@
+118
+420 149 2.22093e+017
+239 99 2.21221e+017
+207 167 2.049e+017
+175 238 2.01678e+017
+308 133 2.01089e+017
+289 83 1.96713e+017
+386 328 1.95944e+017
+355 116 1.95221e+017
+248 271 1.92265e+017
+375 165 1.90977e+017
+348 233 1.90144e+017
+438 192 1.8983e+017
+307 335 1.85877e+017
+258 149 1.85424e+017
+203 378 1.83932e+017
+412 259 1.83763e+017
+193 199 1.83063e+017
+247 268 1.82618e+017
+269 323 1.82044e+017
+368 283 1.80919e+017
+227 219 1.80529e+017
+299 251 1.80191e+017
+195 289 1.79799e+017
+328 183 1.79584e+017
+268 320 1.79245e+017
+328 386 1.78456e+017
+258 147 1.78143e+017
+225 129 1.77759e+017
+298 248 1.77703e+017
+278 200 1.77347e+017
+394 214 1.77299e+017
+227 216 1.77096e+017
+367 280 1.76392e+017
+142 312 1.76331e+017
+182 325 1.76256e+017
+356 314 1.75915e+017
+319 302 1.75493e+017
+336 264 1.74564e+017
+160 271 1.73565e+017
+278 198 1.73323e+017
+339 350 1.73053e+017
+235 304 1.72679e+017
+347 230 1.71974e+017
+289 372 1.71728e+017
+374 162 1.70564e+017
+277 409 1.70148e+017
+214 251 1.68745e+017
+290 375 1.68684e+017
+195 291 1.68249e+017
+319 300 1.67782e+017
+216 342 1.67507e+017
+316 213 1.67182e+017
+307 130 1.66207e+017
+266 232 1.66083e+017
+340 353 1.66061e+017
+327 180 1.65155e+017
+286 284 1.64651e+017
+256 357 1.63266e+017
+394 212 1.63064e+017
+359 399 1.62759e+017
+217 344 1.61086e+017
+245 180 1.56172e+017
+296 163 1.53718e+017
+383 245 1.52935e+017
+309 422 1.52173e+017
+364 195 1.51897e+017
+409 178 1.47704e+017
+229 305 1.46163e+017
+237 392 1.45445e+017
+371 366 1.45217e+017
+344 146 1.44703e+017
+127 346 1.42405e+017
+330 265 1.40492e+017
+276 113 1.40411e+017
+424 228 1.38039e+017
+260 233 1.37408e+017
+301 336 1.35725e+017
+319 98 1.34201e+017
+162 361 1.34088e+017
+208 252 1.33909e+017
+281 285 1.32866e+017
+250 358 1.32433e+017
+398 295 1.30874e+017
+310 214 1.30233e+017
+239 181 1.27928e+017
+350 315 1.27644e+017
+322 388 1.26775e+017
+290 164 1.25917e+017
+338 147 1.25905e+017
+270 114 1.25776e+017
+385 131 1.24876e+017
+378 246 1.22159e+017
+404 179 1.21667e+017
+448 162 1.21613e+017
+176 326 1.2148e+017
+358 196 1.21424e+017
+608 239 1.1583e+017
+546 37 9.1076e+016
+628 239 7.09351e+016
+598 174 5.55276e+016
+32 377 4.63283e+016
+461 21 4.00366e+016
+60 390 3.39606e+016
+445 31 3.33143e+016
+601 169 2.82927e+016
+199 8 2.70364e+016
+634 322 2.69033e+016
+538 45 2.6501e+016
+618 174 2.54925e+016
+534 42 2.5238e+016
+605 169 2.34665e+016
+33 381 1.5866e+016
+203 70 1.52475e+016
+544 41 1.4854e+016
+609 171 1.41351e+016
+454 23 1.35725e+016
+541 29 1.34052e+016
+39 372 1.31058e+016
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_5_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_5_7.txt
new file mode 100644
index 0000000..71424c0
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_5_7.txt
@@ -0,0 +1,108 @@
+107
+248 268 6.5312e+017
+298 248 6.49243e+017
+258 147 6.48254e+017
+227 216 6.42183e+017
+278 198 6.41296e+017
+367 280 6.4053e+017
+195 288 6.3823e+017
+308 130 6.35422e+017
+347 230 6.34588e+017
+268 320 6.34124e+017
+339 350 6.296e+017
+319 300 6.27858e+017
+327 180 6.24114e+017
+394 211 6.20595e+017
+374 162 6.19737e+017
+289 372 6.08877e+017
+216 341 6.01174e+017
+421 150 5.99993e+017
+328 183 5.86782e+017
+356 117 5.85957e+017
+348 233 5.80593e+017
+308 133 5.76578e+017
+239 100 5.76265e+017
+395 215 5.76206e+017
+279 201 5.74701e+017
+299 252 5.74506e+017
+289 84 5.71268e+017
+208 168 5.70491e+017
+259 150 5.70374e+017
+368 283 5.70275e+017
+375 166 5.66225e+017
+320 303 5.65697e+017
+305 335 5.57795e+017
+232 305 5.46975e+017
+354 314 5.46333e+017
+334 264 5.46132e+017
+284 284 5.41732e+017
+212 251 5.37409e+017
+326 386 5.27463e+017
+263 232 5.23914e+017
+180 325 5.19434e+017
+175 239 5.16365e+017
+412 258 5.14507e+017
+243 181 5.13681e+017
+254 357 5.13598e+017
+386 327 5.08632e+017
+437 191 5.07521e+017
+381 245 5.04402e+017
+313 213 5.03348e+017
+407 178 4.99375e+017
+226 129 4.98929e+017
+204 378 4.96695e+017
+308 335 4.93418e+017
+161 271 4.89208e+017
+361 196 4.81433e+017
+357 314 4.77528e+017
+293 163 4.75846e+017
+273 113 4.71045e+017
+194 199 4.69539e+017
+341 146 4.6838e+017
+278 408 4.68161e+017
+257 356 4.67072e+017
+287 283 4.63742e+017
+215 251 4.63516e+017
+142 313 4.62323e+017
+358 398 4.54072e+017
+370 366 4.44342e+017
+246 180 4.44215e+017
+423 228 4.30213e+017
+309 421 4.28173e+017
+239 182 4.23463e+017
+397 296 4.22516e+017
+249 358 4.12411e+017
+321 388 4.11351e+017
+228 305 4.05234e+017
+318 98 4.01168e+017
+259 233 4.00216e+017
+309 214 3.98394e+017
+128 346 3.97492e+017
+269 114 3.9708e+017
+289 164 3.95651e+017
+384 131 3.94944e+017
+448 163 3.92125e+017
+236 392 3.88682e+017
+357 196 3.69891e+017
+162 360 3.5913e+017
+609 239 3.10391e+017
+547 38 2.47452e+017
+628 238 2.08741e+017
+599 174 2.06151e+017
+32 378 1.50275e+017
+461 20 1.0819e+017
+604 169 1.04654e+017
+61 390 9.39135e+016
+617 175 8.99317e+016
+445 32 8.71105e+016
+538 44 7.7129e+016
+199 8 7.3456e+016
+633 322 7.18073e+016
+535 43 6.60329e+016
+38 373 4.49398e+016
+454 23 4.13304e+016
+203 69 4.12448e+016
+552 40 4.0108e+016
+27 373 3.83708e+016
+610 170 3.51606e+016
+540 29 3.33278e+016
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_7_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_7_3.txt
new file mode 100644
index 0000000..bcfefbc
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_7_3.txt
@@ -0,0 +1,143 @@
+142
+386 328 8.6055e+020
+420 148 8.55038e+020
+355 116 8.2885e+020
+239 99 8.27779e+020
+438 192 8.24684e+020
+258 149 8.19602e+020
+288 83 7.88083e+020
+375 165 7.82066e+020
+308 132 7.77139e+020
+394 214 7.71902e+020
+412 259 7.64481e+020
+327 182 7.57557e+020
+319 302 7.53271e+020
+193 199 7.47494e+020
+278 200 7.4689e+020
+175 238 7.36963e+020
+234 304 7.36182e+020
+207 166 7.28795e+020
+327 386 7.1269e+020
+265 232 7.09639e+020
+227 218 6.94629e+020
+335 264 6.8538e+020
+347 232 6.84094e+020
+248 271 6.83669e+020
+299 251 6.82387e+020
+203 379 6.69706e+020
+359 400 6.66735e+020
+367 282 6.6584e+020
+307 335 6.65627e+020
+160 272 6.64719e+020
+277 409 6.61314e+020
+195 291 6.60369e+020
+269 323 6.59946e+020
+286 284 6.58125e+020
+181 325 6.57578e+020
+237 393 6.53545e+020
+356 314 6.45439e+020
+225 130 6.42051e+020
+315 213 6.38769e+020
+255 357 6.31035e+020
+409 178 6.27365e+020
+249 268 6.24657e+020
+340 353 6.22787e+020
+383 245 6.18342e+020
+291 372 6.13644e+020
+142 312 6.11051e+020
+270 320 6.08432e+020
+295 163 5.99533e+020
+309 422 5.9742e+020
+162 362 5.91057e+020
+217 344 5.88609e+020
+290 375 5.88276e+020
+366 278 5.81099e+020
+245 180 5.79098e+020
+393 210 5.7493e+020
+363 195 5.69338e+020
+213 251 5.65714e+020
+341 350 5.59106e+020
+228 216 5.56732e+020
+343 146 5.45679e+020
+300 248 5.44727e+020
+196 288 5.43895e+020
+297 247 5.43718e+020
+338 349 5.41659e+020
+277 196 5.35105e+020
+326 178 5.31575e+020
+346 228 5.31346e+020
+275 113 5.28725e+020
+127 346 5.28252e+020
+318 298 5.24389e+020
+218 341 5.13657e+020
+376 162 5.11951e+020
+257 145 5.11319e+020
+194 287 4.96298e+020
+279 197 4.94989e+020
+259 146 4.94314e+020
+373 161 4.8954e+020
+247 267 4.83982e+020
+226 214 4.80442e+020
+230 305 4.79277e+020
+368 280 4.76366e+020
+395 211 4.71717e+020
+267 319 4.61546e+020
+546 37 4.57601e+020
+302 336 4.55733e+020
+215 340 4.51161e+020
+307 128 4.48098e+020
+331 265 4.47505e+020
+371 366 4.44758e+020
+260 233 4.4194e+020
+328 179 4.38683e+020
+424 228 4.36745e+020
+398 295 4.30265e+020
+209 252 4.30104e+020
+319 98 4.23738e+020
+351 315 4.1883e+020
+240 181 4.14683e+020
+281 285 4.14203e+020
+177 326 4.00838e+020
+310 214 3.95795e+020
+449 162 3.92796e+020
+385 131 3.78008e+020
+322 387 3.75664e+020
+404 179 3.74924e+020
+290 164 3.62142e+020
+378 246 3.58852e+020
+232 306 3.56765e+020
+338 147 3.56667e+020
+250 358 3.47513e+020
+270 114 3.46378e+020
+358 196 3.41356e+020
+263 234 3.39165e+020
+608 240 3.29071e+020
+333 266 3.27022e+020
+407 180 3.21413e+020
+381 247 3.18141e+020
+325 389 3.1721e+020
+253 359 3.04564e+020
+284 286 2.89971e+020
+354 317 2.87491e+020
+629 239 2.71825e+020
+293 165 2.60345e+020
+341 148 2.51675e+020
+243 183 2.45546e+020
+273 115 2.43351e+020
+191 1 1.93727e+020
+32 377 1.44422e+020
+461 21 1.41794e+020
+598 174 1.218e+020
+534 42 1.19051e+020
+60 390 1.15862e+020
+634 322 1.14614e+020
+538 45 9.42488e+019
+445 31 9.18483e+019
+638 312 8.68921e+019
+601 169 8.64649e+019
+199 8 8.5779e+019
+203 70 6.93165e+019
+605 169 6.55082e+019
+33 382 6.16306e+019
+540 29 5.32011e+019
+544 41 4.39293e+019
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_7_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_7_5.txt
new file mode 100644
index 0000000..7d03533
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_7_5.txt
@@ -0,0 +1,112 @@
+111
+420 149 8.80514e+021
+239 99 8.70978e+021
+207 167 8.02392e+021
+289 83 7.97858e+021
+356 116 7.96314e+021
+175 238 7.86839e+021
+308 133 7.80115e+021
+386 328 7.64232e+021
+438 192 7.53786e+021
+375 165 7.51343e+021
+348 233 7.42294e+021
+248 271 7.31906e+021
+412 259 7.28982e+021
+258 149 7.24384e+021
+328 183 7.13819e+021
+299 251 7.10852e+021
+368 283 7.07856e+021
+203 378 7.06746e+021
+269 323 7.00885e+021
+193 199 6.93758e+021
+395 215 6.93491e+021
+225 129 6.9347e+021
+307 335 6.93367e+021
+278 200 6.8879e+021
+142 312 6.86087e+021
+319 302 6.8274e+021
+227 219 6.796e+021
+328 386 6.72991e+021
+161 271 6.70861e+021
+356 314 6.66487e+021
+182 325 6.57749e+021
+340 353 6.54817e+021
+336 264 6.52417e+021
+214 251 6.47861e+021
+196 291 6.46461e+021
+290 375 6.4461e+021
+359 399 6.44463e+021
+235 304 6.4187e+021
+316 213 6.39551e+021
+277 408 6.31511e+021
+266 232 6.29909e+021
+217 344 6.27107e+021
+195 289 6.21217e+021
+247 268 6.18625e+021
+298 248 6.15423e+021
+268 320 6.09848e+021
+367 280 6.09368e+021
+256 356 6.07031e+021
+245 180 6.05584e+021
+286 284 6.0449e+021
+339 350 6.00875e+021
+309 422 6.00588e+021
+347 230 6.00378e+021
+374 162 5.8491e+021
+289 372 5.84685e+021
+364 195 5.84388e+021
+371 366 5.80003e+021
+296 163 5.78529e+021
+383 245 5.76709e+021
+216 342 5.75844e+021
+237 392 5.68035e+021
+393 210 5.66245e+021
+424 228 5.57349e+021
+409 178 5.55565e+021
+127 346 5.53212e+021
+319 98 5.47922e+021
+229 305 5.4226e+021
+344 146 5.41224e+021
+162 361 5.36276e+021
+276 113 5.33318e+021
+330 265 5.32245e+021
+398 295 5.22444e+021
+260 233 5.1946e+021
+385 131 5.08652e+021
+301 336 5.08059e+021
+250 358 5.04356e+021
+310 214 5.0377e+021
+281 285 5.01754e+021
+208 252 5.00693e+021
+448 162 4.94979e+021
+290 164 4.91262e+021
+338 147 4.90261e+021
+270 114 4.89687e+021
+322 388 4.81781e+021
+239 181 4.79551e+021
+378 246 4.78261e+021
+351 315 4.76748e+021
+358 196 4.73159e+021
+404 179 4.72547e+021
+176 326 4.66251e+021
+608 239 3.87582e+021
+547 38 3.55573e+021
+628 239 2.68161e+021
+598 174 2.34466e+021
+32 377 1.99094e+021
+461 21 1.62747e+021
+60 390 1.3674e+021
+445 31 1.30973e+021
+634 322 1.20917e+021
+601 169 1.169e+021
+538 45 1.1413e+021
+199 8 1.11171e+021
+618 174 1.00794e+021
+605 169 1.00193e+021
+534 42 9.71774e+020
+33 381 6.48209e+020
+203 70 6.23351e+020
+454 23 5.48295e+020
+544 41 5.42441e+020
+39 372 5.27231e+020
+541 29 4.71615e+020
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.04_7_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.04_7_7.txt
new file mode 100644
index 0000000..832350b
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.04_7_7.txt
@@ -0,0 +1,111 @@
+110
+258 147 2.58212e+022
+421 149 2.5756e+022
+298 248 2.55725e+022
+278 198 2.54535e+022
+248 268 2.54469e+022
+367 280 2.53391e+022
+227 216 2.53099e+022
+347 230 2.52823e+022
+308 130 2.52497e+022
+356 117 2.50755e+022
+327 180 2.49478e+022
+319 300 2.49348e+022
+195 288 2.48708e+022
+268 320 2.48242e+022
+339 350 2.46849e+022
+394 212 2.45883e+022
+375 163 2.44281e+022
+328 183 2.43416e+022
+289 84 2.43155e+022
+239 100 2.42905e+022
+348 233 2.4071e+022
+395 215 2.40055e+022
+308 133 2.39827e+022
+289 372 2.38308e+022
+208 168 2.38103e+022
+279 201 2.37029e+022
+299 252 2.36764e+022
+259 150 2.3607e+022
+375 166 2.3533e+022
+368 283 2.35066e+022
+216 342 2.33929e+022
+320 303 2.3178e+022
+228 219 2.24867e+022
+340 354 2.21118e+022
+412 258 2.20227e+022
+196 292 2.2017e+022
+437 191 2.18772e+022
+334 264 2.1674e+022
+305 335 2.15894e+022
+354 315 2.15131e+022
+175 239 2.15075e+022
+386 327 2.1495e+022
+284 284 2.12991e+022
+232 305 2.11978e+022
+212 252 2.10716e+022
+226 129 2.10246e+022
+263 232 2.05785e+022
+326 386 2.05687e+022
+243 181 2.04808e+022
+204 378 2.04347e+022
+254 357 2.0348e+022
+381 245 2.03334e+022
+180 325 2.0283e+022
+313 214 2.02441e+022
+161 271 2.02206e+022
+407 178 2.00327e+022
+308 335 1.97656e+022
+328 386 1.96791e+022
+194 199 1.95961e+022
+361 196 1.95229e+022
+357 314 1.94809e+022
+278 408 1.92712e+022
+293 163 1.92466e+022
+358 398 1.91708e+022
+142 313 1.90281e+022
+257 356 1.90085e+022
+273 113 1.89571e+022
+287 283 1.89343e+022
+215 251 1.8913e+022
+341 146 1.88946e+022
+370 366 1.87559e+022
+423 228 1.85323e+022
+246 180 1.85083e+022
+309 421 1.80516e+022
+397 296 1.79459e+022
+239 182 1.74283e+022
+318 98 1.73865e+022
+296 162 1.71685e+022
+384 131 1.7123e+022
+448 163 1.70291e+022
+309 214 1.66853e+022
+321 388 1.66635e+022
+128 346 1.6613e+022
+289 164 1.65572e+022
+269 114 1.65206e+022
+259 233 1.64776e+022
+276 112 1.64356e+022
+236 392 1.64025e+022
+162 360 1.52496e+022
+609 239 1.15887e+022
+547 38 1.00758e+022
+599 174 8.8887e+021
+628 238 8.21654e+021
+32 378 6.78931e+021
+461 20 4.72527e+021
+604 169 4.55265e+021
+61 390 4.02801e+021
+617 175 3.81592e+021
+445 32 3.7669e+021
+538 44 3.43814e+021
+633 322 3.3526e+021
+199 8 3.32769e+021
+535 43 2.51606e+021
+38 373 1.91487e+021
+454 23 1.83676e+021
+203 69 1.82738e+021
+543 42 1.68476e+021
+27 373 1.61207e+021
+552 40 1.59042e+021
+439 36 1.38598e+021
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_3_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_3_3.txt
new file mode 100644
index 0000000..701484a
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_3_3.txt
@@ -0,0 +1,120 @@
+119
+234 304 6.02893e+011
+193 199 5.68532e+011
+265 232 5.6428e+011
+386 328 5.5162e+011
+335 264 5.42843e+011
+420 148 5.30926e+011
+249 268 5.30149e+011
+258 149 5.29147e+011
+438 193 5.21423e+011
+394 214 5.1313e+011
+319 302 5.10696e+011
+327 182 5.06019e+011
+255 357 5.05639e+011
+227 218 5.0502e+011
+285 284 4.94127e+011
+228 216 4.89174e+011
+355 116 4.82175e+011
+327 386 4.80608e+011
+291 372 4.77965e+011
+278 200 4.72621e+011
+277 409 4.71337e+011
+367 282 4.71057e+011
+347 232 4.68723e+011
+269 320 4.68489e+011
+196 288 4.61325e+011
+359 400 4.60545e+011
+409 178 4.5504e+011
+195 290 4.47694e+011
+295 163 4.45894e+011
+207 166 4.45289e+011
+160 272 4.44778e+011
+237 393 4.42912e+011
+203 379 4.42264e+011
+412 259 4.39325e+011
+239 99 4.32781e+011
+355 315 4.26989e+011
+288 83 4.22737e+011
+343 146 4.21308e+011
+308 132 4.19672e+011
+375 165 4.1874e+011
+248 270 4.14422e+011
+383 245 4.06009e+011
+368 280 4.04154e+011
+225 130 3.99551e+011
+375 162 3.90611e+011
+299 248 3.89275e+011
+338 349 3.87229e+011
+393 210 3.85258e+011
+275 113 3.83808e+011
+175 238 3.79914e+011
+230 305 3.77815e+011
+162 362 3.74828e+011
+340 350 3.74721e+011
+298 250 3.74124e+011
+268 322 3.69075e+011
+209 252 3.67905e+011
+213 252 3.65539e+011
+277 196 3.64825e+011
+245 181 3.62105e+011
+297 247 3.59218e+011
+366 278 3.58729e+011
+257 145 3.53456e+011
+306 335 3.5155e+011
+181 325 3.5143e+011
+326 178 3.49736e+011
+127 347 3.42677e+011
+217 342 3.41873e+011
+216 344 3.38535e+011
+177 326 3.35318e+011
+302 336 3.34632e+011
+315 213 3.31406e+011
+142 312 3.2732e+011
+309 423 3.25103e+011
+290 375 3.21161e+011
+318 298 3.19234e+011
+308 130 3.12394e+011
+331 265 3.06864e+011
+346 228 3.06003e+011
+363 195 2.8975e+011
+546 37 2.88216e+011
+279 197 2.8361e+011
+215 340 2.82278e+011
+261 233 2.81219e+011
+395 211 2.5972e+011
+282 284 2.36158e+011
+323 387 2.34669e+011
+352 315 2.33133e+011
+311 214 2.29844e+011
+629 240 2.08684e+011
+240 181 2.03363e+011
+449 162 2.00268e+011
+608 240 1.97755e+011
+399 295 1.93681e+011
+405 179 1.92792e+011
+359 196 1.88196e+011
+386 130 1.86281e+011
+339 146 1.65032e+011
+319 98 1.59518e+011
+372 366 1.53696e+011
+381 247 1.44848e+011
+424 228 1.3773e+011
+190 1 1.16104e+011
+293 165 1.05052e+011
+378 246 9.51273e+010
+271 113 9.22366e+010
+250 358 7.84054e+010
+243 183 7.78925e+010
+534 42 6.85932e+010
+461 21 6.62427e+010
+59 391 6.00462e+010
+33 377 5.79575e+010
+540 29 3.50071e+010
+633 323 3.45834e+010
+203 70 3.30473e+010
+199 8 3.30383e+010
+74 350 3.28445e+010
+537 45 3.2638e+010
+602 170 3.25969e+010
+33 382 3.12507e+010
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_3_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_3_5.txt
new file mode 100644
index 0000000..6a8ad05
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_3_5.txt
@@ -0,0 +1,116 @@
+115
+239 99 4.46115e+012
+420 149 4.4139e+012
+268 320 4.35525e+012
+195 288 4.35166e+012
+247 268 4.3471e+012
+227 216 4.21409e+012
+298 248 4.20299e+012
+207 167 4.15981e+012
+339 350 4.12449e+012
+308 133 4.12307e+012
+248 271 4.11114e+012
+289 372 4.0885e+012
+175 238 4.07121e+012
+258 147 4.06196e+012
+367 280 4.05676e+012
+374 162 3.97249e+012
+307 335 3.97003e+012
+386 328 3.9409e+012
+348 233 3.92999e+012
+347 230 3.90381e+012
+278 198 3.87016e+012
+216 342 3.86144e+012
+327 386 3.8442e+012
+269 323 3.84333e+012
+227 219 3.83041e+012
+375 165 3.79049e+012
+203 378 3.7774e+012
+356 314 3.77576e+012
+319 300 3.77573e+012
+182 325 3.77506e+012
+288 83 3.76679e+012
+307 130 3.73333e+012
+368 283 3.72859e+012
+235 304 3.71644e+012
+355 116 3.71297e+012
+327 180 3.67559e+012
+193 199 3.66306e+012
+412 259 3.64188e+012
+336 264 3.63061e+012
+394 212 3.61488e+012
+328 183 3.61384e+012
+290 375 3.60975e+012
+299 251 3.57926e+012
+258 149 3.57914e+012
+142 312 3.56591e+012
+160 271 3.54895e+012
+438 192 3.53513e+012
+214 251 3.50997e+012
+319 303 3.50714e+012
+225 129 3.50385e+012
+316 213 3.45353e+012
+277 409 3.45102e+012
+395 215 3.43704e+012
+286 284 3.42986e+012
+265 232 3.4201e+012
+278 200 3.36893e+012
+217 345 3.31646e+012
+340 353 3.31374e+012
+256 357 3.24089e+012
+245 180 3.21426e+012
+383 245 3.09037e+012
+364 195 3.0857e+012
+409 178 3.08012e+012
+296 163 3.05015e+012
+309 422 3.0334e+012
+359 399 3.0153e+012
+344 146 2.94229e+012
+229 305 2.87129e+012
+127 346 2.86811e+012
+237 392 2.84455e+012
+276 113 2.70731e+012
+371 366 2.6818e+012
+331 265 2.6452e+012
+260 233 2.61119e+012
+281 285 2.5658e+012
+162 361 2.53136e+012
+424 228 2.48912e+012
+301 336 2.43088e+012
+208 252 2.42314e+012
+250 358 2.41299e+012
+351 315 2.39382e+012
+319 98 2.38068e+012
+322 388 2.34962e+012
+398 295 2.32713e+012
+240 181 2.27879e+012
+608 239 2.24559e+012
+338 147 2.22925e+012
+310 214 2.19768e+012
+176 326 2.18471e+012
+385 131 2.18339e+012
+290 164 2.172e+012
+270 114 2.13845e+012
+404 179 2.13311e+012
+378 246 2.01489e+012
+448 163 1.97612e+012
+358 196 1.93837e+012
+546 37 1.67717e+012
+628 239 1.58417e+012
+32 377 8.5175e+011
+598 174 8.246e+011
+461 21 7.55404e+011
+60 390 6.48875e+011
+445 31 5.00924e+011
+605 169 4.91537e+011
+602 169 4.57274e+011
+538 45 4.23755e+011
+199 8 4.13095e+011
+534 41 3.40876e+011
+618 174 3.20789e+011
+633 323 2.82256e+011
+33 381 2.50852e+011
+203 70 2.33223e+011
+609 170 2.30968e+011
+454 23 2.26302e+011
+39 372 2.2437e+011
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_3_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_3_7.txt
new file mode 100644
index 0000000..afe0bce
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_3_7.txt
@@ -0,0 +1,95 @@
+94
+248 268 1.32804e+013
+195 288 1.30128e+013
+298 248 1.2938e+013
+268 320 1.28673e+013
+367 279 1.28371e+013
+227 216 1.27995e+013
+339 350 1.27148e+013
+258 147 1.26483e+013
+278 197 1.26076e+013
+347 229 1.25683e+013
+319 299 1.23621e+013
+289 371 1.23343e+013
+394 211 1.23207e+013
+308 130 1.22892e+013
+327 179 1.22391e+013
+216 341 1.22322e+013
+375 163 1.2155e+013
+421 150 1.12679e+013
+228 220 1.1062e+013
+305 335 1.10267e+013
+208 168 1.10181e+013
+233 304 1.09801e+013
+328 183 1.09677e+013
+348 233 1.08547e+013
+320 303 1.08509e+013
+279 201 1.08234e+013
+239 100 1.08e+013
+212 251 1.07403e+013
+395 215 1.06855e+013
+354 314 1.06769e+013
+334 264 1.06623e+013
+356 117 1.06519e+013
+308 133 1.06092e+013
+289 84 1.0576e+013
+284 284 1.05706e+013
+326 386 1.04796e+013
+375 166 1.04758e+013
+180 325 1.03379e+013
+264 232 1.02804e+013
+254 357 9.85896e+012
+308 335 9.73225e+012
+175 239 9.66515e+012
+204 378 9.52409e+012
+243 181 9.50763e+012
+314 213 9.46578e+012
+161 271 9.40764e+012
+412 258 9.38163e+012
+226 129 9.34129e+012
+386 327 9.30001e+012
+357 314 9.26055e+012
+407 178 9.23348e+012
+437 191 9.1746e+012
+382 245 9.13464e+012
+287 283 9.13388e+012
+257 356 9.0911e+012
+215 251 9.03114e+012
+278 408 8.94247e+012
+362 195 8.91159e+012
+142 313 8.7993e+012
+342 146 8.70249e+012
+194 199 8.68941e+012
+294 163 8.64948e+012
+358 398 8.51927e+012
+274 113 8.50154e+012
+246 180 8.40506e+012
+370 366 8.03271e+012
+309 421 7.87464e+012
+321 388 7.63792e+012
+397 296 7.60821e+012
+249 358 7.58488e+012
+423 228 7.45822e+012
+128 346 7.43851e+012
+236 392 7.34067e+012
+259 233 7.05278e+012
+269 114 6.95681e+012
+318 98 6.91061e+012
+289 164 6.7762e+012
+309 215 6.74577e+012
+384 131 6.71447e+012
+448 163 6.67218e+012
+161 361 6.48098e+012
+609 239 6.36104e+012
+628 238 4.47373e+012
+547 38 4.11349e+012
+599 174 3.39836e+012
+32 378 2.5161e+012
+460 20 1.94175e+012
+604 169 1.93008e+012
+61 390 1.67709e+012
+617 175 1.41994e+012
+445 32 1.20649e+012
+199 8 1.0874e+012
+538 44 1.00262e+012
+38 373 7.65906e+011
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_5_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_5_3.txt
new file mode 100644
index 0000000..08570ee
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_5_3.txt
@@ -0,0 +1,133 @@
+132
+386 328 1.68491e+016
+258 149 1.66576e+016
+319 302 1.5207e+016
+394 214 1.5004e+016
+327 182 1.47264e+016
+227 218 1.46546e+016
+375 165 1.46503e+016
+438 192 1.45031e+016
+234 304 1.43462e+016
+278 200 1.4276e+016
+308 132 1.42357e+016
+239 99 1.39731e+016
+420 148 1.39589e+016
+249 268 1.35191e+016
+412 259 1.34576e+016
+355 116 1.33461e+016
+265 232 1.32942e+016
+367 282 1.31064e+016
+291 372 1.30411e+016
+347 232 1.30157e+016
+248 270 1.29598e+016
+195 290 1.27797e+016
+270 320 1.2675e+016
+359 400 1.26215e+016
+175 238 1.25639e+016
+228 216 1.25564e+016
+288 83 1.22786e+016
+335 264 1.22278e+016
+269 323 1.21902e+016
+193 199 1.21213e+016
+393 210 1.20226e+016
+237 393 1.19935e+016
+327 386 1.1875e+016
+196 288 1.17585e+016
+366 278 1.16579e+016
+299 251 1.15902e+016
+277 196 1.12278e+016
+307 335 1.11733e+016
+162 362 1.10239e+016
+356 314 1.10167e+016
+338 349 1.09692e+016
+326 178 1.09614e+016
+290 375 1.09595e+016
+297 247 1.08722e+016
+340 353 1.08272e+016
+286 284 1.07749e+016
+409 178 1.0772e+016
+207 167 1.07275e+016
+255 357 1.07111e+016
+341 350 1.0633e+016
+257 145 1.05754e+016
+194 287 1.04726e+016
+142 312 1.04008e+016
+309 422 1.03863e+016
+318 298 1.033e+016
+368 280 1.02781e+016
+346 228 1.02733e+016
+300 248 1.02579e+016
+181 325 1.02412e+016
+376 162 1.0136e+016
+217 344 1.00032e+016
+277 409 9.75883e+015
+226 215 9.60735e+015
+203 378 9.54656e+015
+383 245 9.51676e+015
+279 197 9.38392e+015
+373 161 9.2979e+015
+546 37 9.2507e+015
+343 146 9.07901e+015
+315 213 9.05444e+015
+295 163 8.98437e+015
+395 211 8.93805e+015
+218 341 8.91833e+015
+259 146 8.84815e+015
+215 340 8.72664e+015
+267 319 8.67032e+015
+160 272 8.57133e+015
+214 251 8.56928e+015
+245 180 8.24924e+015
+363 195 7.93513e+015
+328 179 7.61741e+015
+275 113 7.56692e+015
+127 346 7.38229e+015
+225 130 7.13952e+015
+232 306 6.65583e+015
+263 234 6.31389e+015
+179 327 6.18651e+015
+230 305 5.89292e+015
+407 180 5.80463e+015
+381 247 5.49923e+015
+333 266 5.33786e+015
+177 326 5.12105e+015
+629 239 4.73895e+015
+361 197 4.64766e+015
+284 286 4.62106e+015
+313 215 4.60779e+015
+354 317 4.52377e+015
+371 366 4.48751e+015
+253 359 4.47305e+015
+209 252 4.45142e+015
+319 98 4.37294e+015
+302 336 4.14195e+015
+352 315 4.09228e+015
+293 165 4.08232e+015
+260 233 3.95552e+015
+243 183 3.66537e+015
+331 265 3.62902e+015
+273 115 3.56198e+015
+424 228 3.47063e+015
+399 295 3.43704e+015
+241 181 2.93969e+015
+385 131 2.60765e+015
+449 162 2.5687e+015
+190 1 2.40677e+015
+461 21 2.32815e+015
+32 377 2.066e+015
+280 285 1.97505e+015
+534 42 1.93992e+015
+338 147 1.90084e+015
+608 240 1.86451e+015
+404 179 1.76365e+015
+60 390 1.67607e+015
+607 242 1.51144e+015
+633 323 1.49179e+015
+250 358 1.33559e+015
+538 45 1.2584e+015
+203 70 1.23977e+015
+540 29 1.10353e+015
+33 382 1.02567e+015
+605 169 9.81361e+014
+601 169 8.85147e+014
+269 114 8.65665e+014
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_5_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_5_5.txt
new file mode 100644
index 0000000..d8cb967
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_5_5.txt
@@ -0,0 +1,116 @@
+115
+239 99 1.54904e+017
+420 149 1.53355e+017
+308 133 1.41449e+017
+175 238 1.41116e+017
+386 328 1.39795e+017
+207 167 1.39754e+017
+289 83 1.3712e+017
+348 233 1.35331e+017
+248 271 1.35201e+017
+356 116 1.35147e+017
+375 165 1.34978e+017
+412 259 1.30974e+017
+307 335 1.29711e+017
+269 323 1.297e+017
+438 192 1.29307e+017
+368 283 1.28929e+017
+258 149 1.28456e+017
+328 183 1.28074e+017
+299 251 1.27598e+017
+247 268 1.27181e+017
+268 320 1.27037e+017
+195 289 1.26445e+017
+258 147 1.2612e+017
+227 216 1.25997e+017
+203 378 1.25492e+017
+298 248 1.25437e+017
+328 386 1.24835e+017
+367 280 1.23527e+017
+395 215 1.2348e+017
+142 312 1.23113e+017
+356 314 1.23061e+017
+182 325 1.22761e+017
+227 219 1.22396e+017
+339 350 1.21893e+017
+278 198 1.21808e+017
+319 302 1.21641e+017
+193 199 1.2121e+017
+347 230 1.20308e+017
+278 200 1.20166e+017
+290 375 1.19721e+017
+289 372 1.19416e+017
+235 304 1.19352e+017
+161 271 1.19058e+017
+319 300 1.19052e+017
+374 162 1.18742e+017
+214 251 1.18109e+017
+340 353 1.17841e+017
+336 264 1.17818e+017
+225 129 1.17607e+017
+216 342 1.17129e+017
+196 291 1.16653e+017
+327 180 1.16086e+017
+394 212 1.15345e+017
+316 213 1.15338e+017
+307 130 1.14976e+017
+217 344 1.14515e+017
+266 232 1.13193e+017
+277 409 1.11113e+017
+286 284 1.09189e+017
+309 422 1.08648e+017
+359 399 1.08539e+017
+256 356 1.07856e+017
+245 180 1.0765e+017
+364 195 1.04573e+017
+383 245 1.0363e+017
+409 178 1.01263e+017
+296 163 1.01014e+017
+237 393 9.86438e+016
+127 346 9.65681e+016
+344 146 9.54477e+016
+371 366 9.31794e+016
+162 361 9.16235e+016
+276 113 9.14517e+016
+229 305 8.81562e+016
+424 228 8.58985e+016
+319 98 8.53685e+016
+260 233 8.15006e+016
+330 265 8.1431e+016
+398 295 7.97172e+016
+302 336 7.86198e+016
+281 285 7.72945e+016
+250 358 7.71945e+016
+208 252 7.59185e+016
+351 315 7.53471e+016
+385 131 7.4526e+016
+310 214 7.24112e+016
+176 326 7.23058e+016
+322 388 7.16039e+016
+338 147 7.15419e+016
+240 181 7.15009e+016
+290 164 7.13751e+016
+448 163 7.0276e+016
+270 114 7.0078e+016
+404 179 6.85801e+016
+378 246 6.79492e+016
+358 196 6.52849e+016
+546 37 6.16485e+016
+608 240 5.34675e+016
+628 239 4.99288e+016
+32 377 3.2619e+016
+598 174 2.84674e+016
+461 21 2.8393e+016
+60 390 2.28258e+016
+538 45 1.68924e+016
+605 169 1.67502e+016
+601 169 1.64626e+016
+445 31 1.60774e+016
+199 8 1.47298e+016
+633 323 1.37971e+016
+534 41 1.26543e+016
+203 70 9.79294e+015
+32 381 9.73363e+015
+618 174 9.06642e+015
+39 372 8.30473e+015
+454 23 7.84221e+015
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_5_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_5_7.txt
new file mode 100644
index 0000000..a055c09
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_5_7.txt
@@ -0,0 +1,103 @@
+102
+248 268 4.62912e+017
+298 248 4.57563e+017
+258 147 4.55859e+017
+227 216 4.54074e+017
+195 288 4.50387e+017
+278 198 4.49029e+017
+268 320 4.48319e+017
+308 130 4.47801e+017
+367 279 4.47221e+017
+348 230 4.45009e+017
+339 350 4.44011e+017
+319 300 4.42939e+017
+394 211 4.39222e+017
+327 180 4.36935e+017
+375 163 4.34652e+017
+421 150 4.27786e+017
+290 372 4.26665e+017
+216 341 4.24366e+017
+356 117 4.17551e+017
+328 183 4.13317e+017
+348 233 4.07533e+017
+395 215 4.06879e+017
+289 84 4.06622e+017
+279 201 4.06421e+017
+208 168 4.0599e+017
+239 100 4.05579e+017
+259 150 4.03984e+017
+299 252 4.03436e+017
+320 303 4.01375e+017
+308 133 4.00826e+017
+368 283 4.00642e+017
+375 166 3.93002e+017
+228 220 3.91794e+017
+196 292 3.86261e+017
+305 335 3.76468e+017
+233 304 3.73522e+017
+334 264 3.70479e+017
+354 314 3.676e+017
+212 251 3.66234e+017
+412 258 3.63736e+017
+326 386 3.62354e+017
+284 284 3.62296e+017
+437 191 3.59969e+017
+180 325 3.59799e+017
+175 239 3.5958e+017
+264 232 3.57936e+017
+386 327 3.5601e+017
+204 378 3.49551e+017
+254 357 3.49362e+017
+226 129 3.48936e+017
+308 335 3.4353e+017
+161 271 3.42814e+017
+314 213 3.39599e+017
+357 314 3.3515e+017
+382 245 3.33146e+017
+243 181 3.32966e+017
+257 356 3.30843e+017
+287 283 3.28702e+017
+408 178 3.28547e+017
+278 408 3.28082e+017
+215 251 3.27103e+017
+358 398 3.22627e+017
+194 198 3.22336e+017
+362 195 3.21992e+017
+142 313 3.209e+017
+294 163 3.1651e+017
+246 180 3.13903e+017
+342 146 3.1137e+017
+274 113 3.07784e+017
+370 366 3.013e+017
+309 421 3.01211e+017
+296 162 2.89538e+017
+423 228 2.88628e+017
+397 296 2.86144e+017
+128 346 2.78658e+017
+236 392 2.77281e+017
+239 182 2.73476e+017
+318 98 2.70228e+017
+321 388 2.66342e+017
+384 131 2.62579e+017
+448 163 2.59526e+017
+269 114 2.53288e+017
+289 164 2.51203e+017
+309 215 2.4922e+017
+161 361 2.47849e+017
+609 239 1.86196e+017
+547 38 1.56149e+017
+628 238 1.48592e+017
+599 174 1.25841e+017
+32 378 1.04685e+017
+460 20 7.70505e+016
+604 169 7.33928e+016
+61 390 6.49638e+016
+617 175 4.9104e+016
+445 31 4.57816e+016
+199 8 4.53822e+016
+539 44 4.3299e+016
+38 373 2.99768e+016
+632 322 2.78183e+016
+454 23 2.5933e+016
+27 373 2.38593e+016
+203 69 2.35485e+016
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_7_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_7_3.txt
new file mode 100644
index 0000000..5548c6c
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_7_3.txt
@@ -0,0 +1,133 @@
+132
+258 149 5.58732e+020
+386 328 5.46413e+020
+375 165 5.32607e+020
+308 132 5.14343e+020
+319 302 5.05374e+020
+394 214 4.86822e+020
+227 218 4.80265e+020
+327 182 4.78677e+020
+278 200 4.7215e+020
+438 192 4.70431e+020
+239 99 4.61927e+020
+248 271 4.55727e+020
+269 323 4.42595e+020
+412 259 4.41501e+020
+299 251 4.41288e+020
+420 149 4.23757e+020
+175 238 4.18373e+020
+367 282 4.16396e+020
+195 290 4.16312e+020
+366 278 4.11069e+020
+340 353 4.10619e+020
+270 320 4.09249e+020
+249 268 4.0815e+020
+348 232 4.07132e+020
+393 210 4.06877e+020
+291 372 4.04538e+020
+290 375 3.99319e+020
+234 304 3.97137e+020
+355 116 3.87246e+020
+277 196 3.79393e+020
+228 216 3.76653e+020
+326 178 3.75121e+020
+359 400 3.74354e+020
+217 344 3.73423e+020
+341 350 3.7026e+020
+338 349 3.68464e+020
+297 247 3.67785e+020
+346 228 3.66941e+020
+307 335 3.64882e+020
+196 288 3.64378e+020
+318 298 3.63904e+020
+300 248 3.60761e+020
+309 422 3.60427e+020
+265 232 3.60142e+020
+257 145 3.60035e+020
+288 83 3.58546e+020
+237 393 3.58036e+020
+356 314 3.53506e+020
+194 287 3.48188e+020
+142 312 3.47301e+020
+162 362 3.39158e+020
+376 162 3.38549e+020
+327 386 3.38457e+020
+207 167 3.36059e+020
+226 214 3.35746e+020
+247 267 3.33962e+020
+218 341 3.32878e+020
+373 160 3.19626e+020
+335 264 3.19213e+020
+279 197 3.19089e+020
+182 325 3.17593e+020
+546 37 3.12541e+020
+395 211 3.11813e+020
+214 251 3.10957e+020
+259 146 3.07168e+020
+215 340 3.00448e+020
+203 378 3.00073e+020
+267 319 2.85747e+020
+409 178 2.84495e+020
+316 213 2.81093e+020
+320 299 2.78225e+020
+328 179 2.75601e+020
+161 271 2.74307e+020
+193 199 2.72607e+020
+307 128 2.64659e+020
+255 357 2.6459e+020
+286 284 2.63015e+020
+245 180 2.5594e+020
+364 195 2.54112e+020
+226 129 2.50958e+020
+383 245 2.46111e+020
+232 306 2.36658e+020
+263 234 2.30545e+020
+407 180 2.22543e+020
+381 247 2.22274e+020
+343 146 2.19761e+020
+179 327 2.18846e+020
+128 346 2.12223e+020
+295 163 2.08299e+020
+325 388 2.0774e+020
+354 317 2.01519e+020
+277 409 2.0065e+020
+284 286 1.99175e+020
+333 266 1.90869e+020
+276 112 1.8858e+020
+313 215 1.79196e+020
+361 197 1.77901e+020
+293 165 1.71544e+020
+243 183 1.70815e+020
+253 359 1.69313e+020
+305 338 1.69247e+020
+211 253 1.68395e+020
+273 115 1.5189e+020
+341 148 1.37016e+020
+629 239 1.26745e+020
+406 177 1.13469e+020
+380 244 1.11715e+020
+371 366 1.10409e+020
+319 98 1.03411e+020
+312 212 9.48124e+019
+360 194 8.95982e+019
+324 385 8.83125e+019
+461 21 8.45716e+019
+423 228 8.37047e+019
+32 377 8.04471e+019
+191 1 7.436e+019
+292 162 7.34654e+019
+633 322 6.54073e+019
+272 111 6.43705e+019
+397 296 6.27462e+019
+534 42 5.86947e+019
+384 131 5.61881e+019
+60 390 5.33089e+019
+203 70 4.71153e+019
+606 242 4.55799e+019
+538 45 4.53192e+019
+605 169 4.4176e+019
+609 239 3.82088e+019
+447 163 3.7324e+019
+33 382 3.60256e+019
+540 29 3.43839e+019
+601 169 3.19559e+019
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_7_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_7_5.txt
new file mode 100644
index 0000000..7dc885a
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_7_5.txt
@@ -0,0 +1,111 @@
+110
+239 99 5.984e+021
+420 149 5.97572e+021
+308 133 5.49516e+021
+289 83 5.47493e+021
+356 116 5.43812e+021
+386 328 5.43155e+021
+175 238 5.39891e+021
+375 165 5.34479e+021
+207 167 5.32791e+021
+348 233 5.28181e+021
+412 259 5.15667e+021
+438 192 5.15011e+021
+248 271 5.13909e+021
+328 183 5.09583e+021
+299 251 5.06266e+021
+258 149 5.05461e+021
+368 283 5.04685e+021
+269 323 4.99376e+021
+395 215 4.95168e+021
+307 335 4.76911e+021
+319 302 4.75386e+021
+142 312 4.7004e+021
+203 378 4.69584e+021
+278 200 4.68588e+021
+340 353 4.66863e+021
+328 386 4.6406e+021
+356 314 4.5991e+021
+290 375 4.57665e+021
+196 291 4.571e+021
+227 219 4.54986e+021
+161 271 4.5363e+021
+182 325 4.51413e+021
+214 251 4.4815e+021
+217 344 4.47315e+021
+226 129 4.4342e+021
+193 199 4.39066e+021
+195 289 4.37717e+021
+248 268 4.37222e+021
+235 304 4.36474e+021
+298 248 4.34471e+021
+316 213 4.33611e+021
+268 320 4.3201e+021
+336 264 4.30232e+021
+359 399 4.28893e+021
+367 280 4.27876e+021
+309 422 4.26441e+021
+339 350 4.23295e+021
+347 230 4.21711e+021
+266 232 4.21028e+021
+256 356 4.1795e+021
+286 283 4.13228e+021
+245 180 4.10686e+021
+374 162 4.08642e+021
+289 372 4.07378e+021
+277 408 4.05738e+021
+216 342 4.04037e+021
+341 350 3.96378e+021
+364 195 3.95188e+021
+383 245 3.8241e+021
+237 393 3.80616e+021
+409 178 3.74096e+021
+296 163 3.6783e+021
+162 361 3.63936e+021
+127 346 3.62448e+021
+373 160 3.59526e+021
+371 366 3.54818e+021
+276 112 3.5254e+021
+344 146 3.45907e+021
+319 98 3.31506e+021
+424 228 3.2439e+021
+229 305 3.13455e+021
+398 296 3.0332e+021
+260 233 2.94273e+021
+330 265 2.93209e+021
+302 336 2.84767e+021
+385 131 2.83682e+021
+250 358 2.83381e+021
+281 285 2.78001e+021
+354 317 2.7569e+021
+448 163 2.73734e+021
+305 338 2.72446e+021
+209 252 2.69798e+021
+351 315 2.69767e+021
+176 326 2.66573e+021
+290 164 2.65145e+021
+338 147 2.64181e+021
+310 214 2.63818e+021
+270 114 2.60389e+021
+322 388 2.59981e+021
+240 181 2.55547e+021
+378 246 2.53311e+021
+404 179 2.52948e+021
+546 37 2.42092e+021
+358 196 2.39609e+021
+628 239 1.86675e+021
+609 239 1.74525e+021
+32 377 1.3972e+021
+461 21 1.13869e+021
+598 174 1.06984e+021
+60 390 8.84449e+020
+605 169 7.15619e+020
+538 45 6.92022e+020
+633 322 6.71281e+020
+601 169 6.25966e+020
+199 8 5.50081e+020
+445 31 5.22301e+020
+533 42 4.9489e+020
+203 70 4.20677e+020
+32 381 4.08184e+020
+39 372 3.24932e+020
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.10_7_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.10_7_7.txt
new file mode 100644
index 0000000..70cbc29
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.10_7_7.txt
@@ -0,0 +1,104 @@
+103
+421 149 1.83423e+022
+258 147 1.82278e+022
+248 268 1.80787e+022
+298 248 1.80556e+022
+227 216 1.79356e+022
+278 198 1.79056e+022
+308 130 1.78633e+022
+356 117 1.78303e+022
+347 230 1.77613e+022
+367 280 1.77594e+022
+319 300 1.76461e+022
+195 288 1.7578e+022
+268 320 1.75696e+022
+327 180 1.75535e+022
+339 350 1.74244e+022
+394 211 1.73633e+022
+289 84 1.72522e+022
+375 163 1.72431e+022
+328 183 1.71995e+022
+395 215 1.69956e+022
+239 100 1.69799e+022
+348 233 1.69421e+022
+208 168 1.68749e+022
+279 201 1.68036e+022
+259 150 1.67702e+022
+308 133 1.67244e+022
+289 372 1.67155e+022
+299 252 1.664e+022
+368 283 1.65551e+022
+217 342 1.65504e+022
+320 303 1.64806e+022
+375 166 1.63381e+022
+228 219 1.59753e+022
+412 258 1.5653e+022
+437 191 1.55946e+022
+196 292 1.55724e+022
+386 327 1.51382e+022
+175 239 1.48441e+022
+334 264 1.4618e+022
+226 129 1.45533e+022
+305 335 1.44848e+022
+233 304 1.44663e+022
+204 378 1.42671e+022
+354 314 1.42597e+022
+212 252 1.42088e+022
+284 284 1.4152e+022
+264 232 1.41177e+022
+326 386 1.40605e+022
+161 271 1.40289e+022
+180 325 1.39795e+022
+328 386 1.38714e+022
+254 357 1.3786e+022
+358 398 1.36439e+022
+314 213 1.35398e+022
+194 198 1.34605e+022
+382 245 1.34492e+022
+257 356 1.34097e+022
+278 408 1.33864e+022
+287 283 1.33717e+022
+142 312 1.32319e+022
+243 181 1.32021e+022
+408 178 1.31996e+022
+246 180 1.30279e+022
+362 195 1.28844e+022
+294 163 1.28252e+022
+309 421 1.27755e+022
+370 366 1.25618e+022
+342 146 1.25243e+022
+274 113 1.24182e+022
+423 228 1.22152e+022
+296 162 1.20982e+022
+397 296 1.19633e+022
+236 392 1.16936e+022
+276 112 1.16109e+022
+318 98 1.1559e+022
+128 346 1.15356e+022
+384 131 1.1196e+022
+239 182 1.11508e+022
+208 253 1.11086e+022
+448 163 1.10162e+022
+250 358 1.10137e+022
+322 388 1.07491e+022
+161 361 1.05246e+022
+270 114 1.04564e+022
+609 239 6.55309e+021
+547 38 6.5376e+021
+628 238 5.83518e+021
+599 174 5.16664e+021
+32 378 4.74237e+021
+461 20 3.33553e+021
+604 169 3.17431e+021
+61 390 2.74411e+021
+539 44 2.06441e+021
+199 8 1.99159e+021
+617 175 1.98616e+021
+445 31 1.82867e+021
+600 169 1.72814e+021
+632 322 1.3611e+021
+38 373 1.26444e+021
+454 23 1.12427e+021
+203 69 1.10386e+021
+27 373 9.78885e+020
+543 42 9.2555e+020
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_3_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_3_3.txt
new file mode 100644
index 0000000..5343d52
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_3_3.txt
@@ -0,0 +1,101 @@
+100
+386 328 3.5463e+011
+258 149 3.51167e+011
+234 304 3.47364e+011
+319 302 3.384e+011
+249 268 3.38226e+011
+227 218 3.34698e+011
+394 214 3.22959e+011
+228 216 3.16881e+011
+327 182 3.16139e+011
+265 232 3.14293e+011
+291 372 3.08687e+011
+269 320 3.0833e+011
+438 193 3.01853e+011
+195 290 2.96369e+011
+196 288 2.9393e+011
+367 282 2.93169e+011
+278 200 2.91895e+011
+347 232 2.76456e+011
+335 264 2.72157e+011
+193 199 2.70334e+011
+375 165 2.67899e+011
+359 400 2.62313e+011
+393 210 2.5557e+011
+420 148 2.53365e+011
+239 99 2.51756e+011
+298 250 2.45817e+011
+237 393 2.44427e+011
+375 162 2.42528e+011
+338 349 2.42334e+011
+277 196 2.41876e+011
+248 271 2.41666e+011
+355 116 2.36837e+011
+368 280 2.36053e+011
+366 278 2.34953e+011
+412 259 2.33947e+011
+268 322 2.32814e+011
+257 145 2.32082e+011
+299 248 2.32022e+011
+326 178 2.31911e+011
+285 284 2.29098e+011
+327 386 2.26075e+011
+308 132 2.25893e+011
+175 238 2.2559e+011
+162 362 2.24611e+011
+297 247 2.23868e+011
+255 357 2.23675e+011
+409 178 2.22762e+011
+290 375 2.12906e+011
+356 314 2.12213e+011
+339 352 2.0094e+011
+318 298 2.00399e+011
+216 343 1.96832e+011
+142 312 1.95174e+011
+346 228 1.94395e+011
+288 83 1.93387e+011
+307 335 1.83794e+011
+277 409 1.829e+011
+354 315 1.80435e+011
+343 146 1.7853e+011
+546 37 1.74443e+011
+309 422 1.72377e+011
+383 245 1.68909e+011
+215 340 1.65881e+011
+295 163 1.645e+011
+207 166 1.57922e+011
+182 325 1.4998e+011
+203 378 1.45968e+011
+316 213 1.30446e+011
+275 113 1.23306e+011
+178 326 1.22287e+011
+364 195 1.20101e+011
+243 181 1.17964e+011
+245 180 1.16566e+011
+629 240 1.13303e+011
+210 252 1.12927e+011
+407 180 1.09584e+011
+127 346 1.03658e+011
+214 251 9.59315e+010
+212 252 9.1827e+010
+160 272 9.12322e+010
+381 247 8.61269e+010
+226 129 7.40224e+010
+313 215 6.80545e+010
+361 197 6.57716e+010
+354 317 5.6691e+010
+293 165 5.44492e+010
+461 21 4.0602e+010
+243 183 3.9114e+010
+273 115 3.54056e+010
+534 42 3.19466e+010
+305 338 3.15888e+010
+606 242 2.98673e+010
+319 98 2.49942e+010
+60 390 2.40932e+010
+312 212 2.3342e+010
+32 377 2.23172e+010
+540 28 2.15802e+010
+74 350 2.1243e+010
+633 324 2.05459e+010
+203 71 1.91533e+010
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_3_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_3_5.txt
new file mode 100644
index 0000000..aa17915
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_3_5.txt
@@ -0,0 +1,115 @@
+114
+239 99 2.93226e+012
+268 320 2.87685e+012
+195 288 2.86915e+012
+420 149 2.83812e+012
+248 268 2.79537e+012
+227 216 2.7921e+012
+298 248 2.75815e+012
+339 350 2.70173e+012
+175 238 2.67869e+012
+248 271 2.67451e+012
+207 167 2.66027e+012
+308 133 2.6591e+012
+258 147 2.65663e+012
+289 372 2.60932e+012
+367 280 2.59697e+012
+348 233 2.59575e+012
+386 328 2.59128e+012
+307 335 2.58778e+012
+269 323 2.54093e+012
+327 386 2.52289e+012
+374 162 2.51834e+012
+347 230 2.48867e+012
+278 198 2.48787e+012
+319 300 2.48268e+012
+356 314 2.47375e+012
+216 342 2.46241e+012
+368 283 2.46051e+012
+182 325 2.45093e+012
+289 83 2.43685e+012
+375 165 2.43211e+012
+412 259 2.41362e+012
+234 304 2.4129e+012
+203 378 2.40738e+012
+227 219 2.39138e+012
+328 183 2.38493e+012
+355 116 2.38141e+012
+290 375 2.37254e+012
+327 180 2.35917e+012
+394 212 2.35577e+012
+308 130 2.34672e+012
+142 312 2.33601e+012
+299 251 2.30263e+012
+214 251 2.29493e+012
+161 271 2.29127e+012
+395 215 2.27233e+012
+193 199 2.24554e+012
+336 264 2.24463e+012
+316 213 2.21533e+012
+437 192 2.21442e+012
+265 232 2.21017e+012
+217 345 2.19056e+012
+279 201 2.16737e+012
+226 129 2.15794e+012
+340 353 2.15279e+012
+286 283 2.10511e+012
+277 409 2.08253e+012
+245 180 2.07182e+012
+256 356 2.04061e+012
+309 422 2.00702e+012
+364 195 1.97269e+012
+409 178 1.95278e+012
+358 399 1.93737e+012
+383 245 1.93036e+012
+127 346 1.83048e+012
+296 163 1.82024e+012
+344 146 1.76684e+012
+237 393 1.75305e+012
+162 362 1.61334e+012
+276 112 1.59611e+012
+371 366 1.56434e+012
+230 305 1.5169e+012
+424 228 1.41341e+012
+331 265 1.37407e+012
+319 98 1.37102e+012
+260 233 1.30026e+012
+398 296 1.2869e+012
+302 336 1.2566e+012
+281 285 1.25584e+012
+209 252 1.23137e+012
+351 315 1.20122e+012
+177 326 1.1881e+012
+284 287 1.17081e+012
+385 131 1.14294e+012
+250 358 1.11417e+012
+323 387 1.1072e+012
+240 181 1.07361e+012
+628 239 1.03525e+012
+339 147 1.02352e+012
+448 163 1.01905e+012
+290 164 9.58434e+011
+254 360 9.35036e+011
+310 214 9.22426e+011
+608 240 9.12295e+011
+546 37 9.06643e+011
+270 114 8.85445e+011
+378 246 8.1858e+011
+359 196 7.77427e+011
+326 390 7.46271e+011
+342 149 7.32904e+011
+381 248 6.07177e+011
+32 377 5.53812e+011
+461 21 5.02304e+011
+274 116 4.35074e+011
+60 390 4.09037e+011
+360 193 4.0574e+011
+312 211 4.02115e+011
+294 166 3.99592e+011
+605 169 3.27526e+011
+598 174 3.03329e+011
+538 45 2.44433e+011
+601 169 2.14867e+011
+533 41 1.74605e+011
+199 8 1.71311e+011
+445 31 1.57209e+011
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_3_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_3_7.txt
new file mode 100644
index 0000000..3ec00f6
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_3_7.txt
@@ -0,0 +1,93 @@
+92
+248 268 8.68835e+012
+195 288 8.48232e+012
+269 320 8.45512e+012
+298 248 8.40441e+012
+227 216 8.34179e+012
+339 350 8.29759e+012
+367 279 8.28753e+012
+278 197 8.17397e+012
+258 146 8.15208e+012
+347 229 8.1382e+012
+319 299 8.1294e+012
+290 372 8.10581e+012
+394 211 8.0441e+012
+217 341 8.04313e+012
+327 179 7.95115e+012
+308 130 7.89535e+012
+375 162 7.83805e+012
+421 150 7.48424e+012
+208 168 7.33085e+012
+228 220 7.31539e+012
+320 303 7.11735e+012
+239 100 7.09311e+012
+328 183 7.0874e+012
+356 117 7.07712e+012
+279 201 7.04854e+012
+233 304 7.03258e+012
+289 84 7.03037e+012
+259 150 7.00287e+012
+348 233 6.97615e+012
+395 215 6.93645e+012
+306 335 6.91096e+012
+308 134 6.71039e+012
+212 251 6.69701e+012
+375 166 6.63239e+012
+334 264 6.61423e+012
+180 325 6.60863e+012
+326 386 6.59346e+012
+285 283 6.58115e+012
+355 314 6.55713e+012
+264 232 6.54201e+012
+176 239 6.26552e+012
+204 378 6.24941e+012
+161 271 6.14024e+012
+226 129 6.08687e+012
+254 357 6.08034e+012
+412 258 6.0459e+012
+257 356 6.00391e+012
+437 191 5.95316e+012
+386 327 5.8782e+012
+314 213 5.85305e+012
+278 408 5.83383e+012
+244 180 5.81277e+012
+408 178 5.78317e+012
+382 245 5.68994e+012
+142 313 5.65222e+012
+194 198 5.64071e+012
+358 398 5.59207e+012
+246 180 5.53201e+012
+362 195 5.4141e+012
+342 145 5.29887e+012
+294 163 5.28337e+012
+274 113 5.13792e+012
+296 162 5.06049e+012
+309 421 5.02052e+012
+370 366 4.94374e+012
+236 392 4.86849e+012
+128 346 4.86031e+012
+397 296 4.72451e+012
+423 228 4.54928e+012
+208 253 4.38493e+012
+161 361 4.31896e+012
+239 182 4.3008e+012
+318 98 4.2111e+012
+384 131 4.02437e+012
+448 163 4.01097e+012
+269 114 3.79857e+012
+290 164 3.70251e+012
+309 215 3.5906e+012
+609 240 3.57767e+012
+628 238 2.97348e+012
+546 38 2.08385e+012
+599 174 1.7932e+012
+32 378 1.61024e+012
+544 36 1.56099e+012
+460 20 1.28973e+012
+604 169 1.25104e+012
+61 390 1.07905e+012
+199 8 5.63108e+011
+539 44 5.5899e+011
+617 175 5.27e+011
+39 373 4.5526e+011
+446 32 4.50193e+011
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_5_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_5_3.txt
new file mode 100644
index 0000000..1897265
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_5_3.txt
@@ -0,0 +1,123 @@
+122
+258 149 1.08053e+016
+386 328 1.01549e+016
+319 302 9.66662e+015
+227 218 9.62447e+015
+375 165 9.29288e+015
+394 214 8.71878e+015
+327 182 8.54457e+015
+195 290 8.48819e+015
+278 200 8.24548e+015
+308 132 8.23162e+015
+249 268 8.17737e+015
+248 271 8.03936e+015
+270 320 8.01277e+015
+291 372 8.01195e+015
+393 210 7.97379e+015
+228 216 7.90236e+015
+366 278 7.7211e+015
+269 323 7.68451e+015
+367 282 7.47026e+015
+277 196 7.4637e+015
+326 178 7.26541e+015
+196 288 7.15329e+015
+438 193 7.07253e+015
+290 375 7.05794e+015
+298 250 7.03657e+015
+257 145 6.93024e+015
+239 99 6.87792e+015
+194 287 6.84481e+015
+338 349 6.83734e+015
+347 232 6.7889e+015
+297 247 6.71199e+015
+412 259 6.57523e+015
+346 228 6.5564e+015
+318 298 6.55315e+015
+234 304 6.50327e+015
+341 350 6.49971e+015
+175 238 6.39944e+015
+226 215 6.33512e+015
+340 353 6.33443e+015
+300 248 6.27336e+015
+376 162 6.21026e+015
+359 400 6.1516e+015
+216 343 5.87679e+015
+546 37 5.80682e+015
+162 362 5.70425e+015
+237 393 5.51408e+015
+309 422 5.50391e+015
+265 232 5.41495e+015
+420 149 5.33772e+015
+328 386 5.31874e+015
+142 312 5.28294e+015
+215 340 5.17135e+015
+373 160 5.1613e+015
+395 211 5.13653e+015
+356 314 5.13367e+015
+307 335 5.11208e+015
+279 197 5.09048e+015
+218 341 4.9622e+015
+182 325 4.5523e+015
+356 117 4.47606e+015
+267 318 4.47137e+015
+316 213 3.88777e+015
+289 84 3.8694e+015
+263 234 3.80038e+015
+232 306 3.80015e+015
+329 179 3.79654e+015
+335 264 3.79322e+015
+214 251 3.7077e+015
+179 327 3.63094e+015
+407 180 3.59821e+015
+321 299 3.44961e+015
+381 247 3.41752e+015
+364 195 3.35795e+015
+161 271 3.35406e+015
+207 167 3.25606e+015
+409 178 3.19687e+015
+226 129 3.15705e+015
+325 388 3.14375e+015
+128 346 3.11224e+015
+204 378 3.00319e+015
+246 180 2.84375e+015
+285 284 2.7645e+015
+354 317 2.75853e+015
+354 315 2.63997e+015
+284 286 2.62243e+015
+278 408 2.58083e+015
+313 215 2.49643e+015
+194 199 2.45711e+015
+361 197 2.38397e+015
+254 357 2.36315e+015
+256 356 2.31819e+015
+293 165 2.21289e+015
+243 183 2.1569e+015
+305 338 2.06903e+015
+211 253 1.8954e+015
+342 146 1.78252e+015
+273 115 1.63569e+015
+629 240 1.63406e+015
+310 129 1.58537e+015
+380 244 1.47433e+015
+305 336 1.4665e+015
+383 245 1.44235e+015
+243 181 1.40363e+015
+276 112 1.35606e+015
+461 21 1.27546e+015
+324 385 1.2204e+015
+312 212 1.14113e+015
+296 163 1.10044e+015
+633 323 9.71405e+014
+360 194 9.2984e+014
+533 42 9.29553e+014
+32 377 8.33124e+014
+292 161 8.18711e+014
+606 242 7.85951e+014
+203 70 7.33001e+014
+272 111 7.27878e+014
+605 169 6.12128e+014
+252 355 5.94189e+014
+540 29 5.85216e+014
+212 255 5.72531e+014
+332 262 5.6603e+014
+60 390 5.57311e+014
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_5_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_5_5.txt
new file mode 100644
index 0000000..4018449
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_5_5.txt
@@ -0,0 +1,132 @@
+131
+239 99 9.96406e+016
+420 149 9.60741e+016
+386 328 9.30035e+016
+308 133 9.17499e+016
+175 238 9.06474e+016
+348 233 8.96542e+016
+375 165 8.83112e+016
+248 271 8.76466e+016
+289 83 8.74593e+016
+412 259 8.69842e+016
+269 323 8.60806e+016
+368 283 8.56046e+016
+356 116 8.55502e+016
+207 167 8.54659e+016
+328 183 8.51488e+016
+248 268 8.39626e+016
+299 251 8.37712e+016
+268 320 8.35304e+016
+227 216 8.34142e+016
+307 335 8.29065e+016
+258 147 8.27679e+016
+195 288 8.22491e+016
+395 215 8.21699e+016
+298 248 8.18812e+016
+258 149 8.09825e+016
+437 192 8.02302e+016
+328 386 8.01512e+016
+367 280 7.94724e+016
+339 350 7.92594e+016
+356 314 7.90166e+016
+290 375 7.89188e+016
+278 198 7.88792e+016
+142 312 7.87653e+016
+319 300 7.8444e+016
+182 325 7.81813e+016
+340 353 7.76585e+016
+279 201 7.73528e+016
+347 230 7.72532e+016
+290 372 7.68798e+016
+203 378 7.67915e+016
+319 302 7.67636e+016
+214 251 7.59112e+016
+217 344 7.57052e+016
+394 212 7.5578e+016
+374 162 7.55559e+016
+234 304 7.55183e+016
+196 291 7.54572e+016
+327 180 7.51951e+016
+216 342 7.51485e+016
+161 271 7.49896e+016
+308 130 7.45999e+016
+227 219 7.39522e+016
+309 422 7.23782e+016
+316 213 7.21349e+016
+226 129 7.12401e+016
+265 232 7.11215e+016
+336 264 7.05295e+016
+193 199 6.96655e+016
+358 399 6.90819e+016
+256 356 6.85055e+016
+286 283 6.81884e+016
+245 180 6.72161e+016
+364 195 6.51367e+016
+321 299 6.3369e+016
+409 178 6.25632e+016
+383 245 6.25429e+016
+277 408 6.2029e+016
+237 393 6.14075e+016
+127 346 5.83703e+016
+162 362 5.83636e+016
+295 163 5.7977e+016
+373 160 5.56855e+016
+276 112 5.48481e+016
+343 146 5.47817e+016
+371 366 4.98147e+016
+306 127 4.80048e+016
+319 98 4.46748e+016
+424 228 4.24483e+016
+230 305 4.20883e+016
+305 338 4.01897e+016
+398 296 3.86532e+016
+354 317 3.81929e+016
+546 37 3.71256e+016
+284 287 3.67328e+016
+334 267 3.6476e+016
+302 336 3.64496e+016
+177 326 3.6037e+016
+331 265 3.49179e+016
+260 233 3.49113e+016
+209 252 3.48597e+016
+254 360 3.42379e+016
+385 131 3.25676e+016
+351 315 3.24793e+016
+628 239 3.24236e+016
+250 358 3.11626e+016
+448 163 3.11392e+016
+281 285 3.09848e+016
+323 387 3.02703e+016
+326 390 2.85554e+016
+240 181 2.77393e+016
+342 149 2.70292e+016
+338 147 2.62397e+016
+290 164 2.59234e+016
+243 184 2.51292e+016
+404 179 2.43408e+016
+311 214 2.43404e+016
+270 114 2.36628e+016
+378 246 2.27745e+016
+609 239 2.27155e+016
+381 248 2.23967e+016
+359 196 2.23449e+016
+408 181 2.15245e+016
+32 377 2.11945e+016
+274 116 1.86989e+016
+461 21 1.86899e+016
+294 166 1.82841e+016
+314 217 1.82293e+016
+380 243 1.79111e+016
+360 193 1.64615e+016
+178 323 1.62439e+016
+312 211 1.59744e+016
+60 390 1.35468e+016
+605 169 1.11533e+016
+538 45 8.88519e+015
+533 41 6.71524e+015
+601 169 6.60422e+015
+598 174 5.91722e+015
+633 323 5.84749e+015
+198 8 5.73136e+015
+32 381 5.68048e+015
+203 70 5.24745e+015
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_5_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_5_7.txt
new file mode 100644
index 0000000..e4baf65
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_5_7.txt
@@ -0,0 +1,97 @@
+96
+248 268 3.04405e+017
+298 248 2.97829e+017
+227 216 2.97317e+017
+258 147 2.95531e+017
+195 288 2.93851e+017
+269 320 2.93661e+017
+278 197 2.92665e+017
+348 230 2.92605e+017
+368 280 2.91919e+017
+308 130 2.9145e+017
+339 350 2.89353e+017
+319 300 2.8884e+017
+394 211 2.88078e+017
+327 179 2.84793e+017
+421 150 2.84279e+017
+290 372 2.81563e+017
+375 163 2.81463e+017
+217 342 2.80038e+017
+356 117 2.77214e+017
+289 84 2.69416e+017
+208 168 2.68905e+017
+328 183 2.68762e+017
+279 201 2.66187e+017
+395 215 2.65773e+017
+259 150 2.65326e+017
+320 303 2.6444e+017
+239 100 2.63341e+017
+348 233 2.63317e+017
+299 252 2.60877e+017
+368 283 2.59282e+017
+228 220 2.58537e+017
+308 133 2.54367e+017
+196 292 2.52655e+017
+375 166 2.48648e+017
+306 335 2.38966e+017
+412 258 2.38094e+017
+437 191 2.3701e+017
+233 304 2.3571e+017
+176 239 2.32548e+017
+355 314 2.30739e+017
+386 327 2.28824e+017
+327 386 2.28095e+017
+204 378 2.2693e+017
+180 325 2.2677e+017
+213 251 2.24701e+017
+334 264 2.24101e+017
+264 232 2.24049e+017
+226 129 2.23941e+017
+285 283 2.22344e+017
+161 271 2.20818e+017
+256 356 2.18495e+017
+287 283 2.16168e+017
+358 398 2.13088e+017
+278 408 2.11349e+017
+315 213 2.09315e+017
+142 312 2.06286e+017
+194 198 2.0627e+017
+244 180 2.05959e+017
+382 245 2.05689e+017
+246 180 2.05311e+017
+408 178 2.0294e+017
+363 195 1.96697e+017
+309 421 1.95409e+017
+294 163 1.90975e+017
+296 162 1.893e+017
+342 146 1.84489e+017
+236 392 1.84446e+017
+274 113 1.83916e+017
+370 366 1.82098e+017
+276 112 1.81809e+017
+128 346 1.79629e+017
+397 296 1.725e+017
+423 228 1.70641e+017
+161 361 1.65137e+017
+318 98 1.61111e+017
+208 253 1.53357e+017
+384 131 1.52275e+017
+250 358 1.52019e+017
+448 163 1.49027e+017
+239 182 1.48487e+017
+322 388 1.47664e+017
+350 316 1.4729e+017
+270 114 1.351e+017
+290 164 1.34802e+017
+378 246 1.29157e+017
+628 238 9.84674e+016
+609 240 8.66043e+016
+546 38 8.35296e+016
+32 377 6.67409e+016
+599 174 5.89169e+016
+460 20 5.12327e+016
+604 169 4.7342e+016
+61 390 4.0839e+016
+539 44 2.5193e+016
+198 8 2.25394e+016
+38 373 1.75077e+016
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_7_3.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_7_3.txt
new file mode 100644
index 0000000..e7d5181
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_7_3.txt
@@ -0,0 +1,134 @@
+133
+258 149 3.41339e+020
+375 165 3.24724e+020
+227 218 3.01628e+020
+319 302 2.98794e+020
+308 132 2.95345e+020
+386 328 2.84631e+020
+195 290 2.70447e+020
+366 278 2.69378e+020
+278 199 2.68662e+020
+248 270 2.68213e+020
+393 210 2.66833e+020
+269 323 2.61469e+020
+394 213 2.58343e+020
+327 181 2.51525e+020
+277 196 2.49633e+020
+326 178 2.44743e+020
+270 320 2.43263e+020
+290 375 2.41856e+020
+299 251 2.40373e+020
+348 233 2.36911e+020
+257 145 2.33966e+020
+340 353 2.33811e+020
+291 372 2.30283e+020
+318 298 2.30166e+020
+346 228 2.29936e+020
+249 268 2.27728e+020
+228 216 2.26587e+020
+368 283 2.24978e+020
+194 287 2.24762e+020
+338 349 2.24135e+020
+297 247 2.21174e+020
+347 231 2.20672e+020
+226 214 2.15166e+020
+196 288 2.14781e+020
+341 350 2.12888e+020
+367 281 2.11654e+020
+247 267 2.08945e+020
+300 248 2.07457e+020
+373 160 1.95778e+020
+217 344 1.941e+020
+376 162 1.94048e+020
+546 37 1.91657e+020
+412 258 1.9024e+020
+218 341 1.82228e+020
+395 211 1.7856e+020
+438 192 1.75221e+020
+215 340 1.74854e+020
+279 197 1.72506e+020
+356 117 1.70438e+020
+267 318 1.64088e+020
+309 422 1.62933e+020
+239 99 1.5705e+020
+289 84 1.56372e+020
+175 238 1.52881e+020
+307 129 1.50514e+020
+328 386 1.45693e+020
+329 179 1.45463e+020
+381 247 1.42384e+020
+407 180 1.40151e+020
+263 234 1.40028e+020
+321 299 1.39709e+020
+232 306 1.36569e+020
+359 400 1.30703e+020
+179 327 1.29923e+020
+354 317 1.29874e+020
+235 304 1.29819e+020
+162 362 1.29243e+020
+142 312 1.2751e+020
+284 286 1.23512e+020
+325 388 1.19762e+020
+182 325 1.1467e+020
+307 335 1.14261e+020
+420 149 1.12746e+020
+237 393 1.11778e+020
+204 378 1.10385e+020
+356 314 1.10228e+020
+243 183 1.0854e+020
+305 338 1.0609e+020
+313 215 1.03777e+020
+214 251 1.00222e+020
+161 271 9.79134e+019
+293 165 9.75434e+019
+361 197 9.69778e+019
+246 180 9.38841e+019
+128 346 9.36911e+019
+226 129 9.19815e+019
+278 408 9.19308e+019
+316 213 8.98873e+019
+287 283 8.63959e+019
+208 168 8.44465e+019
+266 232 8.0734e+019
+333 266 7.74082e+019
+253 358 7.61414e+019
+273 115 7.56721e+019
+211 253 7.51884e+019
+364 195 6.96033e+019
+257 356 6.54778e+019
+380 244 6.53568e+019
+406 177 6.51841e+019
+283 283 6.17838e+019
+341 147 5.95224e+019
+353 314 5.80478e+019
+312 212 5.70449e+019
+324 385 5.68244e+019
+277 112 5.3568e+019
+345 145 5.32496e+019
+360 194 4.85536e+019
+297 162 4.78919e+019
+337 263 4.73107e+019
+242 179 4.7301e+019
+292 161 4.34622e+019
+633 322 4.28981e+019
+342 149 4.22929e+019
+178 324 4.12605e+019
+272 111 3.90186e+019
+628 239 3.88409e+019
+461 21 3.68861e+019
+304 335 3.64141e+019
+533 42 3.50227e+019
+211 251 3.41016e+019
+252 355 3.34674e+019
+332 262 3.31141e+019
+32 378 3.13099e+019
+341 145 3.01021e+019
+411 177 2.92492e+019
+203 70 2.86143e+019
+195 198 2.84306e+019
+385 244 2.72432e+019
+605 169 2.63993e+019
+606 242 2.18414e+019
+540 29 1.87029e+019
+32 381 1.86612e+019
+210 249 1.77147e+019
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_7_5.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_7_5.txt
new file mode 100644
index 0000000..3d09aab
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_7_5.txt
@@ -0,0 +1,133 @@
+132
+239 99 3.71252e+021
+420 149 3.61786e+021
+386 328 3.58925e+021
+308 133 3.57349e+021
+375 165 3.5376e+021
+348 233 3.49753e+021
+328 183 3.39386e+021
+289 83 3.38856e+021
+412 259 3.37905e+021
+356 117 3.36785e+021
+299 251 3.35779e+021
+368 283 3.35377e+021
+175 238 3.34101e+021
+248 271 3.32244e+021
+269 323 3.31452e+021
+395 215 3.29899e+021
+258 149 3.23025e+021
+438 192 3.16031e+021
+340 353 3.10233e+021
+279 201 3.09057e+021
+207 167 3.08123e+021
+319 302 3.0259e+021
+290 375 3.01877e+021
+196 291 2.99299e+021
+217 344 2.97489e+021
+307 335 2.9653e+021
+228 219 2.95051e+021
+248 268 2.90642e+021
+142 312 2.90001e+021
+328 386 2.8995e+021
+356 314 2.87762e+021
+227 216 2.86357e+021
+195 289 2.84801e+021
+268 320 2.83812e+021
+298 248 2.83678e+021
+214 251 2.81724e+021
+309 422 2.81319e+021
+278 198 2.81068e+021
+182 325 2.79467e+021
+367 280 2.76633e+021
+339 350 2.75312e+021
+347 230 2.72822e+021
+161 271 2.72604e+021
+203 378 2.71948e+021
+358 399 2.70928e+021
+327 180 2.69416e+021
+234 304 2.6838e+021
+290 372 2.67674e+021
+341 350 2.63985e+021
+226 129 2.62796e+021
+316 213 2.61993e+021
+374 162 2.61752e+021
+216 342 2.60865e+021
+256 356 2.60382e+021
+265 232 2.55512e+021
+286 283 2.54147e+021
+335 264 2.48577e+021
+245 180 2.4827e+021
+321 299 2.45023e+021
+297 246 2.40529e+021
+364 195 2.37522e+021
+346 227 2.34562e+021
+237 393 2.33855e+021
+373 160 2.28835e+021
+193 199 2.26822e+021
+162 362 2.23852e+021
+409 178 2.22872e+021
+278 408 2.22397e+021
+383 245 2.20495e+021
+128 346 2.14528e+021
+276 112 2.11147e+021
+296 162 2.06785e+021
+344 145 2.00911e+021
+306 127 1.99668e+021
+371 366 1.67165e+021
+305 338 1.61194e+021
+354 317 1.55429e+021
+546 37 1.53789e+021
+334 267 1.51538e+021
+319 98 1.5116e+021
+233 307 1.40427e+021
+254 360 1.39563e+021
+230 305 1.3605e+021
+423 228 1.35242e+021
+180 328 1.27806e+021
+398 296 1.22806e+021
+177 326 1.21195e+021
+326 390 1.20754e+021
+628 239 1.1877e+021
+342 149 1.16793e+021
+302 336 1.16011e+021
+264 235 1.13031e+021
+209 252 1.09454e+021
+362 198 1.09092e+021
+243 183 1.09037e+021
+261 233 1.07834e+021
+331 265 1.05427e+021
+408 181 1.01159e+021
+384 131 1.00937e+021
+250 358 9.92352e+020
+448 163 9.79355e+020
+323 387 9.49465e+020
+32 377 9.02411e+020
+294 166 8.74782e+020
+274 116 8.74209e+020
+314 217 8.60372e+020
+406 176 8.53103e+020
+241 181 7.98026e+020
+380 243 7.94653e+020
+290 164 7.67143e+020
+338 147 7.57806e+020
+360 193 7.52422e+020
+311 214 7.41228e+020
+461 21 7.31378e+020
+312 211 7.25448e+020
+178 323 7.16409e+020
+404 179 6.99493e+020
+292 161 6.9727e+020
+270 114 6.93072e+020
+359 196 6.85345e+020
+378 246 6.58515e+020
+210 249 6.21542e+020
+609 239 5.71894e+020
+60 390 4.81989e+020
+605 169 4.77028e+020
+633 323 3.18042e+020
+538 45 3.17627e+020
+533 42 2.72911e+020
+203 70 2.51781e+020
+32 381 2.33479e+020
+600 169 2.15209e+020
+198 8 2.02865e+020
diff --git a/test_data/harriscorners/hc_fsc_0.00_0.15_7_7.txt b/test_data/harriscorners/hc_fsc_0.00_0.15_7_7.txt
new file mode 100644
index 0000000..8aa9b37
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_0.00_0.15_7_7.txt
@@ -0,0 +1,104 @@
+103
+421 149 1.21643e+022
+248 268 1.19386e+022
+258 147 1.19e+022
+299 249 1.17941e+022
+356 117 1.17926e+022
+227 216 1.17904e+022
+308 130 1.17079e+022
+348 230 1.1631e+022
+278 197 1.16239e+022
+319 300 1.15722e+022
+368 280 1.153e+022
+268 320 1.15241e+022
+195 288 1.15007e+022
+394 211 1.14332e+022
+327 180 1.13915e+022
+339 350 1.1374e+022
+289 84 1.13661e+022
+375 163 1.12556e+022
+328 183 1.12477e+022
+395 215 1.11539e+022
+208 168 1.10954e+022
+259 150 1.10729e+022
+279 201 1.10542e+022
+348 233 1.10013e+022
+290 372 1.0995e+022
+217 342 1.09654e+022
+320 303 1.08995e+022
+239 100 1.08876e+022
+299 252 1.07764e+022
+368 283 1.07622e+022
+308 133 1.06758e+022
+228 219 1.05492e+022
+437 191 1.03591e+022
+412 258 1.0345e+022
+375 166 1.03424e+022
+196 292 1.0202e+022
+386 327 9.84076e+021
+176 239 9.57959e+021
+306 335 9.33573e+021
+226 129 9.16055e+021
+204 378 9.12738e+021
+355 314 9.1172e+021
+233 304 9.04719e+021
+327 386 9.04265e+021
+358 398 9.03813e+021
+335 264 8.92028e+021
+181 325 8.90864e+021
+213 251 8.89592e+021
+161 271 8.86926e+021
+256 356 8.85062e+021
+285 284 8.77812e+021
+264 232 8.74882e+021
+287 283 8.73625e+021
+142 312 8.52967e+021
+315 213 8.49531e+021
+278 408 8.48246e+021
+194 198 8.46142e+021
+246 180 8.46089e+021
+309 421 8.37885e+021
+382 245 8.25484e+021
+408 178 8.09241e+021
+363 195 7.99555e+021
+296 162 7.8729e+021
+236 392 7.76956e+021
+294 163 7.68313e+021
+276 112 7.59036e+021
+344 145 7.47238e+021
+370 366 7.39996e+021
+274 113 7.37115e+021
+128 346 7.30442e+021
+161 361 6.97972e+021
+397 296 6.97771e+021
+423 228 6.95101e+021
+326 390 6.82016e+021
+318 98 6.70278e+021
+384 131 6.25683e+021
+208 253 6.17698e+021
+250 358 6.13602e+021
+302 336 6.06137e+021
+448 163 6.00543e+021
+362 199 5.96024e+021
+239 182 5.91963e+021
+322 388 5.84965e+021
+350 316 5.82771e+021
+290 164 5.56357e+021
+270 114 5.55627e+021
+311 214 5.46391e+021
+338 147 5.43292e+021
+378 246 5.35598e+021
+359 196 5.24001e+021
+628 238 3.85072e+021
+546 38 3.6088e+021
+32 377 3.11025e+021
+609 240 2.54532e+021
+460 20 2.20716e+021
+599 174 2.06492e+021
+604 169 2.02568e+021
+61 390 1.6742e+021
+539 44 1.18093e+021
+198 8 9.54686e+020
+600 168 9.10634e+020
+38 373 7.22412e+020
+632 323 6.2014e+020
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_3_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_3_3.txt
new file mode 100644
index 0000000..6657b04
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_3_3.txt
@@ -0,0 +1,112 @@
+111
+193 199 9.2637e+011
+234 304 9.09528e+011
+327 387 8.82552e+011
+160 272 8.69034e+011
+335 264 8.67667e+011
+265 232 8.64265e+011
+420 148 8.64e+011
+255 357 8.43996e+011
+225 130 8.25407e+011
+277 409 8.17461e+011
+203 379 8.15396e+011
+285 284 8.12161e+011
+207 166 7.9013e+011
+386 328 7.88009e+011
+355 315 7.87369e+011
+438 193 7.84907e+011
+295 163 7.83566e+011
+355 116 7.76582e+011
+249 268 7.60458e+011
+258 149 7.42723e+011
+394 214 7.41334e+011
+327 182 7.33874e+011
+409 178 7.33773e+011
+209 252 7.20508e+011
+213 252 7.18843e+011
+230 305 7.18314e+011
+319 302 7.17451e+011
+343 146 7.12643e+011
+227 218 7.09407e+011
+413 259 7.05167e+011
+245 181 7.00102e+011
+347 232 6.99443e+011
+359 400 6.98424e+011
+288 83 6.97956e+011
+275 113 6.96411e+011
+302 336 6.95884e+011
+383 245 6.90528e+011
+278 200 6.89492e+011
+367 282 6.84523e+011
+291 372 6.81098e+011
+237 393 6.81093e+011
+239 98 6.76557e+011
+175 237 6.72564e+011
+196 288 6.62199e+011
+269 320 6.60679e+011
+308 132 6.52207e+011
+331 265 6.49964e+011
+306 335 6.49632e+011
+127 347 6.48588e+011
+181 325 6.19817e+011
+315 213 6.13043e+011
+177 326 6.03464e+011
+142 311 6.00834e+011
+375 165 5.9975e+011
+261 233 5.87064e+011
+299 248 5.77978e+011
+298 251 5.75891e+011
+351 315 5.75121e+011
+338 350 5.69661e+011
+375 162 5.6831e+011
+240 181 5.60121e+011
+162 362 5.55089e+011
+281 284 5.43315e+011
+216 344 5.42916e+011
+363 195 5.42011e+011
+393 210 5.40883e+011
+310 422 5.29508e+011
+311 214 5.14122e+011
+277 196 5.12364e+011
+366 278 5.07261e+011
+608 240 5.06536e+011
+323 387 5.05725e+011
+257 145 4.99105e+011
+339 353 4.93093e+011
+326 178 4.91127e+011
+359 196 4.76137e+011
+405 179 4.74446e+011
+318 298 4.61835e+011
+449 162 4.50714e+011
+346 228 4.39933e+011
+339 146 4.3761e+011
+546 37 4.24742e+011
+215 340 4.21955e+011
+399 295 4.18076e+011
+386 130 3.98535e+011
+372 366 3.95913e+011
+320 98 3.83848e+011
+378 246 3.71715e+011
+307 128 3.703e+011
+251 358 3.65166e+011
+271 113 3.41708e+011
+424 227 3.33328e+011
+629 240 3.23141e+011
+290 164 3.1637e+011
+602 170 1.45361e+011
+59 391 1.32337e+011
+598 173 1.17203e+011
+461 22 1.13642e+011
+33 377 1.13083e+011
+534 42 1.12569e+011
+537 45 9.34681e+010
+445 31 8.93609e+010
+200 8 8.66138e+010
+634 323 8.59606e+010
+609 171 7.46826e+010
+540 29 5.92976e+010
+274 478 5.56231e+010
+203 70 5.15149e+010
+33 382 4.91205e+010
+618 174 4.84058e+010
+74 350 4.67664e+010
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_3_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_3_5.txt
new file mode 100644
index 0000000..472b7a4
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_3_5.txt
@@ -0,0 +1,115 @@
+114
+420 149 6.30483e+012
+239 99 6.29582e+012
+247 268 6.24305e+012
+195 288 6.13067e+012
+268 320 6.12932e+012
+207 167 5.95926e+012
+298 248 5.9368e+012
+227 216 5.92047e+012
+308 133 5.87985e+012
+289 372 5.86352e+012
+248 271 5.8351e+012
+339 350 5.83181e+012
+367 280 5.8085e+012
+258 147 5.74835e+012
+175 238 5.74223e+012
+374 162 5.71748e+012
+307 335 5.62873e+012
+347 230 5.60197e+012
+386 328 5.56045e+012
+227 219 5.55725e+012
+216 342 5.54029e+012
+348 233 5.53108e+012
+278 198 5.52891e+012
+327 386 5.42977e+012
+307 130 5.42494e+012
+203 378 5.42142e+012
+375 165 5.42054e+012
+269 323 5.40621e+012
+288 83 5.3978e+012
+193 199 5.36408e+012
+182 325 5.36402e+012
+356 314 5.33816e+012
+319 300 5.32739e+012
+235 304 5.32558e+012
+355 116 5.31084e+012
+336 264 5.2938e+012
+438 192 5.26842e+012
+327 180 5.2553e+012
+368 283 5.25029e+012
+319 303 5.23715e+012
+394 212 5.12581e+012
+161 272 5.12406e+012
+225 129 5.12317e+012
+412 259 5.1158e+012
+299 251 5.11122e+012
+290 375 5.0944e+012
+277 409 5.09321e+012
+328 183 5.08853e+012
+286 284 5.07578e+012
+142 312 5.04181e+012
+214 251 4.96803e+012
+266 232 4.95664e+012
+316 213 4.93937e+012
+256 357 4.85184e+012
+340 353 4.70688e+012
+217 345 4.66753e+012
+245 180 4.58517e+012
+229 305 4.56171e+012
+359 399 4.55175e+012
+296 163 4.52605e+012
+383 245 4.48237e+012
+409 178 4.43294e+012
+364 195 4.42132e+012
+344 146 4.35282e+012
+330 265 4.28205e+012
+309 422 4.26507e+012
+237 392 4.25788e+012
+260 233 4.1843e+012
+281 285 4.13775e+012
+127 346 4.11327e+012
+608 239 4.11009e+012
+301 336 4.07876e+012
+276 113 4.05007e+012
+208 252 4.04135e+012
+371 366 4.02276e+012
+250 358 3.97158e+012
+350 315 3.91591e+012
+322 388 3.90815e+012
+239 181 3.89865e+012
+424 228 3.77996e+012
+310 214 3.72799e+012
+162 361 3.70266e+012
+338 147 3.68572e+012
+398 295 3.64727e+012
+270 114 3.64205e+012
+290 164 3.62828e+012
+319 98 3.59227e+012
+404 179 3.56357e+012
+176 326 3.53723e+012
+378 246 3.45047e+012
+385 131 3.43194e+012
+358 196 3.41622e+012
+448 162 3.23216e+012
+546 37 2.60179e+012
+628 239 2.24287e+012
+598 174 1.45013e+012
+32 377 1.20928e+012
+461 21 1.05912e+012
+60 390 9.36681e+011
+445 31 9.13381e+011
+602 170 8.62147e+011
+618 174 7.30519e+011
+199 8 7.03236e+011
+537 45 6.966e+011
+534 42 6.88658e+011
+605 169 6.88351e+011
+634 322 6.08736e+011
+609 170 5.34571e+011
+544 41 4.13763e+011
+540 29 4.10544e+011
+33 381 4.07217e+011
+203 70 3.94772e+011
+454 23 3.73909e+011
+39 372 3.49613e+011
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_3_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_3_7.txt
new file mode 100644
index 0000000..1818246
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_3_7.txt
@@ -0,0 +1,107 @@
+106
+248 268 1.87908e+013
+195 288 1.84493e+013
+298 248 1.83784e+013
+367 279 1.82967e+013
+268 320 1.82014e+013
+227 216 1.81487e+013
+258 147 1.80749e+013
+339 350 1.80155e+013
+278 197 1.7928e+013
+347 229 1.78843e+013
+308 130 1.75619e+013
+289 371 1.75313e+013
+374 162 1.74798e+013
+394 211 1.74525e+013
+319 299 1.74414e+013
+327 179 1.73845e+013
+216 341 1.73451e+013
+232 305 1.6197e+013
+305 335 1.61725e+013
+421 150 1.58082e+013
+354 314 1.56539e+013
+328 183 1.5624e+013
+212 251 1.55921e+013
+284 284 1.55769e+013
+228 220 1.5558e+013
+333 264 1.55524e+013
+208 168 1.54429e+013
+279 201 1.53532e+013
+320 303 1.53311e+013
+248 272 1.53073e+013
+308 133 1.53021e+013
+239 100 1.52484e+013
+325 387 1.51867e+013
+395 215 1.51843e+013
+263 233 1.51833e+013
+375 166 1.50878e+013
+356 117 1.49416e+013
+289 84 1.48307e+013
+180 325 1.4813e+013
+243 181 1.44369e+013
+254 357 1.43933e+013
+407 178 1.40154e+013
+313 213 1.39748e+013
+308 335 1.39138e+013
+381 245 1.37664e+013
+175 239 1.37644e+013
+204 378 1.34537e+013
+386 327 1.34062e+013
+412 258 1.33845e+013
+161 271 1.33285e+013
+226 129 1.32466e+013
+361 195 1.31853e+013
+183 325 1.3173e+013
+357 314 1.314e+013
+341 146 1.30429e+013
+437 191 1.30403e+013
+293 163 1.29859e+013
+273 113 1.29434e+013
+287 283 1.28496e+013
+257 356 1.27957e+013
+215 251 1.2755e+013
+278 408 1.26728e+013
+142 313 1.25758e+013
+194 199 1.2574e+013
+236 304 1.2208e+013
+358 398 1.20319e+013
+246 180 1.18527e+013
+370 366 1.17395e+013
+249 358 1.1643e+013
+321 388 1.16119e+013
+207 253 1.13426e+013
+309 421 1.12996e+013
+397 296 1.10686e+013
+259 233 1.09553e+013
+423 228 1.0949e+013
+269 114 1.07467e+013
+309 214 1.06221e+013
+128 346 1.05324e+013
+289 164 1.05309e+013
+237 391 1.04227e+013
+377 246 1.02469e+013
+318 98 1.015e+013
+609 239 9.97081e+012
+384 131 9.94259e+012
+448 163 9.86564e+012
+357 196 9.81781e+012
+162 360 9.38448e+012
+547 38 6.71251e+012
+628 238 6.27403e+012
+599 174 5.32455e+012
+32 378 3.60313e+012
+604 169 2.74492e+012
+460 20 2.72419e+012
+617 175 2.49147e+012
+61 390 2.39475e+012
+445 32 2.17261e+012
+535 43 1.86019e+012
+199 8 1.71654e+012
+633 322 1.55388e+012
+38 373 1.14445e+012
+551 40 1.10723e+012
+610 170 1.08892e+012
+203 69 1.00688e+012
+27 373 1.00668e+012
+454 23 1.00662e+012
+540 29 9.98629e+011
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_5_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_5_3.txt
new file mode 100644
index 0000000..6ae3d99
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_5_3.txt
@@ -0,0 +1,121 @@
+120
+420 148 2.5474e+016
+386 328 2.48823e+016
+355 116 2.41246e+016
+193 199 2.40366e+016
+234 304 2.37577e+016
+258 149 2.36803e+016
+438 192 2.36412e+016
+265 232 2.27493e+016
+288 83 2.26334e+016
+394 214 2.25462e+016
+160 272 2.25409e+016
+239 99 2.24873e+016
+335 264 2.23492e+016
+207 166 2.23005e+016
+327 182 2.21446e+016
+327 386 2.18602e+016
+319 302 2.18555e+016
+412 259 2.17164e+016
+203 379 2.1626e+016
+278 200 2.15127e+016
+308 132 2.14405e+016
+277 409 2.14265e+016
+225 130 2.1346e+016
+286 284 2.11137e+016
+375 165 2.10792e+016
+255 357 2.10181e+016
+175 237 2.07472e+016
+227 218 2.06908e+016
+347 232 2.04878e+016
+359 400 2.03855e+016
+249 268 1.99292e+016
+367 282 1.98698e+016
+409 178 1.98621e+016
+237 393 1.97688e+016
+295 163 1.96886e+016
+181 325 1.9532e+016
+306 335 1.93484e+016
+195 291 1.93469e+016
+383 245 1.9206e+016
+291 372 1.90761e+016
+315 213 1.90072e+016
+355 314 1.87508e+016
+213 252 1.83891e+016
+270 320 1.82696e+016
+343 146 1.81396e+016
+298 251 1.81379e+016
+245 181 1.7993e+016
+142 311 1.79656e+016
+269 323 1.75969e+016
+162 362 1.74074e+016
+275 113 1.73876e+016
+196 288 1.72848e+016
+363 195 1.68968e+016
+393 210 1.68811e+016
+127 347 1.67405e+016
+230 305 1.65961e+016
+366 278 1.63821e+016
+309 422 1.62451e+016
+340 353 1.62186e+016
+216 344 1.60684e+016
+338 349 1.59274e+016
+297 247 1.58644e+016
+302 336 1.58365e+016
+277 196 1.57447e+016
+290 375 1.56415e+016
+341 350 1.5593e+016
+209 252 1.54363e+016
+326 178 1.53966e+016
+331 265 1.52052e+016
+257 145 1.49496e+016
+318 298 1.48623e+016
+376 162 1.4847e+016
+346 228 1.47336e+016
+373 161 1.45601e+016
+351 315 1.43272e+016
+240 181 1.42134e+016
+260 233 1.40163e+016
+267 319 1.37298e+016
+177 326 1.37261e+016
+218 341 1.36657e+016
+226 215 1.3534e+016
+546 37 1.33834e+016
+281 285 1.32355e+016
+215 340 1.2993e+016
+310 214 1.28088e+016
+322 387 1.27714e+016
+398 295 1.25656e+016
+307 128 1.24405e+016
+449 162 1.22946e+016
+372 366 1.20829e+016
+608 240 1.20715e+016
+404 179 1.19288e+016
+424 228 1.18928e+016
+320 98 1.17592e+016
+339 147 1.12669e+016
+359 196 1.12199e+016
+378 246 1.08813e+016
+385 130 1.05377e+016
+251 358 1.04521e+016
+290 164 1.04339e+016
+270 113 1.00116e+016
+629 239 8.57294e+015
+461 22 3.72946e+015
+33 377 3.63357e+015
+598 173 3.56759e+015
+534 42 3.47792e+015
+602 170 3.37368e+015
+59 391 3.16533e+015
+634 323 3.00003e+015
+537 45 2.86518e+015
+445 31 2.78964e+015
+199 8 2.47938e+015
+203 70 1.84788e+015
+638 311 1.77874e+015
+540 29 1.72551e+015
+33 382 1.67949e+015
+609 171 1.65743e+015
+605 169 1.42444e+015
+544 41 1.36966e+015
+618 174 1.32818e+015
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_5_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_5_5.txt
new file mode 100644
index 0000000..da1ecef
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_5_5.txt
@@ -0,0 +1,113 @@
+112
+420 149 2.22093e+017
+239 99 2.21221e+017
+207 167 2.049e+017
+175 238 2.01678e+017
+308 133 2.01089e+017
+289 83 1.96713e+017
+386 328 1.95944e+017
+355 116 1.95221e+017
+248 271 1.92265e+017
+375 165 1.90977e+017
+348 233 1.90144e+017
+438 192 1.8983e+017
+307 335 1.85877e+017
+258 149 1.85424e+017
+203 378 1.83932e+017
+412 259 1.83763e+017
+193 199 1.83063e+017
+247 268 1.82618e+017
+269 323 1.82044e+017
+368 283 1.80919e+017
+227 219 1.80529e+017
+299 251 1.80191e+017
+195 289 1.79799e+017
+328 183 1.79584e+017
+268 320 1.79245e+017
+328 386 1.78456e+017
+225 129 1.77759e+017
+298 248 1.77703e+017
+278 200 1.77347e+017
+394 214 1.77299e+017
+227 216 1.77096e+017
+367 280 1.76392e+017
+142 312 1.76331e+017
+182 325 1.76256e+017
+356 314 1.75915e+017
+319 302 1.75493e+017
+336 264 1.74564e+017
+160 271 1.73565e+017
+339 350 1.73053e+017
+235 304 1.72679e+017
+347 230 1.71974e+017
+289 372 1.71728e+017
+374 162 1.70564e+017
+277 409 1.70148e+017
+214 251 1.68745e+017
+290 375 1.68684e+017
+216 342 1.67507e+017
+316 213 1.67182e+017
+307 130 1.66207e+017
+266 232 1.66083e+017
+340 353 1.66061e+017
+327 180 1.65155e+017
+286 284 1.64651e+017
+256 357 1.63266e+017
+359 399 1.62759e+017
+245 180 1.56172e+017
+296 163 1.53718e+017
+383 245 1.52935e+017
+309 422 1.52173e+017
+364 195 1.51897e+017
+409 178 1.47704e+017
+229 305 1.46163e+017
+237 392 1.45445e+017
+371 366 1.45217e+017
+344 146 1.44703e+017
+127 346 1.42405e+017
+330 265 1.40492e+017
+276 113 1.40411e+017
+424 228 1.38039e+017
+260 233 1.37408e+017
+301 336 1.35725e+017
+319 98 1.34201e+017
+162 361 1.34088e+017
+208 252 1.33909e+017
+281 285 1.32866e+017
+250 358 1.32433e+017
+398 295 1.30874e+017
+310 214 1.30233e+017
+239 181 1.27928e+017
+350 315 1.27644e+017
+322 388 1.26775e+017
+290 164 1.25917e+017
+338 147 1.25905e+017
+270 114 1.25776e+017
+385 131 1.24876e+017
+378 246 1.22159e+017
+404 179 1.21667e+017
+448 162 1.21613e+017
+176 326 1.2148e+017
+358 196 1.21424e+017
+608 239 1.1583e+017
+546 37 9.1076e+016
+628 239 7.09351e+016
+598 174 5.55276e+016
+32 377 4.63283e+016
+461 21 4.00366e+016
+60 390 3.39606e+016
+445 31 3.33143e+016
+601 169 2.82927e+016
+199 8 2.70364e+016
+634 322 2.69033e+016
+538 45 2.6501e+016
+618 174 2.54925e+016
+534 42 2.5238e+016
+605 169 2.34665e+016
+33 381 1.5866e+016
+203 70 1.52475e+016
+544 41 1.4854e+016
+609 171 1.41351e+016
+454 23 1.35725e+016
+541 29 1.34052e+016
+39 372 1.31058e+016
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_5_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_5_7.txt
new file mode 100644
index 0000000..71424c0
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_5_7.txt
@@ -0,0 +1,108 @@
+107
+248 268 6.5312e+017
+298 248 6.49243e+017
+258 147 6.48254e+017
+227 216 6.42183e+017
+278 198 6.41296e+017
+367 280 6.4053e+017
+195 288 6.3823e+017
+308 130 6.35422e+017
+347 230 6.34588e+017
+268 320 6.34124e+017
+339 350 6.296e+017
+319 300 6.27858e+017
+327 180 6.24114e+017
+394 211 6.20595e+017
+374 162 6.19737e+017
+289 372 6.08877e+017
+216 341 6.01174e+017
+421 150 5.99993e+017
+328 183 5.86782e+017
+356 117 5.85957e+017
+348 233 5.80593e+017
+308 133 5.76578e+017
+239 100 5.76265e+017
+395 215 5.76206e+017
+279 201 5.74701e+017
+299 252 5.74506e+017
+289 84 5.71268e+017
+208 168 5.70491e+017
+259 150 5.70374e+017
+368 283 5.70275e+017
+375 166 5.66225e+017
+320 303 5.65697e+017
+305 335 5.57795e+017
+232 305 5.46975e+017
+354 314 5.46333e+017
+334 264 5.46132e+017
+284 284 5.41732e+017
+212 251 5.37409e+017
+326 386 5.27463e+017
+263 232 5.23914e+017
+180 325 5.19434e+017
+175 239 5.16365e+017
+412 258 5.14507e+017
+243 181 5.13681e+017
+254 357 5.13598e+017
+386 327 5.08632e+017
+437 191 5.07521e+017
+381 245 5.04402e+017
+313 213 5.03348e+017
+407 178 4.99375e+017
+226 129 4.98929e+017
+204 378 4.96695e+017
+308 335 4.93418e+017
+161 271 4.89208e+017
+361 196 4.81433e+017
+357 314 4.77528e+017
+293 163 4.75846e+017
+273 113 4.71045e+017
+194 199 4.69539e+017
+341 146 4.6838e+017
+278 408 4.68161e+017
+257 356 4.67072e+017
+287 283 4.63742e+017
+215 251 4.63516e+017
+142 313 4.62323e+017
+358 398 4.54072e+017
+370 366 4.44342e+017
+246 180 4.44215e+017
+423 228 4.30213e+017
+309 421 4.28173e+017
+239 182 4.23463e+017
+397 296 4.22516e+017
+249 358 4.12411e+017
+321 388 4.11351e+017
+228 305 4.05234e+017
+318 98 4.01168e+017
+259 233 4.00216e+017
+309 214 3.98394e+017
+128 346 3.97492e+017
+269 114 3.9708e+017
+289 164 3.95651e+017
+384 131 3.94944e+017
+448 163 3.92125e+017
+236 392 3.88682e+017
+357 196 3.69891e+017
+162 360 3.5913e+017
+609 239 3.10391e+017
+547 38 2.47452e+017
+628 238 2.08741e+017
+599 174 2.06151e+017
+32 378 1.50275e+017
+461 20 1.0819e+017
+604 169 1.04654e+017
+61 390 9.39135e+016
+617 175 8.99317e+016
+445 32 8.71105e+016
+538 44 7.7129e+016
+199 8 7.3456e+016
+633 322 7.18073e+016
+535 43 6.60329e+016
+38 373 4.49398e+016
+454 23 4.13304e+016
+203 69 4.12448e+016
+552 40 4.0108e+016
+27 373 3.83708e+016
+610 170 3.51606e+016
+540 29 3.33278e+016
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_7_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_7_3.txt
new file mode 100644
index 0000000..a354df9
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_7_3.txt
@@ -0,0 +1,125 @@
+124
+386 328 8.6055e+020
+420 148 8.55038e+020
+355 116 8.2885e+020
+239 99 8.27779e+020
+438 192 8.24684e+020
+258 149 8.19602e+020
+288 83 7.88083e+020
+375 165 7.82066e+020
+308 132 7.77139e+020
+394 214 7.71902e+020
+412 259 7.64481e+020
+327 182 7.57557e+020
+319 302 7.53271e+020
+193 199 7.47494e+020
+278 200 7.4689e+020
+175 238 7.36963e+020
+234 304 7.36182e+020
+207 166 7.28795e+020
+327 386 7.1269e+020
+265 232 7.09639e+020
+227 218 6.94629e+020
+335 264 6.8538e+020
+347 232 6.84094e+020
+248 271 6.83669e+020
+299 251 6.82387e+020
+203 379 6.69706e+020
+359 400 6.66735e+020
+367 282 6.6584e+020
+307 335 6.65627e+020
+160 272 6.64719e+020
+277 409 6.61314e+020
+195 291 6.60369e+020
+269 323 6.59946e+020
+286 284 6.58125e+020
+181 325 6.57578e+020
+237 393 6.53545e+020
+356 314 6.45439e+020
+225 130 6.42051e+020
+315 213 6.38769e+020
+255 357 6.31035e+020
+409 178 6.27365e+020
+249 268 6.24657e+020
+340 353 6.22787e+020
+383 245 6.18342e+020
+291 372 6.13644e+020
+142 312 6.11051e+020
+270 320 6.08432e+020
+295 163 5.99533e+020
+309 422 5.9742e+020
+162 362 5.91057e+020
+217 344 5.88609e+020
+290 375 5.88276e+020
+366 278 5.81099e+020
+245 180 5.79098e+020
+393 210 5.7493e+020
+363 195 5.69338e+020
+213 251 5.65714e+020
+341 350 5.59106e+020
+343 146 5.45679e+020
+300 248 5.44727e+020
+196 288 5.43895e+020
+297 247 5.43718e+020
+338 349 5.41659e+020
+277 196 5.35105e+020
+326 178 5.31575e+020
+346 228 5.31346e+020
+275 113 5.28725e+020
+127 346 5.28252e+020
+318 298 5.24389e+020
+218 341 5.13657e+020
+376 162 5.11951e+020
+257 145 5.11319e+020
+373 161 4.8954e+020
+226 214 4.80442e+020
+230 305 4.79277e+020
+267 319 4.61546e+020
+546 37 4.57601e+020
+302 336 4.55733e+020
+215 340 4.51161e+020
+307 128 4.48098e+020
+331 265 4.47505e+020
+371 366 4.44758e+020
+260 233 4.4194e+020
+424 228 4.36745e+020
+398 295 4.30265e+020
+209 252 4.30104e+020
+319 98 4.23738e+020
+351 315 4.1883e+020
+240 181 4.14683e+020
+281 285 4.14203e+020
+177 326 4.00838e+020
+310 214 3.95795e+020
+449 162 3.92796e+020
+385 131 3.78008e+020
+322 387 3.75664e+020
+404 179 3.74924e+020
+290 164 3.62142e+020
+378 246 3.58852e+020
+338 147 3.56667e+020
+250 358 3.47513e+020
+270 114 3.46378e+020
+358 196 3.41356e+020
+608 240 3.29071e+020
+325 389 3.1721e+020
+354 317 2.87491e+020
+629 239 2.71825e+020
+243 183 2.45546e+020
+191 1 1.93727e+020
+32 377 1.44422e+020
+461 21 1.41794e+020
+598 174 1.218e+020
+534 42 1.19051e+020
+60 390 1.15862e+020
+634 322 1.14614e+020
+538 45 9.42488e+019
+445 31 9.18483e+019
+638 312 8.68921e+019
+601 169 8.64649e+019
+199 8 8.5779e+019
+203 70 6.93165e+019
+605 169 6.55082e+019
+33 382 6.16306e+019
+540 29 5.32011e+019
+544 41 4.39293e+019
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_7_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_7_5.txt
new file mode 100644
index 0000000..f175abf
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_7_5.txt
@@ -0,0 +1,110 @@
+109
+420 149 8.80514e+021
+239 99 8.70978e+021
+207 167 8.02392e+021
+289 83 7.97858e+021
+356 116 7.96314e+021
+175 238 7.86839e+021
+308 133 7.80115e+021
+386 328 7.64232e+021
+438 192 7.53786e+021
+375 165 7.51343e+021
+348 233 7.42294e+021
+248 271 7.31906e+021
+412 259 7.28982e+021
+258 149 7.24384e+021
+328 183 7.13819e+021
+299 251 7.10852e+021
+368 283 7.07856e+021
+203 378 7.06746e+021
+269 323 7.00885e+021
+193 199 6.93758e+021
+395 215 6.93491e+021
+225 129 6.9347e+021
+307 335 6.93367e+021
+278 200 6.8879e+021
+142 312 6.86087e+021
+319 302 6.8274e+021
+227 219 6.796e+021
+328 386 6.72991e+021
+161 271 6.70861e+021
+356 314 6.66487e+021
+182 325 6.57749e+021
+340 353 6.54817e+021
+336 264 6.52417e+021
+214 251 6.47861e+021
+196 291 6.46461e+021
+290 375 6.4461e+021
+359 399 6.44463e+021
+235 304 6.4187e+021
+316 213 6.39551e+021
+277 408 6.31511e+021
+266 232 6.29909e+021
+217 344 6.27107e+021
+247 268 6.18625e+021
+298 248 6.15423e+021
+268 320 6.09848e+021
+367 280 6.09368e+021
+256 356 6.07031e+021
+245 180 6.05584e+021
+286 284 6.0449e+021
+339 350 6.00875e+021
+309 422 6.00588e+021
+347 230 6.00378e+021
+374 162 5.8491e+021
+289 372 5.84685e+021
+364 195 5.84388e+021
+371 366 5.80003e+021
+296 163 5.78529e+021
+383 245 5.76709e+021
+237 392 5.68035e+021
+393 210 5.66245e+021
+424 228 5.57349e+021
+409 178 5.55565e+021
+127 346 5.53212e+021
+319 98 5.47922e+021
+229 305 5.4226e+021
+344 146 5.41224e+021
+162 361 5.36276e+021
+276 113 5.33318e+021
+330 265 5.32245e+021
+398 295 5.22444e+021
+260 233 5.1946e+021
+385 131 5.08652e+021
+301 336 5.08059e+021
+250 358 5.04356e+021
+310 214 5.0377e+021
+281 285 5.01754e+021
+208 252 5.00693e+021
+448 162 4.94979e+021
+290 164 4.91262e+021
+338 147 4.90261e+021
+270 114 4.89687e+021
+322 388 4.81781e+021
+239 181 4.79551e+021
+378 246 4.78261e+021
+351 315 4.76748e+021
+358 196 4.73159e+021
+404 179 4.72547e+021
+176 326 4.66251e+021
+608 239 3.87582e+021
+547 38 3.55573e+021
+628 239 2.68161e+021
+598 174 2.34466e+021
+32 377 1.99094e+021
+461 21 1.62747e+021
+60 390 1.3674e+021
+445 31 1.30973e+021
+634 322 1.20917e+021
+601 169 1.169e+021
+538 45 1.1413e+021
+199 8 1.11171e+021
+618 174 1.00794e+021
+605 169 1.00193e+021
+534 42 9.71774e+020
+33 381 6.48209e+020
+203 70 6.23351e+020
+454 23 5.48295e+020
+544 41 5.42441e+020
+39 372 5.27231e+020
+541 29 4.71615e+020
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.04_7_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.04_7_7.txt
new file mode 100644
index 0000000..cdd0067
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.04_7_7.txt
@@ -0,0 +1,110 @@
+109
+258 147 2.58212e+022
+421 149 2.5756e+022
+298 248 2.55725e+022
+278 198 2.54535e+022
+248 268 2.54469e+022
+367 280 2.53391e+022
+227 216 2.53099e+022
+347 230 2.52823e+022
+308 130 2.52497e+022
+356 117 2.50755e+022
+327 180 2.49478e+022
+319 300 2.49348e+022
+195 288 2.48708e+022
+268 320 2.48242e+022
+339 350 2.46849e+022
+394 212 2.45883e+022
+375 163 2.44281e+022
+328 183 2.43416e+022
+289 84 2.43155e+022
+239 100 2.42905e+022
+348 233 2.4071e+022
+395 215 2.40055e+022
+308 133 2.39827e+022
+289 372 2.38308e+022
+208 168 2.38103e+022
+279 201 2.37029e+022
+299 252 2.36764e+022
+259 150 2.3607e+022
+375 166 2.3533e+022
+368 283 2.35066e+022
+216 342 2.33929e+022
+320 303 2.3178e+022
+228 219 2.24867e+022
+340 354 2.21118e+022
+412 258 2.20227e+022
+196 292 2.2017e+022
+437 191 2.18772e+022
+334 264 2.1674e+022
+305 335 2.15894e+022
+354 315 2.15131e+022
+175 239 2.15075e+022
+386 327 2.1495e+022
+284 284 2.12991e+022
+232 305 2.11978e+022
+212 252 2.10716e+022
+226 129 2.10246e+022
+263 232 2.05785e+022
+326 386 2.05687e+022
+243 181 2.04808e+022
+204 378 2.04347e+022
+254 357 2.0348e+022
+381 245 2.03334e+022
+180 325 2.0283e+022
+313 214 2.02441e+022
+161 271 2.02206e+022
+407 178 2.00327e+022
+308 335 1.97656e+022
+194 199 1.95961e+022
+361 196 1.95229e+022
+357 314 1.94809e+022
+278 408 1.92712e+022
+293 163 1.92466e+022
+358 398 1.91708e+022
+142 313 1.90281e+022
+257 356 1.90085e+022
+273 113 1.89571e+022
+287 283 1.89343e+022
+215 251 1.8913e+022
+341 146 1.88946e+022
+370 366 1.87559e+022
+423 228 1.85323e+022
+246 180 1.85083e+022
+309 421 1.80516e+022
+397 296 1.79459e+022
+239 182 1.74283e+022
+318 98 1.73865e+022
+296 162 1.71685e+022
+384 131 1.7123e+022
+448 163 1.70291e+022
+309 214 1.66853e+022
+321 388 1.66635e+022
+128 346 1.6613e+022
+289 164 1.65572e+022
+269 114 1.65206e+022
+259 233 1.64776e+022
+276 112 1.64356e+022
+236 392 1.64025e+022
+162 360 1.52496e+022
+609 239 1.15887e+022
+547 38 1.00758e+022
+599 174 8.8887e+021
+628 238 8.21654e+021
+32 378 6.78931e+021
+461 20 4.72527e+021
+604 169 4.55265e+021
+61 390 4.02801e+021
+617 175 3.81592e+021
+445 32 3.7669e+021
+538 44 3.43814e+021
+633 322 3.3526e+021
+199 8 3.32769e+021
+535 43 2.51606e+021
+38 373 1.91487e+021
+454 23 1.83676e+021
+203 69 1.82738e+021
+543 42 1.68476e+021
+27 373 1.61207e+021
+552 40 1.59042e+021
+439 36 1.38598e+021
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_3_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_3_3.txt
new file mode 100644
index 0000000..9461bac
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_3_3.txt
@@ -0,0 +1,104 @@
+103
+234 304 6.02893e+011
+193 199 5.68532e+011
+265 232 5.6428e+011
+386 328 5.5162e+011
+335 264 5.42843e+011
+420 148 5.30926e+011
+249 268 5.30149e+011
+258 149 5.29147e+011
+438 193 5.21423e+011
+394 214 5.1313e+011
+319 302 5.10696e+011
+327 182 5.06019e+011
+255 357 5.05639e+011
+227 218 5.0502e+011
+285 284 4.94127e+011
+355 116 4.82175e+011
+327 386 4.80608e+011
+291 372 4.77965e+011
+278 200 4.72621e+011
+277 409 4.71337e+011
+367 282 4.71057e+011
+347 232 4.68723e+011
+269 320 4.68489e+011
+196 288 4.61325e+011
+359 400 4.60545e+011
+409 178 4.5504e+011
+295 163 4.45894e+011
+207 166 4.45289e+011
+160 272 4.44778e+011
+237 393 4.42912e+011
+203 379 4.42264e+011
+412 259 4.39325e+011
+239 99 4.32781e+011
+355 315 4.26989e+011
+288 83 4.22737e+011
+343 146 4.21308e+011
+308 132 4.19672e+011
+375 165 4.1874e+011
+383 245 4.06009e+011
+225 130 3.99551e+011
+375 162 3.90611e+011
+299 248 3.89275e+011
+338 349 3.87229e+011
+393 210 3.85258e+011
+275 113 3.83808e+011
+175 238 3.79914e+011
+230 305 3.77815e+011
+162 362 3.74828e+011
+209 252 3.67905e+011
+213 252 3.65539e+011
+277 196 3.64825e+011
+245 181 3.62105e+011
+366 278 3.58729e+011
+257 145 3.53456e+011
+306 335 3.5155e+011
+181 325 3.5143e+011
+326 178 3.49736e+011
+127 347 3.42677e+011
+217 342 3.41873e+011
+177 326 3.35318e+011
+302 336 3.34632e+011
+315 213 3.31406e+011
+142 312 3.2732e+011
+309 423 3.25103e+011
+290 375 3.21161e+011
+318 298 3.19234e+011
+331 265 3.06864e+011
+346 228 3.06003e+011
+363 195 2.8975e+011
+546 37 2.88216e+011
+261 233 2.81219e+011
+282 284 2.36158e+011
+323 387 2.34669e+011
+352 315 2.33133e+011
+311 214 2.29844e+011
+629 240 2.08684e+011
+240 181 2.03363e+011
+449 162 2.00268e+011
+608 240 1.97755e+011
+399 295 1.93681e+011
+405 179 1.92792e+011
+359 196 1.88196e+011
+386 130 1.86281e+011
+339 146 1.65032e+011
+319 98 1.59518e+011
+372 366 1.53696e+011
+424 228 1.3773e+011
+190 1 1.16104e+011
+378 246 9.51273e+010
+271 113 9.22366e+010
+250 358 7.84054e+010
+534 42 6.85932e+010
+461 21 6.62427e+010
+59 391 6.00462e+010
+33 377 5.79575e+010
+540 29 3.50071e+010
+633 323 3.45834e+010
+203 70 3.30473e+010
+199 8 3.30383e+010
+74 350 3.28445e+010
+537 45 3.2638e+010
+602 170 3.25969e+010
+33 382 3.12507e+010
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_3_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_3_5.txt
new file mode 100644
index 0000000..53d235d
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_3_5.txt
@@ -0,0 +1,114 @@
+113
+239 99 4.46115e+012
+420 149 4.4139e+012
+268 320 4.35525e+012
+195 288 4.35166e+012
+247 268 4.3471e+012
+227 216 4.21409e+012
+298 248 4.20299e+012
+207 167 4.15981e+012
+339 350 4.12449e+012
+308 133 4.12307e+012
+248 271 4.11114e+012
+289 372 4.0885e+012
+175 238 4.07121e+012
+258 147 4.06196e+012
+367 280 4.05676e+012
+374 162 3.97249e+012
+307 335 3.97003e+012
+386 328 3.9409e+012
+348 233 3.92999e+012
+347 230 3.90381e+012
+278 198 3.87016e+012
+216 342 3.86144e+012
+327 386 3.8442e+012
+269 323 3.84333e+012
+227 219 3.83041e+012
+375 165 3.79049e+012
+203 378 3.7774e+012
+356 314 3.77576e+012
+319 300 3.77573e+012
+182 325 3.77506e+012
+288 83 3.76679e+012
+307 130 3.73333e+012
+368 283 3.72859e+012
+235 304 3.71644e+012
+355 116 3.71297e+012
+327 180 3.67559e+012
+193 199 3.66306e+012
+412 259 3.64188e+012
+336 264 3.63061e+012
+394 212 3.61488e+012
+328 183 3.61384e+012
+290 375 3.60975e+012
+299 251 3.57926e+012
+142 312 3.56591e+012
+160 271 3.54895e+012
+438 192 3.53513e+012
+214 251 3.50997e+012
+319 303 3.50714e+012
+225 129 3.50385e+012
+316 213 3.45353e+012
+277 409 3.45102e+012
+395 215 3.43704e+012
+286 284 3.42986e+012
+265 232 3.4201e+012
+217 345 3.31646e+012
+340 353 3.31374e+012
+256 357 3.24089e+012
+245 180 3.21426e+012
+383 245 3.09037e+012
+364 195 3.0857e+012
+409 178 3.08012e+012
+296 163 3.05015e+012
+309 422 3.0334e+012
+359 399 3.0153e+012
+344 146 2.94229e+012
+229 305 2.87129e+012
+127 346 2.86811e+012
+237 392 2.84455e+012
+276 113 2.70731e+012
+371 366 2.6818e+012
+331 265 2.6452e+012
+260 233 2.61119e+012
+281 285 2.5658e+012
+162 361 2.53136e+012
+424 228 2.48912e+012
+301 336 2.43088e+012
+208 252 2.42314e+012
+250 358 2.41299e+012
+351 315 2.39382e+012
+319 98 2.38068e+012
+322 388 2.34962e+012
+398 295 2.32713e+012
+240 181 2.27879e+012
+608 239 2.24559e+012
+338 147 2.22925e+012
+310 214 2.19768e+012
+176 326 2.18471e+012
+385 131 2.18339e+012
+290 164 2.172e+012
+270 114 2.13845e+012
+404 179 2.13311e+012
+378 246 2.01489e+012
+448 163 1.97612e+012
+358 196 1.93837e+012
+546 37 1.67717e+012
+628 239 1.58417e+012
+32 377 8.5175e+011
+598 174 8.246e+011
+461 21 7.55404e+011
+60 390 6.48875e+011
+445 31 5.00924e+011
+605 169 4.91537e+011
+602 169 4.57274e+011
+538 45 4.23755e+011
+199 8 4.13095e+011
+534 41 3.40876e+011
+618 174 3.20789e+011
+633 323 2.82256e+011
+33 381 2.50852e+011
+203 70 2.33223e+011
+609 170 2.30968e+011
+454 23 2.26302e+011
+39 372 2.2437e+011
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_3_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_3_7.txt
new file mode 100644
index 0000000..afe0bce
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_3_7.txt
@@ -0,0 +1,95 @@
+94
+248 268 1.32804e+013
+195 288 1.30128e+013
+298 248 1.2938e+013
+268 320 1.28673e+013
+367 279 1.28371e+013
+227 216 1.27995e+013
+339 350 1.27148e+013
+258 147 1.26483e+013
+278 197 1.26076e+013
+347 229 1.25683e+013
+319 299 1.23621e+013
+289 371 1.23343e+013
+394 211 1.23207e+013
+308 130 1.22892e+013
+327 179 1.22391e+013
+216 341 1.22322e+013
+375 163 1.2155e+013
+421 150 1.12679e+013
+228 220 1.1062e+013
+305 335 1.10267e+013
+208 168 1.10181e+013
+233 304 1.09801e+013
+328 183 1.09677e+013
+348 233 1.08547e+013
+320 303 1.08509e+013
+279 201 1.08234e+013
+239 100 1.08e+013
+212 251 1.07403e+013
+395 215 1.06855e+013
+354 314 1.06769e+013
+334 264 1.06623e+013
+356 117 1.06519e+013
+308 133 1.06092e+013
+289 84 1.0576e+013
+284 284 1.05706e+013
+326 386 1.04796e+013
+375 166 1.04758e+013
+180 325 1.03379e+013
+264 232 1.02804e+013
+254 357 9.85896e+012
+308 335 9.73225e+012
+175 239 9.66515e+012
+204 378 9.52409e+012
+243 181 9.50763e+012
+314 213 9.46578e+012
+161 271 9.40764e+012
+412 258 9.38163e+012
+226 129 9.34129e+012
+386 327 9.30001e+012
+357 314 9.26055e+012
+407 178 9.23348e+012
+437 191 9.1746e+012
+382 245 9.13464e+012
+287 283 9.13388e+012
+257 356 9.0911e+012
+215 251 9.03114e+012
+278 408 8.94247e+012
+362 195 8.91159e+012
+142 313 8.7993e+012
+342 146 8.70249e+012
+194 199 8.68941e+012
+294 163 8.64948e+012
+358 398 8.51927e+012
+274 113 8.50154e+012
+246 180 8.40506e+012
+370 366 8.03271e+012
+309 421 7.87464e+012
+321 388 7.63792e+012
+397 296 7.60821e+012
+249 358 7.58488e+012
+423 228 7.45822e+012
+128 346 7.43851e+012
+236 392 7.34067e+012
+259 233 7.05278e+012
+269 114 6.95681e+012
+318 98 6.91061e+012
+289 164 6.7762e+012
+309 215 6.74577e+012
+384 131 6.71447e+012
+448 163 6.67218e+012
+161 361 6.48098e+012
+609 239 6.36104e+012
+628 238 4.47373e+012
+547 38 4.11349e+012
+599 174 3.39836e+012
+32 378 2.5161e+012
+460 20 1.94175e+012
+604 169 1.93008e+012
+61 390 1.67709e+012
+617 175 1.41994e+012
+445 32 1.20649e+012
+199 8 1.0874e+012
+538 44 1.00262e+012
+38 373 7.65906e+011
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_5_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_5_3.txt
new file mode 100644
index 0000000..5b73ba1
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_5_3.txt
@@ -0,0 +1,110 @@
+109
+386 328 1.68491e+016
+258 149 1.66576e+016
+319 302 1.5207e+016
+394 214 1.5004e+016
+327 182 1.47264e+016
+227 218 1.46546e+016
+375 165 1.46503e+016
+438 192 1.45031e+016
+234 304 1.43462e+016
+278 200 1.4276e+016
+308 132 1.42357e+016
+239 99 1.39731e+016
+420 148 1.39589e+016
+249 268 1.35191e+016
+412 259 1.34576e+016
+355 116 1.33461e+016
+265 232 1.32942e+016
+367 282 1.31064e+016
+291 372 1.30411e+016
+347 232 1.30157e+016
+195 290 1.27797e+016
+270 320 1.2675e+016
+359 400 1.26215e+016
+175 238 1.25639e+016
+288 83 1.22786e+016
+335 264 1.22278e+016
+269 323 1.21902e+016
+193 199 1.21213e+016
+393 210 1.20226e+016
+237 393 1.19935e+016
+327 386 1.1875e+016
+366 278 1.16579e+016
+299 251 1.15902e+016
+277 196 1.12278e+016
+307 335 1.11733e+016
+162 362 1.10239e+016
+356 314 1.10167e+016
+338 349 1.09692e+016
+326 178 1.09614e+016
+290 375 1.09595e+016
+297 247 1.08722e+016
+340 353 1.08272e+016
+286 284 1.07749e+016
+409 178 1.0772e+016
+207 167 1.07275e+016
+255 357 1.07111e+016
+341 350 1.0633e+016
+257 145 1.05754e+016
+194 287 1.04726e+016
+142 312 1.04008e+016
+309 422 1.03863e+016
+318 298 1.033e+016
+346 228 1.02733e+016
+300 248 1.02579e+016
+181 325 1.02412e+016
+376 162 1.0136e+016
+217 344 1.00032e+016
+277 409 9.75883e+015
+226 215 9.60735e+015
+203 378 9.54656e+015
+383 245 9.51676e+015
+373 161 9.2979e+015
+546 37 9.2507e+015
+343 146 9.07901e+015
+315 213 9.05444e+015
+295 163 8.98437e+015
+218 341 8.91833e+015
+215 340 8.72664e+015
+267 319 8.67032e+015
+160 272 8.57133e+015
+214 251 8.56928e+015
+245 180 8.24924e+015
+363 195 7.93513e+015
+275 113 7.56692e+015
+127 346 7.38229e+015
+225 130 7.13952e+015
+230 305 5.89292e+015
+177 326 5.12105e+015
+629 239 4.73895e+015
+354 317 4.52377e+015
+371 366 4.48751e+015
+209 252 4.45142e+015
+319 98 4.37294e+015
+302 336 4.14195e+015
+260 233 3.95552e+015
+243 183 3.66537e+015
+331 265 3.62902e+015
+424 228 3.47063e+015
+399 295 3.43704e+015
+385 131 2.60765e+015
+449 162 2.5687e+015
+190 1 2.40677e+015
+461 21 2.32815e+015
+32 377 2.066e+015
+280 285 1.97505e+015
+534 42 1.93992e+015
+338 147 1.90084e+015
+608 240 1.86451e+015
+404 179 1.76365e+015
+60 390 1.67607e+015
+633 323 1.49179e+015
+250 358 1.33559e+015
+538 45 1.2584e+015
+203 70 1.23977e+015
+540 29 1.10353e+015
+33 382 1.02567e+015
+605 169 9.81361e+014
+601 169 8.85147e+014
+269 114 8.65665e+014
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_5_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_5_5.txt
new file mode 100644
index 0000000..d6d9aba
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_5_5.txt
@@ -0,0 +1,111 @@
+110
+239 99 1.54904e+017
+420 149 1.53355e+017
+308 133 1.41449e+017
+175 238 1.41116e+017
+386 328 1.39795e+017
+207 167 1.39754e+017
+289 83 1.3712e+017
+348 233 1.35331e+017
+248 271 1.35201e+017
+356 116 1.35147e+017
+375 165 1.34978e+017
+412 259 1.30974e+017
+307 335 1.29711e+017
+269 323 1.297e+017
+438 192 1.29307e+017
+368 283 1.28929e+017
+258 149 1.28456e+017
+328 183 1.28074e+017
+299 251 1.27598e+017
+247 268 1.27181e+017
+268 320 1.27037e+017
+195 289 1.26445e+017
+227 216 1.25997e+017
+203 378 1.25492e+017
+298 248 1.25437e+017
+328 386 1.24835e+017
+367 280 1.23527e+017
+395 215 1.2348e+017
+142 312 1.23113e+017
+356 314 1.23061e+017
+182 325 1.22761e+017
+227 219 1.22396e+017
+339 350 1.21893e+017
+278 198 1.21808e+017
+319 302 1.21641e+017
+193 199 1.2121e+017
+347 230 1.20308e+017
+290 375 1.19721e+017
+289 372 1.19416e+017
+235 304 1.19352e+017
+161 271 1.19058e+017
+374 162 1.18742e+017
+214 251 1.18109e+017
+340 353 1.17841e+017
+336 264 1.17818e+017
+225 129 1.17607e+017
+216 342 1.17129e+017
+327 180 1.16086e+017
+394 212 1.15345e+017
+316 213 1.15338e+017
+307 130 1.14976e+017
+266 232 1.13193e+017
+277 409 1.11113e+017
+286 284 1.09189e+017
+309 422 1.08648e+017
+359 399 1.08539e+017
+256 356 1.07856e+017
+245 180 1.0765e+017
+364 195 1.04573e+017
+383 245 1.0363e+017
+409 178 1.01263e+017
+296 163 1.01014e+017
+237 393 9.86438e+016
+127 346 9.65681e+016
+344 146 9.54477e+016
+371 366 9.31794e+016
+162 361 9.16235e+016
+276 113 9.14517e+016
+229 305 8.81562e+016
+424 228 8.58985e+016
+319 98 8.53685e+016
+260 233 8.15006e+016
+330 265 8.1431e+016
+398 295 7.97172e+016
+302 336 7.86198e+016
+281 285 7.72945e+016
+250 358 7.71945e+016
+208 252 7.59185e+016
+351 315 7.53471e+016
+385 131 7.4526e+016
+310 214 7.24112e+016
+176 326 7.23058e+016
+322 388 7.16039e+016
+338 147 7.15419e+016
+240 181 7.15009e+016
+290 164 7.13751e+016
+448 163 7.0276e+016
+270 114 7.0078e+016
+404 179 6.85801e+016
+378 246 6.79492e+016
+358 196 6.52849e+016
+546 37 6.16485e+016
+608 240 5.34675e+016
+628 239 4.99288e+016
+32 377 3.2619e+016
+598 174 2.84674e+016
+461 21 2.8393e+016
+60 390 2.28258e+016
+538 45 1.68924e+016
+605 169 1.67502e+016
+601 169 1.64626e+016
+445 31 1.60774e+016
+199 8 1.47298e+016
+633 323 1.37971e+016
+534 41 1.26543e+016
+203 70 9.79294e+015
+32 381 9.73363e+015
+618 174 9.06642e+015
+39 372 8.30473e+015
+454 23 7.84221e+015
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_5_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_5_7.txt
new file mode 100644
index 0000000..569f7d6
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_5_7.txt
@@ -0,0 +1,102 @@
+101
+248 268 4.62912e+017
+298 248 4.57563e+017
+258 147 4.55859e+017
+227 216 4.54074e+017
+195 288 4.50387e+017
+278 198 4.49029e+017
+268 320 4.48319e+017
+308 130 4.47801e+017
+367 279 4.47221e+017
+348 230 4.45009e+017
+339 350 4.44011e+017
+319 300 4.42939e+017
+394 211 4.39222e+017
+327 180 4.36935e+017
+375 163 4.34652e+017
+421 150 4.27786e+017
+290 372 4.26665e+017
+216 341 4.24366e+017
+356 117 4.17551e+017
+328 183 4.13317e+017
+348 233 4.07533e+017
+395 215 4.06879e+017
+289 84 4.06622e+017
+279 201 4.06421e+017
+208 168 4.0599e+017
+239 100 4.05579e+017
+259 150 4.03984e+017
+299 252 4.03436e+017
+320 303 4.01375e+017
+308 133 4.00826e+017
+368 283 4.00642e+017
+375 166 3.93002e+017
+228 220 3.91794e+017
+196 292 3.86261e+017
+305 335 3.76468e+017
+233 304 3.73522e+017
+334 264 3.70479e+017
+354 314 3.676e+017
+212 251 3.66234e+017
+412 258 3.63736e+017
+326 386 3.62354e+017
+284 284 3.62296e+017
+437 191 3.59969e+017
+180 325 3.59799e+017
+175 239 3.5958e+017
+264 232 3.57936e+017
+386 327 3.5601e+017
+204 378 3.49551e+017
+254 357 3.49362e+017
+226 129 3.48936e+017
+308 335 3.4353e+017
+161 271 3.42814e+017
+314 213 3.39599e+017
+357 314 3.3515e+017
+382 245 3.33146e+017
+243 181 3.32966e+017
+257 356 3.30843e+017
+287 283 3.28702e+017
+408 178 3.28547e+017
+278 408 3.28082e+017
+215 251 3.27103e+017
+358 398 3.22627e+017
+194 198 3.22336e+017
+362 195 3.21992e+017
+142 313 3.209e+017
+294 163 3.1651e+017
+246 180 3.13903e+017
+342 146 3.1137e+017
+274 113 3.07784e+017
+370 366 3.013e+017
+309 421 3.01211e+017
+423 228 2.88628e+017
+397 296 2.86144e+017
+128 346 2.78658e+017
+236 392 2.77281e+017
+239 182 2.73476e+017
+318 98 2.70228e+017
+321 388 2.66342e+017
+384 131 2.62579e+017
+448 163 2.59526e+017
+269 114 2.53288e+017
+289 164 2.51203e+017
+309 215 2.4922e+017
+161 361 2.47849e+017
+609 239 1.86196e+017
+547 38 1.56149e+017
+628 238 1.48592e+017
+599 174 1.25841e+017
+32 378 1.04685e+017
+460 20 7.70505e+016
+604 169 7.33928e+016
+61 390 6.49638e+016
+617 175 4.9104e+016
+445 31 4.57816e+016
+199 8 4.53822e+016
+539 44 4.3299e+016
+38 373 2.99768e+016
+632 322 2.78183e+016
+454 23 2.5933e+016
+27 373 2.38593e+016
+203 69 2.35485e+016
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_7_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_7_3.txt
new file mode 100644
index 0000000..5930776
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_7_3.txt
@@ -0,0 +1,115 @@
+114
+258 149 5.58732e+020
+386 328 5.46413e+020
+375 165 5.32607e+020
+308 132 5.14343e+020
+319 302 5.05374e+020
+394 214 4.86822e+020
+227 218 4.80265e+020
+327 182 4.78677e+020
+278 200 4.7215e+020
+438 192 4.70431e+020
+239 99 4.61927e+020
+248 271 4.55727e+020
+269 323 4.42595e+020
+412 259 4.41501e+020
+299 251 4.41288e+020
+420 149 4.23757e+020
+175 238 4.18373e+020
+367 282 4.16396e+020
+195 290 4.16312e+020
+366 278 4.11069e+020
+340 353 4.10619e+020
+270 320 4.09249e+020
+249 268 4.0815e+020
+348 232 4.07132e+020
+393 210 4.06877e+020
+291 372 4.04538e+020
+290 375 3.99319e+020
+234 304 3.97137e+020
+355 116 3.87246e+020
+277 196 3.79393e+020
+326 178 3.75121e+020
+359 400 3.74354e+020
+217 344 3.73423e+020
+341 350 3.7026e+020
+338 349 3.68464e+020
+297 247 3.67785e+020
+346 228 3.66941e+020
+307 335 3.64882e+020
+318 298 3.63904e+020
+300 248 3.60761e+020
+309 422 3.60427e+020
+265 232 3.60142e+020
+257 145 3.60035e+020
+288 83 3.58546e+020
+237 393 3.58036e+020
+356 314 3.53506e+020
+194 287 3.48188e+020
+142 312 3.47301e+020
+162 362 3.39158e+020
+376 162 3.38549e+020
+327 386 3.38457e+020
+207 167 3.36059e+020
+226 214 3.35746e+020
+218 341 3.32878e+020
+373 160 3.19626e+020
+335 264 3.19213e+020
+182 325 3.17593e+020
+546 37 3.12541e+020
+214 251 3.10957e+020
+215 340 3.00448e+020
+203 378 3.00073e+020
+267 319 2.85747e+020
+409 178 2.84495e+020
+316 213 2.81093e+020
+161 271 2.74307e+020
+193 199 2.72607e+020
+307 128 2.64659e+020
+255 357 2.6459e+020
+286 284 2.63015e+020
+245 180 2.5594e+020
+364 195 2.54112e+020
+226 129 2.50958e+020
+383 245 2.46111e+020
+343 146 2.19761e+020
+179 327 2.18846e+020
+128 346 2.12223e+020
+295 163 2.08299e+020
+354 317 2.01519e+020
+277 409 2.0065e+020
+276 112 1.8858e+020
+313 215 1.79196e+020
+361 197 1.77901e+020
+243 183 1.70815e+020
+305 338 1.69247e+020
+211 253 1.68395e+020
+273 115 1.5189e+020
+629 239 1.26745e+020
+406 177 1.13469e+020
+380 244 1.11715e+020
+371 366 1.10409e+020
+319 98 1.03411e+020
+312 212 9.48124e+019
+360 194 8.95982e+019
+324 385 8.83125e+019
+461 21 8.45716e+019
+423 228 8.37047e+019
+32 377 8.04471e+019
+191 1 7.436e+019
+292 162 7.34654e+019
+633 322 6.54073e+019
+272 111 6.43705e+019
+397 296 6.27462e+019
+534 42 5.86947e+019
+384 131 5.61881e+019
+60 390 5.33089e+019
+203 70 4.71153e+019
+606 242 4.55799e+019
+538 45 4.53192e+019
+605 169 4.4176e+019
+609 239 3.82088e+019
+447 163 3.7324e+019
+33 382 3.60256e+019
+540 29 3.43839e+019
+601 169 3.19559e+019
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_7_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_7_5.txt
new file mode 100644
index 0000000..c6ae2a7
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_7_5.txt
@@ -0,0 +1,107 @@
+106
+239 99 5.984e+021
+420 149 5.97572e+021
+308 133 5.49516e+021
+289 83 5.47493e+021
+356 116 5.43812e+021
+386 328 5.43155e+021
+175 238 5.39891e+021
+375 165 5.34479e+021
+207 167 5.32791e+021
+348 233 5.28181e+021
+412 259 5.15667e+021
+438 192 5.15011e+021
+248 271 5.13909e+021
+328 183 5.09583e+021
+299 251 5.06266e+021
+258 149 5.05461e+021
+368 283 5.04685e+021
+269 323 4.99376e+021
+395 215 4.95168e+021
+307 335 4.76911e+021
+319 302 4.75386e+021
+142 312 4.7004e+021
+203 378 4.69584e+021
+278 200 4.68588e+021
+340 353 4.66863e+021
+328 386 4.6406e+021
+356 314 4.5991e+021
+290 375 4.57665e+021
+196 291 4.571e+021
+227 219 4.54986e+021
+161 271 4.5363e+021
+182 325 4.51413e+021
+214 251 4.4815e+021
+217 344 4.47315e+021
+226 129 4.4342e+021
+193 199 4.39066e+021
+248 268 4.37222e+021
+235 304 4.36474e+021
+298 248 4.34471e+021
+316 213 4.33611e+021
+268 320 4.3201e+021
+336 264 4.30232e+021
+359 399 4.28893e+021
+367 280 4.27876e+021
+309 422 4.26441e+021
+339 350 4.23295e+021
+347 230 4.21711e+021
+266 232 4.21028e+021
+256 356 4.1795e+021
+286 283 4.13228e+021
+245 180 4.10686e+021
+374 162 4.08642e+021
+289 372 4.07378e+021
+277 408 4.05738e+021
+364 195 3.95188e+021
+383 245 3.8241e+021
+237 393 3.80616e+021
+409 178 3.74096e+021
+296 163 3.6783e+021
+162 361 3.63936e+021
+127 346 3.62448e+021
+371 366 3.54818e+021
+276 112 3.5254e+021
+344 146 3.45907e+021
+319 98 3.31506e+021
+424 228 3.2439e+021
+229 305 3.13455e+021
+398 296 3.0332e+021
+260 233 2.94273e+021
+330 265 2.93209e+021
+302 336 2.84767e+021
+385 131 2.83682e+021
+250 358 2.83381e+021
+281 285 2.78001e+021
+354 317 2.7569e+021
+448 163 2.73734e+021
+305 338 2.72446e+021
+209 252 2.69798e+021
+351 315 2.69767e+021
+176 326 2.66573e+021
+290 164 2.65145e+021
+338 147 2.64181e+021
+310 214 2.63818e+021
+270 114 2.60389e+021
+322 388 2.59981e+021
+240 181 2.55547e+021
+378 246 2.53311e+021
+404 179 2.52948e+021
+546 37 2.42092e+021
+358 196 2.39609e+021
+628 239 1.86675e+021
+609 239 1.74525e+021
+32 377 1.3972e+021
+461 21 1.13869e+021
+598 174 1.06984e+021
+60 390 8.84449e+020
+605 169 7.15619e+020
+538 45 6.92022e+020
+633 322 6.71281e+020
+601 169 6.25966e+020
+199 8 5.50081e+020
+445 31 5.22301e+020
+533 42 4.9489e+020
+203 70 4.20677e+020
+32 381 4.08184e+020
+39 372 3.24932e+020
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.10_7_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.10_7_7.txt
new file mode 100644
index 0000000..6372d30
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.10_7_7.txt
@@ -0,0 +1,101 @@
+100
+421 149 1.83423e+022
+258 147 1.82278e+022
+248 268 1.80787e+022
+298 248 1.80556e+022
+227 216 1.79356e+022
+278 198 1.79056e+022
+308 130 1.78633e+022
+356 117 1.78303e+022
+347 230 1.77613e+022
+367 280 1.77594e+022
+319 300 1.76461e+022
+195 288 1.7578e+022
+268 320 1.75696e+022
+327 180 1.75535e+022
+339 350 1.74244e+022
+394 211 1.73633e+022
+289 84 1.72522e+022
+375 163 1.72431e+022
+328 183 1.71995e+022
+395 215 1.69956e+022
+239 100 1.69799e+022
+348 233 1.69421e+022
+208 168 1.68749e+022
+279 201 1.68036e+022
+259 150 1.67702e+022
+308 133 1.67244e+022
+289 372 1.67155e+022
+299 252 1.664e+022
+368 283 1.65551e+022
+217 342 1.65504e+022
+320 303 1.64806e+022
+375 166 1.63381e+022
+228 219 1.59753e+022
+412 258 1.5653e+022
+437 191 1.55946e+022
+196 292 1.55724e+022
+386 327 1.51382e+022
+175 239 1.48441e+022
+334 264 1.4618e+022
+226 129 1.45533e+022
+305 335 1.44848e+022
+233 304 1.44663e+022
+204 378 1.42671e+022
+354 314 1.42597e+022
+212 252 1.42088e+022
+284 284 1.4152e+022
+264 232 1.41177e+022
+326 386 1.40605e+022
+161 271 1.40289e+022
+180 325 1.39795e+022
+254 357 1.3786e+022
+358 398 1.36439e+022
+314 213 1.35398e+022
+194 198 1.34605e+022
+382 245 1.34492e+022
+257 356 1.34097e+022
+278 408 1.33864e+022
+287 283 1.33717e+022
+142 312 1.32319e+022
+243 181 1.32021e+022
+408 178 1.31996e+022
+246 180 1.30279e+022
+362 195 1.28844e+022
+294 163 1.28252e+022
+309 421 1.27755e+022
+370 366 1.25618e+022
+342 146 1.25243e+022
+274 113 1.24182e+022
+423 228 1.22152e+022
+397 296 1.19633e+022
+236 392 1.16936e+022
+318 98 1.1559e+022
+128 346 1.15356e+022
+384 131 1.1196e+022
+239 182 1.11508e+022
+208 253 1.11086e+022
+448 163 1.10162e+022
+250 358 1.10137e+022
+322 388 1.07491e+022
+161 361 1.05246e+022
+270 114 1.04564e+022
+609 239 6.55309e+021
+547 38 6.5376e+021
+628 238 5.83518e+021
+599 174 5.16664e+021
+32 378 4.74237e+021
+461 20 3.33553e+021
+604 169 3.17431e+021
+61 390 2.74411e+021
+539 44 2.06441e+021
+199 8 1.99159e+021
+617 175 1.98616e+021
+445 31 1.82867e+021
+600 169 1.72814e+021
+632 322 1.3611e+021
+38 373 1.26444e+021
+454 23 1.12427e+021
+203 69 1.10386e+021
+27 373 9.78885e+020
+543 42 9.2555e+020
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_3_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_3_3.txt
new file mode 100644
index 0000000..a2c8f13
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_3_3.txt
@@ -0,0 +1,88 @@
+87
+386 328 3.5463e+011
+258 149 3.51167e+011
+234 304 3.47364e+011
+319 302 3.384e+011
+249 268 3.38226e+011
+227 218 3.34698e+011
+394 214 3.22959e+011
+327 182 3.16139e+011
+265 232 3.14293e+011
+291 372 3.08687e+011
+269 320 3.0833e+011
+438 193 3.01853e+011
+195 290 2.96369e+011
+367 282 2.93169e+011
+278 200 2.91895e+011
+347 232 2.76456e+011
+335 264 2.72157e+011
+193 199 2.70334e+011
+375 165 2.67899e+011
+359 400 2.62313e+011
+393 210 2.5557e+011
+420 148 2.53365e+011
+239 99 2.51756e+011
+298 250 2.45817e+011
+237 393 2.44427e+011
+375 162 2.42528e+011
+338 349 2.42334e+011
+277 196 2.41876e+011
+248 271 2.41666e+011
+355 116 2.36837e+011
+366 278 2.34953e+011
+412 259 2.33947e+011
+257 145 2.32082e+011
+326 178 2.31911e+011
+285 284 2.29098e+011
+327 386 2.26075e+011
+308 132 2.25893e+011
+175 238 2.2559e+011
+162 362 2.24611e+011
+297 247 2.23868e+011
+255 357 2.23675e+011
+409 178 2.22762e+011
+290 375 2.12906e+011
+356 314 2.12213e+011
+339 352 2.0094e+011
+318 298 2.00399e+011
+216 343 1.96832e+011
+142 312 1.95174e+011
+346 228 1.94395e+011
+288 83 1.93387e+011
+307 335 1.83794e+011
+277 409 1.829e+011
+343 146 1.7853e+011
+546 37 1.74443e+011
+309 422 1.72377e+011
+383 245 1.68909e+011
+215 340 1.65881e+011
+295 163 1.645e+011
+207 166 1.57922e+011
+182 325 1.4998e+011
+203 378 1.45968e+011
+316 213 1.30446e+011
+275 113 1.23306e+011
+178 326 1.22287e+011
+364 195 1.20101e+011
+243 181 1.17964e+011
+629 240 1.13303e+011
+210 252 1.12927e+011
+127 346 1.03658e+011
+214 251 9.59315e+010
+160 272 9.12322e+010
+226 129 7.40224e+010
+313 215 6.80545e+010
+361 197 6.57716e+010
+354 317 5.6691e+010
+461 21 4.0602e+010
+534 42 3.19466e+010
+305 338 3.15888e+010
+606 242 2.98673e+010
+319 98 2.49942e+010
+60 390 2.40932e+010
+312 212 2.3342e+010
+32 377 2.23172e+010
+540 28 2.15802e+010
+74 350 2.1243e+010
+633 324 2.05459e+010
+203 71 1.91533e+010
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_3_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_3_5.txt
new file mode 100644
index 0000000..aa17915
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_3_5.txt
@@ -0,0 +1,115 @@
+114
+239 99 2.93226e+012
+268 320 2.87685e+012
+195 288 2.86915e+012
+420 149 2.83812e+012
+248 268 2.79537e+012
+227 216 2.7921e+012
+298 248 2.75815e+012
+339 350 2.70173e+012
+175 238 2.67869e+012
+248 271 2.67451e+012
+207 167 2.66027e+012
+308 133 2.6591e+012
+258 147 2.65663e+012
+289 372 2.60932e+012
+367 280 2.59697e+012
+348 233 2.59575e+012
+386 328 2.59128e+012
+307 335 2.58778e+012
+269 323 2.54093e+012
+327 386 2.52289e+012
+374 162 2.51834e+012
+347 230 2.48867e+012
+278 198 2.48787e+012
+319 300 2.48268e+012
+356 314 2.47375e+012
+216 342 2.46241e+012
+368 283 2.46051e+012
+182 325 2.45093e+012
+289 83 2.43685e+012
+375 165 2.43211e+012
+412 259 2.41362e+012
+234 304 2.4129e+012
+203 378 2.40738e+012
+227 219 2.39138e+012
+328 183 2.38493e+012
+355 116 2.38141e+012
+290 375 2.37254e+012
+327 180 2.35917e+012
+394 212 2.35577e+012
+308 130 2.34672e+012
+142 312 2.33601e+012
+299 251 2.30263e+012
+214 251 2.29493e+012
+161 271 2.29127e+012
+395 215 2.27233e+012
+193 199 2.24554e+012
+336 264 2.24463e+012
+316 213 2.21533e+012
+437 192 2.21442e+012
+265 232 2.21017e+012
+217 345 2.19056e+012
+279 201 2.16737e+012
+226 129 2.15794e+012
+340 353 2.15279e+012
+286 283 2.10511e+012
+277 409 2.08253e+012
+245 180 2.07182e+012
+256 356 2.04061e+012
+309 422 2.00702e+012
+364 195 1.97269e+012
+409 178 1.95278e+012
+358 399 1.93737e+012
+383 245 1.93036e+012
+127 346 1.83048e+012
+296 163 1.82024e+012
+344 146 1.76684e+012
+237 393 1.75305e+012
+162 362 1.61334e+012
+276 112 1.59611e+012
+371 366 1.56434e+012
+230 305 1.5169e+012
+424 228 1.41341e+012
+331 265 1.37407e+012
+319 98 1.37102e+012
+260 233 1.30026e+012
+398 296 1.2869e+012
+302 336 1.2566e+012
+281 285 1.25584e+012
+209 252 1.23137e+012
+351 315 1.20122e+012
+177 326 1.1881e+012
+284 287 1.17081e+012
+385 131 1.14294e+012
+250 358 1.11417e+012
+323 387 1.1072e+012
+240 181 1.07361e+012
+628 239 1.03525e+012
+339 147 1.02352e+012
+448 163 1.01905e+012
+290 164 9.58434e+011
+254 360 9.35036e+011
+310 214 9.22426e+011
+608 240 9.12295e+011
+546 37 9.06643e+011
+270 114 8.85445e+011
+378 246 8.1858e+011
+359 196 7.77427e+011
+326 390 7.46271e+011
+342 149 7.32904e+011
+381 248 6.07177e+011
+32 377 5.53812e+011
+461 21 5.02304e+011
+274 116 4.35074e+011
+60 390 4.09037e+011
+360 193 4.0574e+011
+312 211 4.02115e+011
+294 166 3.99592e+011
+605 169 3.27526e+011
+598 174 3.03329e+011
+538 45 2.44433e+011
+601 169 2.14867e+011
+533 41 1.74605e+011
+199 8 1.71311e+011
+445 31 1.57209e+011
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_3_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_3_7.txt
new file mode 100644
index 0000000..53c1b8d
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_3_7.txt
@@ -0,0 +1,90 @@
+89
+248 268 8.68835e+012
+195 288 8.48232e+012
+269 320 8.45512e+012
+298 248 8.40441e+012
+227 216 8.34179e+012
+339 350 8.29759e+012
+367 279 8.28753e+012
+278 197 8.17397e+012
+258 146 8.15208e+012
+347 229 8.1382e+012
+319 299 8.1294e+012
+290 372 8.10581e+012
+394 211 8.0441e+012
+217 341 8.04313e+012
+327 179 7.95115e+012
+308 130 7.89535e+012
+375 162 7.83805e+012
+421 150 7.48424e+012
+208 168 7.33085e+012
+228 220 7.31539e+012
+320 303 7.11735e+012
+239 100 7.09311e+012
+328 183 7.0874e+012
+356 117 7.07712e+012
+279 201 7.04854e+012
+233 304 7.03258e+012
+289 84 7.03037e+012
+259 150 7.00287e+012
+348 233 6.97615e+012
+395 215 6.93645e+012
+306 335 6.91096e+012
+308 134 6.71039e+012
+212 251 6.69701e+012
+375 166 6.63239e+012
+334 264 6.61423e+012
+180 325 6.60863e+012
+326 386 6.59346e+012
+285 283 6.58115e+012
+355 314 6.55713e+012
+264 232 6.54201e+012
+176 239 6.26552e+012
+204 378 6.24941e+012
+161 271 6.14024e+012
+226 129 6.08687e+012
+254 357 6.08034e+012
+412 258 6.0459e+012
+257 356 6.00391e+012
+437 191 5.95316e+012
+386 327 5.8782e+012
+314 213 5.85305e+012
+278 408 5.83383e+012
+244 180 5.81277e+012
+408 178 5.78317e+012
+382 245 5.68994e+012
+142 313 5.65222e+012
+194 198 5.64071e+012
+358 398 5.59207e+012
+362 195 5.4141e+012
+342 145 5.29887e+012
+294 163 5.28337e+012
+274 113 5.13792e+012
+309 421 5.02052e+012
+370 366 4.94374e+012
+236 392 4.86849e+012
+128 346 4.86031e+012
+397 296 4.72451e+012
+423 228 4.54928e+012
+208 253 4.38493e+012
+161 361 4.31896e+012
+239 182 4.3008e+012
+318 98 4.2111e+012
+384 131 4.02437e+012
+448 163 4.01097e+012
+269 114 3.79857e+012
+290 164 3.70251e+012
+309 215 3.5906e+012
+609 240 3.57767e+012
+628 238 2.97348e+012
+546 38 2.08385e+012
+599 174 1.7932e+012
+32 378 1.61024e+012
+460 20 1.28973e+012
+604 169 1.25104e+012
+61 390 1.07905e+012
+199 8 5.63108e+011
+539 44 5.5899e+011
+617 175 5.27e+011
+39 373 4.5526e+011
+446 32 4.50193e+011
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_5_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_5_3.txt
new file mode 100644
index 0000000..b636347
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_5_3.txt
@@ -0,0 +1,106 @@
+105
+258 149 1.08053e+016
+386 328 1.01549e+016
+319 302 9.66662e+015
+227 218 9.62447e+015
+375 165 9.29288e+015
+394 214 8.71878e+015
+327 182 8.54457e+015
+195 290 8.48819e+015
+278 200 8.24548e+015
+308 132 8.23162e+015
+249 268 8.17737e+015
+248 271 8.03936e+015
+270 320 8.01277e+015
+291 372 8.01195e+015
+393 210 7.97379e+015
+366 278 7.7211e+015
+269 323 7.68451e+015
+367 282 7.47026e+015
+277 196 7.4637e+015
+326 178 7.26541e+015
+438 193 7.07253e+015
+290 375 7.05794e+015
+298 250 7.03657e+015
+257 145 6.93024e+015
+239 99 6.87792e+015
+194 287 6.84481e+015
+338 349 6.83734e+015
+347 232 6.7889e+015
+297 247 6.71199e+015
+412 259 6.57523e+015
+346 228 6.5564e+015
+318 298 6.55315e+015
+234 304 6.50327e+015
+341 350 6.49971e+015
+175 238 6.39944e+015
+226 215 6.33512e+015
+340 353 6.33443e+015
+376 162 6.21026e+015
+359 400 6.1516e+015
+216 343 5.87679e+015
+546 37 5.80682e+015
+162 362 5.70425e+015
+237 393 5.51408e+015
+309 422 5.50391e+015
+265 232 5.41495e+015
+420 149 5.33772e+015
+328 386 5.31874e+015
+142 312 5.28294e+015
+215 340 5.17135e+015
+373 160 5.1613e+015
+356 314 5.13367e+015
+307 335 5.11208e+015
+182 325 4.5523e+015
+356 117 4.47606e+015
+267 318 4.47137e+015
+316 213 3.88777e+015
+289 84 3.8694e+015
+329 179 3.79654e+015
+335 264 3.79322e+015
+214 251 3.7077e+015
+179 327 3.63094e+015
+407 180 3.59821e+015
+321 299 3.44961e+015
+381 247 3.41752e+015
+364 195 3.35795e+015
+161 271 3.35406e+015
+207 167 3.25606e+015
+226 129 3.15705e+015
+325 388 3.14375e+015
+128 346 3.11224e+015
+204 378 3.00319e+015
+246 180 2.84375e+015
+285 284 2.7645e+015
+354 317 2.75853e+015
+278 408 2.58083e+015
+313 215 2.49643e+015
+194 199 2.45711e+015
+361 197 2.38397e+015
+254 357 2.36315e+015
+293 165 2.21289e+015
+243 183 2.1569e+015
+305 338 2.06903e+015
+211 253 1.8954e+015
+342 146 1.78252e+015
+273 115 1.63569e+015
+629 240 1.63406e+015
+310 129 1.58537e+015
+380 244 1.47433e+015
+276 112 1.35606e+015
+461 21 1.27546e+015
+324 385 1.2204e+015
+312 212 1.14113e+015
+296 163 1.10044e+015
+633 323 9.71405e+014
+360 194 9.2984e+014
+533 42 9.29553e+014
+32 377 8.33124e+014
+292 161 8.18711e+014
+606 242 7.85951e+014
+203 70 7.33001e+014
+272 111 7.27878e+014
+605 169 6.12128e+014
+540 29 5.85216e+014
+332 262 5.6603e+014
+60 390 5.57311e+014
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_5_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_5_5.txt
new file mode 100644
index 0000000..55cc2bd
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_5_5.txt
@@ -0,0 +1,127 @@
+126
+239 99 9.96406e+016
+420 149 9.60741e+016
+386 328 9.30035e+016
+308 133 9.17499e+016
+175 238 9.06474e+016
+348 233 8.96542e+016
+375 165 8.83112e+016
+248 271 8.76466e+016
+289 83 8.74593e+016
+412 259 8.69842e+016
+269 323 8.60806e+016
+368 283 8.56046e+016
+356 116 8.55502e+016
+207 167 8.54659e+016
+328 183 8.51488e+016
+248 268 8.39626e+016
+299 251 8.37712e+016
+268 320 8.35304e+016
+227 216 8.34142e+016
+307 335 8.29065e+016
+258 147 8.27679e+016
+195 288 8.22491e+016
+395 215 8.21699e+016
+298 248 8.18812e+016
+437 192 8.02302e+016
+328 386 8.01512e+016
+367 280 7.94724e+016
+339 350 7.92594e+016
+356 314 7.90166e+016
+290 375 7.89188e+016
+278 198 7.88792e+016
+142 312 7.87653e+016
+319 300 7.8444e+016
+182 325 7.81813e+016
+340 353 7.76585e+016
+279 201 7.73528e+016
+347 230 7.72532e+016
+290 372 7.68798e+016
+203 378 7.67915e+016
+214 251 7.59112e+016
+217 344 7.57052e+016
+394 212 7.5578e+016
+374 162 7.55559e+016
+234 304 7.55183e+016
+196 291 7.54572e+016
+327 180 7.51951e+016
+161 271 7.49896e+016
+308 130 7.45999e+016
+227 219 7.39522e+016
+309 422 7.23782e+016
+316 213 7.21349e+016
+226 129 7.12401e+016
+265 232 7.11215e+016
+336 264 7.05295e+016
+193 199 6.96655e+016
+358 399 6.90819e+016
+256 356 6.85055e+016
+286 283 6.81884e+016
+245 180 6.72161e+016
+364 195 6.51367e+016
+409 178 6.25632e+016
+383 245 6.25429e+016
+277 408 6.2029e+016
+237 393 6.14075e+016
+127 346 5.83703e+016
+162 362 5.83636e+016
+295 163 5.7977e+016
+276 112 5.48481e+016
+343 146 5.47817e+016
+371 366 4.98147e+016
+306 127 4.80048e+016
+319 98 4.46748e+016
+424 228 4.24483e+016
+230 305 4.20883e+016
+305 338 4.01897e+016
+398 296 3.86532e+016
+354 317 3.81929e+016
+546 37 3.71256e+016
+284 287 3.67328e+016
+334 267 3.6476e+016
+302 336 3.64496e+016
+177 326 3.6037e+016
+331 265 3.49179e+016
+260 233 3.49113e+016
+209 252 3.48597e+016
+254 360 3.42379e+016
+385 131 3.25676e+016
+351 315 3.24793e+016
+628 239 3.24236e+016
+250 358 3.11626e+016
+448 163 3.11392e+016
+281 285 3.09848e+016
+323 387 3.02703e+016
+326 390 2.85554e+016
+240 181 2.77393e+016
+342 149 2.70292e+016
+338 147 2.62397e+016
+290 164 2.59234e+016
+243 184 2.51292e+016
+404 179 2.43408e+016
+311 214 2.43404e+016
+270 114 2.36628e+016
+378 246 2.27745e+016
+609 239 2.27155e+016
+381 248 2.23967e+016
+359 196 2.23449e+016
+408 181 2.15245e+016
+32 377 2.11945e+016
+274 116 1.86989e+016
+461 21 1.86899e+016
+294 166 1.82841e+016
+314 217 1.82293e+016
+380 243 1.79111e+016
+360 193 1.64615e+016
+178 323 1.62439e+016
+312 211 1.59744e+016
+60 390 1.35468e+016
+605 169 1.11533e+016
+538 45 8.88519e+015
+533 41 6.71524e+015
+601 169 6.60422e+015
+598 174 5.91722e+015
+633 323 5.84749e+015
+198 8 5.73136e+015
+32 381 5.68048e+015
+203 70 5.24745e+015
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_5_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_5_7.txt
new file mode 100644
index 0000000..3f092a6
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_5_7.txt
@@ -0,0 +1,93 @@
+92
+248 268 3.04405e+017
+298 248 2.97829e+017
+227 216 2.97317e+017
+258 147 2.95531e+017
+195 288 2.93851e+017
+269 320 2.93661e+017
+278 197 2.92665e+017
+348 230 2.92605e+017
+368 280 2.91919e+017
+308 130 2.9145e+017
+339 350 2.89353e+017
+319 300 2.8884e+017
+394 211 2.88078e+017
+327 179 2.84793e+017
+421 150 2.84279e+017
+290 372 2.81563e+017
+375 163 2.81463e+017
+217 342 2.80038e+017
+356 117 2.77214e+017
+289 84 2.69416e+017
+208 168 2.68905e+017
+328 183 2.68762e+017
+279 201 2.66187e+017
+395 215 2.65773e+017
+259 150 2.65326e+017
+320 303 2.6444e+017
+239 100 2.63341e+017
+348 233 2.63317e+017
+299 252 2.60877e+017
+368 283 2.59282e+017
+228 220 2.58537e+017
+308 133 2.54367e+017
+196 292 2.52655e+017
+375 166 2.48648e+017
+306 335 2.38966e+017
+412 258 2.38094e+017
+437 191 2.3701e+017
+233 304 2.3571e+017
+176 239 2.32548e+017
+355 314 2.30739e+017
+386 327 2.28824e+017
+327 386 2.28095e+017
+204 378 2.2693e+017
+180 325 2.2677e+017
+213 251 2.24701e+017
+334 264 2.24101e+017
+264 232 2.24049e+017
+226 129 2.23941e+017
+285 283 2.22344e+017
+161 271 2.20818e+017
+256 356 2.18495e+017
+358 398 2.13088e+017
+278 408 2.11349e+017
+315 213 2.09315e+017
+142 312 2.06286e+017
+194 198 2.0627e+017
+244 180 2.05959e+017
+382 245 2.05689e+017
+408 178 2.0294e+017
+363 195 1.96697e+017
+309 421 1.95409e+017
+294 163 1.90975e+017
+342 146 1.84489e+017
+236 392 1.84446e+017
+274 113 1.83916e+017
+370 366 1.82098e+017
+128 346 1.79629e+017
+397 296 1.725e+017
+423 228 1.70641e+017
+161 361 1.65137e+017
+318 98 1.61111e+017
+208 253 1.53357e+017
+384 131 1.52275e+017
+250 358 1.52019e+017
+448 163 1.49027e+017
+239 182 1.48487e+017
+322 388 1.47664e+017
+350 316 1.4729e+017
+270 114 1.351e+017
+290 164 1.34802e+017
+378 246 1.29157e+017
+628 238 9.84674e+016
+609 240 8.66043e+016
+546 38 8.35296e+016
+32 377 6.67409e+016
+599 174 5.89169e+016
+460 20 5.12327e+016
+604 169 4.7342e+016
+61 390 4.0839e+016
+539 44 2.5193e+016
+198 8 2.25394e+016
+38 373 1.75077e+016
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_7_3.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_7_3.txt
new file mode 100644
index 0000000..0330a7e
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_7_3.txt
@@ -0,0 +1,123 @@
+122
+258 149 3.41339e+020
+375 165 3.24724e+020
+227 218 3.01628e+020
+319 302 2.98794e+020
+308 132 2.95345e+020
+386 328 2.84631e+020
+195 290 2.70447e+020
+366 278 2.69378e+020
+278 199 2.68662e+020
+248 270 2.68213e+020
+393 210 2.66833e+020
+269 323 2.61469e+020
+394 213 2.58343e+020
+327 181 2.51525e+020
+277 196 2.49633e+020
+326 178 2.44743e+020
+270 320 2.43263e+020
+290 375 2.41856e+020
+299 251 2.40373e+020
+348 233 2.36911e+020
+257 145 2.33966e+020
+340 353 2.33811e+020
+291 372 2.30283e+020
+318 298 2.30166e+020
+346 228 2.29936e+020
+368 283 2.24978e+020
+194 287 2.24762e+020
+338 349 2.24135e+020
+297 247 2.21174e+020
+226 214 2.15166e+020
+341 350 2.12888e+020
+247 267 2.08945e+020
+300 248 2.07457e+020
+373 160 1.95778e+020
+217 344 1.941e+020
+376 162 1.94048e+020
+546 37 1.91657e+020
+412 258 1.9024e+020
+218 341 1.82228e+020
+438 192 1.75221e+020
+215 340 1.74854e+020
+356 117 1.70438e+020
+267 318 1.64088e+020
+309 422 1.62933e+020
+239 99 1.5705e+020
+289 84 1.56372e+020
+175 238 1.52881e+020
+307 129 1.50514e+020
+328 386 1.45693e+020
+381 247 1.42384e+020
+407 180 1.40151e+020
+263 234 1.40028e+020
+321 299 1.39709e+020
+232 306 1.36569e+020
+359 400 1.30703e+020
+179 327 1.29923e+020
+354 317 1.29874e+020
+235 304 1.29819e+020
+162 362 1.29243e+020
+142 312 1.2751e+020
+284 286 1.23512e+020
+325 388 1.19762e+020
+182 325 1.1467e+020
+307 335 1.14261e+020
+420 149 1.12746e+020
+237 393 1.11778e+020
+204 378 1.10385e+020
+356 314 1.10228e+020
+243 183 1.0854e+020
+305 338 1.0609e+020
+313 215 1.03777e+020
+214 251 1.00222e+020
+161 271 9.79134e+019
+293 165 9.75434e+019
+361 197 9.69778e+019
+246 180 9.38841e+019
+128 346 9.36911e+019
+226 129 9.19815e+019
+278 408 9.19308e+019
+316 213 8.98873e+019
+287 283 8.63959e+019
+208 168 8.44465e+019
+266 232 8.0734e+019
+333 266 7.74082e+019
+253 358 7.61414e+019
+273 115 7.56721e+019
+211 253 7.51884e+019
+364 195 6.96033e+019
+257 356 6.54778e+019
+380 244 6.53568e+019
+406 177 6.51841e+019
+283 283 6.17838e+019
+341 147 5.95224e+019
+353 314 5.80478e+019
+312 212 5.70449e+019
+324 385 5.68244e+019
+277 112 5.3568e+019
+345 145 5.32496e+019
+360 194 4.85536e+019
+297 162 4.78919e+019
+337 263 4.73107e+019
+242 179 4.7301e+019
+292 161 4.34622e+019
+633 322 4.28981e+019
+178 324 4.12605e+019
+272 111 3.90186e+019
+628 239 3.88409e+019
+461 21 3.68861e+019
+304 335 3.64141e+019
+533 42 3.50227e+019
+252 355 3.34674e+019
+332 262 3.31141e+019
+32 378 3.13099e+019
+411 177 2.92492e+019
+203 70 2.86143e+019
+195 198 2.84306e+019
+385 244 2.72432e+019
+605 169 2.63993e+019
+606 242 2.18414e+019
+540 29 1.87029e+019
+32 381 1.86612e+019
+210 249 1.77147e+019
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_7_5.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_7_5.txt
new file mode 100644
index 0000000..73ae40c
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_7_5.txt
@@ -0,0 +1,127 @@
+126
+239 99 3.71252e+021
+420 149 3.61786e+021
+386 328 3.58925e+021
+308 133 3.57349e+021
+375 165 3.5376e+021
+348 233 3.49753e+021
+328 183 3.39386e+021
+289 83 3.38856e+021
+412 259 3.37905e+021
+356 117 3.36785e+021
+299 251 3.35779e+021
+368 283 3.35377e+021
+175 238 3.34101e+021
+248 271 3.32244e+021
+269 323 3.31452e+021
+395 215 3.29899e+021
+258 149 3.23025e+021
+438 192 3.16031e+021
+340 353 3.10233e+021
+279 201 3.09057e+021
+207 167 3.08123e+021
+319 302 3.0259e+021
+290 375 3.01877e+021
+196 291 2.99299e+021
+217 344 2.97489e+021
+307 335 2.9653e+021
+228 219 2.95051e+021
+248 268 2.90642e+021
+142 312 2.90001e+021
+328 386 2.8995e+021
+356 314 2.87762e+021
+227 216 2.86357e+021
+268 320 2.83812e+021
+298 248 2.83678e+021
+214 251 2.81724e+021
+309 422 2.81319e+021
+278 198 2.81068e+021
+182 325 2.79467e+021
+367 280 2.76633e+021
+339 350 2.75312e+021
+347 230 2.72822e+021
+161 271 2.72604e+021
+203 378 2.71948e+021
+358 399 2.70928e+021
+327 180 2.69416e+021
+234 304 2.6838e+021
+290 372 2.67674e+021
+226 129 2.62796e+021
+316 213 2.61993e+021
+374 162 2.61752e+021
+256 356 2.60382e+021
+265 232 2.55512e+021
+286 283 2.54147e+021
+335 264 2.48577e+021
+245 180 2.4827e+021
+321 299 2.45023e+021
+364 195 2.37522e+021
+346 227 2.34562e+021
+237 393 2.33855e+021
+193 199 2.26822e+021
+162 362 2.23852e+021
+409 178 2.22872e+021
+278 408 2.22397e+021
+383 245 2.20495e+021
+128 346 2.14528e+021
+276 112 2.11147e+021
+296 162 2.06785e+021
+344 145 2.00911e+021
+306 127 1.99668e+021
+371 366 1.67165e+021
+305 338 1.61194e+021
+354 317 1.55429e+021
+546 37 1.53789e+021
+334 267 1.51538e+021
+319 98 1.5116e+021
+233 307 1.40427e+021
+254 360 1.39563e+021
+230 305 1.3605e+021
+423 228 1.35242e+021
+180 328 1.27806e+021
+398 296 1.22806e+021
+177 326 1.21195e+021
+326 390 1.20754e+021
+628 239 1.1877e+021
+342 149 1.16793e+021
+302 336 1.16011e+021
+264 235 1.13031e+021
+209 252 1.09454e+021
+362 198 1.09092e+021
+243 183 1.09037e+021
+261 233 1.07834e+021
+331 265 1.05427e+021
+408 181 1.01159e+021
+384 131 1.00937e+021
+250 358 9.92352e+020
+448 163 9.79355e+020
+323 387 9.49465e+020
+32 377 9.02411e+020
+294 166 8.74782e+020
+274 116 8.74209e+020
+314 217 8.60372e+020
+406 176 8.53103e+020
+380 243 7.94653e+020
+290 164 7.67143e+020
+338 147 7.57806e+020
+360 193 7.52422e+020
+311 214 7.41228e+020
+461 21 7.31378e+020
+312 211 7.25448e+020
+178 323 7.16409e+020
+404 179 6.99493e+020
+292 161 6.9727e+020
+270 114 6.93072e+020
+359 196 6.85345e+020
+378 246 6.58515e+020
+210 249 6.21542e+020
+609 239 5.71894e+020
+60 390 4.81989e+020
+605 169 4.77028e+020
+633 323 3.18042e+020
+538 45 3.17627e+020
+533 42 2.72911e+020
+203 70 2.51781e+020
+32 381 2.33479e+020
+600 169 2.15209e+020
+198 8 2.02865e+020
diff --git a/test_data/harriscorners/hc_fsc_3.00_0.15_7_7.txt b/test_data/harriscorners/hc_fsc_3.00_0.15_7_7.txt
new file mode 100644
index 0000000..eb52305
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_3.00_0.15_7_7.txt
@@ -0,0 +1,101 @@
+100
+421 149 1.21643e+022
+248 268 1.19386e+022
+258 147 1.19e+022
+299 249 1.17941e+022
+356 117 1.17926e+022
+227 216 1.17904e+022
+308 130 1.17079e+022
+348 230 1.1631e+022
+278 197 1.16239e+022
+319 300 1.15722e+022
+368 280 1.153e+022
+268 320 1.15241e+022
+195 288 1.15007e+022
+394 211 1.14332e+022
+327 180 1.13915e+022
+339 350 1.1374e+022
+289 84 1.13661e+022
+375 163 1.12556e+022
+328 183 1.12477e+022
+395 215 1.11539e+022
+208 168 1.10954e+022
+259 150 1.10729e+022
+279 201 1.10542e+022
+348 233 1.10013e+022
+290 372 1.0995e+022
+217 342 1.09654e+022
+320 303 1.08995e+022
+239 100 1.08876e+022
+299 252 1.07764e+022
+368 283 1.07622e+022
+308 133 1.06758e+022
+228 219 1.05492e+022
+437 191 1.03591e+022
+412 258 1.0345e+022
+375 166 1.03424e+022
+196 292 1.0202e+022
+386 327 9.84076e+021
+176 239 9.57959e+021
+306 335 9.33573e+021
+226 129 9.16055e+021
+204 378 9.12738e+021
+355 314 9.1172e+021
+233 304 9.04719e+021
+327 386 9.04265e+021
+358 398 9.03813e+021
+335 264 8.92028e+021
+181 325 8.90864e+021
+213 251 8.89592e+021
+161 271 8.86926e+021
+256 356 8.85062e+021
+285 284 8.77812e+021
+264 232 8.74882e+021
+142 312 8.52967e+021
+315 213 8.49531e+021
+278 408 8.48246e+021
+194 198 8.46142e+021
+246 180 8.46089e+021
+309 421 8.37885e+021
+382 245 8.25484e+021
+408 178 8.09241e+021
+363 195 7.99555e+021
+296 162 7.8729e+021
+236 392 7.76956e+021
+276 112 7.59036e+021
+344 145 7.47238e+021
+370 366 7.39996e+021
+128 346 7.30442e+021
+161 361 6.97972e+021
+397 296 6.97771e+021
+423 228 6.95101e+021
+326 390 6.82016e+021
+318 98 6.70278e+021
+384 131 6.25683e+021
+208 253 6.17698e+021
+250 358 6.13602e+021
+302 336 6.06137e+021
+448 163 6.00543e+021
+362 199 5.96024e+021
+239 182 5.91963e+021
+322 388 5.84965e+021
+350 316 5.82771e+021
+290 164 5.56357e+021
+270 114 5.55627e+021
+311 214 5.46391e+021
+338 147 5.43292e+021
+378 246 5.35598e+021
+359 196 5.24001e+021
+628 238 3.85072e+021
+546 38 3.6088e+021
+32 377 3.11025e+021
+609 240 2.54532e+021
+460 20 2.20716e+021
+599 174 2.06492e+021
+604 169 2.02568e+021
+61 390 1.6742e+021
+539 44 1.18093e+021
+198 8 9.54686e+020
+600 168 9.10634e+020
+38 373 7.22412e+020
+632 323 6.2014e+020
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_3_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_3_3.txt
new file mode 100644
index 0000000..665403a
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_3_3.txt
@@ -0,0 +1,72 @@
+71
+193 199 9.2637e+011
+234 304 9.09528e+011
+327 387 8.82552e+011
+160 272 8.69034e+011
+335 264 8.67667e+011
+265 232 8.64265e+011
+420 148 8.64e+011
+255 357 8.43996e+011
+225 130 8.25407e+011
+277 409 8.17461e+011
+203 379 8.15396e+011
+285 284 8.12161e+011
+207 166 7.9013e+011
+386 328 7.88009e+011
+355 315 7.87369e+011
+438 193 7.84907e+011
+295 163 7.83566e+011
+355 116 7.76582e+011
+249 268 7.60458e+011
+258 149 7.42723e+011
+394 214 7.41334e+011
+327 182 7.33874e+011
+409 178 7.33773e+011
+209 252 7.20508e+011
+319 302 7.17451e+011
+343 146 7.12643e+011
+227 218 7.09407e+011
+413 259 7.05167e+011
+245 181 7.00102e+011
+347 232 6.99443e+011
+359 400 6.98424e+011
+288 83 6.97956e+011
+275 113 6.96411e+011
+302 336 6.95884e+011
+383 245 6.90528e+011
+278 200 6.89492e+011
+367 282 6.84523e+011
+291 372 6.81098e+011
+237 393 6.81093e+011
+239 98 6.76557e+011
+175 237 6.72564e+011
+196 288 6.62199e+011
+269 320 6.60679e+011
+308 132 6.52207e+011
+127 347 6.48588e+011
+181 325 6.19817e+011
+315 213 6.13043e+011
+142 311 6.00834e+011
+375 165 5.9975e+011
+299 248 5.77978e+011
+338 350 5.69661e+011
+162 362 5.55089e+011
+216 344 5.42916e+011
+363 195 5.42011e+011
+310 422 5.29508e+011
+608 240 5.06536e+011
+449 162 4.50714e+011
+546 37 4.24742e+011
+399 295 4.18076e+011
+386 130 3.98535e+011
+372 366 3.95913e+011
+320 98 3.83848e+011
+424 227 3.33328e+011
+602 170 1.45361e+011
+59 391 1.32337e+011
+461 22 1.13642e+011
+200 8 8.66138e+010
+634 323 8.59606e+010
+274 478 5.56231e+010
+203 70 5.15149e+010
+74 350 4.67664e+010
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_3_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_3_5.txt
new file mode 100644
index 0000000..b3bec8d
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_3_5.txt
@@ -0,0 +1,71 @@
+70
+420 149 6.30483e+012
+239 99 6.29582e+012
+247 268 6.24305e+012
+195 288 6.13067e+012
+268 320 6.12932e+012
+207 167 5.95926e+012
+298 248 5.9368e+012
+227 216 5.92047e+012
+308 133 5.87985e+012
+289 372 5.86352e+012
+339 350 5.83181e+012
+367 280 5.8085e+012
+258 147 5.74835e+012
+175 238 5.74223e+012
+374 162 5.71748e+012
+307 335 5.62873e+012
+347 230 5.60197e+012
+386 328 5.56045e+012
+216 342 5.54029e+012
+278 198 5.52891e+012
+327 386 5.42977e+012
+203 378 5.42142e+012
+288 83 5.3978e+012
+193 199 5.36408e+012
+182 325 5.36402e+012
+356 314 5.33816e+012
+319 300 5.32739e+012
+235 304 5.32558e+012
+355 116 5.31084e+012
+336 264 5.2938e+012
+438 192 5.26842e+012
+327 180 5.2553e+012
+394 212 5.12581e+012
+161 272 5.12406e+012
+225 129 5.12317e+012
+412 259 5.1158e+012
+277 409 5.09321e+012
+286 284 5.07578e+012
+142 312 5.04181e+012
+214 251 4.96803e+012
+266 232 4.95664e+012
+316 213 4.93937e+012
+256 357 4.85184e+012
+245 180 4.58517e+012
+359 399 4.55175e+012
+296 163 4.52605e+012
+383 245 4.48237e+012
+409 178 4.43294e+012
+364 195 4.42132e+012
+344 146 4.35282e+012
+309 422 4.26507e+012
+237 392 4.25788e+012
+127 346 4.11327e+012
+608 239 4.11009e+012
+276 113 4.05007e+012
+371 366 4.02276e+012
+424 228 3.77996e+012
+162 361 3.70266e+012
+398 295 3.64727e+012
+319 98 3.59227e+012
+385 131 3.43194e+012
+448 162 3.23216e+012
+546 37 2.60179e+012
+598 174 1.45013e+012
+32 377 1.20928e+012
+461 21 1.05912e+012
+60 390 9.36681e+011
+199 8 7.03236e+011
+634 322 6.08736e+011
+203 70 3.94772e+011
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_3_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_3_7.txt
new file mode 100644
index 0000000..b40c0d6
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_3_7.txt
@@ -0,0 +1,70 @@
+69
+248 268 1.87908e+013
+195 288 1.84493e+013
+298 248 1.83784e+013
+367 279 1.82967e+013
+268 320 1.82014e+013
+227 216 1.81487e+013
+258 147 1.80749e+013
+339 350 1.80155e+013
+278 197 1.7928e+013
+347 229 1.78843e+013
+308 130 1.75619e+013
+289 371 1.75313e+013
+374 162 1.74798e+013
+394 211 1.74525e+013
+319 299 1.74414e+013
+327 179 1.73845e+013
+216 341 1.73451e+013
+232 305 1.6197e+013
+305 335 1.61725e+013
+421 150 1.58082e+013
+354 314 1.56539e+013
+212 251 1.55921e+013
+284 284 1.55769e+013
+333 264 1.55524e+013
+208 168 1.54429e+013
+239 100 1.52484e+013
+325 387 1.51867e+013
+263 233 1.51833e+013
+356 117 1.49416e+013
+289 84 1.48307e+013
+180 325 1.4813e+013
+243 181 1.44369e+013
+254 357 1.43933e+013
+407 178 1.40154e+013
+313 213 1.39748e+013
+381 245 1.37664e+013
+175 239 1.37644e+013
+204 378 1.34537e+013
+386 327 1.34062e+013
+412 258 1.33845e+013
+161 271 1.33285e+013
+226 129 1.32466e+013
+361 195 1.31853e+013
+341 146 1.30429e+013
+437 191 1.30403e+013
+293 163 1.29859e+013
+273 113 1.29434e+013
+278 408 1.26728e+013
+142 313 1.25758e+013
+194 199 1.2574e+013
+358 398 1.20319e+013
+370 366 1.17395e+013
+309 421 1.12996e+013
+397 296 1.10686e+013
+423 228 1.0949e+013
+128 346 1.05324e+013
+237 391 1.04227e+013
+318 98 1.015e+013
+609 239 9.97081e+012
+384 131 9.94259e+012
+162 360 9.38448e+012
+547 38 6.71251e+012
+599 174 5.32455e+012
+32 378 3.60313e+012
+460 20 2.72419e+012
+61 390 2.39475e+012
+199 8 1.71654e+012
+633 322 1.55388e+012
+203 69 1.00688e+012
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_5_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_5_3.txt
new file mode 100644
index 0000000..1eeb1c4
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_5_3.txt
@@ -0,0 +1,70 @@
+69
+420 148 2.5474e+016
+386 328 2.48823e+016
+355 116 2.41246e+016
+193 199 2.40366e+016
+234 304 2.37577e+016
+258 149 2.36803e+016
+438 192 2.36412e+016
+265 232 2.27493e+016
+288 83 2.26334e+016
+394 214 2.25462e+016
+160 272 2.25409e+016
+239 99 2.24873e+016
+335 264 2.23492e+016
+207 166 2.23005e+016
+327 182 2.21446e+016
+327 386 2.18602e+016
+319 302 2.18555e+016
+412 259 2.17164e+016
+203 379 2.1626e+016
+278 200 2.15127e+016
+308 132 2.14405e+016
+277 409 2.14265e+016
+225 130 2.1346e+016
+286 284 2.11137e+016
+375 165 2.10792e+016
+255 357 2.10181e+016
+175 237 2.07472e+016
+227 218 2.06908e+016
+347 232 2.04878e+016
+359 400 2.03855e+016
+249 268 1.99292e+016
+367 282 1.98698e+016
+409 178 1.98621e+016
+237 393 1.97688e+016
+295 163 1.96886e+016
+181 325 1.9532e+016
+306 335 1.93484e+016
+195 291 1.93469e+016
+383 245 1.9206e+016
+291 372 1.90761e+016
+315 213 1.90072e+016
+355 314 1.87508e+016
+213 252 1.83891e+016
+270 320 1.82696e+016
+343 146 1.81396e+016
+298 251 1.81379e+016
+245 181 1.7993e+016
+142 311 1.79656e+016
+162 362 1.74074e+016
+275 113 1.73876e+016
+363 195 1.68968e+016
+127 347 1.67405e+016
+309 422 1.62451e+016
+340 353 1.62186e+016
+216 344 1.60684e+016
+546 37 1.33834e+016
+398 295 1.25656e+016
+449 162 1.22946e+016
+372 366 1.20829e+016
+608 240 1.20715e+016
+424 228 1.18928e+016
+320 98 1.17592e+016
+385 130 1.05377e+016
+461 22 3.72946e+015
+33 377 3.63357e+015
+598 173 3.56759e+015
+634 323 3.00003e+015
+199 8 2.47938e+015
+203 70 1.84788e+015
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_5_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_5_5.txt
new file mode 100644
index 0000000..2c7d5d0
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_5_5.txt
@@ -0,0 +1,71 @@
+70
+420 149 2.22093e+017
+239 99 2.21221e+017
+207 167 2.049e+017
+175 238 2.01678e+017
+308 133 2.01089e+017
+289 83 1.96713e+017
+386 328 1.95944e+017
+355 116 1.95221e+017
+248 271 1.92265e+017
+375 165 1.90977e+017
+348 233 1.90144e+017
+438 192 1.8983e+017
+307 335 1.85877e+017
+258 149 1.85424e+017
+203 378 1.83932e+017
+412 259 1.83763e+017
+193 199 1.83063e+017
+269 323 1.82044e+017
+368 283 1.80919e+017
+227 219 1.80529e+017
+299 251 1.80191e+017
+195 289 1.79799e+017
+328 183 1.79584e+017
+328 386 1.78456e+017
+225 129 1.77759e+017
+278 200 1.77347e+017
+394 214 1.77299e+017
+142 312 1.76331e+017
+182 325 1.76256e+017
+356 314 1.75915e+017
+319 302 1.75493e+017
+336 264 1.74564e+017
+160 271 1.73565e+017
+339 350 1.73053e+017
+235 304 1.72679e+017
+289 372 1.71728e+017
+277 409 1.70148e+017
+214 251 1.68745e+017
+216 342 1.67507e+017
+316 213 1.67182e+017
+266 232 1.66083e+017
+286 284 1.64651e+017
+256 357 1.63266e+017
+359 399 1.62759e+017
+245 180 1.56172e+017
+296 163 1.53718e+017
+383 245 1.52935e+017
+309 422 1.52173e+017
+364 195 1.51897e+017
+409 178 1.47704e+017
+237 392 1.45445e+017
+371 366 1.45217e+017
+344 146 1.44703e+017
+127 346 1.42405e+017
+276 113 1.40411e+017
+424 228 1.38039e+017
+319 98 1.34201e+017
+162 361 1.34088e+017
+398 295 1.30874e+017
+385 131 1.24876e+017
+448 162 1.21613e+017
+608 239 1.1583e+017
+546 37 9.1076e+016
+598 174 5.55276e+016
+32 377 4.63283e+016
+461 21 4.00366e+016
+60 390 3.39606e+016
+199 8 2.70364e+016
+634 322 2.69033e+016
+203 70 1.52475e+016
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_5_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_5_7.txt
new file mode 100644
index 0000000..d7f51fc
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_5_7.txt
@@ -0,0 +1,70 @@
+69
+248 268 6.5312e+017
+298 248 6.49243e+017
+258 147 6.48254e+017
+227 216 6.42183e+017
+278 198 6.41296e+017
+367 280 6.4053e+017
+195 288 6.3823e+017
+308 130 6.35422e+017
+347 230 6.34588e+017
+268 320 6.34124e+017
+339 350 6.296e+017
+319 300 6.27858e+017
+327 180 6.24114e+017
+394 211 6.20595e+017
+374 162 6.19737e+017
+289 372 6.08877e+017
+216 341 6.01174e+017
+421 150 5.99993e+017
+356 117 5.85957e+017
+239 100 5.76265e+017
+289 84 5.71268e+017
+208 168 5.70491e+017
+305 335 5.57795e+017
+232 305 5.46975e+017
+354 314 5.46333e+017
+334 264 5.46132e+017
+284 284 5.41732e+017
+212 251 5.37409e+017
+326 386 5.27463e+017
+263 232 5.23914e+017
+180 325 5.19434e+017
+175 239 5.16365e+017
+412 258 5.14507e+017
+243 181 5.13681e+017
+254 357 5.13598e+017
+386 327 5.08632e+017
+437 191 5.07521e+017
+381 245 5.04402e+017
+313 213 5.03348e+017
+407 178 4.99375e+017
+226 129 4.98929e+017
+204 378 4.96695e+017
+161 271 4.89208e+017
+361 196 4.81433e+017
+293 163 4.75846e+017
+273 113 4.71045e+017
+194 199 4.69539e+017
+341 146 4.6838e+017
+278 408 4.68161e+017
+142 313 4.62323e+017
+358 398 4.54072e+017
+370 366 4.44342e+017
+423 228 4.30213e+017
+309 421 4.28173e+017
+397 296 4.22516e+017
+318 98 4.01168e+017
+128 346 3.97492e+017
+384 131 3.94944e+017
+236 392 3.88682e+017
+162 360 3.5913e+017
+609 239 3.10391e+017
+547 38 2.47452e+017
+599 174 2.06151e+017
+32 378 1.50275e+017
+461 20 1.0819e+017
+61 390 9.39135e+016
+199 8 7.3456e+016
+633 322 7.18073e+016
+203 69 4.12448e+016
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_7_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_7_3.txt
new file mode 100644
index 0000000..30ec31f
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_7_3.txt
@@ -0,0 +1,71 @@
+70
+386 328 8.6055e+020
+420 148 8.55038e+020
+355 116 8.2885e+020
+239 99 8.27779e+020
+438 192 8.24684e+020
+258 149 8.19602e+020
+288 83 7.88083e+020
+375 165 7.82066e+020
+308 132 7.77139e+020
+394 214 7.71902e+020
+412 259 7.64481e+020
+327 182 7.57557e+020
+319 302 7.53271e+020
+193 199 7.47494e+020
+278 200 7.4689e+020
+175 238 7.36963e+020
+234 304 7.36182e+020
+207 166 7.28795e+020
+327 386 7.1269e+020
+265 232 7.09639e+020
+227 218 6.94629e+020
+335 264 6.8538e+020
+347 232 6.84094e+020
+248 271 6.83669e+020
+299 251 6.82387e+020
+203 379 6.69706e+020
+359 400 6.66735e+020
+367 282 6.6584e+020
+307 335 6.65627e+020
+160 272 6.64719e+020
+277 409 6.61314e+020
+195 291 6.60369e+020
+269 323 6.59946e+020
+286 284 6.58125e+020
+181 325 6.57578e+020
+237 393 6.53545e+020
+356 314 6.45439e+020
+225 130 6.42051e+020
+315 213 6.38769e+020
+255 357 6.31035e+020
+409 178 6.27365e+020
+340 353 6.22787e+020
+383 245 6.18342e+020
+291 372 6.13644e+020
+142 312 6.11051e+020
+295 163 5.99533e+020
+309 422 5.9742e+020
+162 362 5.91057e+020
+217 344 5.88609e+020
+245 180 5.79098e+020
+363 195 5.69338e+020
+213 251 5.65714e+020
+343 146 5.45679e+020
+275 113 5.28725e+020
+127 346 5.28252e+020
+546 37 4.57601e+020
+371 366 4.44758e+020
+424 228 4.36745e+020
+398 295 4.30265e+020
+319 98 4.23738e+020
+449 162 3.92796e+020
+385 131 3.78008e+020
+608 240 3.29071e+020
+191 1 1.93727e+020
+32 377 1.44422e+020
+461 21 1.41794e+020
+598 174 1.218e+020
+60 390 1.15862e+020
+634 322 1.14614e+020
+203 70 6.93165e+019
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_7_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_7_5.txt
new file mode 100644
index 0000000..37ceb82
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_7_5.txt
@@ -0,0 +1,71 @@
+70
+420 149 8.80514e+021
+239 99 8.70978e+021
+207 167 8.02392e+021
+289 83 7.97858e+021
+356 116 7.96314e+021
+175 238 7.86839e+021
+308 133 7.80115e+021
+386 328 7.64232e+021
+438 192 7.53786e+021
+375 165 7.51343e+021
+348 233 7.42294e+021
+248 271 7.31906e+021
+412 259 7.28982e+021
+258 149 7.24384e+021
+328 183 7.13819e+021
+299 251 7.10852e+021
+368 283 7.07856e+021
+203 378 7.06746e+021
+269 323 7.00885e+021
+193 199 6.93758e+021
+395 215 6.93491e+021
+225 129 6.9347e+021
+307 335 6.93367e+021
+278 200 6.8879e+021
+142 312 6.86087e+021
+319 302 6.8274e+021
+227 219 6.796e+021
+328 386 6.72991e+021
+161 271 6.70861e+021
+356 314 6.66487e+021
+182 325 6.57749e+021
+340 353 6.54817e+021
+336 264 6.52417e+021
+214 251 6.47861e+021
+196 291 6.46461e+021
+290 375 6.4461e+021
+359 399 6.44463e+021
+235 304 6.4187e+021
+316 213 6.39551e+021
+277 408 6.31511e+021
+266 232 6.29909e+021
+217 344 6.27107e+021
+256 356 6.07031e+021
+245 180 6.05584e+021
+286 284 6.0449e+021
+309 422 6.00588e+021
+364 195 5.84388e+021
+371 366 5.80003e+021
+296 163 5.78529e+021
+383 245 5.76709e+021
+237 392 5.68035e+021
+424 228 5.57349e+021
+409 178 5.55565e+021
+127 346 5.53212e+021
+319 98 5.47922e+021
+344 146 5.41224e+021
+162 361 5.36276e+021
+276 113 5.33318e+021
+398 295 5.22444e+021
+385 131 5.08652e+021
+448 162 4.94979e+021
+608 239 3.87582e+021
+547 38 3.55573e+021
+598 174 2.34466e+021
+32 377 1.99094e+021
+461 21 1.62747e+021
+60 390 1.3674e+021
+634 322 1.20917e+021
+199 8 1.11171e+021
+203 70 6.23351e+020
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.04_7_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.04_7_7.txt
new file mode 100644
index 0000000..3eb674f
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.04_7_7.txt
@@ -0,0 +1,71 @@
+70
+258 147 2.58212e+022
+421 149 2.5756e+022
+298 248 2.55725e+022
+278 198 2.54535e+022
+248 268 2.54469e+022
+367 280 2.53391e+022
+227 216 2.53099e+022
+347 230 2.52823e+022
+308 130 2.52497e+022
+356 117 2.50755e+022
+327 180 2.49478e+022
+319 300 2.49348e+022
+195 288 2.48708e+022
+268 320 2.48242e+022
+339 350 2.46849e+022
+394 212 2.45883e+022
+375 163 2.44281e+022
+289 84 2.43155e+022
+239 100 2.42905e+022
+289 372 2.38308e+022
+208 168 2.38103e+022
+216 342 2.33929e+022
+412 258 2.20227e+022
+437 191 2.18772e+022
+334 264 2.1674e+022
+305 335 2.15894e+022
+354 315 2.15131e+022
+175 239 2.15075e+022
+386 327 2.1495e+022
+284 284 2.12991e+022
+232 305 2.11978e+022
+212 252 2.10716e+022
+226 129 2.10246e+022
+263 232 2.05785e+022
+326 386 2.05687e+022
+243 181 2.04808e+022
+204 378 2.04347e+022
+254 357 2.0348e+022
+381 245 2.03334e+022
+180 325 2.0283e+022
+313 214 2.02441e+022
+161 271 2.02206e+022
+407 178 2.00327e+022
+194 199 1.95961e+022
+361 196 1.95229e+022
+278 408 1.92712e+022
+293 163 1.92466e+022
+358 398 1.91708e+022
+142 313 1.90281e+022
+273 113 1.89571e+022
+341 146 1.88946e+022
+370 366 1.87559e+022
+423 228 1.85323e+022
+309 421 1.80516e+022
+397 296 1.79459e+022
+318 98 1.73865e+022
+384 131 1.7123e+022
+448 163 1.70291e+022
+128 346 1.6613e+022
+236 392 1.64025e+022
+162 360 1.52496e+022
+609 239 1.15887e+022
+547 38 1.00758e+022
+599 174 8.8887e+021
+32 378 6.78931e+021
+461 20 4.72527e+021
+61 390 4.02801e+021
+633 322 3.3526e+021
+199 8 3.32769e+021
+203 69 1.82738e+021
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_3_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_3_3.txt
new file mode 100644
index 0000000..094a1ea
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_3_3.txt
@@ -0,0 +1,71 @@
+70
+234 304 6.02893e+011
+193 199 5.68532e+011
+265 232 5.6428e+011
+386 328 5.5162e+011
+335 264 5.42843e+011
+420 148 5.30926e+011
+249 268 5.30149e+011
+258 149 5.29147e+011
+438 193 5.21423e+011
+394 214 5.1313e+011
+319 302 5.10696e+011
+327 182 5.06019e+011
+255 357 5.05639e+011
+227 218 5.0502e+011
+285 284 4.94127e+011
+355 116 4.82175e+011
+327 386 4.80608e+011
+291 372 4.77965e+011
+278 200 4.72621e+011
+277 409 4.71337e+011
+367 282 4.71057e+011
+347 232 4.68723e+011
+269 320 4.68489e+011
+196 288 4.61325e+011
+359 400 4.60545e+011
+409 178 4.5504e+011
+295 163 4.45894e+011
+207 166 4.45289e+011
+160 272 4.44778e+011
+237 393 4.42912e+011
+203 379 4.42264e+011
+412 259 4.39325e+011
+239 99 4.32781e+011
+355 315 4.26989e+011
+288 83 4.22737e+011
+343 146 4.21308e+011
+308 132 4.19672e+011
+375 165 4.1874e+011
+383 245 4.06009e+011
+225 130 3.99551e+011
+299 248 3.89275e+011
+338 349 3.87229e+011
+275 113 3.83808e+011
+175 238 3.79914e+011
+162 362 3.74828e+011
+209 252 3.67905e+011
+245 181 3.62105e+011
+306 335 3.5155e+011
+181 325 3.5143e+011
+127 347 3.42677e+011
+217 342 3.41873e+011
+315 213 3.31406e+011
+142 312 3.2732e+011
+309 423 3.25103e+011
+363 195 2.8975e+011
+546 37 2.88216e+011
+629 240 2.08684e+011
+449 162 2.00268e+011
+399 295 1.93681e+011
+386 130 1.86281e+011
+319 98 1.59518e+011
+372 366 1.53696e+011
+424 228 1.3773e+011
+190 1 1.16104e+011
+461 21 6.62427e+010
+59 391 6.00462e+010
+633 323 3.45834e+010
+203 70 3.30473e+010
+74 350 3.28445e+010
+602 170 3.25969e+010
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_3_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_3_5.txt
new file mode 100644
index 0000000..d702c01
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_3_5.txt
@@ -0,0 +1,71 @@
+70
+239 99 4.46115e+012
+420 149 4.4139e+012
+268 320 4.35525e+012
+195 288 4.35166e+012
+247 268 4.3471e+012
+227 216 4.21409e+012
+298 248 4.20299e+012
+207 167 4.15981e+012
+339 350 4.12449e+012
+308 133 4.12307e+012
+289 372 4.0885e+012
+175 238 4.07121e+012
+258 147 4.06196e+012
+367 280 4.05676e+012
+374 162 3.97249e+012
+307 335 3.97003e+012
+386 328 3.9409e+012
+348 233 3.92999e+012
+278 198 3.87016e+012
+216 342 3.86144e+012
+327 386 3.8442e+012
+203 378 3.7774e+012
+356 314 3.77576e+012
+319 300 3.77573e+012
+182 325 3.77506e+012
+288 83 3.76679e+012
+235 304 3.71644e+012
+355 116 3.71297e+012
+327 180 3.67559e+012
+193 199 3.66306e+012
+412 259 3.64188e+012
+336 264 3.63061e+012
+394 212 3.61488e+012
+142 312 3.56591e+012
+160 271 3.54895e+012
+438 192 3.53513e+012
+214 251 3.50997e+012
+225 129 3.50385e+012
+316 213 3.45353e+012
+277 409 3.45102e+012
+286 284 3.42986e+012
+265 232 3.4201e+012
+256 357 3.24089e+012
+245 180 3.21426e+012
+383 245 3.09037e+012
+364 195 3.0857e+012
+409 178 3.08012e+012
+296 163 3.05015e+012
+309 422 3.0334e+012
+359 399 3.0153e+012
+344 146 2.94229e+012
+127 346 2.86811e+012
+237 392 2.84455e+012
+276 113 2.70731e+012
+371 366 2.6818e+012
+162 361 2.53136e+012
+424 228 2.48912e+012
+319 98 2.38068e+012
+398 295 2.32713e+012
+608 239 2.24559e+012
+385 131 2.18339e+012
+448 163 1.97612e+012
+546 37 1.67717e+012
+32 377 8.5175e+011
+598 174 8.246e+011
+461 21 7.55404e+011
+60 390 6.48875e+011
+199 8 4.13095e+011
+633 323 2.82256e+011
+203 70 2.33223e+011
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_3_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_3_7.txt
new file mode 100644
index 0000000..8a8141d
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_3_7.txt
@@ -0,0 +1,68 @@
+67
+248 268 1.32804e+013
+195 288 1.30128e+013
+298 248 1.2938e+013
+268 320 1.28673e+013
+367 279 1.28371e+013
+227 216 1.27995e+013
+339 350 1.27148e+013
+258 147 1.26483e+013
+278 197 1.26076e+013
+347 229 1.25683e+013
+319 299 1.23621e+013
+289 371 1.23343e+013
+394 211 1.23207e+013
+308 130 1.22892e+013
+327 179 1.22391e+013
+216 341 1.22322e+013
+375 163 1.2155e+013
+421 150 1.12679e+013
+305 335 1.10267e+013
+208 168 1.10181e+013
+233 304 1.09801e+013
+239 100 1.08e+013
+212 251 1.07403e+013
+354 314 1.06769e+013
+334 264 1.06623e+013
+356 117 1.06519e+013
+289 84 1.0576e+013
+284 284 1.05706e+013
+326 386 1.04796e+013
+180 325 1.03379e+013
+264 232 1.02804e+013
+254 357 9.85896e+012
+175 239 9.66515e+012
+204 378 9.52409e+012
+243 181 9.50763e+012
+314 213 9.46578e+012
+161 271 9.40764e+012
+412 258 9.38163e+012
+226 129 9.34129e+012
+386 327 9.30001e+012
+407 178 9.23348e+012
+437 191 9.1746e+012
+382 245 9.13464e+012
+278 408 8.94247e+012
+362 195 8.91159e+012
+142 313 8.7993e+012
+342 146 8.70249e+012
+194 199 8.68941e+012
+294 163 8.64948e+012
+358 398 8.51927e+012
+274 113 8.50154e+012
+370 366 8.03271e+012
+309 421 7.87464e+012
+397 296 7.60821e+012
+423 228 7.45822e+012
+128 346 7.43851e+012
+236 392 7.34067e+012
+318 98 6.91061e+012
+384 131 6.71447e+012
+161 361 6.48098e+012
+609 239 6.36104e+012
+547 38 4.11349e+012
+599 174 3.39836e+012
+32 378 2.5161e+012
+460 20 1.94175e+012
+61 390 1.67709e+012
+199 8 1.0874e+012
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_5_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_5_3.txt
new file mode 100644
index 0000000..b91b275
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_5_3.txt
@@ -0,0 +1,71 @@
+70
+386 328 1.68491e+016
+258 149 1.66576e+016
+319 302 1.5207e+016
+394 214 1.5004e+016
+327 182 1.47264e+016
+227 218 1.46546e+016
+375 165 1.46503e+016
+438 192 1.45031e+016
+234 304 1.43462e+016
+278 200 1.4276e+016
+308 132 1.42357e+016
+239 99 1.39731e+016
+420 148 1.39589e+016
+249 268 1.35191e+016
+412 259 1.34576e+016
+355 116 1.33461e+016
+265 232 1.32942e+016
+367 282 1.31064e+016
+291 372 1.30411e+016
+347 232 1.30157e+016
+195 290 1.27797e+016
+270 320 1.2675e+016
+359 400 1.26215e+016
+175 238 1.25639e+016
+288 83 1.22786e+016
+335 264 1.22278e+016
+193 199 1.21213e+016
+237 393 1.19935e+016
+327 386 1.1875e+016
+299 251 1.15902e+016
+307 335 1.11733e+016
+162 362 1.10239e+016
+356 314 1.10167e+016
+338 349 1.09692e+016
+286 284 1.07749e+016
+409 178 1.0772e+016
+207 167 1.07275e+016
+255 357 1.07111e+016
+142 312 1.04008e+016
+309 422 1.03863e+016
+181 325 1.02412e+016
+217 344 1.00032e+016
+277 409 9.75883e+015
+203 378 9.54656e+015
+383 245 9.51676e+015
+546 37 9.2507e+015
+343 146 9.07901e+015
+315 213 9.05444e+015
+295 163 8.98437e+015
+160 272 8.57133e+015
+214 251 8.56928e+015
+245 180 8.24924e+015
+363 195 7.93513e+015
+275 113 7.56692e+015
+127 346 7.38229e+015
+225 130 7.13952e+015
+629 239 4.73895e+015
+371 366 4.48751e+015
+319 98 4.37294e+015
+424 228 3.47063e+015
+399 295 3.43704e+015
+385 131 2.60765e+015
+449 162 2.5687e+015
+190 1 2.40677e+015
+461 21 2.32815e+015
+32 377 2.066e+015
+60 390 1.67607e+015
+633 323 1.49179e+015
+203 70 1.23977e+015
+605 169 9.81361e+014
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_5_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_5_5.txt
new file mode 100644
index 0000000..e36e3ab
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_5_5.txt
@@ -0,0 +1,71 @@
+70
+239 99 1.54904e+017
+420 149 1.53355e+017
+308 133 1.41449e+017
+175 238 1.41116e+017
+386 328 1.39795e+017
+207 167 1.39754e+017
+289 83 1.3712e+017
+348 233 1.35331e+017
+248 271 1.35201e+017
+356 116 1.35147e+017
+375 165 1.34978e+017
+412 259 1.30974e+017
+307 335 1.29711e+017
+269 323 1.297e+017
+438 192 1.29307e+017
+368 283 1.28929e+017
+258 149 1.28456e+017
+328 183 1.28074e+017
+299 251 1.27598e+017
+195 289 1.26445e+017
+227 216 1.25997e+017
+203 378 1.25492e+017
+328 386 1.24835e+017
+395 215 1.2348e+017
+142 312 1.23113e+017
+356 314 1.23061e+017
+182 325 1.22761e+017
+339 350 1.21893e+017
+278 198 1.21808e+017
+319 302 1.21641e+017
+193 199 1.2121e+017
+290 375 1.19721e+017
+235 304 1.19352e+017
+161 271 1.19058e+017
+214 251 1.18109e+017
+336 264 1.17818e+017
+225 129 1.17607e+017
+216 342 1.17129e+017
+316 213 1.15338e+017
+266 232 1.13193e+017
+277 409 1.11113e+017
+286 284 1.09189e+017
+309 422 1.08648e+017
+359 399 1.08539e+017
+256 356 1.07856e+017
+245 180 1.0765e+017
+364 195 1.04573e+017
+383 245 1.0363e+017
+409 178 1.01263e+017
+296 163 1.01014e+017
+237 393 9.86438e+016
+127 346 9.65681e+016
+344 146 9.54477e+016
+371 366 9.31794e+016
+162 361 9.16235e+016
+276 113 9.14517e+016
+424 228 8.58985e+016
+319 98 8.53685e+016
+398 295 7.97172e+016
+385 131 7.4526e+016
+448 163 7.0276e+016
+546 37 6.16485e+016
+608 240 5.34675e+016
+32 377 3.2619e+016
+598 174 2.84674e+016
+461 21 2.8393e+016
+60 390 2.28258e+016
+199 8 1.47298e+016
+633 323 1.37971e+016
+203 70 9.79294e+015
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_5_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_5_7.txt
new file mode 100644
index 0000000..04ca9b8
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_5_7.txt
@@ -0,0 +1,70 @@
+69
+248 268 4.62912e+017
+298 248 4.57563e+017
+258 147 4.55859e+017
+227 216 4.54074e+017
+195 288 4.50387e+017
+278 198 4.49029e+017
+268 320 4.48319e+017
+308 130 4.47801e+017
+367 279 4.47221e+017
+348 230 4.45009e+017
+339 350 4.44011e+017
+319 300 4.42939e+017
+394 211 4.39222e+017
+327 180 4.36935e+017
+375 163 4.34652e+017
+421 150 4.27786e+017
+290 372 4.26665e+017
+216 341 4.24366e+017
+356 117 4.17551e+017
+289 84 4.06622e+017
+208 168 4.0599e+017
+239 100 4.05579e+017
+305 335 3.76468e+017
+233 304 3.73522e+017
+334 264 3.70479e+017
+354 314 3.676e+017
+212 251 3.66234e+017
+412 258 3.63736e+017
+326 386 3.62354e+017
+284 284 3.62296e+017
+437 191 3.59969e+017
+180 325 3.59799e+017
+175 239 3.5958e+017
+264 232 3.57936e+017
+386 327 3.5601e+017
+204 378 3.49551e+017
+254 357 3.49362e+017
+226 129 3.48936e+017
+161 271 3.42814e+017
+314 213 3.39599e+017
+382 245 3.33146e+017
+243 181 3.32966e+017
+408 178 3.28547e+017
+278 408 3.28082e+017
+358 398 3.22627e+017
+194 198 3.22336e+017
+362 195 3.21992e+017
+142 313 3.209e+017
+294 163 3.1651e+017
+342 146 3.1137e+017
+274 113 3.07784e+017
+370 366 3.013e+017
+309 421 3.01211e+017
+423 228 2.88628e+017
+397 296 2.86144e+017
+128 346 2.78658e+017
+236 392 2.77281e+017
+318 98 2.70228e+017
+384 131 2.62579e+017
+161 361 2.47849e+017
+609 239 1.86196e+017
+547 38 1.56149e+017
+599 174 1.25841e+017
+32 378 1.04685e+017
+460 20 7.70505e+016
+61 390 6.49638e+016
+199 8 4.53822e+016
+632 322 2.78183e+016
+203 69 2.35485e+016
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_7_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_7_3.txt
new file mode 100644
index 0000000..c4f0ea8
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_7_3.txt
@@ -0,0 +1,71 @@
+70
+258 149 5.58732e+020
+386 328 5.46413e+020
+375 165 5.32607e+020
+308 132 5.14343e+020
+319 302 5.05374e+020
+394 214 4.86822e+020
+227 218 4.80265e+020
+327 182 4.78677e+020
+278 200 4.7215e+020
+438 192 4.70431e+020
+239 99 4.61927e+020
+248 271 4.55727e+020
+269 323 4.42595e+020
+412 259 4.41501e+020
+299 251 4.41288e+020
+420 149 4.23757e+020
+175 238 4.18373e+020
+367 282 4.16396e+020
+195 290 4.16312e+020
+340 353 4.10619e+020
+348 232 4.07132e+020
+291 372 4.04538e+020
+234 304 3.97137e+020
+355 116 3.87246e+020
+359 400 3.74354e+020
+217 344 3.73423e+020
+307 335 3.64882e+020
+309 422 3.60427e+020
+265 232 3.60142e+020
+288 83 3.58546e+020
+237 393 3.58036e+020
+356 314 3.53506e+020
+142 312 3.47301e+020
+162 362 3.39158e+020
+327 386 3.38457e+020
+207 167 3.36059e+020
+335 264 3.19213e+020
+182 325 3.17593e+020
+546 37 3.12541e+020
+214 251 3.10957e+020
+203 378 3.00073e+020
+409 178 2.84495e+020
+316 213 2.81093e+020
+161 271 2.74307e+020
+193 199 2.72607e+020
+255 357 2.6459e+020
+286 284 2.63015e+020
+245 180 2.5594e+020
+364 195 2.54112e+020
+226 129 2.50958e+020
+383 245 2.46111e+020
+343 146 2.19761e+020
+128 346 2.12223e+020
+295 163 2.08299e+020
+277 409 2.0065e+020
+276 112 1.8858e+020
+629 239 1.26745e+020
+371 366 1.10409e+020
+319 98 1.03411e+020
+461 21 8.45716e+019
+423 228 8.37047e+019
+32 377 8.04471e+019
+191 1 7.436e+019
+633 322 6.54073e+019
+397 296 6.27462e+019
+384 131 5.61881e+019
+60 390 5.33089e+019
+203 70 4.71153e+019
+605 169 4.4176e+019
+447 163 3.7324e+019
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_7_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_7_5.txt
new file mode 100644
index 0000000..92c134d
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_7_5.txt
@@ -0,0 +1,71 @@
+70
+239 99 5.984e+021
+420 149 5.97572e+021
+308 133 5.49516e+021
+289 83 5.47493e+021
+356 116 5.43812e+021
+386 328 5.43155e+021
+175 238 5.39891e+021
+375 165 5.34479e+021
+207 167 5.32791e+021
+348 233 5.28181e+021
+412 259 5.15667e+021
+438 192 5.15011e+021
+248 271 5.13909e+021
+328 183 5.09583e+021
+299 251 5.06266e+021
+258 149 5.05461e+021
+368 283 5.04685e+021
+269 323 4.99376e+021
+395 215 4.95168e+021
+307 335 4.76911e+021
+319 302 4.75386e+021
+142 312 4.7004e+021
+203 378 4.69584e+021
+278 200 4.68588e+021
+340 353 4.66863e+021
+328 386 4.6406e+021
+356 314 4.5991e+021
+290 375 4.57665e+021
+196 291 4.571e+021
+227 219 4.54986e+021
+161 271 4.5363e+021
+182 325 4.51413e+021
+214 251 4.4815e+021
+217 344 4.47315e+021
+226 129 4.4342e+021
+193 199 4.39066e+021
+235 304 4.36474e+021
+316 213 4.33611e+021
+336 264 4.30232e+021
+359 399 4.28893e+021
+309 422 4.26441e+021
+266 232 4.21028e+021
+256 356 4.1795e+021
+286 283 4.13228e+021
+245 180 4.10686e+021
+277 408 4.05738e+021
+364 195 3.95188e+021
+383 245 3.8241e+021
+237 393 3.80616e+021
+409 178 3.74096e+021
+296 163 3.6783e+021
+162 361 3.63936e+021
+127 346 3.62448e+021
+371 366 3.54818e+021
+276 112 3.5254e+021
+344 146 3.45907e+021
+319 98 3.31506e+021
+424 228 3.2439e+021
+398 296 3.0332e+021
+385 131 2.83682e+021
+448 163 2.73734e+021
+546 37 2.42092e+021
+628 239 1.86675e+021
+32 377 1.3972e+021
+461 21 1.13869e+021
+598 174 1.06984e+021
+60 390 8.84449e+020
+633 322 6.71281e+020
+199 8 5.50081e+020
+203 70 4.20677e+020
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.10_7_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.10_7_7.txt
new file mode 100644
index 0000000..30b926f
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.10_7_7.txt
@@ -0,0 +1,71 @@
+70
+421 149 1.83423e+022
+258 147 1.82278e+022
+248 268 1.80787e+022
+298 248 1.80556e+022
+227 216 1.79356e+022
+278 198 1.79056e+022
+308 130 1.78633e+022
+356 117 1.78303e+022
+347 230 1.77613e+022
+367 280 1.77594e+022
+319 300 1.76461e+022
+195 288 1.7578e+022
+268 320 1.75696e+022
+327 180 1.75535e+022
+339 350 1.74244e+022
+394 211 1.73633e+022
+289 84 1.72522e+022
+375 163 1.72431e+022
+239 100 1.69799e+022
+208 168 1.68749e+022
+289 372 1.67155e+022
+217 342 1.65504e+022
+412 258 1.5653e+022
+437 191 1.55946e+022
+386 327 1.51382e+022
+175 239 1.48441e+022
+334 264 1.4618e+022
+226 129 1.45533e+022
+305 335 1.44848e+022
+233 304 1.44663e+022
+204 378 1.42671e+022
+354 314 1.42597e+022
+212 252 1.42088e+022
+284 284 1.4152e+022
+264 232 1.41177e+022
+326 386 1.40605e+022
+161 271 1.40289e+022
+180 325 1.39795e+022
+254 357 1.3786e+022
+358 398 1.36439e+022
+314 213 1.35398e+022
+194 198 1.34605e+022
+382 245 1.34492e+022
+278 408 1.33864e+022
+142 312 1.32319e+022
+243 181 1.32021e+022
+408 178 1.31996e+022
+362 195 1.28844e+022
+294 163 1.28252e+022
+309 421 1.27755e+022
+370 366 1.25618e+022
+342 146 1.25243e+022
+274 113 1.24182e+022
+423 228 1.22152e+022
+397 296 1.19633e+022
+236 392 1.16936e+022
+318 98 1.1559e+022
+128 346 1.15356e+022
+384 131 1.1196e+022
+448 163 1.10162e+022
+161 361 1.05246e+022
+609 239 6.55309e+021
+547 38 6.5376e+021
+599 174 5.16664e+021
+32 378 4.74237e+021
+461 20 3.33553e+021
+61 390 2.74411e+021
+199 8 1.99159e+021
+632 322 1.3611e+021
+203 69 1.10386e+021
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_3_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_3_3.txt
new file mode 100644
index 0000000..af4f9d7
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_3_3.txt
@@ -0,0 +1,65 @@
+64
+386 328 3.5463e+011
+258 149 3.51167e+011
+234 304 3.47364e+011
+319 302 3.384e+011
+249 268 3.38226e+011
+227 218 3.34698e+011
+394 214 3.22959e+011
+327 182 3.16139e+011
+265 232 3.14293e+011
+291 372 3.08687e+011
+269 320 3.0833e+011
+438 193 3.01853e+011
+195 290 2.96369e+011
+367 282 2.93169e+011
+278 200 2.91895e+011
+347 232 2.76456e+011
+335 264 2.72157e+011
+193 199 2.70334e+011
+375 165 2.67899e+011
+359 400 2.62313e+011
+420 148 2.53365e+011
+239 99 2.51756e+011
+298 250 2.45817e+011
+237 393 2.44427e+011
+338 349 2.42334e+011
+355 116 2.36837e+011
+412 259 2.33947e+011
+285 284 2.29098e+011
+327 386 2.26075e+011
+308 132 2.25893e+011
+175 238 2.2559e+011
+162 362 2.24611e+011
+255 357 2.23675e+011
+409 178 2.22762e+011
+356 314 2.12213e+011
+216 343 1.96832e+011
+142 312 1.95174e+011
+288 83 1.93387e+011
+307 335 1.83794e+011
+277 409 1.829e+011
+343 146 1.7853e+011
+546 37 1.74443e+011
+309 422 1.72377e+011
+383 245 1.68909e+011
+295 163 1.645e+011
+207 166 1.57922e+011
+182 325 1.4998e+011
+203 378 1.45968e+011
+316 213 1.30446e+011
+275 113 1.23306e+011
+364 195 1.20101e+011
+243 181 1.17964e+011
+629 240 1.13303e+011
+210 252 1.12927e+011
+127 346 1.03658e+011
+160 272 9.12322e+010
+226 129 7.40224e+010
+461 21 4.0602e+010
+319 98 2.49942e+010
+60 390 2.40932e+010
+32 377 2.23172e+010
+74 350 2.1243e+010
+633 324 2.05459e+010
+203 71 1.91533e+010
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_3_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_3_5.txt
new file mode 100644
index 0000000..bd6c962
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_3_5.txt
@@ -0,0 +1,69 @@
+68
+239 99 2.93226e+012
+268 320 2.87685e+012
+195 288 2.86915e+012
+420 149 2.83812e+012
+248 268 2.79537e+012
+227 216 2.7921e+012
+298 248 2.75815e+012
+339 350 2.70173e+012
+175 238 2.67869e+012
+207 167 2.66027e+012
+308 133 2.6591e+012
+258 147 2.65663e+012
+289 372 2.60932e+012
+367 280 2.59697e+012
+348 233 2.59575e+012
+386 328 2.59128e+012
+307 335 2.58778e+012
+327 386 2.52289e+012
+374 162 2.51834e+012
+278 198 2.48787e+012
+319 300 2.48268e+012
+356 314 2.47375e+012
+216 342 2.46241e+012
+182 325 2.45093e+012
+289 83 2.43685e+012
+412 259 2.41362e+012
+234 304 2.4129e+012
+203 378 2.40738e+012
+328 183 2.38493e+012
+355 116 2.38141e+012
+394 212 2.35577e+012
+142 312 2.33601e+012
+214 251 2.29493e+012
+161 271 2.29127e+012
+193 199 2.24554e+012
+336 264 2.24463e+012
+316 213 2.21533e+012
+437 192 2.21442e+012
+265 232 2.21017e+012
+226 129 2.15794e+012
+286 283 2.10511e+012
+277 409 2.08253e+012
+245 180 2.07182e+012
+256 356 2.04061e+012
+309 422 2.00702e+012
+364 195 1.97269e+012
+409 178 1.95278e+012
+358 399 1.93737e+012
+383 245 1.93036e+012
+127 346 1.83048e+012
+296 163 1.82024e+012
+344 146 1.76684e+012
+237 393 1.75305e+012
+162 362 1.61334e+012
+276 112 1.59611e+012
+371 366 1.56434e+012
+424 228 1.41341e+012
+319 98 1.37102e+012
+398 296 1.2869e+012
+385 131 1.14294e+012
+628 239 1.03525e+012
+448 163 1.01905e+012
+546 37 9.06643e+011
+32 377 5.53812e+011
+461 21 5.02304e+011
+60 390 4.09037e+011
+605 169 3.27526e+011
+199 8 1.71311e+011
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_3_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_3_7.txt
new file mode 100644
index 0000000..934f5aa
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_3_7.txt
@@ -0,0 +1,68 @@
+67
+248 268 8.68835e+012
+195 288 8.48232e+012
+269 320 8.45512e+012
+298 248 8.40441e+012
+227 216 8.34179e+012
+339 350 8.29759e+012
+367 279 8.28753e+012
+278 197 8.17397e+012
+258 146 8.15208e+012
+347 229 8.1382e+012
+319 299 8.1294e+012
+290 372 8.10581e+012
+394 211 8.0441e+012
+217 341 8.04313e+012
+327 179 7.95115e+012
+308 130 7.89535e+012
+375 162 7.83805e+012
+421 150 7.48424e+012
+208 168 7.33085e+012
+239 100 7.09311e+012
+356 117 7.07712e+012
+233 304 7.03258e+012
+289 84 7.03037e+012
+306 335 6.91096e+012
+212 251 6.69701e+012
+334 264 6.61423e+012
+180 325 6.60863e+012
+326 386 6.59346e+012
+285 283 6.58115e+012
+355 314 6.55713e+012
+264 232 6.54201e+012
+176 239 6.26552e+012
+204 378 6.24941e+012
+161 271 6.14024e+012
+226 129 6.08687e+012
+254 357 6.08034e+012
+412 258 6.0459e+012
+437 191 5.95316e+012
+386 327 5.8782e+012
+314 213 5.85305e+012
+278 408 5.83383e+012
+244 180 5.81277e+012
+408 178 5.78317e+012
+382 245 5.68994e+012
+142 313 5.65222e+012
+194 198 5.64071e+012
+358 398 5.59207e+012
+362 195 5.4141e+012
+342 145 5.29887e+012
+294 163 5.28337e+012
+274 113 5.13792e+012
+309 421 5.02052e+012
+370 366 4.94374e+012
+236 392 4.86849e+012
+128 346 4.86031e+012
+397 296 4.72451e+012
+423 228 4.54928e+012
+161 361 4.31896e+012
+318 98 4.2111e+012
+384 131 4.02437e+012
+609 240 3.57767e+012
+546 38 2.08385e+012
+599 174 1.7932e+012
+32 378 1.61024e+012
+460 20 1.28973e+012
+61 390 1.07905e+012
+199 8 5.63108e+011
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_5_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_5_3.txt
new file mode 100644
index 0000000..097178d
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_5_3.txt
@@ -0,0 +1,64 @@
+63
+258 149 1.08053e+016
+386 328 1.01549e+016
+319 302 9.66662e+015
+227 218 9.62447e+015
+375 165 9.29288e+015
+394 214 8.71878e+015
+327 182 8.54457e+015
+195 290 8.48819e+015
+278 200 8.24548e+015
+308 132 8.23162e+015
+249 268 8.17737e+015
+270 320 8.01277e+015
+291 372 8.01195e+015
+366 278 7.7211e+015
+438 193 7.07253e+015
+298 250 7.03657e+015
+239 99 6.87792e+015
+338 349 6.83734e+015
+347 232 6.7889e+015
+412 259 6.57523e+015
+234 304 6.50327e+015
+175 238 6.39944e+015
+359 400 6.1516e+015
+216 343 5.87679e+015
+546 37 5.80682e+015
+162 362 5.70425e+015
+237 393 5.51408e+015
+309 422 5.50391e+015
+265 232 5.41495e+015
+420 149 5.33772e+015
+328 386 5.31874e+015
+142 312 5.28294e+015
+356 314 5.13367e+015
+307 335 5.11208e+015
+182 325 4.5523e+015
+356 117 4.47606e+015
+316 213 3.88777e+015
+289 84 3.8694e+015
+335 264 3.79322e+015
+214 251 3.7077e+015
+407 180 3.59821e+015
+381 247 3.41752e+015
+364 195 3.35795e+015
+161 271 3.35406e+015
+207 167 3.25606e+015
+226 129 3.15705e+015
+128 346 3.11224e+015
+204 378 3.00319e+015
+246 180 2.84375e+015
+285 284 2.7645e+015
+278 408 2.58083e+015
+194 199 2.45711e+015
+254 357 2.36315e+015
+293 165 2.21289e+015
+342 146 1.78252e+015
+273 115 1.63569e+015
+629 240 1.63406e+015
+461 21 1.27546e+015
+633 323 9.71405e+014
+32 377 8.33124e+014
+203 70 7.33001e+014
+605 169 6.12128e+014
+60 390 5.57311e+014
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_5_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_5_5.txt
new file mode 100644
index 0000000..50524d7
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_5_5.txt
@@ -0,0 +1,71 @@
+70
+239 99 9.96406e+016
+420 149 9.60741e+016
+386 328 9.30035e+016
+308 133 9.17499e+016
+175 238 9.06474e+016
+348 233 8.96542e+016
+375 165 8.83112e+016
+248 271 8.76466e+016
+289 83 8.74593e+016
+412 259 8.69842e+016
+269 323 8.60806e+016
+368 283 8.56046e+016
+356 116 8.55502e+016
+207 167 8.54659e+016
+328 183 8.51488e+016
+299 251 8.37712e+016
+227 216 8.34142e+016
+307 335 8.29065e+016
+258 147 8.27679e+016
+195 288 8.22491e+016
+395 215 8.21699e+016
+437 192 8.02302e+016
+328 386 8.01512e+016
+339 350 7.92594e+016
+356 314 7.90166e+016
+290 375 7.89188e+016
+278 198 7.88792e+016
+142 312 7.87653e+016
+319 300 7.8444e+016
+182 325 7.81813e+016
+203 378 7.67915e+016
+214 251 7.59112e+016
+217 344 7.57052e+016
+234 304 7.55183e+016
+161 271 7.49896e+016
+309 422 7.23782e+016
+316 213 7.21349e+016
+226 129 7.12401e+016
+265 232 7.11215e+016
+336 264 7.05295e+016
+193 199 6.96655e+016
+358 399 6.90819e+016
+256 356 6.85055e+016
+286 283 6.81884e+016
+245 180 6.72161e+016
+364 195 6.51367e+016
+409 178 6.25632e+016
+383 245 6.25429e+016
+277 408 6.2029e+016
+237 393 6.14075e+016
+127 346 5.83703e+016
+162 362 5.83636e+016
+295 163 5.7977e+016
+276 112 5.48481e+016
+343 146 5.47817e+016
+371 366 4.98147e+016
+319 98 4.46748e+016
+424 228 4.24483e+016
+398 296 3.86532e+016
+546 37 3.71256e+016
+385 131 3.25676e+016
+628 239 3.24236e+016
+448 163 3.11392e+016
+32 377 2.11945e+016
+461 21 1.86899e+016
+60 390 1.35468e+016
+605 169 1.11533e+016
+633 323 5.84749e+015
+198 8 5.73136e+015
+203 70 5.24745e+015
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_5_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_5_7.txt
new file mode 100644
index 0000000..fe58750
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_5_7.txt
@@ -0,0 +1,68 @@
+67
+248 268 3.04405e+017
+298 248 2.97829e+017
+227 216 2.97317e+017
+258 147 2.95531e+017
+195 288 2.93851e+017
+269 320 2.93661e+017
+278 197 2.92665e+017
+348 230 2.92605e+017
+368 280 2.91919e+017
+308 130 2.9145e+017
+339 350 2.89353e+017
+319 300 2.8884e+017
+394 211 2.88078e+017
+327 179 2.84793e+017
+421 150 2.84279e+017
+290 372 2.81563e+017
+375 163 2.81463e+017
+217 342 2.80038e+017
+356 117 2.77214e+017
+289 84 2.69416e+017
+208 168 2.68905e+017
+239 100 2.63341e+017
+306 335 2.38966e+017
+412 258 2.38094e+017
+437 191 2.3701e+017
+233 304 2.3571e+017
+176 239 2.32548e+017
+355 314 2.30739e+017
+386 327 2.28824e+017
+327 386 2.28095e+017
+204 378 2.2693e+017
+180 325 2.2677e+017
+213 251 2.24701e+017
+334 264 2.24101e+017
+264 232 2.24049e+017
+226 129 2.23941e+017
+285 283 2.22344e+017
+161 271 2.20818e+017
+256 356 2.18495e+017
+358 398 2.13088e+017
+278 408 2.11349e+017
+315 213 2.09315e+017
+142 312 2.06286e+017
+194 198 2.0627e+017
+244 180 2.05959e+017
+382 245 2.05689e+017
+408 178 2.0294e+017
+363 195 1.96697e+017
+309 421 1.95409e+017
+294 163 1.90975e+017
+342 146 1.84489e+017
+236 392 1.84446e+017
+274 113 1.83916e+017
+370 366 1.82098e+017
+128 346 1.79629e+017
+397 296 1.725e+017
+423 228 1.70641e+017
+161 361 1.65137e+017
+318 98 1.61111e+017
+384 131 1.52275e+017
+628 238 9.84674e+016
+546 38 8.35296e+016
+32 377 6.67409e+016
+599 174 5.89169e+016
+460 20 5.12327e+016
+61 390 4.0839e+016
+198 8 2.25394e+016
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_7_3.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_7_3.txt
new file mode 100644
index 0000000..5d63eea
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_7_3.txt
@@ -0,0 +1,63 @@
+62
+258 149 3.41339e+020
+375 165 3.24724e+020
+227 218 3.01628e+020
+319 302 2.98794e+020
+308 132 2.95345e+020
+386 328 2.84631e+020
+195 290 2.70447e+020
+366 278 2.69378e+020
+278 199 2.68662e+020
+248 270 2.68213e+020
+393 210 2.66833e+020
+269 323 2.61469e+020
+327 181 2.51525e+020
+290 375 2.41856e+020
+299 251 2.40373e+020
+348 233 2.36911e+020
+340 353 2.33811e+020
+217 344 1.941e+020
+546 37 1.91657e+020
+412 258 1.9024e+020
+438 192 1.75221e+020
+356 117 1.70438e+020
+309 422 1.62933e+020
+239 99 1.5705e+020
+289 84 1.56372e+020
+175 238 1.52881e+020
+328 386 1.45693e+020
+381 247 1.42384e+020
+407 180 1.40151e+020
+263 234 1.40028e+020
+232 306 1.36569e+020
+359 400 1.30703e+020
+179 327 1.29923e+020
+354 317 1.29874e+020
+162 362 1.29243e+020
+142 312 1.2751e+020
+284 286 1.23512e+020
+307 335 1.14261e+020
+420 149 1.12746e+020
+237 393 1.11778e+020
+204 378 1.10385e+020
+243 183 1.0854e+020
+313 215 1.03777e+020
+214 251 1.00222e+020
+161 271 9.79134e+019
+293 165 9.75434e+019
+361 197 9.69778e+019
+128 346 9.36911e+019
+226 129 9.19815e+019
+278 408 9.19308e+019
+208 168 8.44465e+019
+333 266 7.74082e+019
+253 358 7.61414e+019
+273 115 7.56721e+019
+341 147 5.95224e+019
+633 322 4.28981e+019
+628 239 3.88409e+019
+461 21 3.68861e+019
+32 378 3.13099e+019
+203 70 2.86143e+019
+195 198 2.84306e+019
+605 169 2.63993e+019
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_7_5.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_7_5.txt
new file mode 100644
index 0000000..15dd0c6
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_7_5.txt
@@ -0,0 +1,71 @@
+70
+239 99 3.71252e+021
+420 149 3.61786e+021
+386 328 3.58925e+021
+308 133 3.57349e+021
+375 165 3.5376e+021
+348 233 3.49753e+021
+328 183 3.39386e+021
+289 83 3.38856e+021
+412 259 3.37905e+021
+356 117 3.36785e+021
+299 251 3.35779e+021
+368 283 3.35377e+021
+175 238 3.34101e+021
+248 271 3.32244e+021
+269 323 3.31452e+021
+395 215 3.29899e+021
+258 149 3.23025e+021
+438 192 3.16031e+021
+340 353 3.10233e+021
+279 201 3.09057e+021
+207 167 3.08123e+021
+319 302 3.0259e+021
+290 375 3.01877e+021
+196 291 2.99299e+021
+217 344 2.97489e+021
+307 335 2.9653e+021
+228 219 2.95051e+021
+142 312 2.90001e+021
+328 386 2.8995e+021
+356 314 2.87762e+021
+214 251 2.81724e+021
+309 422 2.81319e+021
+182 325 2.79467e+021
+161 271 2.72604e+021
+203 378 2.71948e+021
+358 399 2.70928e+021
+234 304 2.6838e+021
+226 129 2.62796e+021
+316 213 2.61993e+021
+256 356 2.60382e+021
+265 232 2.55512e+021
+286 283 2.54147e+021
+335 264 2.48577e+021
+245 180 2.4827e+021
+364 195 2.37522e+021
+237 393 2.33855e+021
+193 199 2.26822e+021
+162 362 2.23852e+021
+409 178 2.22872e+021
+278 408 2.22397e+021
+383 245 2.20495e+021
+128 346 2.14528e+021
+276 112 2.11147e+021
+296 162 2.06785e+021
+344 145 2.00911e+021
+371 366 1.67165e+021
+546 37 1.53789e+021
+319 98 1.5116e+021
+423 228 1.35242e+021
+398 296 1.22806e+021
+628 239 1.1877e+021
+384 131 1.00937e+021
+448 163 9.79355e+020
+32 377 9.02411e+020
+461 21 7.31378e+020
+60 390 4.81989e+020
+605 169 4.77028e+020
+633 323 3.18042e+020
+203 70 2.51781e+020
+198 8 2.02865e+020
diff --git a/test_data/harriscorners/hc_fsc_30.00_0.15_7_7.txt b/test_data/harriscorners/hc_fsc_30.00_0.15_7_7.txt
new file mode 100644
index 0000000..9d18dd4
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_30.00_0.15_7_7.txt
@@ -0,0 +1,70 @@
+69
+421 149 1.21643e+022
+248 268 1.19386e+022
+258 147 1.19e+022
+299 249 1.17941e+022
+356 117 1.17926e+022
+227 216 1.17904e+022
+308 130 1.17079e+022
+348 230 1.1631e+022
+278 197 1.16239e+022
+319 300 1.15722e+022
+368 280 1.153e+022
+268 320 1.15241e+022
+195 288 1.15007e+022
+394 211 1.14332e+022
+327 180 1.13915e+022
+339 350 1.1374e+022
+289 84 1.13661e+022
+375 163 1.12556e+022
+208 168 1.10954e+022
+290 372 1.0995e+022
+217 342 1.09654e+022
+239 100 1.08876e+022
+437 191 1.03591e+022
+412 258 1.0345e+022
+386 327 9.84076e+021
+176 239 9.57959e+021
+306 335 9.33573e+021
+226 129 9.16055e+021
+204 378 9.12738e+021
+355 314 9.1172e+021
+233 304 9.04719e+021
+327 386 9.04265e+021
+358 398 9.03813e+021
+335 264 8.92028e+021
+181 325 8.90864e+021
+213 251 8.89592e+021
+161 271 8.86926e+021
+256 356 8.85062e+021
+285 284 8.77812e+021
+264 232 8.74882e+021
+142 312 8.52967e+021
+315 213 8.49531e+021
+278 408 8.48246e+021
+194 198 8.46142e+021
+246 180 8.46089e+021
+309 421 8.37885e+021
+382 245 8.25484e+021
+408 178 8.09241e+021
+363 195 7.99555e+021
+296 162 7.8729e+021
+236 392 7.76956e+021
+276 112 7.59036e+021
+344 145 7.47238e+021
+370 366 7.39996e+021
+128 346 7.30442e+021
+161 361 6.97972e+021
+397 296 6.97771e+021
+423 228 6.95101e+021
+318 98 6.70278e+021
+384 131 6.25683e+021
+448 163 6.00543e+021
+628 238 3.85072e+021
+546 38 3.6088e+021
+32 377 3.11025e+021
+460 20 2.20716e+021
+599 174 2.06492e+021
+61 390 1.6742e+021
+198 8 9.54686e+020
+632 323 6.2014e+020
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_3_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_3_3.txt
new file mode 100644
index 0000000..7b24586
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_3_3.txt
@@ -0,0 +1,84 @@
+83
+193 199 9.2637e+011
+234 304 9.09528e+011
+327 387 8.82552e+011
+160 272 8.69034e+011
+335 264 8.67667e+011
+265 232 8.64265e+011
+420 148 8.64e+011
+255 357 8.43996e+011
+225 130 8.25407e+011
+277 409 8.17461e+011
+203 379 8.15396e+011
+285 284 8.12161e+011
+207 166 7.9013e+011
+386 328 7.88009e+011
+355 315 7.87369e+011
+438 193 7.84907e+011
+295 163 7.83566e+011
+355 116 7.76582e+011
+249 268 7.60458e+011
+258 149 7.42723e+011
+394 214 7.41334e+011
+327 182 7.33874e+011
+409 178 7.33773e+011
+209 252 7.20508e+011
+319 302 7.17451e+011
+343 146 7.12643e+011
+227 218 7.09407e+011
+413 259 7.05167e+011
+245 181 7.00102e+011
+347 232 6.99443e+011
+359 400 6.98424e+011
+288 83 6.97956e+011
+275 113 6.96411e+011
+302 336 6.95884e+011
+383 245 6.90528e+011
+278 200 6.89492e+011
+367 282 6.84523e+011
+291 372 6.81098e+011
+237 393 6.81093e+011
+239 98 6.76557e+011
+175 237 6.72564e+011
+196 288 6.62199e+011
+269 320 6.60679e+011
+308 132 6.52207e+011
+127 347 6.48588e+011
+181 325 6.19817e+011
+315 213 6.13043e+011
+142 311 6.00834e+011
+375 165 5.9975e+011
+299 248 5.77978e+011
+338 350 5.69661e+011
+240 181 5.60121e+011
+162 362 5.55089e+011
+216 344 5.42916e+011
+363 195 5.42011e+011
+310 422 5.29508e+011
+608 240 5.06536e+011
+449 162 4.50714e+011
+546 37 4.24742e+011
+399 295 4.18076e+011
+386 130 3.98535e+011
+372 366 3.95913e+011
+320 98 3.83848e+011
+378 246 3.71715e+011
+424 227 3.33328e+011
+629 240 3.23141e+011
+290 164 3.1637e+011
+602 170 1.45361e+011
+59 391 1.32337e+011
+598 173 1.17203e+011
+461 22 1.13642e+011
+33 377 1.13083e+011
+534 42 1.12569e+011
+445 31 8.93609e+010
+200 8 8.66138e+010
+634 323 8.59606e+010
+609 171 7.46826e+010
+540 29 5.92976e+010
+274 478 5.56231e+010
+203 70 5.15149e+010
+33 382 4.91205e+010
+618 174 4.84058e+010
+74 350 4.67664e+010
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_3_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_3_5.txt
new file mode 100644
index 0000000..3a98088
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_3_5.txt
@@ -0,0 +1,98 @@
+97
+420 149 6.30483e+012
+239 99 6.29582e+012
+247 268 6.24305e+012
+195 288 6.13067e+012
+268 320 6.12932e+012
+207 167 5.95926e+012
+298 248 5.9368e+012
+227 216 5.92047e+012
+308 133 5.87985e+012
+289 372 5.86352e+012
+339 350 5.83181e+012
+367 280 5.8085e+012
+258 147 5.74835e+012
+175 238 5.74223e+012
+374 162 5.71748e+012
+307 335 5.62873e+012
+347 230 5.60197e+012
+386 328 5.56045e+012
+216 342 5.54029e+012
+278 198 5.52891e+012
+327 386 5.42977e+012
+203 378 5.42142e+012
+288 83 5.3978e+012
+193 199 5.36408e+012
+182 325 5.36402e+012
+356 314 5.33816e+012
+319 300 5.32739e+012
+235 304 5.32558e+012
+355 116 5.31084e+012
+336 264 5.2938e+012
+438 192 5.26842e+012
+327 180 5.2553e+012
+394 212 5.12581e+012
+161 272 5.12406e+012
+225 129 5.12317e+012
+412 259 5.1158e+012
+277 409 5.09321e+012
+286 284 5.07578e+012
+142 312 5.04181e+012
+214 251 4.96803e+012
+266 232 4.95664e+012
+316 213 4.93937e+012
+256 357 4.85184e+012
+245 180 4.58517e+012
+229 305 4.56171e+012
+359 399 4.55175e+012
+296 163 4.52605e+012
+383 245 4.48237e+012
+409 178 4.43294e+012
+364 195 4.42132e+012
+344 146 4.35282e+012
+330 265 4.28205e+012
+309 422 4.26507e+012
+237 392 4.25788e+012
+260 233 4.1843e+012
+281 285 4.13775e+012
+127 346 4.11327e+012
+608 239 4.11009e+012
+301 336 4.07876e+012
+276 113 4.05007e+012
+208 252 4.04135e+012
+371 366 4.02276e+012
+250 358 3.97158e+012
+350 315 3.91591e+012
+322 388 3.90815e+012
+239 181 3.89865e+012
+424 228 3.77996e+012
+310 214 3.72799e+012
+162 361 3.70266e+012
+338 147 3.68572e+012
+398 295 3.64727e+012
+270 114 3.64205e+012
+290 164 3.62828e+012
+319 98 3.59227e+012
+404 179 3.56357e+012
+176 326 3.53723e+012
+378 246 3.45047e+012
+385 131 3.43194e+012
+358 196 3.41622e+012
+448 162 3.23216e+012
+546 37 2.60179e+012
+628 239 2.24287e+012
+598 174 1.45013e+012
+32 377 1.20928e+012
+461 21 1.05912e+012
+60 390 9.36681e+011
+445 31 9.13381e+011
+602 170 8.62147e+011
+618 174 7.30519e+011
+199 8 7.03236e+011
+537 45 6.966e+011
+634 322 6.08736e+011
+609 170 5.34571e+011
+540 29 4.10544e+011
+203 70 3.94772e+011
+454 23 3.73909e+011
+39 372 3.49613e+011
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_3_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_3_7.txt
new file mode 100644
index 0000000..d3cf251
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_3_7.txt
@@ -0,0 +1,83 @@
+82
+248 268 1.87908e+013
+195 288 1.84493e+013
+298 248 1.83784e+013
+367 279 1.82967e+013
+268 320 1.82014e+013
+227 216 1.81487e+013
+258 147 1.80749e+013
+339 350 1.80155e+013
+278 197 1.7928e+013
+347 229 1.78843e+013
+308 130 1.75619e+013
+289 371 1.75313e+013
+374 162 1.74798e+013
+394 211 1.74525e+013
+319 299 1.74414e+013
+327 179 1.73845e+013
+216 341 1.73451e+013
+232 305 1.6197e+013
+305 335 1.61725e+013
+421 150 1.58082e+013
+354 314 1.56539e+013
+212 251 1.55921e+013
+284 284 1.55769e+013
+333 264 1.55524e+013
+208 168 1.54429e+013
+239 100 1.52484e+013
+325 387 1.51867e+013
+263 233 1.51833e+013
+356 117 1.49416e+013
+289 84 1.48307e+013
+180 325 1.4813e+013
+243 181 1.44369e+013
+254 357 1.43933e+013
+407 178 1.40154e+013
+313 213 1.39748e+013
+381 245 1.37664e+013
+175 239 1.37644e+013
+204 378 1.34537e+013
+386 327 1.34062e+013
+412 258 1.33845e+013
+161 271 1.33285e+013
+226 129 1.32466e+013
+361 195 1.31853e+013
+341 146 1.30429e+013
+437 191 1.30403e+013
+293 163 1.29859e+013
+273 113 1.29434e+013
+278 408 1.26728e+013
+142 313 1.25758e+013
+194 199 1.2574e+013
+358 398 1.20319e+013
+370 366 1.17395e+013
+249 358 1.1643e+013
+207 253 1.13426e+013
+309 421 1.12996e+013
+397 296 1.10686e+013
+423 228 1.0949e+013
+128 346 1.05324e+013
+237 391 1.04227e+013
+318 98 1.015e+013
+609 239 9.97081e+012
+384 131 9.94259e+012
+448 163 9.86564e+012
+162 360 9.38448e+012
+547 38 6.71251e+012
+628 238 6.27403e+012
+599 174 5.32455e+012
+32 378 3.60313e+012
+604 169 2.74492e+012
+460 20 2.72419e+012
+617 175 2.49147e+012
+61 390 2.39475e+012
+445 32 2.17261e+012
+535 43 1.86019e+012
+199 8 1.71654e+012
+633 322 1.55388e+012
+38 373 1.14445e+012
+610 170 1.08892e+012
+203 69 1.00688e+012
+27 373 1.00668e+012
+454 23 1.00662e+012
+540 29 9.98629e+011
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_5_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_5_3.txt
new file mode 100644
index 0000000..d131243
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_5_3.txt
@@ -0,0 +1,89 @@
+88
+420 148 2.5474e+016
+386 328 2.48823e+016
+355 116 2.41246e+016
+193 199 2.40366e+016
+234 304 2.37577e+016
+258 149 2.36803e+016
+438 192 2.36412e+016
+265 232 2.27493e+016
+288 83 2.26334e+016
+394 214 2.25462e+016
+160 272 2.25409e+016
+239 99 2.24873e+016
+335 264 2.23492e+016
+207 166 2.23005e+016
+327 182 2.21446e+016
+327 386 2.18602e+016
+319 302 2.18555e+016
+412 259 2.17164e+016
+203 379 2.1626e+016
+278 200 2.15127e+016
+308 132 2.14405e+016
+277 409 2.14265e+016
+225 130 2.1346e+016
+286 284 2.11137e+016
+375 165 2.10792e+016
+255 357 2.10181e+016
+175 237 2.07472e+016
+227 218 2.06908e+016
+347 232 2.04878e+016
+359 400 2.03855e+016
+249 268 1.99292e+016
+367 282 1.98698e+016
+409 178 1.98621e+016
+237 393 1.97688e+016
+295 163 1.96886e+016
+181 325 1.9532e+016
+306 335 1.93484e+016
+195 291 1.93469e+016
+383 245 1.9206e+016
+291 372 1.90761e+016
+315 213 1.90072e+016
+355 314 1.87508e+016
+213 252 1.83891e+016
+270 320 1.82696e+016
+343 146 1.81396e+016
+298 251 1.81379e+016
+245 181 1.7993e+016
+142 311 1.79656e+016
+162 362 1.74074e+016
+275 113 1.73876e+016
+363 195 1.68968e+016
+127 347 1.67405e+016
+309 422 1.62451e+016
+340 353 1.62186e+016
+216 344 1.60684e+016
+240 181 1.42134e+016
+260 233 1.40163e+016
+546 37 1.33834e+016
+281 285 1.32355e+016
+310 214 1.28088e+016
+322 387 1.27714e+016
+398 295 1.25656e+016
+449 162 1.22946e+016
+372 366 1.20829e+016
+608 240 1.20715e+016
+404 179 1.19288e+016
+424 228 1.18928e+016
+320 98 1.17592e+016
+378 246 1.08813e+016
+385 130 1.05377e+016
+290 164 1.04339e+016
+270 113 1.00116e+016
+629 239 8.57294e+015
+461 22 3.72946e+015
+33 377 3.63357e+015
+598 173 3.56759e+015
+534 42 3.47792e+015
+602 170 3.37368e+015
+59 391 3.16533e+015
+634 323 3.00003e+015
+445 31 2.78964e+015
+199 8 2.47938e+015
+203 70 1.84788e+015
+638 311 1.77874e+015
+540 29 1.72551e+015
+33 382 1.67949e+015
+609 171 1.65743e+015
+618 174 1.32818e+015
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_5_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_5_5.txt
new file mode 100644
index 0000000..9f320aa
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_5_5.txt
@@ -0,0 +1,99 @@
+98
+420 149 2.22093e+017
+239 99 2.21221e+017
+207 167 2.049e+017
+175 238 2.01678e+017
+308 133 2.01089e+017
+289 83 1.96713e+017
+386 328 1.95944e+017
+355 116 1.95221e+017
+248 271 1.92265e+017
+375 165 1.90977e+017
+348 233 1.90144e+017
+438 192 1.8983e+017
+307 335 1.85877e+017
+258 149 1.85424e+017
+203 378 1.83932e+017
+412 259 1.83763e+017
+193 199 1.83063e+017
+269 323 1.82044e+017
+368 283 1.80919e+017
+227 219 1.80529e+017
+299 251 1.80191e+017
+195 289 1.79799e+017
+328 183 1.79584e+017
+328 386 1.78456e+017
+225 129 1.77759e+017
+278 200 1.77347e+017
+394 214 1.77299e+017
+142 312 1.76331e+017
+182 325 1.76256e+017
+356 314 1.75915e+017
+319 302 1.75493e+017
+336 264 1.74564e+017
+160 271 1.73565e+017
+339 350 1.73053e+017
+235 304 1.72679e+017
+289 372 1.71728e+017
+277 409 1.70148e+017
+214 251 1.68745e+017
+216 342 1.67507e+017
+316 213 1.67182e+017
+266 232 1.66083e+017
+286 284 1.64651e+017
+256 357 1.63266e+017
+359 399 1.62759e+017
+245 180 1.56172e+017
+296 163 1.53718e+017
+383 245 1.52935e+017
+309 422 1.52173e+017
+364 195 1.51897e+017
+409 178 1.47704e+017
+229 305 1.46163e+017
+237 392 1.45445e+017
+371 366 1.45217e+017
+344 146 1.44703e+017
+127 346 1.42405e+017
+330 265 1.40492e+017
+276 113 1.40411e+017
+424 228 1.38039e+017
+260 233 1.37408e+017
+301 336 1.35725e+017
+319 98 1.34201e+017
+162 361 1.34088e+017
+208 252 1.33909e+017
+281 285 1.32866e+017
+250 358 1.32433e+017
+398 295 1.30874e+017
+310 214 1.30233e+017
+239 181 1.27928e+017
+350 315 1.27644e+017
+322 388 1.26775e+017
+290 164 1.25917e+017
+338 147 1.25905e+017
+270 114 1.25776e+017
+385 131 1.24876e+017
+378 246 1.22159e+017
+404 179 1.21667e+017
+448 162 1.21613e+017
+176 326 1.2148e+017
+358 196 1.21424e+017
+608 239 1.1583e+017
+546 37 9.1076e+016
+628 239 7.09351e+016
+598 174 5.55276e+016
+32 377 4.63283e+016
+461 21 4.00366e+016
+60 390 3.39606e+016
+445 31 3.33143e+016
+601 169 2.82927e+016
+199 8 2.70364e+016
+634 322 2.69033e+016
+538 45 2.6501e+016
+618 174 2.54925e+016
+534 42 2.5238e+016
+203 70 1.52475e+016
+609 171 1.41351e+016
+454 23 1.35725e+016
+541 29 1.34052e+016
+39 372 1.31058e+016
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_5_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_5_7.txt
new file mode 100644
index 0000000..3f23bec
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_5_7.txt
@@ -0,0 +1,84 @@
+83
+248 268 6.5312e+017
+298 248 6.49243e+017
+258 147 6.48254e+017
+227 216 6.42183e+017
+278 198 6.41296e+017
+367 280 6.4053e+017
+195 288 6.3823e+017
+308 130 6.35422e+017
+347 230 6.34588e+017
+268 320 6.34124e+017
+339 350 6.296e+017
+319 300 6.27858e+017
+327 180 6.24114e+017
+394 211 6.20595e+017
+374 162 6.19737e+017
+289 372 6.08877e+017
+216 341 6.01174e+017
+421 150 5.99993e+017
+356 117 5.85957e+017
+239 100 5.76265e+017
+289 84 5.71268e+017
+208 168 5.70491e+017
+305 335 5.57795e+017
+232 305 5.46975e+017
+354 314 5.46333e+017
+334 264 5.46132e+017
+284 284 5.41732e+017
+212 251 5.37409e+017
+326 386 5.27463e+017
+263 232 5.23914e+017
+180 325 5.19434e+017
+175 239 5.16365e+017
+412 258 5.14507e+017
+243 181 5.13681e+017
+254 357 5.13598e+017
+386 327 5.08632e+017
+437 191 5.07521e+017
+381 245 5.04402e+017
+313 213 5.03348e+017
+407 178 4.99375e+017
+226 129 4.98929e+017
+204 378 4.96695e+017
+161 271 4.89208e+017
+361 196 4.81433e+017
+293 163 4.75846e+017
+273 113 4.71045e+017
+194 199 4.69539e+017
+341 146 4.6838e+017
+278 408 4.68161e+017
+142 313 4.62323e+017
+358 398 4.54072e+017
+370 366 4.44342e+017
+423 228 4.30213e+017
+309 421 4.28173e+017
+397 296 4.22516e+017
+249 358 4.12411e+017
+321 388 4.11351e+017
+318 98 4.01168e+017
+128 346 3.97492e+017
+384 131 3.94944e+017
+448 163 3.92125e+017
+236 392 3.88682e+017
+162 360 3.5913e+017
+609 239 3.10391e+017
+547 38 2.47452e+017
+628 238 2.08741e+017
+599 174 2.06151e+017
+32 378 1.50275e+017
+461 20 1.0819e+017
+604 169 1.04654e+017
+61 390 9.39135e+016
+617 175 8.99317e+016
+445 32 8.71105e+016
+538 44 7.7129e+016
+199 8 7.3456e+016
+633 322 7.18073e+016
+38 373 4.49398e+016
+454 23 4.13304e+016
+203 69 4.12448e+016
+552 40 4.0108e+016
+27 373 3.83708e+016
+610 170 3.51606e+016
+540 29 3.33278e+016
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_7_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_7_3.txt
new file mode 100644
index 0000000..de73653
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_7_3.txt
@@ -0,0 +1,94 @@
+93
+386 328 8.6055e+020
+420 148 8.55038e+020
+355 116 8.2885e+020
+239 99 8.27779e+020
+438 192 8.24684e+020
+258 149 8.19602e+020
+288 83 7.88083e+020
+375 165 7.82066e+020
+308 132 7.77139e+020
+394 214 7.71902e+020
+412 259 7.64481e+020
+327 182 7.57557e+020
+319 302 7.53271e+020
+193 199 7.47494e+020
+278 200 7.4689e+020
+175 238 7.36963e+020
+234 304 7.36182e+020
+207 166 7.28795e+020
+327 386 7.1269e+020
+265 232 7.09639e+020
+227 218 6.94629e+020
+335 264 6.8538e+020
+347 232 6.84094e+020
+248 271 6.83669e+020
+299 251 6.82387e+020
+203 379 6.69706e+020
+359 400 6.66735e+020
+367 282 6.6584e+020
+307 335 6.65627e+020
+160 272 6.64719e+020
+277 409 6.61314e+020
+195 291 6.60369e+020
+269 323 6.59946e+020
+286 284 6.58125e+020
+181 325 6.57578e+020
+237 393 6.53545e+020
+356 314 6.45439e+020
+225 130 6.42051e+020
+315 213 6.38769e+020
+255 357 6.31035e+020
+409 178 6.27365e+020
+340 353 6.22787e+020
+383 245 6.18342e+020
+291 372 6.13644e+020
+142 312 6.11051e+020
+295 163 5.99533e+020
+309 422 5.9742e+020
+162 362 5.91057e+020
+217 344 5.88609e+020
+245 180 5.79098e+020
+363 195 5.69338e+020
+213 251 5.65714e+020
+343 146 5.45679e+020
+275 113 5.28725e+020
+127 346 5.28252e+020
+546 37 4.57601e+020
+302 336 4.55733e+020
+371 366 4.44758e+020
+260 233 4.4194e+020
+424 228 4.36745e+020
+398 295 4.30265e+020
+319 98 4.23738e+020
+351 315 4.1883e+020
+240 181 4.14683e+020
+281 285 4.14203e+020
+310 214 3.95795e+020
+449 162 3.92796e+020
+385 131 3.78008e+020
+322 387 3.75664e+020
+404 179 3.74924e+020
+290 164 3.62142e+020
+378 246 3.58852e+020
+338 147 3.56667e+020
+250 358 3.47513e+020
+270 114 3.46378e+020
+358 196 3.41356e+020
+608 240 3.29071e+020
+629 239 2.71825e+020
+191 1 1.93727e+020
+32 377 1.44422e+020
+461 21 1.41794e+020
+598 174 1.218e+020
+534 42 1.19051e+020
+60 390 1.15862e+020
+634 322 1.14614e+020
+538 45 9.42488e+019
+445 31 9.18483e+019
+638 312 8.68921e+019
+601 169 8.64649e+019
+199 8 8.5779e+019
+203 70 6.93165e+019
+33 382 6.16306e+019
+540 29 5.32011e+019
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_7_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_7_5.txt
new file mode 100644
index 0000000..3b659af
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_7_5.txt
@@ -0,0 +1,99 @@
+98
+420 149 8.80514e+021
+239 99 8.70978e+021
+207 167 8.02392e+021
+289 83 7.97858e+021
+356 116 7.96314e+021
+175 238 7.86839e+021
+308 133 7.80115e+021
+386 328 7.64232e+021
+438 192 7.53786e+021
+375 165 7.51343e+021
+348 233 7.42294e+021
+248 271 7.31906e+021
+412 259 7.28982e+021
+258 149 7.24384e+021
+328 183 7.13819e+021
+299 251 7.10852e+021
+368 283 7.07856e+021
+203 378 7.06746e+021
+269 323 7.00885e+021
+193 199 6.93758e+021
+395 215 6.93491e+021
+225 129 6.9347e+021
+307 335 6.93367e+021
+278 200 6.8879e+021
+142 312 6.86087e+021
+319 302 6.8274e+021
+227 219 6.796e+021
+328 386 6.72991e+021
+161 271 6.70861e+021
+356 314 6.66487e+021
+182 325 6.57749e+021
+340 353 6.54817e+021
+336 264 6.52417e+021
+214 251 6.47861e+021
+196 291 6.46461e+021
+290 375 6.4461e+021
+359 399 6.44463e+021
+235 304 6.4187e+021
+316 213 6.39551e+021
+277 408 6.31511e+021
+266 232 6.29909e+021
+217 344 6.27107e+021
+256 356 6.07031e+021
+245 180 6.05584e+021
+286 284 6.0449e+021
+309 422 6.00588e+021
+364 195 5.84388e+021
+371 366 5.80003e+021
+296 163 5.78529e+021
+383 245 5.76709e+021
+237 392 5.68035e+021
+393 210 5.66245e+021
+424 228 5.57349e+021
+409 178 5.55565e+021
+127 346 5.53212e+021
+319 98 5.47922e+021
+229 305 5.4226e+021
+344 146 5.41224e+021
+162 361 5.36276e+021
+276 113 5.33318e+021
+330 265 5.32245e+021
+398 295 5.22444e+021
+260 233 5.1946e+021
+385 131 5.08652e+021
+301 336 5.08059e+021
+250 358 5.04356e+021
+310 214 5.0377e+021
+281 285 5.01754e+021
+208 252 5.00693e+021
+448 162 4.94979e+021
+290 164 4.91262e+021
+338 147 4.90261e+021
+270 114 4.89687e+021
+322 388 4.81781e+021
+239 181 4.79551e+021
+378 246 4.78261e+021
+351 315 4.76748e+021
+358 196 4.73159e+021
+404 179 4.72547e+021
+176 326 4.66251e+021
+608 239 3.87582e+021
+547 38 3.55573e+021
+628 239 2.68161e+021
+598 174 2.34466e+021
+32 377 1.99094e+021
+461 21 1.62747e+021
+60 390 1.3674e+021
+445 31 1.30973e+021
+634 322 1.20917e+021
+601 169 1.169e+021
+538 45 1.1413e+021
+199 8 1.11171e+021
+618 174 1.00794e+021
+534 42 9.71774e+020
+203 70 6.23351e+020
+454 23 5.48295e+020
+39 372 5.27231e+020
+541 29 4.71615e+020
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.04_7_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.04_7_7.txt
new file mode 100644
index 0000000..f17bffd
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.04_7_7.txt
@@ -0,0 +1,83 @@
+82
+258 147 2.58212e+022
+421 149 2.5756e+022
+298 248 2.55725e+022
+278 198 2.54535e+022
+248 268 2.54469e+022
+367 280 2.53391e+022
+227 216 2.53099e+022
+347 230 2.52823e+022
+308 130 2.52497e+022
+356 117 2.50755e+022
+327 180 2.49478e+022
+319 300 2.49348e+022
+195 288 2.48708e+022
+268 320 2.48242e+022
+339 350 2.46849e+022
+394 212 2.45883e+022
+375 163 2.44281e+022
+289 84 2.43155e+022
+239 100 2.42905e+022
+289 372 2.38308e+022
+208 168 2.38103e+022
+216 342 2.33929e+022
+412 258 2.20227e+022
+437 191 2.18772e+022
+334 264 2.1674e+022
+305 335 2.15894e+022
+354 315 2.15131e+022
+175 239 2.15075e+022
+386 327 2.1495e+022
+284 284 2.12991e+022
+232 305 2.11978e+022
+212 252 2.10716e+022
+226 129 2.10246e+022
+263 232 2.05785e+022
+326 386 2.05687e+022
+243 181 2.04808e+022
+204 378 2.04347e+022
+254 357 2.0348e+022
+381 245 2.03334e+022
+180 325 2.0283e+022
+313 214 2.02441e+022
+161 271 2.02206e+022
+407 178 2.00327e+022
+194 199 1.95961e+022
+361 196 1.95229e+022
+278 408 1.92712e+022
+293 163 1.92466e+022
+358 398 1.91708e+022
+142 313 1.90281e+022
+273 113 1.89571e+022
+341 146 1.88946e+022
+370 366 1.87559e+022
+423 228 1.85323e+022
+309 421 1.80516e+022
+397 296 1.79459e+022
+318 98 1.73865e+022
+384 131 1.7123e+022
+448 163 1.70291e+022
+321 388 1.66635e+022
+128 346 1.6613e+022
+236 392 1.64025e+022
+162 360 1.52496e+022
+609 239 1.15887e+022
+547 38 1.00758e+022
+599 174 8.8887e+021
+628 238 8.21654e+021
+32 378 6.78931e+021
+461 20 4.72527e+021
+604 169 4.55265e+021
+61 390 4.02801e+021
+617 175 3.81592e+021
+445 32 3.7669e+021
+538 44 3.43814e+021
+633 322 3.3526e+021
+199 8 3.32769e+021
+38 373 1.91487e+021
+454 23 1.83676e+021
+203 69 1.82738e+021
+543 42 1.68476e+021
+27 373 1.61207e+021
+552 40 1.59042e+021
+439 36 1.38598e+021
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_3_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_3_3.txt
new file mode 100644
index 0000000..055e7aa
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_3_3.txt
@@ -0,0 +1,80 @@
+79
+234 304 6.02893e+011
+193 199 5.68532e+011
+265 232 5.6428e+011
+386 328 5.5162e+011
+335 264 5.42843e+011
+420 148 5.30926e+011
+249 268 5.30149e+011
+258 149 5.29147e+011
+438 193 5.21423e+011
+394 214 5.1313e+011
+319 302 5.10696e+011
+327 182 5.06019e+011
+255 357 5.05639e+011
+227 218 5.0502e+011
+285 284 4.94127e+011
+355 116 4.82175e+011
+327 386 4.80608e+011
+291 372 4.77965e+011
+278 200 4.72621e+011
+277 409 4.71337e+011
+367 282 4.71057e+011
+347 232 4.68723e+011
+269 320 4.68489e+011
+196 288 4.61325e+011
+359 400 4.60545e+011
+409 178 4.5504e+011
+295 163 4.45894e+011
+207 166 4.45289e+011
+160 272 4.44778e+011
+237 393 4.42912e+011
+203 379 4.42264e+011
+412 259 4.39325e+011
+239 99 4.32781e+011
+355 315 4.26989e+011
+288 83 4.22737e+011
+343 146 4.21308e+011
+308 132 4.19672e+011
+375 165 4.1874e+011
+383 245 4.06009e+011
+225 130 3.99551e+011
+299 248 3.89275e+011
+338 349 3.87229e+011
+275 113 3.83808e+011
+175 238 3.79914e+011
+162 362 3.74828e+011
+209 252 3.67905e+011
+245 181 3.62105e+011
+306 335 3.5155e+011
+181 325 3.5143e+011
+127 347 3.42677e+011
+217 342 3.41873e+011
+315 213 3.31406e+011
+142 312 3.2732e+011
+309 423 3.25103e+011
+363 195 2.8975e+011
+546 37 2.88216e+011
+629 240 2.08684e+011
+240 181 2.03363e+011
+449 162 2.00268e+011
+608 240 1.97755e+011
+399 295 1.93681e+011
+386 130 1.86281e+011
+319 98 1.59518e+011
+372 366 1.53696e+011
+424 228 1.3773e+011
+190 1 1.16104e+011
+378 246 9.51273e+010
+250 358 7.84054e+010
+534 42 6.85932e+010
+461 21 6.62427e+010
+59 391 6.00462e+010
+33 377 5.79575e+010
+540 29 3.50071e+010
+633 323 3.45834e+010
+203 70 3.30473e+010
+199 8 3.30383e+010
+74 350 3.28445e+010
+602 170 3.25969e+010
+33 382 3.12507e+010
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_3_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_3_5.txt
new file mode 100644
index 0000000..a0e0cd8
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_3_5.txt
@@ -0,0 +1,97 @@
+96
+239 99 4.46115e+012
+420 149 4.4139e+012
+268 320 4.35525e+012
+195 288 4.35166e+012
+247 268 4.3471e+012
+227 216 4.21409e+012
+298 248 4.20299e+012
+207 167 4.15981e+012
+339 350 4.12449e+012
+308 133 4.12307e+012
+289 372 4.0885e+012
+175 238 4.07121e+012
+258 147 4.06196e+012
+367 280 4.05676e+012
+374 162 3.97249e+012
+307 335 3.97003e+012
+386 328 3.9409e+012
+348 233 3.92999e+012
+278 198 3.87016e+012
+216 342 3.86144e+012
+327 386 3.8442e+012
+203 378 3.7774e+012
+356 314 3.77576e+012
+319 300 3.77573e+012
+182 325 3.77506e+012
+288 83 3.76679e+012
+235 304 3.71644e+012
+355 116 3.71297e+012
+327 180 3.67559e+012
+193 199 3.66306e+012
+412 259 3.64188e+012
+336 264 3.63061e+012
+394 212 3.61488e+012
+142 312 3.56591e+012
+160 271 3.54895e+012
+438 192 3.53513e+012
+214 251 3.50997e+012
+225 129 3.50385e+012
+316 213 3.45353e+012
+277 409 3.45102e+012
+286 284 3.42986e+012
+265 232 3.4201e+012
+256 357 3.24089e+012
+245 180 3.21426e+012
+383 245 3.09037e+012
+364 195 3.0857e+012
+409 178 3.08012e+012
+296 163 3.05015e+012
+309 422 3.0334e+012
+359 399 3.0153e+012
+344 146 2.94229e+012
+229 305 2.87129e+012
+127 346 2.86811e+012
+237 392 2.84455e+012
+276 113 2.70731e+012
+371 366 2.6818e+012
+331 265 2.6452e+012
+260 233 2.61119e+012
+281 285 2.5658e+012
+162 361 2.53136e+012
+424 228 2.48912e+012
+301 336 2.43088e+012
+208 252 2.42314e+012
+250 358 2.41299e+012
+351 315 2.39382e+012
+319 98 2.38068e+012
+322 388 2.34962e+012
+398 295 2.32713e+012
+240 181 2.27879e+012
+608 239 2.24559e+012
+338 147 2.22925e+012
+310 214 2.19768e+012
+176 326 2.18471e+012
+385 131 2.18339e+012
+290 164 2.172e+012
+270 114 2.13845e+012
+404 179 2.13311e+012
+378 246 2.01489e+012
+448 163 1.97612e+012
+358 196 1.93837e+012
+546 37 1.67717e+012
+628 239 1.58417e+012
+32 377 8.5175e+011
+598 174 8.246e+011
+461 21 7.55404e+011
+60 390 6.48875e+011
+445 31 5.00924e+011
+605 169 4.91537e+011
+538 45 4.23755e+011
+199 8 4.13095e+011
+534 41 3.40876e+011
+618 174 3.20789e+011
+633 323 2.82256e+011
+203 70 2.33223e+011
+454 23 2.26302e+011
+39 372 2.2437e+011
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_3_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_3_7.txt
new file mode 100644
index 0000000..ad3e003
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_3_7.txt
@@ -0,0 +1,81 @@
+80
+248 268 1.32804e+013
+195 288 1.30128e+013
+298 248 1.2938e+013
+268 320 1.28673e+013
+367 279 1.28371e+013
+227 216 1.27995e+013
+339 350 1.27148e+013
+258 147 1.26483e+013
+278 197 1.26076e+013
+347 229 1.25683e+013
+319 299 1.23621e+013
+289 371 1.23343e+013
+394 211 1.23207e+013
+308 130 1.22892e+013
+327 179 1.22391e+013
+216 341 1.22322e+013
+375 163 1.2155e+013
+421 150 1.12679e+013
+305 335 1.10267e+013
+208 168 1.10181e+013
+233 304 1.09801e+013
+239 100 1.08e+013
+212 251 1.07403e+013
+354 314 1.06769e+013
+334 264 1.06623e+013
+356 117 1.06519e+013
+289 84 1.0576e+013
+284 284 1.05706e+013
+326 386 1.04796e+013
+180 325 1.03379e+013
+264 232 1.02804e+013
+254 357 9.85896e+012
+175 239 9.66515e+012
+204 378 9.52409e+012
+243 181 9.50763e+012
+314 213 9.46578e+012
+161 271 9.40764e+012
+412 258 9.38163e+012
+226 129 9.34129e+012
+386 327 9.30001e+012
+407 178 9.23348e+012
+437 191 9.1746e+012
+382 245 9.13464e+012
+278 408 8.94247e+012
+362 195 8.91159e+012
+142 313 8.7993e+012
+342 146 8.70249e+012
+194 199 8.68941e+012
+294 163 8.64948e+012
+358 398 8.51927e+012
+274 113 8.50154e+012
+370 366 8.03271e+012
+309 421 7.87464e+012
+321 388 7.63792e+012
+397 296 7.60821e+012
+249 358 7.58488e+012
+423 228 7.45822e+012
+128 346 7.43851e+012
+236 392 7.34067e+012
+259 233 7.05278e+012
+269 114 6.95681e+012
+318 98 6.91061e+012
+289 164 6.7762e+012
+309 215 6.74577e+012
+384 131 6.71447e+012
+448 163 6.67218e+012
+161 361 6.48098e+012
+609 239 6.36104e+012
+628 238 4.47373e+012
+547 38 4.11349e+012
+599 174 3.39836e+012
+32 378 2.5161e+012
+460 20 1.94175e+012
+604 169 1.93008e+012
+61 390 1.67709e+012
+617 175 1.41994e+012
+445 32 1.20649e+012
+199 8 1.0874e+012
+538 44 1.00262e+012
+38 373 7.65906e+011
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_5_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_5_3.txt
new file mode 100644
index 0000000..c205a7b
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_5_3.txt
@@ -0,0 +1,84 @@
+83
+386 328 1.68491e+016
+258 149 1.66576e+016
+319 302 1.5207e+016
+394 214 1.5004e+016
+327 182 1.47264e+016
+227 218 1.46546e+016
+375 165 1.46503e+016
+438 192 1.45031e+016
+234 304 1.43462e+016
+278 200 1.4276e+016
+308 132 1.42357e+016
+239 99 1.39731e+016
+420 148 1.39589e+016
+249 268 1.35191e+016
+412 259 1.34576e+016
+355 116 1.33461e+016
+265 232 1.32942e+016
+367 282 1.31064e+016
+291 372 1.30411e+016
+347 232 1.30157e+016
+195 290 1.27797e+016
+270 320 1.2675e+016
+359 400 1.26215e+016
+175 238 1.25639e+016
+288 83 1.22786e+016
+335 264 1.22278e+016
+193 199 1.21213e+016
+237 393 1.19935e+016
+327 386 1.1875e+016
+299 251 1.15902e+016
+307 335 1.11733e+016
+162 362 1.10239e+016
+356 314 1.10167e+016
+338 349 1.09692e+016
+286 284 1.07749e+016
+409 178 1.0772e+016
+207 167 1.07275e+016
+255 357 1.07111e+016
+142 312 1.04008e+016
+309 422 1.03863e+016
+181 325 1.02412e+016
+217 344 1.00032e+016
+277 409 9.75883e+015
+203 378 9.54656e+015
+383 245 9.51676e+015
+546 37 9.2507e+015
+343 146 9.07901e+015
+315 213 9.05444e+015
+295 163 8.98437e+015
+160 272 8.57133e+015
+214 251 8.56928e+015
+245 180 8.24924e+015
+363 195 7.93513e+015
+275 113 7.56692e+015
+127 346 7.38229e+015
+225 130 7.13952e+015
+629 239 4.73895e+015
+371 366 4.48751e+015
+209 252 4.45142e+015
+319 98 4.37294e+015
+302 336 4.14195e+015
+260 233 3.95552e+015
+424 228 3.47063e+015
+399 295 3.43704e+015
+385 131 2.60765e+015
+449 162 2.5687e+015
+190 1 2.40677e+015
+461 21 2.32815e+015
+32 377 2.066e+015
+280 285 1.97505e+015
+534 42 1.93992e+015
+338 147 1.90084e+015
+608 240 1.86451e+015
+404 179 1.76365e+015
+60 390 1.67607e+015
+633 323 1.49179e+015
+250 358 1.33559e+015
+538 45 1.2584e+015
+203 70 1.23977e+015
+540 29 1.10353e+015
+33 382 1.02567e+015
+605 169 9.81361e+014
+269 114 8.65665e+014
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_5_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_5_5.txt
new file mode 100644
index 0000000..619bb4a
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_5_5.txt
@@ -0,0 +1,97 @@
+96
+239 99 1.54904e+017
+420 149 1.53355e+017
+308 133 1.41449e+017
+175 238 1.41116e+017
+386 328 1.39795e+017
+207 167 1.39754e+017
+289 83 1.3712e+017
+348 233 1.35331e+017
+248 271 1.35201e+017
+356 116 1.35147e+017
+375 165 1.34978e+017
+412 259 1.30974e+017
+307 335 1.29711e+017
+269 323 1.297e+017
+438 192 1.29307e+017
+368 283 1.28929e+017
+258 149 1.28456e+017
+328 183 1.28074e+017
+299 251 1.27598e+017
+195 289 1.26445e+017
+227 216 1.25997e+017
+203 378 1.25492e+017
+328 386 1.24835e+017
+395 215 1.2348e+017
+142 312 1.23113e+017
+356 314 1.23061e+017
+182 325 1.22761e+017
+339 350 1.21893e+017
+278 198 1.21808e+017
+319 302 1.21641e+017
+193 199 1.2121e+017
+290 375 1.19721e+017
+235 304 1.19352e+017
+161 271 1.19058e+017
+214 251 1.18109e+017
+336 264 1.17818e+017
+225 129 1.17607e+017
+216 342 1.17129e+017
+316 213 1.15338e+017
+266 232 1.13193e+017
+277 409 1.11113e+017
+286 284 1.09189e+017
+309 422 1.08648e+017
+359 399 1.08539e+017
+256 356 1.07856e+017
+245 180 1.0765e+017
+364 195 1.04573e+017
+383 245 1.0363e+017
+409 178 1.01263e+017
+296 163 1.01014e+017
+237 393 9.86438e+016
+127 346 9.65681e+016
+344 146 9.54477e+016
+371 366 9.31794e+016
+162 361 9.16235e+016
+276 113 9.14517e+016
+229 305 8.81562e+016
+424 228 8.58985e+016
+319 98 8.53685e+016
+260 233 8.15006e+016
+330 265 8.1431e+016
+398 295 7.97172e+016
+302 336 7.86198e+016
+281 285 7.72945e+016
+250 358 7.71945e+016
+208 252 7.59185e+016
+351 315 7.53471e+016
+385 131 7.4526e+016
+310 214 7.24112e+016
+176 326 7.23058e+016
+322 388 7.16039e+016
+338 147 7.15419e+016
+240 181 7.15009e+016
+290 164 7.13751e+016
+448 163 7.0276e+016
+270 114 7.0078e+016
+404 179 6.85801e+016
+378 246 6.79492e+016
+358 196 6.52849e+016
+546 37 6.16485e+016
+608 240 5.34675e+016
+628 239 4.99288e+016
+32 377 3.2619e+016
+598 174 2.84674e+016
+461 21 2.8393e+016
+60 390 2.28258e+016
+538 45 1.68924e+016
+605 169 1.67502e+016
+445 31 1.60774e+016
+199 8 1.47298e+016
+633 323 1.37971e+016
+534 41 1.26543e+016
+203 70 9.79294e+015
+618 174 9.06642e+015
+39 372 8.30473e+015
+454 23 7.84221e+015
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_5_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_5_7.txt
new file mode 100644
index 0000000..f95ec5f
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_5_7.txt
@@ -0,0 +1,83 @@
+82
+248 268 4.62912e+017
+298 248 4.57563e+017
+258 147 4.55859e+017
+227 216 4.54074e+017
+195 288 4.50387e+017
+278 198 4.49029e+017
+268 320 4.48319e+017
+308 130 4.47801e+017
+367 279 4.47221e+017
+348 230 4.45009e+017
+339 350 4.44011e+017
+319 300 4.42939e+017
+394 211 4.39222e+017
+327 180 4.36935e+017
+375 163 4.34652e+017
+421 150 4.27786e+017
+290 372 4.26665e+017
+216 341 4.24366e+017
+356 117 4.17551e+017
+289 84 4.06622e+017
+208 168 4.0599e+017
+239 100 4.05579e+017
+305 335 3.76468e+017
+233 304 3.73522e+017
+334 264 3.70479e+017
+354 314 3.676e+017
+212 251 3.66234e+017
+412 258 3.63736e+017
+326 386 3.62354e+017
+284 284 3.62296e+017
+437 191 3.59969e+017
+180 325 3.59799e+017
+175 239 3.5958e+017
+264 232 3.57936e+017
+386 327 3.5601e+017
+204 378 3.49551e+017
+254 357 3.49362e+017
+226 129 3.48936e+017
+161 271 3.42814e+017
+314 213 3.39599e+017
+382 245 3.33146e+017
+243 181 3.32966e+017
+408 178 3.28547e+017
+278 408 3.28082e+017
+358 398 3.22627e+017
+194 198 3.22336e+017
+362 195 3.21992e+017
+142 313 3.209e+017
+294 163 3.1651e+017
+342 146 3.1137e+017
+274 113 3.07784e+017
+370 366 3.013e+017
+309 421 3.01211e+017
+423 228 2.88628e+017
+397 296 2.86144e+017
+128 346 2.78658e+017
+236 392 2.77281e+017
+318 98 2.70228e+017
+321 388 2.66342e+017
+384 131 2.62579e+017
+448 163 2.59526e+017
+269 114 2.53288e+017
+289 164 2.51203e+017
+309 215 2.4922e+017
+161 361 2.47849e+017
+609 239 1.86196e+017
+547 38 1.56149e+017
+628 238 1.48592e+017
+599 174 1.25841e+017
+32 378 1.04685e+017
+460 20 7.70505e+016
+604 169 7.33928e+016
+61 390 6.49638e+016
+617 175 4.9104e+016
+445 31 4.57816e+016
+199 8 4.53822e+016
+539 44 4.3299e+016
+38 373 2.99768e+016
+632 322 2.78183e+016
+454 23 2.5933e+016
+27 373 2.38593e+016
+203 69 2.35485e+016
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_7_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_7_3.txt
new file mode 100644
index 0000000..27207e1
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_7_3.txt
@@ -0,0 +1,77 @@
+76
+258 149 5.58732e+020
+386 328 5.46413e+020
+375 165 5.32607e+020
+308 132 5.14343e+020
+319 302 5.05374e+020
+394 214 4.86822e+020
+227 218 4.80265e+020
+327 182 4.78677e+020
+278 200 4.7215e+020
+438 192 4.70431e+020
+239 99 4.61927e+020
+248 271 4.55727e+020
+269 323 4.42595e+020
+412 259 4.41501e+020
+299 251 4.41288e+020
+420 149 4.23757e+020
+175 238 4.18373e+020
+367 282 4.16396e+020
+195 290 4.16312e+020
+340 353 4.10619e+020
+348 232 4.07132e+020
+291 372 4.04538e+020
+234 304 3.97137e+020
+355 116 3.87246e+020
+359 400 3.74354e+020
+217 344 3.73423e+020
+307 335 3.64882e+020
+309 422 3.60427e+020
+265 232 3.60142e+020
+288 83 3.58546e+020
+237 393 3.58036e+020
+356 314 3.53506e+020
+142 312 3.47301e+020
+162 362 3.39158e+020
+327 386 3.38457e+020
+207 167 3.36059e+020
+373 160 3.19626e+020
+335 264 3.19213e+020
+182 325 3.17593e+020
+546 37 3.12541e+020
+214 251 3.10957e+020
+203 378 3.00073e+020
+409 178 2.84495e+020
+316 213 2.81093e+020
+161 271 2.74307e+020
+193 199 2.72607e+020
+255 357 2.6459e+020
+286 284 2.63015e+020
+245 180 2.5594e+020
+364 195 2.54112e+020
+226 129 2.50958e+020
+383 245 2.46111e+020
+343 146 2.19761e+020
+128 346 2.12223e+020
+295 163 2.08299e+020
+277 409 2.0065e+020
+276 112 1.8858e+020
+629 239 1.26745e+020
+371 366 1.10409e+020
+319 98 1.03411e+020
+461 21 8.45716e+019
+423 228 8.37047e+019
+32 377 8.04471e+019
+191 1 7.436e+019
+633 322 6.54073e+019
+397 296 6.27462e+019
+534 42 5.86947e+019
+384 131 5.61881e+019
+60 390 5.33089e+019
+203 70 4.71153e+019
+606 242 4.55799e+019
+538 45 4.53192e+019
+605 169 4.4176e+019
+447 163 3.7324e+019
+33 382 3.60256e+019
+540 29 3.43839e+019
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_7_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_7_5.txt
new file mode 100644
index 0000000..9a780c9
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_7_5.txt
@@ -0,0 +1,96 @@
+95
+239 99 5.984e+021
+420 149 5.97572e+021
+308 133 5.49516e+021
+289 83 5.47493e+021
+356 116 5.43812e+021
+386 328 5.43155e+021
+175 238 5.39891e+021
+375 165 5.34479e+021
+207 167 5.32791e+021
+348 233 5.28181e+021
+412 259 5.15667e+021
+438 192 5.15011e+021
+248 271 5.13909e+021
+328 183 5.09583e+021
+299 251 5.06266e+021
+258 149 5.05461e+021
+368 283 5.04685e+021
+269 323 4.99376e+021
+395 215 4.95168e+021
+307 335 4.76911e+021
+319 302 4.75386e+021
+142 312 4.7004e+021
+203 378 4.69584e+021
+278 200 4.68588e+021
+340 353 4.66863e+021
+328 386 4.6406e+021
+356 314 4.5991e+021
+290 375 4.57665e+021
+196 291 4.571e+021
+227 219 4.54986e+021
+161 271 4.5363e+021
+182 325 4.51413e+021
+214 251 4.4815e+021
+217 344 4.47315e+021
+226 129 4.4342e+021
+193 199 4.39066e+021
+235 304 4.36474e+021
+316 213 4.33611e+021
+336 264 4.30232e+021
+359 399 4.28893e+021
+309 422 4.26441e+021
+266 232 4.21028e+021
+256 356 4.1795e+021
+286 283 4.13228e+021
+245 180 4.10686e+021
+277 408 4.05738e+021
+364 195 3.95188e+021
+383 245 3.8241e+021
+237 393 3.80616e+021
+409 178 3.74096e+021
+296 163 3.6783e+021
+162 361 3.63936e+021
+127 346 3.62448e+021
+373 160 3.59526e+021
+371 366 3.54818e+021
+276 112 3.5254e+021
+344 146 3.45907e+021
+319 98 3.31506e+021
+424 228 3.2439e+021
+229 305 3.13455e+021
+398 296 3.0332e+021
+260 233 2.94273e+021
+330 265 2.93209e+021
+302 336 2.84767e+021
+385 131 2.83682e+021
+250 358 2.83381e+021
+281 285 2.78001e+021
+448 163 2.73734e+021
+209 252 2.69798e+021
+351 315 2.69767e+021
+176 326 2.66573e+021
+290 164 2.65145e+021
+338 147 2.64181e+021
+310 214 2.63818e+021
+270 114 2.60389e+021
+322 388 2.59981e+021
+240 181 2.55547e+021
+378 246 2.53311e+021
+404 179 2.52948e+021
+546 37 2.42092e+021
+358 196 2.39609e+021
+628 239 1.86675e+021
+609 239 1.74525e+021
+32 377 1.3972e+021
+461 21 1.13869e+021
+598 174 1.06984e+021
+60 390 8.84449e+020
+605 169 7.15619e+020
+538 45 6.92022e+020
+633 322 6.71281e+020
+199 8 5.50081e+020
+445 31 5.22301e+020
+533 42 4.9489e+020
+203 70 4.20677e+020
+39 372 3.24932e+020
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.10_7_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.10_7_7.txt
new file mode 100644
index 0000000..ac98680
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.10_7_7.txt
@@ -0,0 +1,79 @@
+78
+421 149 1.83423e+022
+258 147 1.82278e+022
+248 268 1.80787e+022
+298 248 1.80556e+022
+227 216 1.79356e+022
+278 198 1.79056e+022
+308 130 1.78633e+022
+356 117 1.78303e+022
+347 230 1.77613e+022
+367 280 1.77594e+022
+319 300 1.76461e+022
+195 288 1.7578e+022
+268 320 1.75696e+022
+327 180 1.75535e+022
+339 350 1.74244e+022
+394 211 1.73633e+022
+289 84 1.72522e+022
+375 163 1.72431e+022
+239 100 1.69799e+022
+208 168 1.68749e+022
+289 372 1.67155e+022
+217 342 1.65504e+022
+412 258 1.5653e+022
+437 191 1.55946e+022
+386 327 1.51382e+022
+175 239 1.48441e+022
+334 264 1.4618e+022
+226 129 1.45533e+022
+305 335 1.44848e+022
+233 304 1.44663e+022
+204 378 1.42671e+022
+354 314 1.42597e+022
+212 252 1.42088e+022
+284 284 1.4152e+022
+264 232 1.41177e+022
+326 386 1.40605e+022
+161 271 1.40289e+022
+180 325 1.39795e+022
+254 357 1.3786e+022
+358 398 1.36439e+022
+314 213 1.35398e+022
+194 198 1.34605e+022
+382 245 1.34492e+022
+278 408 1.33864e+022
+142 312 1.32319e+022
+243 181 1.32021e+022
+408 178 1.31996e+022
+362 195 1.28844e+022
+294 163 1.28252e+022
+309 421 1.27755e+022
+370 366 1.25618e+022
+342 146 1.25243e+022
+274 113 1.24182e+022
+423 228 1.22152e+022
+397 296 1.19633e+022
+236 392 1.16936e+022
+318 98 1.1559e+022
+128 346 1.15356e+022
+384 131 1.1196e+022
+448 163 1.10162e+022
+161 361 1.05246e+022
+609 239 6.55309e+021
+547 38 6.5376e+021
+628 238 5.83518e+021
+599 174 5.16664e+021
+32 378 4.74237e+021
+461 20 3.33553e+021
+604 169 3.17431e+021
+61 390 2.74411e+021
+539 44 2.06441e+021
+199 8 1.99159e+021
+617 175 1.98616e+021
+445 31 1.82867e+021
+632 322 1.3611e+021
+38 373 1.26444e+021
+454 23 1.12427e+021
+203 69 1.10386e+021
+27 373 9.78885e+020
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_3_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_3_3.txt
new file mode 100644
index 0000000..f684aca
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_3_3.txt
@@ -0,0 +1,68 @@
+67
+386 328 3.5463e+011
+258 149 3.51167e+011
+234 304 3.47364e+011
+319 302 3.384e+011
+249 268 3.38226e+011
+227 218 3.34698e+011
+394 214 3.22959e+011
+327 182 3.16139e+011
+265 232 3.14293e+011
+291 372 3.08687e+011
+269 320 3.0833e+011
+438 193 3.01853e+011
+195 290 2.96369e+011
+367 282 2.93169e+011
+278 200 2.91895e+011
+347 232 2.76456e+011
+335 264 2.72157e+011
+193 199 2.70334e+011
+375 165 2.67899e+011
+359 400 2.62313e+011
+420 148 2.53365e+011
+239 99 2.51756e+011
+298 250 2.45817e+011
+237 393 2.44427e+011
+338 349 2.42334e+011
+355 116 2.36837e+011
+412 259 2.33947e+011
+285 284 2.29098e+011
+327 386 2.26075e+011
+308 132 2.25893e+011
+175 238 2.2559e+011
+162 362 2.24611e+011
+255 357 2.23675e+011
+409 178 2.22762e+011
+356 314 2.12213e+011
+216 343 1.96832e+011
+142 312 1.95174e+011
+288 83 1.93387e+011
+307 335 1.83794e+011
+277 409 1.829e+011
+343 146 1.7853e+011
+546 37 1.74443e+011
+309 422 1.72377e+011
+383 245 1.68909e+011
+295 163 1.645e+011
+207 166 1.57922e+011
+182 325 1.4998e+011
+203 378 1.45968e+011
+316 213 1.30446e+011
+275 113 1.23306e+011
+364 195 1.20101e+011
+243 181 1.17964e+011
+629 240 1.13303e+011
+210 252 1.12927e+011
+127 346 1.03658e+011
+160 272 9.12322e+010
+226 129 7.40224e+010
+461 21 4.0602e+010
+534 42 3.19466e+010
+606 242 2.98673e+010
+319 98 2.49942e+010
+60 390 2.40932e+010
+32 377 2.23172e+010
+540 28 2.15802e+010
+74 350 2.1243e+010
+633 324 2.05459e+010
+203 71 1.91533e+010
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_3_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_3_5.txt
new file mode 100644
index 0000000..f4ef444
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_3_5.txt
@@ -0,0 +1,89 @@
+88
+239 99 2.93226e+012
+268 320 2.87685e+012
+195 288 2.86915e+012
+420 149 2.83812e+012
+248 268 2.79537e+012
+227 216 2.7921e+012
+298 248 2.75815e+012
+339 350 2.70173e+012
+175 238 2.67869e+012
+207 167 2.66027e+012
+308 133 2.6591e+012
+258 147 2.65663e+012
+289 372 2.60932e+012
+367 280 2.59697e+012
+348 233 2.59575e+012
+386 328 2.59128e+012
+307 335 2.58778e+012
+327 386 2.52289e+012
+374 162 2.51834e+012
+278 198 2.48787e+012
+319 300 2.48268e+012
+356 314 2.47375e+012
+216 342 2.46241e+012
+182 325 2.45093e+012
+289 83 2.43685e+012
+412 259 2.41362e+012
+234 304 2.4129e+012
+203 378 2.40738e+012
+328 183 2.38493e+012
+355 116 2.38141e+012
+394 212 2.35577e+012
+142 312 2.33601e+012
+214 251 2.29493e+012
+161 271 2.29127e+012
+193 199 2.24554e+012
+336 264 2.24463e+012
+316 213 2.21533e+012
+437 192 2.21442e+012
+265 232 2.21017e+012
+226 129 2.15794e+012
+286 283 2.10511e+012
+277 409 2.08253e+012
+245 180 2.07182e+012
+256 356 2.04061e+012
+309 422 2.00702e+012
+364 195 1.97269e+012
+409 178 1.95278e+012
+358 399 1.93737e+012
+383 245 1.93036e+012
+127 346 1.83048e+012
+296 163 1.82024e+012
+344 146 1.76684e+012
+237 393 1.75305e+012
+162 362 1.61334e+012
+276 112 1.59611e+012
+371 366 1.56434e+012
+424 228 1.41341e+012
+331 265 1.37407e+012
+319 98 1.37102e+012
+260 233 1.30026e+012
+398 296 1.2869e+012
+302 336 1.2566e+012
+281 285 1.25584e+012
+209 252 1.23137e+012
+351 315 1.20122e+012
+177 326 1.1881e+012
+385 131 1.14294e+012
+250 358 1.11417e+012
+240 181 1.07361e+012
+628 239 1.03525e+012
+339 147 1.02352e+012
+448 163 1.01905e+012
+290 164 9.58434e+011
+310 214 9.22426e+011
+608 240 9.12295e+011
+546 37 9.06643e+011
+270 114 8.85445e+011
+378 246 8.1858e+011
+359 196 7.77427e+011
+32 377 5.53812e+011
+461 21 5.02304e+011
+60 390 4.09037e+011
+605 169 3.27526e+011
+598 174 3.03329e+011
+538 45 2.44433e+011
+533 41 1.74605e+011
+199 8 1.71311e+011
+445 31 1.57209e+011
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_3_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_3_7.txt
new file mode 100644
index 0000000..5bce823
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_3_7.txt
@@ -0,0 +1,78 @@
+77
+248 268 8.68835e+012
+195 288 8.48232e+012
+269 320 8.45512e+012
+298 248 8.40441e+012
+227 216 8.34179e+012
+339 350 8.29759e+012
+367 279 8.28753e+012
+278 197 8.17397e+012
+258 146 8.15208e+012
+347 229 8.1382e+012
+319 299 8.1294e+012
+290 372 8.10581e+012
+394 211 8.0441e+012
+217 341 8.04313e+012
+327 179 7.95115e+012
+308 130 7.89535e+012
+375 162 7.83805e+012
+421 150 7.48424e+012
+208 168 7.33085e+012
+239 100 7.09311e+012
+356 117 7.07712e+012
+233 304 7.03258e+012
+289 84 7.03037e+012
+306 335 6.91096e+012
+212 251 6.69701e+012
+334 264 6.61423e+012
+180 325 6.60863e+012
+326 386 6.59346e+012
+285 283 6.58115e+012
+355 314 6.55713e+012
+264 232 6.54201e+012
+176 239 6.26552e+012
+204 378 6.24941e+012
+161 271 6.14024e+012
+226 129 6.08687e+012
+254 357 6.08034e+012
+412 258 6.0459e+012
+437 191 5.95316e+012
+386 327 5.8782e+012
+314 213 5.85305e+012
+278 408 5.83383e+012
+244 180 5.81277e+012
+408 178 5.78317e+012
+382 245 5.68994e+012
+142 313 5.65222e+012
+194 198 5.64071e+012
+358 398 5.59207e+012
+362 195 5.4141e+012
+342 145 5.29887e+012
+294 163 5.28337e+012
+274 113 5.13792e+012
+309 421 5.02052e+012
+370 366 4.94374e+012
+236 392 4.86849e+012
+128 346 4.86031e+012
+397 296 4.72451e+012
+423 228 4.54928e+012
+161 361 4.31896e+012
+239 182 4.3008e+012
+318 98 4.2111e+012
+384 131 4.02437e+012
+448 163 4.01097e+012
+269 114 3.79857e+012
+309 215 3.5906e+012
+609 240 3.57767e+012
+628 238 2.97348e+012
+546 38 2.08385e+012
+599 174 1.7932e+012
+32 378 1.61024e+012
+460 20 1.28973e+012
+604 169 1.25104e+012
+61 390 1.07905e+012
+199 8 5.63108e+011
+539 44 5.5899e+011
+617 175 5.27e+011
+39 373 4.5526e+011
+446 32 4.50193e+011
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_5_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_5_3.txt
new file mode 100644
index 0000000..737b6f9
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_5_3.txt
@@ -0,0 +1,68 @@
+67
+258 149 1.08053e+016
+386 328 1.01549e+016
+319 302 9.66662e+015
+227 218 9.62447e+015
+375 165 9.29288e+015
+394 214 8.71878e+015
+327 182 8.54457e+015
+195 290 8.48819e+015
+278 200 8.24548e+015
+308 132 8.23162e+015
+249 268 8.17737e+015
+270 320 8.01277e+015
+291 372 8.01195e+015
+366 278 7.7211e+015
+438 193 7.07253e+015
+298 250 7.03657e+015
+239 99 6.87792e+015
+338 349 6.83734e+015
+347 232 6.7889e+015
+412 259 6.57523e+015
+234 304 6.50327e+015
+175 238 6.39944e+015
+359 400 6.1516e+015
+216 343 5.87679e+015
+546 37 5.80682e+015
+162 362 5.70425e+015
+237 393 5.51408e+015
+309 422 5.50391e+015
+265 232 5.41495e+015
+420 149 5.33772e+015
+328 386 5.31874e+015
+142 312 5.28294e+015
+373 160 5.1613e+015
+356 314 5.13367e+015
+307 335 5.11208e+015
+182 325 4.5523e+015
+356 117 4.47606e+015
+316 213 3.88777e+015
+289 84 3.8694e+015
+335 264 3.79322e+015
+214 251 3.7077e+015
+407 180 3.59821e+015
+381 247 3.41752e+015
+364 195 3.35795e+015
+161 271 3.35406e+015
+207 167 3.25606e+015
+226 129 3.15705e+015
+128 346 3.11224e+015
+204 378 3.00319e+015
+246 180 2.84375e+015
+285 284 2.7645e+015
+278 408 2.58083e+015
+194 199 2.45711e+015
+254 357 2.36315e+015
+293 165 2.21289e+015
+342 146 1.78252e+015
+273 115 1.63569e+015
+629 240 1.63406e+015
+461 21 1.27546e+015
+633 323 9.71405e+014
+533 42 9.29553e+014
+32 377 8.33124e+014
+606 242 7.85951e+014
+203 70 7.33001e+014
+605 169 6.12128e+014
+540 29 5.85216e+014
+60 390 5.57311e+014
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_5_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_5_5.txt
new file mode 100644
index 0000000..639977e
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_5_5.txt
@@ -0,0 +1,94 @@
+93
+239 99 9.96406e+016
+420 149 9.60741e+016
+386 328 9.30035e+016
+308 133 9.17499e+016
+175 238 9.06474e+016
+348 233 8.96542e+016
+375 165 8.83112e+016
+248 271 8.76466e+016
+289 83 8.74593e+016
+412 259 8.69842e+016
+269 323 8.60806e+016
+368 283 8.56046e+016
+356 116 8.55502e+016
+207 167 8.54659e+016
+328 183 8.51488e+016
+299 251 8.37712e+016
+227 216 8.34142e+016
+307 335 8.29065e+016
+258 147 8.27679e+016
+195 288 8.22491e+016
+395 215 8.21699e+016
+437 192 8.02302e+016
+328 386 8.01512e+016
+339 350 7.92594e+016
+356 314 7.90166e+016
+290 375 7.89188e+016
+278 198 7.88792e+016
+142 312 7.87653e+016
+319 300 7.8444e+016
+182 325 7.81813e+016
+203 378 7.67915e+016
+214 251 7.59112e+016
+217 344 7.57052e+016
+234 304 7.55183e+016
+161 271 7.49896e+016
+309 422 7.23782e+016
+316 213 7.21349e+016
+226 129 7.12401e+016
+265 232 7.11215e+016
+336 264 7.05295e+016
+193 199 6.96655e+016
+358 399 6.90819e+016
+256 356 6.85055e+016
+286 283 6.81884e+016
+245 180 6.72161e+016
+364 195 6.51367e+016
+409 178 6.25632e+016
+383 245 6.25429e+016
+277 408 6.2029e+016
+237 393 6.14075e+016
+127 346 5.83703e+016
+162 362 5.83636e+016
+295 163 5.7977e+016
+373 160 5.56855e+016
+276 112 5.48481e+016
+343 146 5.47817e+016
+371 366 4.98147e+016
+306 127 4.80048e+016
+319 98 4.46748e+016
+424 228 4.24483e+016
+398 296 3.86532e+016
+546 37 3.71256e+016
+302 336 3.64496e+016
+177 326 3.6037e+016
+331 265 3.49179e+016
+260 233 3.49113e+016
+209 252 3.48597e+016
+385 131 3.25676e+016
+351 315 3.24793e+016
+628 239 3.24236e+016
+250 358 3.11626e+016
+448 163 3.11392e+016
+281 285 3.09848e+016
+323 387 3.02703e+016
+240 181 2.77393e+016
+338 147 2.62397e+016
+290 164 2.59234e+016
+404 179 2.43408e+016
+311 214 2.43404e+016
+270 114 2.36628e+016
+378 246 2.27745e+016
+609 239 2.27155e+016
+359 196 2.23449e+016
+32 377 2.11945e+016
+461 21 1.86899e+016
+60 390 1.35468e+016
+605 169 1.11533e+016
+538 45 8.88519e+015
+533 41 6.71524e+015
+598 174 5.91722e+015
+633 323 5.84749e+015
+198 8 5.73136e+015
+203 70 5.24745e+015
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_5_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_5_7.txt
new file mode 100644
index 0000000..08423b1
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_5_7.txt
@@ -0,0 +1,78 @@
+77
+248 268 3.04405e+017
+298 248 2.97829e+017
+227 216 2.97317e+017
+258 147 2.95531e+017
+195 288 2.93851e+017
+269 320 2.93661e+017
+278 197 2.92665e+017
+348 230 2.92605e+017
+368 280 2.91919e+017
+308 130 2.9145e+017
+339 350 2.89353e+017
+319 300 2.8884e+017
+394 211 2.88078e+017
+327 179 2.84793e+017
+421 150 2.84279e+017
+290 372 2.81563e+017
+375 163 2.81463e+017
+217 342 2.80038e+017
+356 117 2.77214e+017
+289 84 2.69416e+017
+208 168 2.68905e+017
+239 100 2.63341e+017
+306 335 2.38966e+017
+412 258 2.38094e+017
+437 191 2.3701e+017
+233 304 2.3571e+017
+176 239 2.32548e+017
+355 314 2.30739e+017
+386 327 2.28824e+017
+327 386 2.28095e+017
+204 378 2.2693e+017
+180 325 2.2677e+017
+213 251 2.24701e+017
+334 264 2.24101e+017
+264 232 2.24049e+017
+226 129 2.23941e+017
+285 283 2.22344e+017
+161 271 2.20818e+017
+256 356 2.18495e+017
+358 398 2.13088e+017
+278 408 2.11349e+017
+315 213 2.09315e+017
+142 312 2.06286e+017
+194 198 2.0627e+017
+244 180 2.05959e+017
+382 245 2.05689e+017
+408 178 2.0294e+017
+363 195 1.96697e+017
+309 421 1.95409e+017
+294 163 1.90975e+017
+342 146 1.84489e+017
+236 392 1.84446e+017
+274 113 1.83916e+017
+370 366 1.82098e+017
+128 346 1.79629e+017
+397 296 1.725e+017
+423 228 1.70641e+017
+161 361 1.65137e+017
+318 98 1.61111e+017
+208 253 1.53357e+017
+384 131 1.52275e+017
+250 358 1.52019e+017
+448 163 1.49027e+017
+239 182 1.48487e+017
+322 388 1.47664e+017
+350 316 1.4729e+017
+628 238 9.84674e+016
+609 240 8.66043e+016
+546 38 8.35296e+016
+32 377 6.67409e+016
+599 174 5.89169e+016
+460 20 5.12327e+016
+604 169 4.7342e+016
+61 390 4.0839e+016
+539 44 2.5193e+016
+198 8 2.25394e+016
+38 373 1.75077e+016
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_7_3.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_7_3.txt
new file mode 100644
index 0000000..ea2de57
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_7_3.txt
@@ -0,0 +1,75 @@
+74
+258 149 3.41339e+020
+375 165 3.24724e+020
+227 218 3.01628e+020
+319 302 2.98794e+020
+308 132 2.95345e+020
+386 328 2.84631e+020
+195 290 2.70447e+020
+366 278 2.69378e+020
+278 199 2.68662e+020
+248 270 2.68213e+020
+393 210 2.66833e+020
+269 323 2.61469e+020
+327 181 2.51525e+020
+290 375 2.41856e+020
+299 251 2.40373e+020
+348 233 2.36911e+020
+340 353 2.33811e+020
+346 228 2.29936e+020
+368 283 2.24978e+020
+373 160 1.95778e+020
+217 344 1.941e+020
+546 37 1.91657e+020
+412 258 1.9024e+020
+438 192 1.75221e+020
+356 117 1.70438e+020
+267 318 1.64088e+020
+309 422 1.62933e+020
+239 99 1.5705e+020
+289 84 1.56372e+020
+175 238 1.52881e+020
+328 386 1.45693e+020
+381 247 1.42384e+020
+407 180 1.40151e+020
+263 234 1.40028e+020
+232 306 1.36569e+020
+359 400 1.30703e+020
+179 327 1.29923e+020
+354 317 1.29874e+020
+162 362 1.29243e+020
+142 312 1.2751e+020
+284 286 1.23512e+020
+307 335 1.14261e+020
+420 149 1.12746e+020
+237 393 1.11778e+020
+204 378 1.10385e+020
+243 183 1.0854e+020
+313 215 1.03777e+020
+214 251 1.00222e+020
+161 271 9.79134e+019
+293 165 9.75434e+019
+361 197 9.69778e+019
+128 346 9.36911e+019
+226 129 9.19815e+019
+278 408 9.19308e+019
+208 168 8.44465e+019
+333 266 7.74082e+019
+253 358 7.61414e+019
+273 115 7.56721e+019
+341 147 5.95224e+019
+277 112 5.3568e+019
+297 162 4.78919e+019
+337 263 4.73107e+019
+633 322 4.28981e+019
+628 239 3.88409e+019
+461 21 3.68861e+019
+533 42 3.50227e+019
+32 378 3.13099e+019
+411 177 2.92492e+019
+203 70 2.86143e+019
+195 198 2.84306e+019
+385 244 2.72432e+019
+605 169 2.63993e+019
+606 242 2.18414e+019
+540 29 1.87029e+019
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_7_5.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_7_5.txt
new file mode 100644
index 0000000..6bedac3
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_7_5.txt
@@ -0,0 +1,91 @@
+90
+239 99 3.71252e+021
+420 149 3.61786e+021
+386 328 3.58925e+021
+308 133 3.57349e+021
+375 165 3.5376e+021
+348 233 3.49753e+021
+328 183 3.39386e+021
+289 83 3.38856e+021
+412 259 3.37905e+021
+356 117 3.36785e+021
+299 251 3.35779e+021
+368 283 3.35377e+021
+175 238 3.34101e+021
+248 271 3.32244e+021
+269 323 3.31452e+021
+395 215 3.29899e+021
+258 149 3.23025e+021
+438 192 3.16031e+021
+340 353 3.10233e+021
+279 201 3.09057e+021
+207 167 3.08123e+021
+319 302 3.0259e+021
+290 375 3.01877e+021
+196 291 2.99299e+021
+217 344 2.97489e+021
+307 335 2.9653e+021
+228 219 2.95051e+021
+142 312 2.90001e+021
+328 386 2.8995e+021
+356 314 2.87762e+021
+214 251 2.81724e+021
+309 422 2.81319e+021
+182 325 2.79467e+021
+161 271 2.72604e+021
+203 378 2.71948e+021
+358 399 2.70928e+021
+234 304 2.6838e+021
+226 129 2.62796e+021
+316 213 2.61993e+021
+256 356 2.60382e+021
+265 232 2.55512e+021
+286 283 2.54147e+021
+335 264 2.48577e+021
+245 180 2.4827e+021
+297 246 2.40529e+021
+364 195 2.37522e+021
+346 227 2.34562e+021
+237 393 2.33855e+021
+373 160 2.28835e+021
+193 199 2.26822e+021
+162 362 2.23852e+021
+409 178 2.22872e+021
+278 408 2.22397e+021
+383 245 2.20495e+021
+128 346 2.14528e+021
+276 112 2.11147e+021
+296 162 2.06785e+021
+344 145 2.00911e+021
+306 127 1.99668e+021
+371 366 1.67165e+021
+546 37 1.53789e+021
+319 98 1.5116e+021
+423 228 1.35242e+021
+398 296 1.22806e+021
+177 326 1.21195e+021
+628 239 1.1877e+021
+302 336 1.16011e+021
+209 252 1.09454e+021
+384 131 1.00937e+021
+250 358 9.92352e+020
+448 163 9.79355e+020
+323 387 9.49465e+020
+32 377 9.02411e+020
+290 164 7.67143e+020
+338 147 7.57806e+020
+311 214 7.41228e+020
+461 21 7.31378e+020
+404 179 6.99493e+020
+270 114 6.93072e+020
+359 196 6.85345e+020
+378 246 6.58515e+020
+609 239 5.71894e+020
+60 390 4.81989e+020
+605 169 4.77028e+020
+633 323 3.18042e+020
+538 45 3.17627e+020
+533 42 2.72911e+020
+203 70 2.51781e+020
+600 169 2.15209e+020
+198 8 2.02865e+020
diff --git a/test_data/harriscorners/hc_fsc_5.00_0.15_7_7.txt b/test_data/harriscorners/hc_fsc_5.00_0.15_7_7.txt
new file mode 100644
index 0000000..dde3900
--- /dev/null
+++ b/test_data/harriscorners/hc_fsc_5.00_0.15_7_7.txt
@@ -0,0 +1,82 @@
+81
+421 149 1.21643e+022
+248 268 1.19386e+022
+258 147 1.19e+022
+299 249 1.17941e+022
+356 117 1.17926e+022
+227 216 1.17904e+022
+308 130 1.17079e+022
+348 230 1.1631e+022
+278 197 1.16239e+022
+319 300 1.15722e+022
+368 280 1.153e+022
+268 320 1.15241e+022
+195 288 1.15007e+022
+394 211 1.14332e+022
+327 180 1.13915e+022
+339 350 1.1374e+022
+289 84 1.13661e+022
+375 163 1.12556e+022
+208 168 1.10954e+022
+290 372 1.0995e+022
+217 342 1.09654e+022
+239 100 1.08876e+022
+437 191 1.03591e+022
+412 258 1.0345e+022
+386 327 9.84076e+021
+176 239 9.57959e+021
+306 335 9.33573e+021
+226 129 9.16055e+021
+204 378 9.12738e+021
+355 314 9.1172e+021
+233 304 9.04719e+021
+327 386 9.04265e+021
+358 398 9.03813e+021
+335 264 8.92028e+021
+181 325 8.90864e+021
+213 251 8.89592e+021
+161 271 8.86926e+021
+256 356 8.85062e+021
+285 284 8.77812e+021
+264 232 8.74882e+021
+142 312 8.52967e+021
+315 213 8.49531e+021
+278 408 8.48246e+021
+194 198 8.46142e+021
+246 180 8.46089e+021
+309 421 8.37885e+021
+382 245 8.25484e+021
+408 178 8.09241e+021
+363 195 7.99555e+021
+296 162 7.8729e+021
+236 392 7.76956e+021
+276 112 7.59036e+021
+344 145 7.47238e+021
+370 366 7.39996e+021
+128 346 7.30442e+021
+161 361 6.97972e+021
+397 296 6.97771e+021
+423 228 6.95101e+021
+318 98 6.70278e+021
+384 131 6.25683e+021
+208 253 6.17698e+021
+250 358 6.13602e+021
+448 163 6.00543e+021
+239 182 5.91963e+021
+322 388 5.84965e+021
+350 316 5.82771e+021
+290 164 5.56357e+021
+270 114 5.55627e+021
+338 147 5.43292e+021
+628 238 3.85072e+021
+546 38 3.6088e+021
+32 377 3.11025e+021
+609 240 2.54532e+021
+460 20 2.20716e+021
+599 174 2.06492e+021
+604 169 2.02568e+021
+61 390 1.6742e+021
+539 44 1.18093e+021
+198 8 9.54686e+020
+38 373 7.22412e+020
+632 323 6.2014e+020
diff --git a/test_data/harriscorners/hc_msc.bmp b/test_data/harriscorners/hc_msc.bmp
new file mode 100644
index 0000000..a86fcfa
--- /dev/null
+++ b/test_data/harriscorners/hc_msc.bmp
Binary files differ
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_3_3.txt b/test_data/harriscorners/hc_msc_0.00_0.04_3_3.txt
new file mode 100644
index 0000000..09c4dcc
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_3_3.txt
@@ -0,0 +1,3045 @@
+3044
+449 298 7.11603e+011
+499 1 6.14136e+011
+535 242 5.50429e+011
+329 127 5.373e+011
+274 366 5.00877e+011
+421 183 4.81895e+011
+401 261 4.8154e+011
+388 178 4.73174e+011
+76 236 4.55167e+011
+553 41 4.41546e+011
+213 73 4.38065e+011
+200 18 4.32789e+011
+321 313 4.21361e+011
+385 221 4.18499e+011
+436 68 4.12777e+011
+66 320 4.11039e+011
+447 397 4.07071e+011
+89 197 4.04961e+011
+121 44 4.04891e+011
+173 312 4.01539e+011
+544 170 3.93932e+011
+286 296 3.92621e+011
+135 215 3.87618e+011
+456 281 3.8236e+011
+45 26 3.74365e+011
+159 143 3.72284e+011
+363 401 3.71432e+011
+471 240 3.66628e+011
+545 217 3.66514e+011
+215 72 3.63325e+011
+273 289 3.57933e+011
+449 219 3.57373e+011
+486 22 3.55373e+011
+245 94 3.54639e+011
+365 200 3.52418e+011
+515 77 3.5205e+011
+110 239 3.46322e+011
+301 175 3.46175e+011
+34 138 3.45836e+011
+448 263 3.44597e+011
+364 298 3.36092e+011
+455 3 3.34436e+011
+407 64 3.31906e+011
+174 238 3.28586e+011
+378 317 3.27893e+011
+3 47 3.21677e+011
+256 386 3.21376e+011
+137 208 3.20548e+011
+286 298 3.19905e+011
+210 54 3.19496e+011
+144 309 3.16408e+011
+299 53 3.14265e+011
+484 23 3.12865e+011
+296 420 3.12681e+011
+121 42 3.10713e+011
+211 56 3.0981e+011
+221 16 3.08559e+011
+36 269 3.08535e+011
+412 256 3.08137e+011
+223 38 3.06453e+011
+282 115 3.06092e+011
+317 336 3.0581e+011
+59 185 3.00251e+011
+449 403 2.99991e+011
+508 18 2.9945e+011
+82 27 2.98989e+011
+66 344 2.98062e+011
+524 263 2.96509e+011
+312 149 2.96108e+011
+396 319 2.93987e+011
+125 255 2.91872e+011
+126 162 2.91522e+011
+317 385 2.91386e+011
+120 4 2.90357e+011
+344 10 2.85939e+011
+242 203 2.82159e+011
+175 94 2.81316e+011
+197 57 2.79765e+011
+253 138 2.78104e+011
+419 7 2.74974e+011
+92 214 2.74678e+011
+507 165 2.72862e+011
+293 120 2.72409e+011
+173 94 2.71956e+011
+412 162 2.71107e+011
+489 264 2.71049e+011
+59 74 2.7104e+011
+301 177 2.70458e+011
+124 363 2.67523e+011
+426 320 2.66975e+011
+240 202 2.65985e+011
+207 223 2.65415e+011
+382 8 2.65404e+011
+246 143 2.64206e+011
+480 298 2.63568e+011
+422 178 2.63002e+011
+82 77 2.61869e+011
+236 74 2.61067e+011
+177 260 2.60806e+011
+522 263 2.60634e+011
+184 35 2.60553e+011
+380 68 2.57742e+011
+417 7 2.57026e+011
+508 122 2.56886e+011
+236 19 2.56049e+011
+340 9 2.54259e+011
+464 241 2.54188e+011
+419 163 2.53764e+011
+360 315 2.52885e+011
+112 213 2.51371e+011
+236 163 2.49906e+011
+240 90 2.48659e+011
+230 266 2.47889e+011
+479 21 2.47441e+011
+530 61 2.47167e+011
+287 342 2.47008e+011
+64 234 2.46691e+011
+303 184 2.45944e+011
+140 184 2.44138e+011
+200 16 2.43995e+011
+359 168 2.43987e+011
+303 207 2.42507e+011
+348 179 2.41435e+011
+28 236 2.39823e+011
+112 4 2.38769e+011
+263 202 2.38225e+011
+281 296 2.37883e+011
+423 180 2.37097e+011
+556 182 2.36169e+011
+526 223 2.359e+011
+407 337 2.35793e+011
+555 40 2.35653e+011
+220 37 2.35599e+011
+49 99 2.35373e+011
+103 61 2.34769e+011
+203 311 2.34468e+011
+177 166 2.32881e+011
+124 199 2.32514e+011
+279 369 2.32499e+011
+251 13 2.30285e+011
+446 264 2.29821e+011
+48 219 2.29656e+011
+410 162 2.28945e+011
+252 140 2.27947e+011
+524 199 2.27565e+011
+370 107 2.27089e+011
+91 198 2.26548e+011
+422 323 2.26376e+011
+425 262 2.26308e+011
+275 181 2.24395e+011
+387 294 2.24322e+011
+265 201 2.228e+011
+420 178 2.2129e+011
+415 251 2.21234e+011
+71 148 2.20707e+011
+277 181 2.20297e+011
+282 403 2.20115e+011
+569 40 2.18207e+011
+301 164 2.17556e+011
+79 3 2.16608e+011
+308 371 2.15971e+011
+254 140 2.15788e+011
+66 234 2.15773e+011
+167 238 2.15416e+011
+137 210 2.15256e+011
+394 319 2.15243e+011
+111 241 2.14659e+011
+270 241 2.14214e+011
+484 59 2.13514e+011
+330 164 2.12962e+011
+46 219 2.12721e+011
+469 240 2.11817e+011
+234 72 2.11153e+011
+102 5 2.11026e+011
+271 166 2.11024e+011
+406 375 2.10999e+011
+155 235 2.1087e+011
+373 116 2.09855e+011
+262 165 2.09022e+011
+240 366 2.08406e+011
+105 62 2.08307e+011
+382 162 2.07044e+011
+170 19 2.06809e+011
+199 86 2.06783e+011
+153 217 2.06757e+011
+313 75 2.06749e+011
+543 364 2.05938e+011
+521 61 2.05412e+011
+335 105 2.05218e+011
+183 401 2.05129e+011
+365 7 2.05046e+011
+386 126 2.04596e+011
+125 261 2.04527e+011
+539 62 2.04443e+011
+525 60 2.03871e+011
+224 221 2.0234e+011
+185 19 2.0226e+011
+530 184 2.02188e+011
+263 440 2.01914e+011
+279 296 2.01704e+011
+511 342 2.01603e+011
+203 17 2.01409e+011
+455 83 2.01138e+011
+473 63 2.00896e+011
+192 124 2.00475e+011
+561 60 1.99979e+011
+466 240 1.99586e+011
+326 87 1.9944e+011
+205 202 1.99065e+011
+33 269 1.98924e+011
+87 197 1.98371e+011
+359 294 1.98079e+011
+59 183 1.97762e+011
+562 148 1.97233e+011
+44 219 1.96878e+011
+270 60 1.9638e+011
+114 344 1.95844e+011
+192 276 1.95691e+011
+415 253 1.95401e+011
+465 198 1.95328e+011
+139 58 1.94676e+011
+287 165 1.9386e+011
+173 75 1.93826e+011
+271 290 1.93812e+011
+276 222 1.93512e+011
+88 256 1.93469e+011
+371 82 1.93216e+011
+543 58 1.92945e+011
+239 349 1.92191e+011
+38 296 1.91838e+011
+445 23 1.91334e+011
+510 172 1.91067e+011
+245 205 1.90717e+011
+391 47 1.90012e+011
+467 123 1.89929e+011
+572 142 1.89129e+011
+381 164 1.88495e+011
+10 102 1.88404e+011
+360 335 1.8802e+011
+282 111 1.87659e+011
+80 474 1.87547e+011
+161 238 1.87481e+011
+538 95 1.87258e+011
+387 167 1.87223e+011
+575 126 1.86488e+011
+526 101 1.86459e+011
+307 439 1.86365e+011
+518 183 1.85775e+011
+416 44 1.85724e+011
+365 259 1.85173e+011
+338 473 1.84708e+011
+512 201 1.84572e+011
+402 276 1.83593e+011
+208 434 1.83225e+011
+323 223 1.83036e+011
+57 29 1.82532e+011
+22 219 1.82195e+011
+212 17 1.81629e+011
+257 88 1.80368e+011
+433 319 1.8007e+011
+35 176 1.79976e+011
+324 165 1.79684e+011
+234 162 1.79398e+011
+238 74 1.78744e+011
+114 3 1.78078e+011
+392 144 1.77674e+011
+553 383 1.77614e+011
+87 78 1.77346e+011
+59 76 1.77265e+011
+320 223 1.76796e+011
+387 319 1.76448e+011
+390 58 1.76366e+011
+443 23 1.76004e+011
+192 331 1.75947e+011
+266 53 1.75916e+011
+401 184 1.75483e+011
+88 148 1.75362e+011
+101 78 1.75323e+011
+35 174 1.75223e+011
+271 278 1.74727e+011
+529 193 1.74033e+011
+487 3 1.73876e+011
+361 296 1.73846e+011
+278 352 1.73539e+011
+352 146 1.73308e+011
+513 93 1.73276e+011
+380 26 1.73103e+011
+125 365 1.72929e+011
+496 119 1.72817e+011
+112 56 1.72733e+011
+64 371 1.72464e+011
+137 212 1.72354e+011
+111 134 1.72178e+011
+461 267 1.71962e+011
+160 112 1.71933e+011
+507 60 1.71802e+011
+161 256 1.71786e+011
+463 198 1.71441e+011
+293 25 1.71392e+011
+289 166 1.71299e+011
+512 99 1.70887e+011
+319 202 1.70792e+011
+558 19 1.70434e+011
+541 61 1.70425e+011
+467 196 1.70248e+011
+465 196 1.70135e+011
+202 313 1.70131e+011
+525 346 1.6944e+011
+363 250 1.69243e+011
+127 76 1.69015e+011
+526 99 1.68148e+011
+341 337 1.68035e+011
+479 81 1.6756e+011
+478 16 1.67489e+011
+508 82 1.6721e+011
+284 222 1.66901e+011
+211 183 1.6665e+011
+207 225 1.6663e+011
+138 201 1.66338e+011
+560 229 1.66294e+011
+67 46 1.66167e+011
+484 375 1.66128e+011
+313 222 1.65955e+011
+68 27 1.65771e+011
+353 127 1.65767e+011
+62 60 1.65742e+011
+97 79 1.65452e+011
+433 146 1.65209e+011
+355 320 1.65036e+011
+342 38 1.64931e+011
+250 364 1.64562e+011
+286 210 1.64184e+011
+230 36 1.64177e+011
+409 66 1.64045e+011
+424 47 1.63979e+011
+529 143 1.63973e+011
+131 36 1.63468e+011
+163 208 1.63409e+011
+128 1 1.63197e+011
+361 131 1.63017e+011
+163 276 1.62543e+011
+94 216 1.62238e+011
+96 447 1.61968e+011
+490 342 1.61551e+011
+83 75 1.61431e+011
+338 10 1.61216e+011
+384 162 1.60923e+011
+512 165 1.60542e+011
+515 17 1.60432e+011
+424 376 1.60095e+011
+562 478 1.60052e+011
+141 22 1.60025e+011
+528 361 1.59888e+011
+556 244 1.5945e+011
+426 119 1.59323e+011
+411 355 1.58329e+011
+498 158 1.58278e+011
+528 359 1.58156e+011
+249 33 1.57947e+011
+212 437 1.57875e+011
+411 5 1.57515e+011
+187 216 1.57353e+011
+366 66 1.57286e+011
+355 220 1.56944e+011
+376 84 1.56933e+011
+524 21 1.56872e+011
+46 90 1.56322e+011
+277 332 1.56018e+011
+428 320 1.55949e+011
+461 340 1.55891e+011
+273 130 1.55611e+011
+35 300 1.55536e+011
+28 8 1.55505e+011
+299 70 1.55299e+011
+55 31 1.55211e+011
+461 279 1.55084e+011
+140 173 1.55081e+011
+497 80 1.55039e+011
+381 411 1.54707e+011
+571 160 1.54629e+011
+275 216 1.54619e+011
+110 136 1.54192e+011
+224 183 1.54143e+011
+546 42 1.53896e+011
+260 273 1.53648e+011
+419 440 1.53237e+011
+189 214 1.53088e+011
+482 365 1.52827e+011
+166 96 1.52706e+011
+342 123 1.52645e+011
+108 44 1.52086e+011
+48 97 1.5154e+011
+228 289 1.51516e+011
+229 292 1.51228e+011
+108 325 1.51192e+011
+27 220 1.50742e+011
+220 100 1.50672e+011
+392 353 1.5065e+011
+162 213 1.50487e+011
+77 256 1.50357e+011
+207 436 1.50348e+011
+579 18 1.50301e+011
+314 86 1.50011e+011
+315 165 1.4988e+011
+326 427 1.49601e+011
+166 20 1.48949e+011
+112 393 1.48873e+011
+169 238 1.48445e+011
+166 287 1.48182e+011
+497 64 1.48131e+011
+312 81 1.4796e+011
+527 40 1.47898e+011
+259 236 1.47456e+011
+413 100 1.46809e+011
+244 164 1.46738e+011
+477 182 1.46697e+011
+532 268 1.46676e+011
+565 60 1.46612e+011
+282 119 1.46572e+011
+376 7 1.46479e+011
+282 221 1.46392e+011
+347 350 1.4632e+011
+554 201 1.46254e+011
+31 8 1.46152e+011
+130 2 1.46141e+011
+383 146 1.46061e+011
+312 77 1.46036e+011
+297 296 1.45866e+011
+226 295 1.45405e+011
+244 72 1.45395e+011
+285 404 1.45324e+011
+448 138 1.44968e+011
+225 72 1.44964e+011
+342 464 1.44826e+011
+400 273 1.4479e+011
+404 122 1.44734e+011
+332 130 1.44708e+011
+362 370 1.44585e+011
+404 120 1.44275e+011
+276 393 1.43838e+011
+122 4 1.43672e+011
+260 250 1.43665e+011
+110 96 1.43555e+011
+560 19 1.43357e+011
+509 455 1.43259e+011
+498 119 1.43099e+011
+250 313 1.42978e+011
+497 228 1.42808e+011
+271 365 1.42698e+011
+177 106 1.42658e+011
+160 183 1.42483e+011
+234 18 1.42454e+011
+479 181 1.42359e+011
+116 43 1.42354e+011
+352 161 1.4232e+011
+489 22 1.42083e+011
+195 126 1.41879e+011
+486 84 1.41806e+011
+36 147 1.41491e+011
+221 181 1.41435e+011
+164 241 1.41262e+011
+422 46 1.41015e+011
+510 121 1.40844e+011
+109 340 1.40843e+011
+234 346 1.40825e+011
+55 66 1.40815e+011
+288 212 1.40578e+011
+174 57 1.40157e+011
+503 265 1.39969e+011
+215 144 1.39905e+011
+271 293 1.39672e+011
+281 51 1.39657e+011
+419 180 1.39651e+011
+13 206 1.39444e+011
+364 255 1.39095e+011
+180 394 1.39049e+011
+148 396 1.39003e+011
+283 71 1.38832e+011
+373 163 1.3821e+011
+300 265 1.38172e+011
+382 338 1.37702e+011
+550 380 1.37699e+011
+580 52 1.37677e+011
+77 81 1.37523e+011
+49 159 1.37353e+011
+165 202 1.37231e+011
+483 339 1.37208e+011
+55 28 1.37116e+011
+137 57 1.36592e+011
+91 389 1.3638e+011
+59 219 1.36105e+011
+468 125 1.36034e+011
+389 139 1.35968e+011
+522 122 1.35804e+011
+371 393 1.35798e+011
+537 267 1.35672e+011
+401 182 1.35664e+011
+131 217 1.35562e+011
+395 260 1.35295e+011
+441 24 1.34721e+011
+363 181 1.34702e+011
+138 111 1.34667e+011
+542 18 1.34515e+011
+561 227 1.34367e+011
+331 107 1.34346e+011
+529 191 1.34101e+011
+435 182 1.34007e+011
+433 148 1.33939e+011
+481 82 1.3393e+011
+422 44 1.33884e+011
+175 75 1.33768e+011
+142 183 1.33533e+011
+224 419 1.33494e+011
+412 23 1.33427e+011
+537 459 1.33297e+011
+305 107 1.33289e+011
+535 267 1.32928e+011
+130 77 1.32504e+011
+136 202 1.32344e+011
+54 6 1.32308e+011
+315 160 1.32301e+011
+228 129 1.32233e+011
+174 114 1.32211e+011
+76 7 1.32077e+011
+418 178 1.31902e+011
+151 447 1.31469e+011
+451 101 1.31451e+011
+184 138 1.3127e+011
+176 39 1.3091e+011
+214 57 1.30903e+011
+390 141 1.30542e+011
+329 9 1.30174e+011
+432 112 1.30159e+011
+22 60 1.30079e+011
+381 356 1.29988e+011
+462 241 1.29913e+011
+396 161 1.29353e+011
+303 209 1.29206e+011
+494 22 1.29172e+011
+351 339 1.29168e+011
+474 262 1.28794e+011
+285 240 1.28719e+011
+561 321 1.28712e+011
+389 327 1.28457e+011
+35 10 1.28393e+011
+509 361 1.28348e+011
+270 67 1.28313e+011
+408 352 1.2785e+011
+513 340 1.27838e+011
+266 14 1.27666e+011
+478 4 1.27633e+011
+476 4 1.27376e+011
+452 205 1.27338e+011
+469 237 1.27295e+011
+304 193 1.27195e+011
+177 75 1.27114e+011
+339 164 1.27054e+011
+577 18 1.27047e+011
+572 121 1.26988e+011
+35 144 1.26851e+011
+223 114 1.2677e+011
+192 359 1.26769e+011
+169 55 1.26527e+011
+292 16 1.26515e+011
+264 445 1.26444e+011
+243 189 1.26101e+011
+228 184 1.2592e+011
+334 89 1.2581e+011
+300 245 1.25767e+011
+441 98 1.25347e+011
+440 64 1.25271e+011
+199 84 1.25268e+011
+164 243 1.25214e+011
+438 339 1.25088e+011
+424 397 1.24762e+011
+225 180 1.24689e+011
+277 370 1.24528e+011
+359 162 1.24467e+011
+538 185 1.24398e+011
+371 67 1.2404e+011
+237 131 1.24015e+011
+465 394 1.23659e+011
+264 298 1.23524e+011
+508 5 1.23268e+011
+454 339 1.23149e+011
+394 158 1.23117e+011
+379 354 1.23103e+011
+220 178 1.23094e+011
+494 456 1.22998e+011
+34 236 1.22933e+011
+422 320 1.22807e+011
+419 165 1.22657e+011
+48 133 1.22555e+011
+355 106 1.22194e+011
+539 40 1.22175e+011
+141 325 1.22103e+011
+507 204 1.2203e+011
+217 279 1.21878e+011
+109 60 1.21774e+011
+163 108 1.21648e+011
+466 40 1.21538e+011
+529 104 1.21514e+011
+182 110 1.2147e+011
+433 339 1.21342e+011
+387 242 1.21331e+011
+503 360 1.21181e+011
+318 312 1.21084e+011
+303 156 1.20938e+011
+549 183 1.20818e+011
+436 390 1.20612e+011
+85 476 1.20612e+011
+484 181 1.20293e+011
+478 12 1.2019e+011
+273 70 1.20112e+011
+186 342 1.20057e+011
+65 213 1.20049e+011
+52 290 1.19991e+011
+153 447 1.19921e+011
+73 185 1.19902e+011
+118 61 1.19875e+011
+170 117 1.19795e+011
+294 14 1.19725e+011
+451 83 1.19699e+011
+458 265 1.19652e+011
+162 128 1.1962e+011
+153 301 1.19532e+011
+277 137 1.1943e+011
+435 88 1.19393e+011
+49 152 1.19309e+011
+357 126 1.19288e+011
+179 18 1.19265e+011
+259 142 1.19254e+011
+474 202 1.19252e+011
+512 168 1.19195e+011
+169 240 1.19153e+011
+439 181 1.19055e+011
+317 165 1.19026e+011
+559 227 1.18995e+011
+115 76 1.18901e+011
+261 439 1.18826e+011
+255 182 1.18718e+011
+338 391 1.18611e+011
+302 103 1.18381e+011
+408 162 1.18368e+011
+43 62 1.18193e+011
+239 421 1.18115e+011
+219 291 1.18042e+011
+336 426 1.17996e+011
+529 32 1.17946e+011
+135 172 1.17922e+011
+5 13 1.17834e+011
+295 296 1.17732e+011
+445 126 1.17717e+011
+126 189 1.17581e+011
+452 375 1.1754e+011
+118 96 1.17397e+011
+329 107 1.17395e+011
+548 222 1.17269e+011
+37 144 1.1697e+011
+467 237 1.16798e+011
+102 358 1.16643e+011
+290 183 1.16641e+011
+514 99 1.16481e+011
+324 143 1.16472e+011
+162 20 1.16278e+011
+525 40 1.16276e+011
+271 71 1.16223e+011
+118 59 1.16089e+011
+507 178 1.16011e+011
+266 259 1.15904e+011
+501 265 1.15764e+011
+404 338 1.15744e+011
+83 3 1.15711e+011
+91 291 1.15568e+011
+541 209 1.15541e+011
+271 52 1.15414e+011
+133 427 1.15084e+011
+510 223 1.15016e+011
+560 17 1.1485e+011
+282 53 1.14666e+011
+424 336 1.14661e+011
+428 181 1.14646e+011
+221 114 1.14619e+011
+124 189 1.14517e+011
+486 58 1.1451e+011
+258 34 1.14383e+011
+513 122 1.14282e+011
+154 299 1.14093e+011
+163 168 1.14072e+011
+436 339 1.1396e+011
+24 65 1.13955e+011
+537 140 1.1394e+011
+140 203 1.13807e+011
+544 210 1.13755e+011
+92 21 1.13626e+011
+446 352 1.13537e+011
+150 114 1.13394e+011
+436 385 1.13391e+011
+358 336 1.1339e+011
+434 398 1.13274e+011
+439 149 1.13219e+011
+241 58 1.13026e+011
+234 261 1.12956e+011
+487 357 1.12891e+011
+524 348 1.12671e+011
+210 18 1.12554e+011
+512 221 1.12498e+011
+411 46 1.12174e+011
+132 130 1.12044e+011
+101 58 1.1193e+011
+265 72 1.11796e+011
+110 43 1.11724e+011
+189 180 1.11695e+011
+281 49 1.11687e+011
+36 140 1.11677e+011
+203 257 1.11621e+011
+82 134 1.11587e+011
+223 239 1.11458e+011
+272 296 1.11165e+011
+29 28 1.10899e+011
+367 144 1.10701e+011
+77 83 1.10609e+011
+278 189 1.10499e+011
+292 28 1.10482e+011
+137 98 1.104e+011
+363 355 1.10324e+011
+129 429 1.10149e+011
+390 161 1.10106e+011
+419 167 1.0999e+011
+120 51 1.09967e+011
+438 123 1.09734e+011
+96 125 1.09634e+011
+150 151 1.09514e+011
+210 153 1.09409e+011
+38 10 1.0934e+011
+479 263 1.09247e+011
+508 141 1.09166e+011
+137 145 1.09124e+011
+157 93 1.09013e+011
+356 267 1.09004e+011
+233 200 1.08804e+011
+421 6 1.08554e+011
+466 392 1.08471e+011
+394 222 1.08455e+011
+287 34 1.08434e+011
+63 9 1.08384e+011
+500 42 1.0834e+011
+57 331 1.08328e+011
+387 10 1.08108e+011
+350 323 1.08014e+011
+37 61 1.07944e+011
+546 183 1.07938e+011
+110 265 1.07929e+011
+113 356 1.07908e+011
+348 240 1.07893e+011
+306 88 1.07839e+011
+134 72 1.07753e+011
+380 338 1.07733e+011
+184 184 1.0767e+011
+379 107 1.07628e+011
+395 354 1.07623e+011
+168 96 1.07557e+011
+330 202 1.07535e+011
+569 38 1.07489e+011
+205 162 1.07386e+011
+58 254 1.0738e+011
+430 2 1.07319e+011
+281 371 1.07228e+011
+392 142 1.07162e+011
+32 218 1.07104e+011
+511 128 1.068e+011
+171 56 1.06608e+011
+427 5 1.06212e+011
+347 392 1.061e+011
+116 220 1.06079e+011
+484 154 1.06077e+011
+515 2 1.06024e+011
+355 126 1.05992e+011
+332 255 1.05977e+011
+261 238 1.05964e+011
+474 23 1.05867e+011
+172 449 1.0573e+011
+423 5 1.05705e+011
+236 92 1.05475e+011
+541 13 1.05281e+011
+71 410 1.05227e+011
+335 240 1.05116e+011
+217 55 1.05088e+011
+253 74 1.05044e+011
+135 236 1.04888e+011
+116 391 1.04753e+011
+528 184 1.04575e+011
+184 342 1.04522e+011
+514 44 1.04383e+011
+111 41 1.04378e+011
+100 221 1.04329e+011
+309 33 1.04294e+011
+78 196 1.04289e+011
+240 73 1.04232e+011
+398 357 1.04208e+011
+543 130 1.04124e+011
+81 131 1.04098e+011
+358 143 1.0391e+011
+458 3 1.03763e+011
+166 114 1.03744e+011
+244 217 1.03725e+011
+3 381 1.03643e+011
+72 97 1.03609e+011
+267 131 1.03542e+011
+545 5 1.03471e+011
+143 187 1.0329e+011
+96 148 1.02697e+011
+526 171 1.02693e+011
+292 147 1.02646e+011
+573 333 1.02594e+011
+292 311 1.02589e+011
+327 320 1.02466e+011
+536 138 1.02404e+011
+279 126 1.02401e+011
+209 136 1.02321e+011
+483 83 1.02237e+011
+354 26 1.02088e+011
+164 359 1.02066e+011
+362 397 1.01828e+011
+480 128 1.01805e+011
+448 340 1.01451e+011
+187 109 1.0132e+011
+304 363 1.01194e+011
+192 139 1.01191e+011
+518 163 1.01187e+011
+543 252 1.01049e+011
+197 130 1.01035e+011
+269 51 1.00931e+011
+474 4 1.00887e+011
+274 206 1.00834e+011
+205 127 1.00787e+011
+172 108 1.00715e+011
+59 289 1.00709e+011
+388 282 1.00694e+011
+230 263 1.0068e+011
+263 71 1.00628e+011
+217 208 1.0059e+011
+577 178 1.00506e+011
+459 123 1.00467e+011
+479 451 1.00465e+011
+262 393 1.0042e+011
+162 216 1.00262e+011
+191 217 1.002e+011
+36 298 1.00113e+011
+102 234 9.99555e+010
+237 221 9.99489e+010
+423 203 9.98984e+010
+136 176 9.98466e+010
+25 200 9.98235e+010
+494 164 9.97998e+010
+41 297 9.97992e+010
+155 197 9.97372e+010
+317 107 9.96472e+010
+158 1 9.94626e+010
+138 23 9.90874e+010
+447 24 9.89813e+010
+2 155 9.8956e+010
+479 179 9.88607e+010
+470 419 9.88302e+010
+34 298 9.87628e+010
+207 417 9.87572e+010
+108 183 9.87055e+010
+513 223 9.86775e+010
+161 124 9.86681e+010
+542 42 9.84651e+010
+310 31 9.82649e+010
+424 334 9.82293e+010
+359 166 9.81718e+010
+449 178 9.81639e+010
+267 31 9.81348e+010
+390 19 9.8077e+010
+579 50 9.8041e+010
+220 149 9.80307e+010
+510 300 9.79638e+010
+375 299 9.78488e+010
+191 56 9.78339e+010
+477 402 9.76679e+010
+345 241 9.74889e+010
+268 14 9.72816e+010
+5 66 9.7277e+010
+269 105 9.72484e+010
+474 245 9.70966e+010
+137 128 9.70703e+010
+263 167 9.69953e+010
+594 19 9.69695e+010
+277 145 9.68864e+010
+126 113 9.68778e+010
+507 456 9.68615e+010
+369 338 9.68369e+010
+154 93 9.67895e+010
+445 6 9.67557e+010
+335 93 9.67211e+010
+454 263 9.66188e+010
+493 102 9.65791e+010
+367 85 9.65347e+010
+256 150 9.65294e+010
+462 394 9.64657e+010
+544 91 9.64574e+010
+58 103 9.62071e+010
+361 9 9.61023e+010
+364 407 9.60834e+010
+139 2 9.60435e+010
+353 106 9.57754e+010
+550 383 9.5703e+010
+196 192 9.56917e+010
+172 202 9.56913e+010
+175 106 9.56371e+010
+179 106 9.55064e+010
+40 217 9.54403e+010
+484 361 9.53068e+010
+360 216 9.5284e+010
+70 131 9.52624e+010
+535 18 9.52578e+010
+18 342 9.51953e+010
+104 199 9.51292e+010
+492 182 9.5078e+010
+418 85 9.5014e+010
+434 156 9.49881e+010
+276 391 9.49139e+010
+256 34 9.48966e+010
+194 110 9.47035e+010
+498 70 9.46886e+010
+540 165 9.46589e+010
+281 142 9.45623e+010
+259 221 9.43936e+010
+281 35 9.4297e+010
+63 132 9.42759e+010
+388 221 9.42364e+010
+219 126 9.4148e+010
+460 395 9.41344e+010
+422 397 9.41203e+010
+445 453 9.40267e+010
+183 133 9.40104e+010
+85 196 9.38638e+010
+182 201 9.37493e+010
+252 153 9.35187e+010
+308 147 9.34967e+010
+59 28 9.3483e+010
+133 238 9.34519e+010
+229 131 9.34325e+010
+242 97 9.34308e+010
+121 128 9.34021e+010
+443 319 9.33475e+010
+117 76 9.33044e+010
+307 362 9.3269e+010
+515 142 9.32618e+010
+452 337 9.32065e+010
+513 295 9.3171e+010
+326 296 9.31672e+010
+604 121 9.30464e+010
+39 309 9.30203e+010
+184 118 9.2932e+010
+572 449 9.29218e+010
+261 329 9.28972e+010
+582 18 9.28201e+010
+529 41 9.2779e+010
+276 52 9.26863e+010
+161 133 9.26703e+010
+263 443 9.26385e+010
+432 83 9.24122e+010
+90 321 9.24075e+010
+425 180 9.22002e+010
+261 296 9.20444e+010
+217 126 9.18857e+010
+502 143 9.18062e+010
+304 216 9.17792e+010
+498 68 9.16652e+010
+246 294 9.16265e+010
+76 96 9.14524e+010
+333 240 9.14481e+010
+212 152 9.14015e+010
+87 209 9.13882e+010
+306 354 9.12603e+010
+135 139 9.12228e+010
+406 122 9.11477e+010
+187 99 9.11368e+010
+508 2 9.10333e+010
+6 9 9.09382e+010
+208 154 9.09055e+010
+152 308 9.08942e+010
+149 39 9.08751e+010
+446 145 9.08515e+010
+353 424 9.08149e+010
+259 202 9.07781e+010
+218 145 9.07625e+010
+245 402 9.05576e+010
+51 153 9.0528e+010
+452 161 9.05023e+010
+569 203 9.04615e+010
+460 40 9.04555e+010
+188 107 9.0398e+010
+450 442 9.03468e+010
+208 449 9.03304e+010
+37 138 9.03031e+010
+512 349 9.01837e+010
+179 274 9.01238e+010
+293 297 9.0077e+010
+449 82 9.00669e+010
+374 241 9.00471e+010
+131 73 8.99731e+010
+296 49 8.99514e+010
+464 26 8.98612e+010
+453 358 8.98574e+010
+175 189 8.97828e+010
+563 62 8.97582e+010
+514 335 8.97522e+010
+497 342 8.96716e+010
+138 185 8.96628e+010
+523 182 8.96496e+010
+203 347 8.9403e+010
+173 2 8.93128e+010
+160 98 8.9308e+010
+252 10 8.92898e+010
+261 34 8.91629e+010
+323 425 8.91509e+010
+447 6 8.90993e+010
+95 340 8.90217e+010
+60 148 8.88971e+010
+479 176 8.88939e+010
+396 104 8.88402e+010
+193 171 8.88225e+010
+380 122 8.87837e+010
+345 109 8.87248e+010
+247 205 8.87244e+010
+175 2 8.86987e+010
+124 272 8.86899e+010
+263 403 8.86893e+010
+418 414 8.85754e+010
+286 53 8.85543e+010
+188 146 8.85221e+010
+533 161 8.83333e+010
+541 122 8.82635e+010
+335 49 8.82568e+010
+293 333 8.82435e+010
+511 211 8.81617e+010
+280 111 8.80927e+010
+436 90 8.80359e+010
+355 24 8.80266e+010
+565 18 8.79903e+010
+360 260 8.7966e+010
+273 52 8.79646e+010
+143 3 8.795e+010
+48 256 8.79384e+010
+270 55 8.78689e+010
+496 455 8.78424e+010
+473 355 8.76904e+010
+365 251 8.75822e+010
+158 237 8.75723e+010
+263 311 8.73415e+010
+482 333 8.71859e+010
+366 142 8.71824e+010
+344 166 8.71216e+010
+36 201 8.70125e+010
+246 327 8.69789e+010
+512 140 8.69413e+010
+50 11 8.69285e+010
+524 184 8.68333e+010
+202 392 8.67979e+010
+67 337 8.67686e+010
+270 221 8.67361e+010
+129 168 8.66936e+010
+537 121 8.66811e+010
+511 205 8.65898e+010
+526 422 8.64998e+010
+281 386 8.64898e+010
+242 100 8.64849e+010
+232 15 8.64339e+010
+439 394 8.63954e+010
+313 83 8.63792e+010
+129 217 8.63787e+010
+148 163 8.63126e+010
+29 254 8.62988e+010
+378 338 8.62613e+010
+93 255 8.62242e+010
+526 23 8.61749e+010
+422 333 8.60309e+010
+220 151 8.59923e+010
+479 404 8.59841e+010
+191 54 8.59404e+010
+355 13 8.58583e+010
+213 123 8.58312e+010
+221 125 8.58183e+010
+400 271 8.57918e+010
+389 333 8.5704e+010
+167 325 8.56305e+010
+432 122 8.56161e+010
+304 180 8.55827e+010
+332 164 8.55113e+010
+189 206 8.54465e+010
+398 412 8.54246e+010
+127 40 8.54223e+010
+252 72 8.54113e+010
+313 71 8.53009e+010
+518 203 8.52971e+010
+560 231 8.52858e+010
+560 272 8.52673e+010
+384 26 8.52653e+010
+403 7 8.52403e+010
+112 264 8.51778e+010
+562 223 8.51734e+010
+425 43 8.51712e+010
+186 182 8.51218e+010
+482 331 8.50778e+010
+373 76 8.50496e+010
+93 291 8.49767e+010
+377 299 8.48853e+010
+220 419 8.48701e+010
+247 258 8.48408e+010
+522 124 8.47713e+010
+248 191 8.47514e+010
+577 50 8.45565e+010
+74 96 8.4554e+010
+561 225 8.44913e+010
+297 275 8.44868e+010
+101 197 8.44831e+010
+379 352 8.44643e+010
+491 1 8.42902e+010
+156 74 8.42721e+010
+318 147 8.41873e+010
+272 281 8.41456e+010
+319 167 8.39807e+010
+266 139 8.39524e+010
+208 421 8.39404e+010
+250 72 8.39284e+010
+105 39 8.39002e+010
+489 42 8.38973e+010
+248 219 8.38482e+010
+279 198 8.38115e+010
+579 79 8.378e+010
+148 21 8.37732e+010
+469 123 8.36878e+010
+274 281 8.36847e+010
+510 142 8.36693e+010
+548 59 8.36497e+010
+487 205 8.36033e+010
+94 5 8.34962e+010
+113 176 8.33992e+010
+32 237 8.33836e+010
+438 162 8.3372e+010
+490 183 8.33364e+010
+167 150 8.33187e+010
+376 66 8.32914e+010
+226 15 8.31878e+010
+285 263 8.31585e+010
+47 79 8.31333e+010
+195 17 8.3096e+010
+259 71 8.30867e+010
+533 341 8.30861e+010
+463 100 8.30579e+010
+171 96 8.30408e+010
+575 177 8.29576e+010
+471 262 8.29106e+010
+200 416 8.2868e+010
+44 81 8.2851e+010
+510 168 8.28227e+010
+589 309 8.28037e+010
+315 163 8.27973e+010
+446 377 8.27945e+010
+124 94 8.27651e+010
+311 334 8.27518e+010
+146 160 8.25897e+010
+373 87 8.24436e+010
+165 217 8.22652e+010
+210 445 8.22494e+010
+543 16 8.22039e+010
+60 110 8.2156e+010
+132 25 8.21249e+010
+39 144 8.21179e+010
+84 237 8.21088e+010
+516 348 8.2044e+010
+524 171 8.201e+010
+463 161 8.20016e+010
+83 132 8.19926e+010
+208 451 8.19232e+010
+44 10 8.18636e+010
+336 391 8.18619e+010
+126 96 8.18579e+010
+483 358 8.18358e+010
+100 162 8.17092e+010
+225 297 8.16275e+010
+284 370 8.16125e+010
+280 166 8.16112e+010
+365 85 8.14833e+010
+334 368 8.13552e+010
+163 147 8.13365e+010
+410 99 8.1251e+010
+423 338 8.11961e+010
+321 103 8.118e+010
+562 70 8.1149e+010
+219 109 8.10174e+010
+297 138 8.09339e+010
+285 261 8.09323e+010
+137 138 8.09243e+010
+565 161 8.08878e+010
+372 80 8.08741e+010
+402 265 8.07877e+010
+443 355 8.07479e+010
+543 4 8.06557e+010
+198 192 8.06356e+010
+475 340 8.03586e+010
+512 126 8.03192e+010
+81 2 8.02531e+010
+290 298 8.015e+010
+344 197 8.01278e+010
+57 27 8.01151e+010
+488 120 7.9995e+010
+562 151 7.99934e+010
+325 149 7.99881e+010
+330 212 7.99818e+010
+105 37 7.99497e+010
+216 106 7.98515e+010
+574 130 7.98435e+010
+535 121 7.97212e+010
+389 420 7.96921e+010
+464 24 7.9635e+010
+383 354 7.95928e+010
+337 91 7.95402e+010
+298 108 7.95318e+010
+397 25 7.94727e+010
+99 426 7.94655e+010
+198 75 7.94052e+010
+9 476 7.93657e+010
+344 164 7.93324e+010
+363 253 7.93093e+010
+415 249 7.92081e+010
+190 146 7.91244e+010
+64 448 7.90233e+010
+197 82 7.90067e+010
+95 79 7.89737e+010
+299 397 7.8933e+010
+408 164 7.88468e+010
+241 93 7.88376e+010
+395 45 7.87884e+010
+554 244 7.87513e+010
+388 97 7.87004e+010
+305 54 7.85127e+010
+46 147 7.83588e+010
+254 76 7.83105e+010
+538 79 7.82614e+010
+95 452 7.82438e+010
+42 353 7.82408e+010
+344 276 7.82195e+010
+413 66 7.81968e+010
+321 119 7.81311e+010
+128 95 7.81247e+010
+181 33 7.81216e+010
+598 363 7.81109e+010
+150 112 7.80945e+010
+511 95 7.7948e+010
+429 88 7.7898e+010
+243 55 7.78792e+010
+157 76 7.78097e+010
+315 145 7.78039e+010
+349 337 7.77501e+010
+65 363 7.77154e+010
+31 28 7.7693e+010
+192 141 7.76815e+010
+179 359 7.76751e+010
+298 191 7.76697e+010
+164 97 7.76563e+010
+456 201 7.76548e+010
+421 315 7.76062e+010
+160 150 7.75729e+010
+29 220 7.75128e+010
+12 80 7.75028e+010
+440 66 7.74453e+010
+279 128 7.73553e+010
+397 355 7.73093e+010
+153 197 7.72957e+010
+332 295 7.72885e+010
+86 370 7.72798e+010
+179 75 7.72492e+010
+431 87 7.71691e+010
+390 133 7.71521e+010
+505 159 7.71097e+010
+254 404 7.68351e+010
+357 240 7.68052e+010
+206 293 7.67585e+010
+567 423 7.674e+010
+413 262 7.67001e+010
+531 103 7.66894e+010
+283 35 7.666e+010
+126 191 7.66003e+010
+567 161 7.65907e+010
+453 83 7.65539e+010
+510 140 7.65374e+010
+618 181 7.64906e+010
+163 135 7.64445e+010
+161 31 7.63716e+010
+299 399 7.63689e+010
+153 227 7.63613e+010
+32 100 7.63066e+010
+461 357 7.63004e+010
+65 252 7.62788e+010
+204 293 7.62538e+010
+129 309 7.61354e+010
+521 344 7.61153e+010
+431 339 7.60879e+010
+452 43 7.60635e+010
+531 40 7.60173e+010
+125 329 7.59957e+010
+44 121 7.59828e+010
+92 8 7.59602e+010
+267 33 7.58994e+010
+396 21 7.58672e+010
+407 81 7.58431e+010
+55 303 7.58348e+010
+187 220 7.57381e+010
+433 240 7.57233e+010
+400 104 7.56671e+010
+177 113 7.54459e+010
+283 80 7.54417e+010
+141 391 7.53469e+010
+19 65 7.53316e+010
+228 92 7.53156e+010
+525 381 7.52686e+010
+412 469 7.52323e+010
+303 406 7.52176e+010
+303 211 7.52127e+010
+547 246 7.52118e+010
+75 375 7.51493e+010
+372 74 7.51409e+010
+406 199 7.50911e+010
+415 83 7.50425e+010
+194 135 7.49642e+010
+247 346 7.49366e+010
+252 222 7.48965e+010
+342 136 7.48438e+010
+144 327 7.48413e+010
+20 67 7.4825e+010
+349 9 7.48053e+010
+63 206 7.47984e+010
+317 230 7.47796e+010
+352 318 7.47464e+010
+259 163 7.47069e+010
+267 70 7.46808e+010
+262 219 7.4666e+010
+61 9 7.46461e+010
+220 147 7.45588e+010
+102 294 7.45278e+010
+342 314 7.44466e+010
+38 170 7.44278e+010
+557 302 7.442e+010
+104 163 7.44134e+010
+172 166 7.43761e+010
+334 370 7.43381e+010
+498 20 7.43203e+010
+267 296 7.42857e+010
+371 84 7.4265e+010
+267 294 7.41441e+010
+490 181 7.41348e+010
+364 333 7.40832e+010
+351 363 7.40439e+010
+189 202 7.39408e+010
+400 265 7.39404e+010
+42 10 7.39042e+010
+433 303 7.38987e+010
+479 294 7.38704e+010
+389 203 7.3748e+010
+246 106 7.36438e+010
+253 365 7.35019e+010
+338 220 7.34969e+010
+464 28 7.34611e+010
+378 182 7.34467e+010
+290 264 7.33946e+010
+117 132 7.33803e+010
+363 129 7.32855e+010
+362 360 7.32024e+010
+473 120 7.31668e+010
+93 477 7.31444e+010
+346 47 7.30308e+010
+310 90 7.30172e+010
+469 262 7.29867e+010
+128 238 7.29213e+010
+62 135 7.28829e+010
+358 282 7.28263e+010
+49 164 7.28015e+010
+156 307 7.27969e+010
+127 26 7.27728e+010
+165 154 7.27482e+010
+39 406 7.27112e+010
+96 257 7.26709e+010
+176 185 7.26345e+010
+513 261 7.254e+010
+133 78 7.25179e+010
+108 109 7.23985e+010
+530 364 7.23359e+010
+196 343 7.22945e+010
+94 198 7.22694e+010
+385 450 7.21421e+010
+592 107 7.21207e+010
+281 394 7.2114e+010
+243 167 7.20284e+010
+360 242 7.19895e+010
+571 269 7.19883e+010
+303 443 7.19748e+010
+379 336 7.19686e+010
+303 52 7.19484e+010
+217 165 7.19404e+010
+109 358 7.19242e+010
+230 261 7.19012e+010
+145 255 7.18153e+010
+305 148 7.17604e+010
+201 317 7.16925e+010
+235 198 7.16873e+010
+530 24 7.16807e+010
+154 57 7.16429e+010
+525 121 7.16137e+010
+113 204 7.15739e+010
+485 236 7.15558e+010
+248 328 7.15185e+010
+131 149 7.15027e+010
+191 130 7.14912e+010
+591 103 7.14592e+010
+495 141 7.14512e+010
+369 145 7.14325e+010
+108 427 7.13649e+010
+168 242 7.13543e+010
+475 239 7.13001e+010
+484 161 7.12609e+010
+329 102 7.12524e+010
+542 216 7.12523e+010
+327 341 7.11634e+010
+412 220 7.11343e+010
+109 134 7.10735e+010
+126 251 7.10654e+010
+200 111 7.10476e+010
+496 160 7.10368e+010
+83 404 7.09183e+010
+230 148 7.0886e+010
+320 30 7.0872e+010
+344 341 7.08448e+010
+559 303 7.08004e+010
+510 102 7.07892e+010
+285 242 7.0731e+010
+216 172 7.06949e+010
+448 64 7.06319e+010
+571 422 7.06264e+010
+52 288 7.06182e+010
+304 103 7.06023e+010
+367 2 7.05983e+010
+201 166 7.05925e+010
+191 314 7.05841e+010
+574 39 7.05131e+010
+105 430 7.04841e+010
+381 47 7.04649e+010
+470 202 7.04164e+010
+337 240 7.04151e+010
+531 240 7.04005e+010
+85 180 7.03697e+010
+311 298 7.03321e+010
+259 228 7.03046e+010
+211 33 7.02394e+010
+286 158 7.0197e+010
+278 52 7.01861e+010
+252 422 7.01632e+010
+274 76 7.00926e+010
+88 230 7.00668e+010
+528 161 6.9985e+010
+383 89 6.99696e+010
+461 221 6.99306e+010
+367 106 6.9908e+010
+398 142 6.99065e+010
+520 63 6.9898e+010
+366 95 6.98747e+010
+510 98 6.98688e+010
+501 21 6.98292e+010
+224 154 6.97935e+010
+245 88 6.97839e+010
+77 375 6.97677e+010
+261 72 6.97584e+010
+80 39 6.97406e+010
+262 391 6.9713e+010
+245 385 6.97102e+010
+210 422 6.9705e+010
+493 141 6.96965e+010
+42 97 6.96706e+010
+163 249 6.9642e+010
+347 297 6.96285e+010
+136 93 6.96224e+010
+227 258 6.95708e+010
+301 188 6.95227e+010
+45 131 6.95175e+010
+263 250 6.95053e+010
+128 166 6.94768e+010
+90 377 6.94728e+010
+398 317 6.94524e+010
+343 351 6.94269e+010
+433 396 6.93144e+010
+130 239 6.92588e+010
+44 476 6.92221e+010
+279 194 6.91793e+010
+323 149 6.9172e+010
+270 91 6.90934e+010
+527 425 6.90741e+010
+383 325 6.9038e+010
+170 199 6.89832e+010
+282 135 6.89614e+010
+488 181 6.8952e+010
+153 231 6.89073e+010
+438 42 6.88249e+010
+422 328 6.87687e+010
+107 220 6.87374e+010
+146 452 6.87314e+010
+207 159 6.86712e+010
+562 17 6.86035e+010
+143 395 6.85908e+010
+299 262 6.84413e+010
+343 7 6.84161e+010
+408 98 6.83731e+010
+64 27 6.83708e+010
+469 142 6.83553e+010
+273 353 6.83154e+010
+192 326 6.82777e+010
+292 348 6.82312e+010
+158 164 6.81897e+010
+510 253 6.81323e+010
+375 225 6.81312e+010
+328 66 6.81147e+010
+76 268 6.80908e+010
+502 62 6.79646e+010
+492 456 6.78777e+010
+282 351 6.78754e+010
+298 332 6.78536e+010
+18 118 6.7839e+010
+133 376 6.78341e+010
+435 279 6.78011e+010
+222 214 6.77973e+010
+406 142 6.77864e+010
+280 109 6.77856e+010
+491 470 6.77476e+010
+120 220 6.77192e+010
+505 382 6.76882e+010
+154 75 6.76273e+010
+64 276 6.75823e+010
+535 182 6.7514e+010
+45 136 6.74507e+010
+63 230 6.74393e+010
+577 15 6.74123e+010
+182 239 6.73334e+010
+288 87 6.72341e+010
+350 86 6.72085e+010
+182 381 6.71926e+010
+434 381 6.71243e+010
+396 142 6.71139e+010
+173 20 6.70794e+010
+355 334 6.70766e+010
+258 200 6.7058e+010
+232 399 6.70502e+010
+562 158 6.70345e+010
+237 149 6.70223e+010
+409 281 6.70084e+010
+471 144 6.69604e+010
+419 314 6.68159e+010
+196 310 6.67825e+010
+441 355 6.67674e+010
+272 221 6.67275e+010
+520 163 6.66682e+010
+396 140 6.66675e+010
+522 141 6.66605e+010
+38 182 6.66474e+010
+34 97 6.66326e+010
+44 149 6.66101e+010
+301 136 6.6603e+010
+220 210 6.65808e+010
+392 243 6.65723e+010
+437 303 6.65623e+010
+324 370 6.65334e+010
+329 254 6.65296e+010
+383 181 6.65097e+010
+263 13 6.64684e+010
+451 91 6.64498e+010
+219 387 6.64466e+010
+301 107 6.64426e+010
+188 104 6.64215e+010
+365 104 6.62563e+010
+454 45 6.62354e+010
+110 168 6.62084e+010
+241 68 6.61912e+010
+186 374 6.61833e+010
+85 59 6.61658e+010
+471 121 6.61166e+010
+471 123 6.61017e+010
+575 54 6.60678e+010
+191 364 6.60555e+010
+79 271 6.60308e+010
+447 245 6.60306e+010
+260 383 6.6021e+010
+107 96 6.60139e+010
+301 86 6.60001e+010
+63 439 6.59957e+010
+257 222 6.59721e+010
+540 99 6.59682e+010
+520 362 6.59534e+010
+282 200 6.59464e+010
+274 54 6.57838e+010
+326 180 6.57814e+010
+425 124 6.56309e+010
+527 398 6.55959e+010
+468 423 6.55746e+010
+393 45 6.55449e+010
+7 65 6.5512e+010
+270 64 6.55056e+010
+30 134 6.5503e+010
+248 165 6.5477e+010
+151 196 6.54741e+010
+267 146 6.54587e+010
+58 5 6.54564e+010
+361 101 6.54349e+010
+199 328 6.54214e+010
+272 133 6.54127e+010
+416 470 6.53779e+010
+259 224 6.53666e+010
+560 81 6.53176e+010
+124 184 6.53077e+010
+103 223 6.50779e+010
+83 183 6.50635e+010
+507 14 6.50257e+010
+399 66 6.50225e+010
+11 72 6.49236e+010
+112 165 6.49138e+010
+575 141 6.48934e+010
+109 27 6.48219e+010
+241 166 6.48155e+010
+307 448 6.48117e+010
+248 403 6.48102e+010
+95 59 6.47978e+010
+245 215 6.47742e+010
+373 103 6.47141e+010
+520 77 6.46823e+010
+588 18 6.46577e+010
+174 418 6.4616e+010
+367 4 6.46084e+010
+13 202 6.45117e+010
+532 20 6.4456e+010
+251 184 6.44348e+010
+92 112 6.44023e+010
+51 377 6.43602e+010
+269 144 6.43516e+010
+344 262 6.43209e+010
+71 47 6.42549e+010
+513 180 6.41169e+010
+282 206 6.4101e+010
+304 213 6.40363e+010
+51 257 6.39669e+010
+177 18 6.39375e+010
+54 358 6.39322e+010
+141 2 6.38969e+010
+61 133 6.38578e+010
+383 123 6.38052e+010
+361 166 6.37119e+010
+175 342 6.36765e+010
+38 167 6.36469e+010
+203 397 6.35807e+010
+358 393 6.35567e+010
+451 139 6.35537e+010
+297 126 6.35527e+010
+341 108 6.34281e+010
+82 104 6.34171e+010
+216 176 6.3339e+010
+308 8 6.33137e+010
+185 171 6.32477e+010
+277 164 6.32259e+010
+57 364 6.3215e+010
+126 186 6.32067e+010
+141 175 6.32023e+010
+320 96 6.31811e+010
+303 170 6.31452e+010
+465 100 6.30977e+010
+95 284 6.30472e+010
+13 236 6.30382e+010
+586 141 6.30327e+010
+497 283 6.29909e+010
+483 327 6.29736e+010
+347 144 6.29554e+010
+191 182 6.29526e+010
+290 89 6.29429e+010
+101 361 6.2918e+010
+427 63 6.29155e+010
+544 14 6.29075e+010
+527 219 6.2902e+010
+15 215 6.28515e+010
+388 83 6.28489e+010
+278 363 6.28465e+010
+393 66 6.28422e+010
+541 11 6.28274e+010
+398 94 6.27667e+010
+577 90 6.27549e+010
+443 120 6.27239e+010
+463 356 6.27201e+010
+108 58 6.27051e+010
+544 20 6.2658e+010
+158 169 6.26538e+010
+450 23 6.2623e+010
+180 136 6.25813e+010
+561 153 6.25712e+010
+229 347 6.25551e+010
+215 248 6.23776e+010
+163 166 6.23738e+010
+113 347 6.2369e+010
+205 435 6.23537e+010
+374 394 6.235e+010
+267 16 6.2335e+010
+345 306 6.23045e+010
+480 171 6.22893e+010
+480 173 6.21753e+010
+107 78 6.21291e+010
+408 44 6.21051e+010
+172 111 6.20425e+010
+546 261 6.20375e+010
+278 417 6.20319e+010
+192 328 6.20306e+010
+151 133 6.20287e+010
+308 183 6.20212e+010
+330 11 6.20089e+010
+86 356 6.19536e+010
+32 112 6.18688e+010
+422 63 6.1836e+010
+89 22 6.18323e+010
+58 68 6.18135e+010
+125 40 6.1793e+010
+376 164 6.179e+010
+241 55 6.17386e+010
+184 201 6.16348e+010
+224 51 6.16274e+010
+420 81 6.1612e+010
+40 148 6.15521e+010
+486 361 6.15065e+010
+424 164 6.14851e+010
+533 122 6.14496e+010
+228 198 6.14371e+010
+250 422 6.14225e+010
+479 241 6.14214e+010
+33 30 6.14055e+010
+39 241 6.13667e+010
+539 220 6.13381e+010
+54 220 6.12752e+010
+154 113 6.12286e+010
+104 219 6.11517e+010
+60 204 6.11198e+010
+145 220 6.11127e+010
+562 264 6.11059e+010
+358 52 6.10994e+010
+525 79 6.10245e+010
+245 213 6.10107e+010
+485 327 6.09958e+010
+128 97 6.09889e+010
+393 217 6.09764e+010
+450 418 6.09485e+010
+432 124 6.08943e+010
+310 259 6.08874e+010
+325 340 6.0867e+010
+157 201 6.08559e+010
+333 140 6.08487e+010
+122 187 6.07683e+010
+520 141 6.07277e+010
+424 102 6.06611e+010
+506 198 6.06094e+010
+190 184 6.05738e+010
+330 62 6.05352e+010
+545 438 6.05137e+010
+295 164 6.03099e+010
+139 319 6.0257e+010
+425 203 6.02396e+010
+526 193 6.02164e+010
+88 376 6.02128e+010
+400 146 6.01413e+010
+166 126 6.01182e+010
+59 98 6.00835e+010
+32 103 6.00693e+010
+166 359 6.00432e+010
+37 288 6.00117e+010
+483 123 6.0007e+010
+90 339 5.99861e+010
+164 36 5.99742e+010
+132 255 5.98895e+010
+374 353 5.98471e+010
+175 121 5.97858e+010
+420 89 5.96079e+010
+182 138 5.9476e+010
+369 140 5.94497e+010
+165 131 5.94322e+010
+394 335 5.94153e+010
+369 84 5.94127e+010
+222 149 5.93059e+010
+495 284 5.92875e+010
+328 325 5.92519e+010
+179 94 5.92141e+010
+275 363 5.91657e+010
+394 146 5.91083e+010
+265 249 5.91033e+010
+51 64 5.90978e+010
+417 259 5.90956e+010
+297 99 5.90865e+010
+528 357 5.90532e+010
+527 382 5.90038e+010
+475 21 5.90036e+010
+161 430 5.89803e+010
+48 458 5.8933e+010
+119 54 5.89075e+010
+472 4 5.88936e+010
+589 162 5.86945e+010
+328 288 5.86917e+010
+572 328 5.86783e+010
+518 59 5.86686e+010
+79 273 5.86256e+010
+36 64 5.86136e+010
+334 435 5.86115e+010
+180 123 5.85495e+010
+102 236 5.85024e+010
+344 274 5.84515e+010
+411 339 5.84354e+010
+289 110 5.84219e+010
+498 72 5.84119e+010
+198 126 5.83513e+010
+500 223 5.83407e+010
+2 166 5.82498e+010
+46 420 5.82476e+010
+172 38 5.82325e+010
+92 5 5.8219e+010
+550 121 5.81755e+010
+218 38 5.81492e+010
+472 82 5.81322e+010
+125 413 5.80982e+010
+433 63 5.8084e+010
+218 36 5.8083e+010
+362 449 5.80418e+010
+296 89 5.8015e+010
+440 468 5.79308e+010
+25 219 5.78803e+010
+206 157 5.78311e+010
+534 393 5.78151e+010
+576 164 5.77862e+010
+308 355 5.77852e+010
+559 462 5.77636e+010
+509 114 5.76845e+010
+388 91 5.75414e+010
+441 240 5.75302e+010
+500 60 5.75259e+010
+38 219 5.75011e+010
+44 153 5.74704e+010
+212 164 5.74528e+010
+503 161 5.73792e+010
+564 158 5.73713e+010
+146 325 5.73674e+010
+188 200 5.73504e+010
+95 95 5.73485e+010
+240 194 5.73219e+010
+563 40 5.72358e+010
+464 82 5.72289e+010
+216 235 5.72159e+010
+442 66 5.72026e+010
+297 124 5.71872e+010
+311 265 5.71799e+010
+127 308 5.71163e+010
+162 74 5.70914e+010
+119 423 5.70464e+010
+134 134 5.70441e+010
+317 370 5.70343e+010
+41 116 5.70053e+010
+501 102 5.69957e+010
+222 153 5.69763e+010
+56 220 5.69341e+010
+113 349 5.69185e+010
+457 340 5.69147e+010
+89 288 5.68977e+010
+54 449 5.688e+010
+68 304 5.68612e+010
+140 317 5.68499e+010
+465 235 5.68329e+010
+209 203 5.68311e+010
+426 470 5.68257e+010
+446 64 5.68174e+010
+136 74 5.6808e+010
+358 10 5.67805e+010
+166 116 5.677e+010
+358 317 5.67186e+010
+497 141 5.66936e+010
+377 453 5.66726e+010
+99 361 5.6604e+010
+261 15 5.66004e+010
+481 166 5.65754e+010
+427 44 5.65007e+010
+361 394 5.64869e+010
+261 108 5.64551e+010
+289 397 5.64513e+010
+161 121 5.64044e+010
+579 42 5.63696e+010
+275 142 5.63343e+010
+243 419 5.6298e+010
+528 181 5.62806e+010
+122 220 5.62097e+010
+40 355 5.61539e+010
+414 299 5.61052e+010
+391 51 5.60856e+010
+211 94 5.60261e+010
+313 132 5.59967e+010
+542 2 5.59619e+010
+140 315 5.59601e+010
+315 238 5.5955e+010
+401 429 5.59395e+010
+146 86 5.59153e+010
+247 419 5.58763e+010
+114 428 5.58663e+010
+233 344 5.58263e+010
+150 2 5.58146e+010
+307 53 5.57848e+010
+259 106 5.57728e+010
+563 72 5.57556e+010
+577 81 5.57249e+010
+287 263 5.56942e+010
+597 58 5.5662e+010
+469 22 5.56613e+010
+580 215 5.56159e+010
+266 118 5.56073e+010
+164 114 5.56036e+010
+439 341 5.55717e+010
+416 377 5.55699e+010
+527 195 5.55645e+010
+367 247 5.55622e+010
+573 139 5.55579e+010
+117 428 5.55237e+010
+323 118 5.54977e+010
+580 138 5.54929e+010
+502 358 5.54776e+010
+218 177 5.54396e+010
+347 142 5.54365e+010
+94 422 5.5389e+010
+191 17 5.53438e+010
+130 396 5.5329e+010
+482 121 5.53216e+010
+565 462 5.53182e+010
+513 402 5.52793e+010
+420 132 5.52521e+010
+529 366 5.52484e+010
+276 135 5.52314e+010
+477 240 5.5224e+010
+59 372 5.52209e+010
+215 427 5.52095e+010
+444 378 5.51882e+010
+484 174 5.51663e+010
+441 120 5.51649e+010
+176 180 5.51564e+010
+154 221 5.51191e+010
+498 155 5.51189e+010
+202 7 5.51059e+010
+77 475 5.50918e+010
+289 441 5.50683e+010
+317 125 5.50145e+010
+252 424 5.49642e+010
+405 84 5.49432e+010
+410 413 5.49371e+010
+537 103 5.49355e+010
+571 333 5.49261e+010
+154 1 5.49078e+010
+472 42 5.48764e+010
+597 272 5.48273e+010
+262 217 5.47819e+010
+430 222 5.47741e+010
+189 137 5.47496e+010
+578 123 5.47035e+010
+461 100 5.46955e+010
+361 354 5.46926e+010
+561 201 5.46677e+010
+167 180 5.46544e+010
+458 241 5.45582e+010
+482 164 5.45488e+010
+476 248 5.45469e+010
+407 262 5.45437e+010
+121 239 5.44904e+010
+450 324 5.44699e+010
+294 271 5.44527e+010
+142 389 5.43753e+010
+482 173 5.42754e+010
+356 28 5.42381e+010
+279 34 5.41926e+010
+275 296 5.41847e+010
+187 257 5.41783e+010
+247 172 5.41584e+010
+90 277 5.41515e+010
+177 120 5.4149e+010
+124 82 5.41302e+010
+347 370 5.41161e+010
+69 417 5.41073e+010
+87 342 5.40781e+010
+130 129 5.40766e+010
+131 94 5.4013e+010
+444 357 5.40042e+010
+378 261 5.39991e+010
+177 331 5.39982e+010
+373 300 5.39168e+010
+346 337 5.3895e+010
+463 123 5.37693e+010
+55 294 5.37497e+010
+26 65 5.36717e+010
+274 146 5.36678e+010
+554 80 5.36328e+010
+375 355 5.35295e+010
+487 261 5.35108e+010
+368 299 5.34435e+010
+351 353 5.34308e+010
+308 90 5.34169e+010
+161 91 5.3376e+010
+474 143 5.33727e+010
+64 218 5.33328e+010
+128 130 5.33171e+010
+443 240 5.32574e+010
+250 425 5.32348e+010
+155 396 5.31987e+010
+259 230 5.31503e+010
+129 113 5.31162e+010
+418 79 5.30591e+010
+166 309 5.30324e+010
+333 415 5.30095e+010
+254 422 5.29978e+010
+152 370 5.29938e+010
+407 260 5.29401e+010
+106 2 5.29131e+010
+117 360 5.28921e+010
+225 112 5.28239e+010
+275 208 5.28196e+010
+405 221 5.28189e+010
+394 165 5.2764e+010
+185 310 5.27425e+010
+173 274 5.26838e+010
+82 106 5.26828e+010
+182 184 5.26579e+010
+485 221 5.26505e+010
+41 136 5.26492e+010
+230 178 5.26423e+010
+158 55 5.26352e+010
+309 221 5.26283e+010
+515 381 5.25895e+010
+198 167 5.25437e+010
+407 106 5.25284e+010
+403 189 5.25137e+010
+28 271 5.24863e+010
+509 137 5.24845e+010
+265 146 5.24524e+010
+541 141 5.24345e+010
+407 431 5.24213e+010
+393 184 5.23559e+010
+103 392 5.23492e+010
+180 56 5.23323e+010
+211 96 5.23288e+010
+186 107 5.23201e+010
+391 324 5.23063e+010
+201 74 5.22725e+010
+465 356 5.22553e+010
+420 362 5.22483e+010
+186 200 5.22423e+010
+72 4 5.2225e+010
+51 166 5.22232e+010
+276 130 5.22049e+010
+549 283 5.22028e+010
+290 249 5.21878e+010
+83 65 5.21692e+010
+450 166 5.21494e+010
+108 260 5.21324e+010
+148 3 5.21006e+010
+449 5 5.20912e+010
+436 43 5.20679e+010
+540 263 5.20391e+010
+271 183 5.20351e+010
+327 13 5.20251e+010
+251 257 5.20224e+010
+381 4 5.19302e+010
+200 293 5.19095e+010
+304 172 5.18488e+010
+146 164 5.18297e+010
+58 79 5.17823e+010
+346 275 5.17774e+010
+554 18 5.17252e+010
+513 376 5.17118e+010
+354 17 5.16873e+010
+384 242 5.16796e+010
+512 109 5.16753e+010
+483 286 5.16738e+010
+164 190 5.16677e+010
+515 184 5.1577e+010
+119 116 5.15488e+010
+154 21 5.15443e+010
+304 298 5.14905e+010
+187 363 5.14716e+010
+524 289 5.14437e+010
+108 148 5.14396e+010
+40 79 5.14206e+010
+266 286 5.13785e+010
+208 308 5.13705e+010
+469 24 5.13684e+010
+389 15 5.13061e+010
+438 242 5.12879e+010
+152 401 5.12789e+010
+354 238 5.12652e+010
+296 410 5.12366e+010
+250 85 5.12167e+010
+96 8 5.12004e+010
+66 272 5.11974e+010
+555 264 5.11913e+010
+58 147 5.11699e+010
+213 141 5.11483e+010
+420 116 5.11394e+010
+251 87 5.11362e+010
+87 367 5.11323e+010
+595 58 5.11271e+010
+208 185 5.11165e+010
+164 379 5.10794e+010
+520 201 5.10724e+010
+83 101 5.10641e+010
+515 120 5.10603e+010
+81 219 5.10072e+010
+572 364 5.10049e+010
+341 257 5.09946e+010
+340 89 5.0931e+010
+257 140 5.08997e+010
+262 319 5.08621e+010
+38 64 5.08259e+010
+24 185 5.08236e+010
+432 268 5.07882e+010
+547 180 5.0787e+010
+118 224 5.07715e+010
+568 383 5.07474e+010
+197 165 5.07179e+010
+335 418 5.07058e+010
+296 442 5.07024e+010
+264 128 5.06924e+010
+133 411 5.06915e+010
+536 393 5.06543e+010
+419 92 5.06361e+010
+517 81 5.05799e+010
+476 260 5.05576e+010
+499 362 5.05412e+010
+47 11 5.05313e+010
+212 219 5.05167e+010
+52 132 5.04955e+010
+323 123 5.04344e+010
+206 220 5.04333e+010
+234 158 5.03785e+010
+28 132 5.03682e+010
+157 103 5.03582e+010
+406 78 5.03308e+010
+525 278 5.02944e+010
+91 147 5.02821e+010
+198 10 5.02597e+010
+109 220 5.02479e+010
+329 57 5.02089e+010
+11 114 5.01897e+010
+304 292 5.0171e+010
+538 262 5.01029e+010
+465 354 5.00858e+010
+227 38 5.0083e+010
+391 448 5.00657e+010
+41 395 5.00496e+010
+257 250 5.004e+010
+486 42 5.00175e+010
+284 392 5.00121e+010
+408 141 4.99952e+010
+3 109 4.99908e+010
+569 183 4.99846e+010
+259 159 4.99694e+010
+349 164 4.99632e+010
+402 375 4.99611e+010
+162 150 4.99562e+010
+416 282 4.99476e+010
+162 137 4.99237e+010
+280 186 4.99219e+010
+135 101 4.98873e+010
+108 111 4.97804e+010
+264 220 4.97605e+010
+11 45 4.97515e+010
+425 122 4.97455e+010
+375 126 4.97345e+010
+203 129 4.973e+010
+343 110 4.97231e+010
+418 282 4.97105e+010
+163 31 4.9705e+010
+533 346 4.97045e+010
+530 98 4.96998e+010
+179 103 4.9682e+010
+88 183 4.96381e+010
+539 382 4.96068e+010
+475 255 4.95995e+010
+164 310 4.95954e+010
+149 138 4.95773e+010
+324 139 4.95754e+010
+497 223 4.95159e+010
+34 108 4.95137e+010
+499 261 4.95082e+010
+130 253 4.95054e+010
+402 217 4.94627e+010
+392 296 4.94297e+010
+221 84 4.94142e+010
+381 180 4.941e+010
+538 392 4.94067e+010
+255 80 4.93758e+010
+248 262 4.93658e+010
+79 77 4.9341e+010
+458 140 4.93334e+010
+168 309 4.92686e+010
+365 353 4.92521e+010
+548 44 4.92316e+010
+108 100 4.92298e+010
+151 231 4.92e+010
+175 19 4.91757e+010
+194 201 4.91689e+010
+424 197 4.91669e+010
+493 1 4.91607e+010
+458 358 4.91378e+010
+374 366 4.91259e+010
+19 318 4.91026e+010
+538 394 4.90974e+010
+316 101 4.90959e+010
+391 166 4.90799e+010
+161 397 4.90769e+010
+570 408 4.90171e+010
+465 4 4.90053e+010
+142 238 4.89827e+010
+464 140 4.89473e+010
+110 148 4.89413e+010
+496 462 4.89297e+010
+274 313 4.88306e+010
+102 308 4.88205e+010
+401 169 4.88116e+010
+36 98 4.88075e+010
+433 25 4.87795e+010
+252 193 4.86916e+010
+533 93 4.86478e+010
+461 199 4.86003e+010
+366 29 4.85842e+010
+114 374 4.85322e+010
+188 342 4.85226e+010
+360 145 4.84988e+010
+382 260 4.84946e+010
+486 242 4.84289e+010
+78 79 4.8426e+010
+232 91 4.83911e+010
+93 95 4.8353e+010
+303 54 4.835e+010
+134 93 4.83452e+010
+13 82 4.83227e+010
+369 162 4.82764e+010
+530 134 4.82756e+010
+42 24 4.82688e+010
+315 240 4.82667e+010
+347 119 4.82e+010
+219 315 4.8188e+010
+327 25 4.81497e+010
+209 315 4.81387e+010
+297 128 4.81056e+010
+119 265 4.80935e+010
+39 82 4.8088e+010
+417 450 4.80852e+010
+450 117 4.80544e+010
+454 418 4.80315e+010
+510 349 4.80065e+010
+173 162 4.80054e+010
+545 160 4.79999e+010
+274 64 4.79947e+010
+480 135 4.79796e+010
+297 257 4.79671e+010
+202 293 4.79112e+010
+344 329 4.78889e+010
+85 178 4.78867e+010
+33 39 4.78649e+010
+25 133 4.7808e+010
+81 197 4.78077e+010
+301 215 4.78024e+010
+54 44 4.77899e+010
+588 345 4.77739e+010
+511 181 4.77686e+010
+57 293 4.77442e+010
+297 182 4.77173e+010
+308 107 4.76938e+010
+181 130 4.76745e+010
+263 109 4.76568e+010
+214 132 4.76427e+010
+414 143 4.76417e+010
+526 190 4.76328e+010
+529 136 4.75007e+010
+144 432 4.74619e+010
+112 167 4.74207e+010
+189 135 4.74113e+010
+258 327 4.74091e+010
+429 6 4.7365e+010
+545 141 4.72949e+010
+344 186 4.72589e+010
+59 70 4.72427e+010
+329 390 4.72108e+010
+154 345 4.72097e+010
+408 14 4.71918e+010
+88 370 4.71902e+010
+78 59 4.71773e+010
+530 430 4.71283e+010
+152 184 4.71265e+010
+409 4 4.71253e+010
+499 263 4.7109e+010
+416 23 4.70723e+010
+250 191 4.70551e+010
+462 45 4.70263e+010
+194 212 4.70108e+010
+215 149 4.70036e+010
+503 180 4.70005e+010
+63 201 4.69926e+010
+481 369 4.69851e+010
+499 475 4.69818e+010
+284 46 4.69334e+010
+343 392 4.69123e+010
+148 130 4.68858e+010
+179 121 4.68792e+010
+407 12 4.68784e+010
+51 375 4.68699e+010
+281 132 4.6863e+010
+325 17 4.68492e+010
+6 151 4.6848e+010
+240 383 4.68433e+010
+313 107 4.68428e+010
+463 4 4.68157e+010
+147 344 4.67935e+010
+426 24 4.67906e+010
+371 190 4.6758e+010
+529 29 4.67407e+010
+410 104 4.67399e+010
+167 289 4.6725e+010
+356 447 4.67164e+010
+326 140 4.66923e+010
+546 164 4.66827e+010
+332 397 4.66759e+010
+251 247 4.66745e+010
+76 59 4.66654e+010
+70 255 4.66483e+010
+101 112 4.66424e+010
+360 313 4.66351e+010
+290 112 4.66226e+010
+392 24 4.66035e+010
+412 245 4.66027e+010
+247 180 4.65947e+010
+353 297 4.65836e+010
+333 28 4.65791e+010
+565 226 4.65766e+010
+115 130 4.65733e+010
+487 222 4.65707e+010
+207 74 4.65585e+010
+521 426 4.6537e+010
+394 142 4.65304e+010
+73 46 4.65233e+010
+544 339 4.65099e+010
+132 477 4.65099e+010
+163 105 4.65048e+010
+217 315 4.64981e+010
+36 233 4.64977e+010
+369 464 4.64927e+010
+342 162 4.6488e+010
+467 141 4.64571e+010
+361 157 4.64474e+010
+137 19 4.6444e+010
+571 384 4.64335e+010
+346 339 4.63856e+010
+306 161 4.63476e+010
+472 453 4.63193e+010
+355 296 4.6297e+010
+543 137 4.62848e+010
+54 389 4.62728e+010
+577 403 4.62232e+010
+31 39 4.62194e+010
+465 379 4.61987e+010
+386 64 4.61837e+010
+41 337 4.6054e+010
+44 83 4.60409e+010
+331 133 4.60135e+010
+509 346 4.60101e+010
+469 139 4.60055e+010
+467 118 4.59992e+010
+226 91 4.59745e+010
+274 318 4.59556e+010
+450 129 4.59452e+010
+384 111 4.58875e+010
+584 345 4.58737e+010
+189 171 4.58611e+010
+210 163 4.58576e+010
+200 126 4.58389e+010
+165 207 4.58284e+010
+91 79 4.57918e+010
+189 303 4.57711e+010
+144 236 4.57639e+010
+29 114 4.57524e+010
+519 423 4.57503e+010
+18 320 4.5673e+010
+573 423 4.5657e+010
+537 221 4.55783e+010
+176 200 4.55683e+010
+420 52 4.55646e+010
+423 316 4.55633e+010
+301 254 4.55434e+010
+358 319 4.55034e+010
+31 233 4.54768e+010
+340 28 4.54172e+010
+376 119 4.54087e+010
+427 433 4.54022e+010
+464 226 4.53967e+010
+522 77 4.53911e+010
+411 29 4.53852e+010
+289 162 4.53712e+010
+85 310 4.53499e+010
+300 276 4.53365e+010
+468 162 4.52986e+010
+146 327 4.52424e+010
+334 142 4.5241e+010
+97 197 4.52388e+010
+263 31 4.52333e+010
+133 392 4.5227e+010
+281 311 4.52166e+010
+14 434 4.51996e+010
+224 129 4.51926e+010
+480 290 4.5192e+010
+325 260 4.51845e+010
+405 164 4.5184e+010
+543 82 4.51661e+010
+104 255 4.51655e+010
+387 15 4.51479e+010
+41 120 4.51454e+010
+344 344 4.51423e+010
+132 65 4.51298e+010
+374 144 4.51278e+010
+77 29 4.51201e+010
+572 406 4.5079e+010
+437 126 4.50669e+010
+411 83 4.50573e+010
+412 414 4.50441e+010
+302 141 4.5e+010
+171 164 4.49928e+010
+109 77 4.49441e+010
+300 326 4.49116e+010
+144 179 4.48735e+010
+289 136 4.48538e+010
+273 50 4.48428e+010
+123 343 4.48423e+010
+72 165 4.4821e+010
+280 440 4.48049e+010
+435 281 4.47374e+010
+88 261 4.47362e+010
+232 183 4.46626e+010
+22 285 4.46605e+010
+292 12 4.46414e+010
+22 477 4.46346e+010
+258 240 4.46119e+010
+222 146 4.45969e+010
+292 124 4.45792e+010
+90 8 4.45653e+010
+480 142 4.45574e+010
+147 38 4.4536e+010
+84 289 4.45302e+010
+510 251 4.45027e+010
+425 63 4.44676e+010
+415 21 4.44635e+010
+315 28 4.44514e+010
+458 200 4.44278e+010
+447 120 4.44216e+010
+354 336 4.44133e+010
+179 153 4.43975e+010
+84 372 4.43913e+010
+73 60 4.43662e+010
+402 166 4.43633e+010
+559 422 4.43582e+010
+204 53 4.43579e+010
+325 315 4.4357e+010
+490 83 4.43465e+010
+148 256 4.4338e+010
+332 336 4.43071e+010
+191 167 4.42818e+010
+368 31 4.42758e+010
+534 303 4.42484e+010
+519 43 4.42422e+010
+193 145 4.42323e+010
+333 463 4.42212e+010
+461 260 4.41844e+010
+449 283 4.41576e+010
+36 112 4.41392e+010
+240 295 4.41219e+010
+396 264 4.412e+010
+95 359 4.41021e+010
+378 64 4.40907e+010
+104 183 4.40867e+010
+420 138 4.40851e+010
+205 396 4.40585e+010
+193 255 4.40423e+010
+215 402 4.40395e+010
+53 41 4.4004e+010
+105 181 4.3936e+010
+355 475 4.39274e+010
+304 174 4.39047e+010
+495 476 4.39004e+010
+583 80 4.38999e+010
+187 263 4.38939e+010
+252 238 4.38382e+010
+411 183 4.37936e+010
+266 404 4.37923e+010
+539 206 4.37855e+010
+398 169 4.37748e+010
+137 324 4.37409e+010
+258 349 4.37325e+010
+503 166 4.37047e+010
+191 255 4.36848e+010
+433 376 4.36805e+010
+418 290 4.36628e+010
+351 140 4.36278e+010
+449 349 4.36144e+010
+327 90 4.36076e+010
+46 121 4.35888e+010
+557 264 4.35676e+010
+542 457 4.3561e+010
+356 252 4.35376e+010
+416 86 4.35249e+010
+317 239 4.35098e+010
+420 283 4.34807e+010
+136 123 4.34706e+010
+43 473 4.34192e+010
+542 124 4.34153e+010
+507 281 4.3391e+010
+19 351 4.33766e+010
+464 263 4.33707e+010
+384 258 4.3359e+010
+511 80 4.33209e+010
+141 113 4.33159e+010
+294 88 4.33e+010
+58 105 4.32802e+010
+243 255 4.32274e+010
+170 131 4.3215e+010
+498 162 4.31786e+010
+95 420 4.31784e+010
+264 401 4.31657e+010
+76 127 4.3138e+010
+464 39 4.31362e+010
+312 8 4.30075e+010
+188 324 4.30069e+010
+370 29 4.29412e+010
+63 304 4.2921e+010
+254 193 4.2914e+010
+498 60 4.29043e+010
+183 310 4.28846e+010
+561 144 4.28824e+010
+31 81 4.28513e+010
+447 183 4.28331e+010
+434 224 4.28193e+010
+183 383 4.28059e+010
+470 181 4.27883e+010
+132 309 4.27542e+010
+402 219 4.27108e+010
+141 116 4.26988e+010
+178 55 4.26628e+010
+62 219 4.2629e+010
+479 85 4.25218e+010
+399 131 4.25073e+010
+265 78 4.24998e+010
+199 326 4.24946e+010
+7 201 4.24928e+010
+259 370 4.24763e+010
+51 373 4.24373e+010
+249 182 4.24173e+010
+236 295 4.2386e+010
+547 160 4.23808e+010
+326 353 4.23437e+010
+515 54 4.23431e+010
+63 182 4.23011e+010
+404 201 4.22941e+010
+331 333 4.22888e+010
+573 6 4.22801e+010
+368 29 4.2272e+010
+331 88 4.22242e+010
+459 161 4.22079e+010
+404 117 4.21893e+010
+329 142 4.2162e+010
+244 430 4.21587e+010
+277 179 4.2141e+010
+86 365 4.21189e+010
+218 284 4.2118e+010
+362 365 4.21086e+010
+583 141 4.20975e+010
+53 148 4.2083e+010
+570 375 4.20693e+010
+45 407 4.20451e+010
+363 86 4.20428e+010
+472 104 4.20425e+010
+469 302 4.20367e+010
+271 414 4.20097e+010
+534 395 4.1996e+010
+243 17 4.19891e+010
+184 347 4.19778e+010
+173 54 4.19759e+010
+499 102 4.19719e+010
+551 141 4.19651e+010
+238 190 4.19615e+010
+490 77 4.19191e+010
+398 298 4.18993e+010
+70 4 4.18786e+010
+346 200 4.18726e+010
+202 219 4.18668e+010
+430 116 4.18607e+010
+189 169 4.18539e+010
+452 45 4.17485e+010
+433 47 4.17324e+010
+127 374 4.17291e+010
+349 142 4.17177e+010
+32 65 4.16687e+010
+146 15 4.16653e+010
+143 56 4.16622e+010
+492 58 4.15919e+010
+392 405 4.15892e+010
+500 340 4.15691e+010
+129 374 4.15548e+010
+490 301 4.15431e+010
+159 90 4.1538e+010
+355 15 4.15245e+010
+217 20 4.14908e+010
+299 323 4.14576e+010
+175 139 4.14575e+010
+82 97 4.14568e+010
+589 350 4.14386e+010
+50 169 4.14365e+010
+277 238 4.14347e+010
+23 254 4.14181e+010
+221 432 4.13741e+010
+434 122 4.13704e+010
+385 90 4.13653e+010
+366 146 4.13546e+010
+467 420 4.1304e+010
+33 337 4.12989e+010
+514 364 4.12933e+010
+515 118 4.12891e+010
+146 80 4.12782e+010
+167 414 4.12487e+010
+171 113 4.11966e+010
+211 376 4.11892e+010
+222 176 4.11747e+010
+52 359 4.11669e+010
+153 233 4.11667e+010
+479 458 4.11625e+010
+569 325 4.11361e+010
+417 9 4.1124e+010
+404 113 4.1123e+010
+590 141 4.11217e+010
+584 37 4.10615e+010
+271 313 4.1056e+010
+185 238 4.10279e+010
+497 474 4.10212e+010
+486 141 4.10062e+010
+560 79 4.09994e+010
+540 218 4.09965e+010
+73 130 4.09917e+010
+123 179 4.09891e+010
+248 15 4.09668e+010
+544 175 4.0942e+010
+449 259 4.0937e+010
+183 95 4.09264e+010
+316 260 4.08626e+010
+329 59 4.08494e+010
+329 55 4.08483e+010
+187 326 4.08329e+010
+462 378 4.08318e+010
+436 105 4.08244e+010
+194 147 4.07923e+010
+177 262 4.07771e+010
+570 59 4.07702e+010
+481 243 4.0743e+010
+409 259 4.07417e+010
+337 60 4.07157e+010
+38 78 4.07154e+010
+457 375 4.06823e+010
+40 25 4.06687e+010
+316 460 4.06661e+010
+537 60 4.06647e+010
+99 96 4.06433e+010
+310 138 4.06231e+010
+144 165 4.06139e+010
+567 223 4.06072e+010
+176 273 4.05868e+010
+409 452 4.05445e+010
+421 96 4.05182e+010
+513 50 4.04983e+010
+177 162 4.04777e+010
+591 308 4.04517e+010
+70 390 4.04502e+010
+300 346 4.03975e+010
+68 256 4.03929e+010
+66 378 4.03821e+010
+42 305 4.0339e+010
+288 221 4.03345e+010
+391 475 4.03108e+010
+29 258 4.0303e+010
+398 146 4.02973e+010
+59 108 4.02941e+010
+210 258 4.02659e+010
+209 187 4.01956e+010
+549 79 4.01676e+010
+270 119 4.00785e+010
+399 17 4.00746e+010
+361 332 4.00696e+010
+158 252 4.003e+010
+59 41 4.00184e+010
+35 172 3.99938e+010
+392 164 3.99772e+010
+149 89 3.99697e+010
+113 130 3.9953e+010
+14 432 3.9953e+010
+108 131 3.99423e+010
+431 43 3.99407e+010
+477 221 3.99351e+010
+211 21 3.99215e+010
+214 161 3.99214e+010
+286 397 3.99097e+010
+299 128 3.9901e+010
+384 65 3.98991e+010
+12 30 3.98981e+010
+27 6 3.98543e+010
+235 436 3.9851e+010
+187 21 3.98507e+010
+602 274 3.98443e+010
+458 180 3.98418e+010
+371 147 3.98405e+010
+299 99 3.98212e+010
+410 417 3.98179e+010
+409 262 3.9811e+010
+266 368 3.98002e+010
+302 145 3.9797e+010
+33 143 3.97833e+010
+394 17 3.97809e+010
+467 22 3.97645e+010
+512 83 3.97621e+010
+481 48 3.97456e+010
+575 98 3.97316e+010
+161 432 3.97297e+010
+437 456 3.97223e+010
+36 114 3.97202e+010
+514 61 3.97072e+010
+574 180 3.96991e+010
+541 167 3.9693e+010
+554 221 3.96634e+010
+62 164 3.96541e+010
+250 163 3.96455e+010
+342 297 3.96453e+010
+59 374 3.96445e+010
+141 118 3.964e+010
+14 118 3.96353e+010
+90 252 3.96068e+010
+62 422 3.95954e+010
+64 283 3.95799e+010
+554 303 3.95731e+010
+195 217 3.9523e+010
+257 136 3.95172e+010
+325 118 3.95e+010
+164 324 3.94799e+010
+420 140 3.94651e+010
+267 250 3.94641e+010
+324 31 3.94393e+010
+432 163 3.94373e+010
+438 454 3.94315e+010
+147 90 3.94272e+010
+282 92 3.94259e+010
+125 149 3.94169e+010
+232 101 3.9388e+010
+456 285 3.93817e+010
+25 61 3.93794e+010
+198 28 3.93593e+010
+541 255 3.93414e+010
+4 266 3.93369e+010
+482 171 3.93188e+010
+183 315 3.93133e+010
+152 77 3.93101e+010
+36 470 3.93051e+010
+112 181 3.92914e+010
+260 367 3.92582e+010
+33 172 3.92514e+010
+579 324 3.92071e+010
+516 163 3.91588e+010
+484 141 3.91391e+010
+112 218 3.91329e+010
+305 167 3.91232e+010
+316 453 3.90896e+010
+561 325 3.90646e+010
+244 14 3.90527e+010
+85 145 3.90444e+010
+22 7 3.90379e+010
+386 336 3.90284e+010
+48 320 3.9021e+010
+3 14 3.89938e+010
+479 206 3.89586e+010
+155 129 3.89374e+010
+446 241 3.89338e+010
+234 137 3.89309e+010
+181 274 3.89243e+010
+460 302 3.89191e+010
+172 147 3.89182e+010
+164 312 3.89134e+010
+253 110 3.89072e+010
+56 235 3.88996e+010
+116 181 3.88691e+010
+40 167 3.88395e+010
+479 475 3.88335e+010
+333 282 3.88303e+010
+432 110 3.88302e+010
+174 87 3.88271e+010
+391 203 3.88186e+010
+157 316 3.88165e+010
+423 82 3.87594e+010
+102 255 3.87324e+010
+394 182 3.87125e+010
+123 59 3.86972e+010
+345 144 3.86854e+010
+348 87 3.86821e+010
+90 399 3.86799e+010
+505 418 3.86728e+010
+379 131 3.86457e+010
+180 239 3.86447e+010
+487 199 3.86177e+010
+351 10 3.8616e+010
+522 79 3.86121e+010
+576 182 3.86037e+010
+156 88 3.85945e+010
+10 219 3.85834e+010
+16 151 3.85692e+010
+481 46 3.85391e+010
+289 123 3.85345e+010
+440 125 3.84915e+010
+477 204 3.84833e+010
+335 260 3.8481e+010
+379 419 3.84684e+010
+224 123 3.84672e+010
+528 188 3.84307e+010
+487 52 3.84124e+010
+385 88 3.84017e+010
+186 144 3.83867e+010
+495 60 3.83714e+010
+140 428 3.83569e+010
+452 164 3.83492e+010
+341 392 3.83324e+010
+522 81 3.83321e+010
+312 139 3.83212e+010
+269 313 3.83025e+010
+53 60 3.82979e+010
+472 211 3.82852e+010
+326 49 3.82835e+010
+313 163 3.82428e+010
+150 202 3.82359e+010
+572 99 3.82323e+010
+2 164 3.82148e+010
+411 81 3.82133e+010
+515 56 3.81924e+010
+325 124 3.81836e+010
+168 131 3.81675e+010
+273 361 3.81605e+010
+377 461 3.81462e+010
+230 189 3.81382e+010
+367 261 3.8097e+010
+163 327 3.80654e+010
+350 412 3.80559e+010
+291 162 3.80155e+010
+146 398 3.79872e+010
+71 337 3.79619e+010
+87 395 3.79578e+010
+232 157 3.7935e+010
+232 272 3.79311e+010
+94 261 3.79288e+010
+287 422 3.78818e+010
+386 280 3.78812e+010
+279 130 3.78774e+010
+212 422 3.7867e+010
+420 83 3.78498e+010
+542 275 3.78465e+010
+243 210 3.78309e+010
+206 93 3.78192e+010
+450 445 3.77594e+010
+260 457 3.77484e+010
+465 190 3.77477e+010
+56 147 3.77312e+010
+406 181 3.77166e+010
+74 165 3.77158e+010
+190 280 3.77079e+010
+526 174 3.77021e+010
+424 26 3.77018e+010
+2 201 3.77016e+010
+264 123 3.76835e+010
+419 143 3.76722e+010
+149 231 3.76098e+010
+230 112 3.75836e+010
+20 201 3.75507e+010
+305 411 3.75439e+010
+297 144 3.75341e+010
+502 59 3.75102e+010
+38 254 3.75042e+010
+87 309 3.7474e+010
+243 368 3.74617e+010
+119 88 3.74451e+010
+496 101 3.73499e+010
+290 221 3.73466e+010
+501 82 3.73455e+010
+187 291 3.73356e+010
+579 83 3.73335e+010
+187 170 3.7332e+010
+231 345 3.73046e+010
+382 86 3.72937e+010
+181 220 3.72928e+010
+542 134 3.7287e+010
+32 17 3.72828e+010
+180 328 3.7244e+010
+112 308 3.72126e+010
+237 419 3.72094e+010
+273 279 3.72012e+010
+117 117 3.71867e+010
+520 81 3.71834e+010
+258 457 3.71756e+010
+419 95 3.71671e+010
+527 395 3.71663e+010
+120 149 3.71639e+010
+266 111 3.71606e+010
+65 58 3.71528e+010
+208 20 3.71151e+010
+457 161 3.71144e+010
+360 177 3.71111e+010
+362 124 3.71098e+010
+471 209 3.70996e+010
+8 116 3.70952e+010
+79 406 3.70944e+010
+27 118 3.70717e+010
+66 474 3.70713e+010
+52 292 3.70633e+010
+191 173 3.70488e+010
+196 239 3.70349e+010
+5 231 3.70328e+010
+274 210 3.69936e+010
+364 126 3.69903e+010
+537 159 3.69903e+010
+210 395 3.69678e+010
+226 121 3.69604e+010
+284 158 3.69385e+010
+139 394 3.69362e+010
+292 90 3.6928e+010
+340 199 3.6925e+010
+373 152 3.69142e+010
+125 220 3.6914e+010
+576 169 3.69051e+010
+565 178 3.69008e+010
+515 360 3.6898e+010
+375 282 3.68974e+010
+376 390 3.68818e+010
+432 297 3.68763e+010
+61 256 3.68753e+010
+88 244 3.68582e+010
+172 292 3.68569e+010
+317 236 3.68373e+010
+71 261 3.68335e+010
+509 440 3.67983e+010
+268 205 3.67615e+010
+78 61 3.6736e+010
+118 391 3.67281e+010
+56 105 3.6715e+010
+290 202 3.66782e+010
+343 239 3.66778e+010
+578 340 3.66732e+010
+404 143 3.66236e+010
+49 237 3.66035e+010
+79 219 3.66012e+010
+181 291 3.65873e+010
+169 359 3.6584e+010
+215 99 3.65633e+010
+65 151 3.65611e+010
+159 197 3.6558e+010
+186 303 3.654e+010
+400 221 3.65174e+010
+189 255 3.65152e+010
+344 119 3.65113e+010
+513 117 3.65073e+010
+197 77 3.64764e+010
+483 373 3.64724e+010
+498 430 3.64446e+010
+470 204 3.64092e+010
+157 129 3.64079e+010
+207 148 3.63815e+010
+244 182 3.63802e+010
+484 290 3.63554e+010
+122 446 3.63544e+010
+157 154 3.63478e+010
+498 44 3.63294e+010
+162 312 3.63209e+010
+51 60 3.63192e+010
+212 217 3.63016e+010
+259 331 3.62736e+010
+400 199 3.62676e+010
+327 129 3.62483e+010
+199 82 3.62418e+010
+190 262 3.62342e+010
+362 164 3.62325e+010
+119 109 3.62196e+010
+49 286 3.62015e+010
+180 201 3.62007e+010
+323 298 3.61718e+010
+253 273 3.61572e+010
+469 42 3.61566e+010
+194 75 3.61016e+010
+543 245 3.60888e+010
+521 97 3.6086e+010
+529 119 3.60714e+010
+409 81 3.60136e+010
+42 339 3.60124e+010
+263 224 3.60037e+010
+337 65 3.60035e+010
+349 373 3.60029e+010
+63 232 3.59851e+010
+274 329 3.59732e+010
+334 336 3.59623e+010
+415 28 3.59234e+010
+24 129 3.59202e+010
+539 225 3.58905e+010
+551 216 3.58841e+010
+596 141 3.58556e+010
+280 420 3.5845e+010
+194 165 3.58162e+010
+44 98 3.5795e+010
+174 152 3.5781e+010
+76 197 3.57752e+010
+105 408 3.57735e+010
+86 94 3.57599e+010
+454 116 3.57577e+010
+574 164 3.57435e+010
+364 116 3.57409e+010
+423 326 3.57378e+010
+171 87 3.57346e+010
+116 275 3.57313e+010
+465 220 3.57231e+010
+512 323 3.5717e+010
+381 105 3.57014e+010
+211 293 3.56961e+010
+418 257 3.56551e+010
+258 389 3.56441e+010
+295 144 3.56364e+010
+576 311 3.56232e+010
+580 54 3.56177e+010
+5 236 3.56131e+010
+520 239 3.56116e+010
+451 447 3.5598e+010
+117 164 3.55806e+010
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_3_5.txt b/test_data/harriscorners/hc_msc_0.00_0.04_3_5.txt
new file mode 100644
index 0000000..83cd942
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_3_5.txt
@@ -0,0 +1,2445 @@
+2444
+244 94 3.10864e+012
+273 366 2.99939e+012
+122 43 2.38424e+012
+330 127 2.00645e+012
+298 52 1.99983e+012
+422 181 1.93221e+012
+420 181 1.88164e+012
+84 78 1.83694e+012
+200 17 1.81141e+012
+237 19 1.78538e+012
+214 72 1.76632e+012
+122 45 1.76371e+012
+448 297 1.75554e+012
+134 214 1.72973e+012
+362 400 1.61958e+012
+485 59 1.59539e+012
+420 177 1.58521e+012
+484 23 1.57647e+012
+395 318 1.54446e+012
+124 198 1.54106e+012
+553 40 1.53717e+012
+210 55 1.53346e+012
+286 297 1.5281e+012
+423 178 1.48638e+012
+272 290 1.48372e+012
+47 27 1.47111e+012
+436 67 1.46911e+012
+317 335 1.43848e+012
+401 262 1.4377e+012
+447 397 1.42966e+012
+35 138 1.41639e+012
+175 94 1.40562e+012
+160 143 1.40173e+012
+128 2 1.39903e+012
+82 76 1.39214e+012
+303 183 1.37005e+012
+92 214 1.36373e+012
+507 122 1.36282e+012
+243 203 1.35305e+012
+544 168 1.34444e+012
+387 177 1.33373e+012
+82 28 1.33187e+012
+425 321 1.32295e+012
+343 9 1.31682e+012
+340 9 1.31449e+012
+184 36 1.31314e+012
+124 254 1.31092e+012
+542 59 1.30942e+012
+125 364 1.30847e+012
+302 176 1.30532e+012
+125 256 1.30413e+012
+436 69 1.30361e+012
+277 368 1.29523e+012
+535 241 1.29169e+012
+407 65 1.28854e+012
+195 125 1.28548e+012
+110 240 1.27177e+012
+33 137 1.27108e+012
+535 243 1.26649e+012
+253 139 1.26585e+012
+470 239 1.25814e+012
+418 8 1.25337e+012
+76 256 1.24239e+012
+2 46 1.24145e+012
+240 91 1.23899e+012
+104 62 1.23442e+012
+116 44 1.2334e+012
+508 17 1.23301e+012
+466 197 1.22631e+012
+65 235 1.22072e+012
+54 29 1.21998e+012
+154 236 1.21883e+012
+360 295 1.21782e+012
+90 198 1.21376e+012
+222 38 1.21253e+012
+88 198 1.20432e+012
+45 218 1.19727e+012
+456 282 1.19213e+012
+48 98 1.1854e+012
+393 143 1.17965e+012
+252 13 1.17883e+012
+262 440 1.1716e+012
+137 209 1.16767e+012
+154 234 1.16142e+012
+320 224 1.15885e+012
+468 239 1.15163e+012
+427 320 1.15089e+012
+282 114 1.15073e+012
+257 385 1.14991e+012
+294 15 1.149e+012
+456 280 1.14541e+012
+235 72 1.14296e+012
+174 312 1.12774e+012
+341 337 1.12667e+012
+480 297 1.12655e+012
+447 263 1.12635e+012
+397 318 1.12245e+012
+386 221 1.12138e+012
+363 297 1.12029e+012
+281 112 1.11968e+012
+138 203 1.11842e+012
+78 2 1.11577e+012
+411 163 1.11011e+012
+65 319 1.10893e+012
+65 343 1.09816e+012
+391 143 1.09685e+012
+262 201 1.09685e+012
+509 164 1.09e+012
+207 224 1.08992e+012
+515 76 1.08472e+012
+325 88 1.08147e+012
+423 45 1.08037e+012
+80 2 1.0784e+012
+332 127 1.07517e+012
+543 216 1.06605e+012
+465 240 1.0628e+012
+509 122 1.06228e+012
+110 135 1.06043e+012
+240 202 1.05514e+012
+235 162 1.05206e+012
+202 313 1.04445e+012
+207 222 1.03661e+012
+442 24 1.0363e+012
+346 10 1.03368e+012
+301 165 1.03304e+012
+207 435 1.02984e+012
+456 4 1.0296e+012
+427 119 1.02783e+012
+210 436 1.0276e+012
+523 264 1.02705e+012
+70 27 1.02489e+012
+543 365 1.02014e+012
+461 267 1.01522e+012
+131 36 1.00987e+012
+280 370 1.00688e+012
+145 310 1.00359e+012
+543 15 1.00128e+012
+308 371 1.00087e+012
+203 311 9.96943e+011
+412 256 9.95905e+011
+100 79 9.95742e+011
+82 135 9.95473e+011
+276 180 9.95207e+011
+313 76 9.94299e+011
+76 237 9.9302e+011
+196 57 9.92436e+011
+449 218 9.91408e+011
+390 58 9.88456e+011
+459 263 9.85384e+011
+281 110 9.84366e+011
+36 145 9.82922e+011
+320 315 9.81877e+011
+344 338 9.81449e+011
+101 222 9.79527e+011
+137 207 9.7697e+011
+224 182 9.76695e+011
+124 41 9.71484e+011
+372 81 9.7043e+011
+171 18 9.64019e+011
+462 278 9.62498e+011
+334 106 9.62459e+011
+174 238 9.59076e+011
+220 16 9.58172e+011
+30 8 9.56507e+011
+498 159 9.55625e+011
+138 173 9.55318e+011
+382 6 9.51401e+011
+166 241 9.46903e+011
+172 95 9.45458e+011
+401 276 9.45027e+011
+512 98 9.42574e+011
+361 335 9.39762e+011
+418 164 9.38584e+011
+562 224 9.37132e+011
+80 4 9.34201e+011
+379 68 9.33379e+011
+59 75 9.3309e+011
+390 60 9.32488e+011
+127 164 9.32304e+011
+35 9 9.29349e+011
+320 313 9.29037e+011
+325 164 9.28054e+011
+276 182 9.24646e+011
+246 206 9.21531e+011
+287 210 9.21012e+011
+221 180 9.20193e+011
+477 5 9.19881e+011
+377 318 9.14376e+011
+545 41 9.13811e+011
+383 162 9.12803e+011
+78 28 9.12544e+011
+487 59 9.1236e+011
+244 165 9.12302e+011
+45 220 9.1051e+011
+175 112 9.10187e+011
+414 255 9.09243e+011
+512 343 9.0782e+011
+564 61 9.07663e+011
+130 26 9.07503e+011
+29 237 9.07136e+011
+60 184 9.06301e+011
+152 222 9.04782e+011
+542 209 9.02677e+011
+41 63 9.00652e+011
+124 185 9.00207e+011
+465 393 8.99974e+011
+420 164 8.99963e+011
+468 237 8.99804e+011
+544 218 8.98852e+011
+282 297 8.90645e+011
+86 255 8.89477e+011
+10 101 8.89154e+011
+88 148 8.85947e+011
+380 354 8.85267e+011
+68 45 8.81568e+011
+311 150 8.78523e+011
+261 297 8.7767e+011
+519 60 8.76779e+011
+141 183 8.76659e+011
+525 20 8.76428e+011
+510 173 8.71523e+011
+230 36 8.69769e+011
+510 124 8.65275e+011
+186 217 8.6421e+011
+354 126 8.62589e+011
+334 90 8.62397e+011
+59 218 8.60358e+011
+486 358 8.55373e+011
+545 58 8.54774e+011
+390 48 8.54445e+011
+287 165 8.53283e+011
+62 60 8.52742e+011
+571 161 8.4817e+011
+128 25 8.45566e+011
+167 96 8.44933e+011
+366 7 8.44894e+011
+359 167 8.44843e+011
+237 72 8.44475e+011
+420 162 8.43685e+011
+363 251 8.43257e+011
+245 143 8.43208e+011
+551 382 8.41652e+011
+389 140 8.41632e+011
+453 203 8.41051e+011
+531 61 8.38714e+011
+78 80 8.38135e+011
+509 1 8.36274e+011
+163 216 8.35048e+011
+71 147 8.31426e+011
+528 102 8.30641e+011
+284 403 8.2932e+011
+268 53 8.28012e+011
+388 294 8.23508e+011
+209 20 8.20419e+011
+137 211 8.20114e+011
+347 178 8.18555e+011
+260 237 8.18497e+011
+433 147 8.17273e+011
+35 11 8.15949e+011
+528 193 8.14334e+011
+271 242 8.1215e+011
+177 165 8.10396e+011
+358 294 8.10038e+011
+35 175 8.06646e+011
+562 61 8.06359e+011
+336 106 8.05932e+011
+260 222 8.0579e+011
+242 71 8.0485e+011
+314 85 8.04229e+011
+484 338 8.03648e+011
+82 133 8.02663e+011
+313 150 8.0092e+011
+404 121 7.99939e+011
+233 200 7.99144e+011
+33 99 7.95473e+011
+41 217 7.93954e+011
+228 292 7.92834e+011
+423 47 7.92279e+011
+96 446 7.91173e+011
+113 345 7.91125e+011
+39 296 7.90945e+011
+211 185 7.90389e+011
+313 147 7.87705e+011
+552 384 7.87011e+011
+301 103 7.85846e+011
+410 353 7.84769e+011
+510 171 7.84505e+011
+529 24 7.83878e+011
+102 360 7.83495e+011
+38 63 7.82926e+011
+445 23 7.82207e+011
+207 450 7.81773e+011
+138 110 7.80869e+011
+332 106 7.78764e+011
+48 133 7.77534e+011
+528 39 7.7703e+011
+250 365 7.7697e+011
+488 264 7.76166e+011
+160 113 7.7427e+011
+573 141 7.74005e+011
+478 181 7.72726e+011
+113 3 7.72336e+011
+451 339 7.64617e+011
+31 270 7.62602e+011
+529 183 7.61122e+011
+369 106 7.60955e+011
+495 119 7.60535e+011
+414 6 7.60077e+011
+366 144 7.59171e+011
+458 278 7.57244e+011
+293 25 7.57146e+011
+482 82 7.56125e+011
+293 27 7.5242e+011
+185 20 7.52237e+011
+139 57 7.50325e+011
+163 214 7.49379e+011
+142 324 7.47812e+011
+423 398 7.45937e+011
+418 440 7.45097e+011
+163 277 7.44883e+011
+264 299 7.4479e+011
+364 200 7.44387e+011
+480 82 7.43056e+011
+135 173 7.42802e+011
+67 235 7.42739e+011
+113 392 7.42416e+011
+272 279 7.41694e+011
+263 297 7.41623e+011
+35 268 7.41368e+011
+511 222 7.39639e+011
+579 19 7.36972e+011
+524 346 7.36449e+011
+109 43 7.35532e+011
+364 258 7.35479e+011
+160 111 7.35396e+011
+569 39 7.34418e+011
+501 143 7.33381e+011
+548 182 7.33341e+011
+498 81 7.31929e+011
+423 335 7.31367e+011
+509 83 7.31315e+011
+374 117 7.3108e+011
+297 275 7.29944e+011
+270 53 7.29894e+011
+555 181 7.28321e+011
+156 198 7.2697e+011
+125 260 7.26961e+011
+35 173 7.26845e+011
+511 220 7.26322e+011
+132 216 7.25794e+011
+559 18 7.25191e+011
+48 151 7.24214e+011
+474 240 7.23452e+011
+222 419 7.23236e+011
+106 39 7.22101e+011
+271 166 7.21237e+011
+366 258 7.20227e+011
+262 165 7.19781e+011
+33 268 7.17917e+011
+424 323 7.16526e+011
+190 216 7.15654e+011
+356 126 7.15132e+011
+130 217 7.15027e+011
+287 343 7.1458e+011
+164 20 7.14221e+011
+140 324 7.14093e+011
+437 339 7.14066e+011
+407 338 7.14049e+011
+336 90 7.13917e+011
+480 19 7.13805e+011
+130 76 7.13431e+011
+354 320 7.12562e+011
+358 128 7.12411e+011
+111 42 7.12358e+011
+396 261 7.11977e+011
+525 199 7.10441e+011
+480 181 7.09886e+011
+121 3 7.09581e+011
+156 94 7.0939e+011
+36 299 7.06982e+011
+280 50 7.05087e+011
+233 16 7.04224e+011
+473 63 7.03312e+011
+468 124 7.02888e+011
+387 10 7.02791e+011
+528 104 7.02636e+011
+140 22 7.02444e+011
+363 8 7.01462e+011
+113 343 7.01398e+011
+266 295 7.00933e+011
+416 44 7.00765e+011
+422 324 7.00675e+011
+334 88 6.98304e+011
+177 106 6.9803e+011
+529 142 6.97904e+011
+112 213 6.97804e+011
+318 385 6.97271e+011
+512 202 6.96855e+011
+266 52 6.94889e+011
+63 133 6.93984e+011
+579 17 6.93294e+011
+361 316 6.92814e+011
+456 84 6.92703e+011
+523 123 6.92522e+011
+473 4 6.91607e+011
+346 350 6.90276e+011
+509 455 6.8936e+011
+225 221 6.89223e+011
+568 41 6.88558e+011
+541 19 6.88495e+011
+5 11 6.87874e+011
+305 106 6.86836e+011
+217 208 6.85101e+011
+362 397 6.85039e+011
+412 45 6.84659e+011
+361 130 6.84294e+011
+403 119 6.83127e+011
+111 392 6.83043e+011
+67 26 6.81623e+011
+476 262 6.81058e+011
+44 62 6.80369e+011
+348 338 6.78575e+011
+538 61 6.77858e+011
+380 337 6.76306e+011
+159 183 6.76196e+011
+359 316 6.75442e+011
+175 40 6.75153e+011
+507 1 6.74971e+011
+273 71 6.72844e+011
+221 150 6.70805e+011
+491 23 6.69765e+011
+385 125 6.69642e+011
+225 420 6.68958e+011
+405 338 6.68509e+011
+274 53 6.67886e+011
+230 265 6.66698e+011
+537 393 6.64874e+011
+331 164 6.64858e+011
+323 223 6.63879e+011
+168 20 6.63489e+011
+560 228 6.63378e+011
+109 59 6.6287e+011
+294 297 6.62631e+011
+414 252 6.62025e+011
+527 360 6.58536e+011
+446 7 6.57777e+011
+412 5 6.5644e+011
+102 4 6.54879e+011
+359 169 6.53127e+011
+264 444 6.52792e+011
+280 297 6.52778e+011
+172 57 6.52687e+011
+560 226 6.52591e+011
+520 182 6.52266e+011
+273 131 6.51679e+011
+177 167 6.51171e+011
+582 18 6.5052e+011
+485 180 6.49471e+011
+508 5 6.48855e+011
+177 261 6.48776e+011
+527 222 6.47993e+011
+363 254 6.47076e+011
+52 29 6.46895e+011
+24 62 6.46729e+011
+407 353 6.45834e+011
+325 142 6.45649e+011
+509 3 6.44627e+011
+283 72 6.44056e+011
+317 165 6.43805e+011
+276 221 6.4328e+011
+305 193 6.43076e+011
+381 26 6.42145e+011
+352 145 6.41895e+011
+480 178 6.4129e+011
+154 198 6.40906e+011
+482 366 6.39752e+011
+417 84 6.38788e+011
+470 122 6.38719e+011
+306 440 6.3843e+011
+191 277 6.37791e+011
+405 375 6.36915e+011
+525 172 6.35181e+011
+424 261 6.35172e+011
+527 362 6.35046e+011
+21 61 6.34949e+011
+278 144 6.34268e+011
+228 185 6.3299e+011
+183 401 6.32131e+011
+192 124 6.31735e+011
+79 474 6.30142e+011
+382 411 6.29796e+011
+36 141 6.29653e+011
+350 338 6.2943e+011
+163 96 6.2845e+011
+302 208 6.28141e+011
+223 220 6.27294e+011
+253 75 6.25502e+011
+387 126 6.25338e+011
+479 16 6.2523e+011
+277 138 6.24852e+011
+283 221 6.23927e+011
+442 239 6.238e+011
+371 162 6.23136e+011
+373 162 6.22121e+011
+151 307 6.2134e+011
+562 149 6.21327e+011
+502 361 6.21193e+011
+276 352 6.20875e+011
+479 262 6.19289e+011
+510 79 6.17539e+011
+511 139 6.16806e+011
+540 13 6.1654e+011
+278 392 6.16308e+011
+270 70 6.16201e+011
+305 104 6.16156e+011
+271 67 6.15204e+011
+75 6 6.13977e+011
+327 141 6.13787e+011
+183 138 6.13539e+011
+256 148 6.13444e+011
+96 79 6.12825e+011
+537 139 6.11577e+011
+425 376 6.11406e+011
+260 235 6.10733e+011
+478 402 6.10644e+011
+452 375 6.09901e+011
+306 363 6.09715e+011
+302 180 6.08953e+011
+436 182 6.085e+011
+449 139 6.08128e+011
+557 181 6.0767e+011
+544 3 6.07441e+011
+455 264 6.0707e+011
+162 134 6.06695e+011
+530 39 6.05049e+011
+314 164 6.04753e+011
+363 181 6.04479e+011
+504 61 6.04268e+011
+432 111 6.03939e+011
+376 85 6.03897e+011
+342 38 6.03511e+011
+125 188 6.03249e+011
+250 34 6.02431e+011
+22 219 6.0229e+011
+127 76 6.02222e+011
+325 425 6.01513e+011
+290 165 6.00489e+011
+303 215 5.9955e+011
+24 64 5.97574e+011
+516 17 5.96525e+011
+357 334 5.96491e+011
+33 236 5.96239e+011
+354 25 5.95523e+011
+379 106 5.95159e+011
+102 235 5.94216e+011
+242 57 5.94125e+011
+437 391 5.93742e+011
+296 297 5.93558e+011
+76 8 5.9331e+011
+157 73 5.9267e+011
+429 1 5.91455e+011
+393 66 5.90953e+011
+565 160 5.9088e+011
+176 76 5.90032e+011
+418 258 5.89037e+011
+219 146 5.88755e+011
+449 402 5.88449e+011
+57 4 5.86828e+011
+450 82 5.86721e+011
+120 51 5.8594e+011
+532 241 5.8587e+011
+566 41 5.83689e+011
+297 420 5.82811e+011
+221 177 5.82254e+011
+376 353 5.81441e+011
+222 115 5.8134e+011
+557 18 5.80033e+011
+534 267 5.80026e+011
+562 146 5.79042e+011
+109 95 5.78151e+011
+300 106 5.78109e+011
+249 219 5.78107e+011
+453 44 5.77958e+011
+488 3 5.77616e+011
+429 3 5.77458e+011
+343 122 5.77277e+011
+366 260 5.7697e+011
+276 392 5.76939e+011
+49 153 5.76344e+011
+351 321 5.75347e+011
+167 325 5.7533e+011
+225 295 5.74384e+011
+360 314 5.72853e+011
+454 83 5.72347e+011
+507 3 5.71186e+011
+62 371 5.69804e+011
+216 145 5.69796e+011
+478 82 5.68874e+011
+192 172 5.68785e+011
+188 181 5.67987e+011
+161 238 5.67977e+011
+338 473 5.67163e+011
+133 72 5.67022e+011
+578 50 5.6548e+011
+392 46 5.64047e+011
+283 52 5.63875e+011
+541 41 5.63517e+011
+183 110 5.6256e+011
+160 126 5.6204e+011
+174 75 5.61684e+011
+78 25 5.6128e+011
+511 128 5.611e+011
+89 255 5.60345e+011
+313 80 5.59771e+011
+240 366 5.59323e+011
+498 65 5.58007e+011
+28 29 5.57815e+011
+362 369 5.57522e+011
+47 147 5.57441e+011
+292 121 5.56945e+011
+356 220 5.56263e+011
+267 15 5.55886e+011
+1 156 5.55162e+011
+434 182 5.54822e+011
+489 140 5.53195e+011
+544 7 5.52162e+011
+79 270 5.51869e+011
+295 420 5.51808e+011
+470 420 5.51799e+011
+234 346 5.5165e+011
+252 423 5.51627e+011
+395 162 5.51062e+011
+576 177 5.50365e+011
+198 83 5.50204e+011
+529 362 5.50145e+011
+152 448 5.50055e+011
+55 291 5.49982e+011
+259 35 5.49344e+011
+345 275 5.49108e+011
+462 395 5.48869e+011
+332 295 5.48851e+011
+374 86 5.48805e+011
+55 5 5.48173e+011
+360 259 5.47739e+011
+527 60 5.47567e+011
+483 374 5.47422e+011
+575 126 5.47306e+011
+492 140 5.47164e+011
+147 397 5.45605e+011
+309 32 5.45516e+011
+198 85 5.44264e+011
+95 148 5.43788e+011
+264 446 5.43252e+011
+151 113 5.42615e+011
+500 22 5.42594e+011
+401 183 5.42483e+011
+427 182 5.42347e+011
+330 9 5.42103e+011
+51 289 5.41545e+011
+173 110 5.41219e+011
+258 89 5.4069e+011
+386 243 5.40687e+011
+126 95 5.40512e+011
+373 68 5.4036e+011
+424 4 5.40079e+011
+173 115 5.39979e+011
+229 128 5.39813e+011
+109 97 5.39603e+011
+325 297 5.39196e+011
+164 208 5.39025e+011
+489 342 5.38446e+011
+510 141 5.38386e+011
+366 106 5.38236e+011
+45 151 5.38211e+011
+57 67 5.38131e+011
+232 345 5.38091e+011
+374 240 5.37524e+011
+228 130 5.36905e+011
+463 27 5.3588e+011
+282 48 5.34995e+011
+134 237 5.34696e+011
+324 315 5.34619e+011
+355 268 5.34615e+011
+301 263 5.34501e+011
+146 160 5.33857e+011
+344 165 5.33654e+011
+209 154 5.32366e+011
+57 254 5.32026e+011
+483 176 5.31932e+011
+527 224 5.31881e+011
+216 279 5.31709e+011
+483 376 5.3133e+011
+260 250 5.31086e+011
+276 217 5.30828e+011
+513 200 5.30309e+011
+387 326 5.29773e+011
+481 173 5.28334e+011
+476 22 5.28263e+011
+526 423 5.28144e+011
+324 148 5.27935e+011
+93 6 5.27637e+011
+430 320 5.25069e+011
+24 200 5.24521e+011
+260 71 5.24063e+011
+490 59 5.23794e+011
+186 98 5.23188e+011
+161 168 5.23115e+011
+561 18 5.23101e+011
+518 202 5.2231e+011
+180 107 5.22154e+011
+255 151 5.22058e+011
+169 115 5.21372e+011
+237 130 5.20376e+011
+92 290 5.20337e+011
+386 319 5.20173e+011
+431 85 5.20091e+011
+205 160 5.19847e+011
+167 288 5.19394e+011
+277 140 5.19129e+011
+266 30 5.18744e+011
+470 418 5.1859e+011
+433 318 5.17737e+011
+92 292 5.17511e+011
+434 397 5.17284e+011
+192 330 5.17199e+011
+157 75 5.17071e+011
+548 222 5.15994e+011
+571 121 5.15967e+011
+283 54 5.15693e+011
+123 162 5.15421e+011
+554 201 5.14732e+011
+20 64 5.14273e+011
+445 352 5.14049e+011
+401 122 5.13965e+011
+298 69 5.13593e+011
+171 110 5.13589e+011
+419 84 5.12549e+011
+341 109 5.12189e+011
+174 165 5.12056e+011
+427 5 5.1181e+011
+287 52 5.11214e+011
+37 218 5.09971e+011
+292 30 5.08634e+011
+393 141 5.08527e+011
+55 66 5.08476e+011
+542 132 5.08397e+011
+269 61 5.08331e+011
+525 196 5.08203e+011
+317 147 5.08009e+011
+84 2 5.07847e+011
+191 146 5.06646e+011
+211 153 5.06383e+011
+483 174 5.06382e+011
+498 67 5.05833e+011
+85 181 5.0583e+011
+527 182 5.05711e+011
+420 166 5.05677e+011
+390 326 5.05375e+011
+192 55 5.03319e+011
+184 344 5.02659e+011
+4 65 5.02489e+011
+436 304 5.02299e+011
+31 135 5.02272e+011
+480 176 5.01804e+011
+152 225 5.01542e+011
+434 340 5.01337e+011
+393 164 5.01055e+011
+538 96 5.00658e+011
+247 220 4.99624e+011
+547 161 4.99413e+011
+75 96 4.99336e+011
+121 47 4.99258e+011
+541 123 4.9897e+011
+542 253 4.98625e+011
+267 13 4.98084e+011
+267 130 4.96065e+011
+181 394 4.95494e+011
+233 262 4.95473e+011
+512 92 4.94878e+011
+452 82 4.947e+011
+214 143 4.94496e+011
+382 123 4.94373e+011
+512 94 4.94127e+011
+547 163 4.9355e+011
+435 90 4.92907e+011
+495 456 4.92323e+011
+528 190 4.92319e+011
+189 109 4.92106e+011
+178 39 4.91551e+011
+372 393 4.9154e+011
+329 255 4.90912e+011
+380 122 4.90693e+011
+66 213 4.90552e+011
+186 108 4.90149e+011
+390 161 4.89614e+011
+539 458 4.89128e+011
+58 71 4.8912e+011
+476 341 4.88804e+011
+327 182 4.88647e+011
+239 349 4.88499e+011
+84 477 4.88444e+011
+130 428 4.8808e+011
+265 15 4.87688e+011
+197 131 4.87571e+011
+174 18 4.87569e+011
+478 13 4.87005e+011
+167 114 4.86156e+011
+32 29 4.85672e+011
+155 75 4.85612e+011
+265 13 4.85291e+011
+164 358 4.84803e+011
+279 129 4.83793e+011
+153 218 4.83768e+011
+474 243 4.83686e+011
+271 61 4.83583e+011
+488 43 4.83227e+011
+79 195 4.82723e+011
+580 80 4.82353e+011
+249 313 4.82284e+011
+216 106 4.82188e+011
+516 347 4.81962e+011
+108 183 4.81851e+011
+464 355 4.81661e+011
+538 94 4.80308e+011
+344 110 4.79815e+011
+339 391 4.79297e+011
+500 264 4.79172e+011
+324 341 4.78903e+011
+278 333 4.78896e+011
+72 96 4.78725e+011
+405 199 4.78557e+011
+298 137 4.78202e+011
+55 293 4.77771e+011
+438 162 4.77457e+011
+393 354 4.77456e+011
+74 24 4.77336e+011
+49 255 4.77116e+011
+498 63 4.76579e+011
+502 264 4.76532e+011
+176 186 4.75964e+011
+410 24 4.75648e+011
+169 200 4.75578e+011
+246 403 4.75432e+011
+30 219 4.7504e+011
+271 63 4.74261e+011
+535 18 4.74197e+011
+358 161 4.74e+011
+326 341 4.73891e+011
+557 246 4.73864e+011
+444 355 4.73549e+011
+561 321 4.71529e+011
+262 239 4.71451e+011
+246 216 4.71205e+011
+298 398 4.71122e+011
+314 161 4.70944e+011
+412 65 4.7035e+011
+448 24 4.70164e+011
+303 210 4.69604e+011
+229 198 4.69448e+011
+382 355 4.6935e+011
+332 202 4.69206e+011
+414 250 4.68795e+011
+36 201 4.68746e+011
+226 72 4.68003e+011
+513 141 4.6788e+011
+108 27 4.67365e+011
+318 202 4.6695e+011
+538 185 4.66322e+011
+287 396 4.66274e+011
+76 375 4.65844e+011
+163 74 4.65451e+011
+516 182 4.64871e+011
+57 7 4.64809e+011
+575 129 4.64753e+011
+525 183 4.64264e+011
+161 255 4.6354e+011
+372 79 4.63265e+011
+358 163 4.62945e+011
+266 71 4.62706e+011
+517 184 4.62388e+011
+430 88 4.61812e+011
+130 148 4.61674e+011
+397 265 4.61594e+011
+190 205 4.60748e+011
+272 181 4.60565e+011
+572 39 4.60407e+011
+468 141 4.5989e+011
+307 89 4.59758e+011
+383 146 4.59645e+011
+447 340 4.59267e+011
+45 148 4.59116e+011
+205 203 4.58759e+011
+279 196 4.58723e+011
+109 325 4.58477e+011
+397 356 4.57835e+011
+413 99 4.5769e+011
+358 241 4.57057e+011
+171 201 4.56881e+011
+485 376 4.56821e+011
+395 22 4.56351e+011
+264 72 4.55373e+011
+343 463 4.55183e+011
+138 98 4.5503e+011
+247 202 4.54531e+011
+206 158 4.54461e+011
+257 250 4.5444e+011
+58 289 4.54144e+011
+129 128 4.51758e+011
+441 98 4.51742e+011
+489 182 4.51556e+011
+135 129 4.50792e+011
+534 160 4.5038e+011
+513 120 4.50013e+011
+460 339 4.48641e+011
+276 333 4.48282e+011
+560 272 4.48263e+011
+475 203 4.48251e+011
+330 202 4.48009e+011
+170 112 4.47997e+011
+152 1 4.47967e+011
+214 124 4.47826e+011
+363 332 4.47824e+011
+562 71 4.47139e+011
+354 106 4.47078e+011
+116 76 4.46785e+011
+523 183 4.46684e+011
+342 107 4.46381e+011
+258 161 4.46106e+011
+219 107 4.4609e+011
+162 148 4.45835e+011
+51 291 4.45656e+011
+387 167 4.45552e+011
+282 393 4.45386e+011
+341 163 4.45232e+011
+104 221 4.45032e+011
+376 6 4.44973e+011
+380 181 4.44961e+011
+400 272 4.447e+011
+72 45 4.44501e+011
+44 474 4.44416e+011
+178 19 4.44208e+011
+55 302 4.4368e+011
+211 16 4.43482e+011
+161 129 4.43308e+011
+326 148 4.43209e+011
+502 160 4.43203e+011
+246 293 4.42587e+011
+95 6 4.4254e+011
+352 163 4.42531e+011
+513 43 4.42406e+011
+531 161 4.42304e+011
+191 140 4.42109e+011
+418 283 4.41752e+011
+210 451 4.41602e+011
+461 357 4.41305e+011
+43 82 4.40934e+011
+444 452 4.40651e+011
+482 328 4.40508e+011
+49 12 4.40488e+011
+136 176 4.40022e+011
+374 299 4.39773e+011
+96 256 4.3967e+011
+538 121 4.39507e+011
+117 392 4.39263e+011
+406 81 4.39086e+011
+47 11 4.38658e+011
+162 107 4.38614e+011
+228 38 4.38198e+011
+347 240 4.38165e+011
+200 87 4.37712e+011
+293 123 4.37651e+011
+455 202 4.37573e+011
+293 147 4.37482e+011
+186 170 4.37168e+011
+359 143 4.36822e+011
+45 82 4.36815e+011
+408 182 4.36661e+011
+504 263 4.36586e+011
+235 16 4.36557e+011
+163 211 4.34999e+011
+501 60 4.34964e+011
+364 354 4.34674e+011
+161 20 4.34598e+011
+533 183 4.34281e+011
+275 215 4.34221e+011
+480 165 4.34196e+011
+539 40 4.33343e+011
+263 402 4.3155e+011
+136 98 4.31047e+011
+542 129 4.3084e+011
+262 392 4.3053e+011
+572 332 4.30448e+011
+451 264 4.3036e+011
+148 21 4.30242e+011
+224 71 4.301e+011
+119 95 4.29772e+011
+278 190 4.29275e+011
+26 219 4.29217e+011
+107 99 4.29178e+011
+69 131 4.28585e+011
+485 83 4.28215e+011
+297 14 4.27999e+011
+336 391 4.27983e+011
+249 192 4.27962e+011
+293 312 4.27125e+011
+439 392 4.27124e+011
+279 199 4.2707e+011
+407 199 4.26909e+011
+502 164 4.26776e+011
+488 83 4.26408e+011
+187 341 4.25486e+011
+244 190 4.25384e+011
+207 448 4.24755e+011
+507 142 4.24595e+011
+111 168 4.24472e+011
+138 146 4.24355e+011
+35 134 4.2422e+011
+533 21 4.23512e+011
+163 313 4.23289e+011
+150 150 4.2319e+011
+414 21 4.22938e+011
+203 294 4.22895e+011
+193 16 4.22775e+011
+51 255 4.2234e+011
+26 221 4.22336e+011
+542 100 4.22229e+011
+129 167 4.21614e+011
+131 131 4.21562e+011
+446 377 4.20538e+011
+269 93 4.20474e+011
+165 326 4.19933e+011
+403 187 4.19866e+011
+95 477 4.19746e+011
+181 138 4.19652e+011
+216 125 4.1877e+011
+329 65 4.18234e+011
+130 95 4.18067e+011
+49 159 4.18008e+011
+80 40 4.17907e+011
+536 121 4.17528e+011
+162 202 4.17498e+011
+243 199 4.17248e+011
+411 99 4.16997e+011
+462 162 4.16569e+011
+236 220 4.16489e+011
+168 197 4.16461e+011
+191 138 4.16458e+011
+109 147 4.16457e+011
+47 9 4.16076e+011
+204 128 4.15873e+011
+349 87 4.15651e+011
+373 75 4.15452e+011
+61 111 4.14215e+011
+59 40 4.13703e+011
+260 329 4.13246e+011
+363 407 4.13146e+011
+498 227 4.131e+011
+101 198 4.12887e+011
+341 165 4.12542e+011
+304 53 4.12217e+011
+206 294 4.12125e+011
+241 165 4.11954e+011
+478 451 4.11677e+011
+290 348 4.11559e+011
+222 111 4.11532e+011
+162 165 4.11316e+011
+136 139 4.11246e+011
+219 126 4.1087e+011
+280 144 4.10809e+011
+110 264 4.10718e+011
+184 341 4.10333e+011
+43 9 4.1025e+011
+430 122 4.10145e+011
+28 219 4.0975e+011
+555 244 4.09488e+011
+284 241 4.09189e+011
+358 10 4.0907e+011
+106 77 4.0906e+011
+32 218 4.08915e+011
+256 34 4.08689e+011
+264 250 4.08675e+011
+53 357 4.08634e+011
+209 16 4.08562e+011
+525 185 4.08387e+011
+151 111 4.08293e+011
+430 181 4.07961e+011
+183 184 4.07897e+011
+148 2 4.07868e+011
+510 362 4.06978e+011
+260 141 4.06602e+011
+304 157 4.06582e+011
+38 168 4.06534e+011
+387 97 4.06467e+011
+186 101 4.06366e+011
+88 209 4.06333e+011
+182 133 4.06029e+011
+437 388 4.0577e+011
+462 101 4.05315e+011
+110 341 4.04925e+011
+276 131 4.04513e+011
+537 80 4.04288e+011
+248 316 4.04106e+011
+220 290 4.0408e+011
+297 331 4.04068e+011
+473 203 4.03934e+011
+392 295 4.03298e+011
+141 394 4.03128e+011
+314 222 4.03007e+011
+294 333 4.0299e+011
+346 48 4.02892e+011
+447 350 4.0156e+011
+230 149 4.01519e+011
+238 422 4.01061e+011
+440 181 4.00942e+011
+151 152 4.00846e+011
+64 7 4.00631e+011
+181 202 4.00568e+011
+126 219 4.00495e+011
+467 41 4.00193e+011
+194 110 3.99485e+011
+549 58 3.99354e+011
+182 131 3.99306e+011
+209 420 3.99199e+011
+466 140 3.99017e+011
+104 198 3.98982e+011
+135 131 3.98913e+011
+165 108 3.98868e+011
+265 140 3.9855e+011
+168 149 3.98497e+011
+541 164 3.98241e+011
+434 225 3.98067e+011
+251 153 3.98056e+011
+434 156 3.9785e+011
+185 201 3.97747e+011
+424 203 3.97589e+011
+122 127 3.96619e+011
+535 393 3.96252e+011
+188 106 3.9582e+011
+445 126 3.95247e+011
+123 272 3.95082e+011
+142 2 3.94092e+011
+338 164 3.94059e+011
+393 216 3.94018e+011
+56 221 3.9385e+011
+163 114 3.93831e+011
+62 203 3.93817e+011
+334 240 3.93656e+011
+225 51 3.93214e+011
+494 163 3.92793e+011
+119 60 3.92512e+011
+200 110 3.92363e+011
+13 81 3.92241e+011
+160 92 3.92129e+011
+285 262 3.91997e+011
+125 271 3.91791e+011
+594 18 3.91428e+011
+578 43 3.91255e+011
+486 43 3.91031e+011
+364 356 3.90975e+011
+162 205 3.90957e+011
+460 162 3.90679e+011
+222 239 3.90678e+011
+460 44 3.90651e+011
+159 75 3.90441e+011
+484 86 3.90209e+011
+498 224 3.90165e+011
+421 81 3.8975e+011
+504 164 3.89724e+011
+217 36 3.89415e+011
+270 104 3.89406e+011
+357 239 3.89158e+011
+180 19 3.89067e+011
+246 400 3.88978e+011
+149 222 3.8881e+011
+66 252 3.88494e+011
+217 55 3.88379e+011
+419 86 3.87912e+011
+337 426 3.87901e+011
+62 253 3.87793e+011
+41 9 3.87374e+011
+150 232 3.87168e+011
+387 283 3.87054e+011
+487 182 3.86588e+011
+270 131 3.86406e+011
+362 102 3.86268e+011
+557 303 3.85532e+011
+387 15 3.85316e+011
+395 20 3.85283e+011
+483 332 3.85054e+011
+144 16 3.84555e+011
+559 80 3.84212e+011
+153 300 3.84154e+011
+115 219 3.83147e+011
+432 303 3.83067e+011
+535 80 3.82599e+011
+38 239 3.82269e+011
+342 465 3.82216e+011
+519 79 3.82079e+011
+136 146 3.82005e+011
+411 470 3.81516e+011
+346 298 3.81188e+011
+279 188 3.81164e+011
+401 119 3.80743e+011
+474 245 3.80742e+011
+543 163 3.80413e+011
+199 129 3.80202e+011
+117 390 3.80173e+011
+316 238 3.79681e+011
+289 183 3.79481e+011
+344 263 3.79392e+011
+231 262 3.79347e+011
+16 216 3.7919e+011
+528 161 3.7892e+011
+41 355 3.78825e+011
+520 345 3.78467e+011
+266 145 3.78215e+011
+200 167 3.78209e+011
+193 219 3.78201e+011
+39 309 3.77546e+011
+506 177 3.77389e+011
+440 122 3.77212e+011
+191 358 3.77042e+011
+156 56 3.76854e+011
+180 274 3.76635e+011
+221 101 3.76562e+011
+259 274 3.76514e+011
+365 66 3.76434e+011
+144 395 3.7643e+011
+332 241 3.7608e+011
+450 5 3.75723e+011
+493 181 3.74904e+011
+387 281 3.74902e+011
+191 361 3.74738e+011
+423 62 3.74619e+011
+510 347 3.74285e+011
+334 369 3.74257e+011
+452 102 3.74036e+011
+101 162 3.73828e+011
+166 149 3.73827e+011
+18 343 3.73719e+011
+539 405 3.7362e+011
+410 260 3.73414e+011
+39 355 3.73404e+011
+493 457 3.73084e+011
+111 166 3.72795e+011
+178 122 3.72551e+011
+196 76 3.72168e+011
+365 85 3.72041e+011
+395 141 3.71756e+011
+515 202 3.71681e+011
+408 82 3.71446e+011
+44 97 3.70959e+011
+461 123 3.70552e+011
+162 123 3.70248e+011
+223 153 3.70184e+011
+281 35 3.70166e+011
+437 124 3.70148e+011
+291 183 3.69912e+011
+90 78 3.69873e+011
+413 299 3.69769e+011
+90 376 3.69075e+011
+247 326 3.68923e+011
+129 238 3.68857e+011
+436 280 3.68038e+011
+130 254 3.68019e+011
+94 94 3.67852e+011
+254 77 3.665e+011
+194 311 3.66461e+011
+93 255 3.66407e+011
+463 99 3.66345e+011
+221 152 3.66242e+011
+479 405 3.66073e+011
+571 450 3.66069e+011
+368 1 3.66052e+011
+113 175 3.65925e+011
+129 113 3.65834e+011
+50 62 3.65825e+011
+508 179 3.65666e+011
+53 43 3.65623e+011
+187 201 3.65547e+011
+14 203 3.64866e+011
+465 4 3.64476e+011
+360 217 3.64415e+011
+422 315 3.63977e+011
+305 89 3.63746e+011
+32 66 3.6345e+011
+321 29 3.63327e+011
+374 392 3.63222e+011
+439 124 3.63148e+011
+140 3 3.63076e+011
+517 43 3.62337e+011
+529 365 3.62268e+011
+181 135 3.6205e+011
+99 360 3.61574e+011
+263 13 3.6128e+011
+349 240 3.61174e+011
+532 267 3.6105e+011
+357 282 3.60659e+011
+280 386 3.60578e+011
+120 128 3.60391e+011
+509 301 3.60388e+011
+368 337 3.60185e+011
+417 80 3.59964e+011
+402 167 3.5972e+011
+138 1 3.59384e+011
+53 221 3.59173e+011
+263 142 3.59092e+011
+455 375 3.58797e+011
+346 46 3.58245e+011
+274 144 3.57772e+011
+334 127 3.57413e+011
+56 78 3.57289e+011
+203 257 3.57255e+011
+220 111 3.56796e+011
+223 147 3.56689e+011
+310 7 3.56322e+011
+101 164 3.56143e+011
+307 448 3.55959e+011
+217 128 3.55716e+011
+57 146 3.55656e+011
+526 120 3.54954e+011
+398 143 3.5489e+011
+33 111 3.54329e+011
+118 110 3.54306e+011
+478 240 3.54278e+011
+147 89 3.53715e+011
+389 243 3.53652e+011
+335 367 3.53618e+011
+330 89 3.53536e+011
+104 27 3.53304e+011
+431 115 3.53166e+011
+65 275 3.53134e+011
+289 88 3.53072e+011
+49 80 3.52767e+011
+135 144 3.52749e+011
+449 445 3.52554e+011
+515 43 3.52108e+011
+144 2 3.5203e+011
+120 110 3.51406e+011
+494 63 3.5122e+011
+452 162 3.50792e+011
+164 132 3.50639e+011
+182 380 3.50637e+011
+312 222 3.4976e+011
+163 315 3.49564e+011
+420 143 3.49499e+011
+437 149 3.49249e+011
+59 147 3.4855e+011
+178 76 3.48118e+011
+384 325 3.47491e+011
+397 141 3.47169e+011
+57 364 3.46959e+011
+513 262 3.46883e+011
+548 245 3.46784e+011
+186 309 3.46731e+011
+63 26 3.46343e+011
+435 163 3.46276e+011
+245 385 3.46248e+011
+479 293 3.46247e+011
+3 382 3.46241e+011
+12 205 3.46214e+011
+68 336 3.45702e+011
+99 256 3.4526e+011
+349 323 3.45135e+011
+270 90 3.45086e+011
+91 23 3.44755e+011
+498 59 3.4435e+011
+455 46 3.44286e+011
+565 18 3.43843e+011
+199 127 3.43501e+011
+277 53 3.43237e+011
+199 293 3.42898e+011
+210 137 3.42515e+011
+389 420 3.42376e+011
+154 56 3.42298e+011
+246 387 3.42232e+011
+59 4 3.41577e+011
+430 223 3.41524e+011
+72 409 3.41125e+011
+60 203 3.41102e+011
+371 90 3.40683e+011
+307 354 3.39923e+011
+376 181 3.39898e+011
+521 79 3.39584e+011
+266 147 3.39426e+011
+30 255 3.39408e+011
+423 140 3.39116e+011
+288 263 3.3896e+011
+499 458 3.3894e+011
+148 39 3.38696e+011
+286 34 3.38187e+011
+141 391 3.38123e+011
+539 79 3.38048e+011
+350 298 3.37788e+011
+535 93 3.37763e+011
+226 91 3.376e+011
+123 3 3.37514e+011
+107 109 3.37439e+011
+270 106 3.37209e+011
+41 307 3.37108e+011
+540 206 3.37106e+011
+197 193 3.37089e+011
+544 91 3.37067e+011
+331 141 3.3699e+011
+541 218 3.36967e+011
+165 201 3.36585e+011
+466 143 3.36527e+011
+85 60 3.36518e+011
+183 238 3.36171e+011
+526 382 3.35901e+011
+469 201 3.35599e+011
+510 180 3.35586e+011
+288 123 3.35333e+011
+125 113 3.35146e+011
+96 197 3.35065e+011
+260 106 3.35032e+011
+599 364 3.35011e+011
+26 132 3.34746e+011
+446 123 3.34738e+011
+444 123 3.34552e+011
+467 25 3.34276e+011
+573 405 3.33955e+011
+265 260 3.3389e+011
+443 320 3.33881e+011
+352 10 3.33852e+011
+95 422 3.33468e+011
+345 178 3.33358e+011
+190 325 3.33126e+011
+537 261 3.33098e+011
+211 163 3.32988e+011
+390 203 3.32963e+011
+469 203 3.32885e+011
+483 122 3.32884e+011
+523 185 3.32831e+011
+116 428 3.32712e+011
+104 224 3.32574e+011
+346 296 3.32242e+011
+384 87 3.32079e+011
+408 430 3.3194e+011
+382 87 3.31623e+011
+534 340 3.31265e+011
+87 369 3.31144e+011
+279 193 3.31009e+011
+390 134 3.30834e+011
+419 89 3.29967e+011
+399 104 3.29957e+011
+497 458 3.29804e+011
+126 329 3.29714e+011
+529 31 3.2968e+011
+133 93 3.29648e+011
+92 148 3.29374e+011
+28 221 3.29097e+011
+585 18 3.29007e+011
+328 320 3.28927e+011
+322 119 3.28838e+011
+107 428 3.28785e+011
+449 167 3.28748e+011
+484 155 3.28694e+011
+494 59 3.28436e+011
+455 359 3.28308e+011
+498 70 3.28203e+011
+471 83 3.27773e+011
+410 82 3.27771e+011
+249 422 3.27717e+011
+362 448 3.27618e+011
+275 319 3.27602e+011
+294 138 3.27498e+011
+12 218 3.27398e+011
+73 186 3.26911e+011
+433 241 3.26817e+011
+346 392 3.26721e+011
+521 202 3.26494e+011
+116 129 3.26263e+011
+118 425 3.2611e+011
+104 304 3.25799e+011
+392 19 3.25688e+011
+244 197 3.25183e+011
+231 126 3.2515e+011
+408 14 3.25104e+011
+176 272 3.25001e+011
+58 99 3.24976e+011
+120 446 3.24812e+011
+64 252 3.24781e+011
+154 113 3.24771e+011
+498 140 3.24086e+011
+569 382 3.23523e+011
+448 63 3.22719e+011
+462 221 3.21939e+011
+362 361 3.21882e+011
+358 393 3.21666e+011
+499 42 3.21561e+011
+191 312 3.21436e+011
+506 381 3.21432e+011
+95 59 3.21011e+011
+380 119 3.20953e+011
+390 18 3.20843e+011
+247 347 3.20125e+011
+513 260 3.19891e+011
+280 136 3.19826e+011
+354 16 3.19749e+011
+290 263 3.19719e+011
+87 340 3.19701e+011
+149 131 3.19495e+011
+538 102 3.19367e+011
+95 9 3.19307e+011
+334 28 3.19232e+011
+53 359 3.18829e+011
+317 106 3.18777e+011
+523 79 3.18583e+011
+584 38 3.18422e+011
+532 121 3.17707e+011
+444 119 3.17689e+011
+390 165 3.17626e+011
+146 79 3.17568e+011
+254 181 3.17224e+011
+332 415 3.17121e+011
+385 258 3.1705e+011
+573 422 3.16928e+011
+497 341 3.16788e+011
+261 383 3.16673e+011
+512 297 3.16459e+011
+213 149 3.16258e+011
+449 177 3.16238e+011
+60 180 3.16188e+011
+303 444 3.16036e+011
+86 365 3.16004e+011
+152 228 3.15173e+011
+260 229 3.15126e+011
+27 66 3.14996e+011
+415 261 3.14951e+011
+343 198 3.14648e+011
+595 20 3.14618e+011
+108 180 3.14269e+011
+562 143 3.14243e+011
+333 356 3.14237e+011
+73 129 3.14151e+011
+240 134 3.14097e+011
+546 17 3.1395e+011
+92 59 3.13914e+011
+424 103 3.13891e+011
+278 165 3.13858e+011
+203 346 3.13785e+011
+570 182 3.13359e+011
+303 212 3.13203e+011
+438 241 3.12925e+011
+280 439 3.12799e+011
+61 205 3.12669e+011
+401 104 3.12368e+011
+513 363 3.11931e+011
+106 27 3.11871e+011
+74 374 3.11871e+011
+92 20 3.11691e+011
+29 135 3.11591e+011
+320 104 3.11492e+011
+504 160 3.11379e+011
+138 3 3.11368e+011
+176 188 3.11333e+011
+215 174 3.10829e+011
+522 425 3.1082e+011
+264 310 3.10437e+011
+382 3 3.10359e+011
+261 390 3.10069e+011
+34 31 3.09626e+011
+92 253 3.09462e+011
+174 201 3.09119e+011
+274 205 3.09016e+011
+129 309 3.08963e+011
+373 72 3.08951e+011
+478 203 3.08935e+011
+391 221 3.089e+011
+401 319 3.08814e+011
+85 214 3.08746e+011
+359 52 3.08323e+011
+253 10 3.08272e+011
+270 144 3.08236e+011
+223 88 3.08199e+011
+66 477 3.07866e+011
+538 268 3.07806e+011
+331 212 3.07805e+011
+86 310 3.07573e+011
+163 37 3.07523e+011
+123 219 3.07288e+011
+268 145 3.07063e+011
+373 354 3.06998e+011
+395 105 3.06951e+011
+166 315 3.06923e+011
+217 148 3.06776e+011
+39 10 3.06762e+011
+103 233 3.0665e+011
+275 329 3.06537e+011
+36 99 3.06211e+011
+157 306 3.06079e+011
+113 168 3.06013e+011
+293 89 3.05889e+011
+355 12 3.05743e+011
+218 351 3.05323e+011
+242 419 3.05321e+011
+415 471 3.05205e+011
+247 345 3.04839e+011
+558 462 3.0482e+011
+73 131 3.04641e+011
+58 372 3.04417e+011
+411 415 3.04408e+011
+336 241 3.04139e+011
+393 218 3.04054e+011
+299 190 3.0405e+011
+227 259 3.03967e+011
+188 304 3.03836e+011
+58 103 3.03832e+011
+57 331 3.03782e+011
+299 180 3.03623e+011
+149 129 3.03561e+011
+488 119 3.03374e+011
+69 476 3.0327e+011
+525 278 3.03192e+011
+496 101 3.02902e+011
+188 203 3.02754e+011
+92 95 3.02543e+011
+126 128 3.02528e+011
+390 241 3.01959e+011
+300 246 3.01877e+011
+392 241 3.01739e+011
+519 164 3.01699e+011
+229 91 3.01441e+011
+285 158 3.01182e+011
+171 448 3.0106e+011
+29 133 3.00989e+011
+407 142 3.00951e+011
+157 308 3.00864e+011
+332 392 3.00811e+011
+66 475 3.00019e+011
+10 476 2.99369e+011
+87 372 2.98852e+011
+340 88 2.98831e+011
+395 221 2.98679e+011
+180 122 2.97941e+011
+244 212 2.97907e+011
+501 102 2.97702e+011
+372 299 2.97564e+011
+184 118 2.97239e+011
+263 400 2.96956e+011
+401 145 2.96646e+011
+449 165 2.96448e+011
+9 44 2.96129e+011
+364 125 2.95765e+011
+515 60 2.95738e+011
+252 183 2.95601e+011
+408 260 2.95517e+011
+380 87 2.95508e+011
+366 95 2.95455e+011
+222 434 2.95446e+011
+356 254 2.95105e+011
+84 63 2.94874e+011
+430 45 2.94802e+011
+238 418 2.94793e+011
+117 4 2.94671e+011
+415 469 2.94551e+011
+117 223 2.94538e+011
+210 445 2.94475e+011
+49 166 2.94378e+011
+253 249 2.94346e+011
+261 368 2.94014e+011
+259 368 2.93999e+011
+78 60 2.93863e+011
+330 103 2.93857e+011
+249 387 2.93814e+011
+253 194 2.93694e+011
+205 416 2.93662e+011
+167 130 2.93295e+011
+217 97 2.93201e+011
+592 104 2.93024e+011
+119 223 2.93005e+011
+281 419 2.92977e+011
+44 407 2.92967e+011
+334 436 2.92836e+011
+207 418 2.92592e+011
+386 91 2.92363e+011
+444 243 2.92327e+011
+169 179 2.9232e+011
+451 165 2.91954e+011
+370 466 2.91889e+011
+421 140 2.91879e+011
+199 29 2.91747e+011
+240 194 2.91512e+011
+200 89 2.9118e+011
+223 124 2.91131e+011
+497 283 2.91102e+011
+354 424 2.90957e+011
+430 339 2.90873e+011
+119 219 2.908e+011
+251 10 2.90764e+011
+302 134 2.90758e+011
+297 182 2.90659e+011
+191 314 2.90636e+011
+102 295 2.90287e+011
+352 424 2.90276e+011
+69 304 2.9027e+011
+43 122 2.90029e+011
+397 104 2.89994e+011
+246 181 2.89789e+011
+45 90 2.89337e+011
+345 120 2.89257e+011
+119 58 2.89169e+011
+90 388 2.89128e+011
+402 220 2.89047e+011
+370 464 2.8884e+011
+195 134 2.88682e+011
+188 264 2.88546e+011
+279 131 2.88089e+011
+483 288 2.87897e+011
+45 355 2.87818e+011
+56 171 2.87813e+011
+184 142 2.87729e+011
+525 79 2.87147e+011
+280 134 2.86994e+011
+92 79 2.86979e+011
+436 320 2.86867e+011
+470 43 2.86756e+011
+194 136 2.86324e+011
+272 353 2.85984e+011
+375 125 2.85702e+011
+229 16 2.85666e+011
+472 43 2.85632e+011
+570 420 2.85513e+011
+110 358 2.85455e+011
+482 46 2.85395e+011
+153 302 2.85353e+011
+191 364 2.85277e+011
+104 162 2.85013e+011
+433 239 2.84499e+011
+225 434 2.84468e+011
+196 342 2.84326e+011
+388 334 2.8423e+011
+244 214 2.8422e+011
+510 135 2.84076e+011
+236 150 2.8399e+011
+114 357 2.83882e+011
+413 84 2.83688e+011
+73 166 2.83459e+011
+494 103 2.83372e+011
+372 146 2.83365e+011
+49 235 2.83285e+011
+464 140 2.83181e+011
+434 63 2.82718e+011
+65 277 2.82679e+011
+13 433 2.82567e+011
+341 314 2.82503e+011
+286 443 2.82108e+011
+333 141 2.81895e+011
+482 86 2.81862e+011
+433 381 2.81631e+011
+217 176 2.81409e+011
+448 285 2.81395e+011
+276 296 2.80775e+011
+528 397 2.80709e+011
+296 125 2.80586e+011
+514 381 2.80582e+011
+543 457 2.80352e+011
+280 165 2.80257e+011
+247 106 2.80245e+011
+496 475 2.80061e+011
+198 89 2.80013e+011
+81 236 2.79933e+011
+553 79 2.79923e+011
+88 230 2.79821e+011
+483 44 2.79803e+011
+513 181 2.79471e+011
+435 381 2.79282e+011
+588 161 2.79098e+011
+212 32 2.7901e+011
+563 40 2.78874e+011
+191 254 2.78827e+011
+151 400 2.78645e+011
+296 127 2.78546e+011
+502 420 2.78502e+011
+302 142 2.78495e+011
+514 377 2.78311e+011
+281 193 2.7816e+011
+370 87 2.78084e+011
+396 46 2.78026e+011
+548 283 2.77901e+011
+310 260 2.77702e+011
+377 121 2.77437e+011
+463 23 2.77289e+011
+520 425 2.7714e+011
+129 132 2.76822e+011
+75 59 2.76564e+011
+329 62 2.76458e+011
+579 214 2.76216e+011
+39 81 2.76057e+011
+282 199 2.75763e+011
+359 448 2.75642e+011
+97 423 2.75525e+011
+525 189 2.75489e+011
+542 140 2.75096e+011
+302 405 2.74902e+011
+287 111 2.74449e+011
+378 125 2.74434e+011
+274 209 2.74383e+011
+325 14 2.74145e+011
+478 205 2.74089e+011
+103 164 2.74053e+011
+446 243 2.73985e+011
+587 18 2.73975e+011
+391 322 2.73732e+011
+16 117 2.73725e+011
+197 134 2.73511e+011
+108 359 2.73429e+011
+246 172 2.7312e+011
+91 320 2.73049e+011
+194 164 2.73003e+011
+481 169 2.7296e+011
+388 203 2.72818e+011
+449 324 2.72725e+011
+72 373 2.72337e+011
+332 334 2.72303e+011
+367 30 2.7213e+011
+245 15 2.72103e+011
+118 117 2.7195e+011
+485 140 2.71575e+011
+510 114 2.71389e+011
+207 416 2.71373e+011
+91 276 2.71251e+011
+348 143 2.70897e+011
+251 163 2.70883e+011
+112 339 2.70803e+011
+401 430 2.70642e+011
+511 211 2.70506e+011
+417 23 2.70356e+011
+372 143 2.70333e+011
+384 89 2.70244e+011
+139 318 2.70235e+011
+156 317 2.69939e+011
+4 235 2.69851e+011
+571 454 2.69648e+011
+347 371 2.69582e+011
+354 18 2.6956e+011
+115 180 2.69558e+011
+294 163 2.69548e+011
+95 124 2.69455e+011
+302 189 2.69384e+011
+471 212 2.69216e+011
+276 203 2.69125e+011
+188 136 2.69064e+011
+575 39 2.69036e+011
+250 183 2.69006e+011
+402 6 2.68688e+011
+124 269 2.6865e+011
+339 221 2.68643e+011
+303 441 2.68584e+011
+583 140 2.68411e+011
+513 347 2.6821e+011
+159 151 2.67947e+011
+454 118 2.67731e+011
+393 183 2.67697e+011
+136 323 2.6765e+011
+52 12 2.67476e+011
+106 431 2.67189e+011
+84 236 2.66893e+011
+420 290 2.66714e+011
+143 237 2.66712e+011
+41 339 2.66549e+011
+411 220 2.66447e+011
+152 132 2.66378e+011
+214 162 2.6617e+011
+424 64 2.66165e+011
+294 165 2.66134e+011
+513 365 2.65933e+011
+387 94 2.65926e+011
+333 336 2.65895e+011
+306 53 2.6581e+011
+202 393 2.65737e+011
+203 395 2.65727e+011
+417 414 2.65562e+011
+194 166 2.65475e+011
+191 327 2.65376e+011
+171 148 2.64837e+011
+412 28 2.64653e+011
+160 98 2.64389e+011
+382 46 2.64374e+011
+283 135 2.6421e+011
+451 325 2.64198e+011
+350 128 2.63663e+011
+3 165 2.63557e+011
+367 303 2.63552e+011
+107 220 2.6346e+011
+466 100 2.63266e+011
+200 327 2.63225e+011
+143 113 2.63115e+011
+275 360 2.63099e+011
+289 111 2.63077e+011
+151 57 2.63021e+011
+96 453 2.62921e+011
+375 281 2.62553e+011
+546 140 2.62318e+011
+86 62 2.62059e+011
+335 48 2.61883e+011
+210 36 2.61734e+011
+405 165 2.617e+011
+39 24 2.61628e+011
+152 130 2.61437e+011
+310 299 2.61139e+011
+380 46 2.61024e+011
+561 244 2.60919e+011
+448 119 2.6089e+011
+92 388 2.60778e+011
+64 153 2.60716e+011
+315 28 2.60692e+011
+123 83 2.60556e+011
+139 316 2.60456e+011
+179 57 2.60406e+011
+73 164 2.60325e+011
+351 364 2.60142e+011
+247 259 2.59958e+011
+451 417 2.5995e+011
+118 181 2.59449e+011
+354 296 2.59303e+011
+216 164 2.59284e+011
+242 134 2.59246e+011
+434 278 2.59166e+011
+417 471 2.58973e+011
+119 114 2.58914e+011
+190 349 2.58905e+011
+565 463 2.58897e+011
+197 148 2.5876e+011
+5 151 2.58719e+011
+42 135 2.58588e+011
+157 170 2.58489e+011
+384 355 2.58355e+011
+345 199 2.58241e+011
+89 252 2.58233e+011
+512 299 2.57856e+011
+277 134 2.5767e+011
+416 298 2.57641e+011
+272 146 2.57617e+011
+112 357 2.57497e+011
+434 395 2.57461e+011
+122 123 2.57401e+011
+463 40 2.57356e+011
+221 215 2.5732e+011
+401 200 2.57205e+011
+395 241 2.57147e+011
+165 379 2.5697e+011
+274 75 2.56952e+011
+227 122 2.56852e+011
+343 296 2.56819e+011
+166 309 2.56783e+011
+343 298 2.5674e+011
+67 255 2.56595e+011
+82 198 2.5648e+011
+378 452 2.56419e+011
+359 177 2.56271e+011
+451 86 2.55826e+011
+43 119 2.55738e+011
+437 43 2.55736e+011
+69 255 2.55476e+011
+246 419 2.55347e+011
+162 31 2.55205e+011
+255 405 2.55168e+011
+37 288 2.54938e+011
+470 23 2.54933e+011
+248 385 2.54772e+011
+236 197 2.54622e+011
+136 94 2.54266e+011
+391 334 2.53971e+011
+391 125 2.53851e+011
+65 362 2.5379e+011
+210 33 2.53704e+011
+459 41 2.53673e+011
+84 145 2.53646e+011
+187 325 2.53483e+011
+485 235 2.53448e+011
+481 128 2.53336e+011
+141 113 2.53297e+011
+412 263 2.53179e+011
+141 116 2.53063e+011
+251 87 2.52799e+011
+53 450 2.52025e+011
+451 442 2.5199e+011
+177 329 2.51588e+011
+39 83 2.51545e+011
+75 128 2.51404e+011
+450 118 2.51356e+011
+221 431 2.51327e+011
+176 341 2.5111e+011
+9 42 2.5098e+011
+262 396 2.50959e+011
+160 431 2.50939e+011
+446 144 2.50871e+011
+46 407 2.50558e+011
+572 59 2.50556e+011
+134 411 2.50491e+011
+326 179 2.50484e+011
+509 252 2.50406e+011
+433 45 2.50351e+011
+233 90 2.50315e+011
+302 407 2.50284e+011
+162 138 2.49998e+011
+310 335 2.49984e+011
+99 425 2.49902e+011
+381 126 2.49827e+011
+323 126 2.49732e+011
+369 30 2.49667e+011
+82 64 2.49563e+011
+132 411 2.49297e+011
+409 140 2.49249e+011
+428 64 2.49226e+011
+183 316 2.49223e+011
+12 113 2.49115e+011
+48 62 2.48972e+011
+211 95 2.48947e+011
+385 66 2.48366e+011
+89 9 2.48303e+011
+465 162 2.48231e+011
+157 163 2.48181e+011
+50 376 2.48161e+011
+246 257 2.48132e+011
+18 236 2.48026e+011
+546 438 2.47679e+011
+398 66 2.47532e+011
+20 317 2.47415e+011
+446 246 2.47372e+011
+83 102 2.47282e+011
+378 454 2.47273e+011
+201 416 2.46842e+011
+327 26 2.46659e+011
+542 138 2.46497e+011
+401 66 2.4642e+011
+67 304 2.46189e+011
+88 214 2.46132e+011
+192 168 2.46114e+011
+308 53 2.46076e+011
+302 87 2.4588e+011
+458 140 2.45808e+011
+375 224 2.45643e+011
+532 343 2.45604e+011
+174 121 2.45359e+011
+32 38 2.4526e+011
+592 106 2.45075e+011
+529 135 2.45047e+011
+540 221 2.44858e+011
+121 219 2.44771e+011
+362 64 2.44607e+011
+326 221 2.43981e+011
+255 80 2.43889e+011
+121 114 2.43726e+011
+235 261 2.43366e+011
+430 162 2.43223e+011
+589 309 2.43211e+011
+534 343 2.42888e+011
+335 444 2.42803e+011
+324 259 2.42621e+011
+511 350 2.42566e+011
+102 39 2.42385e+011
+41 98 2.42367e+011
+95 290 2.42306e+011
+327 139 2.41823e+011
+569 203 2.41758e+011
+479 439 2.41652e+011
+51 252 2.41541e+011
+481 440 2.41386e+011
+11 73 2.41291e+011
+420 363 2.40955e+011
+487 204 2.40909e+011
+497 462 2.40771e+011
+63 423 2.40331e+011
+433 26 2.40317e+011
+513 350 2.40247e+011
+301 253 2.40228e+011
+211 93 2.39979e+011
+250 259 2.39833e+011
+360 220 2.39657e+011
+76 111 2.39415e+011
+525 399 2.39051e+011
+16 434 2.38941e+011
+201 144 2.3892e+011
+450 197 2.3864e+011
+408 107 2.38639e+011
+556 265 2.38163e+011
+214 425 2.38129e+011
+229 14 2.37965e+011
+438 455 2.37815e+011
+386 450 2.3744e+011
+182 310 2.37412e+011
+141 163 2.37206e+011
+113 205 2.37158e+011
+334 281 2.37044e+011
+320 95 2.37008e+011
+63 440 2.36171e+011
+405 144 2.36098e+011
+121 148 2.36056e+011
+394 336 2.35512e+011
+511 366 2.35492e+011
+262 108 2.35307e+011
+450 437 2.35082e+011
+63 149 2.34668e+011
+204 398 2.34566e+011
+54 61 2.34553e+011
+351 354 2.34345e+011
+85 110 2.34335e+011
+384 450 2.3432e+011
+374 151 2.34207e+011
+350 141 2.33792e+011
+131 393 2.33754e+011
+234 32 2.33718e+011
+126 307 2.3339e+011
+284 34 2.33359e+011
+436 384 2.33344e+011
+328 353 2.33236e+011
+450 90 2.33224e+011
+254 108 2.33142e+011
+90 113 2.3309e+011
+223 126 2.33054e+011
+574 56 2.32789e+011
+302 132 2.32752e+011
+83 106 2.32734e+011
+543 142 2.327e+011
+605 121 2.32699e+011
+314 260 2.32693e+011
+481 126 2.32535e+011
+576 165 2.32313e+011
+135 102 2.32292e+011
+582 344 2.32034e+011
+41 122 2.3202e+011
+460 140 2.3195e+011
+508 13 2.31853e+011
+403 143 2.31694e+011
+114 164 2.3167e+011
+274 77 2.31663e+011
+544 81 2.3152e+011
+218 315 2.31435e+011
+410 105 2.31282e+011
+205 126 2.31115e+011
+416 26 2.30824e+011
+173 147 2.30814e+011
+106 304 2.30608e+011
+529 18 2.30572e+011
+521 362 2.30352e+011
+465 115 2.30314e+011
+402 163 2.303e+011
+443 378 2.30266e+011
+161 326 2.30248e+011
+399 200 2.30115e+011
+87 355 2.29929e+011
+190 131 2.29929e+011
+207 183 2.29892e+011
+163 349 2.29824e+011
+248 181 2.29778e+011
+362 66 2.29722e+011
+484 222 2.29688e+011
+556 80 2.29627e+011
+375 4 2.2959e+011
+540 262 2.29538e+011
+387 21 2.29196e+011
+499 474 2.28999e+011
+98 95 2.28884e+011
+544 249 2.28747e+011
+572 57 2.28603e+011
+432 269 2.28603e+011
+147 326 2.28508e+011
+265 286 2.28346e+011
+296 146 2.28293e+011
+388 83 2.28044e+011
+483 143 2.28007e+011
+53 252 2.2794e+011
+39 78 2.27906e+011
+289 441 2.27818e+011
+441 378 2.27763e+011
+119 162 2.27643e+011
+303 295 2.27519e+011
+574 7 2.27489e+011
+460 165 2.2726e+011
+319 186 2.2693e+011
+406 77 2.26709e+011
+107 259 2.26554e+011
+294 269 2.26532e+011
+414 245 2.26439e+011
+131 476 2.26423e+011
+530 221 2.26224e+011
+275 109 2.26207e+011
+63 315 2.26205e+011
+463 143 2.26158e+011
+69 419 2.26061e+011
+356 251 2.26042e+011
+173 417 2.25925e+011
+122 24 2.25825e+011
+323 134 2.25813e+011
+376 226 2.25735e+011
+391 449 2.25202e+011
+197 311 2.24913e+011
+281 417 2.24799e+011
+560 265 2.24795e+011
+449 417 2.24601e+011
+166 127 2.24413e+011
+514 334 2.24386e+011
+544 247 2.24106e+011
+414 144 2.24089e+011
+82 218 2.24079e+011
+303 293 2.24076e+011
+333 181 2.23853e+011
+113 307 2.23485e+011
+425 25 2.23387e+011
+524 162 2.23368e+011
+39 26 2.23289e+011
+10 75 2.23083e+011
+507 41 2.23066e+011
+356 448 2.22789e+011
+358 63 2.22729e+011
+85 177 2.22579e+011
+362 177 2.22542e+011
+157 166 2.22218e+011
+576 90 2.22004e+011
+56 142 2.21865e+011
+185 238 2.21836e+011
+348 277 2.21835e+011
+146 451 2.2172e+011
+486 222 2.214e+011
+350 352 2.21225e+011
+298 129 2.21182e+011
+420 123 2.21115e+011
+188 20 2.21104e+011
+177 201 2.21039e+011
+146 255 2.20521e+011
+533 346 2.20484e+011
+347 120 2.20465e+011
+342 391 2.20408e+011
+50 452 2.2021e+011
+154 130 2.20064e+011
+233 295 2.20032e+011
+566 143 2.19569e+011
+494 473 2.19302e+011
+420 96 2.19281e+011
+42 441 2.19216e+011
+404 104 2.19103e+011
+347 201 2.19076e+011
+291 11 2.18925e+011
+348 128 2.18618e+011
+124 148 2.18601e+011
+199 147 2.18564e+011
+335 143 2.18449e+011
+392 122 2.18406e+011
+532 173 2.18257e+011
+295 258 2.18128e+011
+370 139 2.17911e+011
+297 261 2.17885e+011
+307 196 2.1779e+011
+423 117 2.17751e+011
+468 262 2.17684e+011
+385 337 2.17587e+011
+75 147 2.17586e+011
+618 181 2.17402e+011
+148 137 2.17158e+011
+285 393 2.16843e+011
+323 137 2.16703e+011
+207 315 2.16449e+011
+352 270 2.16204e+011
+150 195 2.16198e+011
+40 183 2.16116e+011
+245 102 2.1602e+011
+226 88 2.1599e+011
+400 270 2.15958e+011
+36 470 2.15774e+011
+473 103 2.15713e+011
+126 412 2.1569e+011
+188 312 2.15471e+011
+396 119 2.15303e+011
+444 204 2.1503e+011
+181 292 2.1502e+011
+455 59 2.1483e+011
+596 59 2.14823e+011
+82 100 2.14698e+011
+531 36 2.1464e+011
+351 448 2.14538e+011
+111 217 2.14446e+011
+167 358 2.14391e+011
+170 131 2.14277e+011
+412 339 2.14268e+011
+485 237 2.1403e+011
+291 50 2.13912e+011
+122 181 2.13674e+011
+577 135 2.13654e+011
+223 103 2.13539e+011
+547 261 2.13413e+011
+321 11 2.13351e+011
+287 370 2.13351e+011
+407 104 2.13156e+011
+188 300 2.13126e+011
+166 38 2.13029e+011
+132 376 2.13004e+011
+197 91 2.1275e+011
+426 125 2.12694e+011
+161 61 2.12589e+011
+330 391 2.12538e+011
+438 397 2.12534e+011
+158 101 2.1223e+011
+473 356 2.11899e+011
+573 19 2.11577e+011
+523 141 2.11547e+011
+54 150 2.11516e+011
+8 234 2.11434e+011
+185 373 2.11424e+011
+334 9 2.11414e+011
+13 237 2.11407e+011
+540 264 2.11218e+011
+570 269 2.11209e+011
+262 31 2.1118e+011
+551 77 2.11065e+011
+421 298 2.10994e+011
+261 456 2.10708e+011
+214 450 2.10639e+011
+102 339 2.10504e+011
+188 256 2.10489e+011
+454 121 2.10428e+011
+529 119 2.10389e+011
+65 307 2.10369e+011
+90 365 2.1031e+011
+143 143 2.10207e+011
+516 82 2.10189e+011
+275 316 2.10165e+011
+375 144 2.1e+011
+419 53 2.09816e+011
+143 141 2.09699e+011
+530 176 2.09607e+011
+440 468 2.09449e+011
+243 31 2.09301e+011
+328 14 2.09262e+011
+310 258 2.09227e+011
+149 201 2.09195e+011
+231 177 2.08802e+011
+148 193 2.08463e+011
+128 375 2.0841e+011
+553 303 2.08395e+011
+485 288 2.08383e+011
+91 339 2.08075e+011
+147 125 2.07855e+011
+513 324 2.07761e+011
+13 115 2.07454e+011
+312 264 2.07361e+011
+284 199 2.07348e+011
+107 162 2.07288e+011
+414 222 2.07172e+011
+182 312 2.0711e+011
+540 443 2.07097e+011
+58 168 2.0704e+011
+422 327 2.06953e+011
+88 95 2.06923e+011
+86 288 2.06905e+011
+529 27 2.06903e+011
+51 336 2.06761e+011
+44 251 2.06719e+011
+270 414 2.06701e+011
+345 140 2.06674e+011
+68 57 2.06602e+011
+187 290 2.06543e+011
+130 171 2.06488e+011
+183 95 2.06455e+011
+288 113 2.06346e+011
+303 331 2.06302e+011
+482 455 2.06265e+011
+266 19 2.06258e+011
+404 99 2.06257e+011
+299 87 2.06233e+011
+412 183 2.06129e+011
+551 120 2.0604e+011
+473 453 2.05805e+011
+73 59 2.05798e+011
+309 266 2.05613e+011
+276 426 2.05607e+011
+538 162 2.05437e+011
+272 109 2.05398e+011
+173 291 2.05383e+011
+368 162 2.05333e+011
+263 258 2.05304e+011
+541 380 2.05296e+011
+259 458 2.0527e+011
+106 359 2.05113e+011
+514 401 2.04883e+011
+411 144 2.04811e+011
+282 81 2.04789e+011
+469 163 2.04787e+011
+243 273 2.04499e+011
+50 374 2.04288e+011
+330 217 2.04111e+011
+59 171 2.03986e+011
+208 144 2.03701e+011
+297 410 2.03661e+011
+323 370 2.03603e+011
+288 159 2.03596e+011
+133 66 2.03569e+011
+95 285 2.03553e+011
+50 378 2.03492e+011
+165 364 2.03435e+011
+100 95 2.03392e+011
+478 221 2.03251e+011
+208 73 2.03077e+011
+549 80 2.02767e+011
+49 458 2.02704e+011
+186 257 2.02507e+011
+29 259 2.02462e+011
+331 182 2.02455e+011
+290 137 2.02424e+011
+85 96 2.02393e+011
+268 417 2.02001e+011
+258 227 2.01905e+011
+171 87 2.01877e+011
+330 412 2.01811e+011
+553 18 2.01748e+011
+342 137 2.01604e+011
+176 343 2.01583e+011
+453 437 2.01577e+011
+580 202 2.01552e+011
+28 119 2.01466e+011
+163 190 2.01384e+011
+399 92 2.01374e+011
+420 132 2.01266e+011
+118 263 2.0105e+011
+386 246 2.00908e+011
+334 219 2.00752e+011
+418 93 2.00559e+011
+220 84 2.00534e+011
+159 154 2.0035e+011
+232 273 2.00087e+011
+45 340 1.99932e+011
+191 188 1.99806e+011
+390 119 1.99664e+011
+139 311 1.99591e+011
+498 154 1.99387e+011
+576 57 1.99312e+011
+316 100 1.9914e+011
+56 234 1.98956e+011
+336 182 1.9879e+011
+258 158 1.98662e+011
+314 448 1.98648e+011
+78 218 1.98612e+011
+123 412 1.98523e+011
+398 298 1.98439e+011
+528 80 1.98377e+011
+580 344 1.9828e+011
+337 331 1.98232e+011
+227 262 1.97942e+011
+180 221 1.97659e+011
+124 58 1.97649e+011
+130 375 1.975e+011
+27 45 1.97435e+011
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_3_7.txt b/test_data/harriscorners/hc_msc_0.00_0.04_3_7.txt
new file mode 100644
index 0000000..e3cea60
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_3_7.txt
@@ -0,0 +1,3267 @@
+3266
+244 94 7.52428e+012
+498 1 7.16173e+012
+121 44 7.06738e+012
+274 367 6.72401e+012
+274 365 6.52645e+012
+272 366 5.97991e+012
+421 180 5.97555e+012
+277 367 5.69686e+012
+331 128 5.59613e+012
+83 77 5.49709e+012
+121 46 5.2646e+012
+299 53 5.1256e+012
+401 263 5.00272e+012
+135 214 4.85851e+012
+238 20 4.68279e+012
+80 28 4.50504e+012
+271 291 4.38534e+012
+424 322 4.35505e+012
+129 26 4.26936e+012
+202 18 4.21799e+012
+467 238 4.18864e+012
+342 8 4.0838e+012
+199 18 4.07721e+012
+282 113 4.0347e+012
+240 92 3.97414e+012
+238 17 3.95027e+012
+342 10 3.91773e+012
+75 257 3.83362e+012
+542 14 3.80761e+012
+460 264 3.80225e+012
+438 68 3.79286e+012
+424 177 3.71703e+012
+165 240 3.64222e+012
+458 279 3.63846e+012
+542 16 3.58973e+012
+510 166 3.56818e+012
+55 30 3.52485e+012
+301 105 3.52344e+012
+151 223 3.52252e+012
+137 204 3.51914e+012
+80 4 3.50895e+012
+543 167 3.49089e+012
+510 124 3.48188e+012
+103 61 3.47697e+012
+361 294 3.4587e+012
+394 142 3.41918e+012
+413 255 3.40136e+012
+155 235 3.39326e+012
+394 317 3.39077e+012
+129 1 3.35154e+012
+210 436 3.33879e+012
+213 57 3.33636e+012
+183 35 3.32129e+012
+302 184 3.31753e+012
+243 203 3.25817e+012
+196 126 3.25617e+012
+280 368 3.24946e+012
+390 143 3.2417e+012
+282 111 3.23899e+012
+486 58 3.21708e+012
+160 144 3.19407e+012
+483 178 3.18965e+012
+81 1 3.18661e+012
+167 240 3.15202e+012
+126 255 3.13634e+012
+363 400 3.12808e+012
+513 78 3.09592e+012
+83 134 3.09292e+012
+209 56 3.09051e+012
+302 181 3.07907e+012
+175 95 3.06776e+012
+486 22 3.06083e+012
+416 8 3.05636e+012
+138 210 3.05338e+012
+541 59 3.03744e+012
+481 180 3.03634e+012
+243 201 3.03245e+012
+79 79 3.00039e+012
+138 202 2.99931e+012
+562 225 2.97595e+012
+304 183 2.96621e+012
+460 266 2.95375e+012
+175 111 2.95307e+012
+554 39 2.95207e+012
+202 313 2.94425e+012
+413 257 2.94362e+012
+287 298 2.9424e+012
+506 17 2.93799e+012
+160 142 2.93475e+012
+484 58 2.93401e+012
+221 36 2.92393e+012
+485 338 2.92333e+012
+482 22 2.9074e+012
+361 395 2.90425e+012
+34 138 2.90041e+012
+345 339 2.89994e+012
+528 102 2.89881e+012
+209 20 2.88699e+012
+342 338 2.86677e+012
+46 26 2.86609e+012
+208 221 2.86547e+012
+137 174 2.84981e+012
+164 215 2.83243e+012
+222 181 2.82964e+012
+293 16 2.82323e+012
+319 314 2.82133e+012
+339 10 2.82086e+012
+102 222 2.81186e+012
+261 202 2.80287e+012
+304 181 2.80166e+012
+224 181 2.8001e+012
+171 95 2.78781e+012
+125 186 2.78238e+012
+115 43 2.78101e+012
+36 145 2.77764e+012
+528 23 2.77185e+012
+215 71 2.76648e+012
+167 242 2.76097e+012
+424 45 2.75164e+012
+511 16 2.7421e+012
+295 15 2.74138e+012
+339 8 2.73633e+012
+544 58 2.73466e+012
+260 297 2.73407e+012
+34 8 2.73096e+012
+419 8 2.71792e+012
+31 8 2.71701e+012
+359 129 2.71319e+012
+497 160 2.70355e+012
+174 113 2.69979e+012
+348 339 2.69908e+012
+258 384 2.68848e+012
+44 26 2.68175e+012
+244 166 2.68078e+012
+34 267 2.66058e+012
+66 235 2.65514e+012
+126 164 2.65333e+012
+138 208 2.65155e+012
+41 217 2.64485e+012
+158 74 2.6446e+012
+302 176 2.64299e+012
+92 214 2.62896e+012
+46 219 2.62528e+012
+263 441 2.61718e+012
+189 218 2.61297e+012
+421 165 2.61235e+012
+326 165 2.61199e+012
+77 3 2.60595e+012
+126 26 2.59455e+012
+542 217 2.59449e+012
+211 439 2.5893e+012
+234 161 2.58677e+012
+130 37 2.585e+012
+253 12 2.5782e+012
+378 67 2.57218e+012
+283 117 2.55362e+012
+480 19 2.55265e+012
+367 143 2.54951e+012
+90 197 2.54835e+012
+383 5 2.54663e+012
+413 45 2.54467e+012
+255 139 2.54046e+012
+442 24 2.53679e+012
+420 45 2.52904e+012
+48 98 2.52796e+012
+4 46 2.5196e+012
+34 269 2.51698e+012
+286 209 2.51395e+012
+454 204 2.51109e+012
+124 197 2.50237e+012
+126 364 2.50103e+012
+511 2 2.50079e+012
+448 399 2.49276e+012
+485 358 2.49095e+012
+276 182 2.48829e+012
+189 216 2.4797e+012
+552 381 2.47733e+012
+477 5 2.47022e+012
+111 240 2.4669e+012
+299 165 2.45866e+012
+533 241 2.45809e+012
+265 442 2.45395e+012
+301 179 2.44641e+012
+236 72 2.44535e+012
+195 56 2.43921e+012
+449 299 2.43853e+012
+64 319 2.43784e+012
+447 296 2.43543e+012
+477 22 2.43285e+012
+512 221 2.42582e+012
+247 206 2.42091e+012
+319 225 2.42042e+012
+71 26 2.41211e+012
+473 243 2.41046e+012
+390 59 2.41039e+012
+384 10 2.40669e+012
+465 196 2.40538e+012
+252 139 2.4035e+012
+87 197 2.403e+012
+387 220 2.39955e+012
+477 19 2.39568e+012
+359 166 2.39344e+012
+512 342 2.38838e+012
+359 334 2.38367e+012
+302 166 2.38279e+012
+326 89 2.38184e+012
+313 148 2.37917e+012
+428 2 2.37256e+012
+447 299 2.3701e+012
+206 436 2.3647e+012
+129 75 2.36051e+012
+174 311 2.35509e+012
+333 105 2.35457e+012
+355 127 2.35421e+012
+542 365 2.35337e+012
+125 259 2.35185e+012
+112 344 2.35142e+012
+518 59 2.34554e+012
+132 75 2.34421e+012
+365 300 2.34219e+012
+476 261 2.34134e+012
+157 1 2.33671e+012
+450 338 2.33354e+012
+437 70 2.33219e+012
+448 261 2.33027e+012
+418 165 2.32952e+012
+223 420 2.32533e+012
+269 53 2.32396e+012
+467 198 2.31942e+012
+508 2 2.31917e+012
+101 79 2.31727e+012
+364 142 2.31655e+012
+551 41 2.31219e+012
+528 20 2.30962e+012
+158 72 2.30737e+012
+281 49 2.30491e+012
+317 336 2.30226e+012
+241 70 2.30128e+012
+373 82 2.30021e+012
+272 68 2.2991e+012
+523 61 2.29701e+012
+386 178 2.29101e+012
+267 53 2.28988e+012
+408 64 2.28614e+012
+109 42 2.28581e+012
+64 344 2.28267e+012
+245 207 2.28084e+012
+261 238 2.27879e+012
+428 118 2.26566e+012
+340 336 2.26403e+012
+32 269 2.26253e+012
+31 235 2.26007e+012
+563 62 2.259e+012
+427 120 2.2581e+012
+166 96 2.25354e+012
+410 162 2.25074e+012
+388 177 2.24855e+012
+335 90 2.24493e+012
+37 298 2.24257e+012
+391 296 2.24065e+012
+238 201 2.2406e+012
+383 163 2.23997e+012
+162 110 2.23339e+012
+224 39 2.23026e+012
+362 258 2.23023e+012
+575 16 2.22989e+012
+488 58 2.22794e+012
+358 319 2.2231e+012
+298 274 2.2205e+012
+516 75 2.22009e+012
+175 165 2.2142e+012
+364 253 2.21272e+012
+166 98 2.21144e+012
+206 449 2.20575e+012
+481 83 2.20499e+012
+55 290 2.2045e+012
+194 124 2.19869e+012
+525 20 2.19863e+012
+46 221 2.19512e+012
+403 120 2.19461e+012
+352 321 2.19085e+012
+47 151 2.18484e+012
+173 237 2.18377e+012
+227 293 2.18243e+012
+474 5 2.17734e+012
+310 148 2.17656e+012
+111 169 2.17598e+012
+326 141 2.17112e+012
+536 244 2.16562e+012
+357 166 2.16551e+012
+406 65 2.16147e+012
+464 394 2.1597e+012
+208 225 2.15376e+012
+110 134 2.15304e+012
+36 137 2.15115e+012
+170 240 2.1488e+012
+220 148 2.14767e+012
+173 239 2.14578e+012
+38 63 2.14043e+012
+362 333 2.13205e+012
+294 27 2.13189e+012
+217 145 2.12916e+012
+547 162 2.1267e+012
+265 296 2.12603e+012
+111 136 2.12582e+012
+527 195 2.12482e+012
+432 147 2.12351e+012
+169 19 2.12256e+012
+364 250 2.12245e+012
+87 254 2.11864e+012
+274 132 2.11487e+012
+512 100 2.11373e+012
+217 147 2.11168e+012
+335 105 2.10851e+012
+174 41 2.10054e+012
+144 311 2.0971e+012
+260 222 2.09666e+012
+187 218 2.0966e+012
+143 324 2.09616e+012
+542 214 2.09554e+012
+580 17 2.09072e+012
+385 163 2.08529e+012
+512 97 2.08277e+012
+36 135 2.07592e+012
+60 184 2.07585e+012
+546 41 2.0747e+012
+404 183 2.07213e+012
+7 10 2.0711e+012
+314 84 2.06202e+012
+4 10 2.061e+012
+469 123 2.0588e+012
+107 39 2.0538e+012
+365 6 2.05304e+012
+283 402 2.05301e+012
+380 67 2.05112e+012
+312 77 2.05104e+012
+272 280 2.04828e+012
+56 7 2.04795e+012
+164 95 2.04113e+012
+283 51 2.04012e+012
+403 277 2.03967e+012
+525 23 2.03748e+012
+288 164 2.03713e+012
+112 392 2.03673e+012
+232 199 2.03226e+012
+364 255 2.03036e+012
+389 11 2.02826e+012
+381 353 2.02815e+012
+423 336 2.02561e+012
+490 1 2.01317e+012
+578 18 2.01226e+012
+523 346 2.01168e+012
+492 1 2.01068e+012
+58 218 2.00442e+012
+360 168 2.00133e+012
+261 236 1.9983e+012
+384 124 1.99777e+012
+425 5 1.99613e+012
+411 65 1.9955e+012
+211 184 1.99487e+012
+280 365 1.98866e+012
+528 183 1.98773e+012
+251 364 1.98359e+012
+61 217 1.97992e+012
+232 263 1.97856e+012
+329 258 1.97581e+012
+446 24 1.97193e+012
+36 174 1.97166e+012
+490 139 1.97138e+012
+251 366 1.97061e+012
+34 100 1.96841e+012
+309 370 1.96569e+012
+389 294 1.9638e+012
+269 68 1.9631e+012
+529 39 1.96197e+012
+107 44 1.95989e+012
+152 307 1.95885e+012
+131 216 1.95868e+012
+508 4 1.95669e+012
+247 219 1.95481e+012
+66 26 1.94763e+012
+131 218 1.94763e+012
+379 5 1.94761e+012
+312 75 1.94356e+012
+36 172 1.94092e+012
+391 48 1.93969e+012
+528 61 1.93789e+012
+484 363 1.93385e+012
+402 275 1.9312e+012
+34 235 1.92972e+012
+480 296 1.92938e+012
+10 101 1.92885e+012
+139 21 1.92422e+012
+89 149 1.92275e+012
+514 203 1.9216e+012
+249 143 1.91728e+012
+411 259 1.91665e+012
+278 220 1.9165e+012
+172 56 1.91124e+012
+209 450 1.90901e+012
+394 65 1.90792e+012
+140 325 1.90533e+012
+394 161 1.9047e+012
+246 144 1.90442e+012
+153 197 1.90407e+012
+425 336 1.90301e+012
+437 339 1.90271e+012
+141 182 1.90144e+012
+132 71 1.89829e+012
+220 17 1.89618e+012
+142 185 1.8946e+012
+328 296 1.8945e+012
+256 152 1.8907e+012
+436 396 1.88651e+012
+323 165 1.88519e+012
+305 439 1.88412e+012
+361 142 1.88343e+012
+229 37 1.88317e+012
+58 75 1.87718e+012
+509 203 1.87609e+012
+495 118 1.87222e+012
+42 63 1.8712e+012
+131 132 1.86534e+012
+526 183 1.86478e+012
+250 220 1.85938e+012
+317 165 1.8583e+012
+46 134 1.85012e+012
+365 258 1.84906e+012
+381 124 1.84446e+012
+24 62 1.84292e+012
+379 353 1.8402e+012
+526 197 1.83933e+012
+68 45 1.83819e+012
+265 445 1.83692e+012
+482 173 1.83613e+012
+394 163 1.83486e+012
+22 63 1.83477e+012
+110 58 1.83394e+012
+22 65 1.83314e+012
+276 179 1.82853e+012
+106 41 1.8267e+012
+514 346 1.8257e+012
+128 187 1.82414e+012
+323 315 1.82337e+012
+175 168 1.82233e+012
+115 392 1.82095e+012
+521 183 1.82008e+012
+409 354 1.81559e+012
+343 108 1.81157e+012
+547 219 1.81095e+012
+253 74 1.80994e+012
+390 140 1.80853e+012
+456 44 1.80844e+012
+522 264 1.80594e+012
+236 347 1.80581e+012
+340 108 1.80577e+012
+431 318 1.80381e+012
+273 220 1.80206e+012
+512 219 1.79937e+012
+562 478 1.79848e+012
+294 122 1.7982e+012
+501 361 1.79395e+012
+467 140 1.79389e+012
+402 118 1.79045e+012
+366 105 1.79e+012
+302 215 1.78191e+012
+388 164 1.77924e+012
+495 120 1.77563e+012
+314 163 1.77482e+012
+469 421 1.77468e+012
+172 19 1.77455e+012
+12 217 1.77105e+012
+176 239 1.76949e+012
+512 140 1.76621e+012
+512 203 1.76422e+012
+50 288 1.76238e+012
+26 9 1.76211e+012
+277 143 1.76159e+012
+162 127 1.7596e+012
+527 39 1.7581e+012
+528 193 1.75701e+012
+274 129 1.75679e+012
+168 115 1.75678e+012
+548 182 1.7564e+012
+168 326 1.75611e+012
+156 74 1.75251e+012
+452 374 1.75172e+012
+361 251 1.75139e+012
+508 454 1.74826e+012
+330 165 1.74431e+012
+526 186 1.74171e+012
+155 199 1.74e+012
+569 161 1.73783e+012
+376 316 1.73523e+012
+385 295 1.73489e+012
+415 45 1.73327e+012
+158 96 1.73088e+012
+462 43 1.73074e+012
+455 85 1.72888e+012
+75 7 1.72839e+012
+457 3 1.72661e+012
+277 141 1.72652e+012
+454 5 1.72628e+012
+568 40 1.72572e+012
+457 5 1.7252e+012
+543 211 1.72242e+012
+113 346 1.72171e+012
+363 7 1.72124e+012
+190 108 1.72059e+012
+510 140 1.71837e+012
+442 239 1.71828e+012
+145 161 1.71785e+012
+392 160 1.71317e+012
+380 162 1.70863e+012
+197 84 1.70722e+012
+541 208 1.7071e+012
+275 52 1.70494e+012
+277 129 1.70357e+012
+368 106 1.70172e+012
+544 2 1.6977e+012
+275 141 1.69657e+012
+222 218 1.69063e+012
+534 20 1.68866e+012
+238 75 1.68752e+012
+56 4 1.67886e+012
+379 338 1.67762e+012
+501 143 1.67548e+012
+477 204 1.67498e+012
+450 217 1.67414e+012
+487 263 1.67352e+012
+523 344 1.67346e+012
+101 360 1.67332e+012
+94 6 1.67321e+012
+405 82 1.67307e+012
+97 448 1.67181e+012
+378 317 1.67109e+012
+538 457 1.6709e+012
+528 186 1.67028e+012
+29 30 1.66703e+012
+107 28 1.66464e+012
+192 143 1.66225e+012
+493 139 1.65955e+012
+535 266 1.65495e+012
+230 127 1.65419e+012
+510 84 1.65285e+012
+69 149 1.65253e+012
+291 122 1.65208e+012
+389 65 1.65207e+012
+499 62 1.6515e+012
+61 134 1.64939e+012
+276 353 1.64907e+012
+392 163 1.64696e+012
+432 112 1.64595e+012
+163 131 1.64342e+012
+392 218 1.64232e+012
+543 208 1.63875e+012
+191 278 1.63402e+012
+139 111 1.63277e+012
+422 141 1.63127e+012
+102 164 1.63036e+012
+251 423 1.62706e+012
+263 402 1.62532e+012
+222 112 1.62528e+012
+566 160 1.62185e+012
+433 86 1.62103e+012
+192 145 1.62098e+012
+162 114 1.61528e+012
+386 126 1.61298e+012
+574 140 1.61255e+012
+324 146 1.61202e+012
+346 349 1.60711e+012
+414 23 1.60681e+012
+157 199 1.60607e+012
+160 166 1.60523e+012
+498 66 1.60443e+012
+77 236 1.60102e+012
+408 183 1.60068e+012
+571 40 1.59947e+012
+77 234 1.59943e+012
+49 155 1.5969e+012
+33 30 1.59572e+012
+530 141 1.59561e+012
+27 30 1.59531e+012
+162 96 1.59366e+012
+160 126 1.59276e+012
+530 143 1.59187e+012
+182 137 1.5914e+012
+375 117 1.59051e+012
+572 162 1.59007e+012
+578 53 1.58979e+012
+418 85 1.58952e+012
+228 127 1.58867e+012
+558 19 1.58825e+012
+479 204 1.58815e+012
+313 79 1.58778e+012
+503 61 1.58655e+012
+16 217 1.58608e+012
+373 117 1.58401e+012
+509 174 1.58335e+012
+387 124 1.58249e+012
+528 360 1.58217e+012
+222 151 1.58174e+012
+389 323 1.58049e+012
+220 14 1.57919e+012
+190 171 1.57871e+012
+228 263 1.57482e+012
+146 311 1.57196e+012
+303 169 1.56986e+012
+434 89 1.5695e+012
+485 84 1.56925e+012
+531 360 1.5686e+012
+71 149 1.56749e+012
+466 123 1.5663e+012
+146 309 1.56605e+012
+392 220 1.56588e+012
+90 258 1.56455e+012
+250 194 1.56332e+012
+174 187 1.56284e+012
+271 166 1.56102e+012
+526 221 1.56076e+012
+232 347 1.5605e+012
+393 21 1.5578e+012
+139 109 1.55765e+012
+61 204 1.55699e+012
+322 146 1.55661e+012
+509 142 1.55642e+012
+155 94 1.55504e+012
+564 160 1.55289e+012
+385 324 1.55228e+012
+405 339 1.55219e+012
+417 438 1.5495e+012
+385 321 1.54408e+012
+435 182 1.54189e+012
+438 391 1.53953e+012
+520 201 1.53798e+012
+261 234 1.53793e+012
+277 390 1.53679e+012
+538 138 1.53479e+012
+549 41 1.53476e+012
+544 4 1.53466e+012
+105 222 1.53142e+012
+462 27 1.52969e+012
+363 180 1.52897e+012
+166 326 1.5273e+012
+523 122 1.52726e+012
+512 142 1.52722e+012
+340 163 1.5272e+012
+272 64 1.52658e+012
+227 186 1.5262e+012
+406 198 1.52487e+012
+369 86 1.52463e+012
+485 44 1.52433e+012
+498 225 1.52302e+012
+256 147 1.51866e+012
+344 125 1.51851e+012
+162 277 1.51791e+012
+430 85 1.51754e+012
+226 421 1.51741e+012
+479 15 1.51568e+012
+184 110 1.51491e+012
+166 20 1.51442e+012
+407 82 1.51366e+012
+380 107 1.51346e+012
+378 107 1.51274e+012
+164 206 1.51253e+012
+272 66 1.51107e+012
+186 19 1.51053e+012
+575 178 1.50833e+012
+330 141 1.50787e+012
+358 219 1.50737e+012
+541 41 1.50664e+012
+453 85 1.50603e+012
+160 137 1.50526e+012
+183 399 1.50447e+012
+97 445 1.50445e+012
+145 392 1.50261e+012
+275 137 1.50034e+012
+83 476 1.49994e+012
+343 122 1.499e+012
+253 76 1.49796e+012
+337 107 1.4977e+012
+218 106 1.49758e+012
+414 25 1.49753e+012
+342 164 1.49751e+012
+492 21 1.4968e+012
+388 16 1.49641e+012
+282 220 1.4963e+012
+371 105 1.49542e+012
+260 165 1.49299e+012
+446 8 1.49203e+012
+452 45 1.49192e+012
+108 98 1.49076e+012
+134 97 1.48974e+012
+159 239 1.48821e+012
+261 141 1.48752e+012
+506 61 1.48733e+012
+185 107 1.48649e+012
+511 174 1.48633e+012
+418 87 1.48503e+012
+68 476 1.48455e+012
+211 144 1.48398e+012
+114 169 1.48309e+012
+63 59 1.48072e+012
+445 123 1.4801e+012
+371 161 1.47962e+012
+509 343 1.47962e+012
+102 236 1.4796e+012
+150 306 1.47909e+012
+25 221 1.47801e+012
+161 131 1.47706e+012
+175 260 1.47665e+012
+232 345 1.4758e+012
+157 91 1.47547e+012
+437 182 1.47452e+012
+528 363 1.47293e+012
+437 305 1.46935e+012
+185 136 1.4643e+012
+408 338 1.46401e+012
+248 194 1.46286e+012
+357 259 1.46145e+012
+509 6 1.45946e+012
+445 354 1.45851e+012
+498 459 1.45845e+012
+36 219 1.45665e+012
+420 87 1.45488e+012
+91 23 1.45466e+012
+188 108 1.45381e+012
+190 360 1.45355e+012
+332 294 1.44906e+012
+218 207 1.44853e+012
+188 182 1.44731e+012
+356 219 1.44656e+012
+215 125 1.44408e+012
+540 98 1.4426e+012
+114 216 1.44192e+012
+330 294 1.44094e+012
+388 21 1.43945e+012
+178 168 1.43565e+012
+72 146 1.43547e+012
+186 202 1.43125e+012
+208 15 1.42986e+012
+372 69 1.4298e+012
+170 200 1.42774e+012
+579 81 1.42562e+012
+168 198 1.42549e+012
+164 115 1.42545e+012
+342 166 1.42541e+012
+349 144 1.42509e+012
+280 195 1.42473e+012
+403 186 1.42323e+012
+536 394 1.42297e+012
+166 107 1.42262e+012
+389 325 1.42203e+012
+42 81 1.42175e+012
+404 376 1.41887e+012
+482 375 1.41857e+012
+155 91 1.41535e+012
+534 184 1.41407e+012
+438 160 1.41337e+012
+289 345 1.41258e+012
+346 276 1.41185e+012
+272 129 1.4118e+012
+232 127 1.40938e+012
+266 14 1.40748e+012
+175 19 1.40737e+012
+353 337 1.40718e+012
+299 138 1.40643e+012
+333 296 1.40582e+012
+59 253 1.40487e+012
+164 210 1.40415e+012
+378 121 1.4029e+012
+540 124 1.40113e+012
+104 3 1.40101e+012
+142 393 1.39605e+012
+346 179 1.3948e+012
+394 218 1.39415e+012
+528 221 1.39395e+012
+160 181 1.39389e+012
+268 242 1.39389e+012
+66 216 1.39285e+012
+301 205 1.39228e+012
+77 269 1.39159e+012
+210 153 1.39056e+012
+483 329 1.38925e+012
+104 5 1.38849e+012
+543 8 1.38671e+012
+145 6 1.38671e+012
+223 433 1.38602e+012
+546 164 1.38541e+012
+205 163 1.38395e+012
+457 83 1.37964e+012
+265 30 1.3789e+012
+61 253 1.37822e+012
+114 1 1.37748e+012
+389 166 1.37747e+012
+466 121 1.37691e+012
+78 475 1.3765e+012
+112 179 1.37624e+012
+487 44 1.37611e+012
+365 336 1.37513e+012
+61 60 1.37501e+012
+209 155 1.37482e+012
+310 9 1.3732e+012
+162 73 1.37111e+012
+165 277 1.37087e+012
+185 344 1.37033e+012
+123 263 1.36964e+012
+64 216 1.36785e+012
+228 288 1.36767e+012
+377 85 1.36553e+012
+524 186 1.36521e+012
+85 1 1.36492e+012
+282 72 1.36481e+012
+57 70 1.36458e+012
+276 331 1.36451e+012
+345 166 1.36405e+012
+191 204 1.36363e+012
+480 165 1.36171e+012
+375 162 1.36164e+012
+181 108 1.36042e+012
+355 26 1.36027e+012
+448 124 1.36014e+012
+21 218 1.3599e+012
+533 61 1.35934e+012
+164 313 1.35873e+012
+72 259 1.35516e+012
+449 138 1.35491e+012
+238 134 1.35478e+012
+105 77 1.3546e+012
+561 18 1.35401e+012
+296 421 1.35169e+012
+411 21 1.35079e+012
+175 75 1.35029e+012
+517 182 1.35027e+012
+293 297 1.35027e+012
+31 66 1.35016e+012
+50 254 1.34907e+012
+503 164 1.34629e+012
+423 332 1.34563e+012
+536 17 1.34516e+012
+493 81 1.34463e+012
+95 149 1.34458e+012
+329 10 1.34453e+012
+100 198 1.34449e+012
+206 295 1.3433e+012
+436 124 1.34178e+012
+264 32 1.34174e+012
+78 271 1.34142e+012
+191 206 1.3408e+012
+134 130 1.34071e+012
+351 144 1.33955e+012
+482 373 1.33901e+012
+150 112 1.33855e+012
+95 257 1.33815e+012
+102 234 1.33761e+012
+48 10 1.33595e+012
+450 140 1.33575e+012
+205 159 1.33472e+012
+134 127 1.3347e+012
+542 98 1.33231e+012
+373 392 1.33116e+012
+501 263 1.33042e+012
+364 201 1.33013e+012
+544 457 1.32984e+012
+147 397 1.32967e+012
+277 187 1.32933e+012
+109 94 1.32775e+012
+165 357 1.32686e+012
+340 264 1.32506e+012
+79 40 1.32341e+012
+181 20 1.32313e+012
+85 61 1.32292e+012
+537 96 1.32183e+012
+541 139 1.32181e+012
+306 364 1.32117e+012
+67 150 1.32044e+012
+109 96 1.31854e+012
+195 132 1.31799e+012
+152 112 1.31769e+012
+248 314 1.31706e+012
+163 204 1.31702e+012
+502 21 1.31644e+012
+264 14 1.31464e+012
+527 189 1.31416e+012
+41 26 1.31232e+012
+283 394 1.30996e+012
+54 222 1.30921e+012
+218 125 1.30913e+012
+368 109 1.3083e+012
+85 148 1.30535e+012
+190 139 1.30155e+012
+466 26 1.30052e+012
+492 120 1.29854e+012
+151 229 1.29747e+012
+506 143 1.29724e+012
+512 363 1.29559e+012
+344 275 1.29401e+012
+501 63 1.29383e+012
+241 57 1.29304e+012
+135 147 1.29233e+012
+492 118 1.29186e+012
+496 458 1.29091e+012
+100 5 1.28907e+012
+269 132 1.28825e+012
+247 402 1.28811e+012
+340 122 1.28796e+012
+126 95 1.28763e+012
+385 244 1.28752e+012
+206 157 1.28652e+012
+120 115 1.28613e+012
+514 119 1.28561e+012
+255 89 1.28548e+012
+279 353 1.28528e+012
+524 184 1.28388e+012
+483 163 1.28325e+012
+517 346 1.28302e+012
+396 21 1.28047e+012
+46 81 1.28039e+012
+300 264 1.27992e+012
+388 161 1.27987e+012
+247 386 1.27953e+012
+168 289 1.27778e+012
+463 101 1.27655e+012
+118 5 1.27433e+012
+52 358 1.27423e+012
+138 58 1.2724e+012
+91 290 1.27204e+012
+93 149 1.27189e+012
+296 331 1.27086e+012
+190 137 1.27031e+012
+514 42 1.2701e+012
+286 342 1.26983e+012
+357 11 1.26927e+012
+136 143 1.26905e+012
+499 80 1.26886e+012
+298 421 1.26854e+012
+461 162 1.26838e+012
+445 243 1.26834e+012
+397 163 1.2669e+012
+119 128 1.26673e+012
+130 128 1.26664e+012
+124 2 1.26589e+012
+37 239 1.2652e+012
+561 146 1.26348e+012
+382 26 1.2622e+012
+302 209 1.2616e+012
+474 204 1.26004e+012
+434 159 1.25764e+012
+112 177 1.25642e+012
+48 12 1.25633e+012
+86 181 1.25558e+012
+513 298 1.2544e+012
+325 426 1.25311e+012
+280 198 1.25289e+012
+209 447 1.25264e+012
+209 419 1.25253e+012
+513 46 1.25182e+012
+449 166 1.24997e+012
+121 52 1.24989e+012
+436 301 1.24974e+012
+278 132 1.2495e+012
+289 124 1.24883e+012
+56 66 1.24708e+012
+304 189 1.24692e+012
+122 6 1.24626e+012
+242 192 1.24444e+012
+527 424 1.24303e+012
+423 261 1.24226e+012
+33 110 1.24195e+012
+279 135 1.24177e+012
+525 424 1.24061e+012
+556 181 1.23763e+012
+118 1 1.2369e+012
+424 62 1.23519e+012
+120 5 1.23496e+012
+474 62 1.23432e+012
+197 87 1.23409e+012
+207 162 1.2338e+012
+106 182 1.23245e+012
+554 181 1.23146e+012
+563 323 1.22984e+012
+464 356 1.22928e+012
+138 178 1.22795e+012
+426 375 1.22678e+012
+250 35 1.22566e+012
+162 252 1.22556e+012
+35 30 1.22432e+012
+103 196 1.22407e+012
+5 64 1.22292e+012
+320 105 1.22199e+012
+57 68 1.22173e+012
+482 367 1.22031e+012
+61 370 1.21968e+012
+150 114 1.21926e+012
+281 438 1.21911e+012
+487 81 1.2191e+012
+542 254 1.21831e+012
+394 355 1.2182e+012
+287 396 1.21746e+012
+493 60 1.21712e+012
+354 144 1.21698e+012
+118 115 1.21689e+012
+261 249 1.2165e+012
+287 262 1.2165e+012
+258 249 1.21636e+012
+537 183 1.216e+012
+180 137 1.21531e+012
+145 17 1.21489e+012
+190 328 1.21386e+012
+72 130 1.21311e+012
+218 98 1.21252e+012
+283 198 1.21067e+012
+162 254 1.21006e+012
+360 368 1.20924e+012
+345 47 1.20921e+012
+292 88 1.2083e+012
+145 1 1.20704e+012
+418 284 1.20612e+012
+363 368 1.20602e+012
+258 161 1.20571e+012
+412 98 1.20549e+012
+560 323 1.20478e+012
+351 11 1.20474e+012
+530 160 1.20401e+012
+519 346 1.2037e+012
+147 78 1.20277e+012
+56 145 1.20261e+012
+562 149 1.20229e+012
+306 90 1.20142e+012
+280 192 1.20037e+012
+299 140 1.19867e+012
+524 171 1.19844e+012
+494 458 1.19826e+012
+272 145 1.19818e+012
+496 21 1.19704e+012
+140 114 1.1958e+012
+440 123 1.1954e+012
+397 356 1.19492e+012
+354 11 1.19444e+012
+570 121 1.19441e+012
+42 10 1.19371e+012
+67 253 1.18951e+012
+293 31 1.18877e+012
+140 56 1.18873e+012
+126 77 1.18813e+012
+305 146 1.18677e+012
+541 133 1.18629e+012
+518 201 1.18461e+012
+266 130 1.18439e+012
+514 121 1.18406e+012
+576 127 1.1839e+012
+118 222 1.18365e+012
+331 202 1.18268e+012
+178 272 1.18236e+012
+37 169 1.18198e+012
+94 9 1.18154e+012
+297 69 1.18144e+012
+218 128 1.18106e+012
+385 88 1.17863e+012
+168 196 1.17851e+012
+289 122 1.17828e+012
+435 319 1.1782e+012
+277 295 1.17737e+012
+160 254 1.17679e+012
+423 398 1.17646e+012
+412 100 1.17523e+012
+82 61 1.17479e+012
+212 150 1.17403e+012
+539 265 1.17402e+012
+390 242 1.17361e+012
+137 99 1.17273e+012
+199 167 1.17094e+012
+42 118 1.17008e+012
+289 262 1.1699e+012
+88 369 1.16897e+012
+412 470 1.16716e+012
+357 162 1.16715e+012
+264 141 1.16705e+012
+327 105 1.16697e+012
+186 97 1.16629e+012
+40 355 1.16594e+012
+186 100 1.16536e+012
+228 260 1.16521e+012
+501 164 1.1651e+012
+346 45 1.16458e+012
+471 202 1.16389e+012
+161 135 1.16377e+012
+232 125 1.16377e+012
+360 170 1.16301e+012
+180 395 1.16286e+012
+389 168 1.16278e+012
+543 133 1.16254e+012
+30 218 1.1625e+012
+256 249 1.15993e+012
+510 129 1.15981e+012
+264 71 1.15871e+012
+308 31 1.1586e+012
+363 357 1.15758e+012
+358 241 1.15621e+012
+11 204 1.15514e+012
+406 164 1.1551e+012
+496 80 1.1549e+012
+148 449 1.15479e+012
+190 167 1.1543e+012
+60 40 1.15339e+012
+253 249 1.15256e+012
+46 12 1.15226e+012
+207 203 1.1516e+012
+374 240 1.1515e+012
+259 34 1.15142e+012
+165 286 1.1514e+012
+411 102 1.15085e+012
+516 16 1.15074e+012
+130 96 1.15065e+012
+148 88 1.15044e+012
+347 239 1.14986e+012
+536 94 1.14954e+012
+52 254 1.14907e+012
+56 253 1.14865e+012
+310 6 1.14833e+012
+117 426 1.14771e+012
+561 475 1.14686e+012
+125 270 1.14553e+012
+193 312 1.14389e+012
+328 181 1.14229e+012
+148 130 1.14194e+012
+278 191 1.14185e+012
+209 144 1.14105e+012
+201 163 1.14076e+012
+212 15 1.13991e+012
+101 28 1.13961e+012
+191 350 1.13952e+012
+468 202 1.13871e+012
+388 96 1.13838e+012
+494 456 1.13787e+012
+272 170 1.13775e+012
+305 53 1.13733e+012
+110 2 1.1373e+012
+166 150 1.13701e+012
+514 16 1.13606e+012
+142 114 1.13484e+012
+132 237 1.13404e+012
+267 144 1.13373e+012
+354 269 1.13372e+012
+542 252 1.13298e+012
+155 57 1.13007e+012
+195 167 1.13007e+012
+381 181 1.12999e+012
+576 125 1.12913e+012
+199 132 1.12886e+012
+299 332 1.12841e+012
+49 62 1.12832e+012
+534 160 1.12829e+012
+472 23 1.12677e+012
+248 293 1.12673e+012
+187 204 1.12528e+012
+26 131 1.12406e+012
+527 344 1.12322e+012
+306 192 1.12314e+012
+478 403 1.12306e+012
+341 39 1.12246e+012
+349 125 1.12006e+012
+123 126 1.11835e+012
+299 296 1.1178e+012
+1 383 1.11675e+012
+126 219 1.11624e+012
+509 179 1.11538e+012
+448 127 1.1153e+012
+449 24 1.11474e+012
+537 122 1.11472e+012
+277 198 1.11433e+012
+116 169 1.11383e+012
+13 204 1.11274e+012
+115 131 1.11147e+012
+201 88 1.11102e+012
+23 201 1.11099e+012
+193 218 1.11038e+012
+261 71 1.11037e+012
+298 398 1.10968e+012
+128 127 1.10862e+012
+237 130 1.10856e+012
+538 406 1.10795e+012
+153 131 1.10713e+012
+355 254 1.1062e+012
+264 389 1.10559e+012
+306 194 1.10508e+012
+53 62 1.10429e+012
+139 99 1.10419e+012
+383 88 1.10265e+012
+534 79 1.10261e+012
+471 200 1.10253e+012
+302 160 1.10209e+012
+573 124 1.10158e+012
+36 217 1.10122e+012
+486 139 1.10106e+012
+525 426 1.10069e+012
+367 86 1.10012e+012
+539 101 1.09969e+012
+325 341 1.09892e+012
+116 222 1.09873e+012
+12 81 1.09832e+012
+178 262 1.09772e+012
+257 202 1.09711e+012
+189 2 1.09684e+012
+319 386 1.09606e+012
+392 17 1.09587e+012
+210 35 1.09581e+012
+25 201 1.0957e+012
+408 26 1.09379e+012
+269 58 1.09188e+012
+326 183 1.09043e+012
+398 143 1.09014e+012
+297 72 1.08825e+012
+446 351 1.08651e+012
+33 219 1.08631e+012
+163 201 1.08227e+012
+196 111 1.082e+012
+163 150 1.08193e+012
+265 74 1.08159e+012
+524 190 1.08158e+012
+429 44 1.08065e+012
+267 146 1.07999e+012
+381 88 1.07946e+012
+542 95 1.07848e+012
+345 297 1.07835e+012
+374 76 1.07822e+012
+118 77 1.0776e+012
+270 91 1.07718e+012
+261 391 1.0761e+012
+493 58 1.07561e+012
+572 405 1.07498e+012
+120 2 1.07482e+012
+477 341 1.07419e+012
+322 426 1.0739e+012
+65 253 1.07357e+012
+130 428 1.07279e+012
+219 110 1.07249e+012
+223 87 1.07246e+012
+96 423 1.07184e+012
+271 108 1.07177e+012
+400 144 1.07081e+012
+4 154 1.0705e+012
+277 110 1.06999e+012
+258 88 1.06985e+012
+178 20 1.06847e+012
+220 212 1.06821e+012
+185 308 1.06762e+012
+286 220 1.0674e+012
+353 334 1.06537e+012
+80 195 1.06497e+012
+523 79 1.06441e+012
+370 300 1.0632e+012
+506 361 1.06268e+012
+445 118 1.06138e+012
+362 407 1.05895e+012
+415 98 1.05872e+012
+107 429 1.05857e+012
+124 6 1.0582e+012
+38 270 1.0575e+012
+500 22 1.05746e+012
+304 88 1.05619e+012
+540 182 1.05559e+012
+317 103 1.0551e+012
+509 177 1.05433e+012
+335 369 1.05425e+012
+161 201 1.05423e+012
+86 369 1.05391e+012
+271 106 1.053e+012
+573 330 1.05269e+012
+113 211 1.05219e+012
+372 78 1.05156e+012
+451 6 1.05105e+012
+436 394 1.05085e+012
+242 367 1.05048e+012
+408 102 1.04992e+012
+60 109 1.04992e+012
+44 98 1.04955e+012
+401 166 1.04951e+012
+116 76 1.04884e+012
+451 3 1.04813e+012
+490 183 1.04769e+012
+452 103 1.04638e+012
+437 240 1.04597e+012
+270 93 1.04448e+012
+545 248 1.04417e+012
+95 197 1.04378e+012
+570 405 1.04368e+012
+310 446 1.04287e+012
+130 168 1.04251e+012
+449 84 1.04241e+012
+151 130 1.04215e+012
+118 95 1.04191e+012
+177 75 1.04171e+012
+402 144 1.0412e+012
+136 182 1.04117e+012
+321 121 1.04052e+012
+536 79 1.03933e+012
+217 280 1.03846e+012
+273 316 1.03804e+012
+468 42 1.03787e+012
+359 9 1.0376e+012
+57 365 1.03623e+012
+416 298 1.03547e+012
+85 63 1.03484e+012
+129 112 1.03457e+012
+73 96 1.03444e+012
+592 19 1.03399e+012
+434 124 1.03386e+012
+67 251 1.03361e+012
+527 426 1.03346e+012
+90 376 1.0324e+012
+352 163 1.03189e+012
+227 123 1.03101e+012
+237 417 1.03088e+012
+277 204 1.03077e+012
+40 10 1.02915e+012
+431 89 1.02905e+012
+328 64 1.02801e+012
+125 127 1.02796e+012
+557 463 1.02763e+012
+448 376 1.02701e+012
+407 430 1.02657e+012
+360 160 1.02628e+012
+259 107 1.02624e+012
+66 372 1.02568e+012
+552 78 1.02537e+012
+131 147 1.02385e+012
+307 367 1.02384e+012
+196 90 1.02344e+012
+550 57 1.02331e+012
+542 101 1.02298e+012
+185 340 1.02223e+012
+189 324 1.02201e+012
+66 276 1.02196e+012
+432 225 1.02051e+012
+449 118 1.01993e+012
+217 277 1.01939e+012
+451 438 1.01909e+012
+241 420 1.01689e+012
+578 43 1.01667e+012
+108 146 1.01645e+012
+291 262 1.01431e+012
+535 121 1.014e+012
+308 353 1.01387e+012
+13 114 1.01324e+012
+379 88 1.0132e+012
+474 246 1.01237e+012
+487 84 1.01227e+012
+541 127 1.01205e+012
+421 61 1.00809e+012
+586 17 1.00751e+012
+191 211 1.00694e+012
+238 366 1.00683e+012
+462 142 1.00682e+012
+399 182 1.00587e+012
+319 384 1.00553e+012
+296 260 1.00541e+012
+74 128 1.00517e+012
+357 9 1.00503e+012
+541 131 1.00446e+012
+514 262 1.00318e+012
+542 262 1.00288e+012
+449 87 1.00233e+012
+363 65 1.00199e+012
+387 242 1.00194e+012
+301 133 1.00157e+012
+434 92 1.00059e+012
+340 392 1.00047e+012
+128 114 1.0001e+012
+198 90 9.99735e+011
+245 190 9.99561e+011
+178 57 9.98715e+011
+192 17 9.98218e+011
+386 92 9.97925e+011
+116 4 9.9743e+011
+575 13 9.96573e+011
+65 251 9.96554e+011
+399 184 9.95963e+011
+325 15 9.95686e+011
+386 5 9.9304e+011
+186 1 9.92666e+011
+294 146 9.90898e+011
+323 121 9.90597e+011
+244 293 9.89236e+011
+179 37 9.89023e+011
+72 373 9.88743e+011
+480 451 9.88459e+011
+213 163 9.88275e+011
+110 326 9.87584e+011
+150 151 9.87571e+011
+52 42 9.87519e+011
+182 201 9.87019e+011
+374 72 9.86994e+011
+57 100 9.86553e+011
+114 167 9.85805e+011
+506 178 9.85495e+011
+529 35 9.85484e+011
+165 178 9.85257e+011
+222 153 9.8484e+011
+459 340 9.83743e+011
+330 64 9.83697e+011
+392 215 9.8369e+011
+531 120 9.83326e+011
+151 91 9.83238e+011
+229 14 9.82995e+011
+46 355 9.82591e+011
+506 176 9.81846e+011
+333 241 9.81458e+011
+334 391 9.8142e+011
+403 166 9.8129e+011
+413 82 9.80195e+011
+151 448 9.79969e+011
+184 132 9.7794e+011
+190 326 9.77734e+011
+215 280 9.76607e+011
+206 419 9.76469e+011
+483 288 9.75967e+011
+337 390 9.7589e+011
+265 249 9.74608e+011
+484 121 9.74275e+011
+343 463 9.73684e+011
+480 168 9.73166e+011
+9 46 9.71138e+011
+196 190 9.69982e+011
+120 222 9.69966e+011
+136 238 9.68982e+011
+339 473 9.68675e+011
+193 134 9.68303e+011
+197 194 9.67603e+011
+230 16 9.64478e+011
+562 272 9.6409e+011
+199 111 9.63963e+011
+402 104 9.63476e+011
+434 379 9.62618e+011
+385 90 9.62268e+011
+88 23 9.61459e+011
+348 164 9.61324e+011
+174 201 9.61315e+011
+437 280 9.60483e+011
+241 194 9.60469e+011
+390 135 9.60398e+011
+148 80 9.6001e+011
+333 335 9.59896e+011
+455 162 9.59391e+011
+204 127 9.57697e+011
+302 211 9.57135e+011
+111 263 9.56816e+011
+373 299 9.56787e+011
+189 312 9.56556e+011
+304 90 9.55702e+011
+291 335 9.55522e+011
+371 89 9.55435e+011
+28 133 9.5413e+011
+210 162 9.53789e+011
+58 204 9.52588e+011
+463 224 9.50922e+011
+562 274 9.50657e+011
+58 149 9.50314e+011
+360 448 9.49746e+011
+451 163 9.48501e+011
+249 260 9.48393e+011
+100 257 9.46487e+011
+174 183 9.46267e+011
+163 152 9.45448e+011
+594 19 9.44761e+011
+538 40 9.43065e+011
+156 305 9.42784e+011
+434 45 9.42447e+011
+267 74 9.42414e+011
+382 146 9.40345e+011
+121 57 9.40223e+011
+239 219 9.40211e+011
+375 5 9.39626e+011
+116 218 9.39366e+011
+542 93 9.39202e+011
+461 340 9.39167e+011
+345 391 9.38971e+011
+400 164 9.38791e+011
+291 264 9.38497e+011
+402 102 9.36561e+011
+215 163 9.36458e+011
+381 413 9.36354e+011
+65 211 9.36252e+011
+480 440 9.36023e+011
+91 79 9.35607e+011
+338 427 9.35238e+011
+91 60 9.34929e+011
+375 299 9.34901e+011
+139 147 9.34838e+011
+273 94 9.34833e+011
+559 243 9.3475e+011
+306 447 9.34473e+011
+201 109 9.3434e+011
+250 164 9.3381e+011
+145 20 9.3349e+011
+482 125 9.33184e+011
+62 148 9.32934e+011
+448 444 9.32413e+011
+371 338 9.32253e+011
+182 121 9.31931e+011
+303 158 9.31832e+011
+58 170 9.30539e+011
+148 21 9.29594e+011
+295 126 9.29024e+011
+217 352 9.28568e+011
+226 91 9.28448e+011
+122 95 9.27852e+011
+54 170 9.27735e+011
+556 243 9.27296e+011
+93 93 9.26889e+011
+42 308 9.26681e+011
+253 182 9.26236e+011
+245 195 9.26232e+011
+481 292 9.25827e+011
+187 313 9.25025e+011
+293 164 9.24918e+011
+38 81 9.24496e+011
+502 43 9.24356e+011
+113 94 9.22032e+011
+216 174 9.21305e+011
+63 26 9.19652e+011
+179 122 9.19621e+011
+182 96 9.19527e+011
+283 124 9.1898e+011
+556 245 9.18936e+011
+40 308 9.18489e+011
+421 63 9.17727e+011
+177 122 9.16411e+011
+547 139 9.15958e+011
+455 58 9.15051e+011
+118 218 9.13639e+011
+52 4 9.13321e+011
+436 379 9.12968e+011
+269 144 9.12269e+011
+161 152 9.10209e+011
+218 102 9.09618e+011
+592 21 9.08105e+011
+374 105 9.07076e+011
+136 136 9.0665e+011
+96 93 9.06e+011
+219 153 9.05873e+011
+558 181 9.04898e+011
+43 473 9.04293e+011
+130 306 9.03378e+011
+330 213 9.03351e+011
+218 290 9.03279e+011
+55 360 9.03279e+011
+67 211 9.03242e+011
+86 364 9.03118e+011
+93 60 9.02965e+011
+514 380 9.02377e+011
+332 355 9.01988e+011
+138 311 9.00924e+011
+383 413 9.00821e+011
+54 42 9.00613e+011
+188 307 9.00076e+011
+315 238 8.99511e+011
+10 32 8.99502e+011
+531 266 8.99417e+011
+434 382 8.99321e+011
+573 421 8.99131e+011
+306 359 8.9823e+011
+529 177 8.98003e+011
+170 149 8.97926e+011
+190 132 8.96583e+011
+232 150 8.95981e+011
+97 363 8.95573e+011
+399 106 8.95312e+011
+594 21 8.94547e+011
+284 240 8.94297e+011
+211 135 8.93794e+011
+488 340 8.9365e+011
+44 475 8.93593e+011
+201 345 8.92512e+011
+526 383 8.92233e+011
+72 166 8.92186e+011
+211 138 8.92166e+011
+55 62 8.91859e+011
+450 198 8.91228e+011
+277 201 8.9105e+011
+555 303 8.91016e+011
+195 75 8.90795e+011
+270 103 8.90595e+011
+448 339 8.90151e+011
+279 387 8.88771e+011
+302 243 8.87982e+011
+105 360 8.87813e+011
+203 345 8.86822e+011
+65 6 8.86464e+011
+173 119 8.86354e+011
+235 220 8.86131e+011
+413 298 8.85304e+011
+128 307 8.85215e+011
+578 56 8.84484e+011
+360 362 8.84177e+011
+87 311 8.83799e+011
+222 125 8.83769e+011
+408 143 8.82829e+011
+281 204 8.81473e+011
+227 72 8.81266e+011
+406 99 8.79503e+011
+110 110 8.79489e+011
+214 174 8.78897e+011
+534 96 8.78198e+011
+377 128 8.78058e+011
+390 204 8.77923e+011
+112 174 8.77873e+011
+358 244 8.76631e+011
+377 182 8.76405e+011
+400 199 8.76134e+011
+91 276 8.76022e+011
+30 256 8.7555e+011
+281 33 8.75058e+011
+245 213 8.74855e+011
+11 78 8.74208e+011
+433 280 8.73989e+011
+390 335 8.73758e+011
+196 146 8.73545e+011
+87 288 8.73319e+011
+433 277 8.72554e+011
+569 422 8.72078e+011
+293 162 8.71633e+011
+194 165 8.69737e+011
+391 118 8.692e+011
+169 182 8.69169e+011
+290 311 8.68704e+011
+402 220 8.68135e+011
+107 109 8.6806e+011
+544 262 8.67824e+011
+214 451 8.67715e+011
+258 368 8.6746e+011
+88 372 8.6676e+011
+400 220 8.66683e+011
+259 328 8.66575e+011
+333 415 8.66057e+011
+41 182 8.6556e+011
+237 420 8.65339e+011
+302 442 8.63386e+011
+386 282 8.6314e+011
+77 129 8.62934e+011
+133 136 8.62487e+011
+294 311 8.62141e+011
+569 382 8.61697e+011
+303 294 8.61562e+011
+225 72 8.61255e+011
+195 77 8.60154e+011
+294 313 8.599e+011
+486 121 8.59763e+011
+178 183 8.59661e+011
+450 416 8.58991e+011
+209 138 8.58748e+011
+75 374 8.57745e+011
+37 202 8.57651e+011
+123 114 8.57526e+011
+229 150 8.57524e+011
+224 51 8.55069e+011
+309 448 8.54912e+011
+345 295 8.53594e+011
+120 447 8.53083e+011
+84 215 8.52086e+011
+295 335 8.51983e+011
+47 162 8.51876e+011
+452 62 8.51812e+011
+479 11 8.51399e+011
+184 311 8.51223e+011
+349 123 8.5108e+011
+290 183 8.50612e+011
+86 372 8.50449e+011
+442 97 8.50447e+011
+288 184 8.50338e+011
+269 416 8.50237e+011
+310 265 8.48894e+011
+222 102 8.48657e+011
+492 180 8.48406e+011
+217 204 8.48331e+011
+335 218 8.47922e+011
+57 368 8.47269e+011
+400 197 8.46797e+011
+97 28 8.4661e+011
+180 201 8.46434e+011
+280 124 8.46274e+011
+412 416 8.4591e+011
+484 142 8.456e+011
+323 29 8.45388e+011
+89 340 8.45131e+011
+44 339 8.41545e+011
+522 426 8.41542e+011
+413 300 8.41279e+011
+444 452 8.41237e+011
+545 244 8.40632e+011
+453 119 8.39488e+011
+251 182 8.39049e+011
+295 140 8.38535e+011
+365 86 8.38407e+011
+489 118 8.38325e+011
+57 39 8.38231e+011
+165 361 8.38082e+011
+200 30 8.37771e+011
+284 121 8.35493e+011
+495 100 8.34601e+011
+104 306 8.34265e+011
+495 474 8.33173e+011
+188 301 8.33083e+011
+445 204 8.32292e+011
+218 423 8.32239e+011
+286 121 8.31268e+011
+181 312 8.30077e+011
+463 341 8.29407e+011
+545 252 8.29055e+011
+72 187 8.2849e+011
+345 140 8.28035e+011
+461 121 8.27796e+011
+500 102 8.27158e+011
+206 127 8.26599e+011
+179 344 8.26442e+011
+434 82 8.26094e+011
+96 22 8.25945e+011
+405 104 8.25331e+011
+536 260 8.23957e+011
+561 142 8.23835e+011
+408 104 8.23415e+011
+354 15 8.23414e+011
+490 340 8.22894e+011
+54 172 8.22778e+011
+256 107 8.22424e+011
+120 218 8.22378e+011
+390 130 8.21202e+011
+532 344 8.20519e+011
+332 357 8.2047e+011
+524 399 8.19817e+011
+150 153 8.19647e+011
+250 154 8.19614e+011
+119 110 8.19233e+011
+464 115 8.19028e+011
+155 299 8.18212e+011
+314 446 8.17921e+011
+166 363 8.179e+011
+157 171 8.16739e+011
+370 465 8.16502e+011
+63 152 8.16397e+011
+301 145 8.15974e+011
+242 219 8.14992e+011
+264 309 8.14549e+011
+37 200 8.14403e+011
+416 244 8.14019e+011
+425 201 8.13829e+011
+361 244 8.13411e+011
+104 257 8.12755e+011
+188 304 8.12067e+011
+529 270 8.11675e+011
+330 66 8.11448e+011
+355 105 8.11249e+011
+407 14 8.11185e+011
+86 374 8.10212e+011
+151 94 8.09772e+011
+559 271 8.09372e+011
+147 196 8.08814e+011
+580 343 8.08338e+011
+457 121 8.08119e+011
+563 71 8.07455e+011
+558 79 8.06784e+011
+560 464 8.0675e+011
+98 259 8.06636e+011
+385 258 8.06502e+011
+396 138 8.06338e+011
+131 135 8.06178e+011
+334 10 8.06055e+011
+318 30 8.05552e+011
+60 43 8.05488e+011
+566 145 8.05333e+011
+489 121 8.05293e+011
+158 310 8.05022e+011
+413 247 8.04838e+011
+88 207 8.04597e+011
+359 50 8.04321e+011
+483 371 8.04228e+011
+359 53 8.03693e+011
+91 20 8.03436e+011
+320 30 8.03396e+011
+336 443 8.02654e+011
+411 263 8.02392e+011
+359 178 8.01935e+011
+390 333 8.01823e+011
+452 416 8.01771e+011
+291 146 7.99906e+011
+516 162 7.99823e+011
+149 196 7.99603e+011
+219 204 7.9944e+011
+497 101 7.98114e+011
+326 138 7.97533e+011
+375 463 7.9748e+011
+235 150 7.97388e+011
+111 358 7.97027e+011
+125 306 7.96944e+011
+106 257 7.96674e+011
+398 220 7.96519e+011
+301 130 7.96298e+011
+572 451 7.96241e+011
+204 394 7.96037e+011
+119 161 7.95829e+011
+378 342 7.95664e+011
+337 334 7.9565e+011
+357 282 7.95397e+011
+352 426 7.95246e+011
+493 340 7.95121e+011
+260 369 7.94992e+011
+576 134 7.94946e+011
+111 338 7.94814e+011
+348 87 7.93797e+011
+349 297 7.93346e+011
+48 236 7.93139e+011
+483 47 7.91572e+011
+562 462 7.91206e+011
+393 10 7.90909e+011
+386 335 7.90802e+011
+110 323 7.90582e+011
+1 381 7.90255e+011
+509 58 7.88677e+011
+149 199 7.88341e+011
+93 387 7.88296e+011
+105 304 7.88273e+011
+521 424 7.87892e+011
+121 180 7.87606e+011
+174 122 7.87307e+011
+555 201 7.87216e+011
+437 45 7.86351e+011
+107 304 7.8598e+011
+388 419 7.85637e+011
+535 342 7.85322e+011
+160 61 7.85037e+011
+251 184 7.84609e+011
+570 451 7.83924e+011
+562 464 7.83663e+011
+421 290 7.82787e+011
+85 38 7.82627e+011
+69 338 7.82345e+011
+468 208 7.81719e+011
+580 345 7.81539e+011
+386 24 7.81521e+011
+245 180 7.80928e+011
+56 303 7.80846e+011
+533 342 7.80514e+011
+247 107 7.80379e+011
+185 167 7.80077e+011
+50 167 7.79827e+011
+434 240 7.79756e+011
+86 339 7.79616e+011
+80 234 7.79039e+011
+299 256 7.78799e+011
+213 94 7.78561e+011
+72 408 7.78136e+011
+115 359 7.77796e+011
+470 117 7.7733e+011
+183 381 7.75872e+011
+357 66 7.75581e+011
+158 258 7.75503e+011
+527 399 7.75266e+011
+222 123 7.74867e+011
+330 216 7.74647e+011
+479 44 7.73369e+011
+178 329 7.72524e+011
+397 46 7.72317e+011
+106 166 7.72044e+011
+163 118 7.71212e+011
+592 105 7.71092e+011
+149 40 7.70991e+011
+279 164 7.70369e+011
+566 18 7.68188e+011
+445 166 7.68183e+011
+300 444 7.67004e+011
+202 394 7.66866e+011
+342 466 7.66772e+011
+150 134 7.66296e+011
+436 277 7.66051e+011
+80 236 7.65819e+011
+345 200 7.64697e+011
+298 88 7.64197e+011
+526 79 7.63892e+011
+435 62 7.63298e+011
+291 139 7.62616e+011
+543 440 7.62509e+011
+248 326 7.62397e+011
+401 271 7.62361e+011
+282 418 7.61567e+011
+174 291 7.61193e+011
+268 219 7.61163e+011
+426 103 7.60733e+011
+327 102 7.60585e+011
+210 423 7.59668e+011
+163 34 7.5845e+011
+172 416 7.58106e+011
+455 360 7.57999e+011
+215 94 7.57855e+011
+247 418 7.57736e+011
+511 134 7.57313e+011
+329 322 7.57283e+011
+515 376 7.56366e+011
+285 32 7.56053e+011
+280 418 7.55873e+011
+343 200 7.55659e+011
+164 350 7.55651e+011
+219 314 7.5475e+011
+311 221 7.54572e+011
+354 265 7.54136e+011
+329 25 7.53971e+011
+135 322 7.53844e+011
+369 92 7.53549e+011
+454 438 7.52909e+011
+84 110 7.51289e+011
+353 297 7.51172e+011
+152 303 7.50322e+011
+343 260 7.50061e+011
+54 301 7.49987e+011
+150 303 7.49377e+011
+253 9 7.49199e+011
+584 140 7.48737e+011
+248 346 7.48518e+011
+58 371 7.48502e+011
+284 399 7.48283e+011
+8 114 7.48058e+011
+338 443 7.479e+011
+380 128 7.47754e+011
+90 95 7.47671e+011
+318 187 7.47427e+011
+64 424 7.46445e+011
+123 110 7.46121e+011
+160 57 7.4487e+011
+332 29 7.43873e+011
+346 372 7.43665e+011
+204 418 7.43062e+011
+547 244 7.43006e+011
+281 36 7.42761e+011
+451 123 7.42752e+011
+105 201 7.42601e+011
+528 30 7.42138e+011
+18 342 7.4175e+011
+3 234 7.41686e+011
+223 239 7.41493e+011
+189 290 7.40751e+011
+391 53 7.40733e+011
+117 110 7.40051e+011
+168 179 7.3953e+011
+107 338 7.35357e+011
+153 192 7.34121e+011
+366 245 7.34078e+011
+41 339 7.34077e+011
+487 118 7.33454e+011
+277 210 7.33183e+011
+81 101 7.32775e+011
+386 65 7.32679e+011
+363 449 7.32517e+011
+357 63 7.3211e+011
+74 61 7.32008e+011
+107 340 7.31905e+011
+132 394 7.31592e+011
+120 118 7.3101e+011
+69 335 7.30462e+011
+173 148 7.30408e+011
+277 166 7.30266e+011
+186 376 7.2934e+011
+16 116 7.2863e+011
+325 133 7.2804e+011
+573 57 7.27747e+011
+405 10 7.27553e+011
+416 470 7.26563e+011
+116 58 7.26112e+011
+345 333 7.25944e+011
+409 14 7.25709e+011
+84 100 7.25498e+011
+43 408 7.24471e+011
+221 239 7.24405e+011
+583 39 7.24076e+011
+335 415 7.23877e+011
+400 427 7.2376e+011
+91 285 7.23065e+011
+282 442 7.22815e+011
+47 288 7.22811e+011
+389 201 7.22713e+011
+312 261 7.21395e+011
+76 110 7.20989e+011
+287 442 7.20558e+011
+22 48 7.2051e+011
+376 224 7.20378e+011
+76 60 7.19876e+011
+582 140 7.19227e+011
+526 177 7.18995e+011
+78 199 7.18846e+011
+117 61 7.18786e+011
+579 140 7.18158e+011
+215 289 7.18005e+011
+332 180 7.17718e+011
+519 162 7.17618e+011
+229 147 7.17441e+011
+479 286 7.16354e+011
+52 451 7.15572e+011
+165 308 7.15399e+011
+414 244 7.15106e+011
+311 223 7.13837e+011
+152 301 7.1313e+011
+465 162 7.12915e+011
+505 380 7.12884e+011
+347 391 7.12347e+011
+497 282 7.12101e+011
+7 16 7.11726e+011
+289 118 7.1171e+011
+296 200 7.11182e+011
+427 142 7.09743e+011
+12 421 7.09176e+011
+389 88 7.08942e+011
+200 145 7.08368e+011
+66 306 7.06967e+011
+520 165 7.06181e+011
+343 312 7.06104e+011
+143 177 7.0521e+011
+335 437 7.05097e+011
+199 76 7.04593e+011
+342 196 7.04332e+011
+450 324 7.04252e+011
+541 381 7.03656e+011
+86 377 7.03588e+011
+327 25 7.03487e+011
+342 316 7.03197e+011
+162 38 7.02867e+011
+341 297 7.02624e+011
+327 319 7.02478e+011
+122 82 7.0171e+011
+318 99 7.01256e+011
+38 26 7.01051e+011
+336 445 7.00776e+011
+402 427 7.00553e+011
+351 334 7.0042e+011
+420 363 6.99772e+011
+184 379 6.99037e+011
+566 180 6.98935e+011
+529 397 6.9873e+011
+183 237 6.98532e+011
+508 254 6.97155e+011
+212 424 6.97014e+011
+562 243 6.96974e+011
+11 76 6.96949e+011
+190 357 6.96883e+011
+122 169 6.96345e+011
+525 277 6.95941e+011
+403 430 6.9582e+011
+430 81 6.95658e+011
+95 39 6.94379e+011
+59 166 6.9332e+011
+260 274 6.93288e+011
+369 94 6.93099e+011
+346 142 6.92767e+011
+260 457 6.92431e+011
+158 101 6.91984e+011
+159 99 6.91713e+011
+343 142 6.91022e+011
+490 458 6.90766e+011
+581 56 6.90722e+011
+394 242 6.90532e+011
+326 28 6.9025e+011
+164 38 6.90146e+011
+105 161 6.88671e+011
+27 118 6.88585e+011
+479 283 6.88479e+011
+204 256 6.88366e+011
+150 301 6.87199e+011
+340 466 6.87141e+011
+518 142 6.86956e+011
+211 140 6.86804e+011
+593 101 6.86696e+011
+249 256 6.86596e+011
+110 76 6.86535e+011
+542 443 6.8634e+011
+340 442 6.85789e+011
+6 234 6.85247e+011
+69 257 6.8501e+011
+496 284 6.84987e+011
+507 42 6.84607e+011
+55 333 6.84427e+011
+45 408 6.84228e+011
+248 182 6.83263e+011
+125 216 6.83177e+011
+272 207 6.82804e+011
+280 122 6.82666e+011
+360 444 6.82526e+011
+118 180 6.82519e+011
+410 143 6.82467e+011
+84 95 6.818e+011
+42 122 6.814e+011
+123 84 6.81318e+011
+455 141 6.80495e+011
+179 342 6.80246e+011
+300 440 6.79993e+011
+114 182 6.79529e+011
+28 116 6.79173e+011
+247 256 6.79052e+011
+92 340 6.78092e+011
+272 204 6.77975e+011
+170 179 6.76965e+011
+449 285 6.7675e+011
+65 11 6.76736e+011
+276 320 6.76234e+011
+25 118 6.75854e+011
+278 73 6.7582e+011
+424 174 6.7537e+011
+580 216 6.75259e+011
+44 253 6.74063e+011
+502 122 6.73839e+011
+421 297 6.73474e+011
+144 142 6.73392e+011
+292 51 6.73322e+011
+181 237 6.72838e+011
+413 264 6.72771e+011
+451 359 6.72685e+011
+59 105 6.7266e+011
+9 233 6.72321e+011
+117 290 6.71782e+011
+440 379 6.70796e+011
+173 343 6.7072e+011
+356 50 6.70456e+011
+532 173 6.70233e+011
+379 453 6.69455e+011
+264 259 6.69305e+011
+116 182 6.69161e+011
+213 96 6.689e+011
+509 300 6.68747e+011
+202 144 6.6857e+011
+186 290 6.68518e+011
+155 316 6.67773e+011
+38 113 6.67726e+011
+248 184 6.67725e+011
+322 11 6.67674e+011
+245 257 6.67463e+011
+478 125 6.66918e+011
+192 186 6.6563e+011
+146 139 6.65063e+011
+302 408 6.64831e+011
+545 82 6.64234e+011
+233 31 6.63532e+011
+4 164 6.6329e+011
+471 212 6.63288e+011
+13 112 6.63124e+011
+17 434 6.6293e+011
+277 206 6.62869e+011
+466 5 6.6242e+011
+323 186 6.61277e+011
+155 318 6.60551e+011
+409 108 6.60145e+011
+86 110 6.59883e+011
+555 79 6.59623e+011
+569 181 6.59257e+011
+520 97 6.59083e+011
+115 277 6.59082e+011
+346 117 6.58809e+011
+317 101 6.58517e+011
+361 451 6.58212e+011
+385 356 6.57936e+011
+125 327 6.57469e+011
+44 138 6.57367e+011
+501 420 6.57193e+011
+244 103 6.56916e+011
+546 439 6.56239e+011
+438 469 6.55835e+011
+94 19 6.55312e+011
+538 222 6.55294e+011
+498 342 6.55253e+011
+394 104 6.54193e+011
+361 139 6.53727e+011
+405 108 6.53701e+011
+355 449 6.52333e+011
+433 155 6.52135e+011
+336 144 6.51524e+011
+188 265 6.51287e+011
+330 136 6.5034e+011
+276 124 6.50204e+011
+430 62 6.50129e+011
+600 365 6.49877e+011
+140 239 6.49751e+011
+401 126 6.49116e+011
+296 269 6.48798e+011
+323 133 6.48786e+011
+463 3 6.48005e+011
+68 419 6.47763e+011
+99 96 6.47734e+011
+560 266 6.47203e+011
+66 203 6.46724e+011
+449 176 6.46541e+011
+58 172 6.45533e+011
+263 284 6.45479e+011
+126 132 6.4544e+011
+197 344 6.45136e+011
+266 219 6.45049e+011
+121 147 6.44445e+011
+572 446 6.43828e+011
+86 95 6.4378e+011
+152 57 6.42939e+011
+243 134 6.42738e+011
+44 88 6.42682e+011
+232 133 6.4257e+011
+262 397 6.42027e+011
+252 86 6.41914e+011
+154 445 6.41703e+011
+52 146 6.41073e+011
+178 201 6.40404e+011
+455 61 6.4036e+011
+355 447 6.40253e+011
+67 205 6.39981e+011
+547 281 6.39215e+011
+208 405 6.39195e+011
+292 200 6.39174e+011
+121 216 6.38846e+011
+544 259 6.38437e+011
+147 136 6.38279e+011
+330 218 6.38247e+011
+163 431 6.37963e+011
+214 400 6.37703e+011
+160 33 6.37578e+011
+70 420 6.37271e+011
+125 341 6.3706e+011
+512 113 6.37055e+011
+318 202 6.36391e+011
+400 27 6.36332e+011
+533 339 6.36259e+011
+315 9 6.35942e+011
+418 448 6.35889e+011
+576 166 6.35758e+011
+158 313 6.35011e+011
+71 251 6.33564e+011
+419 412 6.33502e+011
+121 149 6.32346e+011
+191 239 6.31775e+011
+206 415 6.31733e+011
+522 361 6.31534e+011
+342 43 6.31207e+011
+402 44 6.30888e+011
+503 419 6.30757e+011
+262 456 6.30743e+011
+184 116 6.3011e+011
+205 403 6.30105e+011
+419 95 6.29356e+011
+536 223 6.28643e+011
+83 170 6.28493e+011
+266 418 6.28089e+011
+497 359 6.27805e+011
+207 403 6.27688e+011
+468 100 6.27374e+011
+498 340 6.2711e+011
+329 99 6.26943e+011
+535 340 6.26332e+011
+323 136 6.26233e+011
+51 229 6.25718e+011
+142 238 6.24753e+011
+465 3 6.24665e+011
+264 304 6.24659e+011
+194 239 6.24654e+011
+514 259 6.23554e+011
+26 44 6.23398e+011
+497 362 6.23005e+011
+547 283 6.22589e+011
+510 113 6.21887e+011
+147 194 6.21869e+011
+64 313 6.21569e+011
+400 429 6.21453e+011
+449 196 6.21137e+011
+546 340 6.21091e+011
+101 296 6.20832e+011
+231 364 6.20643e+011
+352 448 6.20441e+011
+181 240 6.19773e+011
+277 33 6.19616e+011
+48 407 6.19532e+011
+50 375 6.19291e+011
+375 156 6.18712e+011
+307 54 6.18563e+011
+170 124 6.18541e+011
+154 295 6.18288e+011
+242 281 6.18269e+011
+105 432 6.17738e+011
+578 214 6.16903e+011
+209 125 6.16495e+011
+405 41 6.15621e+011
+258 457 6.1524e+011
+130 411 6.1444e+011
+200 391 6.14308e+011
+442 379 6.14167e+011
+88 389 6.13262e+011
+278 88 6.12629e+011
+85 239 6.12271e+011
+433 295 6.12134e+011
+560 268 6.12043e+011
+377 145 6.11743e+011
+414 222 6.11701e+011
+183 316 6.11643e+011
+266 20 6.10636e+011
+130 477 6.10457e+011
+402 6 6.10275e+011
+240 147 6.09918e+011
+92 367 6.0957e+011
+32 45 6.09421e+011
+117 306 6.09384e+011
+323 138 6.09341e+011
+55 335 6.09252e+011
+498 462 6.08247e+011
+337 29 6.07232e+011
+101 96 6.06577e+011
+311 299 6.06395e+011
+508 441 6.0628e+011
+448 62 6.05939e+011
+309 54 6.05551e+011
+114 163 6.052e+011
+85 234 6.05078e+011
+349 448 6.04947e+011
+434 238 6.04787e+011
+190 255 6.04703e+011
+170 451 6.0419e+011
+26 49 6.03971e+011
+481 456 6.03738e+011
+20 286 6.03682e+011
+313 8 6.03539e+011
+303 130 6.03422e+011
+483 241 6.02539e+011
+515 325 6.02486e+011
+423 204 6.02473e+011
+88 232 6.02138e+011
+159 431 6.02134e+011
+107 359 6.01717e+011
+242 108 6.01689e+011
+89 391 6.01038e+011
+26 46 6.00563e+011
+20 317 6.00533e+011
+315 127 6.00014e+011
+336 49 5.99934e+011
+389 450 5.99908e+011
+373 101 5.99873e+011
+349 333 5.99829e+011
+161 431 5.99218e+011
+199 327 5.98548e+011
+529 137 5.98328e+011
+130 374 5.98163e+011
+281 261 5.98151e+011
+391 89 5.9808e+011
+166 380 5.97985e+011
+81 406 5.9776e+011
+406 96 5.97642e+011
+198 198 5.9755e+011
+413 144 5.97243e+011
+41 287 5.96885e+011
+254 191 5.96778e+011
+368 30 5.96704e+011
+195 344 5.96147e+011
+13 434 5.96075e+011
+377 101 5.95937e+011
+266 259 5.95569e+011
+195 199 5.95403e+011
+139 136 5.95308e+011
+124 412 5.9516e+011
+330 355 5.95081e+011
+321 184 5.95067e+011
+438 466 5.95064e+011
+337 259 5.94721e+011
+478 143 5.94545e+011
+142 429 5.94445e+011
+207 133 5.93417e+011
+186 238 5.93366e+011
+210 94 5.91703e+011
+510 376 5.91282e+011
+256 157 5.91175e+011
+586 346 5.91088e+011
+512 111 5.90358e+011
+364 443 5.90286e+011
+63 287 5.89857e+011
+373 150 5.89344e+011
+473 102 5.89152e+011
+428 163 5.88866e+011
+186 349 5.88442e+011
+131 187 5.88139e+011
+117 263 5.88075e+011
+68 303 5.8784e+011
+258 133 5.87799e+011
+195 212 5.87788e+011
+95 285 5.87609e+011
+124 148 5.86454e+011
+542 80 5.8622e+011
+205 399 5.85725e+011
+440 83 5.85218e+011
+239 243 5.84767e+011
+114 252 5.84553e+011
+170 122 5.84358e+011
+485 238 5.84258e+011
+47 203 5.84116e+011
+579 245 5.84085e+011
+59 164 5.83997e+011
+103 428 5.83976e+011
+575 459 5.83865e+011
+102 338 5.83437e+011
+168 416 5.83141e+011
+204 397 5.83101e+011
+441 454 5.82595e+011
+207 125 5.81806e+011
+277 426 5.8179e+011
+207 91 5.81295e+011
+94 367 5.81243e+011
+53 375 5.80934e+011
+232 155 5.80536e+011
+282 215 5.80053e+011
+375 151 5.8003e+011
+137 124 5.79765e+011
+81 375 5.79675e+011
+579 309 5.79674e+011
+181 155 5.79629e+011
+334 49 5.79439e+011
+302 404 5.7939e+011
+104 232 5.78696e+011
+112 307 5.78574e+011
+141 117 5.78296e+011
+519 361 5.7819e+011
+571 327 5.77208e+011
+157 225 5.77135e+011
+213 204 5.76443e+011
+34 164 5.76336e+011
+63 285 5.76104e+011
+523 165 5.75859e+011
+189 316 5.75691e+011
+337 64 5.75397e+011
+375 154 5.75395e+011
+333 433 5.75223e+011
+174 130 5.75212e+011
+114 262 5.75186e+011
+192 253 5.7509e+011
+535 173 5.74715e+011
+39 287 5.7448e+011
+72 184 5.73794e+011
+185 72 5.73761e+011
+426 106 5.73697e+011
+35 45 5.73652e+011
+194 292 5.73513e+011
+52 170 5.73238e+011
+382 47 5.72885e+011
+552 19 5.72476e+011
+585 309 5.72427e+011
+389 85 5.72033e+011
+193 307 5.71866e+011
+25 255 5.7144e+011
+319 96 5.71103e+011
+13 206 5.70716e+011
+17 237 5.70701e+011
+174 128 5.70449e+011
+195 254 5.70214e+011
+438 83 5.70001e+011
+577 245 5.69137e+011
+304 404 5.68765e+011
+199 329 5.68434e+011
+1 10 5.68308e+011
+170 126 5.68287e+011
+387 451 5.68115e+011
+510 111 5.67993e+011
+304 332 5.67801e+011
+317 184 5.67768e+011
+410 221 5.67509e+011
+374 451 5.66772e+011
+204 125 5.65316e+011
+415 412 5.65281e+011
+209 127 5.64808e+011
+164 434 5.64344e+011
+518 83 5.64265e+011
+217 169 5.63759e+011
+154 188 5.63602e+011
+416 415 5.6348e+011
+442 320 5.63307e+011
+397 120 5.63294e+011
+75 408 5.63177e+011
+283 84 5.62557e+011
+100 426 5.62344e+011
+509 12 5.62304e+011
+11 478 5.62084e+011
+434 25 5.61926e+011
+512 210 5.60228e+011
+218 237 5.59823e+011
+181 74 5.5934e+011
+289 199 5.59263e+011
+402 42 5.59246e+011
+413 284 5.58592e+011
+567 201 5.58061e+011
+94 124 5.57719e+011
+472 82 5.57486e+011
+62 441 5.57365e+011
+349 121 5.56876e+011
+222 51 5.56786e+011
+245 184 5.56568e+011
+217 400 5.56475e+011
+414 219 5.56361e+011
+330 286 5.56e+011
+447 180 5.55223e+011
+447 132 5.55207e+011
+226 202 5.55133e+011
+133 411 5.54855e+011
+38 23 5.54325e+011
+330 61 5.5391e+011
+510 210 5.5384e+011
+357 249 5.53574e+011
+448 448 5.53222e+011
+522 95 5.53184e+011
+92 320 5.52935e+011
+63 365 5.52813e+011
+389 2 5.52338e+011
+475 451 5.5224e+011
+407 77 5.51566e+011
+462 183 5.51368e+011
+84 107 5.51352e+011
+150 137 5.51301e+011
+394 182 5.50266e+011
+142 284 5.50209e+011
+483 239 5.5013e+011
+9 475 5.48956e+011
+485 202 5.48842e+011
+218 94 5.48726e+011
+509 283 5.48645e+011
+512 50 5.48245e+011
+185 119 5.47261e+011
+35 337 5.46865e+011
+37 292 5.46476e+011
+444 320 5.46388e+011
+175 142 5.46379e+011
+487 202 5.46357e+011
+190 71 5.4521e+011
+12 32 5.45144e+011
+297 130 5.45099e+011
+326 345 5.44744e+011
+545 86 5.44734e+011
+54 234 5.44598e+011
+9 69 5.44573e+011
+89 354 5.44515e+011
+562 39 5.44214e+011
+280 88 5.44124e+011
+331 282 5.4407e+011
+4 32 5.43681e+011
+172 326 5.43479e+011
+385 247 5.43376e+011
+552 303 5.43242e+011
+365 165 5.43118e+011
+469 103 5.43042e+011
+483 243 5.42938e+011
+256 192 5.42852e+011
+70 61 5.42786e+011
+313 130 5.42317e+011
+220 286 5.41567e+011
+142 99 5.4131e+011
+299 406 5.41169e+011
+243 130 5.41095e+011
+49 335 5.41065e+011
+313 127 5.41042e+011
+587 161 5.40655e+011
+419 415 5.40464e+011
+123 304 5.40439e+011
+63 363 5.40394e+011
+548 265 5.40234e+011
+204 148 5.3929e+011
+396 182 5.38643e+011
+509 380 5.38472e+011
+205 33 5.38327e+011
+92 280 5.38225e+011
+347 128 5.38128e+011
+267 261 5.37913e+011
+338 220 5.37885e+011
+138 319 5.37807e+011
+202 366 5.37681e+011
+306 259 5.37489e+011
+283 332 5.37488e+011
+328 51 5.36961e+011
+105 338 5.36834e+011
+209 140 5.36475e+011
+127 412 5.36318e+011
+159 176 5.36097e+011
+206 38 5.36024e+011
+527 437 5.34945e+011
+202 404 5.34853e+011
+550 302 5.34754e+011
+138 317 5.34577e+011
+256 458 5.34545e+011
+378 158 5.34296e+011
+187 256 5.33787e+011
+185 161 5.33413e+011
+301 66 5.33265e+011
+87 355 5.32612e+011
+568 324 5.32144e+011
+519 242 5.32042e+011
+266 399 5.31633e+011
+471 102 5.31506e+011
+563 154 5.31051e+011
+176 151 5.30602e+011
+147 191 5.30532e+011
+497 242 5.3034e+011
+275 424 5.30014e+011
+61 365 5.29998e+011
+461 304 5.29541e+011
+397 122 5.28927e+011
+515 400 5.2884e+011
+92 282 5.27812e+011
+1 378 5.27146e+011
+285 81 5.27052e+011
+192 344 5.26391e+011
+48 338 5.26038e+011
+140 317 5.25776e+011
+33 37 5.25563e+011
+209 317 5.25438e+011
+266 186 5.24756e+011
+157 174 5.24622e+011
+376 281 5.24491e+011
+383 451 5.24373e+011
+541 244 5.24079e+011
+180 292 5.23719e+011
+477 280 5.23639e+011
+114 205 5.22784e+011
+436 464 5.22693e+011
+295 150 5.22441e+011
+531 112 5.22405e+011
+460 182 5.22356e+011
+352 365 5.22067e+011
+57 233 5.21934e+011
+9 478 5.21751e+011
+565 464 5.21665e+011
+226 162 5.21597e+011
+64 207 5.21231e+011
+10 34 5.21052e+011
+77 165 5.205e+011
+565 462 5.20128e+011
+155 303 5.19839e+011
+264 89 5.19542e+011
+155 191 5.19456e+011
+478 377 5.19301e+011
+571 459 5.18669e+011
+145 136 5.18649e+011
+207 236 5.18614e+011
+48 422 5.17061e+011
+268 119 5.16543e+011
+487 240 5.16526e+011
+63 44 5.1651e+011
+458 115 5.1605e+011
+49 225 5.15673e+011
+469 163 5.15371e+011
+445 247 5.14862e+011
+19 237 5.14794e+011
+157 176 5.14331e+011
+286 246 5.14148e+011
+488 301 5.1401e+011
+51 377 5.1387e+011
+191 420 5.13626e+011
+470 433 5.13426e+011
+475 380 5.13059e+011
+101 185 5.13021e+011
+46 92 5.12927e+011
+95 42 5.12816e+011
+152 215 5.12772e+011
+181 259 5.12488e+011
+147 255 5.1238e+011
+576 327 5.12305e+011
+135 61 5.11957e+011
+269 413 5.113e+011
+5 198 5.11144e+011
+239 215 5.10908e+011
+18 274 5.10364e+011
+263 453 5.10088e+011
+94 371 5.09869e+011
+199 96 5.09863e+011
+31 40 5.09799e+011
+587 310 5.09773e+011
+357 246 5.09734e+011
+571 239 5.09636e+011
+273 176 5.09355e+011
+292 110 5.09228e+011
+439 454 5.08425e+011
+538 178 5.08367e+011
+308 164 5.07683e+011
+272 253 5.07588e+011
+29 37 5.07552e+011
+144 145 5.07525e+011
+159 434 5.07512e+011
+391 85 5.0716e+011
+402 29 5.06233e+011
+432 270 5.06105e+011
+43 250 5.06097e+011
+319 125 5.0562e+011
+444 341 5.05143e+011
+136 187 5.05131e+011
+477 44 5.04084e+011
+279 237 5.03778e+011
+315 234 5.03259e+011
+97 366 5.03121e+011
+567 271 5.03012e+011
+133 64 5.01691e+011
+437 228 5.01602e+011
+105 227 5.01484e+011
+258 130 5.0048e+011
+324 351 5.00332e+011
+544 265 4.99794e+011
+230 332 4.99793e+011
+449 90 4.99613e+011
+488 299 4.99207e+011
+383 449 4.9917e+011
+155 229 4.98263e+011
+469 5 4.97806e+011
+30 79 4.97518e+011
+488 135 4.97312e+011
+82 373 4.96936e+011
+223 384 4.96719e+011
+567 248 4.96653e+011
+490 136 4.9603e+011
+577 309 4.96007e+011
+451 181 4.95874e+011
+291 439 4.9585e+011
+89 113 4.95845e+011
+154 215 4.95794e+011
+283 86 4.95719e+011
+255 406 4.9546e+011
+439 456 4.95004e+011
+439 319 4.9487e+011
+253 435 4.94853e+011
+214 404 4.94553e+011
+120 304 4.94519e+011
+100 232 4.94438e+011
+223 162 4.94422e+011
+493 469 4.94323e+011
+126 237 4.94313e+011
+541 177 4.9422e+011
+39 314 4.9411e+011
+467 109 4.94071e+011
+182 291 4.94024e+011
+488 54 4.93754e+011
+354 64 4.9347e+011
+53 377 4.93426e+011
+435 228 4.93417e+011
+27 188 4.93341e+011
+463 84 4.93203e+011
+29 169 4.92833e+011
+474 162 4.92803e+011
+270 203 4.92772e+011
+589 309 4.92738e+011
+163 104 4.92722e+011
+489 469 4.92545e+011
+327 352 4.92513e+011
+20 119 4.91807e+011
+122 341 4.91587e+011
+144 41 4.91496e+011
+148 96 4.91185e+011
+174 326 4.91017e+011
+296 256 4.90662e+011
+485 235 4.90402e+011
+274 121 4.90093e+011
+565 248 4.89694e+011
+211 203 4.8931e+011
+281 78 4.89196e+011
+198 466 4.89001e+011
+84 357 4.88921e+011
+242 245 4.88586e+011
+69 377 4.88566e+011
+148 326 4.88565e+011
+67 208 4.88343e+011
+250 246 4.88147e+011
+415 144 4.88106e+011
+400 130 4.8805e+011
+349 367 4.88041e+011
+108 161 4.87901e+011
+343 29 4.87386e+011
+398 269 4.87369e+011
+35 335 4.87351e+011
+112 427 4.87292e+011
+215 316 4.87272e+011
+446 444 4.87061e+011
+75 199 4.86737e+011
+200 8 4.86439e+011
+298 91 4.86183e+011
+399 93 4.8595e+011
+51 39 4.85897e+011
+178 154 4.85659e+011
+330 288 4.85658e+011
+307 129 4.85601e+011
+226 364 4.85376e+011
+194 241 4.85234e+011
+53 333 4.85191e+011
+442 87 4.84785e+011
+442 85 4.84619e+011
+532 79 4.84386e+011
+134 311 4.84365e+011
+196 465 4.84118e+011
+249 418 4.84087e+011
+283 78 4.83984e+011
+53 335 4.83753e+011
+131 185 4.83607e+011
+295 130 4.83573e+011
+228 162 4.83562e+011
+188 260 4.83482e+011
+313 423 4.8277e+011
+552 119 4.82647e+011
+403 115 4.82646e+011
+281 312 4.82088e+011
+309 130 4.81885e+011
+542 179 4.81663e+011
+54 352 4.8156e+011
+397 92 4.81486e+011
+296 439 4.8078e+011
+512 294 4.80663e+011
+355 19 4.79859e+011
+44 287 4.79045e+011
+245 176 4.7898e+011
+349 106 4.7818e+011
+146 235 4.78171e+011
+580 327 4.77975e+011
+219 398 4.77967e+011
+82 239 4.77835e+011
+157 23 4.77749e+011
+399 297 4.77737e+011
+344 87 4.77705e+011
+221 165 4.77489e+011
+264 109 4.7734e+011
+483 221 4.7732e+011
+89 320 4.77206e+011
+292 373 4.76935e+011
+159 104 4.76911e+011
+178 220 4.76806e+011
+71 389 4.76599e+011
+213 326 4.76556e+011
+574 8 4.76403e+011
+238 294 4.7568e+011
+98 457 4.75037e+011
+469 2 4.74956e+011
+412 418 4.74939e+011
+215 314 4.74846e+011
+330 284 4.74094e+011
+468 301 4.7406e+011
+114 250 4.73881e+011
+590 347 4.73631e+011
+27 438 4.73575e+011
+27 190 4.73496e+011
+27 169 4.73476e+011
+446 437 4.73381e+011
+464 106 4.73144e+011
+210 326 4.72932e+011
+232 270 4.72626e+011
+67 313 4.72491e+011
+174 378 4.72469e+011
+281 86 4.72313e+011
+486 224 4.72278e+011
+475 455 4.72195e+011
+268 137 4.72081e+011
+14 236 4.71966e+011
+95 282 4.71818e+011
+335 280 4.71738e+011
+89 352 4.71658e+011
+186 321 4.70899e+011
+33 79 4.70643e+011
+471 269 4.70581e+011
+146 343 4.70523e+011
+154 161 4.70518e+011
+205 28 4.70341e+011
+509 244 4.7007e+011
+138 120 4.70011e+011
+268 192 4.69705e+011
+427 145 4.69637e+011
+565 239 4.69254e+011
+343 307 4.69253e+011
+524 95 4.68656e+011
+303 252 4.68255e+011
+403 15 4.6815e+011
+396 95 4.68002e+011
+65 283 4.67988e+011
+385 118 4.67776e+011
+582 203 4.67535e+011
+29 40 4.67312e+011
+276 78 4.67142e+011
+258 347 4.66501e+011
+284 312 4.66449e+011
+135 165 4.66137e+011
+41 440 4.66087e+011
+285 78 4.6595e+011
+484 155 4.65307e+011
+36 76 4.65043e+011
+300 247 4.64965e+011
+140 120 4.64656e+011
+89 29 4.64642e+011
+119 167 4.63856e+011
+394 118 4.62834e+011
+200 5 4.62813e+011
+400 29 4.62632e+011
+284 184 4.62616e+011
+103 227 4.62576e+011
+348 119 4.61971e+011
+318 426 4.61258e+011
+493 225 4.61249e+011
+206 75 4.60987e+011
+105 340 4.60784e+011
+505 403 4.60267e+011
+350 275 4.59997e+011
+114 248 4.59905e+011
+567 239 4.59659e+011
+86 244 4.59448e+011
+154 186 4.59384e+011
+221 326 4.58848e+011
+169 3 4.58529e+011
+130 475 4.5803e+011
+373 414 4.57867e+011
+231 193 4.57804e+011
+142 253 4.57543e+011
+40 253 4.57462e+011
+431 374 4.57258e+011
+235 403 4.56607e+011
+491 469 4.56406e+011
+363 48 4.56006e+011
+14 238 4.55332e+011
+409 279 4.55313e+011
+298 97 4.55227e+011
+248 392 4.55118e+011
+535 178 4.54989e+011
+391 4 4.54041e+011
+377 468 4.53957e+011
+167 187 4.53869e+011
+104 262 4.53349e+011
+477 221 4.53143e+011
+318 461 4.52902e+011
+424 25 4.52829e+011
+211 201 4.52529e+011
+207 257 4.52453e+011
+72 413 4.52261e+011
+260 453 4.52154e+011
+384 114 4.51299e+011
+375 466 4.51267e+011
+338 440 4.51156e+011
+547 301 4.51111e+011
+293 398 4.50433e+011
+233 275 4.504e+011
+464 210 4.50114e+011
+327 58 4.49999e+011
+256 274 4.49791e+011
+485 221 4.49723e+011
+22 26 4.49654e+011
+426 112 4.49592e+011
+278 86 4.49424e+011
+315 423 4.49139e+011
+565 176 4.48734e+011
+244 277 4.4835e+011
+173 143 4.48166e+011
+512 370 4.48164e+011
+463 301 4.47583e+011
+395 201 4.47565e+011
+296 311 4.47048e+011
+132 390 4.46932e+011
+152 255 4.46898e+011
+466 377 4.46701e+011
+142 280 4.46292e+011
+16 150 4.4612e+011
+120 341 4.4573e+011
+511 323 4.45134e+011
+405 110 4.44812e+011
+350 273 4.4481e+011
+426 472 4.44518e+011
+580 203 4.4382e+011
+400 96 4.43736e+011
+563 79 4.42647e+011
+506 242 4.42467e+011
+521 142 4.4236e+011
+196 29 4.42314e+011
+217 357 4.4228e+011
+404 26 4.4173e+011
+431 25 4.41707e+011
+241 179 4.41043e+011
+574 100 4.40965e+011
+179 266 4.40613e+011
+480 130 4.40526e+011
+94 113 4.40483e+011
+373 46 4.40246e+011
+105 391 4.40028e+011
+549 82 4.39963e+011
+481 221 4.3992e+011
+213 396 4.39889e+011
+500 181 4.39886e+011
+233 406 4.39301e+011
+210 328 4.39255e+011
+563 239 4.39002e+011
+183 56 4.38885e+011
+134 187 4.3883e+011
+154 165 4.38039e+011
+294 369 4.37738e+011
+400 132 4.37533e+011
+200 98 4.37484e+011
+456 182 4.37387e+011
+98 123 4.37219e+011
+524 241 4.37089e+011
+266 455 4.37083e+011
+305 298 4.36976e+011
+243 433 4.36774e+011
+344 321 4.3634e+011
+516 303 4.36162e+011
+473 454 4.35946e+011
+215 326 4.3572e+011
+147 233 4.35283e+011
+556 366 4.35248e+011
+123 175 4.35109e+011
+144 378 4.34947e+011
+202 38 4.34717e+011
+305 256 4.34704e+011
+488 133 4.341e+011
+184 157 4.33726e+011
+68 389 4.33551e+011
+165 413 4.33171e+011
+210 443 4.33039e+011
+117 90 4.32687e+011
+202 370 4.32679e+011
+68 358 4.32656e+011
+207 260 4.3253e+011
+253 253 4.31938e+011
+223 386 4.31454e+011
+68 404 4.31132e+011
+284 90 4.31013e+011
+50 203 4.30546e+011
+391 2 4.30536e+011
+211 395 4.30068e+011
+469 356 4.29917e+011
+41 291 4.29482e+011
+146 237 4.29155e+011
+492 303 4.2891e+011
+597 59 4.28657e+011
+34 401 4.28602e+011
+98 187 4.28577e+011
+155 258 4.28349e+011
+442 44 4.28315e+011
+234 296 4.28055e+011
+342 31 4.27774e+011
+458 64 4.27711e+011
+550 139 4.27438e+011
+101 292 4.26641e+011
+66 404 4.26512e+011
+319 234 4.26406e+011
+97 338 4.26248e+011
+468 318 4.26232e+011
+78 99 4.26167e+011
+437 140 4.25202e+011
+132 121 4.24499e+011
+377 416 4.24473e+011
+462 187 4.24239e+011
+263 244 4.23883e+011
+247 434 4.23699e+011
+124 237 4.23694e+011
+245 434 4.23521e+011
+154 431 4.23421e+011
+425 411 4.23284e+011
+466 84 4.23165e+011
+37 470 4.23047e+011
+218 326 4.22956e+011
+23 236 4.213e+011
+17 246 4.21198e+011
+314 462 4.21153e+011
+71 405 4.21055e+011
+428 280 4.20741e+011
+134 67 4.20234e+011
+464 185 4.20229e+011
+470 452 4.20106e+011
+22 118 4.19962e+011
+463 227 4.18814e+011
+179 287 4.18612e+011
+35 389 4.18546e+011
+295 373 4.18353e+011
+564 200 4.18313e+011
+395 130 4.18083e+011
+373 94 4.17885e+011
+42 275 4.17609e+011
+214 237 4.17399e+011
+343 303 4.17029e+011
+23 234 4.158e+011
+83 115 4.15792e+011
+334 162 4.15636e+011
+574 5 4.15621e+011
+182 287 4.15536e+011
+361 89 4.15499e+011
+243 430 4.15485e+011
+351 121 4.15107e+011
+334 465 4.14892e+011
+407 6 4.14796e+011
+457 240 4.14591e+011
+129 121 4.14548e+011
+310 183 4.14311e+011
+480 473 4.14231e+011
+481 101 4.13905e+011
+327 55 4.13606e+011
+247 428 4.13504e+011
+577 90 4.13421e+011
+232 113 4.13236e+011
+50 456 4.12808e+011
+32 43 4.12527e+011
+505 419 4.12428e+011
+420 201 4.12413e+011
+506 156 4.12348e+011
+73 154 4.12214e+011
+160 354 4.12198e+011
+457 242 4.119e+011
+116 258 4.11687e+011
+429 374 4.11568e+011
+246 149 4.11487e+011
+94 338 4.11471e+011
+474 280 4.11464e+011
+122 23 4.11422e+011
+396 87 4.10826e+011
+157 39 4.09917e+011
+45 234 4.09883e+011
+299 282 4.09568e+011
+208 407 4.08852e+011
+243 30 4.08237e+011
+198 363 4.07891e+011
+227 119 4.07722e+011
+14 46 4.07679e+011
+60 176 4.07355e+011
+268 190 4.0679e+011
+95 408 4.06772e+011
+352 254 4.06691e+011
+247 53 4.06536e+011
+265 192 4.06227e+011
+61 453 4.06171e+011
+574 363 4.0617e+011
+439 108 4.05918e+011
+209 260 4.0568e+011
+553 276 4.05407e+011
+437 295 4.05152e+011
+82 164 4.04595e+011
+142 257 4.04539e+011
+566 358 4.04404e+011
+395 128 4.03378e+011
+155 153 4.03103e+011
+332 208 4.03037e+011
+199 240 4.02996e+011
+296 444 4.02786e+011
+311 136 4.02763e+011
+513 106 4.02727e+011
+238 33 4.02644e+011
+306 94 4.02342e+011
+89 38 4.0199e+011
+36 43 4.01676e+011
+68 6 4.01646e+011
+354 87 4.01644e+011
+211 260 4.01379e+011
+595 33 4.01327e+011
+38 275 4.01327e+011
+148 145 4.01039e+011
+68 355 4.00921e+011
+501 242 4.00444e+011
+23 439 4.00192e+011
+511 288 4.00161e+011
+139 253 4.00032e+011
+498 320 3.99814e+011
+403 112 3.99777e+011
+128 135 3.99454e+011
+437 108 3.99272e+011
+188 285 3.99266e+011
+402 96 3.99208e+011
+19 26 3.99073e+011
+467 183 3.99053e+011
+602 276 3.98583e+011
+531 384 3.9834e+011
+323 96 3.9828e+011
+235 406 3.98131e+011
+134 253 3.97888e+011
+77 115 3.97567e+011
+31 168 3.97392e+011
+204 370 3.97049e+011
+94 363 3.97043e+011
+313 441 3.97029e+011
+5 134 3.96853e+011
+589 102 3.96848e+011
+186 373 3.96672e+011
+223 399 3.96607e+011
+428 472 3.96535e+011
+95 406 3.96459e+011
+196 431 3.96453e+011
+206 370 3.96413e+011
+212 217 3.96346e+011
+547 86 3.95865e+011
+305 238 3.95567e+011
+574 97 3.95378e+011
+599 59 3.95311e+011
+113 245 3.95223e+011
+129 398 3.95188e+011
+95 357 3.95141e+011
+391 408 3.94989e+011
+415 448 3.9472e+011
+518 303 3.94464e+011
+367 449 3.93822e+011
+413 433 3.93607e+011
+341 241 3.9351e+011
+230 50 3.93468e+011
+307 431 3.9295e+011
+429 411 3.92907e+011
+606 122 3.92434e+011
+544 275 3.91626e+011
+255 206 3.9159e+011
+462 64 3.91414e+011
+328 96 3.91388e+011
+249 53 3.91095e+011
+377 227 3.91075e+011
+401 424 3.90998e+011
+311 101 3.90929e+011
+220 389 3.90722e+011
+285 257 3.906e+011
+552 265 3.90439e+011
+216 404 3.90286e+011
+395 126 3.89709e+011
+119 240 3.89693e+011
+49 231 3.89642e+011
+446 186 3.89489e+011
+600 274 3.89415e+011
+499 317 3.89287e+011
+118 258 3.89084e+011
+184 272 3.88955e+011
+344 187 3.88756e+011
+14 148 3.8864e+011
+564 118 3.88621e+011
+378 260 3.88541e+011
+394 88 3.88225e+011
+373 201 3.87936e+011
+93 406 3.87782e+011
+243 357 3.87756e+011
+61 339 3.87733e+011
+142 426 3.87565e+011
+374 227 3.87472e+011
+447 289 3.87431e+011
+140 355 3.87402e+011
+553 140 3.87375e+011
+466 213 3.8735e+011
+146 415 3.86677e+011
+497 305 3.85766e+011
+396 85 3.85395e+011
+11 138 3.85293e+011
+127 407 3.85195e+011
+370 316 3.85114e+011
+134 122 3.85108e+011
+21 439 3.84961e+011
+588 141 3.84916e+011
+95 361 3.84644e+011
+27 40 3.84356e+011
+144 120 3.84235e+011
+453 181 3.84186e+011
+219 396 3.83565e+011
+169 433 3.83546e+011
+70 199 3.82956e+011
+452 93 3.82814e+011
+521 92 3.82457e+011
+436 458 3.82339e+011
+36 255 3.82333e+011
+293 401 3.82291e+011
+505 104 3.81649e+011
+418 376 3.81594e+011
+305 66 3.81573e+011
+64 453 3.80737e+011
+330 329 3.80737e+011
+240 294 3.80423e+011
+472 357 3.80375e+011
+6 300 3.80264e+011
+247 277 3.79725e+011
+471 216 3.79096e+011
+120 90 3.79069e+011
+365 118 3.7895e+011
+91 39 3.78734e+011
+548 121 3.78711e+011
+208 326 3.78563e+011
+358 89 3.78204e+011
+228 155 3.77751e+011
+558 160 3.77636e+011
+477 278 3.77605e+011
+455 177 3.76616e+011
+294 444 3.7645e+011
+285 338 3.76408e+011
+23 184 3.76259e+011
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_5_3.txt b/test_data/harriscorners/hc_msc_0.00_0.04_5_3.txt
new file mode 100644
index 0000000..ec9c71d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_5_3.txt
@@ -0,0 +1,1954 @@
+1953
+499 1 8.85626e+015
+245 94 7.79632e+015
+274 366 7.4044e+015
+363 401 6.2812e+015
+449 298 5.84133e+015
+282 115 5.33863e+015
+122 44 5.01352e+015
+553 41 4.97071e+015
+421 182 4.9305e+015
+388 178 4.57141e+015
+240 90 4.55083e+015
+507 122 4.49498e+015
+456 281 4.45432e+015
+426 320 4.41292e+015
+251 13 4.34456e+015
+447 397 4.34141e+015
+200 18 4.25439e+015
+34 138 4.25086e+015
+237 19 4.22823e+015
+535 242 4.21206e+015
+213 72 3.98506e+015
+2 47 3.96422e+015
+543 364 3.95454e+015
+423 179 3.95412e+015
+448 263 3.91894e+015
+215 72 3.91219e+015
+221 16 3.85601e+015
+82 27 3.8559e+015
+321 313 3.80093e+015
+65 343 3.76516e+015
+435 68 3.72402e+015
+256 386 3.66951e+015
+135 215 3.64225e+015
+223 38 3.64116e+015
+299 52 3.63192e+015
+196 57 3.63102e+015
+344 10 3.52405e+015
+480 298 3.49708e+015
+131 36 3.48345e+015
+110 238 3.48133e+015
+45 27 3.37399e+015
+420 178 3.34079e+015
+144 309 3.32802e+015
+520 61 3.28465e+015
+320 223 3.25035e+015
+124 198 3.2467e+015
+303 183 3.20581e+015
+385 221 3.20356e+015
+471 240 3.17227e+015
+183 401 3.14552e+015
+484 23 3.08465e+015
+412 256 3.08445e+015
+412 162 3.0289e+015
+79 2 3.01929e+015
+348 179 3.01849e+015
+28 8 3.01516e+015
+173 312 2.99728e+015
+242 94 2.95178e+015
+242 203 2.9477e+015
+92 214 2.93427e+015
+407 64 2.92892e+015
+159 143 2.88926e+015
+329 127 2.86907e+015
+246 143 2.86032e+015
+271 166 2.85994e+015
+508 18 2.84962e+015
+111 241 2.81641e+015
+525 60 2.80629e+015
+130 2 2.79342e+015
+77 256 2.78079e+015
+364 297 2.75834e+015
+465 394 2.73603e+015
+184 35 2.72846e+015
+91 198 2.71993e+015
+264 440 2.68626e+015
+125 255 2.68051e+015
+37 61 2.6707e+015
+390 58 2.66331e+015
+59 219 2.64803e+015
+515 77 2.61714e+015
+361 131 2.61004e+015
+286 296 2.59294e+015
+116 43 2.59176e+015
+64 235 2.58552e+015
+387 294 2.57846e+015
+282 112 2.57616e+015
+102 4 2.57318e+015
+312 149 2.55286e+015
+361 296 2.4862e+015
+555 40 2.48288e+015
+174 238 2.47139e+015
+261 297 2.45723e+015
+359 294 2.45568e+015
+510 172 2.45154e+015
+482 365 2.44817e+015
+308 372 2.43899e+015
+483 339 2.42585e+015
+360 336 2.42068e+015
+253 138 2.40141e+015
+101 78 2.39868e+015
+340 9 2.38518e+015
+387 10 2.37175e+015
+125 363 2.36895e+015
+469 240 2.34966e+015
+474 262 2.33713e+015
+127 76 2.33553e+015
+101 59 2.32711e+015
+426 119 2.32414e+015
+66 320 2.31873e+015
+225 221 2.31005e+015
+224 419 2.30238e+015
+228 292 2.29973e+015
+417 7 2.28259e+015
+449 219 2.28178e+015
+239 349 2.2748e+015
+355 220 2.27038e+015
+419 440 2.24988e+015
+170 19 2.23752e+015
+209 223 2.23404e+015
+425 376 2.22293e+015
+562 478 2.21442e+015
+382 8 2.21328e+015
+392 144 2.19059e+015
+250 363 2.18439e+015
+49 99 2.18376e+015
+411 355 2.1683e+015
+252 140 2.16571e+015
+262 165 2.13943e+015
+378 354 2.13842e+015
+271 278 2.131e+015
+545 168 2.13006e+015
+456 283 2.12439e+015
+282 403 2.11864e+015
+513 340 2.11819e+015
+212 183 2.11106e+015
+137 208 2.10896e+015
+432 146 2.09921e+015
+271 71 2.09638e+015
+112 393 2.09605e+015
+177 106 2.09252e+015
+59 185 2.084e+015
+377 7 2.0813e+015
+462 279 2.08053e+015
+59 183 2.05752e+015
+240 201 2.0541e+015
+510 121 2.04278e+015
+243 72 2.03376e+015
+402 122 2.03097e+015
+233 15 2.01573e+015
+72 24 2.00665e+015
+214 57 2.00418e+015
+166 96 1.99505e+015
+105 62 1.99468e+015
+498 82 1.99341e+015
+275 181 1.99334e+015
+140 203 1.98134e+015
+542 18 1.97989e+015
+233 162 1.97635e+015
+89 197 1.97105e+015
+286 298 1.95637e+015
+192 331 1.95503e+015
+365 7 1.95376e+015
+108 45 1.95083e+015
+88 148 1.93985e+015
+31 8 1.93809e+015
+36 269 1.93257e+015
+36 174 1.92889e+015
+211 56 1.92682e+015
+140 184 1.9251e+015
+234 72 1.91916e+015
+4 66 1.91676e+015
+216 279 1.91453e+015
+81 2 1.91312e+015
+300 177 1.90891e+015
+562 147 1.90276e+015
+300 265 1.90244e+015
+69 27 1.899e+015
+544 170 1.89827e+015
+294 15 1.89172e+015
+404 120 1.89014e+015
+283 71 1.8865e+015
+264 298 1.88206e+015
+456 83 1.87935e+015
+103 61 1.87851e+015
+35 10 1.87677e+015
+192 124 1.87474e+015
+95 446 1.87419e+015
+340 12 1.8724e+015
+158 1 1.86834e+015
+203 310 1.86756e+015
+366 144 1.86433e+015
+75 236 1.86401e+015
+138 111 1.8601e+015
+245 205 1.85787e+015
+432 112 1.85735e+015
+70 25 1.85292e+015
+355 320 1.8427e+015
+545 217 1.83712e+015
+234 346 1.83684e+015
+167 287 1.83654e+015
+132 26 1.83428e+015
+207 224 1.83204e+015
+71 148 1.83057e+015
+359 168 1.82777e+015
+182 111 1.82613e+015
+438 339 1.82312e+015
+296 420 1.81876e+015
+524 21 1.81758e+015
+28 236 1.81694e+015
+176 39 1.81687e+015
+406 375 1.81464e+015
+362 251 1.81331e+015
+402 261 1.80651e+015
+120 51 1.8056e+015
+526 223 1.80474e+015
+307 439 1.80472e+015
+372 163 1.80009e+015
+479 20 1.79601e+015
+38 296 1.79073e+015
+512 168 1.79007e+015
+55 31 1.78776e+015
+230 36 1.78762e+015
+527 40 1.78681e+015
+410 65 1.7842e+015
+177 260 1.77692e+015
+220 37 1.77573e+015
+343 337 1.77271e+015
+151 307 1.77123e+015
+302 206 1.77076e+015
+195 126 1.76738e+015
+141 325 1.76465e+015
+35 146 1.76166e+015
+430 1 1.75939e+015
+490 342 1.75657e+015
+41 297 1.75065e+015
+165 217 1.74772e+015
+323 223 1.74442e+015
+209 54 1.74185e+015
+326 426 1.74169e+015
+100 221 1.74036e+015
+94 216 1.73543e+015
+210 445 1.7341e+015
+528 361 1.7312e+015
+455 3 1.72977e+015
+273 130 1.71505e+015
+163 276 1.70678e+015
+11 101 1.7065e+015
+177 93 1.705e+015
+33 98 1.70403e+015
+54 6 1.7017e+015
+512 165 1.69963e+015
+477 12 1.69808e+015
+278 352 1.69525e+015
+113 213 1.69048e+015
+304 216 1.68633e+015
+250 33 1.68506e+015
+291 16 1.68466e+015
+434 398 1.67786e+015
+136 202 1.67746e+015
+464 241 1.67422e+015
+452 337 1.67292e+015
+416 44 1.66374e+015
+503 360 1.6624e+015
+236 163 1.66004e+015
+359 260 1.65991e+015
+37 144 1.65749e+015
+510 455 1.65489e+015
+46 219 1.65454e+015
+550 379 1.65447e+015
+219 291 1.65391e+015
+475 4 1.65196e+015
+489 264 1.64834e+015
+64 371 1.64763e+015
+346 392 1.64296e+015
+55 66 1.64119e+015
+239 421 1.63408e+015
+458 3 1.63237e+015
+465 197 1.62451e+015
+230 266 1.62311e+015
+86 77 1.6209e+015
+522 122 1.61501e+015
+513 223 1.61344e+015
+293 25 1.6108e+015
+422 44 1.60734e+015
+395 260 1.6063e+015
+567 161 1.60101e+015
+527 99 1.59517e+015
+263 202 1.59454e+015
+141 22 1.59006e+015
+472 63 1.58234e+015
+579 18 1.57777e+015
+65 213 1.57713e+015
+452 376 1.57031e+015
+520 183 1.56825e+015
+421 334 1.56712e+015
+443 23 1.56374e+015
+228 289 1.56146e+015
+242 97 1.56009e+015
+452 205 1.55947e+015
+204 17 1.55564e+015
+128 164 1.55427e+015
+164 243 1.55349e+015
+114 344 1.55315e+015
+281 51 1.55299e+015
+538 95 1.55263e+015
+526 101 1.55015e+015
+112 4 1.54811e+015
+365 200 1.54637e+015
+339 164 1.54621e+015
+387 242 1.54548e+015
+355 267 1.54361e+015
+130 77 1.54123e+015
+317 385 1.53762e+015
+422 323 1.53485e+015
+530 184 1.53383e+015
+521 63 1.52885e+015
+286 166 1.52795e+015
+329 253 1.52246e+015
+546 41 1.52025e+015
+525 345 1.51771e+015
+542 210 1.51143e+015
+388 221 1.51041e+015
+256 149 1.50782e+015
+382 411 1.50172e+015
+491 1 1.49978e+015
+224 183 1.49544e+015
+208 451 1.49411e+015
+338 391 1.49388e+015
+285 211 1.48982e+015
+59 74 1.48867e+015
+276 222 1.4854e+015
+516 17 1.48473e+015
+390 61 1.48433e+015
+485 179 1.48312e+015
+338 473 1.482e+015
+484 59 1.47761e+015
+362 398 1.47473e+015
+244 164 1.47435e+015
+522 263 1.47027e+015
+59 76 1.46853e+015
+288 212 1.46508e+015
+220 178 1.45902e+015
+162 213 1.4547e+015
+379 68 1.45224e+015
+169 55 1.44969e+015
+91 291 1.44798e+015
+22 61 1.44687e+015
+120 4 1.44574e+015
+37 138 1.44334e+015
+271 365 1.4424e+015
+512 99 1.44119e+015
+82 77 1.43944e+015
+358 335 1.43916e+015
+318 312 1.43593e+015
+513 296 1.433e+015
+421 6 1.42684e+015
+378 317 1.42609e+015
+180 394 1.42059e+015
+187 99 1.41992e+015
+352 147 1.41982e+015
+236 92 1.41808e+015
+301 165 1.4156e+015
+511 128 1.41075e+015
+345 109 1.41019e+015
+449 403 1.40831e+015
+467 196 1.40658e+015
+422 47 1.40092e+015
+220 100 1.39821e+015
+327 341 1.39723e+015
+110 96 1.39315e+015
+212 437 1.39279e+015
+49 153 1.39222e+015
+419 7 1.39037e+015
+33 269 1.38668e+015
+453 340 1.38578e+015
+124 272 1.38423e+015
+463 393 1.38255e+015
+380 26 1.37729e+015
+541 13 1.37711e+015
+370 107 1.36835e+015
+348 240 1.36431e+015
+110 136 1.36284e+015
+316 336 1.35988e+015
+546 57 1.35566e+015
+46 147 1.35321e+015
+530 62 1.35167e+015
+507 165 1.3506e+015
+32 100 1.35031e+015
+543 130 1.34706e+015
+383 354 1.34683e+015
+479 294 1.34653e+015
+74 6 1.34475e+015
+402 276 1.34457e+015
+345 241 1.34078e+015
+173 94 1.33865e+015
+497 228 1.33568e+015
+264 445 1.33362e+015
+228 184 1.33285e+015
+72 97 1.33278e+015
+566 43 1.33277e+015
+197 82 1.33148e+015
+221 182 1.33011e+015
+78 196 1.32119e+015
+324 341 1.31904e+015
+128 95 1.31612e+015
+255 182 1.31433e+015
+167 325 1.31317e+015
+510 344 1.31076e+015
+32 218 1.30979e+015
+97 79 1.30845e+015
+252 10 1.30759e+015
+474 23 1.30504e+015
+470 418 1.29904e+015
+87 209 1.2975e+015
+232 200 1.29613e+015
+510 165 1.29599e+015
+192 359 1.29444e+015
+582 17 1.29396e+015
+487 22 1.29354e+015
+537 459 1.29323e+015
+161 144 1.29244e+015
+177 166 1.29218e+015
+325 88 1.28912e+015
+248 403 1.28663e+015
+139 173 1.28413e+015
+221 180 1.28307e+015
+482 331 1.2822e+015
+147 21 1.28109e+015
+363 181 1.28082e+015
+153 1 1.28e+015
+282 53 1.27995e+015
+444 452 1.27854e+015
+278 145 1.27818e+015
+365 251 1.27657e+015
+527 422 1.27532e+015
+324 164 1.27456e+015
+498 158 1.27138e+015
+162 168 1.27037e+015
+577 15 1.26917e+015
+55 28 1.26894e+015
+259 202 1.26871e+015
+404 260 1.26735e+015
+259 221 1.26719e+015
+63 60 1.26524e+015
+44 81 1.26446e+015
+479 263 1.26227e+015
+92 7 1.26106e+015
+88 256 1.26099e+015
+136 176 1.25959e+015
+236 74 1.25847e+015
+571 161 1.25641e+015
+18 342 1.25641e+015
+40 217 1.255e+015
+329 66 1.25288e+015
+401 184 1.25253e+015
+424 334 1.2521e+015
+57 364 1.25172e+015
+507 14 1.25041e+015
+137 98 1.24787e+015
+170 57 1.24496e+015
+210 437 1.24396e+015
+366 298 1.24255e+015
+357 126 1.24054e+015
+179 113 1.23875e+015
+576 178 1.2359e+015
+162 216 1.2354e+015
+260 273 1.23183e+015
+329 9 1.23071e+015
+125 261 1.22951e+015
+386 126 1.22739e+015
+560 229 1.22372e+015
+423 336 1.22219e+015
+286 209 1.22174e+015
+408 352 1.21939e+015
+36 201 1.21894e+015
+179 18 1.21856e+015
+49 11 1.21809e+015
+362 370 1.21772e+015
+436 91 1.21769e+015
+243 190 1.21743e+015
+342 123 1.21616e+015
+541 62 1.21458e+015
+406 199 1.21418e+015
+543 57 1.21308e+015
+302 103 1.21244e+015
+84 3 1.21036e+015
+342 464 1.21026e+015
+492 140 1.20488e+015
+56 5 1.20479e+015
+198 130 1.20188e+015
+332 130 1.1988e+015
+572 142 1.19689e+015
+191 56 1.19589e+015
+371 82 1.19547e+015
+47 10 1.19536e+015
+102 358 1.19461e+015
+149 39 1.19416e+015
+41 63 1.19399e+015
+419 163 1.19363e+015
+131 148 1.18848e+015
+299 70 1.18777e+015
+274 281 1.18682e+015
+207 436 1.18474e+015
+524 263 1.18442e+015
+449 178 1.18172e+015
+163 207 1.18068e+015
+539 40 1.17895e+015
+577 18 1.17774e+015
+208 434 1.17623e+015
+6 9 1.17359e+015
+82 75 1.17269e+015
+289 166 1.16924e+015
+575 126 1.16906e+015
+371 393 1.16803e+015
+117 96 1.16751e+015
+513 122 1.16698e+015
+183 19 1.16306e+015
+422 397 1.16089e+015
+324 142 1.16035e+015
+111 134 1.15806e+015
+183 133 1.15749e+015
+228 129 1.15587e+015
+246 294 1.15552e+015
+512 125 1.15533e+015
+108 183 1.15518e+015
+432 83 1.15483e+015
+313 83 1.15138e+015
+287 342 1.15096e+015
+124 162 1.14937e+015
+483 83 1.14846e+015
+240 366 1.14764e+015
+153 222 1.14674e+015
+314 85 1.14584e+015
+80 474 1.14279e+015
+527 23 1.14147e+015
+236 130 1.14093e+015
+290 264 1.14057e+015
+539 62 1.13861e+015
+277 370 1.13856e+015
+483 327 1.13775e+015
+347 350 1.1373e+015
+199 86 1.1372e+015
+545 5 1.13705e+015
+357 128 1.13646e+015
+468 238 1.13636e+015
+66 234 1.1351e+015
+167 238 1.13418e+015
+107 40 1.13088e+015
+387 167 1.12986e+015
+270 62 1.12843e+015
+388 97 1.12838e+015
+544 210 1.1281e+015
+138 57 1.12656e+015
+478 16 1.12568e+015
+334 435 1.12461e+015
+39 406 1.12285e+015
+365 259 1.12165e+015
+507 455 1.12036e+015
+146 160 1.11846e+015
+23 219 1.11827e+015
+481 179 1.11697e+015
+260 142 1.11605e+015
+144 187 1.11536e+015
+508 7 1.1151e+015
+487 4 1.11449e+015
+270 67 1.11144e+015
+433 319 1.11039e+015
+44 219 1.1102e+015
+495 141 1.10931e+015
+164 359 1.10876e+015
+480 261 1.10706e+015
+37 288 1.10661e+015
+561 60 1.10446e+015
+108 324 1.10045e+015
+64 218 1.09996e+015
+358 143 1.09746e+015
+331 107 1.0971e+015
+109 340 1.096e+015
+332 255 1.09599e+015
+55 294 1.09502e+015
+100 162 1.09496e+015
+132 130 1.0942e+015
+271 289 1.0933e+015
+572 449 1.09216e+015
+205 162 1.09171e+015
+273 289 1.09069e+015
+297 296 1.09069e+015
+482 336 1.09052e+015
+82 136 1.08976e+015
+360 216 1.08746e+015
+379 66 1.087e+015
+513 220 1.08634e+015
+174 57 1.0862e+015
+479 179 1.08544e+015
+441 98 1.08404e+015
+331 295 1.08305e+015
+344 263 1.08218e+015
+273 297 1.08142e+015
+257 250 1.0808e+015
+127 252 1.08073e+015
+569 40 1.08002e+015
+516 348 1.07989e+015
+86 255 1.07787e+015
+136 128 1.07713e+015
+53 43 1.07541e+015
+463 198 1.07364e+015
+281 49 1.07287e+015
+282 200 1.07197e+015
+358 10 1.07014e+015
+391 47 1.07004e+015
+259 71 1.06456e+015
+271 52 1.06367e+015
+561 320 1.06225e+015
+333 89 1.06125e+015
+533 183 1.05854e+015
+172 56 1.05755e+015
+115 76 1.05515e+015
+185 19 1.05446e+015
+448 138 1.05377e+015
+283 207 1.05335e+015
+242 100 1.05317e+015
+129 168 1.05273e+015
+105 199 1.05104e+015
+241 68 1.04823e+015
+91 389 1.04779e+015
+531 22 1.04547e+015
+360 9 1.04514e+015
+540 99 1.04475e+015
+436 390 1.04331e+015
+358 393 1.04013e+015
+507 59 1.03938e+015
+556 182 1.03912e+015
+513 261 1.03869e+015
+528 142 1.0372e+015
+306 192 1.03668e+015
+254 422 1.03582e+015
+112 165 1.03433e+015
+245 402 1.03422e+015
+344 197 1.03279e+015
+84 476 1.0326e+015
+117 76 1.03169e+015
+82 79 1.03167e+015
+351 323 1.02964e+015
+440 64 1.02899e+015
+481 81 1.02797e+015
+29 28 1.02755e+015
+226 180 1.02575e+015
+256 35 1.02101e+015
+528 104 1.02094e+015
+307 448 1.01719e+015
+529 23 1.01691e+015
+259 236 1.01685e+015
+468 423 1.01623e+015
+280 128 1.01552e+015
+217 126 1.01502e+015
+219 108 1.01464e+015
+189 214 1.01462e+015
+403 6 1.01275e+015
+217 55 1.01145e+015
+508 5 1.01139e+015
+446 264 1.0092e+015
+153 217 1.00856e+015
+182 381 1.00854e+015
+417 24 1.00839e+015
+390 161 1.00575e+015
+389 139 1.00548e+015
+359 166 1.00477e+015
+169 198 1.0047e+015
+401 182 1.00451e+015
+336 391 1.00441e+015
+267 296 1.0038e+015
+153 226 1.00282e+015
+378 339 1.00071e+015
+196 192 1.00029e+015
+48 257 9.99994e+014
+338 10 9.96857e+014
+48 219 9.96837e+014
+202 314 9.96733e+014
+195 17 9.9673e+014
+267 30 9.96625e+014
+262 391 9.95691e+014
+310 33 9.93723e+014
+407 162 9.9311e+014
+109 27 9.92268e+014
+479 176 9.89501e+014
+260 223 9.8821e+014
+203 257 9.87867e+014
+162 74 9.87844e+014
+429 88 9.87379e+014
+480 403 9.86716e+014
+530 143 9.85336e+014
+248 219 9.83226e+014
+137 21 9.7981e+014
+240 73 9.78205e+014
+260 251 9.74314e+014
+108 109 9.73644e+014
+20 219 9.73257e+014
+220 149 9.72691e+014
+435 88 9.71762e+014
+537 186 9.70764e+014
+5 13 9.70123e+014
+479 81 9.66477e+014
+351 320 9.65804e+014
+292 311 9.65007e+014
+143 2 9.6469e+014
+353 127 9.63188e+014
+428 181 9.61661e+014
+556 244 9.61065e+014
+49 159 9.59047e+014
+253 74 9.58426e+014
+413 4 9.58343e+014
+238 74 9.57346e+014
+172 449 9.56514e+014
+524 99 9.55639e+014
+67 337 9.55049e+014
+142 183 9.53798e+014
+414 299 9.53218e+014
+502 142 9.51728e+014
+137 138 9.51438e+014
+412 23 9.49494e+014
+282 221 9.48902e+014
+150 222 9.47476e+014
+58 372 9.46826e+014
+153 447 9.46503e+014
+161 256 9.4642e+014
+34 236 9.45444e+014
+436 385 9.44655e+014
+270 60 9.44525e+014
+210 153 9.44324e+014
+94 477 9.42838e+014
+396 161 9.42329e+014
+141 2 9.41049e+014
+390 19 9.39809e+014
+114 428 9.39744e+014
+300 175 9.39575e+014
+160 112 9.38437e+014
+509 361 9.37808e+014
+374 241 9.37531e+014
+312 81 9.36394e+014
+167 180 9.3614e+014
+386 162 9.35856e+014
+323 425 9.35487e+014
+221 114 9.35183e+014
+308 8 9.34414e+014
+393 217 9.34182e+014
+250 313 9.34047e+014
+544 91 9.33221e+014
+261 439 9.31587e+014
+93 254 9.3062e+014
+337 8 9.28915e+014
+358 282 9.28724e+014
+393 46 9.28643e+014
+38 172 9.2828e+014
+325 295 9.27924e+014
+67 47 9.2784e+014
+111 40 9.27736e+014
+506 203 9.27257e+014
+328 142 9.27227e+014
+151 114 9.27107e+014
+248 205 9.26398e+014
+406 122 9.25451e+014
+435 281 9.23283e+014
+101 197 9.2252e+014
+223 113 9.19554e+014
+265 53 9.18655e+014
+44 10 9.18446e+014
+56 220 9.18172e+014
+178 164 9.16298e+014
+466 40 9.16199e+014
+189 205 9.15912e+014
+538 121 9.1528e+014
+261 34 9.10469e+014
+376 119 9.08994e+014
+424 318 9.08864e+014
+63 8 9.0828e+014
+526 104 9.07542e+014
+211 33 9.07468e+014
+94 5 9.0629e+014
+9 476 9.06089e+014
+301 215 9.04876e+014
+236 221 9.04759e+014
+510 102 9.0424e+014
+366 66 9.04191e+014
+80 39 9.03462e+014
+54 289 9.02821e+014
+474 202 9.02539e+014
+44 121 9.02411e+014
+275 319 9.02034e+014
+289 164 9.01312e+014
+474 245 9.00938e+014
+423 203 9.00218e+014
+206 159 8.99519e+014
+191 217 8.9878e+014
+38 219 8.97779e+014
+376 84 8.96735e+014
+535 393 8.96395e+014
+103 392 8.96237e+014
+393 66 8.96047e+014
+313 75 8.9525e+014
+403 188 8.94705e+014
+160 183 8.93393e+014
+317 148 8.91201e+014
+458 265 8.91124e+014
+166 244 8.89052e+014
+278 189 8.88606e+014
+73 185 8.88013e+014
+263 311 8.87974e+014
+461 221 8.86318e+014
+134 238 8.83015e+014
+365 104 8.82664e+014
+527 359 8.82402e+014
+532 62 8.82312e+014
+275 216 8.81347e+014
+201 317 8.80738e+014
+85 59 8.79619e+014
+403 265 8.79525e+014
+213 123 8.79223e+014
+392 296 8.76696e+014
+190 146 8.75671e+014
+242 165 8.74599e+014
+158 56 8.73402e+014
+477 401 8.72779e+014
+141 394 8.72706e+014
+363 199 8.71149e+014
+367 247 8.71118e+014
+126 189 8.70965e+014
+120 54 8.70367e+014
+423 6 8.70358e+014
+457 375 8.70229e+014
+191 219 8.67957e+014
+114 392 8.6775e+014
+245 88 8.67405e+014
+549 59 8.6644e+014
+342 107 8.66238e+014
+110 265 8.6572e+014
+512 44 8.64914e+014
+346 297 8.63393e+014
+489 42 8.62483e+014
+312 7 8.6239e+014
+272 241 8.61643e+014
+466 240 8.61437e+014
+503 265 8.60769e+014
+282 135 8.59943e+014
+104 163 8.59432e+014
+284 222 8.5934e+014
+486 83 8.59042e+014
+440 66 8.57877e+014
+335 105 8.57609e+014
+161 238 8.5728e+014
+241 59 8.56945e+014
+420 81 8.56249e+014
+413 21 8.55584e+014
+45 132 8.55073e+014
+542 42 8.53976e+014
+163 20 8.53826e+014
+407 337 8.53553e+014
+212 17 8.52294e+014
+29 220 8.5147e+014
+265 260 8.50623e+014
+154 114 8.49797e+014
+336 426 8.49475e+014
+11 80 8.48627e+014
+546 182 8.48223e+014
+109 134 8.47931e+014
+362 360 8.46515e+014
+494 455 8.44594e+014
+307 362 8.44163e+014
+364 256 8.44104e+014
+343 37 8.43569e+014
+445 7 8.43551e+014
+207 417 8.4242e+014
+42 339 8.41827e+014
+541 165 8.41816e+014
+274 206 8.4072e+014
+58 253 8.40438e+014
+329 212 8.40342e+014
+69 478 8.39856e+014
+252 422 8.39763e+014
+269 289 8.39125e+014
+65 252 8.3886e+014
+3 382 8.38772e+014
+125 40 8.38085e+014
+390 420 8.37761e+014
+177 18 8.37432e+014
+420 167 8.36993e+014
+252 424 8.36689e+014
+487 182 8.3644e+014
+279 362 8.36293e+014
+108 60 8.35958e+014
+61 133 8.35388e+014
+153 233 8.34627e+014
+580 52 8.337e+014
+285 404 8.33611e+014
+179 274 8.32731e+014
+279 126 8.31515e+014
+287 34 8.30421e+014
+406 142 8.29118e+014
+492 182 8.29093e+014
+429 223 8.28661e+014
+434 156 8.28633e+014
+44 62 8.26269e+014
+156 93 8.25755e+014
+96 125 8.24943e+014
+218 177 8.23151e+014
+436 43 8.22462e+014
+528 160 8.22226e+014
+305 106 8.22119e+014
+489 22 8.21494e+014
+193 171 8.20124e+014
+77 81 8.19828e+014
+526 398 8.19817e+014
+187 263 8.19779e+014
+565 462 8.18647e+014
+380 339 8.18519e+014
+19 65 8.18341e+014
+127 186 8.18286e+014
+216 176 8.18167e+014
+124 190 8.17694e+014
+548 44 8.17588e+014
+531 103 8.17478e+014
+274 76 8.17038e+014
+533 341 8.1692e+014
+105 4 8.16269e+014
+501 265 8.15888e+014
+292 28 8.15609e+014
+39 143 8.14628e+014
+518 183 8.14113e+014
+528 188 8.13528e+014
+574 39 8.12884e+014
+57 331 8.12357e+014
+133 78 8.12096e+014
+500 21 8.11905e+014
+130 239 8.11823e+014
+188 145 8.11214e+014
+383 146 8.1094e+014
+561 71 8.10545e+014
+298 332 8.10145e+014
+86 214 8.09804e+014
+128 40 8.09232e+014
+273 52 8.09156e+014
+141 392 8.09092e+014
+59 28 8.09058e+014
+433 240 8.09026e+014
+579 42 8.08558e+014
+22 58 8.07295e+014
+445 353 8.07035e+014
+85 197 8.05988e+014
+432 268 8.05975e+014
+398 358 8.05768e+014
+363 129 8.04862e+014
+560 81 8.04664e+014
+113 356 8.04379e+014
+451 101 8.04169e+014
+507 2 8.04122e+014
+514 382 8.0087e+014
+117 428 8.00788e+014
+59 41 7.98714e+014
+437 303 7.9861e+014
+471 82 7.97751e+014
+419 52 7.96538e+014
+558 19 7.95832e+014
+3 155 7.9578e+014
+598 364 7.94613e+014
+553 383 7.93489e+014
+64 276 7.92846e+014
+156 307 7.92135e+014
+446 340 7.91997e+014
+525 381 7.91926e+014
+396 104 7.91725e+014
+288 396 7.9046e+014
+304 193 7.90363e+014
+175 109 7.90216e+014
+250 422 7.88099e+014
+41 10 7.87999e+014
+317 107 7.87927e+014
+597 272 7.87207e+014
+398 169 7.86994e+014
+573 423 7.86973e+014
+27 220 7.8678e+014
+42 24 7.86302e+014
+144 327 7.8615e+014
+366 146 7.86127e+014
+564 40 7.85182e+014
+133 427 7.83753e+014
+277 137 7.83736e+014
+324 260 7.83489e+014
+113 176 7.82925e+014
+150 151 7.82729e+014
+41 136 7.82473e+014
+6 11 7.82348e+014
+328 288 7.81918e+014
+313 222 7.81848e+014
+173 18 7.79755e+014
+344 340 7.7973e+014
+425 43 7.78629e+014
+429 121 7.78139e+014
+572 328 7.77887e+014
+541 123 7.77026e+014
+281 394 7.76883e+014
+116 391 7.76782e+014
+408 44 7.76755e+014
+391 448 7.76619e+014
+433 339 7.76399e+014
+71 410 7.7623e+014
+424 48 7.75986e+014
+279 296 7.75716e+014
+333 106 7.75673e+014
+464 161 7.75584e+014
+163 108 7.75171e+014
+164 324 7.75101e+014
+269 51 7.74619e+014
+90 255 7.73295e+014
+245 14 7.72713e+014
+172 108 7.72309e+014
+384 162 7.72173e+014
+78 79 7.71929e+014
+174 115 7.71609e+014
+481 182 7.71119e+014
+45 407 7.70234e+014
+229 131 7.70224e+014
+281 296 7.70072e+014
+467 125 7.69463e+014
+24 65 7.69398e+014
+226 15 7.69236e+014
+151 196 7.69181e+014
+184 137 7.68712e+014
+476 182 7.6847e+014
+484 375 7.68379e+014
+492 456 7.68361e+014
+281 132 7.68304e+014
+508 82 7.68298e+014
+158 138 7.67624e+014
+366 2 7.6758e+014
+299 399 7.67534e+014
+57 289 7.67501e+014
+131 255 7.65432e+014
+39 83 7.65377e+014
+15 219 7.64969e+014
+126 191 7.64419e+014
+129 429 7.63545e+014
+303 180 7.63116e+014
+107 96 7.63037e+014
+279 370 7.6219e+014
+374 394 7.6213e+014
+505 381 7.60676e+014
+500 42 7.60398e+014
+415 251 7.60045e+014
+289 136 7.59813e+014
+266 14 7.56772e+014
+248 314 7.56645e+014
+369 162 7.5644e+014
+341 109 7.56435e+014
+48 133 7.55383e+014
+380 122 7.55095e+014
+516 202 7.54849e+014
+128 166 7.54017e+014
+129 309 7.53223e+014
+131 73 7.53216e+014
+65 363 7.53136e+014
+394 222 7.52975e+014
+354 26 7.51422e+014
+460 40 7.5012e+014
+233 344 7.50085e+014
+293 334 7.49805e+014
+70 130 7.49024e+014
+173 112 7.48951e+014
+445 126 7.48493e+014
+360 315 7.47047e+014
+387 327 7.46803e+014
+282 351 7.4637e+014
+92 20 7.45966e+014
+62 205 7.45684e+014
+476 260 7.45521e+014
+218 145 7.44898e+014
+160 98 7.44785e+014
+33 172 7.44732e+014
+101 236 7.43641e+014
+416 163 7.43001e+014
+200 84 7.42333e+014
+479 451 7.41852e+014
+440 468 7.41737e+014
+535 121 7.41409e+014
+568 383 7.41371e+014
+220 151 7.41216e+014
+379 125 7.412e+014
+415 253 7.40905e+014
+187 109 7.3904e+014
+190 144 7.38008e+014
+168 242 7.37897e+014
+181 398 7.36243e+014
+49 80 7.35747e+014
+432 110 7.34945e+014
+394 317 7.34824e+014
+112 56 7.33327e+014
+46 90 7.33227e+014
+384 6 7.3297e+014
+173 40 7.31044e+014
+157 200 7.31025e+014
+373 116 7.30677e+014
+178 394 7.30154e+014
+31 28 7.29276e+014
+136 93 7.29223e+014
+199 111 7.28546e+014
+190 322 7.28353e+014
+38 167 7.27892e+014
+297 410 7.27338e+014
+5 63 7.27326e+014
+368 337 7.27135e+014
+262 393 7.24994e+014
+560 272 7.22789e+014
+155 197 7.22543e+014
+166 20 7.22328e+014
+219 316 7.22139e+014
+425 262 7.21872e+014
+321 119 7.21826e+014
+110 168 7.2155e+014
+412 220 7.20915e+014
+433 303 7.1974e+014
+158 74 7.19104e+014
+95 452 7.18585e+014
+104 430 7.18267e+014
+278 418 7.18075e+014
+179 106 7.17946e+014
+382 162 7.17596e+014
+31 96 7.17585e+014
+254 76 7.17538e+014
+64 318 7.17069e+014
+551 385 7.16956e+014
+451 91 7.15835e+014
+273 287 7.158e+014
+229 347 7.15713e+014
+442 355 7.1435e+014
+220 210 7.14165e+014
+382 336 7.13728e+014
+343 392 7.12512e+014
+269 105 7.11299e+014
+341 88 7.11213e+014
+327 320 7.10895e+014
+157 318 7.10796e+014
+279 222 7.09292e+014
+306 355 7.09129e+014
+463 100 7.08942e+014
+121 239 7.08909e+014
+561 223 7.08248e+014
+177 75 7.06684e+014
+168 309 7.05977e+014
+246 106 7.04682e+014
+221 432 7.04667e+014
+61 181 7.04072e+014
+257 88 7.03306e+014
+444 357 7.0315e+014
+327 90 7.03058e+014
+533 122 7.0275e+014
+49 164 7.01762e+014
+252 152 7.01092e+014
+148 3 7.01063e+014
+524 172 7.00815e+014
+330 202 7.00552e+014
+365 85 7.00247e+014
+472 42 6.99815e+014
+549 183 6.99359e+014
+45 97 6.99322e+014
+418 68 6.9881e+014
+190 276 6.98163e+014
+45 136 6.9811e+014
+295 296 6.97923e+014
+198 192 6.97827e+014
+449 23 6.96816e+014
+177 331 6.96811e+014
+262 217 6.9676e+014
+529 32 6.95275e+014
+189 107 6.9527e+014
+391 324 6.94276e+014
+164 202 6.94175e+014
+86 365 6.93889e+014
+263 13 6.92557e+014
+205 202 6.91496e+014
+51 61 6.91476e+014
+391 52 6.91244e+014
+215 144 6.90795e+014
+191 17 6.89994e+014
+417 450 6.89663e+014
+205 435 6.89582e+014
+168 150 6.89289e+014
+471 4 6.88999e+014
+326 180 6.87574e+014
+371 89 6.85637e+014
+116 219 6.85286e+014
+303 209 6.85186e+014
+83 404 6.8473e+014
+30 134 6.84702e+014
+535 18 6.84512e+014
+315 159 6.83301e+014
+389 327 6.82719e+014
+107 58 6.82057e+014
+16 215 6.81734e+014
+393 165 6.81464e+014
+138 23 6.81368e+014
+498 20 6.80308e+014
+546 261 6.7959e+014
+353 424 6.79364e+014
+246 327 6.79142e+014
+513 401 6.78729e+014
+41 121 6.78412e+014
+361 222 6.78213e+014
+132 94 6.78085e+014
+86 371 6.77748e+014
+450 442 6.774e+014
+40 355 6.76424e+014
+257 140 6.76423e+014
+148 396 6.75892e+014
+540 141 6.75881e+014
+293 120 6.75406e+014
+359 161 6.75338e+014
+128 25 6.75065e+014
+153 197 6.74629e+014
+121 187 6.74411e+014
+464 24 6.7432e+014
+157 76 6.74318e+014
+97 147 6.74182e+014
+271 183 6.74121e+014
+424 397 6.74119e+014
+327 13 6.73881e+014
+132 216 6.73679e+014
+546 166 6.7336e+014
+408 182 6.72773e+014
+34 298 6.72397e+014
+214 146 6.7188e+014
+364 357 6.71772e+014
+537 103 6.70566e+014
+411 46 6.70132e+014
+158 237 6.69911e+014
+573 17 6.6956e+014
+166 114 6.68345e+014
+475 342 6.68284e+014
+130 128 6.68047e+014
+412 245 6.67761e+014
+564 17 6.6664e+014
+68 304 6.65563e+014
+208 421 6.65561e+014
+318 201 6.64895e+014
+179 103 6.64878e+014
+390 296 6.64591e+014
+472 119 6.64479e+014
+559 462 6.64337e+014
+309 147 6.64244e+014
+471 122 6.63355e+014
+20 67 6.62701e+014
+105 37 6.62694e+014
+263 403 6.61857e+014
+358 52 6.61196e+014
+290 49 6.60744e+014
+447 6 6.60302e+014
+462 45 6.59706e+014
+167 290 6.58423e+014
+117 184 6.57959e+014
+421 315 6.57787e+014
+173 37 6.57572e+014
+63 369 6.57521e+014
+227 38 6.57391e+014
+32 142 6.57158e+014
+449 83 6.56989e+014
+473 211 6.56882e+014
+565 60 6.55833e+014
+222 214 6.55495e+014
+104 219 6.55372e+014
+208 449 6.54609e+014
+133 65 6.54533e+014
+243 419 6.5434e+014
+222 239 6.5422e+014
+496 120 6.53481e+014
+156 234 6.52996e+014
+415 21 6.52389e+014
+166 240 6.52308e+014
+550 222 6.52047e+014
+224 72 6.51972e+014
+584 38 6.5196e+014
+278 139 6.51905e+014
+418 79 6.51868e+014
+385 450 6.51661e+014
+440 24 6.51559e+014
+78 271 6.51318e+014
+449 168 6.51318e+014
+407 81 6.51003e+014
+513 93 6.50954e+014
+128 238 6.50805e+014
+350 86 6.50476e+014
+146 452 6.50457e+014
+485 327 6.50252e+014
+329 107 6.49909e+014
+348 299 6.49833e+014
+128 128 6.49431e+014
+451 83 6.48816e+014
+38 10 6.48751e+014
+89 376 6.48558e+014
+52 11 6.48097e+014
+330 62 6.47848e+014
+530 366 6.47455e+014
+163 327 6.46746e+014
+441 321 6.46568e+014
+261 329 6.4655e+014
+451 263 6.46432e+014
+180 292 6.46369e+014
+158 181 6.46283e+014
+269 169 6.45312e+014
+90 378 6.43768e+014
+421 162 6.43289e+014
+173 21 6.42125e+014
+331 89 6.42116e+014
+510 223 6.42045e+014
+113 262 6.41923e+014
+160 430 6.41768e+014
+13 206 6.41369e+014
+542 457 6.40821e+014
+388 282 6.40607e+014
+446 376 6.40419e+014
+530 193 6.40159e+014
+85 178 6.38917e+014
+496 462 6.3709e+014
+260 382 6.36581e+014
+569 203 6.36569e+014
+333 415 6.34184e+014
+512 95 6.33879e+014
+296 89 6.33843e+014
+266 139 6.32948e+014
+300 246 6.32457e+014
+30 238 6.30202e+014
+247 346 6.29975e+014
+410 99 6.29711e+014
+38 170 6.28124e+014
+87 197 6.28068e+014
+547 162 6.2798e+014
+352 161 6.27811e+014
+84 310 6.27547e+014
+297 99 6.25261e+014
+315 165 6.24555e+014
+529 191 6.24402e+014
+101 362 6.23888e+014
+358 64 6.23835e+014
+109 358 6.23792e+014
+121 128 6.22982e+014
+394 146 6.22489e+014
+372 105 6.22326e+014
+193 217 6.2204e+014
+278 367 6.21431e+014
+262 319 6.2124e+014
+412 469 6.20915e+014
+131 477 6.2025e+014
+487 261 6.19849e+014
+332 333 6.19597e+014
+275 329 6.19512e+014
+583 345 6.19134e+014
+362 101 6.18092e+014
+487 43 6.17645e+014
+545 438 6.17411e+014
+312 77 6.17314e+014
+187 182 6.17016e+014
+433 25 6.16763e+014
+467 123 6.1666e+014
+524 199 6.15607e+014
+354 18 6.14699e+014
+187 291 6.14017e+014
+286 53 6.13949e+014
+33 65 6.12948e+014
+532 161 6.12169e+014
+49 63 6.11802e+014
+124 184 6.11792e+014
+149 231 6.11129e+014
+500 224 6.10939e+014
+211 94 6.10834e+014
+404 13 6.10764e+014
+361 331 6.10354e+014
+328 165 6.09589e+014
+189 202 6.09541e+014
+363 143 6.09112e+014
+46 121 6.08937e+014
+415 83 6.08914e+014
+259 163 6.08424e+014
+394 158 6.08349e+014
+508 84 6.07401e+014
+524 185 6.07314e+014
+91 79 6.06896e+014
+389 49 6.0626e+014
+272 133 6.06224e+014
+277 333 6.05523e+014
+471 213 6.05284e+014
+351 271 6.05186e+014
+418 300 6.04933e+014
+571 333 6.0459e+014
+212 435 6.04306e+014
+122 4 6.04028e+014
+265 403 6.03669e+014
+447 145 6.03586e+014
+279 86 6.031e+014
+308 355 6.02794e+014
+522 124 6.02793e+014
+94 197 6.01897e+014
+267 132 6.01555e+014
+424 163 6.01462e+014
+70 255 6.0116e+014
+383 260 6.01e+014
+618 181 6.00806e+014
+523 39 6.00792e+014
+130 253 6.00787e+014
+289 349 6.00512e+014
+58 79 6.00197e+014
+68 96 6.00005e+014
+126 3 5.99538e+014
+396 319 5.98807e+014
+485 236 5.9839e+014
+31 271 5.98383e+014
+116 181 5.98131e+014
+537 140 5.97299e+014
+102 294 5.97033e+014
+176 180 5.96347e+014
+379 107 5.9612e+014
+222 153 5.96101e+014
+400 266 5.95624e+014
+310 259 5.95583e+014
+522 141 5.95545e+014
+210 395 5.95016e+014
+139 2 5.94554e+014
+498 68 5.93928e+014
+60 254 5.93455e+014
+215 426 5.93117e+014
+180 166 5.93097e+014
+156 237 5.92126e+014
+234 261 5.91968e+014
+209 36 5.90761e+014
+63 201 5.90649e+014
+149 112 5.90159e+014
+72 165 5.89881e+014
+439 149 5.89687e+014
+317 166 5.894e+014
+117 360 5.88781e+014
+384 26 5.88708e+014
+182 201 5.88644e+014
+349 337 5.88061e+014
+297 182 5.87533e+014
+247 317 5.87523e+014
+266 447 5.87439e+014
+44 476 5.87279e+014
+43 474 5.87266e+014
+159 197 5.86695e+014
+280 144 5.85578e+014
+381 128 5.85425e+014
+400 319 5.85045e+014
+408 184 5.84895e+014
+545 141 5.84704e+014
+45 153 5.8469e+014
+203 396 5.84627e+014
+211 21 5.84458e+014
+53 221 5.84023e+014
+376 4 5.83956e+014
+381 164 5.83028e+014
+528 221 5.82546e+014
+52 292 5.82468e+014
+69 417 5.82031e+014
+387 16 5.81524e+014
+117 132 5.81406e+014
+153 301 5.81138e+014
+263 167 5.81044e+014
+433 278 5.80919e+014
+122 446 5.80806e+014
+210 18 5.80793e+014
+191 130 5.80116e+014
+570 408 5.79873e+014
+465 101 5.79187e+014
+119 25 5.79028e+014
+303 52 5.78981e+014
+157 112 5.78411e+014
+536 81 5.78132e+014
+248 328 5.77612e+014
+175 2 5.76527e+014
+162 128 5.763e+014
+83 101 5.76256e+014
+327 25 5.7524e+014
+496 224 5.75053e+014
+499 475 5.74836e+014
+399 67 5.74264e+014
+89 77 5.74034e+014
+99 361 5.73676e+014
+110 112 5.7344e+014
+419 85 5.72561e+014
+84 289 5.72463e+014
+470 202 5.72298e+014
+256 405 5.7199e+014
+18 236 5.71855e+014
+462 396 5.71848e+014
+107 107 5.7136e+014
+380 180 5.71246e+014
+243 210 5.70915e+014
+447 244 5.7085e+014
+61 9 5.70599e+014
+267 16 5.70304e+014
+184 184 5.70234e+014
+384 258 5.70079e+014
+36 98 5.70049e+014
+44 337 5.69603e+014
+316 427 5.69075e+014
+412 43 5.69012e+014
+272 91 5.6893e+014
+100 95 5.68928e+014
+395 106 5.68826e+014
+126 329 5.68224e+014
+14 30 5.67994e+014
+575 141 5.67831e+014
+210 187 5.67793e+014
+84 145 5.67504e+014
+518 164 5.66777e+014
+272 414 5.65592e+014
+511 211 5.65154e+014
+439 455 5.64713e+014
+333 240 5.64699e+014
+9 76 5.6462e+014
+570 421 5.64351e+014
+321 10 5.6352e+014
+76 259 5.63419e+014
+88 354 5.62832e+014
+126 113 5.62826e+014
+260 231 5.61942e+014
+357 240 5.61606e+014
+477 240 5.61517e+014
+281 35 5.60839e+014
+184 200 5.6028e+014
+535 141 5.59876e+014
+341 257 5.59862e+014
+146 97 5.59799e+014
+58 103 5.59536e+014
+497 64 5.59483e+014
+173 75 5.59196e+014
+571 383 5.58125e+014
+310 334 5.57476e+014
+124 94 5.57403e+014
+469 141 5.57059e+014
+203 293 5.56579e+014
+520 362 5.56467e+014
+503 179 5.55956e+014
+475 255 5.55436e+014
+84 371 5.55227e+014
+404 143 5.54871e+014
+219 126 5.5475e+014
+13 202 5.54205e+014
+173 166 5.54135e+014
+579 79 5.53754e+014
+166 116 5.53682e+014
+435 181 5.53125e+014
+209 136 5.52711e+014
+193 290 5.5234e+014
+275 218 5.51478e+014
+50 452 5.5081e+014
+197 148 5.50679e+014
+243 32 5.50086e+014
+94 95 5.49313e+014
+591 103 5.49094e+014
+124 82 5.48863e+014
+311 298 5.48714e+014
+106 77 5.48184e+014
+40 353 5.48139e+014
+240 194 5.47964e+014
+33 30 5.47818e+014
+317 125 5.47786e+014
+554 244 5.46022e+014
+434 381 5.45792e+014
+465 281 5.45342e+014
+469 198 5.44884e+014
+259 370 5.44553e+014
+333 412 5.43886e+014
+283 80 5.43825e+014
+413 100 5.43233e+014
+401 429 5.42719e+014
+26 6 5.42397e+014
+187 288 5.42258e+014
+259 228 5.42054e+014
+32 103 5.41895e+014
+331 133 5.41813e+014
+323 118 5.41618e+014
+484 154 5.4125e+014
+500 318 5.4088e+014
+540 405 5.40799e+014
+569 183 5.40204e+014
+500 420 5.40092e+014
+175 189 5.39971e+014
+80 132 5.39848e+014
+503 161 5.38919e+014
+281 418 5.38014e+014
+496 22 5.37566e+014
+279 198 5.37253e+014
+336 89 5.36765e+014
+544 20 5.3656e+014
+326 353 5.36452e+014
+310 90 5.35035e+014
+450 440 5.34994e+014
+154 57 5.34939e+014
+579 50 5.34605e+014
+198 75 5.34171e+014
+48 458 5.34139e+014
+163 316 5.33833e+014
+99 195 5.33796e+014
+203 347 5.33301e+014
+213 62 5.33261e+014
+512 349 5.33243e+014
+181 33 5.32299e+014
+222 149 5.32159e+014
+379 335 5.31997e+014
+148 398 5.31652e+014
+344 274 5.31321e+014
+88 261 5.312e+014
+388 202 5.30879e+014
+475 161 5.30701e+014
+364 333 5.30118e+014
+189 180 5.30098e+014
+159 140 5.29985e+014
+63 315 5.29863e+014
+275 197 5.29785e+014
+111 324 5.29449e+014
+330 164 5.29447e+014
+109 77 5.2943e+014
+196 60 5.29349e+014
+282 369 5.29319e+014
+360 242 5.29145e+014
+173 2 5.28364e+014
+575 98 5.27115e+014
+387 319 5.27104e+014
+437 181 5.26842e+014
+466 127 5.26172e+014
+231 126 5.25608e+014
+554 380 5.25499e+014
+289 89 5.25479e+014
+527 395 5.25366e+014
+142 238 5.25134e+014
+482 360 5.25082e+014
+532 268 5.24911e+014
+418 282 5.24813e+014
+122 184 5.24657e+014
+573 333 5.24111e+014
+135 134 5.23177e+014
+450 446 5.23004e+014
+510 203 5.22672e+014
+164 190 5.22602e+014
+486 376 5.22558e+014
+108 427 5.22179e+014
+57 168 5.22176e+014
+191 314 5.22038e+014
+405 337 5.20517e+014
+458 180 5.19605e+014
+521 344 5.1951e+014
+283 296 5.18771e+014
+12 214 5.18354e+014
+186 107 5.18294e+014
+165 378 5.17858e+014
+494 164 5.17082e+014
+383 325 5.16743e+014
+66 474 5.16638e+014
+553 378 5.1631e+014
+51 257 5.15878e+014
+148 131 5.15717e+014
+427 44 5.15544e+014
+88 183 5.15387e+014
+210 13 5.14832e+014
+298 274 5.14737e+014
+182 341 5.14275e+014
+495 476 5.13811e+014
+245 385 5.1357e+014
+309 31 5.13363e+014
+269 91 5.13304e+014
+441 240 5.12951e+014
+456 201 5.12483e+014
+191 189 5.12247e+014
+376 356 5.11348e+014
+461 100 5.11322e+014
+221 84 5.11258e+014
+517 142 5.10999e+014
+493 102 5.10831e+014
+212 152 5.10665e+014
+496 455 5.10491e+014
+429 116 5.10179e+014
+513 376 5.10176e+014
+517 59 5.10108e+014
+169 183 5.09584e+014
+179 153 5.09387e+014
+516 120 5.09244e+014
+187 326 5.08547e+014
+180 328 5.08376e+014
+490 82 5.08355e+014
+183 33 5.07952e+014
+38 182 5.0782e+014
+90 321 5.07743e+014
+511 205 5.07503e+014
+422 116 5.0747e+014
+143 141 5.07461e+014
+140 98 5.07348e+014
+573 6 5.07293e+014
+364 407 5.06944e+014
+386 63 5.06597e+014
+293 86 5.06323e+014
+180 56 5.06128e+014
+414 262 5.05503e+014
+193 111 5.05436e+014
+512 201 5.05178e+014
+465 355 5.04886e+014
+258 131 5.04837e+014
+527 80 5.04817e+014
+351 363 5.04753e+014
+192 326 5.04492e+014
+464 139 5.03341e+014
+421 89 5.0308e+014
+188 104 5.02736e+014
+161 133 5.02263e+014
+572 121 5.01735e+014
+473 355 5.01566e+014
+32 112 5.01476e+014
+135 139 5.01075e+014
+487 205 5.00893e+014
+243 273 5.00835e+014
+492 59 5.0033e+014
+231 344 5.00098e+014
+296 165 4.99895e+014
+461 269 4.99671e+014
+116 3 4.99398e+014
+72 4 4.99375e+014
+502 145 4.9932e+014
+280 420 4.99009e+014
+372 74 4.98948e+014
+18 320 4.98843e+014
+292 182 4.98379e+014
+164 380 4.98371e+014
+138 185 4.98179e+014
+193 313 4.97146e+014
+126 308 4.9656e+014
+377 64 4.9594e+014
+151 236 4.95903e+014
+549 282 4.95729e+014
+339 427 4.95258e+014
+545 160 4.95047e+014
+559 79 4.94923e+014
+422 63 4.94412e+014
+212 219 4.93858e+014
+408 14 4.93586e+014
+120 220 4.93537e+014
+509 346 4.9338e+014
+155 432 4.93179e+014
+555 264 4.9308e+014
+161 31 4.92758e+014
+299 262 4.92647e+014
+512 83 4.92605e+014
+163 105 4.92444e+014
+400 273 4.92402e+014
+247 258 4.91928e+014
+336 317 4.91785e+014
+146 15 4.9133e+014
+335 418 4.90955e+014
+338 221 4.90643e+014
+422 328 4.90545e+014
+341 314 4.8992e+014
+300 253 4.89588e+014
+263 31 4.89518e+014
+200 293 4.8902e+014
+356 251 4.87656e+014
+570 142 4.87559e+014
+482 164 4.87527e+014
+298 57 4.87345e+014
+161 135 4.86726e+014
+93 112 4.86706e+014
+42 353 4.86597e+014
+427 1 4.86569e+014
+483 177 4.86157e+014
+570 324 4.8606e+014
+376 66 4.85911e+014
+16 118 4.85868e+014
+210 16 4.85775e+014
+399 298 4.8532e+014
+392 243 4.85188e+014
+351 352 4.85106e+014
+75 132 4.85088e+014
+144 432 4.84846e+014
+551 80 4.84418e+014
+325 92 4.83878e+014
+63 27 4.83859e+014
+280 219 4.83704e+014
+375 341 4.83649e+014
+481 453 4.83302e+014
+443 121 4.83101e+014
+488 140 4.83012e+014
+375 282 4.82795e+014
+461 267 4.82674e+014
+39 241 4.82526e+014
+515 184 4.82373e+014
+159 90 4.81433e+014
+333 216 4.81251e+014
+512 109 4.80861e+014
+251 163 4.8073e+014
+476 248 4.80705e+014
+415 249 4.80641e+014
+464 39 4.80565e+014
+564 158 4.80237e+014
+291 164 4.80218e+014
+146 221 4.79603e+014
+62 135 4.79241e+014
+377 461 4.79158e+014
+211 136 4.78953e+014
+438 123 4.78375e+014
+472 453 4.7808e+014
+277 330 4.7781e+014
+329 390 4.77256e+014
+405 44 4.77111e+014
+484 361 4.76733e+014
+148 163 4.76537e+014
+223 312 4.76462e+014
+475 339 4.76426e+014
+420 283 4.76392e+014
+41 337 4.75733e+014
+171 180 4.75669e+014
+594 19 4.75518e+014
+13 236 4.75489e+014
+558 245 4.75394e+014
+286 422 4.75388e+014
+289 87 4.75144e+014
+115 306 4.75105e+014
+265 72 4.7463e+014
+104 76 4.74521e+014
+460 303 4.73799e+014
+366 107 4.7346e+014
+531 398 4.73073e+014
+500 461 4.72959e+014
+184 318 4.72247e+014
+407 262 4.71785e+014
+271 293 4.71705e+014
+330 200 4.7149e+014
+540 263 4.71311e+014
+266 118 4.71045e+014
+293 12 4.7093e+014
+282 401 4.70649e+014
+449 64 4.70145e+014
+132 410 4.70133e+014
+153 237 4.69754e+014
+416 377 4.69245e+014
+152 400 4.69033e+014
+494 120 4.69031e+014
+398 95 4.68769e+014
+322 29 4.68379e+014
+34 112 4.68328e+014
+238 190 4.68078e+014
+469 24 4.67932e+014
+346 47 4.67842e+014
+411 183 4.67437e+014
+35 300 4.67319e+014
+186 144 4.67208e+014
+129 217 4.67051e+014
+355 107 4.67026e+014
+103 304 4.66716e+014
+391 167 4.66451e+014
+186 342 4.66126e+014
+557 302 4.66043e+014
+344 276 4.65919e+014
+87 342 4.65837e+014
+127 218 4.65502e+014
+215 149 4.65486e+014
+102 234 4.65415e+014
+534 92 4.64866e+014
+522 78 4.64758e+014
+273 146 4.6472e+014
+416 86 4.64613e+014
+95 374 4.64464e+014
+216 106 4.64312e+014
+94 219 4.64302e+014
+430 44 4.64078e+014
+582 79 4.63908e+014
+233 296 4.63739e+014
+331 219 4.63626e+014
+576 311 4.63548e+014
+184 94 4.63517e+014
+392 293 4.63152e+014
+210 422 4.62831e+014
+143 179 4.62161e+014
+183 315 4.6214e+014
+200 415 4.61867e+014
+192 276 4.61838e+014
+357 255 4.61367e+014
+479 173 4.6131e+014
+60 110 4.61214e+014
+196 343 4.60832e+014
+427 63 4.60514e+014
+335 445 4.60383e+014
+420 362 4.60174e+014
+301 86 4.5996e+014
+217 164 4.59804e+014
+214 450 4.59378e+014
+45 342 4.59277e+014
+341 126 4.58763e+014
+262 273 4.58518e+014
+153 319 4.58337e+014
+456 418 4.58001e+014
+347 120 4.57392e+014
+554 201 4.57206e+014
+16 435 4.57206e+014
+248 190 4.566e+014
+329 103 4.55817e+014
+366 304 4.55606e+014
+579 83 4.55574e+014
+452 161 4.55556e+014
+381 357 4.55489e+014
+589 350 4.55372e+014
+503 167 4.5507e+014
+51 373 4.54975e+014
+281 386 4.5461e+014
+497 340 4.54541e+014
+131 30 4.54492e+014
+395 47 4.54378e+014
+95 59 4.54218e+014
+216 208 4.53328e+014
+59 60 4.52873e+014
+52 359 4.52774e+014
+497 283 4.52576e+014
+28 12 4.52544e+014
+154 76 4.52394e+014
+136 74 4.52187e+014
+266 287 4.52087e+014
+115 26 4.51483e+014
+510 142 4.51307e+014
+160 130 4.511e+014
+395 23 4.5088e+014
+108 260 4.49638e+014
+479 241 4.49628e+014
+223 177 4.49546e+014
+289 440 4.49511e+014
+250 425 4.48689e+014
+410 414 4.48676e+014
+260 367 4.48283e+014
+170 117 4.48088e+014
+252 72 4.48018e+014
+373 103 4.47774e+014
+514 335 4.47697e+014
+462 378 4.47297e+014
+514 2 4.4726e+014
+332 336 4.4725e+014
+432 296 4.47245e+014
+539 220 4.47194e+014
+346 341 4.47165e+014
+202 7 4.46536e+014
+177 200 4.45998e+014
+3 166 4.45765e+014
+360 145 4.45745e+014
+457 43 4.45538e+014
+130 134 4.45146e+014
+343 297 4.44935e+014
+11 83 4.44819e+014
+224 50 4.44601e+014
+334 143 4.43901e+014
+249 262 4.43847e+014
+202 393 4.43746e+014
+228 198 4.43524e+014
+232 274 4.42824e+014
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_5_5.txt b/test_data/harriscorners/hc_msc_0.00_0.04_5_5.txt
new file mode 100644
index 0000000..40f87fc
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_5_5.txt
@@ -0,0 +1,1254 @@
+1253
+244 94 7.0718e+016
+273 365 4.19588e+016
+237 19 3.36442e+016
+362 400 3.12716e+016
+423 178 3.00271e+016
+423 181 2.67318e+016
+82 28 2.53341e+016
+76 257 2.44932e+016
+420 181 2.38378e+016
+200 17 2.3797e+016
+122 43 2.37448e+016
+281 113 2.37446e+016
+240 91 2.28796e+016
+448 297 2.28076e+016
+543 365 2.26334e+016
+320 224 2.26184e+016
+261 297 2.24358e+016
+299 52 2.24339e+016
+214 72 2.19388e+016
+65 343 2.19239e+016
+420 177 2.18193e+016
+343 9 2.16203e+016
+252 13 2.14356e+016
+427 320 2.12805e+016
+447 397 2.08519e+016
+35 138 2.072e+016
+465 393 2.06931e+016
+122 45 2.06705e+016
+128 2 2.05662e+016
+553 40 2.05077e+016
+130 26 2.02247e+016
+360 295 2.00814e+016
+131 36 1.99837e+016
+124 198 1.98774e+016
+59 218 1.88757e+016
+134 214 1.86289e+016
+27 9 1.85968e+016
+30 8 1.85477e+016
+507 122 1.83679e+016
+116 44 1.83327e+016
+425 321 1.83164e+016
+38 63 1.8258e+016
+195 57 1.82277e+016
+484 23 1.76262e+016
+387 178 1.75983e+016
+138 203 1.74043e+016
+81 2 1.73436e+016
+78 2 1.71906e+016
+294 15 1.71674e+016
+480 297 1.7e+016
+222 38 1.69346e+016
+256 386 1.66813e+016
+243 202 1.65612e+016
+102 59 1.65365e+016
+303 183 1.65272e+016
+456 281 1.6518e+016
+46 27 1.64923e+016
+448 262 1.64732e+016
+509 122 1.6439e+016
+510 124 1.63451e+016
+519 61 1.63025e+016
+127 164 1.62931e+016
+340 9 1.62678e+016
+125 364 1.61276e+016
+386 10 1.60423e+016
+92 214 1.59941e+016
+435 69 1.58275e+016
+263 441 1.58061e+016
+2 47 1.57747e+016
+36 145 1.57663e+016
+308 371 1.57158e+016
+81 4 1.56621e+016
+33 99 1.56448e+016
+152 222 1.54905e+016
+84 78 1.54859e+016
+556 40 1.53309e+016
+484 338 1.50463e+016
+78 28 1.49813e+016
+470 239 1.48046e+016
+508 17 1.4791e+016
+544 168 1.47875e+016
+435 67 1.4772e+016
+320 313 1.47586e+016
+242 71 1.4677e+016
+101 222 1.45143e+016
+329 127 1.45128e+016
+426 119 1.44942e+016
+110 239 1.42893e+016
+11 101 1.41452e+016
+86 77 1.40541e+016
+125 254 1.4051e+016
+70 25 1.39816e+016
+418 440 1.39622e+016
+195 125 1.39122e+016
+214 58 1.38889e+016
+511 167 1.38492e+016
+220 16 1.38343e+016
+390 58 1.36823e+016
+452 339 1.36672e+016
+513 341 1.36458e+016
+528 24 1.36308e+016
+225 420 1.35091e+016
+535 243 1.35072e+016
+213 56 1.34816e+016
+526 24 1.34505e+016
+485 59 1.34419e+016
+476 262 1.34202e+016
+412 162 1.32075e+016
+195 127 1.31891e+016
+407 64 1.31774e+016
+462 279 1.31759e+016
+233 15 1.30885e+016
+145 310 1.30646e+016
+41 63 1.30375e+016
+363 251 1.30202e+016
+412 256 1.30182e+016
+343 338 1.30044e+016
+48 99 1.29908e+016
+54 29 1.2989e+016
+337 9 1.29444e+016
+410 64 1.29396e+016
+524 21 1.28414e+016
+253 139 1.28398e+016
+142 324 1.27097e+016
+160 143 1.27002e+016
+171 18 1.26948e+016
+390 60 1.26692e+016
+360 131 1.24699e+016
+138 110 1.23532e+016
+264 299 1.23182e+016
+210 55 1.22075e+016
+433 112 1.21616e+016
+96 446 1.21616e+016
+183 400 1.21299e+016
+88 148 1.20424e+016
+515 76 1.19951e+016
+216 279 1.19035e+016
+524 23 1.17951e+016
+510 173 1.17493e+016
+340 12 1.17276e+016
+64 236 1.1722e+016
+163 216 1.17035e+016
+73 24 1.16559e+016
+365 143 1.16492e+016
+302 215 1.1627e+016
+35 9 1.15878e+016
+92 198 1.15797e+016
+545 41 1.15786e+016
+404 121 1.1545e+016
+210 435 1.15356e+016
+184 36 1.15124e+016
+386 221 1.14656e+016
+246 206 1.1396e+016
+410 353 1.136e+016
+480 19 1.13343e+016
+120 51 1.13323e+016
+360 335 1.13138e+016
+417 8 1.12757e+016
+422 335 1.12699e+016
+177 106 1.1269e+016
+387 294 1.12284e+016
+260 222 1.12243e+016
+301 165 1.11756e+016
+234 346 1.11488e+016
+40 296 1.11484e+016
+325 341 1.11127e+016
+65 319 1.11009e+016
+41 217 1.10835e+016
+484 179 1.10743e+016
+468 239 1.10502e+016
+363 298 1.10453e+016
+74 6 1.1019e+016
+286 297 1.10121e+016
+124 185 1.09998e+016
+112 392 1.0934e+016
+528 102 1.09183e+016
+181 111 1.09159e+016
+368 144 1.08702e+016
+35 11 1.08508e+016
+431 147 1.08503e+016
+391 144 1.08178e+016
+234 162 1.08081e+016
+543 15 1.07407e+016
+497 81 1.07406e+016
+341 337 1.07398e+016
+167 287 1.07297e+016
+163 214 1.07056e+016
+371 162 1.07049e+016
+360 337 1.06868e+016
+359 260 1.06811e+016
+270 70 1.06782e+016
+230 36 1.0675e+016
+250 365 1.06675e+016
+154 236 1.06632e+016
+100 78 1.0604e+016
+390 295 1.05786e+016
+542 209 1.0529e+016
+57 4 1.05262e+016
+71 147 1.05262e+016
+207 450 1.05094e+016
+283 403 1.04837e+016
+348 178 1.04718e+016
+245 143 1.04384e+016
+86 255 1.04243e+016
+383 7 1.0391e+016
+482 366 1.0347e+016
+498 159 1.03431e+016
+4 66 1.03228e+016
+466 196 1.03105e+016
+476 22 1.02801e+016
+102 4 1.02706e+016
+108 45 1.02602e+016
+154 234 1.02159e+016
+224 182 1.02061e+016
+35 173 1.01971e+016
+425 376 1.0195e+016
+65 215 1.01942e+016
+138 173 1.0183e+016
+169 57 1.01752e+016
+243 165 1.01669e+016
+283 72 1.01493e+016
+163 277 1.01364e+016
+356 220 1.01186e+016
+579 16 1.01181e+016
+202 314 1.01138e+016
+228 292 1.01014e+016
+479 262 1.00905e+016
+151 307 1.00257e+016
+527 99 1.0019e+016
+6 11 1.00015e+016
+404 119 9.97286e+015
+545 59 9.95922e+015
+55 290 9.94618e+015
+176 109 9.94343e+015
+211 184 9.93412e+015
+271 279 9.92656e+015
+424 44 9.91612e+015
+509 455 9.91383e+015
+311 150 9.87674e+015
+470 421 9.87021e+015
+480 178 9.86793e+015
+476 5 9.81353e+015
+108 43 9.77954e+015
+209 20 9.7676e+015
+78 25 9.71732e+015
+527 39 9.70782e+015
+383 9 9.63478e+015
+62 60 9.61963e+015
+221 180 9.609e+015
+137 206 9.58667e+015
+175 40 9.56947e+015
+174 312 9.53498e+015
+252 423 9.50792e+015
+204 16 9.49848e+015
+51 98 9.47235e+015
+533 184 9.46371e+015
+358 128 9.45531e+015
+325 164 9.41696e+015
+286 210 9.35477e+015
+207 224 9.34972e+015
+78 79 9.31658e+015
+48 151 9.29069e+015
+271 166 9.28476e+015
+351 321 9.25118e+015
+526 60 9.24917e+015
+354 321 9.23042e+015
+36 176 9.22632e+015
+226 221 9.20281e+015
+429 3 9.18754e+015
+68 149 9.1664e+015
+60 183 9.07532e+015
+511 128 9.06137e+015
+210 451 9.01629e+015
+82 135 9.01579e+015
+327 142 9.01015e+015
+166 97 8.97277e+015
+31 270 8.96816e+015
+325 425 8.94868e+015
+261 165 8.93187e+015
+276 180 8.91826e+015
+314 84 8.91304e+015
+540 13 8.89703e+015
+355 268 8.89495e+015
+439 339 8.88422e+015
+512 99 8.85785e+015
+492 140 8.83673e+015
+59 40 8.82952e+015
+174 238 8.81201e+015
+399 262 8.79155e+015
+347 241 8.78793e+015
+277 221 8.78722e+015
+386 243 8.77027e+015
+401 122 8.68125e+015
+50 12 8.66741e+015
+56 32 8.6562e+015
+358 334 8.65413e+015
+542 18 8.62653e+015
+127 76 8.61633e+015
+489 342 8.61296e+015
+379 354 8.61118e+015
+203 311 8.59791e+015
+473 4 8.59723e+015
+108 27 8.58218e+015
+287 166 8.57377e+015
+293 26 8.54783e+015
+137 209 8.5403e+015
+175 112 8.48058e+015
+393 66 8.46401e+015
+516 17 8.44652e+015
+526 423 8.43952e+015
+482 328 8.42806e+015
+212 182 8.42309e+015
+55 66 8.39593e+015
+95 477 8.37936e+015
+422 48 8.3778e+015
+453 204 8.35911e+015
+396 261 8.335e+015
+329 254 8.33015e+015
+177 260 8.32993e+015
+104 198 8.32581e+015
+346 350 8.32521e+015
+250 33 8.30035e+015
+378 7 8.2752e+015
+325 142 8.2703e+015
+579 19 8.26011e+015
+47 147 8.25287e+015
+332 127 8.24607e+015
+235 72 8.24102e+015
+512 222 8.23405e+015
+220 290 8.22792e+015
+363 8 8.22569e+015
+110 135 8.21488e+015
+106 39 8.21067e+015
+264 446 8.19249e+015
+332 295 8.17528e+015
+276 352 8.15905e+015
+256 149 8.14539e+015
+434 398 8.12296e+015
+37 218 8.11744e+015
+449 218 8.11708e+015
+530 185 8.10229e+015
+306 440 8.07003e+015
+175 94 8.06365e+015
+101 198 8.06134e+015
+237 130 8.0546e+015
+528 104 8.04699e+015
+344 107 8.04675e+015
+537 393 8.04374e+015
+442 23 8.0359e+015
+515 347 8.0338e+015
+207 435 8.03006e+015
+140 22 8.01936e+015
+365 105 8.01446e+015
+102 360 8.01018e+015
+331 131 7.99351e+015
+488 263 7.99266e+015
+59 75 7.9906e+015
+456 84 7.96724e+015
+423 398 7.946e+015
+262 201 7.94534e+015
+323 224 7.94287e+015
+278 144 7.93663e+015
+453 206 7.90577e+015
+45 218 7.89239e+015
+167 325 7.88951e+015
+582 18 7.86731e+015
+62 203 7.81198e+015
+565 160 7.80163e+015
+522 264 7.7958e+015
+325 88 7.79418e+015
+324 315 7.7909e+015
+104 4 7.77603e+015
+300 265 7.7726e+015
+47 11 7.76577e+015
+566 43 7.74521e+015
+527 361 7.7377e+015
+266 296 7.70675e+015
+470 418 7.70471e+015
+32 66 7.70396e+015
+511 220 7.68058e+015
+452 376 7.6769e+015
+163 74 7.65421e+015
+330 9 7.63873e+015
+92 292 7.63393e+015
+246 400 7.6177e+015
+13 218 7.60296e+015
+393 295 7.59792e+015
+302 206 7.58601e+015
+309 7 7.58462e+015
+16 216 7.58275e+015
+273 131 7.56398e+015
+529 183 7.55078e+015
+233 200 7.53704e+015
+192 124 7.53068e+015
+523 123 7.51076e+015
+520 182 7.50468e+015
+576 177 7.50458e+015
+334 90 7.49014e+015
+446 7 7.48859e+015
+508 5 7.46617e+015
+247 403 7.45673e+015
+344 110 7.45592e+015
+313 147 7.43164e+015
+152 225 7.43059e+015
+406 198 7.43031e+015
+29 236 7.41311e+015
+366 7 7.41169e+015
+84 2 7.40233e+015
+164 327 7.38835e+015
+238 349 7.38122e+015
+342 107 7.38095e+015
+123 272 7.38085e+015
+403 262 7.36915e+015
+271 290 7.36239e+015
+541 123 7.34415e+015
+270 367 7.34224e+015
+502 361 7.32541e+015
+92 7 7.3178e+015
+520 184 7.29849e+015
+168 197 7.27528e+015
+562 146 7.27069e+015
+405 375 7.26305e+015
+156 198 7.26114e+015
+344 263 7.26079e+015
+404 187 7.25748e+015
+113 345 7.25447e+015
+58 29 7.25187e+015
+228 185 7.25012e+015
+61 133 7.24968e+015
+530 144 7.24904e+015
+551 381 7.22638e+015
+126 95 7.20708e+015
+408 182 7.20262e+015
+177 165 7.19881e+015
+66 477 7.18186e+015
+141 394 7.17901e+015
+95 6 7.16624e+015
+197 83 7.16249e+015
+157 73 7.15838e+015
+317 335 7.15393e+015
+21 61 7.13564e+015
+44 62 7.12224e+015
+501 143 7.09696e+015
+381 26 7.09215e+015
+141 183 7.07937e+015
+192 330 7.06205e+015
+129 76 7.03396e+015
+474 240 7.02526e+015
+362 397 7.02364e+015
+265 31 7.02271e+015
+544 4 7.0155e+015
+178 94 7.01231e+015
+416 23 7.00714e+015
+363 254 6.98722e+015
+55 293 6.98699e+015
+165 243 6.98045e+015
+358 10 6.97405e+015
+18 343 6.97317e+015
+30 219 6.95379e+015
+127 252 6.93786e+015
+180 394 6.93195e+015
+313 76 6.93002e+015
+362 370 6.91764e+015
+46 82 6.91371e+015
+28 29 6.90223e+015
+544 6 6.90209e+015
+551 378 6.89406e+015
+163 242 6.86027e+015
+53 43 6.85262e+015
+403 265 6.85097e+015
+478 402 6.85014e+015
+69 476 6.84843e+015
+205 160 6.84798e+015
+178 39 6.84125e+015
+378 67 6.83189e+015
+401 276 6.83032e+015
+334 436 6.82218e+015
+109 95 6.81072e+015
+279 128 6.80967e+015
+390 48 6.80366e+015
+109 137 6.79796e+015
+479 16 6.78296e+015
+527 222 6.76881e+015
+524 346 6.76175e+015
+228 128 6.75881e+015
+526 346 6.74902e+015
+58 364 6.74251e+015
+542 129 6.72518e+015
+460 267 6.71662e+015
+161 168 6.7138e+015
+220 150 6.71198e+015
+130 78 6.71139e+015
+238 421 6.71057e+015
+159 138 6.68562e+015
+171 109 6.68378e+015
+530 142 6.67778e+015
+542 132 6.66438e+015
+174 19 6.66395e+015
+342 263 6.63736e+015
+259 237 6.62416e+015
+164 358 6.59556e+015
+190 216 6.58479e+015
+41 10 6.5832e+015
+221 177 6.57832e+015
+113 343 6.57305e+015
+382 412 6.56915e+015
+426 182 6.56884e+015
+444 452 6.56483e+015
+210 445 6.56294e+015
+272 53 6.55319e+015
+363 181 6.53898e+015
+338 165 6.53454e+015
+156 196 6.52393e+015
+64 371 6.52289e+015
+473 63 6.52213e+015
+245 293 6.52043e+015
+44 97 6.51913e+015
+108 39 6.50675e+015
+90 255 6.50182e+015
+275 329 6.48812e+015
+280 50 6.47718e+015
+279 368 6.47635e+015
+133 93 6.4702e+015
+489 43 6.45933e+015
+436 304 6.43255e+015
+422 324 6.4303e+015
+458 4 6.4293e+015
+135 129 6.42034e+015
+413 299 6.40755e+015
+269 67 6.39429e+015
+338 473 6.38928e+015
+509 8 6.38913e+015
+338 391 6.38703e+015
+68 337 6.37664e+015
+127 187 6.3715e+015
+138 98 6.36342e+015
+36 201 6.36182e+015
+253 10 6.35349e+015
+231 126 6.34911e+015
+456 4 6.33216e+015
+113 3 6.32761e+015
+513 262 6.31281e+015
+350 145 6.31023e+015
+362 395 6.30263e+015
+371 90 6.29832e+015
+329 65 6.2959e+015
+219 107 6.2933e+015
+42 339 6.27533e+015
+417 84 6.27266e+015
+448 168 6.26449e+015
+192 219 6.25424e+015
+529 362 6.25208e+015
+490 59 6.25085e+015
+561 224 6.24544e+015
+393 216 6.23818e+015
+71 96 6.23753e+015
+182 380 6.21679e+015
+544 218 6.21292e+015
+251 10 6.20955e+015
+393 164 6.20797e+015
+47 133 6.1957e+015
+341 109 6.19143e+015
+359 167 6.18128e+015
+63 218 6.17756e+015
+435 90 6.16489e+015
+346 298 6.16154e+015
+297 331 6.16008e+015
+268 52 6.15889e+015
+513 260 6.14762e+015
+131 148 6.1465e+015
+408 45 6.14412e+015
+45 133 6.13482e+015
+328 297 6.12901e+015
+346 392 6.12251e+015
+416 44 6.10369e+015
+420 7 6.09985e+015
+528 189 6.09957e+015
+513 296 6.09857e+015
+448 166 6.09808e+015
+156 94 6.08745e+015
+301 103 6.07663e+015
+306 363 6.06247e+015
+456 375 6.05553e+015
+249 219 6.05549e+015
+117 76 6.05387e+015
+357 282 6.05355e+015
+273 296 6.05265e+015
+34 268 6.02432e+015
+190 205 6.01907e+015
+517 58 6.01128e+015
+418 164 6.01113e+015
+302 178 6.00465e+015
+479 293 6.00458e+015
+191 55 6.00276e+015
+325 295 5.99925e+015
+191 358 5.99175e+015
+389 140 5.99028e+015
+290 165 5.9868e+015
+414 5 5.98628e+015
+457 43 5.98365e+015
+341 123 5.9793e+015
+305 193 5.9665e+015
+85 214 5.96454e+015
+478 13 5.96428e+015
+142 2 5.95342e+015
+397 265 5.9529e+015
+46 220 5.9396e+015
+539 405 5.93841e+015
+42 24 5.9381e+015
+298 275 5.92106e+015
+547 163 5.90955e+015
+248 316 5.90017e+015
+387 15 5.90005e+015
+389 97 5.89798e+015
+129 95 5.89617e+015
+375 4 5.89089e+015
+31 135 5.88467e+015
+249 423 5.87827e+015
+418 80 5.87699e+015
+471 63 5.87297e+015
+132 132 5.86349e+015
+183 19 5.86146e+015
+111 42 5.8614e+015
+125 262 5.85544e+015
+325 297 5.83489e+015
+373 393 5.83351e+015
+129 128 5.83093e+015
+79 197 5.82602e+015
+460 44 5.81601e+015
+263 403 5.81356e+015
+399 265 5.7779e+015
+346 296 5.77495e+015
+360 217 5.77111e+015
+576 14 5.76805e+015
+209 16 5.76221e+015
+510 83 5.76006e+015
+542 100 5.75559e+015
+198 131 5.75434e+015
+298 69 5.75226e+015
+359 143 5.7363e+015
+223 218 5.73542e+015
+476 341 5.73275e+015
+56 221 5.73123e+015
+558 462 5.72339e+015
+573 141 5.71706e+015
+185 20 5.71578e+015
+259 35 5.71149e+015
+336 391 5.71108e+015
+571 161 5.70557e+015
+129 168 5.70097e+015
+160 183 5.69684e+015
+101 164 5.69603e+015
+88 209 5.69244e+015
+424 203 5.68892e+015
+380 122 5.68586e+015
+46 355 5.68177e+015
+578 42 5.68138e+015
+113 212 5.67606e+015
+392 48 5.67352e+015
+84 476 5.67335e+015
+275 319 5.66558e+015
+116 428 5.6478e+015
+538 96 5.64663e+015
+449 445 5.64507e+015
+549 58 5.64012e+015
+135 131 5.63132e+015
+281 222 5.62712e+015
+274 53 5.62188e+015
+480 82 5.6126e+015
+52 12 5.61143e+015
+359 169 5.60641e+015
+553 378 5.60247e+015
+38 168 5.59914e+015
+80 40 5.59095e+015
+543 457 5.59089e+015
+260 71 5.589e+015
+27 236 5.58766e+015
+393 218 5.58714e+015
+372 81 5.58575e+015
+434 225 5.57885e+015
+217 36 5.57726e+015
+172 94 5.5766e+015
+102 235 5.55404e+015
+125 188 5.54972e+015
+221 432 5.54533e+015
+519 263 5.54405e+015
+59 78 5.53995e+015
+138 57 5.53708e+015
+282 394 5.53631e+015
+192 216 5.53188e+015
+367 300 5.517e+015
+527 224 5.50091e+015
+42 26 5.49554e+015
+146 160 5.48477e+015
+471 83 5.47617e+015
+432 303 5.47162e+015
+573 422 5.46666e+015
+166 239 5.46229e+015
+299 178 5.45874e+015
+483 176 5.45336e+015
+257 250 5.44888e+015
+436 320 5.44139e+015
+376 119 5.44022e+015
+500 22 5.42999e+015
+571 450 5.4219e+015
+370 106 5.41682e+015
+364 258 5.41628e+015
+191 360 5.41582e+015
+513 120 5.41486e+015
+39 355 5.40966e+015
+256 35 5.4096e+015
+444 355 5.40698e+015
+193 16 5.40257e+015
+325 91 5.39677e+015
+363 102 5.39306e+015
+186 98 5.37598e+015
+160 111 5.37256e+015
+157 236 5.37085e+015
+387 126 5.37051e+015
+475 246 5.36724e+015
+441 239 5.36025e+015
+191 146 5.34973e+015
+498 225 5.33038e+015
+430 45 5.32981e+015
+471 212 5.32974e+015
+156 317 5.32359e+015
+156 92 5.32157e+015
+330 89 5.31551e+015
+539 123 5.31245e+015
+53 221 5.31099e+015
+58 290 5.30956e+015
+151 114 5.30477e+015
+354 25 5.3026e+015
+96 79 5.30208e+015
+66 475 5.29704e+015
+30 97 5.29583e+015
+146 21 5.29538e+015
+178 18 5.28748e+015
+420 164 5.28341e+015
+329 12 5.27487e+015
+420 162 5.2657e+015
+292 30 5.25825e+015
+525 172 5.25773e+015
+154 114 5.25525e+015
+301 106 5.25038e+015
+386 326 5.24971e+015
+502 160 5.23989e+015
+163 96 5.22703e+015
+33 236 5.22129e+015
+214 124 5.21589e+015
+429 223 5.21311e+015
+433 241 5.1937e+015
+327 182 5.18875e+015
+79 474 5.18486e+015
+307 449 5.18123e+015
+106 77 5.17986e+015
+317 147 5.17931e+015
+358 291 5.17904e+015
+57 372 5.17685e+015
+297 420 5.16073e+015
+385 162 5.16036e+015
+374 240 5.15436e+015
+120 446 5.14988e+015
+332 106 5.14968e+015
+328 294 5.14392e+015
+470 122 5.14324e+015
+561 320 5.13931e+015
+260 235 5.13895e+015
+584 38 5.13735e+015
+525 185 5.13697e+015
+121 48 5.13558e+015
+268 289 5.1354e+015
+379 106 5.12489e+015
+241 165 5.12455e+015
+130 255 5.12209e+015
+110 168 5.11238e+015
+258 161 5.11014e+015
+62 369 5.09691e+015
+163 208 5.09154e+015
+66 45 5.07835e+015
+569 39 5.07768e+015
+509 1 5.07074e+015
+538 186 5.0686e+015
+144 17 5.06712e+015
+413 44 5.05142e+015
+57 254 5.04528e+015
+401 184 5.04247e+015
+435 281 5.03255e+015
+220 100 5.02315e+015
+123 188 5.02168e+015
+287 396 5.01839e+015
+486 43 5.01453e+015
+430 89 5.00812e+015
+291 50 5.00633e+015
+360 220 5.00528e+015
+482 332 5.00196e+015
+379 337 4.9959e+015
+380 180 4.99174e+015
+108 109 4.98623e+015
+37 288 4.9826e+015
+345 274 4.97399e+015
+248 313 4.97233e+015
+84 145 4.97173e+015
+358 63 4.96779e+015
+418 283 4.96108e+015
+486 4 4.9595e+015
+349 87 4.95681e+015
+39 83 4.95104e+015
+336 90 4.95027e+015
+217 146 4.94985e+015
+334 106 4.94822e+015
+453 102 4.94813e+015
+104 221 4.94412e+015
+120 4 4.94183e+015
+107 183 4.93778e+015
+78 41 4.93341e+015
+395 318 4.92616e+015
+157 56 4.92119e+015
+132 129 4.92027e+015
+43 9 4.91999e+015
+565 463 4.91784e+015
+90 376 4.91163e+015
+536 459 4.90909e+015
+377 318 4.90793e+015
+547 182 4.90434e+015
+161 20 4.90167e+015
+216 125 4.89649e+015
+49 255 4.89205e+015
+542 59 4.88265e+015
+87 369 4.88128e+015
+144 2 4.87055e+015
+349 298 4.86501e+015
+561 227 4.84635e+015
+168 180 4.84553e+015
+188 264 4.8446e+015
+123 162 4.84361e+015
+533 61 4.84303e+015
+538 121 4.83638e+015
+76 237 4.82309e+015
+569 383 4.81473e+015
+213 436 4.81438e+015
+559 80 4.81234e+015
+539 458 4.79117e+015
+70 131 4.78943e+015
+462 221 4.77701e+015
+144 6 4.7746e+015
+561 229 4.76853e+015
+381 337 4.76678e+015
+196 193 4.7592e+015
+305 104 4.75394e+015
+121 187 4.75306e+015
+83 73 4.75284e+015
+244 168 4.75028e+015
+130 72 4.74945e+015
+133 237 4.7469e+015
+449 178 4.74683e+015
+279 366 4.74228e+015
+305 106 4.73931e+015
+164 20 4.73789e+015
+345 276 4.73663e+015
+118 425 4.73387e+015
+210 36 4.73307e+015
+356 255 4.7194e+015
+431 85 4.71007e+015
+173 116 4.69812e+015
+263 392 4.69693e+015
+378 340 4.69021e+015
+384 258 4.68125e+015
+500 265 4.67802e+015
+76 235 4.67333e+015
+217 208 4.66874e+015
+50 62 4.66769e+015
+493 181 4.66751e+015
+571 448 4.66612e+015
+394 161 4.65813e+015
+149 2 4.65687e+015
+384 260 4.64602e+015
+469 141 4.63497e+015
+517 202 4.6339e+015
+195 191 4.62752e+015
+390 326 4.6269e+015
+222 114 4.61319e+015
+69 420 4.60856e+015
+107 428 4.60577e+015
+291 265 4.60234e+015
+149 40 4.59826e+015
+78 270 4.5979e+015
+560 272 4.59559e+015
+402 6 4.59179e+015
+364 200 4.58259e+015
+299 398 4.58251e+015
+448 339 4.58027e+015
+488 3 4.57713e+015
+87 364 4.57646e+015
+404 181 4.57527e+015
+424 4 4.57359e+015
+498 227 4.57294e+015
+113 95 4.57002e+015
+271 182 4.56689e+015
+214 449 4.56067e+015
+229 265 4.55456e+015
+73 164 4.55434e+015
+73 166 4.55347e+015
+363 358 4.55024e+015
+473 202 4.54792e+015
+110 264 4.54171e+015
+44 474 4.53142e+015
+472 42 4.52815e+015
+309 441 4.51498e+015
+104 27 4.51343e+015
+32 29 4.51016e+015
+180 18 4.5034e+015
+129 238 4.49901e+015
+412 470 4.49605e+015
+34 31 4.49182e+015
+210 33 4.48423e+015
+444 352 4.47354e+015
+547 165 4.47274e+015
+159 75 4.47182e+015
+599 364 4.46812e+015
+480 451 4.4648e+015
+166 115 4.46455e+015
+274 215 4.46325e+015
+444 119 4.45967e+015
+152 196 4.4595e+015
+332 202 4.45758e+015
+66 252 4.45557e+015
+330 106 4.45487e+015
+166 110 4.44405e+015
+187 289 4.43242e+015
+431 82 4.42878e+015
+416 164 4.42874e+015
+242 419 4.41175e+015
+433 277 4.41065e+015
+261 218 4.4088e+015
+277 140 4.40486e+015
+419 84 4.40384e+015
+44 407 4.40257e+015
+538 94 4.40157e+015
+346 48 4.39113e+015
+552 384 4.39018e+015
+437 391 4.38905e+015
+64 8 4.38783e+015
+35 235 4.38583e+015
+449 139 4.38568e+015
+573 405 4.38024e+015
+191 312 4.37099e+015
+290 137 4.37072e+015
+242 190 4.36532e+015
+474 243 4.36493e+015
+168 149 4.36381e+015
+578 51 4.35895e+015
+289 349 4.35708e+015
+20 217 4.35392e+015
+29 135 4.34848e+015
+22 219 4.34572e+015
+182 131 4.3451e+015
+296 297 4.33779e+015
+544 216 4.33383e+015
+376 181 4.3256e+015
+484 82 4.32224e+015
+110 111 4.32217e+015
+264 311 4.31475e+015
+279 364 4.31386e+015
+217 176 4.31055e+015
+309 32 4.30811e+015
+163 315 4.30804e+015
+109 59 4.30643e+015
+188 145 4.3062e+015
+515 202 4.28841e+015
+127 128 4.28784e+015
+390 162 4.2862e+015
+254 75 4.28613e+015
+297 14 4.2818e+015
+198 111 4.28164e+015
+246 106 4.27638e+015
+259 368 4.27209e+015
+130 428 4.26443e+015
+385 125 4.26375e+015
+56 78 4.2634e+015
+95 94 4.26128e+015
+104 304 4.25942e+015
+406 80 4.25875e+015
+270 185 4.25808e+015
+245 14 4.25631e+015
+260 142 4.25441e+015
+85 60 4.25421e+015
+169 182 4.25354e+015
+436 388 4.24917e+015
+20 317 4.24759e+015
+131 476 4.24436e+015
+455 59 4.24205e+015
+212 33 4.24142e+015
+384 354 4.238e+015
+71 409 4.23305e+015
+282 199 4.23039e+015
+239 74 4.22794e+015
+372 116 4.22738e+015
+170 112 4.22703e+015
+277 137 4.22119e+015
+446 352 4.21804e+015
+215 175 4.21714e+015
+259 272 4.21187e+015
+432 269 4.21096e+015
+287 343 4.204e+015
+318 385 4.20327e+015
+399 168 4.20089e+015
+260 250 4.19986e+015
+85 310 4.19876e+015
+203 257 4.19417e+015
+463 40 4.19056e+015
+20 64 4.18952e+015
+530 38 4.18618e+015
+570 182 4.18582e+015
+222 112 4.1824e+015
+463 23 4.1766e+015
+514 381 4.17366e+015
+459 303 4.16811e+015
+432 318 4.16696e+015
+265 15 4.16037e+015
+153 218 4.15397e+015
+166 108 4.15202e+015
+166 117 4.14874e+015
+106 98 4.14133e+015
+359 53 4.14111e+015
+9 476 4.13796e+015
+217 148 4.13761e+015
+111 166 4.13603e+015
+505 381 4.13414e+015
+405 42 4.13335e+015
+486 140 4.13003e+015
+35 134 4.12657e+015
+92 59 4.12632e+015
+354 295 4.1169e+015
+281 419 4.11332e+015
+294 297 4.11043e+015
+535 18 4.10601e+015
+163 313 4.10527e+015
+297 182 4.09889e+015
+86 197 4.09466e+015
+41 136 4.08723e+015
+504 263 4.07897e+015
+265 13 4.07575e+015
+522 425 4.07422e+015
+486 376 4.06893e+015
+441 98 4.06203e+015
+293 312 4.0577e+015
+109 325 4.05554e+015
+342 463 4.05547e+015
+395 105 4.05134e+015
+503 164 4.05043e+015
+449 437 4.04709e+015
+174 166 4.04692e+015
+376 83 4.04326e+015
+186 108 4.03917e+015
+297 410 4.03555e+015
+483 143 4.03531e+015
+280 132 4.03357e+015
+435 163 4.03156e+015
+495 455 4.0307e+015
+391 449 4.02968e+015
+528 192 4.02541e+015
+278 392 4.02326e+015
+104 164 4.01855e+015
+444 122 4.0104e+015
+148 397 4.00963e+015
+465 356 4.0096e+015
+387 162 4.00886e+015
+163 114 4.00859e+015
+237 418 4.00768e+015
+452 83 4.00762e+015
+85 180 4.00711e+015
+151 111 3.99865e+015
+328 353 3.99723e+015
+294 269 3.99324e+015
+419 53 3.99244e+015
+467 24 3.99174e+015
+528 161 3.99004e+015
+179 274 3.9878e+015
+180 292 3.98684e+015
+279 197 3.98631e+015
+429 122 3.98424e+015
+10 79 3.98272e+015
+378 125 3.97584e+015
+160 96 3.97397e+015
+118 115 3.97042e+015
+398 357 3.97004e+015
+358 241 3.96829e+015
+192 189 3.96651e+015
+480 173 3.96641e+015
+592 18 3.96441e+015
+188 109 3.96274e+015
+282 135 3.96149e+015
+550 223 3.95919e+015
+294 333 3.94325e+015
+194 311 3.93585e+015
+507 60 3.93419e+015
+541 41 3.93399e+015
+49 80 3.92492e+015
+39 24 3.92491e+015
+451 86 3.92468e+015
+217 128 3.92416e+015
+284 199 3.92321e+015
+110 341 3.92171e+015
+254 77 3.92031e+015
+275 197 3.91879e+015
+271 241 3.91473e+015
+425 48 3.9118e+015
+418 258 3.91123e+015
+43 122 3.90873e+015
+86 62 3.90755e+015
+280 136 3.90692e+015
+450 82 3.90653e+015
+294 88 3.90442e+015
+338 263 3.90108e+015
+512 202 3.89934e+015
+366 260 3.89776e+015
+275 360 3.88728e+015
+468 124 3.88649e+015
+166 312 3.88389e+015
+367 1 3.87684e+015
+342 465 3.8755e+015
+414 252 3.86786e+015
+562 71 3.86665e+015
+249 192 3.86653e+015
+18 236 3.86207e+015
+351 270 3.85803e+015
+168 291 3.8575e+015
+49 159 3.84962e+015
+417 300 3.84794e+015
+220 114 3.84717e+015
+383 146 3.84417e+015
+122 127 3.84045e+015
+471 268 3.83809e+015
+150 231 3.83476e+015
+464 101 3.83354e+015
+145 187 3.82291e+015
+113 176 3.82272e+015
+397 318 3.82147e+015
+546 140 3.81958e+015
+36 299 3.81833e+015
+332 334 3.81537e+015
+12 81 3.81187e+015
+95 20 3.81157e+015
+381 162 3.81091e+015
+507 203 3.81019e+015
+10 77 3.80964e+015
+544 91 3.80651e+015
+57 331 3.8016e+015
+265 260 3.80116e+015
+448 401 3.79827e+015
+332 415 3.79506e+015
+41 122 3.79379e+015
+2 156 3.79171e+015
+358 161 3.79009e+015
+532 243 3.78247e+015
+367 337 3.78073e+015
+58 71 3.78047e+015
+512 43 3.77729e+015
+229 16 3.77537e+015
+343 198 3.77449e+015
+438 163 3.77417e+015
+531 161 3.77351e+015
+512 95 3.76697e+015
+211 153 3.76534e+015
+342 37 3.76389e+015
+220 152 3.76175e+015
+192 172 3.76122e+015
+247 34 3.76002e+015
+225 50 3.75795e+015
+436 182 3.75688e+015
+45 136 3.75248e+015
+433 381 3.74897e+015
+104 162 3.74516e+015
+447 350 3.73552e+015
+217 97 3.7334e+015
+178 329 3.73149e+015
+197 148 3.72702e+015
+362 361 3.72668e+015
+324 259 3.72636e+015
+190 349 3.72474e+015
+25 132 3.72371e+015
+538 39 3.72128e+015
+16 434 3.7152e+015
+182 344 3.71512e+015
+188 106 3.71488e+015
+528 396 3.71222e+015
+575 39 3.71201e+015
+157 306 3.70505e+015
+488 83 3.70464e+015
+18 64 3.7024e+015
+500 474 3.70042e+015
+406 163 3.69373e+015
+97 148 3.69277e+015
+266 71 3.69274e+015
+204 435 3.69175e+015
+530 221 3.68182e+015
+251 153 3.67974e+015
+440 121 3.67953e+015
+187 308 3.67608e+015
+571 454 3.67545e+015
+330 259 3.67331e+015
+575 126 3.67169e+015
+161 238 3.67081e+015
+334 218 3.66822e+015
+287 52 3.66684e+015
+73 186 3.66551e+015
+387 167 3.66515e+015
+450 22 3.66317e+015
+90 275 3.6563e+015
+331 142 3.65548e+015
+237 75 3.65501e+015
+561 463 3.65501e+015
+390 18 3.65273e+015
+53 357 3.65066e+015
+536 120 3.64996e+015
+564 224 3.64663e+015
+163 165 3.64503e+015
+269 61 3.64082e+015
+50 452 3.63631e+015
+148 112 3.63212e+015
+256 181 3.63148e+015
+162 134 3.62862e+015
+532 398 3.62787e+015
+570 422 3.61837e+015
+469 203 3.61784e+015
+129 310 3.61234e+015
+329 213 3.61062e+015
+190 277 3.60986e+015
+331 212 3.60564e+015
+286 443 3.60292e+015
+367 303 3.59959e+015
+533 18 3.59539e+015
+384 325 3.59436e+015
+236 222 3.59431e+015
+434 156 3.59112e+015
+401 181 3.58915e+015
+302 189 3.58734e+015
+333 258 3.58615e+015
+344 165 3.58331e+015
+190 324 3.58292e+015
+39 239 3.57791e+015
+528 159 3.56657e+015
+88 252 3.55664e+015
+316 166 3.55357e+015
+326 14 3.55326e+015
+118 96 3.54883e+015
+274 77 3.54561e+015
+561 61 3.54523e+015
+56 145 3.54484e+015
+87 372 3.544e+015
+533 341 3.54206e+015
+118 181 3.53874e+015
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_5_7.txt b/test_data/harriscorners/hc_msc_0.00_0.04_5_7.txt
new file mode 100644
index 0000000..fdc38d8
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_5_7.txt
@@ -0,0 +1,1500 @@
+1499
+244 94 1.71634e+017
+498 1 1.18825e+017
+421 180 9.36654e+016
+81 29 9.24614e+016
+237 20 8.97759e+016
+130 26 8.90595e+016
+272 366 8.39073e+016
+274 367 8.1731e+016
+240 92 7.67237e+016
+274 365 7.44997e+016
+424 177 7.16344e+016
+121 44 7.12838e+016
+422 177 7.07855e+016
+75 257 6.60503e+016
+121 46 6.42842e+016
+282 113 6.31336e+016
+80 4 6.1301e+016
+342 9 6.01663e+016
+261 298 5.99472e+016
+299 53 5.97594e+016
+509 124 5.92795e+016
+152 223 5.69227e+016
+363 400 5.67849e+016
+30 8 5.58886e+016
+424 322 5.57206e+016
+130 37 5.54974e+016
+83 77 5.46018e+016
+199 18 5.44919e+016
+542 14 5.25799e+016
+129 1 5.22786e+016
+330 128 5.13478e+016
+485 338 4.97401e+016
+138 204 4.95481e+016
+213 57 4.94543e+016
+253 12 4.93647e+016
+26 9 4.92854e+016
+195 58 4.92834e+016
+34 139 4.91835e+016
+483 178 4.87234e+016
+528 24 4.85752e+016
+37 63 4.80184e+016
+361 294 4.77804e+016
+543 365 4.74466e+016
+525 24 4.67589e+016
+102 222 4.66399e+016
+458 279 4.63903e+016
+482 22 4.62271e+016
+385 10 4.58272e+016
+476 261 4.571e+016
+302 184 4.56179e+016
+34 8 4.52126e+016
+156 1 4.5114e+016
+103 60 4.50344e+016
+320 314 4.44035e+016
+175 110 4.43659e+016
+359 294 4.43453e+016
+477 22 4.41942e+016
+65 344 4.37888e+016
+77 3 4.37814e+016
+55 30 4.3383e+016
+321 225 4.33318e+016
+361 395 4.31306e+016
+295 15 4.289e+016
+293 15 4.28091e+016
+58 218 4.25782e+016
+77 1 4.23688e+016
+135 213 4.23628e+016
+339 10 4.23472e+016
+428 2 4.23333e+016
+126 164 4.22744e+016
+36 145 4.21654e+016
+196 127 4.17182e+016
+389 10 4.14452e+016
+135 215 4.14374e+016
+554 41 4.14181e+016
+554 39 4.11279e+016
+464 393 4.09885e+016
+243 201 4.0947e+016
+510 16 4.08494e+016
+138 202 4.07692e+016
+400 263 4.05493e+016
+221 37 4.02878e+016
+258 385 3.99684e+016
+61 217 3.9964e+016
+302 181 3.9771e+016
+519 60 3.96577e+016
+359 129 3.95288e+016
+528 20 3.94321e+016
+460 279 3.92806e+016
+115 43 3.89012e+016
+164 215 3.88334e+016
+391 294 3.86609e+016
+71 26 3.85257e+016
+523 62 3.85228e+016
+241 70 3.81524e+016
+391 296 3.79716e+016
+436 68 3.76907e+016
+43 26 3.74828e+016
+477 19 3.72443e+016
+469 239 3.71014e+016
+528 102 3.70197e+016
+211 436 3.69193e+016
+576 16 3.68946e+016
+243 203 3.68665e+016
+209 20 3.67787e+016
+123 186 3.66369e+016
+126 254 3.6476e+016
+451 338 3.59772e+016
+215 71 3.59507e+016
+539 14 3.57183e+016
+449 299 3.57175e+016
+224 37 3.56694e+016
+33 100 3.56392e+016
+506 16 3.56333e+016
+512 342 3.55679e+016
+116 45 3.55419e+016
+359 334 3.55184e+016
+427 118 3.54997e+016
+447 261 3.54803e+016
+413 255 3.53797e+016
+12 217 3.5344e+016
+224 39 3.53195e+016
+223 420 3.52862e+016
+262 441 3.5013e+016
+364 250 3.49004e+016
+543 167 3.48545e+016
+416 8 3.48447e+016
+210 450 3.46286e+016
+389 60 3.43815e+016
+467 238 3.4286e+016
+226 37 3.41833e+016
+47 26 3.40937e+016
+433 112 3.39469e+016
+178 110 3.38575e+016
+55 290 3.38504e+016
+64 319 3.37751e+016
+367 144 3.37161e+016
+365 144 3.36024e+016
+511 166 3.35903e+016
+364 142 3.34516e+016
+403 120 3.34483e+016
+447 296 3.33621e+016
+511 169 3.32016e+016
+345 339 3.3138e+016
+470 421 3.31276e+016
+107 44 3.30835e+016
+480 19 3.28975e+016
+383 6 3.27401e+016
+58 6 3.2684e+016
+41 217 3.24344e+016
+328 296 3.23828e+016
+123 197 3.22981e+016
+92 213 3.2222e+016
+390 143 3.21241e+016
+490 1 3.21222e+016
+107 27 3.19632e+016
+111 240 3.19401e+016
+342 338 3.1807e+016
+79 79 3.17152e+016
+490 139 3.15514e+016
+109 43 3.15193e+016
+7 10 3.15054e+016
+126 364 3.14261e+016
+129 75 3.14175e+016
+4 46 3.14103e+016
+47 98 3.13656e+016
+424 45 3.13304e+016
+4 10 3.12738e+016
+143 324 3.12371e+016
+357 259 3.11228e+016
+60 40 3.10946e+016
+90 213 3.10716e+016
+417 438 3.10606e+016
+272 280 3.10118e+016
+480 296 3.09729e+016
+225 181 3.09665e+016
+247 206 3.09459e+016
+545 59 3.08993e+016
+409 65 3.08974e+016
+448 398 3.08935e+016
+309 370 3.08468e+016
+486 58 3.06577e+016
+182 398 3.0646e+016
+386 178 3.05527e+016
+453 204 3.02726e+016
+388 177 3.0252e+016
+183 36 3.01533e+016
+175 113 3.01167e+016
+361 251 3.01157e+016
+419 8 3.00019e+016
+196 124 2.99932e+016
+158 74 2.99296e+016
+352 321 2.99017e+016
+313 148 2.97286e+016
+226 421 2.97265e+016
+302 215 2.97131e+016
+557 39 2.96054e+016
+387 220 2.9532e+016
+155 235 2.94357e+016
+48 151 2.94025e+016
+222 181 2.93351e+016
+158 72 2.92248e+016
+61 203 2.90127e+016
+145 6 2.8815e+016
+562 478 2.87192e+016
+255 139 2.86797e+016
+404 183 2.86475e+016
+16 217 2.85126e+016
+211 185 2.84488e+016
+208 222 2.84078e+016
+137 174 2.83235e+016
+174 40 2.81666e+016
+32 270 2.81484e+016
+326 141 2.80129e+016
+68 476 2.80056e+016
+546 41 2.79654e+016
+302 165 2.79533e+016
+301 105 2.78838e+016
+87 254 2.78628e+016
+74 25 2.77758e+016
+88 148 2.77346e+016
+394 65 2.77062e+016
+36 173 2.76491e+016
+436 70 2.75402e+016
+423 332 2.73868e+016
+413 163 2.73228e+016
+410 353 2.72843e+016
+160 142 2.72624e+016
+293 26 2.7193e+016
+329 258 2.71442e+016
+359 220 2.71329e+016
+408 183 2.70744e+016
+499 159 2.70501e+016
+534 185 2.70369e+016
+10 101 2.7031e+016
+73 6 2.69288e+016
+165 240 2.6876e+016
+206 449 2.68339e+016
+66 216 2.68057e+016
+139 109 2.67925e+016
+265 445 2.66818e+016
+449 204 2.66376e+016
+150 306 2.66371e+016
+101 198 2.64915e+016
+220 17 2.64828e+016
+120 185 2.64603e+016
+66 476 2.64077e+016
+223 433 2.63973e+016
+403 118 2.63884e+016
+112 392 2.63582e+016
+467 241 2.63475e+016
+278 220 2.63258e+016
+132 75 2.63235e+016
+420 45 2.63203e+016
+100 79 2.62509e+016
+514 346 2.62078e+016
+512 221 2.6177e+016
+160 144 2.61658e+016
+310 6 2.61487e+016
+365 300 2.61377e+016
+269 70 2.61294e+016
+343 108 2.6126e+016
+243 166 2.61097e+016
+284 402 2.61065e+016
+260 223 2.60678e+016
+253 139 2.60609e+016
+246 144 2.60219e+016
+379 5 2.59923e+016
+229 37 2.59373e+016
+422 334 2.58179e+016
+361 259 2.57661e+016
+103 77 2.57067e+016
+152 306 2.56537e+016
+56 4 2.56462e+016
+85 148 2.56117e+016
+143 311 2.55785e+016
+508 454 2.54188e+016
+260 220 2.53934e+016
+305 439 2.52446e+016
+58 4 2.5243e+016
+107 39 2.523e+016
+165 242 2.52071e+016
+286 209 2.51697e+016
+528 186 2.51386e+016
+83 134 2.51373e+016
+143 309 2.51335e+016
+361 142 2.51286e+016
+236 348 2.50892e+016
+457 43 2.49552e+016
+103 198 2.49297e+016
+477 5 2.49123e+016
+169 56 2.49071e+016
+40 296 2.48844e+016
+549 41 2.48777e+016
+65 235 2.48577e+016
+202 313 2.48486e+016
+128 187 2.48477e+016
+473 5 2.48298e+016
+160 139 2.4802e+016
+94 6 2.47917e+016
+452 374 2.47874e+016
+252 423 2.47841e+016
+430 147 2.47473e+016
+234 161 2.47292e+016
+228 291 2.47278e+016
+233 345 2.47205e+016
+232 127 2.47157e+016
+3 65 2.46991e+016
+261 202 2.46181e+016
+325 341 2.45956e+016
+310 8 2.45707e+016
+392 218 2.45073e+016
+516 75 2.44791e+016
+168 288 2.44609e+016
+343 264 2.44452e+016
+60 184 2.443e+016
+314 84 2.44165e+016
+220 180 2.44142e+016
+565 42 2.44007e+016
+256 151 2.43883e+016
+91 197 2.43748e+016
+389 164 2.43361e+016
+230 127 2.42989e+016
+280 368 2.42916e+016
+220 14 2.42591e+016
+432 147 2.42421e+016
+415 22 2.42204e+016
+365 105 2.42112e+016
+526 38 2.41777e+016
+232 125 2.41509e+016
+172 19 2.41458e+016
+301 205 2.40926e+016
+168 326 2.40008e+016
+163 110 2.39532e+016
+248 399 2.39517e+016
+165 327 2.39516e+016
+104 3 2.39046e+016
+191 127 2.37754e+016
+131 132 2.37698e+016
+410 163 2.3758e+016
+406 198 2.37033e+016
+34 267 2.366e+016
+371 161 2.35793e+016
+251 365 2.3522e+016
+436 397 2.34992e+016
+534 242 2.34408e+016
+263 402 2.3318e+016
+462 43 2.32763e+016
+493 139 2.32457e+016
+48 10 2.31471e+016
+394 63 2.30578e+016
+544 457 2.30159e+016
+153 196 2.29993e+016
+388 16 2.29852e+016
+441 24 2.29773e+016
+48 12 2.28633e+016
+332 294 2.28146e+016
+402 266 2.28057e+016
+552 381 2.26706e+016
+460 267 2.25876e+016
+229 293 2.25817e+016
+521 184 2.25332e+016
+97 448 2.2531e+016
+133 96 2.24876e+016
+355 127 2.24021e+016
+437 304 2.23814e+016
+548 162 2.23455e+016
+166 110 2.23286e+016
+111 169 2.23085e+016
+29 30 2.22542e+016
+169 19 2.2237e+016
+385 295 2.21533e+016
+326 165 2.21496e+016
+208 225 2.20467e+016
+483 329 2.20441e+016
+326 89 2.2035e+016
+512 100 2.1995e+016
+34 269 2.19765e+016
+389 21 2.19226e+016
+529 38 2.18912e+016
+24 62 2.18904e+016
+380 354 2.18655e+016
+172 56 2.18426e+016
+139 21 2.18058e+016
+112 344 2.175e+016
+125 259 2.17331e+016
+174 311 2.17123e+016
+259 165 2.16716e+016
+189 218 2.16509e+016
+453 207 2.16414e+016
+498 225 2.15378e+016
+45 339 2.14903e+016
+389 65 2.1475e+016
+420 48 2.14733e+016
+488 58 2.14686e+016
+541 124 2.14655e+016
+340 108 2.144e+016
+459 264 2.14121e+016
+528 61 2.14058e+016
+218 106 2.13802e+016
+566 160 2.13609e+016
+287 297 2.13369e+016
+513 78 2.13299e+016
+423 48 2.13253e+016
+545 2 2.12953e+016
+513 262 2.12913e+016
+102 360 2.12747e+016
+399 266 2.12232e+016
+524 186 2.11523e+016
+362 7 2.11446e+016
+346 350 2.11073e+016
+247 402 2.10884e+016
+206 436 2.10771e+016
+162 277 2.10543e+016
+85 1 2.10295e+016
+273 181 2.10209e+016
+176 260 2.10199e+016
+448 166 2.09708e+016
+329 10 2.09543e+016
+157 198 2.09353e+016
+479 15 2.09319e+016
+404 186 2.09179e+016
+217 147 2.08788e+016
+466 197 2.08769e+016
+140 182 2.0865e+016
+270 291 2.08503e+016
+208 15 2.08433e+016
+83 136 2.08346e+016
+215 280 2.08121e+016
+168 196 2.08042e+016
+166 98 2.07818e+016
+345 264 2.07342e+016
+121 52 2.07054e+016
+156 75 2.06529e+016
+197 84 2.06407e+016
+412 45 2.06379e+016
+404 266 2.05976e+016
+217 280 2.05906e+016
+69 149 2.05741e+016
+332 296 2.05611e+016
+205 16 2.05298e+016
+54 222 2.04989e+016
+377 120 2.04919e+016
+205 19 2.04718e+016
+365 6 2.04505e+016
+220 148 2.04437e+016
+167 96 2.0412e+016
+330 141 2.03915e+016
+431 318 2.03836e+016
+63 60 2.0321e+016
+346 240 2.02645e+016
+561 225 2.01985e+016
+533 20 2.01194e+016
+557 463 2.00953e+016
+436 301 2.00951e+016
+280 365 2.00903e+016
+60 134 2.00737e+016
+426 376 2.00504e+016
+164 73 2.00364e+016
+525 424 2.00218e+016
+446 7 2.0015e+016
+508 6 2.00017e+016
+210 35 1.99768e+016
+355 254 1.99522e+016
+282 72 1.99478e+016
+425 4 1.99013e+016
+378 67 1.98432e+016
+110 135 1.98027e+016
+298 274 1.97979e+016
+301 179 1.97963e+016
+166 107 1.97074e+016
+134 130 1.97008e+016
+260 236 1.96882e+016
+27 30 1.96617e+016
+488 44 1.96409e+016
+79 40 1.96377e+016
+279 129 1.95775e+016
+508 4 1.95653e+016
+165 179 1.95276e+016
+527 424 1.95225e+016
+276 353 1.94523e+016
+102 164 1.9429e+016
+105 222 1.94136e+016
+165 182 1.94026e+016
+343 122 1.93986e+016
+100 5 1.93877e+016
+77 40 1.93642e+016
+48 155 1.93376e+016
+274 132 1.92764e+016
+121 49 1.92569e+016
+485 44 1.92541e+016
+455 58 1.9223e+016
+455 85 1.92031e+016
+354 269 1.91978e+016
+265 30 1.91888e+016
+65 60 1.91872e+016
+42 81 1.91343e+016
+481 84 1.91264e+016
+112 43 1.91097e+016
+444 118 1.90852e+016
+165 357 1.9078e+016
+329 90 1.90456e+016
+483 363 1.90434e+016
+283 198 1.90378e+016
+438 339 1.9012e+016
+432 276 1.89442e+016
+56 66 1.8937e+016
+377 354 1.8916e+016
+52 42 1.89119e+016
+512 219 1.89055e+016
+417 165 1.88779e+016
+288 165 1.88114e+016
+145 16 1.88004e+016
+385 244 1.87804e+016
+562 461 1.8746e+016
+357 166 1.86962e+016
+46 81 1.86938e+016
+575 178 1.86807e+016
+552 378 1.86479e+016
+548 164 1.86404e+016
+217 145 1.86289e+016
+334 90 1.85883e+016
+414 65 1.85872e+016
+530 144 1.85824e+016
+394 163 1.85693e+016
+324 145 1.8531e+016
+21 62 1.84711e+016
+191 215 1.84566e+016
+236 72 1.84437e+016
+325 426 1.84202e+016
+269 53 1.83866e+016
+193 218 1.83742e+016
+268 295 1.83653e+016
+190 360 1.83248e+016
+215 277 1.83023e+016
+134 127 1.82999e+016
+260 238 1.82887e+016
+176 165 1.828e+016
+300 264 1.82069e+016
+189 216 1.81983e+016
+91 254 1.81795e+016
+45 218 1.81596e+016
+340 163 1.81169e+016
+418 82 1.80527e+016
+175 20 1.80502e+016
+164 313 1.80441e+016
+222 112 1.80104e+016
+346 179 1.79974e+016
+429 44 1.79745e+016
+85 73 1.79721e+016
+359 166 1.79711e+016
+168 181 1.7917e+016
+539 457 1.79121e+016
+256 147 1.79051e+016
+392 48 1.78906e+016
+223 218 1.78899e+016
+193 215 1.78667e+016
+434 89 1.78546e+016
+248 316 1.78498e+016
+544 7 1.78338e+016
+516 17 1.78332e+016
+498 80 1.78193e+016
+525 426 1.78105e+016
+88 368 1.78092e+016
+296 332 1.77847e+016
+561 475 1.77761e+016
+283 395 1.77257e+016
+46 355 1.77091e+016
+331 131 1.77063e+016
+569 161 1.76901e+016
+57 365 1.76875e+016
+111 110 1.76873e+016
+493 81 1.76737e+016
+204 310 1.76517e+016
+50 288 1.76515e+016
+467 140 1.76111e+016
+437 319 1.76061e+016
+271 167 1.75869e+016
+347 181 1.75678e+016
+329 13 1.755e+016
+273 316 1.75306e+016
+110 94 1.75228e+016
+171 311 1.74951e+016
+274 130 1.74438e+016
+283 51 1.74207e+016
+173 239 1.74139e+016
+264 32 1.74114e+016
+138 178 1.74085e+016
+292 88 1.74043e+016
+482 367 1.74021e+016
+126 95 1.7385e+016
+482 174 1.73806e+016
+324 294 1.73289e+016
+31 235 1.73257e+016
+44 98 1.72257e+016
+174 95 1.72214e+016
+279 51 1.72146e+016
+322 427 1.7206e+016
+343 124 1.71832e+016
+501 361 1.71597e+016
+298 179 1.71565e+016
+66 26 1.71261e+016
+110 179 1.7109e+016
+176 95 1.71024e+016
+379 337 1.70979e+016
+273 220 1.70834e+016
+54 65 1.70802e+016
+539 98 1.70758e+016
+232 199 1.70405e+016
+575 13 1.70277e+016
+421 165 1.70138e+016
+304 190 1.7005e+016
+247 219 1.6952e+016
+511 174 1.69498e+016
+541 128 1.69357e+016
+379 123 1.69126e+016
+375 5 1.68637e+016
+442 239 1.68589e+016
+162 169 1.68414e+016
+227 186 1.68394e+016
+142 393 1.68305e+016
+132 71 1.68286e+016
+174 93 1.68071e+016
+281 49 1.67956e+016
+578 43 1.67912e+016
+486 139 1.67757e+016
+179 165 1.6756e+016
+58 75 1.67392e+016
+538 405 1.6699e+016
+37 169 1.66832e+016
+487 263 1.66694e+016
+562 464 1.66398e+016
+162 96 1.66379e+016
+335 437 1.6625e+016
+489 264 1.66192e+016
+55 42 1.66066e+016
+237 417 1.66031e+016
+145 161 1.65982e+016
+445 123 1.65916e+016
+528 222 1.65913e+016
+281 221 1.65908e+016
+276 331 1.65812e+016
+124 271 1.657e+016
+297 69 1.65615e+016
+381 123 1.65563e+016
+88 365 1.65423e+016
+218 98 1.65398e+016
+448 218 1.65375e+016
+430 85 1.65375e+016
+196 190 1.65284e+016
+412 298 1.65283e+016
+509 174 1.65224e+016
+541 209 1.65214e+016
+220 290 1.65028e+016
+403 277 1.64936e+016
+241 420 1.64657e+016
+521 264 1.6461e+016
+109 98 1.64549e+016
+190 350 1.64482e+016
+543 209 1.64357e+016
+87 197 1.64074e+016
+283 391 1.63337e+016
+270 293 1.62627e+016
+278 143 1.62476e+016
+118 115 1.62196e+016
+276 179 1.62139e+016
+378 107 1.62103e+016
+346 297 1.62041e+016
+392 160 1.6202e+016
+373 83 1.61985e+016
+508 2 1.61906e+016
+46 133 1.61905e+016
+86 61 1.61751e+016
+407 45 1.6162e+016
+541 133 1.60945e+016
+117 426 1.60651e+016
+276 328 1.60425e+016
+523 346 1.6024e+016
+111 167 1.60043e+016
+433 87 1.59955e+016
+87 144 1.59936e+016
+469 121 1.59926e+016
+221 151 1.5989e+016
+234 199 1.59742e+016
+175 239 1.59735e+016
+448 444 1.59656e+016
+339 166 1.59619e+016
+541 59 1.59518e+016
+53 63 1.59481e+016
+250 34 1.59415e+016
+42 10 1.59387e+016
+346 276 1.59331e+016
+394 161 1.59192e+016
+523 122 1.59157e+016
+250 220 1.58922e+016
+171 95 1.58893e+016
+170 240 1.58661e+016
+35 30 1.58405e+016
+452 62 1.583e+016
+433 158 1.58225e+016
+167 313 1.58194e+016
+463 27 1.58018e+016
+157 91 1.57998e+016
+457 83 1.57981e+016
+313 77 1.57587e+016
+380 107 1.56979e+016
+159 182 1.56871e+016
+44 134 1.56796e+016
+273 295 1.56429e+016
+91 290 1.56116e+016
+61 370 1.55923e+016
+503 164 1.55324e+016
+451 438 1.55213e+016
+449 118 1.55148e+016
+373 392 1.55002e+016
+385 324 1.54962e+016
+158 96 1.54837e+016
+229 288 1.54794e+016
+389 326 1.54772e+016
+83 476 1.54637e+016
+524 344 1.54409e+016
+437 89 1.53822e+016
+543 164 1.53779e+016
+363 180 1.53654e+016
+386 326 1.53491e+016
+295 421 1.53433e+016
+107 429 1.53162e+016
+49 62 1.53159e+016
+237 130 1.53125e+016
+153 112 1.53019e+016
+528 362 1.52948e+016
+173 237 1.5291e+016
+38 82 1.52784e+016
+276 198 1.523e+016
+405 376 1.52214e+016
+514 203 1.52146e+016
+156 95 1.51959e+016
+514 119 1.51797e+016
+401 275 1.51724e+016
+340 122 1.51324e+016
+181 20 1.50587e+016
+186 20 1.50584e+016
+139 99 1.50444e+016
+510 82 1.50365e+016
+313 79 1.503e+016
+196 132 1.50283e+016
+416 298 1.50268e+016
+436 379 1.50123e+016
+328 64 1.50075e+016
+360 164 1.50051e+016
+190 206 1.50019e+016
+531 362 1.49389e+016
+409 45 1.49298e+016
+537 394 1.49274e+016
+501 143 1.48941e+016
+258 161 1.48791e+016
+287 396 1.48752e+016
+373 86 1.487e+016
+244 293 1.48695e+016
+192 145 1.48667e+016
+254 9 1.48667e+016
+137 99 1.48576e+016
+376 118 1.4857e+016
+164 115 1.48566e+016
+261 234 1.48435e+016
+484 142 1.48362e+016
+189 144 1.48339e+016
+345 391 1.48272e+016
+114 1 1.48211e+016
+357 66 1.48066e+016
+474 247 1.47973e+016
+88 207 1.47863e+016
+527 347 1.47809e+016
+30 218 1.47804e+016
+387 124 1.47787e+016
+547 218 1.47618e+016
+357 11 1.47501e+016
+432 45 1.47266e+016
+192 143 1.4723e+016
+192 312 1.47081e+016
+158 112 1.47026e+016
+164 209 1.46854e+016
+386 127 1.4681e+016
+110 2 1.46723e+016
+357 63 1.46625e+016
+405 82 1.46438e+016
+302 176 1.46276e+016
+238 420 1.46269e+016
+424 398 1.46201e+016
+450 87 1.46048e+016
+215 124 1.45955e+016
+120 128 1.45901e+016
+485 84 1.45866e+016
+513 298 1.45853e+016
+179 168 1.45842e+016
+483 81 1.45719e+016
+387 5 1.45603e+016
+396 317 1.45409e+016
+40 10 1.45048e+016
+150 112 1.44992e+016
+359 9 1.44848e+016
+246 293 1.4476e+016
+248 293 1.44688e+016
+574 421 1.44261e+016
+118 76 1.44226e+016
+575 459 1.44067e+016
+443 354 1.44006e+016
+102 236 1.43757e+016
+186 289 1.43678e+016
+164 206 1.43111e+016
+33 219 1.43086e+016
+502 22 1.4293e+016
+242 192 1.42795e+016
+168 115 1.42644e+016
+280 198 1.42568e+016
+155 56 1.42468e+016
+541 130 1.42458e+016
+218 110 1.42422e+016
+445 354 1.42246e+016
+242 195 1.42244e+016
+473 203 1.41971e+016
+518 263 1.41727e+016
+204 160 1.41706e+016
+281 438 1.41559e+016
+418 284 1.4141e+016
+72 165 1.41274e+016
+190 312 1.41155e+016
+340 391 1.41139e+016
+131 168 1.40835e+016
+162 115 1.40769e+016
+384 124 1.40742e+016
+543 217 1.40638e+016
+41 355 1.40431e+016
+538 101 1.40391e+016
+547 139 1.40389e+016
+218 35 1.40153e+016
+175 237 1.39969e+016
+307 367 1.39709e+016
+102 28 1.39659e+016
+272 170 1.39615e+016
+192 16 1.39587e+016
+94 257 1.39308e+016
+131 147 1.39014e+016
+264 16 1.38929e+016
+259 34 1.38924e+016
+119 447 1.38655e+016
+354 265 1.38441e+016
+53 150 1.38329e+016
+540 101 1.38208e+016
+197 194 1.38165e+016
+124 2 1.37914e+016
+264 389 1.37788e+016
+376 82 1.37624e+016
+498 459 1.37571e+016
+272 285 1.37302e+016
+79 474 1.37221e+016
+128 127 1.37214e+016
+457 3 1.37177e+016
+562 146 1.37049e+016
+280 390 1.37047e+016
+437 240 1.36858e+016
+59 254 1.36856e+016
+175 168 1.36611e+016
+67 254 1.36566e+016
+471 200 1.36495e+016
+191 329 1.36377e+016
+34 235 1.36365e+016
+388 96 1.3625e+016
+94 22 1.36089e+016
+550 58 1.35976e+016
+527 195 1.35835e+016
+489 341 1.35673e+016
+333 105 1.35615e+016
+125 127 1.35546e+016
+478 403 1.35529e+016
+499 22 1.35515e+016
+114 95 1.35449e+016
+402 44 1.35429e+016
+529 400 1.35195e+016
+191 210 1.35137e+016
+155 316 1.3509e+016
+278 390 1.34954e+016
+96 22 1.34848e+016
+22 65 1.34765e+016
+145 20 1.34764e+016
+478 243 1.34733e+016
+487 2 1.34672e+016
+485 81 1.34456e+016
+306 364 1.34369e+016
+514 259 1.3389e+016
+433 225 1.33795e+016
+279 136 1.33709e+016
+433 280 1.33637e+016
+227 123 1.3361e+016
+527 344 1.33595e+016
+437 280 1.33379e+016
+182 343 1.33338e+016
+351 146 1.3333e+016
+330 66 1.33309e+016
+333 66 1.3316e+016
+363 369 1.33099e+016
+357 282 1.33036e+016
+185 132 1.33025e+016
+58 204 1.33e+016
+390 242 1.3298e+016
+238 75 1.32883e+016
+446 24 1.32883e+016
+57 70 1.32821e+016
+351 144 1.32762e+016
+269 186 1.32739e+016
+188 289 1.32633e+016
+335 218 1.32608e+016
+178 273 1.32488e+016
+330 213 1.32076e+016
+317 335 1.31948e+016
+342 260 1.31791e+016
+349 144 1.3176e+016
+86 311 1.3161e+016
+275 52 1.31607e+016
+178 20 1.3155e+016
+168 179 1.31449e+016
+471 212 1.31381e+016
+313 8 1.3138e+016
+174 291 1.31082e+016
+55 145 1.30908e+016
+288 51 1.30409e+016
+305 194 1.30327e+016
+155 114 1.30295e+016
+295 269 1.30295e+016
+279 132 1.30074e+016
+569 382 1.29942e+016
+328 181 1.29918e+016
+112 177 1.29834e+016
+52 358 1.29574e+016
+563 323 1.295e+016
+577 39 1.29483e+016
+476 341 1.29206e+016
+26 131 1.29186e+016
+456 61 1.29162e+016
+70 96 1.29155e+016
+101 234 1.29121e+016
+431 81 1.29042e+016
+570 451 1.28999e+016
+290 139 1.28876e+016
+443 451 1.28848e+016
+123 127 1.28801e+016
+454 102 1.28687e+016
+291 264 1.28611e+016
+392 21 1.28509e+016
+77 269 1.28001e+016
+86 63 1.27835e+016
+405 41 1.27589e+016
+11 78 1.27504e+016
+542 139 1.27475e+016
+68 46 1.27463e+016
+68 419 1.27148e+016
+572 405 1.27024e+016
+190 278 1.26977e+016
+276 320 1.26765e+016
+346 47 1.26723e+016
+413 246 1.26719e+016
+355 24 1.265e+016
+333 202 1.26449e+016
+325 15 1.26296e+016
+190 109 1.26256e+016
+50 254 1.26062e+016
+421 298 1.258e+016
+335 390 1.25747e+016
+132 237 1.25595e+016
+332 413 1.25362e+016
+337 390 1.25114e+016
+383 162 1.25113e+016
+430 224 1.24983e+016
+440 379 1.24966e+016
+333 334 1.24964e+016
+186 96 1.24827e+016
+497 66 1.24756e+016
+33 110 1.24727e+016
+365 336 1.24701e+016
+187 108 1.24625e+016
+181 131 1.24511e+016
+450 140 1.24319e+016
+188 278 1.24248e+016
+259 391 1.24221e+016
+331 105 1.2416e+016
+210 32 1.24105e+016
+494 60 1.24104e+016
+292 50 1.24095e+016
+412 470 1.24035e+016
+480 440 1.2394e+016
+572 161 1.23928e+016
+466 25 1.23834e+016
+487 81 1.23814e+016
+571 40 1.23801e+016
+207 160 1.23504e+016
+468 203 1.23422e+016
+78 199 1.23329e+016
+276 360 1.2315e+016
+506 361 1.23147e+016
+379 181 1.2314e+016
+452 45 1.22952e+016
+281 204 1.22908e+016
+261 141 1.22903e+016
+561 228 1.2286e+016
+262 392 1.22829e+016
+325 258 1.22507e+016
+430 222 1.22272e+016
+84 215 1.22153e+016
+91 60 1.22134e+016
+529 35 1.21983e+016
+46 221 1.21901e+016
+503 262 1.21794e+016
+377 182 1.21631e+016
+185 135 1.21518e+016
+421 141 1.21462e+016
+516 42 1.2137e+016
+91 376 1.21272e+016
+256 200 1.21256e+016
+481 451 1.21088e+016
+425 201 1.21061e+016
+385 260 1.2106e+016
+345 273 1.20745e+016
+407 82 1.20657e+016
+162 127 1.20603e+016
+371 89 1.20483e+016
+353 294 1.2047e+016
+394 215 1.2046e+016
+298 421 1.20381e+016
+543 440 1.2024e+016
+434 161 1.20052e+016
+335 107 1.19895e+016
+418 87 1.1989e+016
+437 391 1.19871e+016
+248 194 1.19848e+016
+537 93 1.19818e+016
+250 194 1.19368e+016
+191 291 1.19281e+016
+529 397 1.19259e+016
+48 221 1.19226e+016
+91 276 1.19086e+016
+174 187 1.18974e+016
+183 381 1.1881e+016
+472 63 1.18468e+016
+501 263 1.18411e+016
+502 19 1.184e+016
+524 399 1.18385e+016
+508 202 1.18071e+016
+572 446 1.18016e+016
+204 163 1.17941e+016
+123 263 1.17847e+016
+525 173 1.17616e+016
+291 262 1.17615e+016
+11 81 1.17568e+016
+278 204 1.17518e+016
+91 22 1.175e+016
+189 324 1.17169e+016
+70 130 1.17105e+016
+448 123 1.17082e+016
+371 105 1.17075e+016
+583 38 1.17062e+016
+432 381 1.16885e+016
+111 262 1.16858e+016
+363 357 1.16741e+016
+122 273 1.16656e+016
+104 306 1.16555e+016
+391 53 1.16511e+016
+18 343 1.16253e+016
+19 65 1.15973e+016
+578 81 1.1589e+016
+445 204 1.15612e+016
+382 26 1.15523e+016
+319 165 1.15096e+016
+337 367 1.15067e+016
+161 61 1.15029e+016
+513 380 1.15e+016
+58 372 1.14997e+016
+342 47 1.1477e+016
+486 375 1.14765e+016
+349 88 1.14708e+016
+98 257 1.1451e+016
+277 201 1.14359e+016
+501 459 1.14276e+016
+222 116 1.13829e+016
+484 375 1.13748e+016
+85 38 1.13744e+016
+339 473 1.13742e+016
+574 140 1.13733e+016
+540 41 1.13713e+016
+542 141 1.13681e+016
+216 175 1.13629e+016
+464 101 1.13447e+016
+67 251 1.13273e+016
+466 124 1.13245e+016
+61 253 1.13135e+016
+186 100 1.12991e+016
+118 2 1.12855e+016
+529 160 1.12812e+016
+75 474 1.12735e+016
+163 131 1.12472e+016
+100 257 1.12469e+016
+438 162 1.12469e+016
+136 136 1.12386e+016
+580 345 1.12374e+016
+258 250 1.12316e+016
+454 117 1.12264e+016
+199 111 1.12142e+016
+48 162 1.11961e+016
+578 52 1.11942e+016
+110 58 1.11929e+016
+493 58 1.11704e+016
+222 87 1.11551e+016
+138 58 1.11157e+016
+106 182 1.11041e+016
+55 170 1.10797e+016
+298 398 1.10725e+016
+88 372 1.10655e+016
+232 263 1.10544e+016
+258 107 1.1047e+016
+438 468 1.10372e+016
+160 21 1.10334e+016
+591 18 1.10295e+016
+340 446 1.10137e+016
+432 379 1.10052e+016
+147 449 1.10038e+016
+182 95 1.09946e+016
+536 17 1.09909e+016
+369 86 1.09904e+016
+574 330 1.09826e+016
+48 234 1.0958e+016
+77 234 1.09545e+016
+214 94 1.0946e+016
+37 200 1.09404e+016
+359 53 1.09376e+016
+358 241 1.09278e+016
+280 124 1.09245e+016
+97 28 1.09144e+016
+524 190 1.0898e+016
+569 422 1.08933e+016
+577 245 1.08792e+016
+400 168 1.08602e+016
+299 296 1.08584e+016
+256 107 1.08492e+016
+190 357 1.08443e+016
+534 79 1.08413e+016
+36 237 1.08363e+016
+114 167 1.08328e+016
+118 4 1.08179e+016
+130 306 1.08078e+016
+328 105 1.08064e+016
+449 24 1.07935e+016
+161 131 1.07924e+016
+149 40 1.07893e+016
+38 238 1.07757e+016
+258 368 1.07563e+016
+256 250 1.07502e+016
+337 264 1.0745e+016
+209 419 1.07395e+016
+548 182 1.07222e+016
+473 42 1.07209e+016
+183 137 1.07132e+016
+264 310 1.07124e+016
+446 351 1.07074e+016
+215 128 1.07027e+016
+468 208 1.06964e+016
+506 61 1.06911e+016
+416 245 1.06875e+016
+175 272 1.06832e+016
+105 165 1.06778e+016
+319 187 1.06633e+016
+110 326 1.06579e+016
+306 449 1.06524e+016
+419 258 1.0637e+016
+293 31 1.06357e+016
+121 6 1.06268e+016
+253 74 1.06212e+016
+424 63 1.06075e+016
+455 162 1.05992e+016
+186 142 1.05942e+016
+104 304 1.05909e+016
+289 348 1.05831e+016
+562 149 1.05815e+016
+20 286 1.05772e+016
+354 11 1.05603e+016
+379 127 1.0552e+016
+189 307 1.05418e+016
+292 335 1.0533e+016
+310 446 1.05329e+016
+128 307 1.05142e+016
+289 262 1.05057e+016
+434 382 1.05001e+016
+332 410 1.04972e+016
+236 134 1.04947e+016
+380 319 1.04915e+016
+579 245 1.04878e+016
+28 133 1.04862e+016
+566 180 1.04721e+016
+214 174 1.04718e+016
+159 239 1.04625e+016
+163 252 1.04616e+016
+124 218 1.04595e+016
+353 338 1.0449e+016
+120 218 1.04404e+016
+160 57 1.04347e+016
+65 251 1.04341e+016
+130 428 1.04274e+016
+345 342 1.04236e+016
+282 419 1.04149e+016
+493 340 1.04127e+016
+362 65 1.04098e+016
+533 342 1.04063e+016
+195 255 1.03992e+016
+581 81 1.03981e+016
+220 212 1.03891e+016
+527 197 1.03879e+016
+38 287 1.03802e+016
+130 478 1.03737e+016
+266 20 1.03667e+016
+335 415 1.03569e+016
+212 150 1.03529e+016
+538 186 1.03413e+016
+178 330 1.03317e+016
+419 66 1.03166e+016
+434 241 1.03141e+016
+218 208 1.03103e+016
+546 181 1.02883e+016
+213 32 1.0285e+016
+538 138 1.02842e+016
+378 317 1.02797e+016
+17 434 1.02767e+016
+86 181 1.02732e+016
+255 36 1.02628e+016
+245 195 1.02533e+016
+22 48 1.02494e+016
+118 95 1.02443e+016
+260 368 1.02374e+016
+462 224 1.02372e+016
+484 5 1.02325e+016
+483 204 1.02302e+016
+372 117 1.02241e+016
+362 244 1.02206e+016
+9 233 1.02166e+016
+37 202 1.02087e+016
+20 317 1.02041e+016
+477 204 1.01891e+016
+275 204 1.0185e+016
+337 446 1.01734e+016
+459 304 1.01676e+016
+279 393 1.01465e+016
+261 249 1.01428e+016
+484 359 1.01396e+016
+114 216 1.01356e+016
+86 374 1.01326e+016
+253 76 1.01318e+016
+512 363 1.01201e+016
+385 321 1.00966e+016
+163 254 1.00964e+016
+28 66 1.00948e+016
+544 141 1.00939e+016
+7 15 1.0088e+016
+255 34 1.00836e+016
+479 204 1.00778e+016
+1 383 1.0074e+016
+378 319 1.00636e+016
+337 369 1.00596e+016
+385 166 1.00166e+016
+167 150 1.0008e+016
+353 297 9.99958e+015
+318 185 9.98984e+015
+83 171 9.98799e+015
+438 160 9.9865e+015
+376 316 9.97966e+015
+43 406 9.97672e+015
+362 63 9.97033e+015
+586 17 9.95991e+015
+149 303 9.95863e+015
+306 259 9.95204e+015
+91 79 9.93994e+015
+494 458 9.92528e+015
+150 398 9.92229e+015
+435 182 9.91894e+015
+217 425 9.89298e+015
+325 131 9.88565e+015
+333 62 9.88055e+015
+183 139 9.87307e+015
+532 61 9.86688e+015
+383 413 9.8607e+015
+280 419 9.84806e+015
+215 96 9.84589e+015
+386 92 9.83477e+015
+364 201 9.83388e+015
+218 423 9.82306e+015
+471 269 9.82222e+015
+383 411 9.80312e+015
+439 122 9.80215e+015
+402 143 9.79817e+015
+534 394 9.78956e+015
+207 163 9.76618e+015
+110 182 9.76313e+015
+565 323 9.76242e+015
+33 164 9.75871e+015
+432 270 9.74861e+015
+147 397 9.74846e+015
+161 152 9.74792e+015
+302 330 9.74539e+015
+186 202 9.7435e+015
+169 105 9.73832e+015
+77 236 9.73031e+015
+464 356 9.72644e+015
+445 243 9.72457e+015
+496 458 9.72433e+015
+103 257 9.71634e+015
+533 161 9.69325e+015
+201 88 9.68337e+015
+218 128 9.67362e+015
+380 162 9.67158e+015
+370 109 9.65451e+015
+329 216 9.64754e+015
+438 182 9.64732e+015
+117 306 9.63725e+015
+172 272 9.63147e+015
+184 142 9.62769e+015
+187 265 9.6132e+015
+220 315 9.61193e+015
+542 443 9.60911e+015
+480 165 9.60704e+015
+85 35 9.60213e+015
+9 32 9.59701e+015
+121 216 9.59299e+015
+321 121 9.59123e+015
+368 109 9.58601e+015
+405 10 9.58241e+015
+190 132 9.56313e+015
+242 281 9.55708e+015
+247 107 9.55463e+015
+563 61 9.549e+015
+498 61 9.54766e+015
+277 187 9.54437e+015
+371 338 9.53928e+015
+180 292 9.52544e+015
+343 463 9.52533e+015
+528 79 9.52483e+015
+487 377 9.51069e+015
+154 295 9.49742e+015
+25 221 9.48946e+015
+247 105 9.48201e+015
+407 14 9.4807e+015
+136 239 9.47882e+015
+72 408 9.47775e+015
+340 443 9.46776e+015
+536 265 9.46159e+015
+454 5 9.45559e+015
+109 146 9.44403e+015
+276 214 9.43642e+015
+478 11 9.42407e+015
+228 264 9.40916e+015
+219 115 9.39674e+015
+343 200 9.3955e+015
+38 270 9.38897e+015
+10 76 9.3874e+015
+523 78 9.37541e+015
+450 177 9.37236e+015
+189 18 9.36784e+015
+527 429 9.36777e+015
+74 477 9.36255e+015
+373 241 9.35479e+015
+261 71 9.32272e+015
+77 165 9.32182e+015
+374 105 9.31723e+015
+314 446 9.30625e+015
+268 242 9.30336e+015
+438 45 9.29372e+015
+53 360 9.28822e+015
+488 84 9.28557e+015
+479 286 9.2819e+015
+394 107 9.27468e+015
+533 397 9.27092e+015
+503 61 9.24422e+015
+163 118 9.23354e+015
+396 104 9.23065e+015
+561 142 9.22566e+015
+12 204 9.22523e+015
+289 32 9.22345e+015
+447 339 9.2233e+015
+421 291 9.21042e+015
+494 456 9.19596e+015
+509 61 9.19335e+015
+235 220 9.18694e+015
+499 463 9.17354e+015
+89 181 9.17205e+015
+115 359 9.17031e+015
+277 190 9.1702e+015
+447 376 9.16225e+015
+96 93 9.16066e+015
+28 136 9.15711e+015
+55 172 9.15286e+015
+181 155 9.14541e+015
+329 25 9.14522e+015
+471 84 9.13127e+015
+534 97 9.12946e+015
+269 89 9.11953e+015
+112 216 9.11327e+015
+461 162 9.11099e+015
+272 90 9.11071e+015
+178 57 9.10686e+015
+55 360 9.104e+015
+484 377 9.10193e+015
+309 32 9.09837e+015
+361 139 9.08799e+015
+64 11 9.06259e+015
+345 166 9.04819e+015
+329 354 9.04305e+015
+463 219 9.0348e+015
+94 93 9.02993e+015
+298 88 9.02812e+015
+336 443 9.0277e+015
+542 262 9.02566e+015
+272 145 9.0242e+015
+375 463 9.02056e+015
+42 122 9.01542e+015
+262 284 9.0154e+015
+182 291 9.00991e+015
+402 7 9.00575e+015
+270 91 8.99795e+015
+294 141 8.99765e+015
+298 419 8.99588e+015
+400 144 8.98635e+015
+417 66 8.9823e+015
+534 121 8.98054e+015
+187 313 8.97814e+015
+242 58 8.97512e+015
+573 327 8.9686e+015
+509 58 8.96578e+015
+535 460 8.96452e+015
+526 79 8.95903e+015
+336 62 8.95726e+015
+52 39 8.95338e+015
+396 106 8.95323e+015
+455 48 8.9521e+015
+166 379 8.93831e+015
+309 54 8.93031e+015
+116 169 8.91012e+015
+270 108 8.90916e+015
+306 359 8.90687e+015
+258 133 8.90565e+015
+45 408 8.90045e+015
+382 102 8.89639e+015
+154 447 8.89588e+015
+511 348 8.87586e+015
+481 373 8.86409e+015
+481 375 8.85191e+015
+34 114 8.84994e+015
+388 2 8.84215e+015
+304 332 8.82499e+015
+558 80 8.81929e+015
+552 78 8.79271e+015
+209 161 8.78675e+015
+445 377 8.78531e+015
+142 449 8.7807e+015
+204 294 8.77985e+015
+484 163 8.77505e+015
+321 11 8.77425e+015
+407 430 8.77181e+015
+502 156 8.76968e+015
+45 406 8.76332e+015
+549 223 8.75715e+015
+450 198 8.75281e+015
+455 141 8.7496e+015
+42 119 8.74549e+015
+226 112 8.74476e+015
+542 253 8.74436e+015
+196 147 8.73757e+015
+94 19 8.73348e+015
+119 161 8.73111e+015
+147 78 8.71789e+015
+51 453 8.71461e+015
+97 39 8.71109e+015
+408 140 8.704e+015
+262 397 8.70005e+015
+243 33 8.69318e+015
+158 310 8.69294e+015
+504 459 8.69231e+015
+495 474 8.692e+015
+562 18 8.69134e+015
+498 474 8.68856e+015
+394 104 8.68771e+015
+566 144 8.68755e+015
+74 131 8.67546e+015
+401 164 8.66846e+015
+118 221 8.65786e+015
+458 115 8.64688e+015
+66 306 8.64616e+015
+506 380 8.64613e+015
+245 190 8.63746e+015
+264 141 8.63467e+015
+291 311 8.62874e+015
+338 427 8.61482e+015
+214 439 8.59635e+015
+338 425 8.58886e+015
+111 338 8.58692e+015
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_7_3.txt b/test_data/harriscorners/hc_msc_0.00_0.04_7_3.txt
new file mode 100644
index 0000000..6e4bb89
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_7_3.txt
@@ -0,0 +1,1497 @@
+1496
+245 94 1.94856e+020
+499 1 1.81721e+020
+273 366 1.51415e+020
+363 401 1.3623e+020
+282 115 1.03145e+020
+240 90 1.01341e+020
+251 13 9.90773e+019
+423 179 9.71754e+019
+242 94 9.69466e+019
+65 343 9.09641e+019
+543 364 8.86213e+019
+449 298 8.73777e+019
+237 19 8.63556e+019
+507 122 8.40362e+019
+131 36 8.35743e+019
+122 44 8.19365e+019
+553 41 7.95278e+019
+426 320 7.85005e+019
+420 178 7.78361e+019
+421 182 7.7811e+019
+261 297 7.71658e+019
+520 61 7.62246e+019
+28 8 7.58288e+019
+196 57 7.50088e+019
+320 224 7.26692e+019
+465 394 7.24963e+019
+446 396 7.15217e+019
+37 61 7.10939e+019
+448 263 7.10212e+019
+200 17 7.06644e+019
+456 281 6.94799e+019
+82 27 6.91503e+019
+388 178 6.78018e+019
+233 15 6.74224e+019
+387 10 6.72745e+019
+344 10 6.69744e+019
+130 2 6.68939e+019
+223 38 6.47611e+019
+480 298 6.45288e+019
+2 47 6.38296e+019
+45 27 6.35654e+019
+34 138 6.3416e+019
+77 256 6.30893e+019
+418 440 6.29304e+019
+321 313 6.26197e+019
+526 60 6.201e+019
+183 401 6.15912e+019
+221 16 6.13466e+019
+59 219 6.12306e+019
+213 72 6.09042e+019
+72 24 6.07674e+019
+435 68 6.06794e+019
+299 52 6.02479e+019
+102 59 5.97668e+019
+483 24 5.92922e+019
+256 386 5.91818e+019
+390 58 5.89087e+019
+110 238 5.832e+019
+124 199 5.71215e+019
+264 440 5.64331e+019
+116 43 5.60986e+019
+510 122 5.55331e+019
+281 112 5.55046e+019
+361 131 5.46241e+019
+303 183 5.41839e+019
+144 309 5.38532e+019
+271 166 5.32864e+019
+242 203 5.31421e+019
+135 215 5.30437e+019
+132 26 5.29583e+019
+348 179 5.23431e+019
+462 279 5.19375e+019
+79 2 5.19137e+019
+4 66 5.19039e+019
+474 262 5.13483e+019
+483 339 5.13205e+019
+128 164 5.1119e+019
+81 2 5.09552e+019
+92 198 5.09284e+019
+482 365 5.04977e+019
+479 19 5.032e+019
+412 256 5.00988e+019
+513 340 4.99645e+019
+412 162 4.96772e+019
+512 167 4.95884e+019
+359 260 4.95375e+019
+271 71 4.94348e+019
+425 376 4.90856e+019
+224 419 4.88734e+019
+340 9 4.86269e+019
+385 221 4.84534e+019
+355 220 4.84436e+019
+102 4 4.82063e+019
+33 98 4.81932e+019
+411 355 4.80242e+019
+359 294 4.76875e+019
+535 242 4.76597e+019
+439 339 4.75628e+019
+378 354 4.74598e+019
+562 478 4.70332e+019
+136 202 4.68335e+019
+430 1 4.6789e+019
+361 296 4.67078e+019
+360 336 4.65881e+019
+515 76 4.63677e+019
+545 168 4.6296e+019
+177 107 4.58436e+019
+228 292 4.57375e+019
+257 384 4.55259e+019
+426 119 4.55122e+019
+390 61 4.54055e+019
+167 287 4.52392e+019
+216 279 4.5157e+019
+524 20 4.51441e+019
+402 122 4.48561e+019
+127 76 4.45495e+019
+432 146 4.43269e+019
+140 203 4.42498e+019
+250 363 4.4197e+019
+471 240 4.40441e+019
+509 18 4.40344e+019
+243 72 4.39746e+019
+182 111 4.34892e+019
+421 334 4.34852e+019
+407 64 4.33433e+019
+510 173 4.32916e+019
+111 241 4.32334e+019
+310 371 4.30741e+019
+283 403 4.29906e+019
+214 56 4.24149e+019
+246 143 4.22138e+019
+340 12 4.19689e+019
+92 214 4.19097e+019
+210 445 4.18543e+019
+498 82 4.173e+019
+308 372 4.17129e+019
+58 183 4.1658e+019
+165 217 4.13433e+019
+392 144 4.13077e+019
+74 6 4.12429e+019
+184 35 4.12403e+019
+329 253 4.11889e+019
+35 146 4.11134e+019
+261 165 4.10435e+019
+432 112 4.10214e+019
+111 393 4.09173e+019
+151 307 4.08932e+019
+302 186 4.05197e+019
+264 298 4.03041e+019
+239 349 4.02648e+019
+41 297 3.95847e+019
+362 251 3.95439e+019
+100 221 3.95414e+019
+387 294 3.94515e+019
+556 40 3.94235e+019
+31 8 3.94142e+019
+101 78 3.93848e+019
+234 346 3.93784e+019
+225 221 3.92992e+019
+11 101 3.92351e+019
+293 15 3.91739e+019
+158 1 3.9056e+019
+138 111 3.90553e+019
+300 265 3.87624e+019
+456 283 3.86147e+019
+366 144 3.81587e+019
+304 216 3.81405e+019
+271 279 3.8071e+019
+125 255 3.80255e+019
+452 337 3.80105e+019
+567 161 3.7836e+019
+87 148 3.7831e+019
+212 183 3.77927e+019
+64 235 3.77708e+019
+377 7 3.76633e+019
+404 120 3.76388e+019
+453 340 3.76245e+019
+434 398 3.75503e+019
+283 71 3.75226e+019
+382 8 3.73602e+019
+125 364 3.73587e+019
+469 240 3.72907e+019
+566 43 3.72565e+019
+108 45 3.70119e+019
+65 214 3.67647e+019
+36 174 3.67405e+019
+510 455 3.67131e+019
+153 1 3.65993e+019
+528 98 3.63548e+019
+120 51 3.633e+019
+254 139 3.63272e+019
+327 341 3.63006e+019
+550 379 3.62741e+019
+527 24 3.61749e+019
+95 446 3.6086e+019
+542 18 3.60311e+019
+355 267 3.58569e+019
+452 376 3.58568e+019
+516 17 3.5847e+019
+346 392 3.58179e+019
+388 221 3.57933e+019
+410 65 3.57351e+019
+94 217 3.57042e+019
+343 337 3.56667e+019
+124 362 3.55694e+019
+312 149 3.54501e+019
+383 354 3.54127e+019
+158 143 3.53851e+019
+521 63 3.53347e+019
+562 147 3.51238e+019
+326 426 3.50744e+019
+372 163 3.49535e+019
+417 7 3.48222e+019
+291 16 3.45803e+019
+55 66 3.44946e+019
+179 113 3.44777e+019
+474 23 3.42676e+019
+302 206 3.41174e+019
+170 19 3.40191e+019
+492 140 3.39903e+019
+287 296 3.39593e+019
+141 324 3.39078e+019
+475 4 3.37393e+019
+209 223 3.36698e+019
+364 297 3.3592e+019
+328 127 3.3553e+019
+324 341 3.33836e+019
+422 44 3.32769e+019
+345 109 3.32229e+019
+208 451 3.31291e+019
+55 31 3.30921e+019
+250 33 3.30853e+019
+513 296 3.30266e+019
+153 222 3.29652e+019
+170 57 3.29221e+019
+176 39 3.28429e+019
+150 222 3.26641e+019
+533 184 3.26476e+019
+395 260 3.26243e+019
+508 16 3.25645e+019
+48 26 3.25347e+019
+37 138 3.25032e+019
+192 331 3.24127e+019
+348 241 3.22015e+019
+456 83 3.2199e+019
+357 335 3.21872e+019
+219 291 3.21634e+019
+546 41 3.19852e+019
+236 130 3.19408e+019
+355 320 3.19379e+019
+513 223 3.17903e+019
+463 393 3.17448e+019
+481 179 3.17394e+019
+465 197 3.16184e+019
+520 183 3.15075e+019
+485 179 3.14797e+019
+239 421 3.14357e+019
+64 60 3.14165e+019
+38 296 3.13585e+019
+166 96 3.1335e+019
+48 99 3.11993e+019
+338 164 3.11623e+019
+489 342 3.10851e+019
+127 252 3.10704e+019
+66 321 3.1061e+019
+478 263 3.10245e+019
+334 436 3.08483e+019
+242 97 3.08478e+019
+173 312 3.07952e+019
+109 27 3.07937e+019
+318 312 3.07597e+019
+524 23 3.07379e+019
+503 360 3.06181e+019
+211 57 3.03033e+019
+175 109 3.01264e+019
+452 205 3.01259e+019
+248 403 3.00755e+019
+203 310 3.00152e+019
+472 63 3.00053e+019
+139 173 2.99438e+019
+417 24 2.99407e+019
+379 66 2.99317e+019
+512 125 2.99237e+019
+128 95 2.98739e+019
+70 147 2.9873e+019
+169 55 2.98456e+019
+233 162 2.98399e+019
+57 364 2.97784e+019
+123 272 2.96202e+019
+530 21 2.94916e+019
+577 15 2.949e+019
+68 149 2.94595e+019
+329 66 2.94363e+019
+87 209 2.94337e+019
+449 219 2.93262e+019
+491 1 2.92892e+019
+482 327 2.92135e+019
+407 66 2.92109e+019
+230 36 2.92039e+019
+277 352 2.91873e+019
+327 142 2.91603e+019
+41 63 2.91497e+019
+56 5 2.91494e+019
+86 255 2.91236e+019
+162 214 2.91058e+019
+540 13 2.89598e+019
+53 43 2.89096e+019
+49 153 2.88444e+019
+256 149 2.87722e+019
+546 57 2.86797e+019
+522 122 2.86614e+019
+54 6 2.86002e+019
+529 23 2.85427e+019
+47 10 2.8492e+019
+105 62 2.84158e+019
+136 175 2.83473e+019
+54 289 2.82999e+019
+527 39 2.82739e+019
+153 225 2.82306e+019
+275 181 2.81526e+019
+219 35 2.81396e+019
+31 219 2.81289e+019
+406 375 2.80994e+019
+187 99 2.78989e+019
+147 21 2.78944e+019
+167 325 2.78555e+019
+345 241 2.77219e+019
+344 263 2.77161e+019
+273 130 2.77005e+019
+477 12 2.76961e+019
+542 210 2.76792e+019
+86 77 2.76759e+019
+511 128 2.76338e+019
+579 17 2.75854e+019
+252 140 2.74702e+019
+55 294 2.74568e+019
+97 447 2.74187e+019
+163 276 2.725e+019
+479 294 2.71805e+019
+22 61 2.71153e+019
+207 224 2.71054e+019
+306 439 2.71022e+019
+264 445 2.69666e+019
+169 198 2.68987e+019
+545 4 2.68813e+019
+41 61 2.68136e+019
+436 91 2.67232e+019
+174 238 2.67e+019
+387 243 2.66492e+019
+359 393 2.66404e+019
+480 261 2.65789e+019
+177 260 2.63712e+019
+64 371 2.629e+019
+508 7 2.62729e+019
+279 222 2.62591e+019
+91 292 2.62086e+019
+131 148 2.61995e+019
+294 25 2.61785e+019
+192 124 2.60632e+019
+46 147 2.60513e+019
+252 10 2.59939e+019
+358 10 2.58769e+019
+158 56 2.57538e+019
+210 437 2.57076e+019
+362 398 2.56527e+019
+582 17 2.56182e+019
+274 281 2.56028e+019
+527 422 2.55542e+019
+195 126 2.55416e+019
+403 188 2.54734e+019
+245 205 2.53495e+019
+338 391 2.53063e+019
+424 333 2.53019e+019
+64 218 2.52238e+019
+191 359 2.51581e+019
+528 361 2.51344e+019
+37 288 2.50941e+019
+38 172 2.50437e+019
+482 331 2.50436e+019
+276 221 2.50404e+019
+298 70 2.4992e+019
+331 295 2.49215e+019
+220 178 2.48895e+019
+192 219 2.48715e+019
+312 7 2.48706e+019
+50 12 2.48254e+019
+69 478 2.48119e+019
+107 40 2.48005e+019
+497 228 2.47954e+019
+72 97 2.47663e+019
+197 82 2.4758e+019
+236 92 2.47347e+019
+325 145 2.47025e+019
+108 183 2.46777e+019
+105 199 2.464e+019
+512 98 2.45975e+019
+68 337 2.4439e+019
+365 7 2.44304e+019
+44 81 2.44074e+019
+42 339 2.43885e+019
+114 345 2.43358e+019
+525 424 2.4322e+019
+286 209 2.43163e+019
+15 219 2.43011e+019
+510 165 2.42517e+019
+220 100 2.42503e+019
+141 22 2.42496e+019
+360 217 2.41891e+019
+470 418 2.41609e+019
+59 185 2.41544e+019
+376 119 2.40172e+019
+86 214 2.39753e+019
+259 201 2.39432e+019
+435 281 2.3935e+019
+164 242 2.39254e+019
+408 352 2.39172e+019
+342 107 2.39008e+019
+275 319 2.39004e+019
+36 269 2.37691e+019
+516 347 2.3719e+019
+314 82 2.36977e+019
+255 182 2.36956e+019
+356 128 2.36612e+019
+162 216 2.3647e+019
+35 10 2.36284e+019
+28 236 2.35583e+019
+443 23 2.35481e+019
+239 201 2.35428e+019
+158 138 2.35376e+019
+112 165 2.34711e+019
+228 289 2.34135e+019
+18 342 2.33975e+019
+246 294 2.33834e+019
+526 101 2.33724e+019
+301 166 2.3359e+019
+36 200 2.32994e+019
+351 320 2.32464e+019
+525 345 2.32328e+019
+162 168 2.32036e+019
+256 35 2.31871e+019
+280 128 2.30157e+019
+224 183 2.2965e+019
+181 398 2.2962e+019
+286 166 2.2952e+019
+244 164 2.29233e+019
+95 476 2.29222e+019
+140 184 2.2899e+019
+232 200 2.28944e+019
+114 392 2.28757e+019
+39 406 2.28748e+019
+513 261 2.28718e+019
+576 178 2.27851e+019
+510 343 2.27756e+019
+324 314 2.27666e+019
+7 11 2.27115e+019
+136 206 2.26752e+019
+259 221 2.26606e+019
+93 6 2.26516e+019
+345 351 2.26182e+019
+458 3 2.26119e+019
+263 202 2.25908e+019
+254 422 2.25486e+019
+301 215 2.25421e+019
+84 3 2.25239e+019
+488 263 2.25106e+019
+180 394 2.24831e+019
+541 99 2.24686e+019
+166 244 2.24562e+019
+78 196 2.24327e+019
+513 220 2.23768e+019
+537 186 2.23629e+019
+260 223 2.23464e+019
+103 359 2.23296e+019
+204 16 2.23021e+019
+448 168 2.22667e+019
+358 143 2.22217e+019
+234 72 2.22217e+019
+422 397 2.22128e+019
+457 375 2.22113e+019
+389 97 2.21958e+019
+40 217 2.21407e+019
+41 10 2.21367e+019
+90 255 2.21165e+019
+421 47 2.20435e+019
+444 452 2.20384e+019
+478 16 2.19921e+019
+278 145 2.19785e+019
+59 41 2.19572e+019
+367 247 2.18738e+019
+402 6 2.18221e+019
+486 182 2.18081e+019
+406 199 2.1804e+019
+223 15 2.17717e+019
+308 8 2.17564e+019
+290 264 2.17428e+019
+141 2 2.1739e+019
+495 141 2.16481e+019
+542 130 2.15406e+019
+530 183 2.1519e+019
+413 299 2.14876e+019
+526 223 2.14717e+019
+282 200 2.14365e+019
+221 182 2.14253e+019
+382 411 2.14248e+019
+351 323 2.13942e+019
+128 25 2.13902e+019
+317 148 2.13345e+019
+449 178 2.12753e+019
+84 476 2.12232e+019
+541 123 2.12197e+019
+558 40 2.12018e+019
+59 76 2.11898e+019
+390 296 2.11492e+019
+352 147 2.11396e+019
+296 420 2.10393e+019
+100 199 2.10357e+019
+283 207 2.10112e+019
+432 83 2.09874e+019
+178 164 2.09789e+019
+245 14 2.09522e+019
+113 213 2.09235e+019
+156 318 2.09144e+019
+157 73 2.08859e+019
+177 93 2.08395e+019
+57 290 2.08276e+019
+528 142 2.08147e+019
+281 51 2.08037e+019
+300 177 2.07855e+019
+392 295 2.07508e+019
+272 53 2.07025e+019
+270 367 2.06849e+019
+323 224 2.0649e+019
+528 188 2.06338e+019
+6 45 2.05752e+019
+129 168 2.05718e+019
+110 96 2.05597e+019
+285 212 2.05344e+019
+105 4 2.05318e+019
+346 297 2.0503e+019
+273 297 2.04768e+019
+101 163 2.04655e+019
+146 160 2.04533e+019
+45 97 2.04501e+019
+228 184 2.04076e+019
+365 105 2.0401e+019
+183 19 2.03968e+019
+163 358 2.03648e+019
+429 223 2.03223e+019
+55 28 2.0301e+019
+358 64 2.02666e+019
+289 137 2.01827e+019
+421 6 2.01463e+019
+538 95 2.01378e+019
+136 128 2.01376e+019
+392 66 2.01336e+019
+162 74 2.00755e+019
+422 323 2.00717e+019
+46 219 2.00576e+019
+16 215 2.00348e+019
+288 212 2.00305e+019
+236 163 2.00143e+019
+511 101 2.00129e+019
+379 69 2.0012e+019
+325 165 1.99911e+019
+137 208 1.9966e+019
+408 182 1.99654e+019
+399 261 1.99495e+019
+81 77 1.99359e+019
+181 380 1.99164e+019
+136 21 1.99086e+019
+173 40 1.98869e+019
+130 78 1.98758e+019
+544 171 1.9871e+019
+137 98 1.98352e+019
+513 122 1.9807e+019
+564 40 1.98035e+019
+114 428 1.97669e+019
+481 182 1.96915e+019
+141 394 1.96775e+019
+164 325 1.96486e+019
+230 266 1.96409e+019
+397 262 1.95778e+019
+307 448 1.95651e+019
+44 10 1.95216e+019
+484 59 1.95152e+019
+363 182 1.94975e+019
+82 136 1.94678e+019
+365 251 1.9445e+019
+507 165 1.94388e+019
+57 372 1.93897e+019
+257 250 1.93449e+019
+198 130 1.9344e+019
+529 102 1.92873e+019
+33 65 1.9285e+019
+528 104 1.92683e+019
+378 339 1.9256e+019
+44 337 1.92476e+019
+205 162 1.92014e+019
+402 184 1.9193e+019
+548 44 1.91409e+019
+371 393 1.91203e+019
+221 432 1.91012e+019
+209 54 1.90748e+019
+173 18 1.9072e+019
+267 30 1.90658e+019
+103 392 1.90461e+019
+384 6 1.89952e+019
+306 192 1.89845e+019
+393 217 1.89574e+019
+38 218 1.89572e+019
+331 131 1.8954e+019
+275 329 1.89447e+019
+520 263 1.89097e+019
+536 393 1.89076e+019
+389 140 1.89075e+019
+537 459 1.88861e+019
+187 263 1.88801e+019
+350 145 1.88773e+019
+219 108 1.88509e+019
+428 181 1.88325e+019
+325 295 1.878e+019
+416 44 1.87574e+019
+363 8 1.87545e+019
+507 455 1.87295e+019
+260 142 1.87226e+019
+297 410 1.871e+019
+339 473 1.86776e+019
+31 96 1.86174e+019
+191 56 1.86004e+019
+269 67 1.85849e+019
+216 54 1.85641e+019
+6 9 1.85053e+019
+429 88 1.84915e+019
+124 252 1.84854e+019
+259 71 1.84842e+019
+471 82 1.84435e+019
+530 143 1.84024e+019
+413 4 1.83948e+019
+363 143 1.83404e+019
+243 190 1.83398e+019
+362 370 1.8305e+019
+403 265 1.83027e+019
+187 34 1.82981e+019
+381 26 1.82792e+019
+267 296 1.82741e+019
+167 180 1.82606e+019
+361 222 1.82564e+019
+59 4 1.82481e+019
+584 38 1.8207e+019
+190 205 1.81692e+019
+149 39 1.81466e+019
+127 186 1.81457e+019
+303 103 1.81299e+019
+358 168 1.81266e+019
+290 49 1.81252e+019
+547 163 1.81172e+019
+116 184 1.81145e+019
+48 257 1.8095e+019
+58 74 1.80934e+019
+329 9 1.80918e+019
+163 328 1.80849e+019
+344 197 1.80778e+019
+480 403 1.80437e+019
+281 53 1.80432e+019
+571 448 1.80292e+019
+419 52 1.80241e+019
+268 69 1.80238e+019
+568 382 1.80132e+019
+4 63 1.79238e+019
+479 176 1.79028e+019
+277 370 1.78965e+019
+82 74 1.78898e+019
+80 38 1.78784e+019
+324 260 1.78652e+019
+351 271 1.78496e+019
+42 24 1.78493e+019
+175 311 1.78288e+019
+328 289 1.78269e+019
+163 207 1.77986e+019
+93 254 1.77939e+019
+306 362 1.77688e+019
+33 268 1.77604e+019
+212 33 1.77529e+019
+248 205 1.77519e+019
+358 282 1.77516e+019
+109 136 1.77504e+019
+190 322 1.76647e+019
+50 97 1.76568e+019
+131 476 1.7656e+019
+362 360 1.76275e+019
+357 126 1.75456e+019
+336 391 1.75172e+019
+180 18 1.7479e+019
+97 79 1.74789e+019
+418 68 1.74706e+019
+195 16 1.74668e+019
+342 123 1.74411e+019
+180 292 1.74382e+019
+39 83 1.74001e+019
+333 89 1.7373e+019
+117 76 1.73663e+019
+169 183 1.7364e+019
+117 96 1.73331e+019
+597 272 1.73316e+019
+112 4 1.73061e+019
+565 463 1.72969e+019
+245 402 1.72881e+019
+62 204 1.72512e+019
+506 203 1.71985e+019
+406 122 1.71561e+019
+472 42 1.70951e+019
+514 382 1.70875e+019
+76 259 1.70849e+019
+187 291 1.70767e+019
+341 88 1.70754e+019
+561 320 1.70338e+019
+402 261 1.70209e+019
+369 162 1.69994e+019
+332 9 1.69776e+019
+281 132 1.69533e+019
+252 424 1.69525e+019
+336 8 1.69471e+019
+571 161 1.69162e+019
+432 268 1.69131e+019
+88 256 1.6896e+019
+476 260 1.68911e+019
+482 300 1.68554e+019
+81 79 1.68518e+019
+371 89 1.68395e+019
+262 443 1.67632e+019
+122 185 1.67004e+019
+436 390 1.66537e+019
+472 211 1.66327e+019
+475 342 1.66318e+019
+191 216 1.66115e+019
+187 288 1.65951e+019
+75 236 1.6553e+019
+110 264 1.65277e+019
+78 79 1.65272e+019
+553 378 1.64862e+019
+502 143 1.64805e+019
+343 392 1.64759e+019
+391 448 1.64686e+019
+332 255 1.64685e+019
+282 135 1.6466e+019
+408 45 1.64658e+019
+153 233 1.64612e+019
+155 196 1.64562e+019
+524 185 1.64432e+019
+366 2 1.64322e+019
+398 169 1.64183e+019
+498 158 1.63803e+019
+438 303 1.63614e+019
+120 239 1.63364e+019
+560 81 1.63211e+019
+126 3 1.63035e+019
+526 104 1.63033e+019
+124 190 1.62594e+019
+186 401 1.6251e+019
+28 12 1.62486e+019
+488 4 1.61969e+019
+500 224 1.61916e+019
+246 88 1.61895e+019
+245 400 1.6175e+019
+45 407 1.61704e+019
+391 324 1.61583e+019
+390 19 1.61372e+019
+393 46 1.61363e+019
+420 81 1.61331e+019
+154 114 1.61078e+019
+349 299 1.60906e+019
+374 241 1.60894e+019
+132 130 1.60836e+019
+41 136 1.60836e+019
+374 394 1.60814e+019
+62 133 1.60764e+019
+260 301 1.6069e+019
+384 259 1.60656e+019
+51 61 1.6055e+019
+63 202 1.60343e+019
+163 315 1.60167e+019
+289 167 1.60109e+019
+120 4 1.59884e+019
+85 59 1.59864e+019
+292 311 1.59834e+019
+271 184 1.59796e+019
+471 213 1.59713e+019
+483 177 1.59597e+019
+483 83 1.5959e+019
+144 187 1.59407e+019
+28 28 1.59312e+019
+314 85 1.59285e+019
+363 129 1.59102e+019
+183 133 1.59056e+019
+573 423 1.58994e+019
+492 181 1.58969e+019
+279 362 1.58856e+019
+268 288 1.58586e+019
+33 172 1.58388e+019
+538 121 1.58377e+019
+529 145 1.5831e+019
+461 221 1.5816e+019
+263 311 1.58151e+019
+427 1 1.58037e+019
+275 197 1.57991e+019
+413 21 1.57903e+019
+216 175 1.57832e+019
+392 165 1.57732e+019
+117 428 1.57637e+019
+489 42 1.57605e+019
+196 192 1.56958e+019
+262 391 1.56904e+019
+419 300 1.56714e+019
+424 203 1.56546e+019
+31 269 1.56078e+019
+138 57 1.56031e+019
+487 83 1.55931e+019
+141 392 1.55858e+019
+179 329 1.55457e+019
+131 255 1.55388e+019
+84 146 1.55257e+019
+560 229 1.55257e+019
+236 221 1.54992e+019
+458 266 1.54957e+019
+376 4 1.54778e+019
+297 331 1.54772e+019
+404 13 1.54721e+019
+260 273 1.54654e+019
+177 18 1.54568e+019
+579 41 1.54461e+019
+449 445 1.5444e+019
+470 4 1.54411e+019
+248 218 1.54298e+019
+111 136 1.54087e+019
+507 59 1.54073e+019
+469 140 1.54038e+019
+430 44 1.53615e+019
+540 405 1.53531e+019
+316 428 1.53151e+019
+598 364 1.52957e+019
+247 317 1.52841e+019
+242 165 1.5271e+019
+433 240 1.52337e+019
+342 464 1.52209e+019
+157 200 1.52181e+019
+101 62 1.52141e+019
+9 76 1.52036e+019
+341 109 1.51976e+019
+203 257 1.51942e+019
+108 109 1.5189e+019
+137 138 1.51601e+019
+468 423 1.5158e+019
+62 369 1.5126e+019
+387 17 1.51152e+019
+156 93 1.51151e+019
+265 260 1.51033e+019
+172 112 1.50964e+019
+94 219 1.50623e+019
+171 109 1.5058e+019
+549 59 1.50422e+019
+45 62 1.50065e+019
+266 403 1.49938e+019
+187 19 1.49896e+019
+478 401 1.49601e+019
+124 261 1.49439e+019
+416 450 1.49138e+019
+539 40 1.48876e+019
+288 395 1.48859e+019
+333 412 1.48141e+019
+445 7 1.4803e+019
+370 107 1.47955e+019
+115 76 1.47599e+019
+324 90 1.47324e+019
+172 449 1.47293e+019
+528 160 1.4729e+019
+56 220 1.47263e+019
+287 33 1.47215e+019
+9 476 1.47021e+019
+436 87 1.46962e+019
+545 217 1.46827e+019
+344 340 1.46824e+019
+210 395 1.46525e+019
+542 457 1.46484e+019
+278 418 1.46466e+019
+68 475 1.46358e+019
+265 32 1.46193e+019
+68 96 1.45828e+019
+119 25 1.45441e+019
+379 125 1.45383e+019
+364 357 1.45369e+019
+209 36 1.45341e+019
+152 114 1.45169e+019
+207 436 1.44851e+019
+219 316 1.44759e+019
+206 159 1.44306e+019
+329 212 1.44256e+019
+143 2 1.44239e+019
+261 34 1.43917e+019
+242 199 1.43602e+019
+325 88 1.43591e+019
+475 245 1.43394e+019
+78 28 1.43366e+019
+66 317 1.43351e+019
+475 161 1.43347e+019
+524 99 1.43314e+019
+270 169 1.43218e+019
+513 18 1.429e+019
+490 82 1.42849e+019
+91 389 1.42714e+019
+561 71 1.42649e+019
+441 98 1.42537e+019
+282 393 1.42287e+019
+112 95 1.42243e+019
+450 91 1.421e+019
+218 177 1.41915e+019
+464 24 1.41821e+019
+436 385 1.4166e+019
+116 181 1.41393e+019
+204 435 1.41367e+019
+386 162 1.41155e+019
+104 163 1.40982e+019
+487 43 1.40922e+019
+210 16 1.40813e+019
+160 183 1.40779e+019
+471 268 1.40725e+019
+332 333 1.40448e+019
+583 345 1.40434e+019
+573 17 1.40407e+019
+530 366 1.40071e+019
+439 455 1.40008e+019
+250 422 1.39991e+019
+415 164 1.39952e+019
+45 131 1.39916e+019
+505 381 1.3991e+019
+3 382 1.39825e+019
+511 43 1.39644e+019
+289 349 1.39559e+019
+446 340 1.39232e+019
+386 327 1.39025e+019
+39 355 1.38983e+019
+12 214 1.38982e+019
+44 121 1.38976e+019
+326 181 1.3856e+019
+440 64 1.38472e+019
+341 126 1.38466e+019
+212 437 1.38328e+019
+472 421 1.38288e+019
+475 202 1.38082e+019
+336 317 1.37981e+019
+133 93 1.3786e+019
+408 185 1.37806e+019
+121 187 1.37717e+019
+168 309 1.37716e+019
+151 196 1.37689e+019
+341 263 1.37671e+019
+173 37 1.37649e+019
+436 43 1.37584e+019
+330 89 1.37559e+019
+526 398 1.37552e+019
+516 202 1.3724e+019
+219 279 1.36885e+019
+107 96 1.36801e+019
+190 146 1.36768e+019
+577 18 1.36693e+019
+84 310 1.36676e+019
+270 62 1.36613e+019
+394 162 1.3651e+019
+81 474 1.36498e+019
+528 221 1.36492e+019
+134 238 1.36324e+019
+260 368 1.36237e+019
+331 107 1.36158e+019
+468 237 1.36132e+019
+11 80 1.36011e+019
+302 263 1.35982e+019
+213 123 1.35874e+019
+248 314 1.3583e+019
+86 365 1.35812e+019
+217 126 1.35732e+019
+115 26 1.35681e+019
+227 129 1.35432e+019
+191 17 1.35274e+019
+407 162 1.35167e+019
+174 115 1.35166e+019
+572 328 1.35156e+019
+567 40 1.34998e+019
+130 239 1.34988e+019
+406 142 1.34825e+019
+68 304 1.34819e+019
+173 94 1.34694e+019
+75 132 1.34504e+019
+24 65 1.34291e+019
+390 49 1.34272e+019
+463 39 1.33977e+019
+574 39 1.33903e+019
+99 195 1.33669e+019
+496 462 1.33632e+019
+161 144 1.33596e+019
+243 210 1.33341e+019
+450 22 1.33271e+019
+231 126 1.33025e+019
+177 331 1.32999e+019
+197 125 1.32808e+019
+46 354 1.32764e+019
+299 398 1.32726e+019
+513 402 1.32579e+019
+111 40 1.32545e+019
+202 316 1.32541e+019
+365 200 1.32493e+019
+108 324 1.32328e+019
+210 154 1.32126e+019
+500 420 1.32111e+019
+464 161 1.32106e+019
+376 356 1.32074e+019
+199 110 1.32053e+019
+103 305 1.3202e+019
+475 255 1.3192e+019
+391 52 1.3191e+019
+412 24 1.31763e+019
+492 59 1.31658e+019
+321 10 1.31643e+019
+443 355 1.31615e+019
+127 27 1.31567e+019
+533 61 1.31535e+019
+381 128 1.31302e+019
+448 165 1.3121e+019
+316 107 1.31206e+019
+240 15 1.31174e+019
+500 23 1.31123e+019
+14 30 1.31119e+019
+360 9 1.31081e+019
+398 358 1.31072e+019
+218 146 1.31013e+019
+133 78 1.30886e+019
+445 127 1.30629e+019
+51 291 1.30608e+019
+180 166 1.30501e+019
+382 336 1.3044e+019
+537 103 1.30411e+019
+212 435 1.30212e+019
+30 135 1.30209e+019
+257 140 1.30162e+019
+259 34 1.3009e+019
+189 107 1.30056e+019
+73 164 1.30039e+019
+412 245 1.30027e+019
+280 49 1.29963e+019
+3 155 1.29917e+019
+101 236 1.29669e+019
+326 13 1.29535e+019
+463 198 1.29414e+019
+38 167 1.294e+019
+484 336 1.2936e+019
+146 97 1.2929e+019
+70 255 1.2907e+019
+253 74 1.28803e+019
+497 224 1.28682e+019
+287 342 1.28156e+019
+440 468 1.28148e+019
+61 181 1.2813e+019
+545 219 1.28053e+019
+279 126 1.27982e+019
+129 309 1.27783e+019
+89 197 1.27639e+019
+53 221 1.27492e+019
+274 76 1.27462e+019
+191 189 1.27461e+019
+159 197 1.27459e+019
+396 104 1.27296e+019
+45 342 1.27238e+019
+111 134 1.27139e+019
+168 243 1.27129e+019
+39 143 1.27085e+019
+426 182 1.27005e+019
+106 77 1.26768e+019
+221 114 1.26652e+019
+115 306 1.26544e+019
+58 253 1.26431e+019
+100 95 1.26411e+019
+485 4 1.26394e+019
+569 39 1.26217e+019
+441 321 1.26192e+019
+418 79 1.26094e+019
+558 462 1.26037e+019
+309 33 1.25994e+019
+492 456 1.2597e+019
+74 186 1.25956e+019
+144 326 1.25946e+019
+10 218 1.25893e+019
+572 451 1.25892e+019
+220 149 1.25885e+019
+500 264 1.25884e+019
+288 439 1.25671e+019
+148 131 1.25605e+019
+65 252 1.25593e+019
+371 160 1.25512e+019
+398 265 1.25485e+019
+291 30 1.25413e+019
+479 451 1.2538e+019
+304 162 1.25333e+019
+465 281 1.25332e+019
+371 82 1.25329e+019
+43 474 1.25303e+019
+52 152 1.25267e+019
+281 418 1.2514e+019
+189 214 1.2501e+019
+274 216 1.24983e+019
+127 41 1.24839e+019
+356 251 1.24685e+019
+22 58 1.24641e+019
+407 196 1.24551e+019
+296 89 1.24488e+019
+193 217 1.24464e+019
+282 351 1.24364e+019
+433 278 1.24345e+019
+124 161 1.24269e+019
+89 376 1.24214e+019
+168 150 1.24038e+019
+274 206 1.2391e+019
+372 105 1.23747e+019
+472 201 1.23594e+019
+358 53 1.23484e+019
+45 137 1.23477e+019
+575 98 1.23216e+019
+223 177 1.23123e+019
+246 106 1.23123e+019
+339 263 1.2309e+019
+500 318 1.22942e+019
+279 86 1.22876e+019
+122 216 1.2272e+019
+229 131 1.22634e+019
+193 290 1.22622e+019
+378 316 1.22579e+019
+571 383 1.22464e+019
+247 394 1.22272e+019
+240 196 1.22257e+019
+286 72 1.22158e+019
+360 396 1.22123e+019
+364 256 1.22102e+019
+110 112 1.22025e+019
+18 236 1.21946e+019
+368 337 1.21625e+019
+439 24 1.21582e+019
+48 79 1.21479e+019
+404 260 1.21441e+019
+465 139 1.21396e+019
+166 117 1.2137e+019
+280 219 1.21366e+019
+485 327 1.21218e+019
+79 24 1.20966e+019
+85 197 1.2088e+019
+121 446 1.20835e+019
+157 76 1.20775e+019
+494 455 1.20748e+019
+366 146 1.2071e+019
+65 363 1.20689e+019
+190 144 1.20569e+019
+35 236 1.20405e+019
+136 93 1.20396e+019
+211 187 1.2036e+019
+184 318 1.20353e+019
+214 450 1.20326e+019
+110 168 1.20253e+019
+532 19 1.20231e+019
+109 428 1.20221e+019
+57 168 1.20218e+019
+197 148 1.20046e+019
+335 445 1.20038e+019
+488 140 1.19973e+019
+525 381 1.19939e+019
+435 303 1.19832e+019
+88 369 1.19817e+019
+184 94 1.19781e+019
+160 430 1.1963e+019
+258 131 1.19484e+019
+272 289 1.19395e+019
+167 290 1.19393e+019
+424 48 1.1937e+019
+466 40 1.19175e+019
+350 86 1.19174e+019
+390 161 1.19147e+019
+531 398 1.19083e+019
+541 62 1.19053e+019
+415 21 1.18971e+019
+433 303 1.18936e+019
+429 4 1.18788e+019
+284 406 1.18743e+019
+251 152 1.18651e+019
+533 340 1.18519e+019
+188 144 1.18464e+019
+437 466 1.18431e+019
+462 45 1.1842e+019
+64 276 1.18399e+019
+190 54 1.18351e+019
+267 52 1.18311e+019
+20 219 1.18142e+019
+380 180 1.1813e+019
+317 385 1.18054e+019
+179 103 1.18047e+019
+133 65 1.1789e+019
+390 420 1.17656e+019
+362 101 1.17617e+019
+280 420 1.1753e+019
+479 81 1.17486e+019
+289 164 1.1748e+019
+575 126 1.17474e+019
+327 90 1.17321e+019
+162 211 1.1724e+019
+498 20 1.17187e+019
+412 220 1.17184e+019
+320 119 1.1706e+019
+59 60 1.17022e+019
+258 151 1.16907e+019
+459 44 1.16594e+019
+88 354 1.16575e+019
+128 128 1.16566e+019
+104 430 1.16467e+019
+70 130 1.16366e+019
+439 66 1.16327e+019
+546 261 1.16322e+019
+78 41 1.16267e+019
+386 126 1.1614e+019
+507 3 1.15997e+019
+559 271 1.15983e+019
+423 116 1.15882e+019
+113 356 1.15833e+019
+109 134 1.15827e+019
+359 291 1.15799e+019
+109 340 1.15689e+019
+402 276 1.1565e+019
+23 219 1.15648e+019
+256 405 1.15631e+019
+193 171 1.1537e+019
+49 453 1.15251e+019
+516 120 1.15216e+019
+378 63 1.15053e+019
+375 1 1.14978e+019
+533 122 1.14958e+019
+157 40 1.14825e+019
+30 66 1.14631e+019
+482 336 1.14538e+019
+384 146 1.14512e+019
+449 403 1.14476e+019
+90 289 1.14467e+019
+41 121 1.14285e+019
+272 241 1.14269e+019
+434 156 1.14248e+019
+293 334 1.14244e+019
+387 167 1.14183e+019
+259 161 1.14164e+019
+148 3 1.13924e+019
+159 112 1.13913e+019
+261 287 1.13881e+019
+259 163 1.13871e+019
+178 394 1.13848e+019
+193 188 1.13823e+019
+142 179 1.138e+019
+297 181 1.13773e+019
+399 298 1.13731e+019
+551 385 1.1357e+019
+243 32 1.13337e+019
+210 13 1.12968e+019
+241 59 1.1274e+019
+101 362 1.12726e+019
+126 189 1.12723e+019
+366 298 1.1271e+019
+140 98 1.12672e+019
+544 91 1.12612e+019
+95 20 1.12445e+019
+117 360 1.12293e+019
+540 140 1.12137e+019
+366 259 1.12127e+019
+167 19 1.1188e+019
+203 293 1.11798e+019
+83 404 1.11756e+019
+142 307 1.11514e+019
+254 76 1.11413e+019
+263 404 1.11291e+019
+314 75 1.11265e+019
+156 307 1.11196e+019
+561 60 1.1113e+019
+201 21 1.11097e+019
+404 143 1.10994e+019
+386 63 1.10985e+019
+328 214 1.10968e+019
+303 180 1.1084e+019
+543 57 1.10804e+019
+130 128 1.10727e+019
+57 332 1.10643e+019
+447 351 1.10594e+019
+333 216 1.10524e+019
+59 79 1.10434e+019
+333 415 1.10421e+019
+67 47 1.10421e+019
+539 126 1.10373e+019
+361 331 1.10349e+019
+440 121 1.10267e+019
+131 73 1.1021e+019
+63 318 1.10151e+019
+21 132 1.10101e+019
+39 24 1.1006e+019
+260 231 1.09988e+019
+429 121 1.09869e+019
+71 410 1.09823e+019
+180 106 1.09699e+019
+223 113 1.09624e+019
+316 167 1.09607e+019
+226 180 1.09601e+019
+132 237 1.0956e+019
+396 161 1.09529e+019
+429 340 1.09507e+019
+113 175 1.09414e+019
+232 177 1.09245e+019
+339 447 1.09119e+019
+571 456 1.09065e+019
+94 94 1.08954e+019
+527 80 1.08925e+019
+16 435 1.08902e+019
+49 159 1.0887e+019
+220 210 1.08846e+019
+232 274 1.08846e+019
+569 420 1.08817e+019
+477 10 1.08816e+019
+211 21 1.088e+019
+126 308 1.08783e+019
+356 256 1.08683e+019
+449 437 1.08555e+019
+95 374 1.08547e+019
+527 395 1.08508e+019
+85 178 1.08499e+019
+481 341 1.08393e+019
+207 417 1.08315e+019
+394 222 1.08264e+019
+347 120 1.08254e+019
+84 289 1.08175e+019
+448 138 1.08145e+019
+153 217 1.07972e+019
+204 308 1.07957e+019
+445 353 1.0794e+019
+179 274 1.07796e+019
+220 151 1.07688e+019
+157 112 1.07653e+019
+572 142 1.07606e+019
+496 22 1.076e+019
+49 63 1.07598e+019
+217 98 1.07589e+019
+447 244 1.07449e+019
+229 347 1.0741e+019
+512 95 1.07409e+019
+266 447 1.07335e+019
+346 341 1.07232e+019
+518 185 1.07157e+019
+297 296 1.07108e+019
+215 426 1.0706e+019
+223 312 1.07034e+019
+224 398 1.06999e+019
+187 109 1.06986e+019
+538 263 1.06981e+019
+400 319 1.06798e+019
+438 239 1.06779e+019
+48 131 1.06611e+019
+530 426 1.06572e+019
+18 319 1.06497e+019
+222 239 1.06472e+019
+342 334 1.06337e+019
+211 94 1.06322e+019
+258 237 1.06241e+019
+250 313 1.06104e+019
+247 346 1.0606e+019
+416 86 1.06023e+019
+399 67 1.05783e+019
+375 340 1.05361e+019
+268 19 1.0519e+019
+403 180 1.05059e+019
+107 107 1.04941e+019
+262 216 1.04933e+019
+450 440 1.04769e+019
+160 98 1.0473e+019
+570 422 1.04601e+019
+433 319 1.04534e+019
+164 202 1.04526e+019
+2 435 1.04478e+019
+564 16 1.04431e+019
+356 341 1.04375e+019
+92 20 1.04321e+019
+546 140 1.04276e+019
+433 43 1.0426e+019
+212 53 1.04218e+019
+509 361 1.04182e+019
+481 81 1.04119e+019
+345 48 1.04075e+019
+157 182 1.04048e+019
+326 353 1.03989e+019
+400 431 1.03916e+019
+191 208 1.03821e+019
+164 18 1.03792e+019
+148 398 1.03762e+019
+202 314 1.03728e+019
+550 222 1.03655e+019
+163 20 1.03581e+019
+510 223 1.03579e+019
+364 301 1.03576e+019
+226 182 1.03563e+019
+535 121 1.03561e+019
+570 408 1.03411e+019
+464 241 1.03321e+019
+233 296 1.03235e+019
+544 20 1.03174e+019
+272 414 1.0315e+019
+540 165 1.02956e+019
+444 121 1.0283e+019
+447 136 1.02785e+019
+35 66 1.02705e+019
+379 122 1.02674e+019
+107 430 1.02572e+019
+503 179 1.02453e+019
+164 380 1.02086e+019
+404 45 1.01973e+019
+23 322 1.01964e+019
+579 52 1.01912e+019
+78 271 1.01711e+019
+63 8 1.01669e+019
+122 127 1.0166e+019
+88 183 1.01576e+019
+138 2 1.01562e+019
+60 254 1.01549e+019
+43 86 1.01465e+019
+272 91 1.01372e+019
+143 141 1.01357e+019
+336 298 1.01331e+019
+545 438 1.01311e+019
+454 115 1.01199e+019
+455 179 1.01191e+019
+405 337 1.01136e+019
+146 452 1.01125e+019
+503 167 1.01059e+019
+113 262 1.009e+019
+240 366 1.00891e+019
+569 183 1.00864e+019
+309 356 1.00845e+019
+168 422 1.00843e+019
+90 79 1.00799e+019
+263 31 1.00789e+019
+278 263 1.00773e+019
+262 319 1.00746e+019
+165 213 1.00648e+019
+487 22 1.00636e+019
+328 295 1.00565e+019
+96 125 1.00562e+019
+34 112 1.00455e+019
+305 106 1.00374e+019
+546 182 1.00354e+019
+500 42 1.00317e+019
+365 85 1.00193e+019
+213 62 1.00167e+019
+446 376 1.00131e+019
+179 153 1.00094e+019
+334 218 1.00088e+019
+394 146 1.00086e+019
+355 10 1.0008e+019
+431 275 1.00065e+019
+363 199 1.00023e+019
+182 130 1.00007e+019
+553 382 9.98114e+018
+275 457 9.97808e+018
+117 115 9.96382e+018
+436 320 9.95783e+018
+524 172 9.94956e+018
+126 191 9.9454e+018
+472 453 9.93632e+018
+561 223 9.93205e+018
+221 339 9.92774e+018
+102 42 9.92394e+018
+46 121 9.91943e+018
+231 344 9.91682e+018
+149 231 9.90822e+018
+500 461 9.90357e+018
+316 336 9.89568e+018
+177 166 9.87603e+018
+512 350 9.86554e+018
+318 460 9.84364e+018
+167 431 9.84012e+018
+377 461 9.83817e+018
+433 317 9.83688e+018
+420 283 9.83576e+018
+445 297 9.82725e+018
+208 421 9.82599e+018
+243 273 9.80973e+018
+562 144 9.80679e+018
+566 177 9.80345e+018
+336 426 9.79207e+018
+525 174 9.79151e+018
+516 141 9.77562e+018
+576 175 9.75403e+018
+270 60 9.75113e+018
+285 443 9.74608e+018
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_7_5.txt b/test_data/harriscorners/hc_msc_0.00_0.04_7_5.txt
new file mode 100644
index 0000000..112d394
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_7_5.txt
@@ -0,0 +1,883 @@
+882
+244 94 1.87775e+021
+273 365 9.26061e+020
+423 178 8.16558e+020
+237 19 8.14972e+020
+362 400 7.87473e+020
+261 297 7.0927e+020
+82 28 7.01247e+020
+543 365 6.52354e+020
+27 9 6.35072e+020
+65 343 6.26293e+020
+76 257 6.17333e+020
+131 26 6.16091e+020
+281 113 6.12302e+020
+195 58 5.65501e+020
+465 393 5.63954e+020
+252 13 5.61907e+020
+320 224 5.55213e+020
+420 181 5.34624e+020
+37 62 5.28994e+020
+420 177 5.2893e+020
+240 91 5.28307e+020
+343 9 5.24211e+020
+58 218 5.18074e+020
+386 10 4.89463e+020
+131 36 4.86489e+020
+448 297 4.81101e+020
+127 164 4.80108e+020
+526 24 4.75043e+020
+360 295 4.67175e+020
+81 2 4.54872e+020
+200 17 4.50611e+020
+138 203 4.5036e+020
+427 320 4.50185e+020
+33 99 4.42955e+020
+447 397 4.30616e+020
+519 61 4.29201e+020
+483 23 4.27497e+020
+510 124 4.22015e+020
+233 15 4.16205e+020
+128 2 4.14804e+020
+130 2 4.13888e+020
+102 59 4.11714e+020
+418 439 4.097e+020
+78 2 4.04749e+020
+553 40 4.01707e+020
+81 4 4.00099e+020
+214 72 3.98799e+020
+35 138 3.97414e+020
+299 52 3.95271e+020
+320 313 3.94701e+020
+448 262 3.94052e+020
+257 386 3.93401e+020
+294 15 3.91516e+020
+124 198 3.89216e+020
+152 222 3.88953e+020
+484 339 3.87805e+020
+243 202 3.84311e+020
+116 44 3.84127e+020
+452 339 3.83953e+020
+424 321 3.83939e+020
+480 297 3.83135e+020
+524 21 3.78402e+020
+511 167 3.75663e+020
+387 178 3.74741e+020
+358 260 3.73301e+020
+263 441 3.72788e+020
+475 262 3.69975e+020
+242 71 3.68716e+020
+302 185 3.68508e+020
+433 112 3.66965e+020
+73 24 3.6321e+020
+225 420 3.62557e+020
+456 280 3.61553e+020
+122 43 3.61075e+020
+123 45 3.60561e+020
+45 27 3.60049e+020
+338 12 3.58776e+020
+340 9 3.55087e+020
+507 122 3.52427e+020
+35 145 3.50525e+020
+390 61 3.49165e+020
+302 182 3.45682e+020
+513 341 3.43054e+020
+71 24 3.41703e+020
+101 222 3.40617e+020
+214 56 3.37947e+020
+477 20 3.37136e+020
+222 38 3.3454e+020
+476 22 3.32108e+020
+216 279 3.30839e+020
+181 111 3.30427e+020
+390 57 3.24893e+020
+462 279 3.21975e+020
+308 371 3.21167e+020
+426 119 3.20455e+020
+544 168 3.199e+020
+74 6 3.18851e+020
+435 69 3.18818e+020
+325 341 3.18272e+020
+138 110 3.16442e+020
+479 19 3.15219e+020
+167 287 3.13054e+020
+556 40 3.11947e+020
+134 214 3.10894e+020
+483 178 3.10019e+020
+183 400 3.09493e+020
+4 66 3.06705e+020
+360 131 3.05749e+020
+508 16 3.04589e+020
+175 109 3.04268e+020
+55 290 3.0272e+020
+10 101 3.00663e+020
+2 47 2.99572e+020
+356 220 2.98396e+020
+65 215 2.98135e+020
+41 63 2.97441e+020
+125 364 2.93716e+020
+60 41 2.90969e+020
+302 215 2.88616e+020
+343 338 2.87605e+020
+411 354 2.86548e+020
+421 335 2.82097e+020
+177 106 2.81447e+020
+142 324 2.81051e+020
+413 162 2.79227e+020
+362 251 2.78542e+020
+456 283 2.78097e+020
+390 295 2.77918e+020
+365 144 2.77091e+020
+112 392 2.75828e+020
+55 29 2.74843e+020
+283 403 2.74176e+020
+92 214 2.7408e+020
+88 148 2.7379e+020
+533 184 2.73678e+020
+163 216 2.70517e+020
+270 70 2.70009e+020
+104 198 2.70008e+020
+163 214 2.69704e+020
+283 72 2.67898e+020
+409 64 2.67764e+020
+111 239 2.67515e+020
+145 310 2.66802e+020
+108 27 2.66545e+020
+234 346 2.66455e+020
+169 57 2.66067e+020
+225 38 2.64591e+020
+425 377 2.64496e+020
+526 60 2.644e+020
+220 16 2.63235e+020
+120 51 2.62955e+020
+566 43 2.61637e+020
+57 4 2.61375e+020
+40 296 2.60985e+020
+92 198 2.6009e+020
+327 142 2.59315e+020
+471 240 2.5894e+020
+337 9 2.57982e+020
+96 446 2.57589e+020
+100 198 2.57327e+020
+429 3 2.57093e+020
+13 218 2.56938e+020
+371 162 2.55962e+020
+440 339 2.55881e+020
+383 9 2.55721e+020
+404 121 2.54989e+020
+515 76 2.54865e+020
+387 220 2.5433e+020
+329 128 2.52802e+020
+545 41 2.52213e+020
+431 147 2.51533e+020
+150 307 2.51108e+020
+86 255 2.50307e+020
+195 127 2.49685e+020
+509 455 2.48187e+020
+123 185 2.47869e+020
+480 178 2.47594e+020
+309 7 2.46744e+020
+195 125 2.46707e+020
+479 262 2.46586e+020
+412 256 2.4653e+020
+125 254 2.46169e+020
+84 77 2.45632e+020
+490 140 2.45429e+020
+329 253 2.45231e+020
+360 337 2.44291e+020
+62 203 2.44068e+020
+272 280 2.43139e+020
+171 18 2.42654e+020
+391 144 2.42545e+020
+579 16 2.42533e+020
+482 366 2.41869e+020
+210 451 2.41467e+020
+516 17 2.40996e+020
+261 165 2.40817e+020
+36 173 2.39987e+020
+95 477 2.39628e+020
+407 64 2.39053e+020
+404 187 2.39013e+020
+220 290 2.37926e+020
+347 241 2.36741e+020
+360 335 2.35917e+020
+404 119 2.35115e+020
+139 173 2.3469e+020
+401 122 2.34654e+020
+207 450 2.32678e+020
+434 398 2.31864e+020
+64 60 2.31209e+020
+351 321 2.30767e+020
+86 77 2.30189e+020
+497 81 2.29722e+020
+32 66 2.29428e+020
+6 11 2.29319e+020
+50 12 2.28923e+020
+260 222 2.28869e+020
+470 421 2.27353e+020
+174 40 2.27316e+020
+108 46 2.2729e+020
+355 268 2.26267e+020
+510 173 2.25745e+020
+250 364 2.25133e+020
+511 128 2.2441e+020
+378 7 2.23868e+020
+55 66 2.23431e+020
+41 217 2.23147e+020
+65 319 2.22501e+020
+528 98 2.22445e+020
+68 149 2.22321e+020
+94 217 2.22101e+020
+230 36 2.21814e+020
+387 294 2.20561e+020
+417 23 2.20529e+020
+476 5 2.20518e+020
+334 436 2.20251e+020
+542 210 2.20241e+020
+527 39 2.19224e+020
+302 165 2.19095e+020
+163 277 2.18942e+020
+417 8 2.18857e+020
+368 144 2.18625e+020
+348 179 2.17365e+020
+422 48 2.16983e+020
+64 236 2.16906e+020
+393 295 2.16551e+020
+528 102 2.16083e+020
+482 328 2.15054e+020
+545 4 2.14951e+020
+102 4 2.14854e+020
+159 138 2.14561e+020
+535 243 2.14515e+020
+35 9 2.13521e+020
+210 435 2.13136e+020
+16 216 2.12271e+020
+48 99 2.12119e+020
+358 334 2.11486e+020
+264 445 2.10683e+020
+246 399 2.10678e+020
+494 140 2.10013e+020
+252 423 2.10005e+020
+71 147 2.08734e+020
+168 197 2.08509e+020
+408 182 2.08118e+020
+210 446 2.07542e+020
+177 260 2.07155e+020
+344 107 2.06943e+020
+543 15 2.06508e+020
+545 59 2.06326e+020
+489 342 2.06288e+020
+354 321 2.06281e+020
+302 205 2.06005e+020
+270 166 2.0597e+020
+278 222 2.05907e+020
+246 206 2.05743e+020
+58 364 2.04678e+020
+344 263 2.04474e+020
+515 347 2.0434e+020
+378 354 2.0419e+020
+57 183 2.0329e+020
+254 138 2.02706e+020
+42 339 2.02449e+020
+448 168 2.0228e+020
+342 263 2.02065e+020
+66 477 2.01332e+020
+365 105 2.01101e+020
+211 185 2.00583e+020
+540 15 1.98498e+020
+393 66 1.97855e+020
+250 33 1.97465e+020
+164 327 1.96984e+020
+228 292 1.96838e+020
+526 423 1.9647e+020
+326 425 1.95502e+020
+78 79 1.95493e+020
+300 265 1.94309e+020
+48 151 1.93804e+020
+212 182 1.92588e+020
+473 4 1.92143e+020
+395 261 1.92061e+020
+345 350 1.9201e+020
+386 243 1.89624e+020
+204 16 1.89166e+020
+453 206 1.88936e+020
+520 184 1.88769e+020
+127 76 1.88422e+020
+238 349 1.88349e+020
+100 78 1.88201e+020
+344 110 1.88158e+020
+231 125 1.88151e+020
+342 107 1.87531e+020
+184 35 1.86509e+020
+68 337 1.86447e+020
+69 476 1.86443e+020
+530 186 1.85906e+020
+466 196 1.85878e+020
+192 219 1.85554e+020
+236 130 1.85495e+020
+406 198 1.84754e+020
+209 20 1.84609e+020
+248 403 1.84521e+020
+276 352 1.84179e+020
+226 221 1.83707e+020
+104 4 1.83333e+020
+541 124 1.83186e+020
+245 143 1.81777e+020
+160 143 1.812e+020
+513 296 1.81007e+020
+246 145 1.80725e+020
+219 107 1.80024e+020
+544 6 1.78847e+020
+137 206 1.78097e+020
+332 295 1.78061e+020
+157 196 1.77829e+020
+324 315 1.77816e+020
+95 6 1.77319e+020
+346 392 1.77187e+020
+424 44 1.76832e+020
+53 43 1.76783e+020
+163 74 1.76695e+020
+485 59 1.76638e+020
+221 432 1.76414e+020
+55 293 1.76287e+020
+512 262 1.76027e+020
+375 4 1.76021e+020
+36 176 1.75967e+020
+541 18 1.75374e+020
+133 93 1.74567e+020
+314 83 1.74423e+020
+413 299 1.73132e+020
+51 98 1.73101e+020
+452 376 1.72838e+020
+127 252 1.72782e+020
+286 210 1.72687e+020
+47 11 1.7249e+020
+44 97 1.724e+020
+123 272 1.7189e+020
+234 162 1.71338e+020
+513 260 1.7109e+020
+509 8 1.70924e+020
+46 355 1.70684e+020
+328 297 1.7067e+020
+156 317 1.70629e+020
+363 7 1.70338e+020
+31 270 1.70071e+020
+479 16 1.69703e+020
+311 150 1.69621e+020
+167 325 1.69588e+020
+136 173 1.6874e+020
+562 146 1.68545e+020
+243 165 1.68073e+020
+47 147 1.67782e+020
+498 159 1.67314e+020
+358 10 1.67093e+020
+224 182 1.66195e+020
+551 381 1.66178e+020
+328 65 1.65681e+020
+221 180 1.65659e+020
+37 218 1.65501e+020
+275 329 1.65327e+020
+399 261 1.64822e+020
+46 82 1.64542e+020
+576 14 1.64539e+020
+166 97 1.6434e+020
+512 99 1.64139e+020
+304 164 1.64088e+020
+449 445 1.64069e+020
+102 359 1.63616e+020
+18 343 1.63479e+020
+85 214 1.63289e+020
+452 204 1.63138e+020
+488 263 1.63051e+020
+379 66 1.62928e+020
+517 57 1.62793e+020
+360 143 1.62776e+020
+141 394 1.61996e+020
+509 343 1.61864e+020
+325 164 1.61655e+020
+154 236 1.61582e+020
+530 144 1.61551e+020
+140 23 1.61435e+020
+325 144 1.61061e+020
+158 56 1.60626e+020
+457 43 1.60623e+020
+272 53 1.60096e+020
+423 398 1.60083e+020
+470 418 1.59768e+020
+90 255 1.59417e+020
+239 421 1.59334e+020
+377 119 1.59331e+020
+219 35 1.59072e+020
+61 134 1.58752e+020
+127 95 1.58747e+020
+512 222 1.58598e+020
+256 149 1.58408e+020
+361 221 1.58148e+020
+358 64 1.58097e+020
+528 189 1.58064e+020
+175 112 1.58048e+020
+547 164 1.57836e+020
+108 39 1.5776e+020
+360 394 1.57615e+020
+41 10 1.57606e+020
+265 31 1.57318e+020
+529 183 1.56896e+020
+106 39 1.56837e+020
+45 62 1.56582e+020
+565 160 1.5565e+020
+489 43 1.55609e+020
+293 26 1.55428e+020
+531 102 1.55362e+020
+446 7 1.55254e+020
+52 12 1.54685e+020
+527 361 1.54661e+020
+553 378 1.54524e+020
+508 5 1.54485e+020
+543 457 1.54447e+020
+30 219 1.54426e+020
+476 341 1.54298e+020
+279 128 1.53925e+020
+154 234 1.53909e+020
+191 124 1.53747e+020
+313 150 1.53589e+020
+366 247 1.53419e+020
+558 462 1.53346e+020
+253 10 1.52916e+020
+330 9 1.52843e+020
+87 209 1.52645e+020
+79 197 1.51776e+020
+275 319 1.51759e+020
+360 217 1.5174e+020
+92 292 1.51453e+020
+456 375 1.51294e+020
+129 95 1.50744e+020
+141 1 1.50727e+020
+164 358 1.50168e+020
+436 304 1.49982e+020
+192 330 1.49769e+020
+113 345 1.49671e+020
+537 393 1.49286e+020
+328 294 1.4927e+020
+471 212 1.49212e+020
+93 7 1.48674e+020
+57 373 1.47561e+020
+456 84 1.47271e+020
+523 123 1.47244e+020
+502 361 1.47199e+020
+287 166 1.46949e+020
+157 73 1.4672e+020
+58 29 1.46613e+020
+77 41 1.46344e+020
+350 145 1.46221e+020
+374 393 1.46005e+020
+325 294 1.45689e+020
+249 423 1.45535e+020
+449 219 1.45356e+020
+187 289 1.45341e+020
+324 223 1.45303e+020
+338 165 1.45193e+020
+384 260 1.45043e+020
+371 90 1.44957e+020
+286 296 1.44953e+020
+245 294 1.4494e+020
+207 224 1.44885e+020
+36 201 1.44878e+020
+166 244 1.44802e+020
+542 129 1.44601e+020
+364 297 1.44567e+020
+539 405 1.44525e+020
+291 50 1.44394e+020
+135 129 1.44188e+020
+498 225 1.44154e+020
+191 358 1.44104e+020
+71 96 1.43934e+020
+405 375 1.43842e+020
+42 24 1.43334e+020
+63 218 1.43317e+020
+278 144 1.43187e+020
+202 314 1.43164e+020
+298 69 1.42962e+020
+329 12 1.4277e+020
+28 29 1.42468e+020
+196 83 1.42277e+020
+203 311 1.42189e+020
+356 255 1.42149e+020
+346 298 1.42142e+020
+66 475 1.42113e+020
+64 371 1.41902e+020
+444 119 1.41895e+020
+331 131 1.4153e+020
+524 185 1.41477e+020
+182 380 1.40929e+020
+247 316 1.40787e+020
+30 97 1.4037e+020
+576 177 1.40333e+020
+306 440 1.40295e+020
+84 145 1.40202e+020
+144 6 1.40134e+020
+430 45 1.40018e+020
+135 131 1.39831e+020
+129 168 1.39443e+020
+358 282 1.39416e+020
+475 246 1.39241e+020
+471 63 1.39226e+020
+429 223 1.3889e+020
+270 367 1.38791e+020
+512 220 1.38723e+020
+251 10 1.38444e+020
+127 187 1.38328e+020
+220 100 1.37499e+020
+478 402 1.37346e+020
+584 38 1.37307e+020
+471 83 1.37246e+020
+449 204 1.3713e+020
+469 140 1.37061e+020
+425 324 1.3706e+020
+519 264 1.36667e+020
+224 218 1.36609e+020
+34 268 1.3657e+020
+362 369 1.36495e+020
+346 296 1.3641e+020
+393 164 1.36108e+020
+180 394 1.35529e+020
+161 168 1.35365e+020
+387 16 1.35307e+020
+363 254 1.35238e+020
+472 42 1.35229e+020
+444 452 1.34998e+020
+177 39 1.3492e+020
+209 16 1.34842e+020
+436 320 1.34542e+020
+84 476 1.34527e+020
+363 102 1.34501e+020
+255 423 1.34495e+020
+333 91 1.3408e+020
+342 110 1.33999e+020
+163 168 1.33984e+020
+435 281 1.33818e+020
+427 182 1.33668e+020
+228 128 1.33523e+020
+273 131 1.33378e+020
+116 428 1.33301e+020
+449 437 1.33037e+020
+290 137 1.32669e+020
+193 216 1.32241e+020
+403 265 1.32117e+020
+21 61 1.32112e+020
+228 185 1.319e+020
+542 132 1.31804e+020
+501 143 1.31796e+020
+214 449 1.3173e+020
+397 265 1.3171e+020
+23 61 1.31375e+020
+393 216 1.31368e+020
+263 403 1.31294e+020
+473 63 1.31186e+020
+138 98 1.31067e+020
+351 270 1.30481e+020
+59 78 1.30336e+020
+262 201 1.30032e+020
+62 369 1.30029e+020
+140 182 1.2978e+020
+174 238 1.29755e+020
+479 293 1.29659e+020
+521 263 1.29613e+020
+332 127 1.29433e+020
+408 45 1.29145e+020
+109 96 1.29097e+020
+418 80 1.29021e+020
+291 265 1.28846e+020
+460 44 1.2883e+020
+471 268 1.28679e+020
+132 132 1.28594e+020
+244 14 1.28556e+020
+59 75 1.28454e+020
+131 148 1.28439e+020
+118 75 1.2838e+020
+146 21 1.28273e+020
+37 287 1.28205e+020
+168 180 1.28134e+020
+366 5 1.28007e+020
+121 48 1.27875e+020
+541 100 1.27718e+020
+414 4 1.27702e+020
+339 391 1.27688e+020
+578 42 1.27264e+020
+573 422 1.27187e+020
+297 331 1.27111e+020
+383 354 1.26871e+020
+273 296 1.26356e+020
+221 177 1.26316e+020
+389 97 1.26086e+020
+276 180 1.25934e+020
+530 362 1.25539e+020
+166 277 1.25425e+020
+82 135 1.25352e+020
+571 450 1.25237e+020
+463 23 1.2503e+020
+349 298 1.24917e+020
+169 182 1.24633e+020
+435 90 1.246e+020
+101 164 1.24425e+020
+38 168 1.24261e+020
+432 276 1.24243e+020
+193 17 1.2417e+020
+390 325 1.241e+020
+256 35 1.23399e+020
+402 6 1.23293e+020
+163 315 1.23289e+020
+502 160 1.23165e+020
+349 87 1.23077e+020
+258 161 1.23072e+020
+191 55 1.22957e+020
+80 40 1.22884e+020
+190 216 1.2276e+020
+455 59 1.22747e+020
+211 15 1.22706e+020
+205 160 1.22659e+020
+160 183 1.22137e+020
+69 420 1.2211e+020
+561 463 1.22057e+020
+120 447 1.21927e+020
+478 13 1.21908e+020
+334 218 1.21894e+020
+109 137 1.21386e+020
+442 23 1.2131e+020
+270 185 1.21279e+020
+191 360 1.21232e+020
+405 42 1.21126e+020
+432 303 1.20923e+020
+39 83 1.20884e+020
+434 225 1.20829e+020
+195 190 1.20471e+020
+187 264 1.20458e+020
+297 410 1.20349e+020
+491 59 1.20289e+020
+506 455 1.20244e+020
+425 203 1.20114e+020
+306 363 1.20103e+020
+258 201 1.20016e+020
+459 303 1.19952e+020
+330 89 1.19859e+020
+307 449 1.19734e+020
+233 200 1.19525e+020
+283 395 1.19446e+020
+113 95 1.19446e+020
+569 383 1.19195e+020
+393 218 1.19137e+020
+381 356 1.19132e+020
+314 147 1.19048e+020
+111 111 1.18958e+020
+328 89 1.18951e+020
+571 447 1.1884e+020
+322 425 1.1869e+020
+210 36 1.1829e+020
+191 205 1.18213e+020
+549 59 1.1819e+020
+463 40 1.18165e+020
+144 17 1.17982e+020
+173 312 1.17781e+020
+88 368 1.17776e+020
+174 19 1.1745e+020
+364 181 1.16774e+020
+565 463 1.16612e+020
+417 84 1.16578e+020
+526 346 1.16361e+020
+336 391 1.16323e+020
+108 183 1.16158e+020
+433 241 1.1589e+020
+44 9 1.15873e+020
+488 83 1.15653e+020
+73 164 1.15482e+020
+191 57 1.15125e+020
+363 358 1.15111e+020
+51 61 1.15033e+020
+269 67 1.146e+020
+163 242 1.14519e+020
+107 428 1.14345e+020
+180 292 1.14278e+020
+224 178 1.14229e+020
+514 382 1.14205e+020
+381 26 1.1381e+020
+386 327 1.1369e+020
+538 97 1.13223e+020
+214 451 1.1292e+020
+440 25 1.12886e+020
+431 82 1.12859e+020
+162 111 1.12812e+020
+264 311 1.12673e+020
+537 186 1.12554e+020
+130 78 1.12299e+020
+44 11 1.12268e+020
+228 289 1.12042e+020
+338 263 1.11735e+020
+548 44 1.11588e+020
+154 114 1.11411e+020
+215 175 1.1139e+020
+259 35 1.11311e+020
+483 143 1.11274e+020
+259 368 1.1108e+020
+196 193 1.11013e+020
+187 99 1.10997e+020
+177 164 1.10992e+020
+179 164 1.10984e+020
+247 395 1.10898e+020
+432 269 1.10851e+020
+326 181 1.10802e+020
+500 265 1.10619e+020
+53 221 1.10618e+020
+83 72 1.10523e+020
+130 255 1.09897e+020
+199 131 1.0969e+020
+419 53 1.09624e+020
+118 115 1.09506e+020
+486 140 1.09446e+020
+183 19 1.09099e+020
+173 116 1.08798e+020
+382 412 1.08746e+020
+389 140 1.08583e+020
+9 77 1.08401e+020
+90 376 1.08391e+020
+163 208 1.08319e+020
+41 136 1.08277e+020
+192 189 1.08211e+020
+449 178 1.08091e+020
+20 317 1.08034e+020
+39 355 1.07918e+020
+130 476 1.07872e+020
+220 150 1.0774e+020
+390 49 1.07595e+020
+527 222 1.07548e+020
+354 295 1.07508e+020
+212 33 1.07116e+020
+294 269 1.07084e+020
+559 80 1.0698e+020
+118 425 1.06906e+020
+514 121 1.06766e+020
+338 473 1.06656e+020
+284 199 1.06603e+020
+328 214 1.06495e+020
+501 22 1.06398e+020
+485 4 1.06253e+020
+179 329 1.06219e+020
+31 135 1.06128e+020
+166 312 1.05887e+020
+341 123 1.05795e+020
+458 3 1.05503e+020
+46 218 1.05261e+020
+110 263 1.05234e+020
+391 449 1.04973e+020
+482 332 1.04971e+020
+170 310 1.04902e+020
+209 395 1.04827e+020
+275 197 1.04228e+020
+152 196 1.0411e+020
+302 189 1.04077e+020
+109 169 1.04017e+020
+435 163 1.03991e+020
+402 45 1.03938e+020
+322 427 1.03914e+020
+106 77 1.03617e+020
+462 221 1.03593e+020
+576 39 1.03421e+020
+190 312 1.03337e+020
+111 165 1.02872e+020
+452 60 1.02657e+020
+271 182 1.0252e+020
+493 181 1.02479e+020
+280 132 1.02402e+020
+576 19 1.02386e+020
+130 72 1.02227e+020
+460 267 1.02165e+020
+268 289 1.01798e+020
+210 33 1.01699e+020
+481 451 1.01648e+020
+561 320 1.01603e+020
+191 146 1.01572e+020
+358 291 1.01524e+020
+417 300 1.01492e+020
+111 135 1.0148e+020
+164 183 1.01417e+020
+376 181 1.01416e+020
+34 31 1.01185e+020
+536 459 1.01168e+020
+12 215 1.01151e+020
+268 52 1.00893e+020
+87 364 1.0089e+020
+393 48 1.00707e+020
+206 435 1.00649e+020
+344 48 1.00634e+020
+29 236 1.00611e+020
+359 53 1.00477e+020
+451 86 1.00476e+020
+166 110 9.98523e+019
+88 252 9.98364e+019
+578 52 9.95951e+019
+116 307 9.94855e+019
+10 79 9.93236e+019
+325 88 9.9214e+019
+380 180 9.91653e+019
+168 291 9.91447e+019
+418 68 9.90585e+019
+114 3 9.90364e+019
+340 447 9.89313e+019
+473 202 9.88504e+019
+221 183 9.88455e+019
+213 124 9.86933e+019
+448 339 9.8637e+019
+281 419 9.85627e+019
+362 397 9.84532e+019
+71 409 9.84037e+019
+125 189 9.8388e+019
+85 310 9.83687e+019
+282 199 9.83684e+019
+333 258 9.82796e+019
+430 89 9.82122e+019
+56 78 9.81808e+019
+301 106 9.79705e+019
+104 304 9.78196e+019
+257 251 9.77537e+019
+259 71 9.77009e+019
+599 364 9.76464e+019
+48 255 9.74672e+019
+332 201 9.73598e+019
+166 117 9.73123e+019
+345 277 9.73043e+019
+29 135 9.72241e+019
+178 18 9.72006e+019
+301 103 9.71281e+019
+437 466 9.71082e+019
+328 353 9.68988e+019
+324 260 9.6885e+019
+305 193 9.677e+019
+249 219 9.67238e+019
+313 76 9.64016e+019
+575 99 9.63529e+019
+452 371 9.63101e+019
+309 441 9.58386e+019
+441 239 9.57739e+019
+573 405 9.57133e+019
+451 22 9.55647e+019
+248 313 9.54226e+019
+289 349 9.53549e+019
+527 224 9.51503e+019
+157 40 9.51313e+019
+522 425 9.51126e+019
+156 94 9.50761e+019
+445 114 9.49831e+019
+259 237 9.49509e+019
+398 168 9.49159e+019
+178 94 9.48855e+019
+474 240 9.47787e+019
+500 474 9.46539e+019
+191 350 9.46499e+019
+374 240 9.46146e+019
+467 424 9.44518e+019
+570 422 9.44175e+019
+186 19 9.43234e+019
+418 283 9.42762e+019
+191 144 9.41426e+019
+317 315 9.40579e+019
+317 149 9.40097e+019
+256 182 9.39571e+019
+546 139 9.39552e+019
diff --git a/test_data/harriscorners/hc_msc_0.00_0.04_7_7.txt b/test_data/harriscorners/hc_msc_0.00_0.04_7_7.txt
new file mode 100644
index 0000000..22dc09a
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.04_7_7.txt
@@ -0,0 +1,1088 @@
+1087
+244 94 4.54756e+021
+498 1 2.89128e+021
+81 29 2.84968e+021
+130 26 2.73927e+021
+237 20 2.43927e+021
+421 180 2.2856e+021
+424 180 1.97444e+021
+261 298 1.9493e+021
+424 177 1.91973e+021
+240 92 1.8959e+021
+422 177 1.82801e+021
+272 364 1.76478e+021
+272 366 1.76333e+021
+26 9 1.76208e+021
+30 8 1.6834e+021
+195 58 1.65648e+021
+525 24 1.63081e+021
+76 257 1.63042e+021
+274 364 1.59249e+021
+81 4 1.56351e+021
+543 365 1.50648e+021
+342 9 1.48334e+021
+37 63 1.45628e+021
+528 24 1.4543e+021
+152 223 1.45345e+021
+362 400 1.43983e+021
+130 37 1.43465e+021
+65 344 1.39373e+021
+510 124 1.38737e+021
+283 113 1.38112e+021
+385 10 1.36192e+021
+253 12 1.33117e+021
+477 22 1.33081e+021
+482 23 1.31428e+021
+476 262 1.2874e+021
+127 165 1.223e+021
+528 20 1.21495e+021
+77 4 1.21477e+021
+483 178 1.21407e+021
+388 10 1.2107e+021
+121 46 1.18742e+021
+485 338 1.18265e+021
+424 322 1.16909e+021
+58 218 1.16673e+021
+34 140 1.16469e+021
+429 2 1.15137e+021
+138 204 1.14927e+021
+214 57 1.149e+021
+129 1 1.14641e+021
+121 44 1.14507e+021
+542 14 1.13027e+021
+175 110 1.12882e+021
+320 314 1.11767e+021
+60 40 1.10931e+021
+102 222 1.09821e+021
+302 185 1.09755e+021
+321 225 1.09392e+021
+357 259 1.07415e+021
+295 15 1.07279e+021
+257 386 1.06952e+021
+339 10 1.0694e+021
+464 393 1.0691e+021
+361 395 1.06009e+021
+361 294 1.05276e+021
+12 218 1.05156e+021
+61 217 1.0495e+021
+33 100 1.03453e+021
+519 60 1.0332e+021
+299 53 1.03287e+021
+510 16 1.03232e+021
+359 294 1.02419e+021
+199 18 1.02227e+021
+55 30 1.02e+021
+433 112 1.01855e+021
+123 43 1.01265e+021
+451 339 1.00977e+021
+243 201 1.00009e+021
+179 110 9.96839e+020
+458 279 9.75992e+020
+163 215 9.69482e+020
+418 438 9.6816e+020
+107 28 9.63064e+020
+391 294 9.62312e+020
+523 62 9.45783e+020
+226 36 9.45392e+020
+71 25 9.43406e+020
+447 261 9.3921e+020
+103 60 9.39121e+020
+330 128 9.37211e+020
+241 70 9.33707e+020
+460 278 9.29724e+020
+539 14 9.27109e+020
+83 77 9.16729e+020
+211 450 9.12746e+020
+35 145 9.08713e+020
+554 41 9.01196e+020
+512 342 8.96249e+020
+55 290 8.87608e+020
+389 61 8.79589e+020
+43 26 8.76716e+020
+224 39 8.75956e+020
+196 127 8.72051e+020
+490 139 8.71945e+020
+302 182 8.65335e+020
+359 334 8.56678e+020
+359 130 8.56206e+020
+262 441 8.5423e+020
+223 420 8.52762e+020
+576 16 8.45762e+020
+145 6 8.43435e+020
+403 121 8.35747e+020
+74 25 8.35e+020
+405 183 8.3492e+020
+310 6 8.34181e+020
+328 296 8.33394e+020
+221 36 8.3308e+020
+364 143 8.33057e+020
+101 198 8.32824e+020
+62 203 8.28543e+020
+448 299 8.27916e+020
+427 118 8.2653e+020
+182 398 8.24371e+020
+104 198 8.23013e+020
+470 421 8.228e+020
+115 43 8.2197e+020
+226 421 8.21069e+020
+534 185 8.12589e+020
+123 186 8.10272e+020
+359 220 8.07957e+020
+511 169 8.00805e+020
+511 166 7.97305e+020
+272 280 7.97215e+020
+64 318 7.95832e+020
+16 217 7.92734e+020
+116 45 7.91039e+020
+3 65 7.82525e+020
+248 399 7.73503e+020
+423 332 7.70461e+020
+580 16 7.67163e+020
+408 183 7.66811e+020
+364 250 7.6541e+020
+506 16 7.59182e+020
+209 20 7.57468e+020
+528 102 7.56864e+020
+47 26 7.54249e+020
+447 296 7.53825e+020
+66 216 7.51699e+020
+69 476 7.51168e+020
+223 433 7.50969e+020
+302 215 7.46549e+020
+58 6 7.44708e+020
+325 341 7.39262e+020
+107 44 7.39013e+020
+310 8 7.37964e+020
+480 296 7.37737e+020
+85 148 7.37646e+020
+232 125 7.3668e+020
+139 109 7.35081e+020
+126 254 7.31429e+020
+168 287 7.30664e+020
+342 264 7.30123e+020
+410 353 7.26433e+020
+544 168 7.25517e+020
+360 251 7.24341e+020
+416 9 7.22901e+020
+449 204 7.19829e+020
+73 6 7.17726e+020
+88 254 7.17307e+020
+215 71 7.13381e+020
+400 263 7.11932e+020
+284 402 7.1176e+020
+386 178 7.11483e+020
+45 339 7.06868e+020
+88 148 7.03196e+020
+327 141 6.97788e+020
+265 446 6.94396e+020
+565 42 6.94047e+020
+7 10 6.93743e+020
+436 397 6.93616e+020
+390 143 6.93473e+020
+367 144 6.93203e+020
+150 306 6.91946e+020
+436 68 6.90917e+020
+66 476 6.90377e+020
+453 204 6.88959e+020
+388 177 6.87591e+020
+36 173 6.86713e+020
+528 186 6.86083e+020
+352 321 6.85767e+020
+174 40 6.83237e+020
+387 220 6.83215e+020
+447 397 6.82882e+020
+413 256 6.81531e+020
+379 5 6.73078e+020
+143 324 6.72291e+020
+5 10 6.72268e+020
+112 392 6.70019e+020
+302 205 6.68286e+020
+165 182 6.65937e+020
+513 262 6.65676e+020
+124 197 6.65273e+020
+309 370 6.63096e+020
+457 43 6.63081e+020
+211 436 6.60232e+020
+526 38 6.58841e+020
+545 59 6.58753e+020
+211 185 6.58228e+020
+9 10 6.56737e+020
+89 213 6.56349e+020
+135 213 6.54918e+020
+169 56 6.54037e+020
+514 346 6.53625e+020
+129 75 6.53551e+020
+329 258 6.53101e+020
+470 239 6.51121e+020
+48 151 6.47537e+020
+4 46 6.46773e+020
+546 41 6.44853e+020
+345 339 6.43981e+020
+343 338 6.43142e+020
+444 118 6.41155e+020
+393 65 6.40615e+020
+136 173 6.38682e+020
+219 106 6.38373e+020
+165 327 6.3836e+020
+229 36 6.35818e+020
+159 75 6.34314e+020
+404 186 6.34049e+020
+345 264 6.33883e+020
+41 217 6.32339e+020
+448 166 6.31448e+020
+326 143 6.31331e+020
+545 2 6.31158e+020
+344 108 6.30853e+020
+101 201 6.3059e+020
+424 45 6.29797e+020
+432 276 6.27531e+020
+259 165 6.26683e+020
+303 164 6.212e+020
+389 21 6.21177e+020
+196 124 6.20869e+020
+215 280 6.20304e+020
+175 113 6.17559e+020
+360 142 6.17429e+020
+40 296 6.1725e+020
+160 139 6.1647e+020
+430 147 6.15677e+020
+110 240 6.1357e+020
+355 254 6.13503e+020
+120 185 6.12524e+020
+416 23 6.10862e+020
+269 70 6.07298e+020
+57 4 6.04873e+020
+47 98 6.02498e+020
+126 364 5.99519e+020
+455 58 5.99199e+020
+473 5 5.98803e+020
+508 454 5.97576e+020
+247 206 5.95941e+020
+409 65 5.95391e+020
+544 457 5.93751e+020
+413 162 5.93545e+020
+104 3 5.93356e+020
+10 101 5.92916e+020
+549 41 5.92226e+020
+364 104 5.89494e+020
+389 164 5.89282e+020
+32 270 5.89043e+020
+278 220 5.88782e+020
+561 461 5.88732e+020
+479 15 5.85903e+020
+452 374 5.83396e+020
+168 196 5.81425e+020
+92 213 5.78552e+020
+128 187 5.78397e+020
+158 72 5.77888e+020
+328 255 5.77768e+020
+252 423 5.7747e+020
+133 213 5.72436e+020
+407 198 5.71798e+020
+79 79 5.71755e+020
+152 306 5.71708e+020
+76 40 5.71283e+020
+93 216 5.70207e+020
+256 151 5.68603e+020
+516 17 5.67685e+020
+153 196 5.65445e+020
+62 60 5.65119e+020
+557 39 5.65089e+020
+524 186 5.64805e+020
+346 241 5.63106e+020
+453 207 5.62679e+020
+521 184 5.61816e+020
+396 262 5.61614e+020
+423 49 5.60473e+020
+371 161 5.59299e+020
+493 139 5.58844e+020
+165 179 5.58249e+020
+437 304 5.58195e+020
+143 311 5.5693e+020
+477 5 5.56613e+020
+103 77 5.56062e+020
+557 463 5.53252e+020
+236 348 5.52356e+020
+235 346 5.52106e+020
+436 70 5.51619e+020
+225 181 5.50209e+020
+500 159 5.50179e+020
+335 436 5.49779e+020
+394 294 5.49524e+020
+65 60 5.4824e+020
+541 124 5.47705e+020
+233 345 5.47688e+020
+421 46 5.47501e+020
+282 72 5.46019e+020
+346 350 5.45595e+020
+191 126 5.443e+020
+426 377 5.44234e+020
+134 96 5.42972e+020
+498 225 5.41548e+020
+313 148 5.41095e+020
+48 10 5.40995e+020
+388 17 5.40458e+020
+245 207 5.40123e+020
+293 26 5.4007e+020
+48 12 5.38266e+020
+131 95 5.37314e+020
+389 65 5.3643e+020
+380 354 5.36066e+020
+260 223 5.34469e+020
+132 74 5.32209e+020
+272 316 5.32115e+020
+432 147 5.31117e+020
+440 340 5.2983e+020
+176 260 5.29731e+020
+354 269 5.2832e+020
+516 75 5.27219e+020
+185 36 5.26738e+020
+210 35 5.26609e+020
+483 329 5.25844e+020
+246 144 5.25309e+020
+96 446 5.24552e+020
+54 66 5.23734e+020
+462 43 5.21569e+020
+111 110 5.21339e+020
+94 6 5.20403e+020
+183 36 5.19569e+020
+222 180 5.19373e+020
+488 44 5.18717e+020
+250 365 5.17562e+020
+446 8 5.175e+020
+313 150 5.16291e+020
+285 209 5.15537e+020
+263 402 5.15396e+020
+220 14 5.13605e+020
+544 7 5.10977e+020
+168 326 5.10364e+020
+332 294 5.08213e+020
+548 162 5.06591e+020
+59 184 5.05102e+020
+91 199 5.04706e+020
+57 365 5.0468e+020
+512 221 5.0381e+020
+220 17 5.03028e+020
+548 164 5.03022e+020
+329 13 5.02967e+020
+107 39 5.02011e+020
+377 120 5.0185e+020
+391 218 5.00675e+020
+218 98 4.99852e+020
+208 15 4.99534e+020
+52 42 4.99344e+020
+157 198 4.99064e+020
+163 277 4.98315e+020
+121 50 4.97943e+020
+412 298 4.97814e+020
+166 110 4.97361e+020
+329 10 4.96989e+020
+193 218 4.96988e+020
+508 6 4.96634e+020
+100 79 4.96305e+020
+436 301 4.95908e+020
+467 238 4.95425e+020
+364 101 4.94913e+020
+528 60 4.94887e+020
+333 258 4.94575e+020
+208 222 4.93642e+020
+552 380 4.93079e+020
+552 378 4.92727e+020
+186 289 4.92061e+020
+140 20 4.916e+020
+168 182 4.91057e+020
+255 139 4.87758e+020
+91 197 4.87654e+020
+305 439 4.87631e+020
+79 40 4.87124e+020
+313 84 4.85879e+020
+448 444 4.85666e+020
+24 62 4.85362e+020
+228 291 4.85145e+020
+56 66 4.84969e+020
+137 178 4.84841e+020
+57 43 4.83522e+020
+220 290 4.82792e+020
+169 18 4.82567e+020
+452 62 4.82188e+020
+344 111 4.81694e+020
+46 355 4.809e+020
+260 220 4.80701e+020
+220 180 4.79332e+020
+60 134 4.78523e+020
+102 360 4.76535e+020
+172 19 4.75938e+020
+164 73 4.74309e+020
+526 423 4.73472e+020
+121 52 4.71016e+020
+165 357 4.70944e+020
+205 16 4.70737e+020
+283 198 4.6987e+020
+69 148 4.69461e+020
+144 16 4.68613e+020
+163 110 4.66741e+020
+265 30 4.65518e+020
+139 22 4.65457e+020
+347 181 4.61854e+020
+35 267 4.59533e+020
+300 264 4.59116e+020
+482 364 4.58498e+020
+429 44 4.58348e+020
+29 30 4.55092e+020
+261 202 4.54036e+020
+156 75 4.54011e+020
+131 132 4.53476e+020
+512 100 4.5328e+020
+88 368 4.53228e+020
+486 58 4.51724e+020
+56 183 4.51486e+020
+155 235 4.50347e+020
+63 236 4.50069e+020
+134 130 4.49996e+020
+362 7 4.49577e+020
+88 208 4.49432e+020
+530 144 4.48064e+020
+358 66 4.47558e+020
+164 313 4.47002e+020
+367 300 4.46649e+020
+301 105 4.44835e+020
+365 300 4.42168e+020
+325 426 4.41933e+020
+485 44 4.41932e+020
+534 243 4.41737e+020
+88 365 4.40247e+020
+276 353 4.39894e+020
+84 144 4.39893e+020
+159 142 4.39757e+020
+333 66 4.39386e+020
+448 438 4.3927e+020
+119 115 4.39165e+020
+140 181 4.37627e+020
+65 236 4.35896e+020
+260 225 4.35102e+020
+85 73 4.3508e+020
+100 5 4.34563e+020
+279 129 4.34197e+020
+566 160 4.33717e+020
+297 69 4.33171e+020
+402 44 4.31968e+020
+482 367 4.31296e+020
+248 316 4.30278e+020
+155 317 4.29975e+020
+322 427 4.29762e+020
+213 20 4.29754e+020
+91 254 4.28738e+020
+196 190 4.2873e+020
+449 118 4.28568e+020
+436 379 4.28225e+020
+402 266 4.27477e+020
+374 3 4.27453e+020
+467 139 4.26815e+020
+437 319 4.26777e+020
+357 63 4.26011e+020
+54 222 4.24565e+020
+575 459 4.24315e+020
+514 259 4.24306e+020
+304 190 4.23836e+020
+575 13 4.23111e+020
+456 61 4.22525e+020
+386 244 4.2231e+020
+193 215 4.22275e+020
+44 98 4.22115e+020
+52 99 4.20764e+020
+450 438 4.20086e+020
+466 196 4.19983e+020
+47 81 4.19196e+020
+329 64 4.17267e+020
+484 142 4.16296e+020
+243 166 4.16289e+020
+578 43 4.15088e+020
+283 395 4.14789e+020
+41 81 4.14416e+020
+313 8 4.1435e+020
+276 328 4.14067e+020
+138 182 4.13605e+020
+253 139 4.13023e+020
+46 83 4.12735e+020
+324 294 4.12601e+020
+538 405 4.11895e+020
+498 81 4.11755e+020
+525 426 4.09947e+020
+8 46 4.0863e+020
+474 247 4.08018e+020
+541 128 4.07965e+020
+156 56 4.07293e+020
+112 344 4.05206e+020
+406 44 4.04778e+020
+404 266 4.04654e+020
+48 155 4.0369e+020
+241 420 4.01932e+020
+292 88 4.00976e+020
+414 65 4.0056e+020
+346 298 4.00516e+020
+273 181 3.99615e+020
+258 161 3.99554e+020
+166 98 3.98767e+020
+45 12 3.9842e+020
+196 84 3.98414e+020
+27 30 3.98083e+020
+295 269 3.95546e+020
+298 179 3.9501e+020
+330 144 3.94957e+020
+190 360 3.94798e+020
+324 221 3.93673e+020
+110 169 3.93255e+020
+463 27 3.92533e+020
+467 241 3.92485e+020
+482 174 3.9248e+020
+345 392 3.91497e+020
+190 350 3.91143e+020
+445 123 3.90484e+020
+399 266 3.89552e+020
+225 219 3.89465e+020
+254 9 3.89408e+020
+513 297 3.89012e+020
+329 90 3.88954e+020
+577 39 3.88421e+020
+376 118 3.88161e+020
+421 298 3.87637e+020
+190 312 3.85645e+020
+21 62 3.85174e+020
+335 218 3.85004e+020
+474 244 3.84768e+020
+165 242 3.84606e+020
+394 164 3.84311e+020
+61 369 3.81655e+020
+109 39 3.81518e+020
+33 29 3.81482e+020
+127 96 3.81137e+020
+384 261 3.81006e+020
+237 417 3.80773e+020
+432 45 3.80269e+020
+441 24 3.79856e+020
+250 34 3.7953e+020
+332 90 3.78873e+020
+354 265 3.78413e+020
+53 12 3.76982e+020
+162 169 3.76474e+020
+378 67 3.76321e+020
+330 66 3.76259e+020
+343 122 3.74713e+020
+107 429 3.74707e+020
+270 53 3.74206e+020
+542 209 3.73596e+020
+38 82 3.73302e+020
+241 195 3.72875e+020
+418 82 3.72721e+020
+271 167 3.72335e+020
+389 326 3.71143e+020
+107 76 3.71023e+020
+476 341 3.71021e+020
+203 313 3.70196e+020
+405 41 3.70074e+020
+571 446 3.70006e+020
+234 161 3.69638e+020
+102 164 3.6906e+020
+472 266 3.68817e+020
+276 331 3.68715e+020
+489 341 3.6862e+020
+117 426 3.68256e+020
+493 81 3.68236e+020
+471 212 3.67912e+020
+309 440 3.67599e+020
+165 244 3.67574e+020
+518 263 3.66751e+020
+105 222 3.6582e+020
+489 58 3.65748e+020
+539 98 3.65743e+020
+450 87 3.64915e+020
+276 320 3.64804e+020
+574 421 3.64665e+020
+125 271 3.64548e+020
+290 139 3.64446e+020
+78 199 3.636e+020
+380 67 3.63301e+020
+35 29 3.63286e+020
+412 44 3.62679e+020
+271 182 3.62657e+020
+460 267 3.62607e+020
+167 277 3.61419e+020
+110 95 3.60382e+020
+373 392 3.59987e+020
+83 134 3.59879e+020
+575 178 3.59816e+020
+120 128 3.5796e+020
+191 291 3.57849e+020
+110 179 3.5756e+020
+257 147 3.57475e+020
+237 130 3.57399e+020
+510 9 3.57252e+020
+42 10 3.56924e+020
+448 218 3.56765e+020
+168 179 3.56245e+020
+343 124 3.56213e+020
+434 89 3.55817e+020
+296 332 3.5547e+020
+50 62 3.55326e+020
+455 85 3.55074e+020
+244 294 3.54613e+020
+114 95 3.54006e+020
+86 311 3.53903e+020
+489 263 3.53842e+020
+125 259 3.53349e+020
+159 56 3.53192e+020
+238 420 3.5289e+020
+292 50 3.52515e+020
+431 319 3.49874e+020
+431 81 3.49186e+020
+326 164 3.48818e+020
+503 164 3.48419e+020
+193 16 3.47365e+020
+109 2 3.46449e+020
+269 186 3.46222e+020
+222 112 3.45462e+020
+175 20 3.45291e+020
+170 310 3.45066e+020
+510 174 3.44318e+020
+547 139 3.44155e+020
+339 164 3.43742e+020
+342 47 3.42773e+020
+433 158 3.42419e+020
+340 446 3.42409e+020
+433 280 3.4154e+020
+512 219 3.40761e+020
+378 337 3.39883e+020
+70 96 3.39726e+020
+119 130 3.39592e+020
+56 78 3.38952e+020
+326 89 3.38948e+020
+72 165 3.3871e+020
+110 166 3.38461e+020
+217 147 3.37295e+020
+131 168 3.37062e+020
+433 86 3.37033e+020
+499 460 3.3696e+020
+274 132 3.36516e+020
+466 424 3.35899e+020
+501 361 3.35859e+020
+83 476 3.35471e+020
+431 85 3.34539e+020
+124 127 3.34395e+020
+538 101 3.34258e+020
+69 420 3.33721e+020
+119 447 3.33581e+020
+141 394 3.32743e+020
+562 145 3.3271e+020
+440 379 3.31867e+020
+280 365 3.31373e+020
+159 182 3.29302e+020
+583 38 3.29163e+020
+430 222 3.28338e+020
+357 11 3.28121e+020
+437 89 3.27796e+020
+276 198 3.27741e+020
+330 213 3.27354e+020
+110 342 3.27233e+020
+529 400 3.26916e+020
+339 166 3.26229e+020
+386 327 3.26209e+020
+218 110 3.26107e+020
+218 35 3.26097e+020
+162 61 3.25698e+020
+527 190 3.2563e+020
+520 264 3.25202e+020
+162 97 3.25096e+020
+40 135 3.24634e+020
+473 42 3.24386e+020
+454 117 3.23597e+020
+86 61 3.23529e+020
+57 373 3.23321e+020
+471 269 3.23044e+020
+206 436 3.22547e+020
+273 220 3.22357e+020
+392 49 3.22163e+020
+473 203 3.2202e+020
+333 62 3.21333e+020
+196 194 3.20697e+020
+292 265 3.20692e+020
+268 295 3.20675e+020
+174 291 3.20674e+020
+10 78 3.20575e+020
+570 451 3.19671e+020
+357 282 3.19603e+020
+424 398 3.18207e+020
+528 222 3.18126e+020
+164 209 3.18069e+020
+283 391 3.17766e+020
+227 186 3.16735e+020
+569 382 3.16643e+020
+541 133 3.16461e+020
+569 161 3.15765e+020
+138 95 3.15097e+020
+38 84 3.14842e+020
+488 81 3.14669e+020
+340 391 3.14656e+020
+260 236 3.14614e+020
+501 22 3.14552e+020
+377 182 3.14421e+020
+287 165 3.14386e+020
+220 148 3.14355e+020
+132 71 3.14199e+020
+190 206 3.13667e+020
+528 362 3.13622e+020
+486 3 3.13435e+020
+472 200 3.13393e+020
+523 123 3.13243e+020
+353 294 3.1295e+020
+30 218 3.12925e+020
+345 276 3.11752e+020
+333 202 3.11635e+020
+325 258 3.11071e+020
+40 10 3.10865e+020
+53 150 3.10581e+020
+259 34 3.10328e+020
+419 66 3.09824e+020
+295 421 3.09473e+020
+349 146 3.09352e+020
+210 32 3.08597e+020
+139 99 3.08528e+020
+531 363 3.08524e+020
+118 76 3.07704e+020
+83 136 3.07434e+020
+179 165 3.06971e+020
+185 131 3.06495e+020
+523 121 3.06223e+020
+192 189 3.06026e+020
+436 280 3.059e+020
+33 219 3.05798e+020
+516 42 3.0576e+020
+298 274 3.05399e+020
+286 297 3.05068e+020
+174 311 3.05053e+020
+217 425 3.04959e+020
+442 240 3.04411e+020
+107 108 3.03993e+020
+514 381 3.03814e+020
+205 309 3.0368e+020
+153 112 3.03635e+020
+287 397 3.02962e+020
+229 288 3.02909e+020
+503 261 3.0248e+020
+405 376 3.01992e+020
+434 162 3.01233e+020
+122 271 3.01222e+020
+436 240 3.00944e+020
+110 136 3.00898e+020
+91 290 3.00576e+020
+58 76 3.00394e+020
+191 210 3.00335e+020
+349 88 2.99564e+020
+213 32 2.99422e+020
+577 245 2.99365e+020
+296 274 2.99137e+020
+501 143 2.99092e+020
+309 367 2.99066e+020
+96 22 2.98977e+020
+481 83 2.98925e+020
+182 343 2.98833e+020
+50 288 2.98659e+020
+543 163 2.9859e+020
+145 161 2.98586e+020
+58 255 2.98256e+020
+131 147 2.98209e+020
+196 255 2.98018e+020
+111 262 2.97622e+020
+85 35 2.96355e+020
+79 474 2.95955e+020
+104 306 2.95791e+020
+274 130 2.95088e+020
+332 413 2.93767e+020
+113 2 2.9366e+020
+248 293 2.93591e+020
+499 22 2.934e+020
+392 21 2.93042e+020
+340 122 2.92098e+020
+279 132 2.91467e+020
+337 264 2.91132e+020
+270 290 2.9063e+020
+479 403 2.90556e+020
+378 107 2.89825e+020
+544 440 2.89373e+020
+20 286 2.88901e+020
+413 247 2.8887e+020
+182 20 2.88715e+020
+443 451 2.88693e+020
+94 22 2.88673e+020
+482 451 2.87934e+020
+435 225 2.87693e+020
+161 185 2.8741e+020
+437 468 2.86864e+020
+191 329 2.86574e+020
+20 317 2.8627e+020
+488 84 2.8619e+020
+324 15 2.85781e+020
+18 343 2.8514e+020
+424 201 2.84301e+020
+280 204 2.84138e+020
+337 163 2.83839e+020
+158 112 2.836e+020
+186 20 2.83381e+020
+176 165 2.82957e+020
+247 219 2.82775e+020
+459 304 2.82665e+020
+432 381 2.82618e+020
+345 47 2.82091e+020
+580 345 2.81357e+020
+381 123 2.81241e+020
+192 145 2.81059e+020
+178 329 2.80873e+020
+265 311 2.80844e+020
+282 204 2.8078e+020
+364 180 2.80305e+020
+221 151 2.79982e+020
+432 270 2.7981e+020
+306 259 2.79447e+020
+392 160 2.78916e+020
+149 302 2.78842e+020
+154 295 2.78757e+020
+41 355 2.78669e+020
+468 204 2.78662e+020
+278 144 2.7811e+020
+273 295 2.77785e+020
+190 357 2.7769e+020
+468 208 2.77652e+020
+572 405 2.77634e+020
+214 94 2.77621e+020
+91 60 2.77291e+020
+419 284 2.77119e+020
+276 360 2.771e+020
+381 121 2.76772e+020
+86 63 2.76705e+020
+563 323 2.76511e+020
+587 17 2.76314e+020
+260 238 2.75439e+020
+485 84 2.75206e+020
+174 92 2.75168e+020
+470 121 2.74246e+020
+164 206 2.74108e+020
+77 165 2.73968e+020
+173 239 2.73626e+020
+459 264 2.73581e+020
+215 96 2.73521e+020
+281 438 2.7351e+020
+494 60 2.72982e+020
+493 340 2.72833e+020
+196 132 2.72786e+020
+164 115 2.7276e+020
+198 132 2.72613e+020
+186 95 2.72118e+020
+231 199 2.71623e+020
+444 114 2.71494e+020
+362 369 2.71367e+020
+157 91 2.71054e+020
+272 170 2.70936e+020
+280 198 2.70473e+020
+470 63 2.70265e+020
+327 181 2.69993e+020
+319 187 2.69582e+020
+44 134 2.69504e+020
+340 124 2.68822e+020
+537 394 2.68607e+020
+74 475 2.68573e+020
+104 304 2.68404e+020
+569 422 2.68154e+020
+167 116 2.67853e+020
+264 389 2.67292e+020
+363 357 2.6729e+020
+166 20 2.66588e+020
+458 115 2.66462e+020
+332 409 2.66321e+020
+337 62 2.66311e+020
+265 16 2.65869e+020
+572 178 2.65544e+020
+90 375 2.65532e+020
+258 368 2.64981e+020
+389 53 2.64721e+020
+261 368 2.6468e+020
+234 199 2.64582e+020
+182 290 2.64445e+020
+500 263 2.64285e+020
+272 285 2.64232e+020
+33 110 2.64056e+020
+85 38 2.63917e+020
+527 347 2.63848e+020
+359 53 2.63838e+020
+547 218 2.63678e+020
+388 97 2.63674e+020
+319 185 2.63674e+020
+406 14 2.63615e+020
+472 63 2.6349e+020
+266 20 2.63406e+020
+462 22 2.63367e+020
+180 291 2.62032e+020
+333 334 2.62008e+020
+335 390 2.61729e+020
+120 218 2.61152e+020
+454 102 2.60947e+020
+110 133 2.60943e+020
+120 216 2.60767e+020
+279 52 2.60248e+020
+333 332 2.60016e+020
+355 342 2.59925e+020
+67 254 2.59835e+020
+372 86 2.5973e+020
+371 90 2.59622e+020
+242 192 2.59604e+020
+108 138 2.59258e+020
+329 353 2.59246e+020
+482 440 2.59087e+020
+280 136 2.58996e+020
+9 233 2.58981e+020
+380 107 2.58758e+020
+566 180 2.58747e+020
+218 115 2.58151e+020
+38 287 2.57818e+020
+156 95 2.5772e+020
+102 28 2.57653e+020
+48 234 2.57193e+020
+74 477 2.57165e+020
+499 463 2.56962e+020
+167 118 2.56915e+020
+282 419 2.5661e+020
+342 141 2.56475e+020
+478 243 2.56347e+020
+103 237 2.56197e+020
+305 194 2.56032e+020
+357 166 2.55847e+020
+183 380 2.55675e+020
+417 165 2.55491e+020
+37 200 2.55402e+020
+391 53 2.55389e+020
+242 30 2.5535e+020
+183 95 2.55112e+020
+318 459 2.54896e+020
+220 184 2.5489e+020
+261 233 2.54781e+020
+46 133 2.54629e+020
+49 255 2.54179e+020
+262 285 2.53965e+020
+256 200 2.53924e+020
+70 130 2.53819e+020
+434 382 2.53749e+020
+313 77 2.5372e+020
+336 446 2.53614e+020
+353 297 2.53577e+020
+524 399 2.5335e+020
+471 83 2.53269e+020
+591 18 2.5307e+020
+130 478 2.52892e+020
+179 168 2.52529e+020
+216 175 2.52335e+020
+480 440 2.52235e+020
+405 11 2.52127e+020
+22 48 2.51966e+020
+451 24 2.51508e+020
+452 22 2.5141e+020
+214 175 2.51391e+020
+88 372 2.51123e+020
+229 282 2.50534e+020
+45 218 2.50532e+020
+405 82 2.50347e+020
+529 397 2.50312e+020
+394 215 2.50147e+020
+442 356 2.501e+020
+150 112 2.49133e+020
+21 320 2.48922e+020
+189 144 2.48566e+020
+181 131 2.48267e+020
+318 461 2.48158e+020
+510 83 2.4796e+020
+204 161 2.47702e+020
+36 287 2.4768e+020
+91 276 2.47172e+020
+306 364 2.46973e+020
+387 124 2.46541e+020
+345 342 2.46095e+020
+277 201 2.4595e+020
+105 165 2.45841e+020
+404 277 2.45769e+020
+242 281 2.45512e+020
+215 124 2.45108e+020
+456 177 2.45032e+020
+283 52 2.44726e+020
+301 332 2.44519e+020
+222 116 2.44366e+020
+575 100 2.44264e+020
+387 127 2.44212e+020
+503 156 2.43962e+020
+389 330 2.43759e+020
+578 53 2.43605e+020
+242 33 2.43338e+020
+83 171 2.43282e+020
+117 306 2.43109e+020
+255 36 2.43027e+020
+160 21 2.42846e+020
+528 429 2.42771e+020
+306 449 2.42766e+020
+565 323 2.42704e+020
+55 145 2.42268e+020
+110 182 2.42176e+020
+17 434 2.41976e+020
+527 344 2.41935e+020
+562 225 2.41712e+020
+188 308 2.41394e+020
+147 449 2.41271e+020
+178 273 2.40821e+020
+51 39 2.40612e+020
+107 182 2.40494e+020
+181 380 2.40294e+020
+494 158 2.4012e+020
+500 266 2.40015e+020
+337 367 2.40014e+020
+87 198 2.39849e+020
+298 410 2.39687e+020
+189 18 2.39346e+020
+440 456 2.39295e+020
+401 275 2.38778e+020
+511 351 2.37841e+020
+538 186 2.37827e+020
+53 358 2.37346e+020
+525 347 2.37232e+020
+33 164 2.36844e+020
+188 108 2.36844e+020
+420 53 2.36798e+020
+561 142 2.36755e+020
+335 415 2.36193e+020
+187 265 2.36052e+020
+56 170 2.36008e+020
+47 218 2.35888e+020
+209 395 2.35644e+020
+238 34 2.35601e+020
+137 136 2.35201e+020
+180 154 2.34878e+020
+537 93 2.34734e+020
+379 127 2.34598e+020
+505 454 2.34444e+020
+570 455 2.34215e+020
+494 160 2.33936e+020
+483 79 2.33759e+020
+374 338 2.32307e+020
+128 127 2.32176e+020
+537 262 2.32119e+020
+97 28 2.31927e+020
+362 244 2.31692e+020
+282 268 2.31013e+020
+468 28 2.30723e+020
+437 391 2.3049e+020
+250 220 2.30482e+020
+57 70 2.30244e+020
+7 15 2.30056e+020
+294 141 2.29493e+020
+455 162 2.29083e+020
+48 162 2.28822e+020
+402 6 2.28729e+020
+525 344 2.28697e+020
+563 320 2.28627e+020
+351 255 2.2841e+020
+506 361 2.28175e+020
+450 177 2.27726e+020
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_3_3.txt b/test_data/harriscorners/hc_msc_0.00_0.10_3_3.txt
new file mode 100644
index 0000000..030705e
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_3_3.txt
@@ -0,0 +1,2431 @@
+2430
+449 298 5.04554e+011
+499 1 4.07727e+011
+329 127 3.75398e+011
+388 178 3.36537e+011
+421 183 3.36519e+011
+401 261 3.35327e+011
+535 242 2.99733e+011
+213 72 2.99069e+011
+321 313 2.89276e+011
+75 236 2.88936e+011
+66 320 2.85654e+011
+553 41 2.83848e+011
+121 44 2.78038e+011
+544 170 2.76288e+011
+363 401 2.6411e+011
+385 221 2.63728e+011
+135 215 2.63626e+011
+89 197 2.61697e+011
+447 397 2.60936e+011
+436 68 2.60855e+011
+274 366 2.56453e+011
+200 18 2.55751e+011
+159 143 2.52659e+011
+365 200 2.51092e+011
+449 219 2.49467e+011
+45 26 2.4622e+011
+173 312 2.41696e+011
+456 281 2.31812e+011
+286 296 2.2879e+011
+545 217 2.28483e+011
+137 208 2.28324e+011
+215 72 2.27934e+011
+515 77 2.26533e+011
+273 289 2.1845e+011
+245 94 2.15661e+011
+412 256 2.15568e+011
+144 309 2.14854e+011
+256 386 2.14098e+011
+296 420 2.13989e+011
+223 38 2.13416e+011
+34 138 2.13301e+011
+282 115 2.1232e+011
+449 403 2.12179e+011
+301 175 2.1172e+011
+312 149 2.10551e+011
+125 255 2.0665e+011
+299 54 2.06455e+011
+448 263 2.06246e+011
+396 319 2.04666e+011
+364 298 2.03605e+011
+3 47 2.02005e+011
+59 185 2.01928e+011
+508 18 2.01265e+011
+221 16 2.01168e+011
+344 10 1.99666e+011
+121 42 1.99338e+011
+471 240 1.97349e+011
+174 238 1.94781e+011
+455 3 1.94671e+011
+175 94 1.9415e+011
+173 94 1.93306e+011
+317 385 1.93239e+011
+524 263 1.92542e+011
+126 162 1.9193e+011
+242 203 1.90807e+011
+378 317 1.89262e+011
+246 143 1.877e+011
+82 27 1.86709e+011
+59 74 1.86456e+011
+486 22 1.86418e+011
+184 35 1.85665e+011
+426 320 1.84888e+011
+522 263 1.84003e+011
+124 362 1.83778e+011
+177 260 1.82987e+011
+293 120 1.82413e+011
+417 7 1.82238e+011
+419 7 1.80526e+011
+480 298 1.80386e+011
+253 138 1.79716e+011
+113 213 1.794e+011
+211 56 1.78294e+011
+197 57 1.77996e+011
+317 336 1.7759e+011
+66 344 1.77078e+011
+210 54 1.76535e+011
+140 184 1.74181e+011
+64 235 1.73301e+011
+489 264 1.73174e+011
+207 223 1.72592e+011
+348 179 1.71986e+011
+380 68 1.70339e+011
+508 122 1.68457e+011
+419 163 1.68133e+011
+301 177 1.67008e+011
+507 165 1.6638e+011
+555 40 1.65746e+011
+110 238 1.65494e+011
+36 269 1.63233e+011
+120 4 1.61874e+011
+240 202 1.61681e+011
+236 163 1.61539e+011
+303 184 1.60471e+011
+382 8 1.60454e+011
+112 4 1.57348e+011
+359 168 1.56531e+011
+71 148 1.56429e+011
+200 16 1.55561e+011
+425 262 1.54722e+011
+240 90 1.54675e+011
+287 342 1.54341e+011
+556 182 1.53976e+011
+48 219 1.52688e+011
+423 180 1.52471e+011
+464 241 1.51706e+011
+46 219 1.5127e+011
+484 59 1.50804e+011
+66 234 1.50501e+011
+360 315 1.50169e+011
+308 372 1.49754e+011
+394 319 1.4932e+011
+251 13 1.4912e+011
+270 241 1.49046e+011
+277 181 1.48482e+011
+282 403 1.48461e+011
+412 162 1.46711e+011
+301 164 1.4665e+011
+92 214 1.46278e+011
+407 64 1.46022e+011
+569 40 1.4558e+011
+303 207 1.45061e+011
+124 199 1.43843e+011
+263 202 1.43568e+011
+265 201 1.43511e+011
+406 375 1.43247e+011
+137 210 1.42536e+011
+287 344 1.41978e+011
+91 198 1.41852e+011
+183 401 1.4181e+011
+524 199 1.41612e+011
+455 83 1.39631e+011
+279 370 1.37936e+011
+254 140 1.37738e+011
+370 107 1.37705e+011
+270 60 1.37567e+011
+313 75 1.37535e+011
+87 197 1.37488e+011
+511 342 1.37393e+011
+371 82 1.36872e+011
+205 202 1.35859e+011
+114 344 1.35729e+011
+271 290 1.35154e+011
+275 181 1.35144e+011
+543 364 1.34488e+011
+543 58 1.34444e+011
+230 266 1.33725e+011
+170 19 1.33638e+011
+236 19 1.33425e+011
+530 184 1.33383e+011
+224 221 1.33269e+011
+373 116 1.33078e+011
+279 296 1.32396e+011
+79 3 1.32053e+011
+473 63 1.32025e+011
+467 123 1.32002e+011
+272 166 1.31814e+011
+105 62 1.31267e+011
+572 142 1.31246e+011
+360 335 1.31026e+011
+10 102 1.30292e+011
+381 164 1.30093e+011
+325 88 1.30076e+011
+49 99 1.29854e+011
+261 165 1.29412e+011
+365 7 1.29405e+011
+102 5 1.28847e+011
+391 47 1.28716e+011
+208 434 1.28658e+011
+340 9 1.28475e+011
+526 101 1.27849e+011
+203 17 1.27659e+011
+359 294 1.27282e+011
+236 74 1.26918e+011
+415 251 1.26633e+011
+382 162 1.25891e+011
+192 276 1.25578e+011
+87 78 1.25374e+011
+446 264 1.25341e+011
+28 236 1.25329e+011
+185 19 1.25198e+011
+390 58 1.2442e+011
+510 172 1.24365e+011
+401 184 1.24207e+011
+386 126 1.2418e+011
+537 242 1.23885e+011
+423 182 1.23878e+011
+125 261 1.23794e+011
+449 397 1.23603e+011
+278 352 1.23569e+011
+234 72 1.23161e+011
+496 119 1.23082e+011
+114 3 1.22827e+011
+407 337 1.22377e+011
+415 253 1.22367e+011
+392 144 1.21695e+011
+575 126 1.20226e+011
+338 473 1.20214e+011
+478 16 1.19172e+011
+365 259 1.19104e+011
+538 95 1.18726e+011
+64 371 1.18653e+011
+192 331 1.18434e+011
+560 229 1.1773e+011
+282 111 1.17631e+011
+240 349 1.17625e+011
+433 146 1.1742e+011
+341 337 1.17374e+011
+463 198 1.17028e+011
+445 23 1.16965e+011
+124 365 1.16715e+011
+220 37 1.16572e+011
+161 238 1.15373e+011
+525 346 1.15339e+011
+525 223 1.15194e+011
+352 146 1.15046e+011
+131 36 1.15034e+011
+57 29 1.14347e+011
+424 376 1.1432e+011
+257 89 1.14213e+011
+88 256 1.14198e+011
+355 320 1.14108e+011
+82 77 1.14077e+011
+207 225 1.13916e+011
+387 319 1.13897e+011
+518 183 1.13671e+011
+264 440 1.13441e+011
+380 26 1.13403e+011
+238 74 1.13347e+011
+266 53 1.13105e+011
+387 295 1.1294e+011
+163 208 1.12815e+011
+469 240 1.12663e+011
+38 296 1.12419e+011
+203 310 1.12287e+011
+271 278 1.12226e+011
+513 93 1.12135e+011
+558 19 1.12114e+011
+313 222 1.1201e+011
+487 3 1.11917e+011
+507 60 1.11859e+011
+307 439 1.11766e+011
+562 149 1.11477e+011
+562 478 1.11323e+011
+465 198 1.10929e+011
+28 8 1.10708e+011
+461 279 1.10699e+011
+530 62 1.10382e+011
+479 81 1.1029e+011
+35 300 1.1018e+011
+128 1 1.10153e+011
+384 162 1.09931e+011
+275 216 1.09854e+011
+80 474 1.09848e+011
+224 183 1.09497e+011
+512 99 1.0926e+011
+363 250 1.08312e+011
+556 244 1.0816e+011
+97 79 1.07589e+011
+161 144 1.07392e+011
+411 355 1.06727e+011
+260 273 1.06431e+011
+166 20 1.06156e+011
+433 319 1.05924e+011
+22 219 1.05915e+011
+512 165 1.05699e+011
+192 124 1.05642e+011
+411 5 1.05595e+011
+392 353 1.05571e+011
+376 84 1.05496e+011
+361 131 1.05445e+011
+103 61 1.05327e+011
+353 127 1.0531e+011
+461 340 1.05299e+011
+342 123 1.04859e+011
+299 70 1.04827e+011
+153 217 1.04714e+011
+443 23 1.04529e+011
+330 164 1.04399e+011
+207 436 1.04378e+011
+220 100 1.04266e+011
+326 427 1.04233e+011
+140 173 1.04032e+011
+273 130 1.03921e+011
+282 221 1.03593e+011
+553 384 1.03565e+011
+324 166 1.03551e+011
+32 269 1.03177e+011
+319 202 1.03133e+011
+448 138 1.02919e+011
+244 72 1.02366e+011
+404 120 1.02097e+011
+477 182 1.01998e+011
+68 27 1.01955e+011
+46 90 1.01845e+011
+62 60 1.01583e+011
+297 296 1.01534e+011
+479 181 1.01475e+011
+59 76 1.01226e+011
+381 411 1.01161e+011
+376 7 1.01151e+011
+259 236 1.00896e+011
+387 167 1.00826e+011
+36 174 1.00826e+011
+212 183 1.00529e+011
+139 58 1.00081e+011
+342 464 1.00046e+011
+221 181 9.97512e+010
+420 178 9.97491e+010
+404 122 9.97177e+010
+160 112 9.96391e+010
+31 8 9.89387e+010
+419 180 9.89268e+010
+164 241 9.87254e+010
+202 313 9.85097e+010
+364 255 9.83731e+010
+110 96 9.82522e+010
+382 338 9.81072e+010
+229 292 9.80636e+010
+277 332 9.79954e+010
+160 183 9.78336e+010
+579 18 9.78298e+010
+283 71 9.77182e+010
+512 201 9.74478e+010
+77 81 9.74338e+010
+332 130 9.70376e+010
+560 60 9.70221e+010
+36 147 9.70119e+010
+428 320 9.69809e+010
+276 222 9.69285e+010
+497 64 9.66032e+010
+528 361 9.62036e+010
+287 165 9.61592e+010
+169 238 9.61476e+010
+163 276 9.60221e+010
+244 164 9.56671e+010
+422 323 9.55472e+010
+300 265 9.55346e+010
+108 325 9.53743e+010
+224 419 9.51685e+010
+498 119 9.49938e+010
+35 176 9.48098e+010
+177 106 9.47605e+010
+401 182 9.46336e+010
+352 161 9.46332e+010
+276 393 9.45802e+010
+530 193 9.45619e+010
+521 122 9.43579e+010
+55 28 9.43136e+010
+240 366 9.42899e+010
+331 107 9.4275e+010
+550 380 9.41821e+010
+88 148 9.41802e+010
+412 23 9.41042e+010
+468 125 9.34111e+010
+127 76 9.33655e+010
+260 250 9.31593e+010
+174 114 9.3115e+010
+112 393 9.31024e+010
+532 268 9.28613e+010
+374 163 9.28157e+010
+13 206 9.27915e+010
+27 220 9.27087e+010
+77 256 9.26955e+010
+389 139 9.26014e+010
+451 101 9.232e+010
+162 213 9.22491e+010
+155 235 9.21113e+010
+167 239 9.20385e+010
+48 97 9.20351e+010
+111 241 9.19553e+010
+509 455 9.19396e+010
+56 31 9.19024e+010
+580 52 9.1805e+010
+148 396 9.17862e+010
+312 81 9.17072e+010
+535 267 9.16188e+010
+372 163 9.15114e+010
+282 119 9.12799e+010
+481 82 9.11771e+010
+483 339 9.11678e+010
+413 100 9.11027e+010
+410 162 9.10248e+010
+96 447 9.08206e+010
+54 6 9.08138e+010
+215 144 9.07712e+010
+513 340 9.07289e+010
+293 25 9.0728e+010
+509 361 9.03524e+010
+313 86 9.03318e+010
+355 220 9.02845e+010
+565 60 9.01922e+010
+408 352 9.00006e+010
+112 56 8.99509e+010
+100 78 8.96467e+010
+250 313 8.9639e+010
+141 22 8.9472e+010
+223 114 8.92316e+010
+351 339 8.91511e+010
+225 180 8.87353e+010
+230 36 8.87162e+010
+361 296 8.87152e+010
+192 359 8.87122e+010
+554 201 8.86025e+010
+396 161 8.8586e+010
+422 44 8.85123e+010
+542 18 8.84926e+010
+212 437 8.83993e+010
+266 14 8.83091e+010
+59 219 8.82592e+010
+315 165 8.8166e+010
+264 298 8.79603e+010
+400 273 8.7912e+010
+277 370 8.78776e+010
+49 159 8.78764e+010
+136 202 8.75052e+010
+419 165 8.73718e+010
+537 267 8.71337e+010
+484 375 8.70552e+010
+226 295 8.68654e+010
+315 160 8.67997e+010
+520 183 8.6586e+010
+124 162 8.65106e+010
+67 47 8.64642e+010
+130 2 8.63083e+010
+465 394 8.62799e+010
+285 240 8.61948e+010
+169 55 8.61301e+010
+394 158 8.60607e+010
+561 321 8.59867e+010
+228 184 8.59493e+010
+22 60 8.57392e+010
+281 296 8.56227e+010
+395 260 8.55888e+010
+174 57 8.54862e+010
+571 161 8.52825e+010
+402 276 8.51305e+010
+164 243 8.50226e+010
+387 242 8.50049e+010
+55 66 8.50009e+010
+304 193 8.49231e+010
+528 359 8.48717e+010
+184 138 8.48222e+010
+161 256 8.48144e+010
+243 189 8.46568e+010
+478 12 8.4643e+010
+303 156 8.46414e+010
+529 104 8.45622e+010
+426 119 8.45539e+010
+225 72 8.44585e+010
+166 96 8.44234e+010
+524 21 8.44043e+010
+189 214 8.40048e+010
+111 134 8.3873e+010
+295 296 8.38457e+010
+186 342 8.36244e+010
+300 245 8.36105e+010
+366 298 8.35457e+010
+329 9 8.35398e+010
+359 162 8.34257e+010
+239 18 8.29594e+010
+561 227 8.29521e+010
+529 32 8.29122e+010
+142 183 8.28845e+010
+371 393 8.28726e+010
+560 19 8.28661e+010
+469 237 8.28026e+010
+338 391 8.27688e+010
+333 89 8.27327e+010
+118 61 8.27253e+010
+434 148 8.26064e+010
+389 327 8.25928e+010
+362 370 8.2567e+010
+494 456 8.25262e+010
+312 77 8.25049e+010
+559 227 8.23493e+010
+441 98 8.22929e+010
+234 161 8.22684e+010
+76 7 8.22224e+010
+342 37 8.21299e+010
+177 166 8.19247e+010
+462 267 8.18806e+010
+136 212 8.17277e+010
+219 291 8.17063e+010
+108 44 8.1705e+010
+49 152 8.1529e+010
+527 40 8.13949e+010
+512 168 8.11655e+010
+285 404 8.11491e+010
+317 165 8.11293e+010
+482 365 8.10454e+010
+162 20 8.10169e+010
+118 59 8.09185e+010
+170 117 8.08452e+010
+572 121 8.05502e+010
+131 217 8.05018e+010
+490 342 8.04952e+010
+424 47 8.04859e+010
+44 219 8.03739e+010
+508 82 8.03353e+010
+320 224 7.99513e+010
+451 82 7.99017e+010
+290 183 7.98767e+010
+383 146 7.98738e+010
+474 262 7.9848e+010
+199 86 7.97764e+010
+82 75 7.96847e+010
+292 15 7.96816e+010
+546 42 7.96231e+010
+221 114 7.92578e+010
+371 67 7.9222e+010
+503 265 7.91745e+010
+404 338 7.91158e+010
+281 49 7.91141e+010
+542 210 7.91099e+010
+118 96 7.89898e+010
+150 114 7.89292e+010
+544 210 7.88954e+010
+294 15 7.88478e+010
+264 445 7.87252e+010
+271 51 7.86321e+010
+115 76 7.84417e+010
+85 476 7.823e+010
+355 106 7.82064e+010
+109 340 7.80292e+010
+43 62 7.78603e+010
+540 40 7.78369e+010
+73 185 7.7823e+010
+234 261 7.77446e+010
+329 107 7.76536e+010
+435 182 7.75998e+010
+91 291 7.75289e+010
+189 180 7.75145e+010
+92 21 7.71643e+010
+487 357 7.7109e+010
+419 441 7.7079e+010
+496 80 7.70524e+010
+180 394 7.70036e+010
+419 167 7.68721e+010
+96 125 7.67389e+010
+466 40 7.67234e+010
+234 346 7.65967e+010
+356 267 7.65349e+010
+500 42 7.6507e+010
+77 83 7.63295e+010
+569 38 7.62867e+010
+265 72 7.62756e+010
+434 398 7.62461e+010
+330 202 7.61434e+010
+436 339 7.61109e+010
+508 5 7.60091e+010
+116 43 7.58578e+010
+153 446 7.57023e+010
+101 58 7.55788e+010
+130 77 7.55293e+010
+137 98 7.55263e+010
+474 202 7.53947e+010
+217 279 7.5356e+010
+421 6 7.51661e+010
+541 13 7.51263e+010
+387 10 7.50733e+010
+150 151 7.49936e+010
+439 149 7.4875e+010
+478 21 7.48076e+010
+367 7 7.48039e+010
+232 200 7.47637e+010
+508 141 7.47561e+010
+71 410 7.46217e+010
+292 28 7.45966e+010
+184 184 7.45321e+010
+172 449 7.45079e+010
+286 209 7.44518e+010
+507 204 7.4444e+010
+109 60 7.44351e+010
+511 128 7.44285e+010
+486 58 7.43601e+010
+241 58 7.43289e+010
+102 358 7.42632e+010
+546 182 7.41347e+010
+347 350 7.41241e+010
+458 265 7.3929e+010
+339 164 7.39288e+010
+182 111 7.38933e+010
+277 137 7.38723e+010
+398 357 7.3856e+010
+285 211 7.38486e+010
+446 352 7.37987e+010
+132 130 7.3581e+010
+379 107 7.35189e+010
+157 93 7.34533e+010
+29 28 7.33232e+010
+78 196 7.32732e+010
+267 131 7.32229e+010
+134 72 7.3165e+010
+100 221 7.31232e+010
+336 426 7.30698e+010
+528 184 7.30256e+010
+526 171 7.30032e+010
+358 127 7.27265e+010
+163 108 7.26795e+010
+498 158 7.26449e+010
+537 140 7.259e+010
+110 136 7.24258e+010
+419 439 7.2302e+010
+507 178 7.22742e+010
+58 254 7.22225e+010
+398 319 7.21826e+010
+223 239 7.21714e+010
+163 168 7.21315e+010
+133 427 7.21085e+010
+266 259 7.2022e+010
+303 209 7.20171e+010
+32 218 7.19739e+010
+210 154 7.19288e+010
+57 331 7.19019e+010
+273 71 7.18713e+010
+72 97 7.18155e+010
+363 182 7.17458e+010
+388 282 7.17005e+010
+434 339 7.16845e+010
+350 323 7.1616e+010
+439 181 7.15619e+010
+184 342 7.13035e+010
+529 191 7.12885e+010
+304 363 7.12441e+010
+25 200 7.12138e+010
+258 34 7.11732e+010
+418 178 7.11162e+010
+478 4 7.09366e+010
+536 138 7.08746e+010
+116 391 7.08565e+010
+550 183 7.07057e+010
+36 298 7.05856e+010
+52 290 7.05075e+010
+113 356 7.03794e+010
+545 5 7.01509e+010
+438 123 7.01192e+010
+110 265 7.00213e+010
+236 92 7.00083e+010
+191 217 7.00029e+010
+162 128 6.99705e+010
+214 57 6.99568e+010
+537 459 6.99478e+010
+367 144 6.99167e+010
+474 23 6.97336e+010
+139 204 6.9595e+010
+510 300 6.95891e+010
+96 148 6.95685e+010
+271 71 6.95663e+010
+467 196 6.94538e+010
+324 143 6.94239e+010
+236 221 6.94108e+010
+269 105 6.92813e+010
+479 451 6.92599e+010
+474 245 6.92075e+010
+498 82 6.91772e+010
+187 109 6.90696e+010
+129 429 6.90055e+010
+390 161 6.89598e+010
+137 128 6.89377e+010
+217 208 6.89148e+010
+594 19 6.88737e+010
+140 325 6.87943e+010
+306 88 6.86741e+010
+143 187 6.86502e+010
+161 124 6.85829e+010
+358 336 6.85213e+010
+24 65 6.85044e+010
+63 8 6.84224e+010
+484 361 6.80761e+010
+411 46 6.80585e+010
+479 179 6.77973e+010
+579 50 6.77914e+010
+262 393 6.77717e+010
+164 359 6.77019e+010
+18 342 6.76148e+010
+197 130 6.75564e+010
+82 135 6.74757e+010
+473 239 6.74519e+010
+94 216 6.74458e+010
+327 320 6.74068e+010
+445 126 6.73134e+010
+37 61 6.72848e+010
+59 289 6.72722e+010
+240 73 6.7247e+010
+34 298 6.72183e+010
+267 31 6.72099e+010
+432 112 6.71839e+010
+454 340 6.69924e+010
+430 1 6.69291e+010
+41 297 6.69278e+010
+162 216 6.66485e+010
+35 144 6.66079e+010
+172 202 6.65807e+010
+249 33 6.65598e+010
+217 55 6.63041e+010
+543 130 6.62648e+010
+418 85 6.62402e+010
+272 296 6.61627e+010
+363 355 6.60954e+010
+153 299 6.60467e+010
+486 84 6.60145e+010
+111 41 6.58936e+010
+445 453 6.58109e+010
+274 206 6.58043e+010
+39 310 6.57864e+010
+335 240 6.57771e+010
+451 375 6.55314e+010
+263 71 6.54357e+010
+196 192 6.53771e+010
+369 338 6.53081e+010
+217 126 6.5216e+010
+85 196 6.50856e+010
+328 165 6.50741e+010
+182 201 6.50443e+010
+449 178 6.49821e+010
+347 392 6.48937e+010
+179 18 6.48208e+010
+512 221 6.48139e+010
+515 2 6.48094e+010
+436 387 6.47798e+010
+292 311 6.47645e+010
+287 34 6.4761e+010
+390 19 6.47541e+010
+521 61 6.47157e+010
+152 308 6.45746e+010
+219 126 6.44779e+010
+540 165 6.43752e+010
+135 237 6.43375e+010
+423 5 6.43064e+010
+139 2 6.42833e+010
+443 320 6.41949e+010
+269 51 6.41608e+010
+209 136 6.40992e+010
+543 252 6.39948e+010
+250 364 6.39832e+010
+246 294 6.3981e+010
+550 383 6.38347e+010
+268 14 6.37019e+010
+117 76 6.3699e+010
+525 40 6.36812e+010
+138 111 6.36604e+010
+569 203 6.36576e+010
+513 122 6.36116e+010
+502 143 6.35844e+010
+577 178 6.35279e+010
+2 155 6.35214e+010
+59 28 6.34978e+010
+452 161 6.33621e+010
+263 167 6.33419e+010
+158 1 6.31293e+010
+58 103 6.31041e+010
+166 114 6.30844e+010
+259 142 6.3038e+010
+492 182 6.30233e+010
+293 333 6.29949e+010
+375 299 6.29832e+010
+166 287 6.29146e+010
+165 202 6.27668e+010
+175 2 6.2739e+010
+292 147 6.27251e+010
+6 9 6.27169e+010
+542 42 6.26363e+010
+76 96 6.25514e+010
+83 3 6.24984e+010
+276 391 6.24903e+010
+270 55 6.2459e+010
+89 199 6.24567e+010
+462 394 6.24137e+010
+5 66 6.23652e+010
+497 342 6.22781e+010
+446 145 6.22278e+010
+432 83 6.20653e+010
+396 104 6.20615e+010
+188 146 6.20355e+010
+604 121 6.20124e+010
+259 221 6.19953e+010
+452 205 6.19166e+010
+278 189 6.19141e+010
+544 91 6.17918e+010
+228 289 6.17888e+010
+261 329 6.17741e+010
+187 216 6.17589e+010
+460 395 6.17459e+010
+261 297 6.1735e+010
+484 180 6.17198e+010
+429 181 6.16834e+010
+40 217 6.15611e+010
+194 110 6.14888e+010
+358 143 6.14019e+010
+344 166 6.13622e+010
+573 333 6.13081e+010
+179 274 6.12469e+010
+243 205 6.12066e+010
+355 13 6.12033e+010
+317 107 6.12025e+010
+404 261 6.11655e+010
+360 260 6.11645e+010
+345 241 6.10605e+010
+353 106 6.10569e+010
+171 56 6.09095e+010
+390 141 6.08761e+010
+497 229 6.07819e+010
+504 360 6.07497e+010
+511 205 6.06684e+010
+213 123 6.05501e+010
+203 347 6.05142e+010
+161 133 6.03611e+010
+202 392 6.03208e+010
+270 66 6.02802e+010
+138 202 6.02704e+010
+220 151 6.02187e+010
+124 272 6.0204e+010
+498 68 6.01724e+010
+175 106 6.0097e+010
+518 163 6.00892e+010
+244 217 6.0073e+010
+208 154 6.0012e+010
+306 362 5.9983e+010
+254 74 5.9905e+010
+133 238 5.98677e+010
+208 421 5.98129e+010
+513 44 5.9765e+010
+395 354 5.97634e+010
+561 225 5.96538e+010
+480 128 5.96397e+010
+449 83 5.96372e+010
+340 12 5.95599e+010
+274 281 5.95573e+010
+360 216 5.9555e+010
+479 263 5.95456e+010
+515 18 5.94393e+010
+565 18 5.94356e+010
+183 133 5.94315e+010
+93 255 5.93843e+010
+281 386 5.91587e+010
+366 142 5.91506e+010
+67 337 5.90473e+010
+518 203 5.89984e+010
+129 168 5.89959e+010
+280 51 5.89589e+010
+136 172 5.89385e+010
+377 299 5.88967e+010
+335 105 5.8876e+010
+432 122 5.88012e+010
+579 79 5.87909e+010
+310 33 5.87879e+010
+367 85 5.87855e+010
+361 9 5.87133e+010
+105 39 5.87092e+010
+308 147 5.86972e+010
+398 412 5.86479e+010
+374 241 5.86408e+010
+362 397 5.86317e+010
+491 1 5.85695e+010
+335 93 5.85297e+010
+464 26 5.84466e+010
+131 73 5.84318e+010
+522 124 5.84291e+010
+208 449 5.83331e+010
+435 88 5.81603e+010
+252 153 5.81466e+010
+167 150 5.81416e+010
+277 145 5.81193e+010
+345 109 5.80256e+010
+218 145 5.80025e+010
+422 47 5.79298e+010
+469 123 5.79184e+010
+423 336 5.79065e+010
+501 265 5.78183e+010
+510 142 5.78106e+010
+203 258 5.77781e+010
+252 10 5.77241e+010
+173 74 5.76982e+010
+153 301 5.76791e+010
+225 297 5.76611e+010
+154 93 5.76576e+010
+205 127 5.76363e+010
+541 122 5.76362e+010
+494 164 5.76123e+010
+461 269 5.75716e+010
+379 352 5.75526e+010
+589 309 5.75001e+010
+543 16 5.74821e+010
+471 262 5.74572e+010
+378 338 5.74304e+010
+486 205 5.73921e+010
+336 391 5.73396e+010
+228 129 5.72122e+010
+514 223 5.70036e+010
+207 417 5.69289e+010
+515 142 5.69125e+010
+132 26 5.6905e+010
+146 160 5.68642e+010
+259 71 5.68561e+010
+498 70 5.68443e+010
+355 24 5.66656e+010
+57 27 5.6612e+010
+363 407 5.66004e+010
+191 171 5.65978e+010
+418 414 5.65302e+010
+148 21 5.65097e+010
+233 198 5.64607e+010
+475 340 5.64477e+010
+285 263 5.64319e+010
+543 4 5.64014e+010
+524 171 5.63913e+010
+247 258 5.63786e+010
+33 235 5.63179e+010
+447 23 5.62542e+010
+423 338 5.62391e+010
+48 133 5.62369e+010
+48 256 5.62214e+010
+433 317 5.61075e+010
+406 122 5.60597e+010
+167 325 5.6028e+010
+453 358 5.59338e+010
+194 17 5.58882e+010
+60 148 5.5886e+010
+305 107 5.58855e+010
+138 146 5.57961e+010
+410 99 5.57909e+010
+422 398 5.57764e+010
+454 264 5.57285e+010
+95 452 5.5689e+010
+226 15 5.56484e+010
+150 112 5.5642e+010
+313 71 5.56168e+010
+163 147 5.55788e+010
+187 99 5.55658e+010
+321 103 5.53458e+010
+577 50 5.52512e+010
+490 183 5.51932e+010
+512 349 5.51852e+010
+464 24 5.51497e+010
+192 139 5.5148e+010
+511 95 5.51332e+010
+311 334 5.50784e+010
+425 181 5.50755e+010
+450 442 5.50529e+010
+64 448 5.50243e+010
+281 35 5.48435e+010
+237 132 5.48396e+010
+285 261 5.47991e+010
+549 59 5.47618e+010
+65 363 5.47616e+010
+505 159 5.46823e+010
+12 80 5.46111e+010
+37 143 5.45466e+010
+190 146 5.45077e+010
+263 311 5.44898e+010
+365 85 5.44828e+010
+413 65 5.44614e+010
+44 10 5.44559e+010
+318 147 5.44182e+010
+289 166 5.44016e+010
+535 18 5.43091e+010
+37 138 5.42935e+010
+315 145 5.42413e+010
+484 154 5.41932e+010
+344 197 5.4177e+010
+334 368 5.41586e+010
+271 365 5.40772e+010
+267 33 5.40581e+010
+400 104 5.39595e+010
+425 43 5.38883e+010
+193 171 5.38822e+010
+184 117 5.38671e+010
+303 180 5.38514e+010
+70 130 5.3846e+010
+101 197 5.38377e+010
+126 189 5.37857e+010
+108 183 5.3735e+010
+550 222 5.37144e+010
+567 423 5.37137e+010
+389 420 5.3685e+010
+112 264 5.36741e+010
+47 79 5.36714e+010
+281 142 5.36446e+010
+397 355 5.3613e+010
+525 381 5.35661e+010
+151 447 5.35645e+010
+198 75 5.3542e+010
+357 240 5.35317e+010
+283 35 5.35126e+010
+480 402 5.35101e+010
+453 83 5.34784e+010
+153 197 5.34274e+010
+298 191 5.33905e+010
+575 177 5.33008e+010
+221 125 5.3294e+010
+480 404 5.32158e+010
+181 33 5.31533e+010
+510 140 5.31368e+010
+242 100 5.30902e+010
+297 274 5.30744e+010
+144 327 5.30618e+010
+148 163 5.30477e+010
+38 170 5.29819e+010
+123 41 5.2908e+010
+407 81 5.28861e+010
+254 404 5.28804e+010
+319 167 5.28054e+010
+598 363 5.27946e+010
+535 121 5.27167e+010
+44 121 5.27032e+010
+489 23 5.26853e+010
+84 237 5.2652e+010
+483 82 5.26422e+010
+559 271 5.26344e+010
+90 321 5.26275e+010
+138 185 5.262e+010
+95 79 5.25783e+010
+359 292 5.25481e+010
+65 252 5.2506e+010
+473 355 5.24944e+010
+243 55 5.2475e+010
+9 476 5.24613e+010
+397 25 5.24083e+010
+516 348 5.24044e+010
+421 315 5.23801e+010
+51 153 5.23647e+010
+490 181 5.23545e+010
+240 421 5.23044e+010
+286 52 5.22338e+010
+246 106 5.22293e+010
+91 390 5.22168e+010
+141 391 5.2193e+010
+36 201 5.21445e+010
+46 147 5.21402e+010
+158 237 5.2055e+010
+403 6 5.20532e+010
+304 216 5.20175e+010
+325 149 5.19766e+010
+439 64 5.19221e+010
+192 141 5.18436e+010
+364 409 5.18017e+010
+538 79 5.17986e+010
+256 150 5.17221e+010
+446 376 5.17136e+010
+459 123 5.16661e+010
+515 44 5.16561e+010
+44 81 5.16429e+010
+49 164 5.1573e+010
+350 240 5.15718e+010
+262 219 5.15464e+010
+29 220 5.15373e+010
+29 254 5.15042e+010
+524 348 5.14189e+010
+86 370 5.13624e+010
+445 7 5.13493e+010
+194 135 5.13295e+010
+565 161 5.13269e+010
+618 181 5.12548e+010
+448 340 5.12174e+010
+39 144 5.12133e+010
+179 359 5.12101e+010
+318 312 5.10474e+010
+129 309 5.10269e+010
+525 60 5.09924e+010
+415 83 5.09773e+010
+165 154 5.09479e+010
+206 293 5.09106e+010
+128 238 5.08845e+010
+378 340 5.08546e+010
+189 202 5.07876e+010
+109 358 5.07238e+010
+3 381 5.07232e+010
+353 424 5.06914e+010
+256 34 5.05488e+010
+554 244 5.05443e+010
+507 456 5.0468e+010
+31 28 5.04602e+010
+373 87 5.04191e+010
+198 192 5.04191e+010
+473 120 5.03912e+010
+432 114 5.03804e+010
+512 125 5.02665e+010
+42 10 5.0262e+010
+266 139 5.02203e+010
+94 5 5.01763e+010
+514 335 5.01693e+010
+252 422 5.01024e+010
+493 102 5.00648e+010
+530 364 5.00637e+010
+509 168 4.99549e+010
+376 66 4.99382e+010
+191 56 4.98299e+010
+332 295 4.97972e+010
+175 189 4.97566e+010
+172 166 4.96928e+010
+521 344 4.9665e+010
+168 242 4.96314e+010
+402 265 4.94752e+010
+396 21 4.94698e+010
+333 105 4.94377e+010
+572 449 4.94193e+010
+254 76 4.9351e+010
+211 33 4.91903e+010
+45 131 4.91671e+010
+227 258 4.91636e+010
+366 95 4.91129e+010
+274 76 4.91036e+010
+297 137 4.90784e+010
+383 89 4.90602e+010
+114 220 4.90305e+010
+121 128 4.90022e+010
+531 103 4.89456e+010
+143 395 4.89413e+010
+366 66 4.89191e+010
+272 282 4.88472e+010
+321 119 4.87847e+010
+335 49 4.87484e+010
+191 314 4.87464e+010
+130 239 4.87229e+010
+592 107 4.86595e+010
+69 47 4.85648e+010
+569 122 4.8563e+010
+411 64 4.85188e+010
+303 52 4.85052e+010
+113 204 4.84974e+010
+530 24 4.84793e+010
+526 422 4.84226e+010
+384 26 4.83679e+010
+389 333 4.8362e+010
+136 177 4.83556e+010
+282 351 4.83339e+010
+537 121 4.82938e+010
+205 162 4.82904e+010
+344 276 4.82233e+010
+343 351 4.82079e+010
+326 296 4.82062e+010
+133 78 4.81512e+010
+216 172 4.80789e+010
+247 346 4.79722e+010
+505 382 4.79666e+010
+135 139 4.79592e+010
+539 62 4.7944e+010
+323 223 4.78372e+010
+64 276 4.78054e+010
+298 332 4.77815e+010
+484 357 4.77567e+010
+492 456 4.77491e+010
+533 161 4.7723e+010
+562 17 4.77189e+010
+170 199 4.76932e+010
+329 103 4.7689e+010
+381 47 4.7674e+010
+363 253 4.75674e+010
+485 236 4.75579e+010
+201 166 4.75552e+010
+93 291 4.75537e+010
+311 298 4.75367e+010
+207 159 4.75202e+010
+511 210 4.75178e+010
+273 353 4.74722e+010
+245 402 4.74596e+010
+20 67 4.74073e+010
+127 40 4.73606e+010
+528 161 4.73604e+010
+289 212 4.73496e+010
+248 219 4.73455e+010
+180 106 4.73342e+010
+259 228 4.73205e+010
+375 225 4.73104e+010
+406 142 4.72753e+010
+470 418 4.72528e+010
+105 430 4.72391e+010
+248 191 4.72349e+010
+522 140 4.71781e+010
+186 182 4.71713e+010
+524 169 4.71651e+010
+136 57 4.71317e+010
+125 112 4.71077e+010
+24 63 4.70894e+010
+412 220 4.70877e+010
+343 7 4.70407e+010
+348 240 4.70188e+010
+528 142 4.70175e+010
+313 83 4.69998e+010
+136 93 4.69685e+010
+261 440 4.69452e+010
+484 161 4.69197e+010
+64 27 4.69188e+010
+224 154 4.68488e+010
+310 90 4.6763e+010
+161 31 4.67321e+010
+270 91 4.67181e+010
+7 65 4.6716e+010
+204 293 4.66998e+010
+415 262 4.66833e+010
+44 476 4.66647e+010
+421 334 4.66199e+010
+378 319 4.65911e+010
+19 65 4.65835e+010
+447 245 4.65073e+010
+441 63 4.64974e+010
+163 249 4.64962e+010
+437 303 4.6456e+010
+137 138 4.64322e+010
+542 216 4.63792e+010
+562 151 4.63662e+010
+360 242 4.6356e+010
+90 377 4.63473e+010
+110 168 4.63114e+010
+285 242 4.62512e+010
+272 133 4.6191e+010
+407 162 4.61776e+010
+235 198 4.60367e+010
+52 288 4.60335e+010
+419 314 4.60313e+010
+495 141 4.60207e+010
+200 84 4.59932e+010
+383 181 4.59775e+010
+513 261 4.59714e+010
+520 163 4.59688e+010
+330 212 4.59334e+010
+273 52 4.59252e+010
+220 210 4.58668e+010
+270 221 4.57257e+010
+326 180 4.57111e+010
+196 343 4.56861e+010
+179 75 4.56828e+010
+385 450 4.55955e+010
+199 328 4.55717e+010
+510 98 4.55514e+010
+176 185 4.55304e+010
+462 161 4.54771e+010
+252 222 4.54354e+010
+83 404 4.54315e+010
+210 422 4.53885e+010
+301 86 4.53074e+010
+491 470 4.52757e+010
+367 2 4.52617e+010
+188 104 4.52614e+010
+337 240 4.52305e+010
+267 296 4.52056e+010
+219 387 4.5111e+010
+83 183 4.50702e+010
+241 68 4.50352e+010
+389 222 4.50285e+010
+261 72 4.4993e+010
+92 112 4.49915e+010
+303 406 4.49889e+010
+51 377 4.48991e+010
+497 283 4.48926e+010
+303 170 4.48661e+010
+509 102 4.48321e+010
+363 129 4.48226e+010
+574 39 4.48199e+010
+332 255 4.47975e+010
+328 66 4.47761e+010
+174 418 4.46909e+010
+55 303 4.46814e+010
+214 146 4.4674e+010
+171 96 4.46662e+010
+577 18 4.4508e+010
+54 358 4.44978e+010
+345 306 4.44643e+010
+388 97 4.44411e+010
+415 249 4.44298e+010
+267 146 4.44047e+010
+408 98 4.43952e+010
+175 40 4.43093e+010
+591 103 4.43068e+010
+374 394 4.4288e+010
+398 317 4.42647e+010
+246 327 4.42266e+010
+196 82 4.4176e+010
+308 8 4.41497e+010
+180 136 4.41488e+010
+262 391 4.41272e+010
+94 198 4.41228e+010
+127 26 4.41154e+010
+65 213 4.40957e+010
+156 307 4.40921e+010
+85 181 4.40587e+010
+373 76 4.40247e+010
+172 107 4.40063e+010
+245 385 4.4005e+010
+72 24 4.39873e+010
+562 158 4.39504e+010
+447 6 4.39501e+010
+203 397 4.38836e+010
+387 139 4.38347e+010
+334 370 4.37657e+010
+57 364 4.37464e+010
+512 139 4.37268e+010
+96 257 4.36954e+010
+406 199 4.36949e+010
+113 347 4.36913e+010
+323 425 4.36272e+010
+103 223 4.35664e+010
+102 234 4.35415e+010
+278 417 4.34909e+010
+133 376 4.34855e+010
+383 325 4.34367e+010
+361 166 4.33948e+010
+347 297 4.33851e+010
+557 302 4.33822e+010
+229 131 4.33377e+010
+129 94 4.33248e+010
+230 150 4.32992e+010
+160 98 4.3297e+010
+251 184 4.32695e+010
+372 74 4.32664e+010
+575 54 4.31543e+010
+230 263 4.31442e+010
+282 54 4.31365e+010
+539 220 4.30843e+010
+95 284 4.30735e+010
+422 63 4.30592e+010
+308 448 4.30459e+010
+38 10 4.30421e+010
+390 133 4.30261e+010
+385 320 4.29317e+010
+560 81 4.28946e+010
+456 201 4.28621e+010
+333 240 4.2847e+010
+190 184 4.28194e+010
+409 281 4.28033e+010
+471 121 4.27268e+010
+544 20 4.27234e+010
+244 219 4.26628e+010
+84 59 4.26616e+010
+208 451 4.26328e+010
+125 329 4.26294e+010
+344 341 4.26099e+010
+173 2 4.25618e+010
+470 202 4.25596e+010
+32 112 4.25214e+010
+358 282 4.25049e+010
+282 135 4.25004e+010
+228 198 4.24982e+010
+81 131 4.24753e+010
+463 100 4.24518e+010
+330 11 4.24416e+010
+117 132 4.24352e+010
+362 360 4.24183e+010
+245 213 4.24146e+010
+288 297 4.24109e+010
+538 185 4.23886e+010
+220 419 4.23695e+010
+102 294 4.23586e+010
+63 230 4.2353e+010
+290 89 4.23026e+010
+342 136 4.22878e+010
+279 194 4.22839e+010
+151 133 4.21973e+010
+185 170 4.21564e+010
+201 317 4.21194e+010
+279 111 4.21074e+010
+477 401 4.20525e+010
+533 341 4.20454e+010
+125 40 4.19922e+010
+222 214 4.19853e+010
+479 241 4.19623e+010
+153 57 4.19584e+010
+288 87 4.19583e+010
+308 183 4.19302e+010
+88 376 4.18731e+010
+145 255 4.18727e+010
+540 99 4.18319e+010
+127 186 4.18058e+010
+79 273 4.1774e+010
+449 23 4.17356e+010
+175 121 4.17247e+010
+494 23 4.17192e+010
+369 140 4.171e+010
+545 438 4.16325e+010
+104 163 4.16323e+010
+302 102 4.15263e+010
+2 166 4.15102e+010
+533 243 4.14951e+010
+277 164 4.14697e+010
+113 176 4.14639e+010
+269 144 4.14604e+010
+189 205 4.14535e+010
+39 242 4.1453e+010
+51 257 4.13539e+010
+62 133 4.13483e+010
+493 140 4.13342e+010
+571 269 4.13059e+010
+89 22 4.12615e+010
+143 3 4.12585e+010
+192 326 4.1251e+010
+480 171 4.12404e+010
+128 166 4.11908e+010
+11 72 4.11881e+010
+217 106 4.11728e+010
+79 271 4.11534e+010
+87 230 4.11431e+010
+526 122 4.11163e+010
+290 264 4.11045e+010
+38 167 4.10935e+010
+560 274 4.10888e+010
+310 259 4.10753e+010
+342 314 4.10616e+010
+270 64 4.10146e+010
+550 121 4.10082e+010
+36 64 4.0995e+010
+62 135 4.09901e+010
+71 47 4.09822e+010
+513 180 4.09793e+010
+525 79 4.09757e+010
+500 223 4.09667e+010
+527 382 4.09391e+010
+166 359 4.09351e+010
+324 370 4.08727e+010
+229 148 4.08668e+010
+577 15 4.08629e+010
+175 342 4.08502e+010
+265 249 4.08032e+010
+434 381 4.08026e+010
+441 23 4.07959e+010
+267 16 4.07937e+010
+394 222 4.07814e+010
+503 161 4.07315e+010
+330 167 4.06959e+010
+433 240 4.06909e+010
+301 188 4.06692e+010
+186 374 4.06626e+010
+378 182 4.0606e+010
+184 201 4.05983e+010
+531 41 4.05642e+010
+576 164 4.05546e+010
+38 219 4.05411e+010
+95 59 4.04946e+010
+501 102 4.04484e+010
+347 144 4.04427e+010
+572 328 4.0432e+010
+131 148 4.04177e+010
+181 138 4.04074e+010
+237 149 4.04037e+010
+232 15 4.03693e+010
+482 333 4.03618e+010
+520 141 4.03245e+010
+376 239 4.03113e+010
+127 308 4.02965e+010
+532 21 4.02851e+010
+329 255 4.02747e+010
+54 449 4.02545e+010
+187 219 4.02196e+010
+350 86 4.02176e+010
+260 201 4.02138e+010
+451 138 4.01946e+010
+438 339 4.01878e+010
+461 221 4.01561e+010
+448 64 4.01545e+010
+67 24 4.01388e+010
+48 458 4.01122e+010
+283 240 4.00642e+010
+93 477 3.99942e+010
+327 341 3.99786e+010
+495 284 3.99765e+010
+289 397 3.99633e+010
+531 239 3.99271e+010
+13 236 3.99191e+010
+527 398 3.99185e+010
+279 362 3.99062e+010
+154 113 3.98492e+010
+258 200 3.98364e+010
+200 415 3.98343e+010
+471 144 3.98116e+010
+281 372 3.97888e+010
+518 1 3.97397e+010
+46 420 3.97354e+010
+320 30 3.97192e+010
+230 261 3.97113e+010
+461 357 3.97095e+010
+98 149 3.97061e+010
+37 288 3.96965e+010
+13 202 3.96201e+010
+392 142 3.96087e+010
+366 107 3.96049e+010
+140 317 3.95709e+010
+32 103 3.95437e+010
+279 126 3.95147e+010
+175 187 3.9471e+010
+395 45 3.94659e+010
+196 310 3.94644e+010
+301 107 3.94237e+010
+423 164 3.93841e+010
+351 363 3.93837e+010
+398 142 3.92968e+010
+94 422 3.92674e+010
+410 66 3.92242e+010
+371 84 3.9215e+010
+538 183 3.92139e+010
+132 255 3.92137e+010
+76 270 3.91756e+010
+534 393 3.91617e+010
+54 221 3.91386e+010
+248 328 3.90906e+010
+576 91 3.90779e+010
+559 304 3.90737e+010
+367 247 3.90466e+010
+330 200 3.90303e+010
+578 123 3.90285e+010
+513 402 3.90183e+010
+40 148 3.90067e+010
+209 203 3.89992e+010
+150 38 3.89863e+010
+400 271 3.89704e+010
+369 84 3.89624e+010
+573 139 3.89586e+010
+189 137 3.89491e+010
+51 64 3.893e+010
+267 70 3.89134e+010
+266 118 3.88778e+010
+110 45 3.88447e+010
+276 135 3.88415e+010
+250 422 3.88216e+010
+262 217 3.88026e+010
+163 97 3.8755e+010
+240 194 3.87459e+010
+44 152 3.87386e+010
+32 100 3.87247e+010
+361 449 3.87107e+010
+124 94 3.87072e+010
+433 63 3.86952e+010
+86 356 3.86609e+010
+287 263 3.86557e+010
+351 320 3.8636e+010
+34 97 3.86142e+010
+120 220 3.86083e+010
+597 272 3.86057e+010
+433 396 3.85676e+010
+431 340 3.85635e+010
+243 419 3.85605e+010
+257 222 3.85142e+010
+344 262 3.85017e+010
+177 120 3.84367e+010
+241 166 3.84213e+010
+281 394 3.83735e+010
+561 201 3.83703e+010
+177 331 3.83398e+010
+215 427 3.83003e+010
+305 54 3.82958e+010
+482 173 3.82952e+010
+566 43 3.8292e+010
+276 53 3.82867e+010
+222 153 3.82572e+010
+202 7 3.82203e+010
+472 42 3.82113e+010
+248 164 3.82024e+010
+187 257 3.81903e+010
+365 104 3.81519e+010
+69 417 3.80923e+010
+424 102 3.8066e+010
+292 348 3.80595e+010
+164 114 3.80594e+010
+180 123 3.79994e+010
+228 92 3.79967e+010
+465 100 3.79474e+010
+155 396 3.79394e+010
+536 40 3.79185e+010
+571 333 3.78873e+010
+146 452 3.78738e+010
+311 265 3.78489e+010
+59 372 3.78394e+010
+588 18 3.78196e+010
+299 106 3.77682e+010
+474 143 3.77574e+010
+506 198 3.77463e+010
+248 404 3.77421e+010
+468 423 3.76896e+010
+399 67 3.7579e+010
+74 6 3.75614e+010
+308 90 3.74946e+010
+179 361 3.74765e+010
+425 124 3.74598e+010
+117 360 3.74533e+010
+560 231 3.74127e+010
+180 56 3.73769e+010
+469 142 3.73723e+010
+358 9 3.73713e+010
+42 353 3.73605e+010
+485 221 3.73394e+010
+134 134 3.73054e+010
+141 3 3.72685e+010
+509 137 3.72621e+010
+298 108 3.72546e+010
+107 220 3.72496e+010
+243 167 3.72406e+010
+420 362 3.72259e+010
+388 203 3.72111e+010
+261 34 3.721e+010
+228 347 3.7188e+010
+201 74 3.7186e+010
+282 206 3.71678e+010
+540 263 3.71672e+010
+380 122 3.71351e+010
+315 238 3.71122e+010
+205 435 3.70933e+010
+482 123 3.70868e+010
+177 76 3.70826e+010
+392 243 3.7064e+010
+260 383 3.70531e+010
+427 44 3.70228e+010
+215 248 3.70145e+010
+79 269 3.69738e+010
+216 235 3.69536e+010
+347 370 3.69394e+010
+373 103 3.69319e+010
+324 341 3.69163e+010
+166 126 3.69161e+010
+158 169 3.69142e+010
+200 293 3.6914e+010
+396 141 3.69136e+010
+427 63 3.6885e+010
+93 7 3.68017e+010
+515 381 3.67938e+010
+393 217 3.67713e+010
+106 2 3.67461e+010
+323 118 3.67384e+010
+136 74 3.66894e+010
+483 327 3.66288e+010
+176 180 3.66173e+010
+188 200 3.66166e+010
+463 123 3.65889e+010
+119 54 3.65831e+010
+254 422 3.65825e+010
+460 40 3.65809e+010
+225 112 3.65445e+010
+562 70 3.65314e+010
+232 399 3.65078e+010
+564 158 3.64985e+010
+30 134 3.6472e+010
+83 101 3.64714e+010
+420 81 3.64491e+010
+81 219 3.64015e+010
+192 328 3.6375e+010
+261 167 3.63658e+010
+394 335 3.63559e+010
+263 250 3.63466e+010
+515 184 3.62167e+010
+133 411 3.62046e+010
+482 331 3.61836e+010
+198 167 3.61813e+010
+398 94 3.61801e+010
+303 443 3.61648e+010
+479 294 3.61596e+010
+299 399 3.61394e+010
+484 156 3.6072e+010
+485 326 3.60624e+010
+379 335 3.60566e+010
+436 91 3.60367e+010
+153 75 3.60263e+010
+482 182 3.60162e+010
+58 5 3.60115e+010
+426 470 3.60008e+010
+440 468 3.59877e+010
+124 184 3.59758e+010
+528 357 3.59285e+010
+63 439 3.59265e+010
+326 13 3.59186e+010
+81 4 3.59089e+010
+206 157 3.58937e+010
+416 377 3.58622e+010
+507 14 3.58581e+010
+358 52 3.58455e+010
+579 42 3.58104e+010
+482 164 3.58019e+010
+58 79 3.5801e+010
+282 392 3.57919e+010
+545 365 3.57646e+010
+102 236 3.57582e+010
+108 109 3.57217e+010
+177 18 3.57142e+010
+273 146 3.57047e+010
+512 295 3.57044e+010
+58 147 3.56974e+010
+158 74 3.56778e+010
+512 109 3.56606e+010
+304 292 3.56252e+010
+263 403 3.56245e+010
+118 224 3.56158e+010
+416 282 3.55955e+010
+400 275 3.55705e+010
+450 324 3.55674e+010
+60 204 3.5562e+010
+290 249 3.55601e+010
+568 383 3.55355e+010
+33 30 3.55179e+010
+451 91 3.55133e+010
+251 257 3.55132e+010
+418 282 3.55059e+010
+199 111 3.5448e+010
+391 324 3.54056e+010
+515 120 3.53941e+010
+383 123 3.53035e+010
+296 410 3.53008e+010
+475 21 3.53003e+010
+161 430 3.5292e+010
+146 165 3.52503e+010
+186 200 3.52335e+010
+407 262 3.51982e+010
+56 221 3.51821e+010
+11 114 3.51579e+010
+452 43 3.51561e+010
+81 39 3.51526e+010
+322 167 3.51398e+010
+68 304 3.51286e+010
+570 422 3.50869e+010
+266 286 3.50569e+010
+589 162 3.50547e+010
+259 159 3.50422e+010
+510 253 3.50396e+010
+391 166 3.50325e+010
+465 354 3.4986e+010
+99 426 3.49468e+010
+520 201 3.4944e+010
+572 364 3.49417e+010
+206 220 3.49275e+010
+306 354 3.49271e+010
+499 64 3.48545e+010
+161 397 3.48406e+010
+264 220 3.48275e+010
+465 356 3.48104e+010
+275 352 3.48004e+010
+432 268 3.47975e+010
+234 158 3.47822e+010
+151 196 3.4778e+010
+271 183 3.47702e+010
+465 236 3.47321e+010
+157 103 3.47265e+010
+164 379 3.47063e+010
+483 286 3.4677e+010
+216 176 3.46703e+010
+561 153 3.46665e+010
+64 218 3.46374e+010
+283 80 3.46323e+010
+158 164 3.4615e+010
+185 311 3.45974e+010
+109 27 3.45722e+010
+155 200 3.45667e+010
+194 201 3.45451e+010
+140 315 3.45324e+010
+304 213 3.45285e+010
+418 44 3.4524e+010
+457 340 3.44969e+010
+179 103 3.44874e+010
+153 222 3.44563e+010
+212 94 3.44123e+010
+408 141 3.44033e+010
+88 183 3.43887e+010
+381 4 3.43409e+010
+280 186 3.43175e+010
+250 425 3.43095e+010
+184 109 3.43011e+010
+244 91 3.42744e+010
+93 95 3.42197e+010
+533 346 3.4197e+010
+350 318 3.41865e+010
+322 30 3.41814e+010
+497 223 3.41599e+010
+146 86 3.412e+010
+588 345 3.41179e+010
+229 178 3.41099e+010
+280 166 3.41066e+010
+582 19 3.40849e+010
+313 132 3.40837e+010
+401 169 3.40819e+010
+108 260 3.40652e+010
+402 217 3.40438e+010
+125 413 3.4014e+010
+527 219 3.40038e+010
+304 172 3.40011e+010
+175 19 3.39828e+010
+316 101 3.39619e+010
+547 180 3.39584e+010
+256 405 3.39442e+010
+352 318 3.39277e+010
+354 238 3.39232e+010
+105 198 3.39229e+010
+103 392 3.39198e+010
+425 334 3.39166e+010
+524 289 3.38997e+010
+320 96 3.38785e+010
+117 428 3.38694e+010
+90 339 3.38596e+010
+154 21 3.38489e+010
+215 62 3.38376e+010
+172 38 3.38086e+010
+198 10 3.3806e+010
+129 113 3.37844e+010
+248 262 3.36977e+010
+391 449 3.36784e+010
+109 58 3.36596e+010
+407 106 3.36585e+010
+219 109 3.36304e+010
+260 144 3.36077e+010
+78 59 3.35671e+010
+420 89 3.35552e+010
+496 462 3.35527e+010
+533 122 3.35179e+010
+258 327 3.35165e+010
+545 160 3.35027e+010
+414 143 3.34629e+010
+13 204 3.34628e+010
+569 420 3.34322e+010
+452 337 3.34089e+010
+107 96 3.33885e+010
+498 72 3.33837e+010
+95 340 3.338e+010
+109 99 3.33663e+010
+162 150 3.33533e+010
+416 23 3.33235e+010
+315 240 3.33103e+010
+406 78 3.3303e+010
+224 51 3.32874e+010
+438 242 3.32699e+010
+3 109 3.32661e+010
+346 275 3.32454e+010
+197 165 3.32439e+010
+257 140 3.32429e+010
+503 180 3.32418e+010
+260 223 3.3222e+010
+259 107 3.32208e+010
+250 191 3.32124e+010
+480 173 3.31473e+010
+47 11 3.31232e+010
+393 184 3.3117e+010
+54 44 3.31089e+010
+250 72 3.31007e+010
+144 432 3.3078e+010
+114 374 3.30458e+010
+246 172 3.30422e+010
+384 242 3.30222e+010
+529 136 3.30149e+010
+151 400 3.29761e+010
+297 182 3.29591e+010
+245 88 3.29369e+010
+409 4 3.29208e+010
+279 183 3.29131e+010
+305 148 3.29127e+010
+281 132 3.29048e+010
+154 345 3.29026e+010
+298 262 3.2838e+010
+368 162 3.28323e+010
+95 95 3.27986e+010
+184 199 3.27983e+010
+76 59 3.27514e+010
+41 395 3.2737e+010
+164 310 3.27343e+010
+161 121 3.27246e+010
+511 181 3.26413e+010
+219 315 3.26367e+010
+208 308 3.26338e+010
+332 397 3.26169e+010
+279 191 3.26101e+010
+90 277 3.26092e+010
+88 370 3.26071e+010
+297 257 3.25909e+010
+569 183 3.25841e+010
+38 64 3.25697e+010
+468 199 3.25682e+010
+328 326 3.25467e+010
+253 182 3.25384e+010
+309 221 3.25207e+010
+521 426 3.25179e+010
+429 88 3.25133e+010
+263 142 3.25072e+010
+132 477 3.24983e+010
+338 221 3.24863e+010
+333 28 3.24777e+010
+227 38 3.24716e+010
+487 222 3.24694e+010
+346 47 3.24276e+010
+243 385 3.24235e+010
+458 140 3.24173e+010
+77 375 3.24128e+010
+24 185 3.24e+010
+31 233 3.23979e+010
+36 233 3.23766e+010
+432 124 3.23672e+010
+141 175 3.23632e+010
+481 121 3.23604e+010
+374 366 3.2339e+010
+577 403 3.22949e+010
+482 166 3.22838e+010
+251 247 3.22404e+010
+105 4 3.21982e+010
+33 39 3.21792e+010
+436 184 3.21459e+010
+513 143 3.21277e+010
+87 341 3.2127e+010
+6 151 3.21268e+010
+214 148 3.20968e+010
+477 184 3.20846e+010
+454 46 3.20557e+010
+405 221 3.2048e+010
+297 125 3.2047e+010
+367 4 3.20404e+010
+133 392 3.20317e+010
+541 141 3.20182e+010
+426 6 3.20052e+010
+123 343 3.1969e+010
+59 70 3.19632e+010
+247 180 3.19511e+010
+275 334 3.19267e+010
+275 208 3.19181e+010
+373 300 3.18935e+010
+520 77 3.18907e+010
+179 121 3.18535e+010
+279 128 3.18452e+010
+187 363 3.18392e+010
+476 248 3.18391e+010
+549 281 3.18373e+010
+344 187 3.18327e+010
+208 315 3.18266e+010
+384 111 3.1804e+010
+344 329 3.17987e+010
+423 122 3.17933e+010
+534 182 3.1775e+010
+41 337 3.17522e+010
+163 137 3.1697e+010
+577 81 3.167e+010
+211 96 3.16545e+010
+294 271 3.16466e+010
+7 46 3.16268e+010
+136 21 3.16139e+010
+538 262 3.16074e+010
+536 393 3.16048e+010
+415 100 3.15934e+010
+538 103 3.15847e+010
+11 45 3.15805e+010
+124 82 3.15682e+010
+28 271 3.15576e+010
+50 11 3.15428e+010
+446 64 3.15395e+010
+516 202 3.15328e+010
+221 84 3.1529e+010
+374 126 3.15195e+010
+464 226 3.15074e+010
+469 22 3.15062e+010
+89 288 3.15027e+010
+128 257 3.15002e+010
+400 146 3.1479e+010
+437 126 3.1462e+010
+290 112 3.14465e+010
+274 313 3.14332e+010
+214 132 3.1424e+010
+347 119 3.1409e+010
+88 261 3.14026e+010
+402 166 3.13988e+010
+458 200 3.13729e+010
+202 293 3.13566e+010
+586 141 3.13515e+010
+461 100 3.1322e+010
+555 264 3.13205e+010
+486 242 3.1319e+010
+161 91 3.13091e+010
+77 475 3.1307e+010
+309 31 3.13037e+010
+39 82 3.12651e+010
+160 150 3.12055e+010
+361 354 3.12041e+010
+162 165 3.12014e+010
+137 324 3.11883e+010
+519 348 3.11791e+010
+302 141 3.11393e+010
+275 318 3.11273e+010
+83 132 3.11045e+010
+101 112 3.11016e+010
+77 29 3.10937e+010
+391 52 3.10937e+010
+115 130 3.10744e+010
+84 372 3.1055e+010
+371 190 3.10534e+010
+263 31 3.10529e+010
+454 418 3.10485e+010
+374 355 3.10466e+010
+205 396 3.10454e+010
+417 259 3.10315e+010
+398 169 3.09695e+010
+62 206 3.09584e+010
+36 98 3.09563e+010
+418 79 3.09357e+010
+368 31 3.0914e+010
+440 241 3.08968e+010
+565 463 3.08506e+010
+224 130 3.08374e+010
+59 110 3.08179e+010
+272 221 3.07896e+010
+252 238 3.07669e+010
+82 106 3.07561e+010
+54 389 3.07413e+010
+119 423 3.074e+010
+557 264 3.07365e+010
+95 420 3.07349e+010
+325 315 3.07127e+010
+487 119 3.06858e+010
+215 402 3.0685e+010
+420 283 3.06677e+010
+545 141 3.06463e+010
+394 165 3.0632e+010
+144 179 3.06145e+010
+389 15 3.0614e+010
+520 362 3.06065e+010
+150 2 3.06018e+010
+559 422 3.05462e+010
+361 157 3.05386e+010
+355 296 3.05333e+010
+274 64 3.05162e+010
+176 200 3.0505e+010
+269 130 3.04746e+010
+259 163 3.04435e+010
+252 193 3.04362e+010
+364 333 3.04335e+010
+163 31 3.04157e+010
+189 171 3.04093e+010
+97 197 3.04092e+010
+277 130 3.04052e+010
+46 121 3.03995e+010
+109 77 3.03859e+010
+175 74 3.03756e+010
+170 131 3.03735e+010
+415 21 3.03547e+010
+496 457 3.03519e+010
+173 274 3.03427e+010
+59 98 3.03249e+010
+358 317 3.03107e+010
+546 262 3.02916e+010
+303 54 3.02865e+010
+327 25 3.027e+010
+424 197 3.02592e+010
+370 29 3.02295e+010
+108 148 3.02225e+010
+280 392 3.02222e+010
+449 284 3.02163e+010
+561 144 3.02124e+010
+333 415 3.02022e+010
+31 81 3.01951e+010
+450 117 3.01937e+010
+42 24 3.01832e+010
+281 311 3.01822e+010
+158 76 3.01603e+010
+210 163 3.01386e+010
+149 399 3.01139e+010
+432 87 3.01124e+010
+236 295 3.00963e+010
+537 221 3.00677e+010
+464 139 2.99997e+010
+426 24 2.99766e+010
+374 144 2.99607e+010
+312 7 2.99358e+010
+250 85 2.99324e+010
+449 349 2.99257e+010
+335 418 2.99188e+010
+42 97 2.99153e+010
+410 104 2.98608e+010
+411 183 2.98414e+010
+102 308 2.9836e+010
+146 327 2.98316e+010
+405 164 2.98283e+010
+18 320 2.98055e+010
+382 260 2.97826e+010
+107 111 2.97691e+010
+410 414 2.97498e+010
+510 114 2.97336e+010
+217 164 2.97335e+010
+392 133 2.973e+010
+45 407 2.97095e+010
+275 296 2.97007e+010
+340 28 2.96963e+010
+189 135 2.96747e+010
+247 419 2.96637e+010
+562 264 2.96544e+010
+146 15 2.9622e+010
+171 164 2.96027e+010
+165 208 2.95863e+010
+459 161 2.95805e+010
+108 427 2.9572e+010
+159 90 2.95685e+010
+399 131 2.95569e+010
+164 190 2.95498e+010
+164 166 2.95138e+010
+331 89 2.95027e+010
+423 204 2.9493e+010
+160 100 2.94791e+010
+234 344 2.94728e+010
+23 254 2.94707e+010
+258 349 2.94479e+010
+461 199 2.94168e+010
+458 358 2.93996e+010
+263 109 2.93823e+010
+255 181 2.93786e+010
+61 9 2.93742e+010
+339 337 2.93494e+010
+222 176 2.93411e+010
+413 46 2.92892e+010
+272 414 2.92845e+010
+146 221 2.92757e+010
+342 162 2.92548e+010
+395 262 2.92427e+010
+244 430 2.92407e+010
+218 284 2.92384e+010
+391 296 2.91805e+010
+95 359 2.91648e+010
+146 325 2.91638e+010
+244 255 2.91336e+010
+469 302 2.91067e+010
+374 353 2.90606e+010
+589 350 2.90375e+010
+416 86 2.90345e+010
+142 239 2.90192e+010
+346 200 2.89841e+010
+310 138 2.898e+010
+52 359 2.89799e+010
+530 160 2.89719e+010
+200 126 2.89645e+010
+534 303 2.8949e+010
+292 124 2.89475e+010
+182 381 2.89384e+010
+91 79 2.8927e+010
+14 434 2.89163e+010
+479 458 2.88576e+010
+465 4 2.88197e+010
+368 29 2.88089e+010
+354 17 2.87906e+010
+425 63 2.87866e+010
+87 367 2.87631e+010
+533 93 2.87537e+010
+461 102 2.87521e+010
+547 162 2.87515e+010
+95 476 2.87497e+010
+464 263 2.87285e+010
+152 184 2.87195e+010
+501 140 2.8718e+010
+569 325 2.86977e+010
+70 390 2.86936e+010
+436 105 2.86594e+010
+191 53 2.86519e+010
+521 63 2.86377e+010
+301 215 2.86241e+010
+394 142 2.86189e+010
+306 356 2.85743e+010
+25 133 2.85635e+010
+515 118 2.85587e+010
+240 295 2.85387e+010
+233 37 2.85312e+010
+122 220 2.85187e+010
+240 383 2.84977e+010
+412 245 2.84601e+010
+459 3 2.8435e+010
+275 142 2.84126e+010
+374 65 2.84047e+010
+151 131 2.83917e+010
+55 294 2.83376e+010
+470 139 2.83334e+010
+575 98 2.83319e+010
+477 221 2.83129e+010
+497 140 2.82929e+010
+189 169 2.82434e+010
+277 238 2.82426e+010
+209 187 2.824e+010
+410 417 2.82344e+010
+139 319 2.8215e+010
+187 263 2.82111e+010
+325 118 2.82043e+010
+544 175 2.81635e+010
+404 201 2.81545e+010
+512 83 2.81397e+010
+465 379 2.81108e+010
+297 165 2.81094e+010
+384 258 2.8108e+010
+207 74 2.80771e+010
+420 138 2.80744e+010
+553 18 2.80658e+010
+543 82 2.80612e+010
+262 319 2.80605e+010
+100 160 2.80572e+010
+232 183 2.80508e+010
+438 454 2.80388e+010
+503 145 2.80353e+010
+501 21 2.80242e+010
+99 361 2.8021e+010
+472 82 2.80193e+010
+188 342 2.80044e+010
+591 308 2.80026e+010
+584 37 2.79893e+010
+449 168 2.79878e+010
+214 161 2.79762e+010
+395 47 2.79454e+010
+109 220 2.79443e+010
+570 59 2.79401e+010
+342 297 2.79395e+010
+509 346 2.79263e+010
+62 164 2.79185e+010
+420 140 2.79047e+010
+351 140 2.79017e+010
+53 148 2.78947e+010
+248 15 2.78767e+010
+164 135 2.78687e+010
+179 113 2.78655e+010
+467 22 2.78525e+010
+385 90 2.78432e+010
+476 2 2.78307e+010
+265 146 2.78294e+010
+308 107 2.78291e+010
+492 58 2.78101e+010
+65 272 2.78066e+010
+514 364 2.77433e+010
+355 475 2.77028e+010
+199 326 2.76791e+010
+126 251 2.76722e+010
+51 375 2.76697e+010
+7 201 2.76499e+010
+40 79 2.7644e+010
+147 344 2.7621e+010
+182 140 2.7588e+010
+572 405 2.75849e+010
+42 305 2.75842e+010
+27 132 2.75841e+010
+254 193 2.75831e+010
+210 21 2.75787e+010
+542 457 2.75554e+010
+435 279 2.75505e+010
+289 136 2.7546e+010
+388 83 2.75304e+010
+267 294 2.75228e+010
+51 166 2.75173e+010
+425 397 2.7514e+010
+241 55 2.75132e+010
+121 187 2.7501e+010
+166 310 2.74997e+010
+450 129 2.74913e+010
+232 101 2.749e+010
+183 310 2.74795e+010
+509 60 2.74785e+010
+544 339 2.74762e+010
+526 193 2.74559e+010
+63 182 2.73997e+010
+44 149 2.73979e+010
+198 28 2.73554e+010
+365 353 2.7354e+010
+434 122 2.73517e+010
+341 109 2.73423e+010
+450 166 2.7315e+010
+59 374 2.73134e+010
+126 191 2.73114e+010
+232 70 2.72973e+010
+331 333 2.72972e+010
+440 125 2.72824e+010
+430 116 2.72152e+010
+140 428 2.71958e+010
+522 79 2.71935e+010
+312 139 2.71902e+010
+602 274 2.71428e+010
+259 370 2.71214e+010
+288 221 2.71058e+010
+324 31 2.70809e+010
+355 126 2.7076e+010
+576 182 2.70686e+010
+58 68 2.70576e+010
+158 252 2.70542e+010
+510 348 2.70538e+010
+584 345 2.70486e+010
+178 55 2.70419e+010
+413 414 2.70376e+010
+149 138 2.70135e+010
+332 165 2.69836e+010
+120 116 2.69608e+010
+279 34 2.69545e+010
+341 40 2.69528e+010
+238 190 2.69523e+010
+419 52 2.69422e+010
+456 285 2.69369e+010
+366 29 2.69352e+010
+496 476 2.69334e+010
+260 457 2.69309e+010
+132 65 2.69207e+010
+90 399 2.68978e+010
+164 312 2.68967e+010
+87 395 2.68438e+010
+532 143 2.6841e+010
+517 82 2.68371e+010
+173 21 2.68209e+010
+438 41 2.67951e+010
+321 147 2.67684e+010
+440 394 2.67585e+010
+419 92 2.67578e+010
+583 80 2.67535e+010
+144 165 2.67294e+010
+79 132 2.67246e+010
+384 65 2.66859e+010
+570 375 2.6674e+010
+595 58 2.66562e+010
+263 401 2.66484e+010
+528 188 2.66391e+010
+433 376 2.66289e+010
+526 361 2.66242e+010
+212 165 2.66076e+010
+550 141 2.66063e+010
+102 255 2.66014e+010
+73 46 2.65872e+010
+230 112 2.65864e+010
+472 211 2.6582e+010
+498 460 2.65798e+010
+217 315 2.6575e+010
+25 61 2.65748e+010
+329 142 2.65642e+010
+447 183 2.65628e+010
+255 81 2.65583e+010
+531 134 2.65527e+010
+159 56 2.65499e+010
+294 89 2.65382e+010
+378 261 2.65378e+010
+355 15 2.65026e+010
+212 151 2.65002e+010
+477 204 2.64948e+010
+547 160 2.64544e+010
+385 88 2.64438e+010
+99 96 2.64419e+010
+38 254 2.64371e+010
+104 183 2.64311e+010
+211 376 2.63959e+010
+191 255 2.63912e+010
+195 217 2.63879e+010
+579 324 2.63806e+010
+287 158 2.63691e+010
+429 63 2.63495e+010
+358 315 2.63409e+010
+499 102 2.63403e+010
+112 181 2.63375e+010
+305 411 2.63079e+010
+212 422 2.62847e+010
+226 121 2.62837e+010
+232 157 2.6277e+010
+560 79 2.62633e+010
+139 394 2.62269e+010
+266 111 2.61959e+010
+414 300 2.61837e+010
+169 97 2.61759e+010
+411 81 2.61726e+010
+334 435 2.61659e+010
+149 231 2.61302e+010
+15 215 2.6121e+010
+402 119 2.60907e+010
+573 423 2.60898e+010
+271 313 2.60774e+010
+96 8 2.6059e+010
+527 196 2.60549e+010
+289 123 2.60373e+010
+497 59 2.60154e+010
+270 119 2.60088e+010
+62 219 2.60071e+010
+436 43 2.59943e+010
+232 91 2.59897e+010
+522 77 2.59809e+010
+187 326 2.59796e+010
+179 40 2.59702e+010
+253 147 2.59656e+010
+283 200 2.59641e+010
+402 375 2.59634e+010
+409 262 2.59536e+010
+375 282 2.59252e+010
+224 123 2.59081e+010
+141 116 2.58685e+010
+2 201 2.58619e+010
+107 107 2.58463e+010
+300 346 2.5846e+010
+250 163 2.58453e+010
+565 227 2.58374e+010
+84 310 2.5829e+010
+206 93 2.58285e+010
+371 147 2.58109e+010
+37 182 2.58108e+010
+121 52 2.58089e+010
+400 199 2.58055e+010
+164 36 2.57959e+010
+501 82 2.57893e+010
+72 4 2.57694e+010
+404 113 2.57525e+010
+498 44 2.57451e+010
+88 244 2.57446e+010
+184 347 2.57369e+010
+168 131 2.57348e+010
+150 202 2.57237e+010
+499 475 2.57049e+010
+79 219 2.57043e+010
+175 76 2.56748e+010
+470 204 2.56585e+010
+244 182 2.56449e+010
+269 313 2.56412e+010
+2 164 2.56365e+010
+169 359 2.56171e+010
+259 331 2.5611e+010
+253 110 2.55761e+010
+258 136 2.55598e+010
+323 260 2.55417e+010
+401 429 2.55375e+010
+385 355 2.55357e+010
+429 223 2.55201e+010
+335 260 2.55109e+010
+373 152 2.54889e+010
+419 95 2.54874e+010
+215 99 2.54714e+010
+175 139 2.54679e+010
+574 164 2.54338e+010
+136 19 2.54181e+010
+87 309 2.5416e+010
+63 201 2.5391e+010
+181 220 2.53852e+010
+554 303 2.53726e+010
+389 90 2.53668e+010
+79 406 2.53652e+010
+192 364 2.53626e+010
+162 74 2.53619e+010
+280 420 2.53477e+010
+418 470 2.53438e+010
+469 42 2.53428e+010
+167 414 2.5313e+010
+487 52 2.53024e+010
+122 446 2.52947e+010
+479 85 2.52836e+010
+281 418 2.52574e+010
+25 270 2.52288e+010
+27 118 2.52279e+010
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_3_5.txt b/test_data/harriscorners/hc_msc_0.00_0.10_3_5.txt
new file mode 100644
index 0000000..4207e42
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_3_5.txt
@@ -0,0 +1,2551 @@
+2550
+273 366 1.92986e+012
+122 43 1.59863e+012
+244 94 1.43017e+012
+330 128 1.29686e+012
+422 181 1.28873e+012
+420 181 1.27095e+012
+84 78 1.23897e+012
+298 53 1.21622e+012
+122 45 1.20402e+012
+448 297 1.19804e+012
+237 19 1.18589e+012
+214 72 1.18216e+012
+200 17 1.17126e+012
+134 214 1.15214e+012
+485 59 1.07957e+012
+553 40 1.05189e+012
+395 318 1.0339e+012
+272 291 1.03228e+012
+436 67 1.02144e+012
+124 198 1.00469e+012
+175 94 9.89973e+011
+447 397 9.77159e+011
+401 262 9.74749e+011
+423 178 9.61909e+011
+507 122 9.54085e+011
+387 178 9.46806e+011
+47 27 9.45205e+011
+544 168 9.42298e+011
+35 138 9.38376e+011
+303 183 9.36694e+011
+363 401 9.34352e+011
+125 364 9.30786e+011
+425 321 9.22566e+011
+160 143 9.19384e+011
+124 254 9.18721e+011
+125 256 9.09963e+011
+209 55 8.96429e+011
+33 137 8.95967e+011
+286 297 8.95126e+011
+317 335 8.94043e+011
+277 368 8.86404e+011
+302 176 8.82282e+011
+253 139 8.79908e+011
+243 202 8.78556e+011
+184 36 8.72212e+011
+82 28 8.66168e+011
+65 235 8.55138e+011
+76 256 8.42783e+011
+222 38 8.36167e+011
+436 69 8.35476e+011
+90 198 8.31147e+011
+418 8 8.29339e+011
+262 441 8.25298e+011
+343 9 8.24831e+011
+54 29 8.23194e+011
+137 209 8.19056e+011
+360 295 8.17085e+011
+393 143 8.12788e+011
+257 385 8.084e+011
+104 62 8.04932e+011
+456 282 7.97721e+011
+427 320 7.97664e+011
+294 15 7.93264e+011
+420 177 7.86926e+011
+82 76 7.76709e+011
+48 98 7.74279e+011
+239 91 7.73496e+011
+456 280 7.7063e+011
+207 224 7.70283e+011
+341 337 7.61037e+011
+92 214 7.60219e+011
+116 44 7.57847e+011
+325 88 7.56989e+011
+447 263 7.53726e+011
+397 318 7.49823e+011
+514 76 7.47079e+011
+78 2 7.46902e+011
+174 312 7.42521e+011
+65 319 7.41009e+011
+508 17 7.39035e+011
+470 239 7.37189e+011
+281 112 7.36766e+011
+207 222 7.34021e+011
+509 122 7.29747e+011
+282 114 7.25759e+011
+543 365 7.25604e+011
+207 435 7.24415e+011
+301 165 7.23962e+011
+65 343 7.21947e+011
+523 264 7.21332e+011
+466 197 7.17966e+011
+346 10 7.17456e+011
+239 202 7.17031e+011
+543 15 7.15152e+011
+131 36 7.10127e+011
+210 435 7.07583e+011
+412 256 7.06983e+011
+509 164 7.05627e+011
+449 218 7.00289e+011
+344 338 6.99741e+011
+390 58 6.97112e+011
+282 117 6.95616e+011
+154 236 6.95477e+011
+137 207 6.90982e+011
+2 46 6.89764e+011
+543 216 6.86997e+011
+320 224 6.84964e+011
+427 119 6.83895e+011
+386 221 6.83529e+011
+101 222 6.83512e+011
+225 182 6.82813e+011
+196 57 6.79614e+011
+30 8 6.79284e+011
+110 240 6.77352e+011
+80 2 6.73974e+011
+407 65 6.724e+011
+423 45 6.69099e+011
+36 145 6.68942e+011
+166 241 6.65958e+011
+128 2 6.64604e+011
+172 95 6.61107e+011
+139 203 6.60608e+011
+80 4 6.58308e+011
+498 159 6.57058e+011
+360 335 6.55112e+011
+202 313 6.53721e+011
+487 23 6.52978e+011
+363 297 6.51693e+011
+313 76 6.48583e+011
+110 135 6.48018e+011
+511 167 6.47464e+011
+468 239 6.47047e+011
+100 79 6.46208e+011
+418 164 6.44522e+011
+459 263 6.43083e+011
+325 164 6.40245e+011
+562 224 6.37081e+011
+145 310 6.37002e+011
+383 162 6.36809e+011
+484 23 6.36392e+011
+465 393 6.34188e+011
+535 242 6.33042e+011
+308 371 6.32813e+011
+274 290 6.32754e+011
+124 185 6.31477e+011
+276 182 6.31381e+011
+82 135 6.30648e+011
+379 69 6.30242e+011
+141 183 6.25156e+011
+311 150 6.24325e+011
+244 165 6.22229e+011
+420 164 6.22181e+011
+542 209 6.22127e+011
+261 297 6.21112e+011
+221 180 6.17628e+011
+512 98 6.17071e+011
+88 196 6.14848e+011
+143 310 6.13686e+011
+510 124 6.12843e+011
+127 164 6.12311e+011
+60 184 6.10259e+011
+276 180 6.09992e+011
+45 218 6.09983e+011
+45 220 6.09195e+011
+468 237 6.08592e+011
+545 58 6.07881e+011
+512 342 6.06258e+011
+58 74 6.04885e+011
+76 237 6.04431e+011
+86 255 6.02846e+011
+377 318 6.0115e+011
+252 13 6.00786e+011
+510 173 5.99221e+011
+235 162 5.97608e+011
+359 167 5.97381e+011
+211 438 5.95814e+011
+245 143 5.94071e+011
+420 7 5.87259e+011
+545 41 5.86981e+011
+389 140 5.85981e+011
+138 173 5.85212e+011
+433 147 5.82715e+011
+213 56 5.80913e+011
+382 6 5.80636e+011
+131 26 5.8032e+011
+268 53 5.78802e+011
+453 204 5.7795e+011
+366 7 5.77309e+011
+78 80 5.73303e+011
+264 201 5.7232e+011
+136 203 5.67851e+011
+320 313 5.67297e+011
+59 218 5.65857e+011
+390 48 5.64601e+011
+542 59 5.63915e+011
+372 81 5.63486e+011
+29 237 5.63218e+011
+404 121 5.63126e+011
+235 73 5.62391e+011
+509 1 5.61893e+011
+51 98 5.61776e+011
+484 338 5.60231e+011
+41 63 5.60107e+011
+171 18 5.59544e+011
+33 99 5.59238e+011
+214 58 5.58321e+011
+71 147 5.57635e+011
+261 222 5.56954e+011
+364 251 5.56052e+011
+313 150 5.56035e+011
+174 238 5.55153e+011
+461 279 5.54228e+011
+480 297 5.53492e+011
+529 24 5.53049e+011
+420 162 5.5232e+011
+478 181 5.51115e+011
+347 178 5.51071e+011
+230 36 5.50376e+011
+131 1 5.48854e+011
+313 147 5.48811e+011
+113 345 5.48792e+011
+88 148 5.48524e+011
+152 222 5.47607e+011
+477 5 5.47488e+011
+528 102 5.46847e+011
+10 101 5.45253e+011
+442 23 5.44526e+011
+451 339 5.41897e+011
+529 183 5.41557e+011
+242 71 5.41518e+011
+195 125 5.40678e+011
+277 366 5.40068e+011
+486 358 5.39897e+011
+524 20 5.39763e+011
+102 360 5.39007e+011
+175 112 5.38988e+011
+341 9 5.38263e+011
+62 60 5.37944e+011
+37 63 5.37921e+011
+76 235 5.36182e+011
+552 384 5.34183e+011
+314 85 5.30702e+011
+510 171 5.30218e+011
+138 110 5.2939e+011
+482 338 5.28596e+011
+36 176 5.28314e+011
+263 297 5.27563e+011
+364 200 5.25526e+011
+411 163 5.25007e+011
+495 119 5.23546e+011
+155 234 5.2281e+011
+31 270 5.21195e+011
+506 164 5.19435e+011
+163 277 5.19202e+011
+233 199 5.17617e+011
+211 185 5.17545e+011
+284 403 5.17435e+011
+480 82 5.16122e+011
+573 141 5.14659e+011
+106 39 5.12445e+011
+221 16 5.10794e+011
+113 3 5.05466e+011
+260 237 5.04727e+011
+166 96 5.03821e+011
+488 264 5.02923e+011
+207 450 5.01335e+011
+363 8 5.00489e+011
+525 199 5.00383e+011
+528 104 5.00206e+011
+264 299 4.98624e+011
+354 320 4.98479e+011
+423 47 4.98271e+011
+511 220 4.98269e+011
+480 181 4.98171e+011
+142 324 4.97098e+011
+164 20 4.97084e+011
+113 392 4.96565e+011
+364 258 4.96077e+011
+482 82 4.95653e+011
+209 20 4.95621e+011
+112 213 4.95048e+011
+113 343 4.94673e+011
+246 206 4.94647e+011
+266 295 4.94623e+011
+555 181 4.93741e+011
+461 263 4.92706e+011
+270 53 4.92637e+011
+41 217 4.89657e+011
+332 106 4.89105e+011
+36 299 4.89054e+011
+509 455 4.88517e+011
+527 99 4.88162e+011
+160 111 4.86011e+011
+262 165 4.8502e+011
+569 39 4.83482e+011
+217 208 4.83414e+011
+177 106 4.82489e+011
+68 45 4.82249e+011
+526 102 4.81874e+011
+37 297 4.81671e+011
+468 124 4.81658e+011
+163 216 4.79722e+011
+156 94 4.79502e+011
+412 45 4.78962e+011
+186 217 4.78434e+011
+159 183 4.76075e+011
+403 119 4.76008e+011
+125 260 4.75915e+011
+409 163 4.75524e+011
+271 278 4.75202e+011
+293 27 4.74169e+011
+130 217 4.73849e+011
+387 10 4.73282e+011
+160 113 4.72841e+011
+48 133 4.71947e+011
+483 359 4.71795e+011
+410 353 4.71542e+011
+551 382 4.71482e+011
+524 346 4.70857e+011
+559 18 4.70798e+011
+225 420 4.70254e+011
+395 261 4.70183e+011
+286 165 4.68568e+011
+423 398 4.67931e+011
+318 385 4.67742e+011
+566 61 4.6631e+011
+163 214 4.63641e+011
+168 19 4.6314e+011
+502 143 4.60856e+011
+96 446 4.60293e+011
+67 235 4.60065e+011
+229 292 4.59932e+011
+223 419 4.59694e+011
+560 226 4.59049e+011
+221 150 4.58714e+011
+487 59 4.57999e+011
+334 90 4.57819e+011
+564 61 4.57702e+011
+271 242 4.57473e+011
+366 201 4.57296e+011
+317 165 4.56826e+011
+244 71 4.5676e+011
+527 360 4.56078e+011
+354 126 4.55995e+011
+418 440 4.54542e+011
+484 179 4.53776e+011
+568 41 4.53109e+011
+475 261 4.52588e+011
+410 65 4.52517e+011
+228 185 4.51975e+011
+364 254 4.51941e+011
+283 72 4.50438e+011
+348 338 4.49488e+011
+523 123 4.48736e+011
+560 228 4.48089e+011
+305 193 4.4739e+011
+358 128 4.47207e+011
+571 161 4.46627e+011
+424 261 4.459e+011
+185 20 4.45354e+011
+470 122 4.4534e+011
+32 268 4.43472e+011
+537 393 4.43363e+011
+548 182 4.43175e+011
+163 96 4.42807e+011
+525 172 4.42556e+011
+272 167 4.42547e+011
+63 133 4.421e+011
+276 352 4.40707e+011
+407 353 4.39351e+011
+479 15 4.38862e+011
+372 117 4.38723e+011
+151 307 4.37482e+011
+508 5 4.37171e+011
+273 71 4.3699e+011
+183 138 4.36352e+011
+350 338 4.35432e+011
+527 362 4.35151e+011
+346 350 4.34636e+011
+325 141 4.33477e+011
+380 337 4.32763e+011
+368 144 4.31463e+011
+327 141 4.31407e+011
+48 151 4.31342e+011
+39 296 4.31107e+011
+412 5 4.30404e+011
+24 62 4.29742e+011
+253 75 4.29542e+011
+78 28 4.29137e+011
+223 220 4.29041e+011
+537 139 4.28777e+011
+373 162 4.28079e+011
+509 83 4.27228e+011
+35 173 4.27116e+011
+96 79 4.26699e+011
+440 25 4.26342e+011
+579 17 4.25966e+011
+357 334 4.25671e+011
+109 59 4.25613e+011
+337 9 4.25606e+011
+544 3 4.25295e+011
+44 62 4.25277e+011
+183 401 4.25159e+011
+445 23 4.23896e+011
+511 83 4.23832e+011
+277 138 4.23694e+011
+273 131 4.23271e+011
+362 130 4.23183e+011
+317 312 4.23115e+011
+422 335 4.22727e+011
+70 27 4.22453e+011
+417 84 4.22161e+011
+21 61 4.20993e+011
+360 131 4.20081e+011
+473 63 4.19953e+011
+510 79 4.19794e+011
+449 402 4.19729e+011
+260 235 4.19567e+011
+387 126 4.18887e+011
+306 363 4.18074e+011
+334 88 4.17579e+011
+414 6 4.16767e+011
+371 162 4.16375e+011
+401 276 4.13794e+011
+191 277 4.13719e+011
+287 343 4.13669e+011
+274 53 4.13606e+011
+361 316 4.12406e+011
+237 73 4.11301e+011
+507 1 4.10458e+011
+362 395 4.10444e+011
+455 264 4.10419e+011
+351 321 4.10181e+011
+226 221 4.10158e+011
+297 420 4.09226e+011
+190 216 4.09095e+011
+381 26 4.0871e+011
+76 8 4.08459e+011
+273 296 4.07808e+011
+330 106 4.07785e+011
+520 182 4.07754e+011
+359 316 4.07041e+011
+278 144 4.07012e+011
+272 281 4.06908e+011
+343 122 4.05444e+011
+111 392 4.0383e+011
+177 261 4.03698e+011
+188 181 4.03405e+011
+192 172 4.01978e+011
+352 145 4.01811e+011
+376 85 4.01603e+011
+282 297 4.01177e+011
+314 164 4.01045e+011
+222 115 4.00172e+011
+437 339 3.99902e+011
+436 182 3.99606e+011
+449 139 3.99499e+011
+386 294 3.99049e+011
+479 18 3.98277e+011
+512 202 3.96444e+011
+176 259 3.96176e+011
+62 371 3.9565e+011
+157 73 3.95642e+011
+557 18 3.95514e+011
+424 337 3.95348e+011
+264 444 3.95032e+011
+102 5 3.94907e+011
+278 392 3.94326e+011
+287 210 3.93408e+011
+326 426 3.92902e+011
+541 41 3.92786e+011
+292 121 3.92366e+011
+534 267 3.91888e+011
+301 102 3.91361e+011
+79 474 3.9035e+011
+578 50 3.88763e+011
+544 7 3.88734e+011
+302 180 3.88253e+011
+79 270 3.88226e+011
+252 423 3.88147e+011
+454 83 3.88029e+011
+511 139 3.87902e+011
+102 235 3.87819e+011
+256 148 3.87571e+011
+456 3 3.86374e+011
+498 65 3.86181e+011
+409 45 3.86003e+011
+267 15 3.85942e+011
+446 7 3.85712e+011
+225 295 3.85627e+011
+478 82 3.85615e+011
+425 376 3.84898e+011
+302 215 3.84809e+011
+364 181 3.84549e+011
+461 267 3.83693e+011
+404 338 3.83438e+011
+450 82 3.83399e+011
+167 326 3.83115e+011
+216 145 3.82783e+011
+276 392 3.82478e+011
+51 289 3.81911e+011
+173 115 3.80995e+011
+242 57 3.80704e+011
+282 50 3.80231e+011
+511 128 3.79757e+011
+345 275 3.79057e+011
+154 198 3.78856e+011
+463 27 3.7877e+011
+297 275 3.77705e+011
+374 85 3.77163e+011
+133 72 3.76278e+011
+146 160 3.76245e+011
+405 376 3.76141e+011
+505 61 3.76111e+011
+108 45 3.75997e+011
+374 240 3.75791e+011
+498 81 3.75435e+011
+575 126 3.75372e+011
+111 42 3.75171e+011
+401 183 3.75163e+011
+531 142 3.75105e+011
+164 208 3.74975e+011
+280 50 3.74974e+011
+131 75 3.72936e+011
+324 315 3.72667e+011
+276 217 3.7212e+011
+386 243 3.71952e+011
+295 420 3.71797e+011
+57 5 3.71376e+011
+209 154 3.71217e+011
+281 48 3.71212e+011
+430 320 3.71141e+011
+387 326 3.70888e+011
+441 240 3.70604e+011
+182 111 3.70345e+011
+429 1 3.70063e+011
+425 323 3.69778e+011
+332 295 3.69671e+011
+161 238 3.68908e+011
+258 89 3.68597e+011
+338 473 3.68418e+011
+529 362 3.68053e+011
+221 177 3.67974e+011
+260 71 3.67103e+011
+373 68 3.67068e+011
+324 148 3.66951e+011
+235 346 3.66848e+011
+510 141 3.66605e+011
+479 262 3.6641e+011
+174 40 3.6554e+011
+330 10 3.65142e+011
+55 5 3.65112e+011
+434 397 3.64883e+011
+28 30 3.64622e+011
+382 411 3.64023e+011
+47 147 3.63349e+011
+462 395 3.63086e+011
+230 265 3.6281e+011
+296 297 3.62746e+011
+562 149 3.62666e+011
+340 12 3.6249e+011
+576 179 3.62386e+011
+37 218 3.62206e+011
+344 165 3.62071e+011
+298 69 3.6094e+011
+148 397 3.60778e+011
+395 162 3.60152e+011
+266 30 3.60116e+011
+283 222 3.60108e+011
+518 202 3.59556e+011
+96 449 3.58971e+011
+191 145 3.58913e+011
+529 142 3.58507e+011
+135 172 3.58397e+011
+216 279 3.58153e+011
+360 260 3.58109e+011
+542 132 3.58104e+011
+392 46 3.57175e+011
+133 74 3.56448e+011
+432 111 3.56382e+011
+151 114 3.55893e+011
+31 135 3.55892e+011
+92 292 3.55646e+011
+35 11 3.55297e+011
+255 151 3.54907e+011
+541 123 3.54864e+011
+244 206 3.54837e+011
+395 160 3.54654e+011
+354 25 3.54514e+011
+24 64 3.54292e+011
+228 130 3.52025e+011
+267 13 3.51372e+011
+525 196 3.51332e+011
+418 258 3.51319e+011
+498 67 3.51149e+011
+357 220 3.5083e+011
+355 268 3.50447e+011
+109 95 3.50303e+011
+474 240 3.50137e+011
+512 94 3.49955e+011
+366 260 3.49023e+011
+267 130 3.47728e+011
+547 161 3.47204e+011
+36 268 3.47121e+011
+367 300 3.46665e+011
+24 200 3.46195e+011
+306 440 3.45372e+011
+25 66 3.45302e+011
+539 96 3.45274e+011
+561 18 3.44865e+011
+360 314 3.44791e+011
+134 237 3.4363e+011
+557 181 3.43456e+011
+75 96 3.4225e+011
+249 219 3.42115e+011
+95 148 3.4169e+011
+539 458 3.41672e+011
+452 83 3.4167e+011
+420 166 3.41135e+011
+84 2 3.40406e+011
+565 160 3.40326e+011
+92 290 3.39656e+011
+164 358 3.39214e+011
+528 40 3.39154e+011
+451 375 3.38945e+011
+329 166 3.38899e+011
+1 156 3.38595e+011
+294 297 3.38453e+011
+161 126 3.38226e+011
+170 57 3.38042e+011
+456 84 3.37832e+011
+376 353 3.37631e+011
+186 108 3.37366e+011
+271 66 3.37333e+011
+327 182 3.37101e+011
+519 60 3.36468e+011
+516 347 3.36213e+011
+189 109 3.36194e+011
+269 61 3.3613e+011
+276 221 3.35889e+011
+172 57 3.35803e+011
+55 66 3.35572e+011
+79 195 3.35282e+011
+84 477 3.34665e+011
+271 63 3.34379e+011
+35 9 3.34256e+011
+249 313 3.34003e+011
+446 352 3.33923e+011
+478 13 3.33875e+011
+138 57 3.33635e+011
+72 96 3.33617e+011
+434 182 3.33466e+011
+566 41 3.33377e+011
+259 35 3.3309e+011
+181 394 3.32654e+011
+85 181 3.32597e+011
+300 264 3.32345e+011
+582 18 3.31965e+011
+451 373 3.31933e+011
+184 344 3.3171e+011
+379 106 3.31671e+011
+247 220 3.30793e+011
+239 73 3.30642e+011
+528 194 3.30206e+011
+176 186 3.29911e+011
+22 219 3.29784e+011
+488 3 3.29509e+011
+332 202 3.28767e+011
+109 97 3.28766e+011
+177 165 3.28695e+011
+141 22 3.28614e+011
+55 291 3.28542e+011
+214 143 3.27886e+011
+191 330 3.2778e+011
+287 52 3.2719e+011
+414 252 3.26931e+011
+492 140 3.26842e+011
+229 198 3.26187e+011
+57 254 3.25774e+011
+264 446 3.25653e+011
+557 246 3.25473e+011
+171 201 3.25275e+011
+571 121 3.25e+011
+271 61 3.24847e+011
+370 106 3.23951e+011
+197 131 3.23684e+011
+580 80 3.23056e+011
+554 201 3.22866e+011
+250 365 3.22859e+011
+104 4 3.22785e+011
+476 341 3.22267e+011
+561 321 3.22245e+011
+138 98 3.22025e+011
+265 13 3.22019e+011
+358 241 3.21549e+011
+174 19 3.2125e+011
+432 318 3.20847e+011
+233 262 3.20598e+011
+538 94 3.2049e+011
+206 158 3.19826e+011
+135 129 3.19752e+011
+265 15 3.19584e+011
+116 76 3.19058e+011
+476 22 3.19045e+011
+191 124 3.18809e+011
+512 92 3.18562e+011
+298 137 3.1817e+011
+483 176 3.17498e+011
+130 428 3.17161e+011
+407 338 3.1703e+011
+572 39 3.16938e+011
+413 99 3.16881e+011
+264 72 3.16872e+011
+441 98 3.16782e+011
+324 341 3.16561e+011
+434 340 3.16492e+011
+338 391 3.15772e+011
+498 63 3.15316e+011
+163 74 3.15268e+011
+314 161 3.15014e+011
+211 153 3.14809e+011
+329 202 3.14648e+011
+161 168 3.14577e+011
+307 89 3.14402e+011
+410 24 3.14321e+011
+269 63 3.13993e+011
+483 376 3.13981e+011
+412 65 3.13935e+011
+527 183 3.13902e+011
+489 182 3.13899e+011
+513 200 3.13642e+011
+214 124 3.12997e+011
+393 65 3.12983e+011
+516 182 3.12353e+011
+406 81 3.12175e+011
+342 37 3.12058e+011
+372 393 3.11665e+011
+405 199 3.11567e+011
+186 170 3.11509e+011
+266 71 3.11439e+011
+47 11 3.11383e+011
+239 349 3.11311e+011
+397 265 3.10905e+011
+36 201 3.10901e+011
+563 18 3.10834e+011
+260 250 3.10831e+011
+273 221 3.10675e+011
+366 106 3.105e+011
+398 356 3.10336e+011
+163 211 3.10306e+011
+58 289 3.10227e+011
+300 106 3.09888e+011
+418 283 3.09851e+011
+228 128 3.09604e+011
+206 160 3.09397e+011
+161 20 3.09173e+011
+343 463 3.09132e+011
+444 452 3.08719e+011
+533 183 3.08558e+011
+32 29 3.08053e+011
+412 24 3.07602e+011
+480 165 3.07455e+011
+489 140 3.07429e+011
+517 184 3.06867e+011
+495 456 3.06636e+011
+478 402 3.05848e+011
+58 71 3.05844e+011
+436 304 3.05789e+011
+470 421 3.05359e+011
+481 173 3.05305e+011
+422 323 3.04852e+011
+360 169 3.04844e+011
+67 27 3.04785e+011
+377 6 3.04349e+011
+526 39 3.04163e+011
+204 203 3.04143e+011
+510 143 3.03881e+011
+451 264 3.03865e+011
+393 354 3.0343e+011
+162 134 3.03313e+011
+136 98 3.02873e+011
+562 146 3.02645e+011
+483 174 3.02601e+011
+117 392 3.02598e+011
+362 370 3.02518e+011
+419 84 3.02394e+011
+533 21 3.02278e+011
+274 215 3.02193e+011
+272 181 3.02063e+011
+302 206 3.0167e+011
+502 160 3.01653e+011
+336 391 3.00916e+011
+318 202 3.00682e+011
+33 235 3.00494e+011
+390 326 3.00493e+011
+45 148 3.00427e+011
+189 146 2.99986e+011
+190 205 2.98988e+011
+203 294 2.98683e+011
+341 163 2.98411e+011
+538 121 2.98117e+011
+45 82 2.97882e+011
+278 333 2.97845e+011
+547 163 2.96946e+011
+364 354 2.9667e+011
+193 16 2.96243e+011
+395 22 2.96214e+011
+414 21 2.96052e+011
+3 155 2.95945e+011
+44 474 2.95905e+011
+341 109 2.958e+011
+525 224 2.95333e+011
+169 116 2.95178e+011
+57 7 2.94731e+011
+181 138 2.94397e+011
+502 164 2.94292e+011
+460 339 2.93871e+011
+531 62 2.93746e+011
+464 355 2.93075e+011
+352 163 2.92917e+011
+551 182 2.9279e+011
+49 159 2.9242e+011
+119 95 2.92343e+011
+43 82 2.92224e+011
+95 6 2.91908e+011
+358 10 2.91501e+011
+5 10 2.91368e+011
+279 129 2.9129e+011
+560 272 2.91251e+011
+282 393 2.91124e+011
+245 293 2.91091e+011
+166 115 2.90638e+011
+269 93 2.90604e+011
+6 65 2.90399e+011
+20 64 2.90387e+011
+393 141 2.90094e+011
+575 129 2.89864e+011
+354 106 2.89694e+011
+43 9 2.89451e+011
+344 110 2.89357e+011
+536 121 2.89215e+011
+210 451 2.89183e+011
+278 191 2.88778e+011
+483 374 2.88644e+011
+555 244 2.88499e+011
+95 477 2.88334e+011
+478 451 2.88304e+011
+326 148 2.88199e+011
+534 160 2.88175e+011
+49 12 2.87974e+011
+473 203 2.87646e+011
+42 24 2.87192e+011
+226 72 2.86841e+011
+187 341 2.86596e+011
+284 241 2.86451e+011
+572 332 2.86435e+011
+276 333 2.86164e+011
+304 157 2.86134e+011
+140 394 2.85968e+011
+178 19 2.857e+011
+293 123 2.85477e+011
+66 213 2.84963e+011
+152 448 2.84598e+011
+387 167 2.84549e+011
+185 201 2.8406e+011
+52 29 2.83992e+011
+248 316 2.83647e+011
+390 297 2.83226e+011
+262 392 2.82993e+011
+169 200 2.82358e+011
+110 264 2.82291e+011
+89 255 2.82135e+011
+414 259 2.82059e+011
+314 222 2.82015e+011
+297 331 2.81968e+011
+181 202 2.81874e+011
+309 32 2.81811e+011
+549 223 2.8175e+011
+363 407 2.81256e+011
+119 4 2.81131e+011
+59 77 2.81082e+011
+411 99 2.80755e+011
+292 30 2.80626e+011
+516 18 2.8038e+011
+135 131 2.80289e+011
+109 325 2.8027e+011
+123 272 2.8025e+011
+260 329 2.80178e+011
+249 192 2.80037e+011
+228 38 2.79977e+011
+35 134 2.79822e+011
+216 125 2.79711e+011
+287 396 2.79457e+011
+123 162 2.79015e+011
+151 152 2.7899e+011
+467 41 2.78748e+011
+49 255 2.78421e+011
+207 448 2.7835e+011
+502 362 2.7826e+011
+38 168 2.77937e+011
+541 164 2.77564e+011
+129 167 2.77492e+011
+504 164 2.77343e+011
+126 219 2.77187e+011
+341 165 2.7694e+011
+285 262 2.76638e+011
+151 111 2.76474e+011
+159 75 2.76452e+011
+383 146 2.75822e+011
+447 350 2.75613e+011
+62 253 2.75503e+011
+393 164 2.75444e+011
+485 376 2.75261e+011
+278 331 2.75205e+011
+326 341 2.75046e+011
+489 43 2.74839e+011
+225 51 2.74466e+011
+510 362 2.74427e+011
+119 60 2.74196e+011
+220 290 2.73912e+011
+142 2 2.73672e+011
+127 77 2.73568e+011
+500 264 2.73557e+011
+258 161 2.73389e+011
+30 219 2.73345e+011
+387 283 2.73273e+011
+216 106 2.73221e+011
+386 165 2.73216e+011
+345 108 2.73185e+011
+433 113 2.72892e+011
+498 224 2.72626e+011
+386 321 2.72546e+011
+159 91 2.72438e+011
+191 140 2.72265e+011
+66 252 2.72001e+011
+468 141 2.71639e+011
+162 148 2.71518e+011
+80 40 2.71246e+011
+209 420 2.71116e+011
+390 161 2.71016e+011
+278 297 2.70534e+011
+293 312 2.70228e+011
+342 465 2.70183e+011
+513 43 2.70098e+011
+440 181 2.69946e+011
+184 341 2.69798e+011
+432 123 2.695e+011
+186 101 2.69404e+011
+246 216 2.69236e+011
+168 197 2.69092e+011
+264 250 2.68974e+011
+344 263 2.68849e+011
+131 132 2.68482e+011
+403 187 2.6847e+011
+230 149 2.68251e+011
+531 161 2.68103e+011
+219 126 2.67757e+011
+262 402 2.67727e+011
+386 319 2.67699e+011
+358 161 2.67623e+011
+537 80 2.67598e+011
+133 132 2.67272e+011
+364 356 2.67224e+011
+193 218 2.67047e+011
+560 61 2.66482e+011
+408 182 2.66335e+011
+392 295 2.66125e+011
+502 265 2.66115e+011
+326 295 2.66093e+011
+559 80 2.66022e+011
+562 61 2.65747e+011
+21 66 2.65645e+011
+462 101 2.65546e+011
+482 366 2.65271e+011
+138 146 2.65135e+011
+165 286 2.65077e+011
+161 254 2.64847e+011
+257 249 2.64821e+011
+452 102 2.64575e+011
+148 21 2.64436e+011
+357 239 2.64032e+011
+388 97 2.63771e+011
+217 55 2.63402e+011
+411 101 2.63052e+011
+196 76 2.62877e+011
+236 220 2.62814e+011
+289 183 2.62688e+011
+251 153 2.62649e+011
+290 348 2.62579e+011
+100 198 2.62229e+011
+90 289 2.62104e+011
+38 239 2.62028e+011
+90 376 2.6198e+011
+526 423 2.61212e+011
+32 218 2.61199e+011
+39 309 2.61037e+011
+391 159 2.60878e+011
+419 86 2.60405e+011
+408 82 2.59888e+011
+387 281 2.59588e+011
+475 203 2.59562e+011
+453 44 2.5953e+011
+474 245 2.59383e+011
+183 184 2.59346e+011
+458 4 2.59335e+011
+187 99 2.5892e+011
+205 294 2.58855e+011
+549 58 2.58531e+011
+179 273 2.58449e+011
+14 203 2.58356e+011
+403 181 2.58209e+011
+393 216 2.58176e+011
+374 300 2.58095e+011
+109 147 2.57562e+011
+144 16 2.57252e+011
+149 2 2.57223e+011
+162 123 2.57136e+011
+204 164 2.57042e+011
+304 53 2.57031e+011
+595 18 2.56966e+011
+107 99 2.56922e+011
+535 393 2.56856e+011
+162 205 2.56735e+011
+430 89 2.56725e+011
+140 3 2.56695e+011
+178 122 2.56618e+011
+94 94 2.56547e+011
+125 271 2.56237e+011
+430 122 2.5614e+011
+150 150 2.56129e+011
+517 43 2.56012e+011
+330 257 2.55752e+011
+200 166 2.5567e+011
+578 43 2.55635e+011
+461 123 2.55633e+011
+96 256 2.55549e+011
+327 164 2.55482e+011
+166 149 2.55072e+011
+513 141 2.5506e+011
+424 4 2.54981e+011
+279 187 2.54918e+011
+53 221 2.54884e+011
+427 182 2.54678e+011
+294 334 2.54622e+011
+529 365 2.54476e+011
+509 301 2.54253e+011
+321 29 2.5411e+011
+72 45 2.53799e+011
+571 450 2.53796e+011
+402 167 2.53534e+011
+306 106 2.53446e+011
+368 337 2.53443e+011
+460 162 2.53176e+011
+384 323 2.52923e+011
+380 121 2.52904e+011
+129 238 2.52726e+011
+551 378 2.52497e+011
+316 238 2.52319e+011
+221 152 2.5226e+011
+222 239 2.52238e+011
+162 202 2.52126e+011
+413 298 2.5196e+011
+493 457 2.51806e+011
+445 128 2.51372e+011
+368 1 2.51358e+011
+241 166 2.51158e+011
+13 81 2.51109e+011
+513 143 2.5104e+011
+219 107 2.5087e+011
+280 385 2.50771e+011
+538 241 2.50734e+011
+57 146 2.50719e+011
+424 62 2.50623e+011
+539 405 2.50571e+011
+386 296 2.50557e+011
+508 179 2.50512e+011
+54 302 2.50192e+011
+56 78 2.50185e+011
+539 40 2.49787e+011
+439 124 2.49623e+011
+448 24 2.49322e+011
+293 147 2.49189e+011
+507 203 2.48755e+011
+394 20 2.48689e+011
+59 40 2.48686e+011
+44 151 2.48582e+011
+191 360 2.48576e+011
+225 129 2.48436e+011
+55 221 2.4833e+011
+181 135 2.48288e+011
+118 110 2.48228e+011
+406 163 2.48199e+011
+120 110 2.48165e+011
+265 140 2.48161e+011
+309 7 2.47929e+011
+452 162 2.47878e+011
+44 97 2.47824e+011
+93 255 2.47669e+011
+220 100 2.47573e+011
+445 126 2.4716e+011
+380 181 2.46957e+011
+346 298 2.46956e+011
+542 100 2.46769e+011
+525 183 2.46391e+011
+389 243 2.46359e+011
+163 313 2.46314e+011
+449 445 2.46284e+011
+270 104 2.46255e+011
+506 177 2.45996e+011
+59 147 2.45981e+011
+537 40 2.45972e+011
+223 153 2.45931e+011
+437 124 2.45642e+011
+307 448 2.45489e+011
+270 70 2.45469e+011
+451 44 2.45078e+011
+281 35 2.45075e+011
+162 165 2.44965e+011
+187 201 2.44963e+011
+206 163 2.44927e+011
+131 148 2.44908e+011
+504 263 2.44889e+011
+474 243 2.44845e+011
+460 357 2.44539e+011
+53 42 2.4449e+011
+148 112 2.4439e+011
+462 162 2.44225e+011
+99 360 2.44211e+011
+411 471 2.44074e+011
+263 141 2.44037e+011
+440 122 2.44011e+011
+520 345 2.44002e+011
+165 108 2.43993e+011
+160 95 2.43926e+011
+487 182 2.43261e+011
+111 168 2.43172e+011
+259 274 2.43136e+011
+60 203 2.43008e+011
+371 90 2.42936e+011
+32 66 2.42381e+011
+125 95 2.42327e+011
+109 183 2.4227e+011
+388 15 2.42215e+011
+416 250 2.4203e+011
+514 120 2.4159e+011
+132 128 2.4148e+011
+332 241 2.41024e+011
+349 87 2.41e+011
+422 315 2.40875e+011
+120 51 2.40836e+011
+334 240 2.4083e+011
+446 377 2.40747e+011
+65 275 2.40583e+011
+217 128 2.40575e+011
+288 263 2.40529e+011
+281 207 2.40512e+011
+50 62 2.40508e+011
+248 206 2.40467e+011
+528 161 2.40403e+011
+18 343 2.404e+011
+41 307 2.40334e+011
+69 130 2.40278e+011
+539 79 2.40192e+011
+485 162 2.40103e+011
+330 89 2.40025e+011
+373 75 2.39694e+011
+410 260 2.39629e+011
+312 222 2.39475e+011
+510 180 2.39378e+011
+182 133 2.39148e+011
+130 254 2.38727e+011
+57 364 2.38655e+011
+374 393 2.38566e+011
+39 355 2.38326e+011
+538 186 2.38017e+011
+210 136 2.37907e+011
+62 203 2.37892e+011
+93 6 2.37466e+011
+165 110 2.37342e+011
+96 197 2.36812e+011
+289 88 2.36725e+011
+342 107 2.36664e+011
+454 47 2.36528e+011
+129 113 2.36442e+011
+470 418 2.36434e+011
+408 430 2.36419e+011
+41 10 2.36228e+011
+298 398 2.36136e+011
+513 262 2.35943e+011
+537 261 2.35424e+011
+68 337 2.35267e+011
+180 165 2.35095e+011
+573 405 2.34751e+011
+12 205 2.34721e+011
+565 18 2.34638e+011
+529 31 2.34437e+011
+346 240 2.34292e+011
+260 141 2.34226e+011
+270 106 2.34039e+011
+526 382 2.33992e+011
+532 267 2.33855e+011
+106 77 2.33847e+011
+358 8 2.33598e+011
+26 132 2.3352e+011
+410 82 2.33454e+011
+150 231 2.33248e+011
+349 324 2.33033e+011
+243 189 2.32997e+011
+382 123 2.32721e+011
+478 241 2.32643e+011
+123 95 2.32615e+011
+337 426 2.32253e+011
+525 185 2.32212e+011
+254 77 2.31676e+011
+280 144 2.31128e+011
+55 293 2.31118e+011
+392 19 2.3063e+011
+490 59 2.30485e+011
+104 224 2.30327e+011
+329 65 2.30267e+011
+118 425 2.30223e+011
+538 184 2.30192e+011
+191 138 2.30109e+011
+95 422 2.30067e+011
+399 104 2.29991e+011
+3 382 2.29858e+011
+186 309 2.2978e+011
+395 141 2.29628e+011
+430 182 2.2943e+011
+116 129 2.29397e+011
+334 106 2.29067e+011
+249 34 2.28888e+011
+416 46 2.28358e+011
+446 123 2.28203e+011
+493 181 2.28186e+011
+266 145 2.2816e+011
+33 111 2.2794e+011
+259 143 2.27766e+011
+286 34 2.27304e+011
+199 293 2.26654e+011
+352 10 2.26591e+011
+389 420 2.26565e+011
+435 89 2.26128e+011
+346 296 2.26083e+011
+542 253 2.25893e+011
+333 369 2.2584e+011
+331 142 2.25586e+011
+247 326 2.25505e+011
+277 131 2.25349e+011
+120 128 2.2524e+011
+484 86 2.25183e+011
+168 149 2.24837e+011
+87 369 2.24826e+011
+281 53 2.24523e+011
+360 218 2.24481e+011
+599 364 2.2435e+011
+106 43 2.24276e+011
+95 59 2.24264e+011
+595 20 2.24196e+011
+357 282 2.24136e+011
+297 14 2.24057e+011
+136 139 2.24032e+011
+72 409 2.24019e+011
+501 42 2.23977e+011
+187 106 2.23929e+011
+73 186 2.23523e+011
+245 385 2.23427e+011
+429 117 2.23421e+011
+279 193 2.23378e+011
+154 113 2.23272e+011
+53 359 2.23239e+011
+557 303 2.23139e+011
+546 17 2.23057e+011
+53 357 2.23042e+011
+146 79 2.22998e+011
+322 119 2.22889e+011
+30 256 2.22659e+011
+461 43 2.22632e+011
+401 104 2.2242e+011
+233 16 2.22307e+011
+437 149 2.22194e+011
+382 180 2.21977e+011
+176 57 2.2181e+011
+469 201 2.21528e+011
+443 320 2.21492e+011
+343 198 2.21412e+011
+521 202 2.21e+011
+366 85 2.20589e+011
+535 93 2.20256e+011
+380 119 2.20218e+011
+416 261 2.20074e+011
+270 144 2.20032e+011
+517 58 2.1942e+011
+506 381 2.19241e+011
+346 46 2.19184e+011
+421 81 2.19125e+011
+514 363 2.19014e+011
+434 225 2.18303e+011
+504 160 2.18223e+011
+334 28 2.18215e+011
+266 293 2.18154e+011
+321 104 2.17987e+011
+395 105 2.17956e+011
+323 224 2.17708e+011
+247 347 2.17703e+011
+246 387 2.17584e+011
+471 83 2.17569e+011
+174 201 2.17547e+011
+467 25 2.17449e+011
+63 218 2.17421e+011
+522 62 2.17302e+011
+469 203 2.17273e+011
+358 143 2.17133e+011
+355 12 2.17003e+011
+92 59 2.16534e+011
+299 190 2.16469e+011
+239 94 2.16198e+011
+194 110 2.16192e+011
+444 123 2.16039e+011
+354 16 2.15761e+011
+376 182 2.15749e+011
+87 340 2.15699e+011
+397 22 2.1546e+011
+113 176 2.15354e+011
+28 255 2.15239e+011
+227 259 2.15116e+011
+107 428 2.15042e+011
+521 79 2.14601e+011
+266 147 2.14564e+011
+526 120 2.14231e+011
+328 320 2.14176e+011
+191 312 2.1417e+011
+85 214 2.14105e+011
+407 142 2.13886e+011
+120 446 2.13849e+011
+584 38 2.13757e+011
+382 3 2.13359e+011
+265 260 2.13308e+011
+119 54 2.13301e+011
+290 166 2.12996e+011
+92 20 2.12982e+011
+107 108 2.1251e+011
+163 311 2.12458e+011
+155 75 2.12388e+011
+544 91 2.12175e+011
+484 155 2.12171e+011
+104 221 2.12132e+011
+280 136 2.12077e+011
+385 258 2.11997e+011
+540 206 2.11994e+011
+171 165 2.11726e+011
+156 198 2.11149e+011
+538 268 2.11063e+011
+483 328 2.11044e+011
+570 182 2.10951e+011
+393 218 2.10928e+011
+249 422 2.10896e+011
+363 332 2.10839e+011
+332 415 2.10838e+011
+448 63 2.10657e+011
+147 89 2.10471e+011
+145 326 2.10337e+011
+26 221 2.10291e+011
+438 241 2.10264e+011
+494 163 2.10096e+011
+85 60 2.0994e+011
+242 420 2.09839e+011
+215 174 2.09712e+011
+253 194 2.0963e+011
+454 359 2.09436e+011
+171 448 2.09415e+011
+28 219 2.09343e+011
+137 21 2.0927e+011
+191 55 2.09055e+011
+157 308 2.08915e+011
+152 1 2.08875e+011
+420 143 2.08698e+011
+87 372 2.08628e+011
+92 95 2.084e+011
+203 128 2.08338e+011
+58 102 2.08325e+011
+384 87 2.08297e+011
+498 227 2.08158e+011
+176 272 2.08138e+011
+78 60 2.08071e+011
+162 107 2.08056e+011
+333 356 2.07972e+011
+281 419 2.07928e+011
+288 123 2.07817e+011
+532 121 2.07381e+011
+376 300 2.07208e+011
+382 87 2.06789e+011
+390 165 2.06783e+011
+233 14 2.06773e+011
+389 133 2.06633e+011
+523 79 2.06599e+011
+479 405 2.06555e+011
+211 163 2.06517e+011
+178 167 2.0633e+011
+308 354 2.05998e+011
+34 31 2.05417e+011
+191 314 2.05391e+011
+219 36 2.05194e+011
+28 221 2.05181e+011
+154 56 2.0486e+011
+157 306 2.04812e+011
+390 18 2.04782e+011
+535 80 2.04753e+011
+497 283 2.04572e+011
+29 135 2.04273e+011
+437 122 2.04269e+011
+431 115 2.04222e+011
+119 58 2.03943e+011
+253 10 2.03849e+011
+421 140 2.03819e+011
+373 120 2.03618e+011
+469 43 2.03595e+011
+261 390 2.03507e+011
+184 142 2.03467e+011
+11 218 2.03338e+011
+359 52 2.03195e+011
+126 330 2.03038e+011
+138 1 2.02982e+011
+432 303 2.02924e+011
+272 353 2.02697e+011
+176 76 2.02688e+011
+391 221 2.02483e+011
+236 150 2.0242e+011
+297 182 2.02239e+011
+49 235 2.02108e+011
+482 46 2.02056e+011
+538 182 2.01766e+011
+274 205 2.0173e+011
+198 111 2.0166e+011
+510 135 2.01577e+011
+522 425 2.01457e+011
+569 382 2.01339e+011
+203 346 2.01311e+011
+288 125 2.01036e+011
+182 380 2.00994e+011
+466 140 2.00929e+011
+420 315 2.00862e+011
+260 106 2.00839e+011
+217 97 2.00537e+011
+223 124 2.00389e+011
+199 29 2.00305e+011
+366 95 2.00299e+011
+280 134 2.00277e+011
+249 387 2.00226e+011
+246 400 2.00193e+011
+498 341 2.00121e+011
+498 59 2.00026e+011
+163 114 2e+011
+334 104 1.99997e+011
+129 128 1.99882e+011
+63 8 1.99841e+011
+110 358 1.9982e+011
+122 126 1.99682e+011
+501 102 1.99605e+011
+282 371 1.99585e+011
+513 181 1.99572e+011
+167 315 1.99395e+011
+149 129 1.99154e+011
+171 167 1.99124e+011
+188 264 1.9904e+011
+135 144 1.99034e+011
+436 387 1.98856e+011
+390 66 1.98846e+011
+198 194 1.98684e+011
+482 86 1.98684e+011
+448 285 1.98677e+011
+229 91 1.98619e+011
+188 203 1.9861e+011
+246 181 1.9855e+011
+212 32 1.98544e+011
+27 66 1.98402e+011
+483 288 1.98323e+011
+392 166 1.9829e+011
+370 87 1.98228e+011
+252 183 1.97812e+011
+268 145 1.97741e+011
+58 372 1.97713e+011
+243 218 1.97617e+011
+449 167 1.97114e+011
+494 59 1.96988e+011
+184 118 1.96906e+011
+436 320 1.96706e+011
+263 400 1.96679e+011
+49 166 1.96674e+011
+200 111 1.96664e+011
+129 309 1.96535e+011
+150 131 1.96487e+011
+362 101 1.96335e+011
+377 121 1.96179e+011
+514 381 1.95941e+011
+588 161 1.95716e+011
+194 312 1.95595e+011
+247 106 1.9538e+011
+104 198 1.95263e+011
+229 346 1.95219e+011
+194 135 1.95107e+011
+281 193 1.9508e+011
+561 324 1.95042e+011
+280 439 1.94933e+011
+149 163 1.94933e+011
+274 209 1.94434e+011
+301 244 1.94295e+011
+280 132 1.94258e+011
+562 143 1.94231e+011
+250 91 1.94211e+011
+444 119 1.94108e+011
+500 82 1.93952e+011
+303 108 1.93842e+011
+216 148 1.93712e+011
+438 161 1.93692e+011
+264 310 1.93598e+011
+519 164 1.93526e+011
+115 218 1.93425e+011
+346 48 1.93417e+011
+125 114 1.93347e+011
+92 79 1.93063e+011
+388 334 1.92726e+011
+408 15 1.9271e+011
+411 415 1.92703e+011
+384 89 1.92586e+011
+208 202 1.92488e+011
+246 404 1.92382e+011
+251 10 1.92256e+011
+300 246 1.92177e+011
+446 243 1.92111e+011
+471 212 1.92106e+011
+108 358 1.92061e+011
+287 111 1.92002e+011
+499 459 1.91937e+011
+515 202 1.91928e+011
+424 103 1.91853e+011
+240 194 1.9174e+011
+401 319 1.91682e+011
+449 165 1.91485e+011
+391 322 1.91483e+011
+354 424 1.91422e+011
+330 103 1.91192e+011
+69 304 1.91135e+011
+498 70 1.9107e+011
+16 216 1.90739e+011
+480 176 1.90688e+011
+174 106 1.90621e+011
+196 342 1.90558e+011
+176 188 1.90496e+011
+464 23 1.90318e+011
+251 222 1.90238e+011
+433 381 1.90089e+011
+325 13 1.90087e+011
+46 135 1.89846e+011
+59 109 1.89793e+011
+240 134 1.89594e+011
+573 422 1.89531e+011
+274 146 1.89507e+011
+436 280 1.8923e+011
+380 87 1.89179e+011
+110 341 1.8916e+011
+247 345 1.8912e+011
+403 376 1.8906e+011
+91 276 1.89032e+011
+88 230 1.89009e+011
+141 391 1.88973e+011
+95 124 1.88869e+011
+478 205 1.88683e+011
+57 331 1.88511e+011
+93 445 1.88439e+011
+433 85 1.88384e+011
+433 239 1.88321e+011
+382 46 1.88199e+011
+494 63 1.88041e+011
+246 214 1.87978e+011
+88 182 1.87913e+011
+250 183 1.87709e+011
+213 149 1.87437e+011
+133 93 1.87215e+011
+244 212 1.86916e+011
+538 102 1.86894e+011
+345 179 1.86814e+011
+336 241 1.86704e+011
+449 324 1.86672e+011
+43 122 1.86576e+011
+180 122 1.86486e+011
+451 325 1.8632e+011
+263 239 1.86192e+011
+10 475 1.86142e+011
+188 136 1.85994e+011
+9 44 1.85767e+011
+227 92 1.85701e+011
+294 138 1.85391e+011
+260 229 1.85366e+011
+451 165 1.85227e+011
+151 400 1.85188e+011
+485 140 1.8515e+011
+251 163 1.85125e+011
+86 310 1.84936e+011
+543 457 1.84919e+011
+200 327 1.84798e+011
+122 188 1.84672e+011
+16 214 1.84652e+011
+58 100 1.84637e+011
+367 30 1.84527e+011
+237 131 1.84231e+011
+302 189 1.84166e+011
+106 431 1.84143e+011
+510 347 1.841e+011
+70 476 1.83978e+011
+13 433 1.83941e+011
+195 164 1.83816e+011
+278 110 1.83566e+011
+435 162 1.83488e+011
+152 130 1.83319e+011
+417 80 1.83256e+011
+283 135 1.83175e+011
+144 1 1.82986e+011
+540 219 1.82818e+011
+99 256 1.82611e+011
+188 304 1.82563e+011
+451 86 1.82533e+011
+448 125 1.82272e+011
+218 351 1.822e+011
+310 298 1.82159e+011
+201 393 1.8215e+011
+274 75 1.81961e+011
+396 46 1.81836e+011
+252 249 1.81604e+011
+413 84 1.81532e+011
+75 59 1.81507e+011
+401 144 1.81385e+011
+101 165 1.81314e+011
+349 240 1.81294e+011
+46 90 1.81268e+011
+3 165 1.81184e+011
+272 146 1.80982e+011
+236 197 1.80896e+011
+375 125 1.80873e+011
+354 296 1.80578e+011
+205 416 1.80457e+011
+210 33 1.80337e+011
+302 210 1.80329e+011
+448 119 1.8017e+011
+122 123 1.80169e+011
+548 245 1.80088e+011
+418 414 1.80084e+011
+510 114 1.8007e+011
+249 164 1.80064e+011
+394 183 1.79825e+011
+360 182 1.79697e+011
+380 46 1.79693e+011
+486 44 1.79629e+011
+261 383 1.79612e+011
+238 422 1.79612e+011
+136 323 1.79591e+011
+442 64 1.79325e+011
+402 219 1.79221e+011
+64 27 1.79215e+011
+449 178 1.79035e+011
+483 326 1.78803e+011
+341 314 1.78246e+011
+528 397 1.78149e+011
+108 28 1.781e+011
+399 274 1.7808e+011
+520 425 1.78058e+011
+585 18 1.78028e+011
+179 57 1.77912e+011
+12 113 1.77893e+011
+170 112 1.77853e+011
+350 128 1.77811e+011
+53 450 1.77773e+011
+133 428 1.7772e+011
+463 40 1.77633e+011
+401 200 1.77624e+011
+572 59 1.77532e+011
+82 197 1.77503e+011
+412 82 1.77127e+011
+525 189 1.77065e+011
+44 407 1.77059e+011
+322 425 1.77043e+011
+276 296 1.77021e+011
+4 235 1.76883e+011
+56 171 1.76758e+011
+338 92 1.76751e+011
+367 303 1.76709e+011
+369 30 1.76581e+011
+558 462 1.76458e+011
+246 257 1.76382e+011
+99 58 1.76109e+011
+187 325 1.76072e+011
+255 405 1.75988e+011
+352 424 1.75916e+011
+345 199 1.75847e+011
+149 89 1.75722e+011
+446 144 1.75433e+011
+229 16 1.75424e+011
+374 353 1.75388e+011
+339 221 1.75325e+011
+166 152 1.75217e+011
+162 31 1.75114e+011
+96 453 1.75098e+011
+480 45 1.74973e+011
+533 340 1.74934e+011
+126 128 1.74816e+011
+359 448 1.74675e+011
+246 419 1.74099e+011
+203 395 1.74093e+011
+183 382 1.7409e+011
+156 196 1.73998e+011
+174 121 1.73946e+011
+430 45 1.73945e+011
+326 179 1.73684e+011
+165 379 1.7368e+011
+134 411 1.73646e+011
+446 246 1.73544e+011
+18 236 1.73351e+011
+163 37 1.73336e+011
+485 235 1.73183e+011
+528 159 1.72891e+011
+114 357 1.72858e+011
+136 58 1.72601e+011
+534 40 1.72592e+011
+409 140 1.72541e+011
+569 421 1.72533e+011
+328 26 1.72327e+011
+84 236 1.72273e+011
+423 140 1.72247e+011
+236 199 1.72223e+011
+375 224 1.72205e+011
+565 463 1.72173e+011
+569 203 1.72115e+011
+434 63 1.72113e+011
+362 64 1.72036e+011
+123 83 1.72035e+011
+405 165 1.71706e+011
+390 203 1.71685e+011
+513 117 1.7153e+011
+178 40 1.71305e+011
+261 368 1.71183e+011
+360 220 1.71174e+011
+335 367 1.71111e+011
+417 23 1.71081e+011
+455 201 1.70945e+011
+132 411 1.70912e+011
+548 283 1.70489e+011
+302 405 1.70485e+011
+185 312 1.70483e+011
+242 384 1.70463e+011
+192 135 1.70422e+011
+46 407 1.70382e+011
+112 339 1.70344e+011
+310 335 1.70256e+011
+481 440 1.70208e+011
+311 260 1.70118e+011
+347 370 1.7011e+011
+11 72 1.69908e+011
+434 277 1.69866e+011
+45 355 1.69854e+011
+277 134 1.698e+011
+102 39 1.6978e+011
+562 71 1.6973e+011
+361 214 1.69652e+011
+119 223 1.6962e+011
+113 218 1.6956e+011
+389 131 1.6951e+011
+157 170 1.69465e+011
+162 138 1.69453e+011
+75 128 1.69317e+011
+278 165 1.69304e+011
+302 142 1.69276e+011
+151 57 1.69266e+011
+168 130 1.69138e+011
+126 111 1.69022e+011
+491 341 1.6901e+011
+249 403 1.6895e+011
+113 205 1.68873e+011
+487 204 1.6886e+011
+5 151 1.68706e+011
+113 168 1.68647e+011
+334 281 1.68524e+011
+230 151 1.68486e+011
+330 212 1.68483e+011
+587 18 1.68387e+011
+197 134 1.68299e+011
+161 257 1.68288e+011
+276 203 1.68249e+011
+360 50 1.68241e+011
+335 49 1.68028e+011
+489 342 1.68e+011
+405 144 1.67961e+011
+117 223 1.67855e+011
+327 10 1.67713e+011
+515 164 1.67435e+011
+454 118 1.67395e+011
+343 296 1.67219e+011
+137 178 1.67168e+011
+589 309 1.66993e+011
+540 221 1.6688e+011
+470 23 1.6677e+011
+141 116 1.66763e+011
+234 32 1.66667e+011
+247 259 1.66592e+011
+345 371 1.66522e+011
+182 310 1.66521e+011
+546 438 1.66323e+011
+438 455 1.66253e+011
+231 159 1.66207e+011
+482 122 1.66199e+011
+576 165 1.65647e+011
+529 135 1.65629e+011
+65 362 1.65597e+011
+293 89 1.65475e+011
+190 349 1.65007e+011
+262 396 1.6487e+011
+162 131 1.64601e+011
+583 141 1.64587e+011
+372 146 1.64453e+011
+229 14 1.64402e+011
+450 118 1.64325e+011
+362 449 1.64257e+011
+434 45 1.64151e+011
+252 148 1.64038e+011
+451 417 1.64009e+011
+118 116 1.63729e+011
+157 163 1.63683e+011
+163 349 1.63567e+011
+235 262 1.63456e+011
+64 153 1.63369e+011
+572 57 1.63152e+011
+244 214 1.63103e+011
+86 364 1.63043e+011
+153 217 1.63009e+011
+144 6 1.6291e+011
+302 132 1.62825e+011
+403 143 1.62781e+011
+156 317 1.62565e+011
+591 104 1.62526e+011
+143 237 1.62479e+011
+540 262 1.62394e+011
+245 172 1.62362e+011
+351 364 1.62322e+011
+471 138 1.62258e+011
+214 162 1.62253e+011
+444 243 1.6208e+011
+92 148 1.62032e+011
+109 180 1.62012e+011
+274 77 1.61994e+011
+123 219 1.61913e+011
+574 56 1.61816e+011
+16 434 1.61738e+011
+496 475 1.61674e+011
+136 94 1.61587e+011
+104 162 1.61552e+011
+240 365 1.61526e+011
+207 416 1.61511e+011
+328 103 1.61408e+011
+240 422 1.61392e+011
+294 269 1.61381e+011
+482 124 1.61306e+011
+265 286 1.61299e+011
+319 186 1.6128e+011
+214 425 1.61216e+011
+223 87 1.61119e+011
+320 95 1.61089e+011
+432 269 1.60823e+011
+237 365 1.60811e+011
+131 393 1.60632e+011
+38 287 1.60623e+011
+406 77 1.60511e+011
+42 339 1.60337e+011
+248 385 1.60171e+011
+605 121 1.60162e+011
+124 269 1.60161e+011
+556 265 1.60139e+011
+50 376 1.60082e+011
+154 298 1.60022e+011
+579 214 1.59862e+011
+39 83 1.59831e+011
+497 458 1.59522e+011
+414 144 1.5952e+011
+388 291 1.59501e+011
+39 81 1.59316e+011
+255 80 1.59295e+011
+139 316 1.59229e+011
+372 143 1.58913e+011
+374 151 1.58884e+011
+102 295 1.58866e+011
+76 111 1.58861e+011
+561 245 1.58769e+011
+254 108 1.58743e+011
+434 26 1.5868e+011
+69 419 1.58592e+011
+428 64 1.58588e+011
+103 27 1.58495e+011
+178 76 1.58445e+011
+395 241 1.58149e+011
+106 28 1.58127e+011
+399 200 1.5809e+011
+526 397 1.57904e+011
+86 366 1.57825e+011
+87 376 1.57598e+011
+81 236 1.57344e+011
+259 368 1.57195e+011
+484 222 1.57165e+011
+386 91 1.56991e+011
+419 363 1.56923e+011
+562 152 1.56686e+011
+250 259 1.56568e+011
+394 336 1.56513e+011
+275 109 1.56436e+011
+417 471 1.56403e+011
+126 307 1.56364e+011
+204 398 1.56335e+011
+151 76 1.5614e+011
+483 142 1.56075e+011
+86 62 1.55954e+011
+350 298 1.55717e+011
+248 261 1.55499e+011
+386 450 1.55498e+011
+542 142 1.55465e+011
+544 142 1.5545e+011
+512 297 1.5543e+011
+466 101 1.55354e+011
+311 89 1.55286e+011
+268 147 1.55064e+011
+513 350 1.54988e+011
+391 125 1.54891e+011
+173 417 1.54878e+011
+345 120 1.54856e+011
+73 164 1.54799e+011
+87 355 1.5477e+011
+450 197 1.54735e+011
+323 134 1.54734e+011
+362 361 1.54698e+011
+183 316 1.54559e+011
+501 22 1.54553e+011
+462 140 1.54373e+011
+332 392 1.54326e+011
+107 259 1.54015e+011
+334 436 1.53971e+011
+191 254 1.53696e+011
+566 143 1.53603e+011
+10 75 1.53518e+011
+397 142 1.53465e+011
+618 181 1.53329e+011
+284 34 1.5332e+011
+121 114 1.53276e+011
+85 110 1.5321e+011
+218 315 1.53111e+011
+408 260 1.52976e+011
+231 126 1.52941e+011
+412 263 1.52915e+011
+177 330 1.52571e+011
+256 105 1.52414e+011
+156 56 1.52381e+011
+104 182 1.52331e+011
+523 183 1.52331e+011
+414 264 1.52185e+011
+497 462 1.52153e+011
+90 113 1.52095e+011
+302 134 1.5206e+011
+404 104 1.52038e+011
+511 350 1.5203e+011
+227 122 1.51922e+011
+170 131 1.51702e+011
+450 441 1.51509e+011
+281 417 1.51485e+011
+465 115 1.5132e+011
+307 196 1.51299e+011
+302 87 1.51262e+011
+450 437 1.51189e+011
+370 464 1.51126e+011
+479 293 1.51078e+011
+544 247 1.509e+011
+430 86 1.50866e+011
+207 309 1.50851e+011
+167 358 1.50808e+011
+131 476 1.50719e+011
+391 335 1.5061e+011
+39 78 1.50544e+011
+502 420 1.50475e+011
+424 202 1.50358e+011
+437 43 1.50349e+011
+544 249 1.50344e+011
+88 252 1.5033e+011
+412 28 1.50224e+011
+391 449 1.50215e+011
+501 59 1.50185e+011
+83 146 1.50161e+011
+514 60 1.5011e+011
+234 295 1.50075e+011
+356 27 1.50058e+011
+402 163 1.5001e+011
+221 431 1.50008e+011
+274 143 1.49981e+011
+121 148 1.49972e+011
+424 204 1.49684e+011
+261 456 1.49603e+011
+177 201 1.49526e+011
+399 272 1.49503e+011
+532 241 1.49475e+011
+408 107 1.49383e+011
+429 223 1.49139e+011
+49 452 1.49094e+011
+191 327 1.48953e+011
+203 256 1.4891e+011
+58 106 1.48883e+011
+351 239 1.48868e+011
+419 97 1.48619e+011
+354 18 1.48544e+011
+384 450 1.48532e+011
+52 12 1.4835e+011
+507 41 1.48295e+011
+448 340 1.48294e+011
+191 325 1.48281e+011
+129 132 1.482e+011
+513 324 1.48113e+011
+343 298 1.48095e+011
+296 146 1.48085e+011
+375 144 1.48023e+011
+82 100 1.47999e+011
+322 427 1.47863e+011
+486 222 1.47816e+011
+161 326 1.47787e+011
+197 148 1.47718e+011
+335 143 1.47706e+011
+524 162 1.47521e+011
+72 373 1.47368e+011
+302 444 1.47367e+011
+197 91 1.47349e+011
+223 127 1.47147e+011
+113 307 1.47075e+011
+159 152 1.4701e+011
+485 237 1.46976e+011
+546 140 1.46937e+011
+275 316 1.46726e+011
+114 355 1.46689e+011
+152 300 1.46599e+011
+541 380 1.46551e+011
+276 426 1.46475e+011
+344 48 1.46418e+011
+523 141 1.46414e+011
+533 346 1.46389e+011
+221 215 1.46226e+011
+288 113 1.46181e+011
+244 196 1.46122e+011
+143 143 1.46052e+011
+147 125 1.45911e+011
+272 109 1.45557e+011
+540 264 1.45537e+011
+182 312 1.45533e+011
+148 137 1.45532e+011
+148 193 1.455e+011
+281 165 1.45443e+011
+116 359 1.4521e+011
+95 285 1.45157e+011
+36 470 1.45077e+011
+494 472 1.45013e+011
+538 62 1.45003e+011
+434 159 1.4499e+011
+481 126 1.44855e+011
+188 300 1.44734e+011
+538 162 1.44709e+011
+309 266 1.44663e+011
+392 241 1.4463e+011
+456 375 1.44536e+011
+132 376 1.44487e+011
+415 471 1.444e+011
+485 288 1.44257e+011
+205 126 1.44128e+011
+375 4 1.44083e+011
+435 92 1.44066e+011
+328 14 1.44057e+011
+76 376 1.43911e+011
+462 222 1.43878e+011
+412 183 1.43752e+011
+373 127 1.43587e+011
+331 334 1.43567e+011
+511 209 1.43345e+011
+348 392 1.43234e+011
+20 317 1.43206e+011
+192 365 1.43206e+011
+344 342 1.43125e+011
+478 221 1.42706e+011
+330 412 1.42582e+011
+416 298 1.42575e+011
+407 105 1.42497e+011
+568 181 1.42479e+011
+206 20 1.41974e+011
+284 199 1.41916e+011
+310 258 1.41908e+011
+316 100 1.41895e+011
+161 61 1.41835e+011
+188 256 1.4182e+011
+197 311 1.41617e+011
+530 190 1.41573e+011
+334 127 1.4156e+011
+565 44 1.41534e+011
+473 356 1.41353e+011
+376 226 1.41352e+011
+532 173 1.41336e+011
+451 125 1.41246e+011
+576 57 1.41177e+011
+99 151 1.40962e+011
+266 19 1.40934e+011
+501 357 1.40878e+011
+460 165 1.40874e+011
+299 254 1.40852e+011
+431 82 1.40835e+011
+498 139 1.40765e+011
+245 102 1.4055e+011
+149 201 1.40491e+011
+88 286 1.40455e+011
+438 397 1.40451e+011
+135 135 1.4037e+011
+211 93 1.40314e+011
+88 208 1.40089e+011
+275 318 1.39993e+011
+158 101 1.39828e+011
+50 378 1.39797e+011
+385 337 1.39749e+011
+40 183 1.39654e+011
+150 195 1.39566e+011
+526 399 1.39535e+011
+444 204 1.39527e+011
+166 309 1.3923e+011
+211 95 1.39191e+011
+27 117 1.39166e+011
+453 418 1.39043e+011
+44 251 1.38993e+011
+510 59 1.38962e+011
+285 158 1.38871e+011
+410 105 1.38828e+011
+314 448 1.38812e+011
+413 245 1.38776e+011
+576 91 1.38689e+011
+13 237 1.38682e+011
+95 290 1.3865e+011
+440 455 1.38606e+011
+259 458 1.38573e+011
+311 266 1.38565e+011
+291 50 1.38558e+011
+185 304 1.38468e+011
+161 151 1.38199e+011
+124 148 1.38185e+011
+106 359 1.3815e+011
+297 410 1.38027e+011
+180 17 1.37986e+011
+116 289 1.37955e+011
+313 261 1.37883e+011
+242 281 1.37782e+011
+49 458 1.37584e+011
+440 468 1.37564e+011
+222 107 1.37502e+011
+197 124 1.37356e+011
+532 239 1.37299e+011
+332 412 1.37183e+011
+303 293 1.37164e+011
+539 128 1.37159e+011
+446 165 1.37116e+011
+532 396 1.37045e+011
+451 46 1.36926e+011
+199 126 1.36812e+011
+231 177 1.3679e+011
+399 28 1.36771e+011
+411 144 1.36761e+011
+576 311 1.36746e+011
+90 78 1.36703e+011
+63 440 1.36669e+011
+232 273 1.3664e+011
+227 262 1.36442e+011
+191 187 1.36428e+011
+317 102 1.36401e+011
+246 183 1.36189e+011
+123 412 1.36134e+011
+156 78 1.36094e+011
+128 375 1.36035e+011
+162 431 1.3603e+011
+505 199 1.35884e+011
+270 414 1.35836e+011
+9 42 1.358e+011
+403 7 1.35778e+011
+460 140 1.35759e+011
+27 45 1.35738e+011
+91 320 1.35647e+011
+369 466 1.35645e+011
+469 207 1.35626e+011
+8 234 1.35551e+011
+421 298 1.35486e+011
+545 263 1.35254e+011
+425 25 1.35237e+011
+117 4 1.35207e+011
+95 283 1.35092e+011
+317 460 1.35046e+011
+147 451 1.34909e+011
+487 119 1.34776e+011
+323 370 1.34763e+011
+346 201 1.34755e+011
+262 33 1.34729e+011
+56 234 1.34653e+011
+323 137 1.34604e+011
+414 47 1.34424e+011
+348 277 1.34372e+011
+51 336 1.34337e+011
+267 417 1.34296e+011
+447 133 1.3429e+011
+28 119 1.34263e+011
+531 41 1.34181e+011
+399 92 1.34176e+011
+208 143 1.34159e+011
+465 161 1.34152e+011
+214 450 1.34067e+011
+362 241 1.34065e+011
+378 452 1.34063e+011
+65 307 1.34008e+011
+201 143 1.33993e+011
+258 158 1.33959e+011
+99 425 1.33952e+011
+321 11 1.33927e+011
+263 258 1.33717e+011
+556 80 1.33429e+011
+486 242 1.33376e+011
+385 64 1.33342e+011
+579 202 1.33181e+011
+147 326 1.32983e+011
+421 291 1.32775e+011
+159 154 1.3277e+011
+457 201 1.32765e+011
+220 84 1.32753e+011
+86 288 1.32735e+011
+122 342 1.32699e+011
+259 370 1.32633e+011
+161 120 1.32481e+011
+113 309 1.32327e+011
+570 269 1.32287e+011
+466 144 1.32286e+011
+243 182 1.32231e+011
+195 83 1.32084e+011
+480 128 1.31997e+011
+577 135 1.31968e+011
+345 140 1.31875e+011
+23 130 1.31817e+011
+491 24 1.31786e+011
+539 126 1.31768e+011
+352 270 1.31715e+011
+216 165 1.31682e+011
+83 102 1.31649e+011
+400 132 1.31575e+011
+59 171 1.31559e+011
+482 332 1.31556e+011
+160 310 1.31402e+011
+159 148 1.31382e+011
+416 301 1.31329e+011
+200 89 1.31314e+011
+366 67 1.31283e+011
+368 162 1.31262e+011
+570 325 1.31183e+011
+362 451 1.31104e+011
+458 140 1.30908e+011
+155 201 1.3089e+011
+169 123 1.30884e+011
+81 218 1.30687e+011
+176 343 1.30562e+011
+208 315 1.3043e+011
+255 191 1.30404e+011
+214 93 1.3036e+011
+288 160 1.30341e+011
+430 339 1.30299e+011
+213 131 1.30187e+011
+375 281 1.30173e+011
+280 87 1.30107e+011
+246 15 1.30073e+011
+66 57 1.29978e+011
+512 211 1.29953e+011
+55 142 1.29946e+011
+145 343 1.29858e+011
+263 145 1.29812e+011
+275 196 1.29668e+011
+476 402 1.29636e+011
+84 63 1.29597e+011
+44 337 1.29536e+011
+560 265 1.29422e+011
+484 81 1.29316e+011
+126 412 1.29286e+011
+266 191 1.29239e+011
+411 220 1.29211e+011
+514 401 1.29132e+011
+29 259 1.29061e+011
+499 474 1.29006e+011
+160 431 1.28901e+011
+50 374 1.28894e+011
+399 412 1.2879e+011
+388 203 1.28746e+011
+160 99 1.28706e+011
+354 326 1.28654e+011
+579 57 1.2862e+011
+182 95 1.28552e+011
+147 222 1.2849e+011
+547 263 1.28427e+011
+359 28 1.28403e+011
+116 429 1.28179e+011
+63 423 1.28057e+011
+80 406 1.27901e+011
+530 176 1.27885e+011
+291 11 1.27866e+011
+468 262 1.27848e+011
+54 61 1.27847e+011
+75 147 1.2779e+011
+130 375 1.27747e+011
+335 219 1.27669e+011
+488 84 1.27606e+011
+454 121 1.27605e+011
+62 229 1.27454e+011
+302 408 1.2729e+011
+262 109 1.272e+011
+542 62 1.27145e+011
+175 418 1.27136e+011
+387 21 1.26991e+011
+504 179 1.26949e+011
+26 271 1.26875e+011
+166 127 1.26645e+011
+139 311 1.26513e+011
+338 63 1.26473e+011
+216 403 1.26424e+011
+197 466 1.26392e+011
+401 43 1.26377e+011
+370 139 1.26371e+011
+143 141 1.26335e+011
+209 308 1.26242e+011
+266 75 1.26197e+011
+541 80 1.26176e+011
+145 451 1.26163e+011
+194 326 1.2607e+011
+168 291 1.25994e+011
+553 18 1.25865e+011
+257 201 1.25802e+011
+585 345 1.25768e+011
+411 222 1.25728e+011
+165 219 1.25715e+011
+312 131 1.25714e+011
+523 362 1.25693e+011
+347 120 1.25604e+011
+490 469 1.25602e+011
+78 218 1.25526e+011
+429 162 1.25432e+011
+301 85 1.25306e+011
+196 197 1.25289e+011
+201 7 1.25139e+011
+225 147 1.25109e+011
+183 56 1.2503e+011
+149 39 1.24937e+011
+169 179 1.2492e+011
+133 144 1.24746e+011
+330 217 1.24731e+011
+512 287 1.24698e+011
+116 276 1.24599e+011
+540 443 1.24538e+011
+39 115 1.24388e+011
+188 312 1.24317e+011
+586 309 1.24294e+011
+324 125 1.2421e+011
+456 122 1.24122e+011
+528 356 1.24102e+011
+118 181 1.24078e+011
+405 42 1.23938e+011
+571 454 1.23897e+011
+95 260 1.23897e+011
+206 234 1.23833e+011
+476 221 1.23823e+011
+103 258 1.23801e+011
+146 98 1.23756e+011
+201 87 1.2374e+011
+125 342 1.23688e+011
+93 276 1.23653e+011
+104 306 1.23652e+011
+243 31 1.23579e+011
+176 140 1.23434e+011
+312 264 1.23382e+011
+400 17 1.23326e+011
+107 162 1.23283e+011
+73 59 1.23256e+011
+409 144 1.23209e+011
+324 119 1.23187e+011
+164 248 1.23028e+011
+167 39 1.22857e+011
+130 95 1.22847e+011
+449 417 1.22845e+011
+212 396 1.22788e+011
+314 126 1.22751e+011
+162 91 1.22697e+011
+546 245 1.22663e+011
+386 355 1.22627e+011
+262 31 1.22609e+011
+70 259 1.2257e+011
+149 449 1.22555e+011
+141 118 1.22529e+011
+120 85 1.22525e+011
+250 85 1.2252e+011
+381 261 1.2249e+011
+186 94 1.22467e+011
+125 85 1.22303e+011
+511 368 1.22215e+011
+103 261 1.22151e+011
+66 477 1.22054e+011
+143 99 1.22045e+011
+575 99 1.21994e+011
+68 57 1.2198e+011
+382 104 1.21969e+011
+306 54 1.21882e+011
+180 360 1.21787e+011
+408 473 1.21689e+011
+411 417 1.21596e+011
+482 222 1.21547e+011
+562 200 1.21495e+011
+299 87 1.21456e+011
+488 52 1.21401e+011
+148 195 1.21366e+011
+317 98 1.21298e+011
+344 187 1.21093e+011
+195 201 1.20954e+011
+236 136 1.20936e+011
+163 190 1.20931e+011
+45 340 1.20907e+011
+63 448 1.20892e+011
+263 260 1.20881e+011
+186 375 1.20871e+011
+91 338 1.20709e+011
+568 222 1.20631e+011
+356 254 1.20549e+011
+287 198 1.20426e+011
+135 102 1.20329e+011
+528 438 1.20135e+011
+430 63 1.20117e+011
+326 101 1.20029e+011
+418 94 1.20015e+011
+448 288 1.19992e+011
+129 125 1.19988e+011
+47 421 1.19958e+011
+24 254 1.19834e+011
+103 98 1.1981e+011
+180 380 1.19799e+011
+133 63 1.1969e+011
+50 147 1.19624e+011
+336 182 1.19601e+011
+441 340 1.19597e+011
+510 245 1.19574e+011
+500 19 1.1955e+011
+69 389 1.19472e+011
+514 365 1.19408e+011
+519 141 1.19249e+011
+442 128 1.19203e+011
+179 271 1.19165e+011
+403 5 1.19055e+011
+512 110 1.18903e+011
+195 211 1.1883e+011
+34 336 1.18777e+011
+473 453 1.18743e+011
+89 398 1.18443e+011
+480 457 1.18386e+011
+450 195 1.18336e+011
+176 325 1.18332e+011
+193 238 1.1824e+011
+257 458 1.18173e+011
+31 111 1.18007e+011
+496 472 1.18004e+011
+401 425 1.17961e+011
+222 434 1.17894e+011
+578 84 1.17805e+011
+543 276 1.17675e+011
+130 373 1.17647e+011
+148 87 1.17646e+011
+69 370 1.17588e+011
+46 419 1.17579e+011
+514 334 1.17526e+011
+455 437 1.17516e+011
+48 336 1.17478e+011
+137 122 1.17424e+011
+54 150 1.17406e+011
+118 263 1.17303e+011
+591 106 1.17294e+011
+63 314 1.17162e+011
+324 259 1.17113e+011
+25 49 1.16991e+011
+518 361 1.16962e+011
+289 308 1.16942e+011
+225 201 1.1688e+011
+272 315 1.16795e+011
+83 106 1.1661e+011
+290 140 1.16575e+011
+164 432 1.16509e+011
+286 443 1.16489e+011
+357 63 1.16483e+011
+445 445 1.16431e+011
+603 365 1.16421e+011
+125 340 1.16421e+011
+266 79 1.16242e+011
+51 252 1.16179e+011
+523 429 1.1616e+011
+523 186 1.15947e+011
+386 246 1.15935e+011
+398 95 1.1589e+011
+360 140 1.15868e+011
+422 331 1.15821e+011
+254 182 1.15816e+011
+578 326 1.15782e+011
+187 291 1.15764e+011
+242 357 1.15725e+011
+167 179 1.1565e+011
+62 200 1.15646e+011
+58 303 1.15642e+011
+223 103 1.15566e+011
+209 394 1.15514e+011
+493 103 1.15441e+011
+32 40 1.15345e+011
+9 31 1.153e+011
+521 323 1.15187e+011
+521 91 1.15183e+011
+217 171 1.1517e+011
+473 102 1.15099e+011
+229 365 1.15087e+011
+334 444 1.15012e+011
+400 129 1.15009e+011
+166 202 1.14999e+011
+510 366 1.14989e+011
+214 290 1.14886e+011
+333 181 1.1482e+011
+469 434 1.14746e+011
+165 364 1.14724e+011
+180 221 1.14708e+011
+284 125 1.14697e+011
+524 278 1.14688e+011
+410 282 1.14666e+011
+331 182 1.146e+011
+137 176 1.14498e+011
+347 124 1.14371e+011
+282 79 1.14254e+011
+529 18 1.14253e+011
+208 76 1.14231e+011
+401 67 1.14225e+011
+332 395 1.14203e+011
+135 125 1.14201e+011
+148 197 1.14033e+011
+388 3 1.14007e+011
+115 180 1.13916e+011
+181 292 1.13866e+011
+121 219 1.13807e+011
+146 139 1.13793e+011
+455 418 1.13717e+011
+298 257 1.13591e+011
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_3_7.txt b/test_data/harriscorners/hc_msc_0.00_0.10_3_7.txt
new file mode 100644
index 0000000..5531059
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_3_7.txt
@@ -0,0 +1,3215 @@
+3214
+121 44 4.84941e+012
+274 367 4.55096e+012
+245 94 4.32557e+012
+421 180 4.09909e+012
+274 365 4.09295e+012
+277 367 3.94883e+012
+331 128 3.79009e+012
+83 77 3.57588e+012
+499 1 3.54332e+012
+401 263 3.53735e+012
+299 53 3.44537e+012
+135 214 3.38247e+012
+121 46 3.20482e+012
+238 20 3.18512e+012
+424 322 3.04337e+012
+271 291 3.041e+012
+81 29 3.00702e+012
+199 18 2.81087e+012
+282 113 2.75319e+012
+202 18 2.73449e+012
+130 26 2.6925e+012
+75 257 2.68024e+012
+437 68 2.66398e+012
+542 14 2.66063e+012
+458 279 2.59066e+012
+342 8 2.54577e+012
+165 240 2.52535e+012
+238 17 2.51763e+012
+55 30 2.51705e+012
+460 264 2.49125e+012
+80 4 2.48443e+012
+424 177 2.48342e+012
+342 10 2.46914e+012
+510 124 2.44225e+012
+467 238 2.43419e+012
+361 294 2.40389e+012
+151 223 2.38609e+012
+210 436 2.35956e+012
+510 166 2.34537e+012
+394 142 2.31198e+012
+138 204 2.31087e+012
+543 167 2.30272e+012
+302 184 2.29592e+012
+394 317 2.26998e+012
+482 178 2.25352e+012
+469 238 2.2529e+012
+213 58 2.2456e+012
+396 317 2.24235e+012
+390 142 2.22816e+012
+413 255 2.19724e+012
+282 111 2.19695e+012
+160 144 2.19052e+012
+486 58 2.18352e+012
+512 78 2.1797e+012
+183 35 2.17467e+012
+302 181 2.17451e+012
+481 180 2.15832e+012
+104 61 2.13494e+012
+125 255 2.12015e+012
+175 95 2.11358e+012
+167 240 2.1111e+012
+562 225 2.08809e+012
+155 235 2.07443e+012
+165 242 2.06172e+012
+345 339 2.06081e+012
+304 183 2.05842e+012
+484 58 2.05743e+012
+243 203 2.05053e+012
+416 8 2.03043e+012
+34 138 2.02214e+012
+81 1 2.01925e+012
+554 39 2.01575e+012
+293 16 2.00419e+012
+361 395 2.00337e+012
+342 338 1.9992e+012
+208 221 1.99842e+012
+304 181 1.98924e+012
+224 181 1.98325e+012
+102 222 1.9817e+012
+528 102 1.9771e+012
+222 181 1.96771e+012
+485 338 1.95887e+012
+167 242 1.95805e+012
+260 297 1.95155e+012
+413 257 1.94591e+012
+83 134 1.93867e+012
+115 43 1.92184e+012
+258 384 1.91941e+012
+79 80 1.91742e+012
+36 145 1.91548e+012
+348 339 1.91241e+012
+301 105 1.90955e+012
+295 15 1.90314e+012
+175 111 1.89602e+012
+202 313 1.89014e+012
+419 8 1.88747e+012
+240 92 1.87419e+012
+544 58 1.87306e+012
+209 56 1.87138e+012
+125 186 1.86873e+012
+506 17 1.86781e+012
+244 166 1.86693e+012
+242 201 1.86228e+012
+215 71 1.86136e+012
+138 208 1.8608e+012
+497 160 1.85503e+012
+158 74 1.84504e+012
+130 37 1.84411e+012
+421 165 1.8432e+012
+319 314 1.83258e+012
+528 24 1.83121e+012
+137 202 1.82667e+012
+302 176 1.82144e+012
+66 235 1.81926e+012
+263 442 1.81517e+012
+44 26 1.8113e+012
+221 37 1.80843e+012
+127 164 1.80823e+012
+31 8 1.80453e+012
+77 3 1.78852e+012
+34 267 1.7835e+012
+363 400 1.78098e+012
+359 129 1.78061e+012
+326 165 1.77938e+012
+171 96 1.77603e+012
+138 210 1.77488e+012
+46 26 1.77244e+012
+90 197 1.77061e+012
+209 20 1.768e+012
+126 364 1.75161e+012
+424 45 1.74767e+012
+4 46 1.74517e+012
+196 126 1.74388e+012
+174 113 1.74136e+012
+448 399 1.73624e+012
+255 139 1.72906e+012
+164 215 1.72889e+012
+48 98 1.71694e+012
+383 5 1.70794e+012
+299 165 1.69833e+012
+359 166 1.69422e+012
+511 2 1.69332e+012
+378 67 1.69035e+012
+454 204 1.68774e+012
+302 166 1.68658e+012
+265 442 1.68603e+012
+313 148 1.68372e+012
+460 266 1.68203e+012
+276 182 1.67955e+012
+390 59 1.67921e+012
+252 139 1.67486e+012
+189 218 1.67475e+012
+41 217 1.6724e+012
+319 225 1.66902e+012
+47 28 1.66704e+012
+447 296 1.66424e+012
+452 204 1.6605e+012
+326 89 1.65978e+012
+449 299 1.65637e+012
+359 334 1.65441e+012
+87 197 1.65289e+012
+83 136 1.65155e+012
+319 312 1.65124e+012
+509 163 1.64924e+012
+450 338 1.64766e+012
+112 344 1.64591e+012
+542 365 1.63822e+012
+552 383 1.63668e+012
+301 179 1.6355e+012
+127 1 1.63539e+012
+386 178 1.63192e+012
+507 19 1.63002e+012
+241 70 1.62946e+012
+234 161 1.6191e+012
+34 8 1.61641e+012
+49 26 1.61393e+012
+418 165 1.61108e+012
+223 420 1.60955e+012
+282 49 1.60766e+012
+387 220 1.59888e+012
+447 299 1.59599e+012
+448 261 1.59269e+012
+206 436 1.59169e+012
+513 342 1.59035e+012
+64 319 1.58994e+012
+485 358 1.58928e+012
+224 39 1.5871e+012
+269 53 1.58253e+012
+413 45 1.57323e+012
+123 197 1.57009e+012
+125 259 1.56963e+012
+383 163 1.56954e+012
+283 117 1.5673e+012
+132 75 1.56606e+012
+420 46 1.56512e+012
+388 177 1.56436e+012
+238 201 1.5641e+012
+391 296 1.56321e+012
+373 84 1.55277e+012
+261 202 1.55259e+012
+111 169 1.54882e+012
+125 199 1.54763e+012
+358 319 1.54727e+012
+384 10 1.54364e+012
+123 199 1.5423e+012
+189 216 1.54053e+012
+362 258 1.53897e+012
+208 225 1.53786e+012
+428 118 1.537e+012
+403 120 1.53594e+012
+352 321 1.53459e+012
+310 148 1.5297e+012
+367 143 1.52964e+012
+174 311 1.5207e+012
+365 300 1.52033e+012
+481 84 1.51839e+012
+55 290 1.5166e+012
+206 449 1.51516e+012
+547 162 1.5111e+012
+465 196 1.51037e+012
+464 395 1.50762e+012
+364 253 1.50712e+012
+162 110 1.50575e+012
+138 174 1.50491e+012
+157 1 1.50381e+012
+64 344 1.50329e+012
+32 269 1.50328e+012
+267 53 1.50288e+012
+46 221 1.50102e+012
+508 2 1.49915e+012
+475 261 1.49733e+012
+512 221 1.49536e+012
+477 19 1.49484e+012
+326 141 1.49466e+012
+166 98 1.49087e+012
+432 147 1.48701e+012
+542 217 1.48597e+012
+46 219 1.48523e+012
+317 336 1.4824e+012
+265 296 1.48237e+012
+357 166 1.48091e+012
+542 214 1.4727e+012
+87 254 1.47026e+012
+195 56 1.46823e+012
+144 311 1.46671e+012
+245 207 1.4665e+012
+31 235 1.46607e+012
+516 75 1.46499e+012
+253 12 1.46353e+012
+404 183 1.46255e+012
+274 132 1.45984e+012
+427 120 1.45534e+012
+93 214 1.44909e+012
+64 342 1.4475e+012
+129 75 1.44649e+012
+107 39 1.44451e+012
+37 298 1.44249e+012
+247 206 1.44196e+012
+313 84 1.44021e+012
+174 41 1.43992e+012
+101 79 1.43879e+012
+260 222 1.43847e+012
+294 27 1.43839e+012
+36 135 1.43786e+012
+143 324 1.43781e+012
+469 123 1.43734e+012
+364 250 1.43603e+012
+283 402 1.43581e+012
+364 255 1.4348e+012
+365 6 1.43421e+012
+355 127 1.43209e+012
+260 220 1.43131e+012
+60 184 1.42955e+012
+111 136 1.4236e+012
+385 164 1.42322e+012
+226 37 1.42168e+012
+546 41 1.41682e+012
+170 240 1.41474e+012
+477 5 1.41422e+012
+217 145 1.41341e+012
+287 298 1.40678e+012
+389 11 1.40586e+012
+232 199 1.40324e+012
+284 298 1.40077e+012
+164 95 1.39765e+012
+250 12 1.39627e+012
+227 293 1.39331e+012
+229 293 1.39263e+012
+61 217 1.38675e+012
+34 100 1.38625e+012
+112 392 1.38466e+012
+528 183 1.38305e+012
+272 280 1.38163e+012
+280 365 1.38132e+012
+152 307 1.37994e+012
+298 274 1.3789e+012
+512 97 1.37706e+012
+38 63 1.37705e+012
+169 19 1.37538e+012
+413 6 1.36219e+012
+411 258 1.35853e+012
+272 68 1.35124e+012
+511 19 1.34977e+012
+217 147 1.34696e+012
+486 180 1.34374e+012
+423 336 1.3437e+012
+328 296 1.34367e+012
+525 24 1.34287e+012
+249 143 1.3409e+012
+261 236 1.34087e+012
+441 24 1.34032e+012
+142 185 1.33957e+012
+141 182 1.3382e+012
+47 150 1.33531e+012
+380 5 1.33521e+012
+256 152 1.33441e+012
+329 258 1.33299e+012
+518 59 1.32974e+012
+523 346 1.32959e+012
+36 174 1.3236e+012
+158 72 1.32323e+012
+211 184 1.31781e+012
+246 144 1.31718e+012
+209 450 1.31676e+012
+510 81 1.31639e+012
+312 75 1.31625e+012
+512 99 1.31071e+012
+527 195 1.30966e+012
+126 26 1.30808e+012
+317 165 1.3034e+012
+247 219 1.30294e+012
+335 90 1.30115e+012
+58 218 1.30107e+012
+58 6 1.29816e+012
+563 62 1.29588e+012
+495 118 1.29454e+012
+580 17 1.29337e+012
+524 20 1.29175e+012
+229 37 1.28911e+012
+490 139 1.28868e+012
+56 6 1.28833e+012
+436 396 1.28702e+012
+132 71 1.28279e+012
+484 363 1.28179e+012
+514 203 1.28175e+012
+153 197 1.28084e+012
+391 47 1.28045e+012
+488 58 1.27793e+012
+562 478 1.27733e+012
+285 295 1.27441e+012
+128 187 1.27429e+012
+109 43 1.27086e+012
+365 258 1.27041e+012
+512 219 1.26835e+012
+140 325 1.26585e+012
+204 310 1.26415e+012
+380 67 1.2611e+012
+431 318 1.26083e+012
+260 238 1.25909e+012
+526 197 1.25784e+012
+402 118 1.25673e+012
+173 239 1.25522e+012
+108 60 1.25461e+012
+236 347 1.25411e+012
+12 217 1.25262e+012
+314 163 1.25115e+012
+57 75 1.25102e+012
+187 218 1.25069e+012
+24 62 1.24881e+012
+508 454 1.24848e+012
+510 4 1.24602e+012
+294 122 1.24291e+012
+89 149 1.24223e+012
+265 445 1.24196e+012
+522 264 1.24175e+012
+232 263 1.23967e+012
+331 105 1.23707e+012
+115 392 1.23646e+012
+324 165 1.23046e+012
+390 140 1.23034e+012
+480 18 1.22882e+012
+50 288 1.22875e+012
+110 58 1.22865e+012
+194 126 1.2245e+012
+145 161 1.22223e+012
+388 164 1.22212e+012
+131 132 1.22102e+012
+409 354 1.21975e+012
+509 203 1.21622e+012
+113 346 1.21496e+012
+25 65 1.21466e+012
+173 237 1.21278e+012
+273 219 1.21229e+012
+473 243 1.21154e+012
+168 326 1.20744e+012
+487 22 1.2063e+012
+302 215 1.20395e+012
+158 96 1.20332e+012
+575 16 1.20268e+012
+514 346 1.20224e+012
+365 142 1.20008e+012
+253 74 1.19981e+012
+236 72 1.1997e+012
+323 315 1.19739e+012
+309 370 1.19627e+012
+220 149 1.19604e+012
+362 7 1.19308e+012
+394 140 1.1924e+012
+380 162 1.1895e+012
+538 457 1.18929e+012
+394 163 1.18899e+012
+476 22 1.18636e+012
+394 161 1.18425e+012
+548 182 1.18409e+012
+101 360 1.18377e+012
+343 108 1.18376e+012
+526 186 1.18113e+012
+543 211 1.18084e+012
+528 186 1.18053e+012
+192 143 1.17996e+012
+411 65 1.17628e+012
+109 240 1.17441e+012
+107 44 1.17141e+012
+376 317 1.17038e+012
+448 218 1.16991e+012
+190 108 1.16755e+012
+497 118 1.16752e+012
+22 65 1.16691e+012
+379 338 1.16658e+012
+222 218 1.16622e+012
+276 353 1.16597e+012
+409 64 1.16445e+012
+489 1 1.16378e+012
+34 235 1.15933e+012
+392 218 1.15813e+012
+544 2 1.15705e+012
+29 30 1.15678e+012
+7 10 1.15644e+012
+291 122 1.15496e+012
+442 239 1.15448e+012
+250 220 1.15334e+012
+523 344 1.14816e+012
+305 439 1.1468e+012
+251 423 1.14557e+012
+156 74 1.14518e+012
+111 241 1.14395e+012
+275 141 1.14246e+012
+191 278 1.1402e+012
+339 8 1.14004e+012
+26 9 1.13877e+012
+498 66 1.13851e+012
+392 160 1.13662e+012
+339 10 1.13639e+012
+66 26 1.13253e+012
+450 217 1.13174e+012
+278 219 1.13032e+012
+56 4 1.12957e+012
+385 295 1.12861e+012
+162 96 1.12847e+012
+475 243 1.12798e+012
+182 137 1.1279e+012
+408 183 1.12508e+012
+428 2 1.12446e+012
+511 203 1.12326e+012
+535 266 1.12326e+012
+240 95 1.12229e+012
+277 141 1.12087e+012
+568 41 1.12046e+012
+132 1 1.11981e+012
+286 209 1.11928e+012
+190 171 1.11901e+012
+410 162 1.11851e+012
+389 323 1.11826e+012
+528 360 1.11808e+012
+469 421 1.1174e+012
+303 169 1.11722e+012
+487 263 1.11684e+012
+510 140 1.11574e+012
+526 183 1.11536e+012
+512 140 1.11483e+012
+378 317 1.1112e+012
+477 204 1.11085e+012
+269 68 1.10978e+012
+506 2 1.10565e+012
+405 82 1.10418e+012
+168 115 1.1036e+012
+194 124 1.10354e+012
+541 208 1.10315e+012
+131 216 1.10185e+012
+385 324 1.10162e+012
+172 55 1.10158e+012
+467 140 1.10153e+012
+222 112 1.09734e+012
+510 84 1.09653e+012
+521 183 1.09643e+012
+174 187 1.09581e+012
+534 20 1.09461e+012
+275 139 1.09433e+012
+538 138 1.09376e+012
+462 43 1.09356e+012
+493 139 1.09107e+012
+227 186 1.08983e+012
+160 139 1.08838e+012
+90 258 1.08755e+012
+205 20 1.08747e+012
+455 85 1.08702e+012
+466 123 1.08652e+012
+544 4 1.08473e+012
+520 201 1.08397e+012
+558 19 1.08131e+012
+61 134 1.08033e+012
+566 61 1.07969e+012
+462 27 1.07882e+012
+287 164 1.07822e+012
+407 82 1.07647e+012
+222 151 1.07636e+012
+392 163 1.07608e+012
+263 402 1.076e+012
+276 179 1.07129e+012
+479 15 1.07048e+012
+536 244 1.06987e+012
+162 115 1.0697e+012
+172 19 1.06719e+012
+166 20 1.06667e+012
+33 30 1.06538e+012
+155 94 1.06538e+012
+414 23 1.06475e+012
+479 204 1.06472e+012
+543 208 1.06442e+012
+541 41 1.06434e+012
+145 392 1.06355e+012
+42 63 1.06249e+012
+97 448 1.0623e+012
+112 42 1.0592e+012
+509 142 1.05871e+012
+571 40 1.05732e+012
+253 76 1.05706e+012
+322 146 1.05523e+012
+211 144 1.05486e+012
+359 219 1.05449e+012
+275 137 1.05448e+012
+574 140 1.05376e+012
+437 338 1.05364e+012
+166 326 1.05275e+012
+418 87 1.05259e+012
+453 85 1.05204e+012
+509 174 1.05152e+012
+139 111 1.05121e+012
+343 122 1.05112e+012
+266 203 1.04752e+012
+175 260 1.04642e+012
+176 239 1.04598e+012
+139 109 1.04567e+012
+415 164 1.04513e+012
+533 266 1.04478e+012
+150 306 1.04435e+012
+418 85 1.0439e+012
+531 360 1.04389e+012
+61 203 1.04325e+012
+269 277 1.04303e+012
+366 105 1.04222e+012
+435 182 1.04001e+012
+114 169 1.03935e+012
+380 107 1.03918e+012
+420 87 1.03878e+012
+4 10 1.03744e+012
+330 141 1.03501e+012
+134 97 1.03482e+012
+97 80 1.03408e+012
+277 143 1.034e+012
+279 143 1.0333e+012
+256 147 1.03289e+012
+261 234 1.03274e+012
+188 182 1.03212e+012
+10 101 1.03198e+012
+278 390 1.03143e+012
+446 23 1.03126e+012
+272 64 1.03097e+012
+360 142 1.03084e+012
+375 117 1.03078e+012
+578 53 1.03028e+012
+164 206 1.03025e+012
+36 219 1.0302e+012
+27 30 1.02973e+012
+232 347 1.02972e+012
+139 20 1.02823e+012
+184 110 1.02599e+012
+238 72 1.02536e+012
+226 421 1.02379e+012
+69 149 1.02194e+012
+108 98 1.02142e+012
+512 142 1.02111e+012
+218 208 1.02071e+012
+264 203 1.01924e+012
+452 374 1.01837e+012
+162 126 1.0183e+012
+533 240 1.01778e+012
+157 91 1.01398e+012
+102 236 1.0138e+012
+188 108 1.01336e+012
+372 161 1.01276e+012
+261 141 1.01235e+012
+222 16 1.01145e+012
+387 126 1.00918e+012
+186 202 1.00863e+012
+342 166 1.00794e+012
+394 65 1.00747e+012
+385 322 1.00718e+012
+501 142 1.0067e+012
+528 363 1.00582e+012
+417 438 1.00542e+012
+215 125 1.00368e+012
+342 164 1.00347e+012
+437 182 1.00335e+012
+372 69 1.00334e+012
+190 360 1.00266e+012
+346 349 1.00186e+012
+48 133 1.00146e+012
+346 276 1.00104e+012
+102 164 9.99339e+011
+71 149 9.96927e+011
+523 122 9.96339e+011
+183 399 9.96094e+011
+142 393 9.95737e+011
+75 8 9.95669e+011
+164 210 9.95237e+011
+575 178 9.94842e+011
+340 109 9.93824e+011
+530 141 9.93295e+011
+485 44 9.93162e+011
+437 305 9.92782e+011
+432 112 9.90392e+011
+393 21 9.90238e+011
+541 124 9.90203e+011
+511 174 9.90133e+011
+498 225 9.89478e+011
+162 277 9.87048e+011
+356 259 9.86396e+011
+105 222 9.8595e+011
+534 184 9.85628e+011
+160 137 9.85571e+011
+540 98 9.84231e+011
+332 294 9.83051e+011
+159 181 9.82015e+011
+373 117 9.81666e+011
+405 339 9.81269e+011
+104 3 9.799e+011
+59 253 9.78754e+011
+259 165 9.76499e+011
+579 81 9.76275e+011
+273 166 9.76052e+011
+279 129 9.75983e+011
+421 141 9.75373e+011
+446 8 9.75015e+011
+250 194 9.72965e+011
+114 216 9.72954e+011
+170 200 9.7238e+011
+218 106 9.71234e+011
+155 91 9.70715e+011
+91 254 9.69827e+011
+61 253 9.68965e+011
+377 120 9.68157e+011
+403 277 9.68156e+011
+482 173 9.68019e+011
+394 63 9.67644e+011
+445 123 9.67355e+011
+161 166 9.67194e+011
+363 180 9.66306e+011
+499 62 9.6611e+011
+223 14 9.65852e+011
+266 16 9.63942e+011
+63 59 9.63644e+011
+346 179 9.63624e+011
+503 143 9.63152e+011
+238 75 9.62802e+011
+394 218 9.62563e+011
+49 155 9.61578e+011
+509 343 9.60774e+011
+388 21 9.60767e+011
+564 160 9.60665e+011
+83 476 9.60395e+011
+274 72 9.59796e+011
+265 30 9.59789e+011
+191 204 9.5971e+011
+356 219 9.58988e+011
+68 46 9.58945e+011
+271 166 9.5732e+011
+268 242 9.57113e+011
+175 164 9.57008e+011
+386 128 9.56573e+011
+175 19 9.55985e+011
+78 271 9.55559e+011
+527 347 9.54544e+011
+69 25 9.51868e+011
+503 164 9.51627e+011
+233 345 9.51431e+011
+228 263 9.49389e+011
+34 64 9.48434e+011
+411 21 9.46793e+011
+465 121 9.45771e+011
+547 217 9.4441e+011
+107 28 9.4387e+011
+516 182 9.43288e+011
+345 166 9.43015e+011
+176 237 9.42572e+011
+296 421 9.42171e+011
+42 81 9.41373e+011
+480 299 9.41236e+011
+480 165 9.39604e+011
+85 1 9.37699e+011
+404 376 9.37487e+011
+448 124 9.37114e+011
+77 236 9.37104e+011
+72 259 9.36801e+011
+536 394 9.36378e+011
+248 314 9.35664e+011
+373 392 9.34615e+011
+100 198 9.34577e+011
+134 127 9.33931e+011
+110 179 9.31995e+011
+530 143 9.29469e+011
+436 124 9.28068e+011
+54 222 9.27804e+011
+572 162 9.27279e+011
+264 32 9.27274e+011
+16 217 9.25485e+011
+493 81 9.25454e+011
+66 216 9.25141e+011
+359 315 9.25e+011
+72 146 9.24057e+011
+537 96 9.23874e+011
+329 11 9.23841e+011
+277 187 9.23522e+011
+165 277 9.23051e+011
+506 61 9.22641e+011
+251 366 9.22515e+011
+205 295 9.22458e+011
+298 138 9.22358e+011
+544 457 9.21955e+011
+438 160 9.20615e+011
+200 129 9.18237e+011
+340 122 9.18213e+011
+112 216 9.18165e+011
+479 296 9.18065e+011
+205 163 9.18027e+011
+301 205 9.17451e+011
+269 132 9.16906e+011
+449 138 9.16248e+011
+210 153 9.15711e+011
+385 244 9.15381e+011
+466 26 9.13591e+011
+48 10 9.13457e+011
+94 257 9.12781e+011
+276 331 9.12645e+011
+78 269 9.12581e+011
+185 343 9.12425e+011
+191 127 9.12389e+011
+166 107 9.12261e+011
+209 155 9.11792e+011
+279 353 9.11378e+011
+78 475 9.11006e+011
+228 129 9.09291e+011
+228 127 9.09201e+011
+449 140 9.0877e+011
+353 337 9.08417e+011
+406 64 9.08373e+011
+406 198 9.0809e+011
+375 162 9.07603e+011
+403 186 9.06308e+011
+159 239 9.06272e+011
+388 16 9.05736e+011
+296 331 9.04573e+011
+330 166 9.04205e+011
+357 11 9.04186e+011
+165 357 9.04038e+011
+85 61 9.03753e+011
+542 98 9.02543e+011
+543 8 9.02094e+011
+482 175 9.02028e+011
+425 4 9.01095e+011
+506 143 9.00812e+011
+282 72 9.00529e+011
+452 45 8.98103e+011
+147 398 8.97906e+011
+191 206 8.96506e+011
+78 40 8.94336e+011
+195 132 8.94316e+011
+517 346 8.94203e+011
+483 164 8.92468e+011
+364 201 8.92397e+011
+120 115 8.92216e+011
+562 18 8.92202e+011
+68 476 8.9059e+011
+150 112 8.90161e+011
+97 445 8.89818e+011
+145 6 8.8698e+011
+287 51 8.86234e+011
+152 112 8.85083e+011
+206 157 8.8437e+011
+349 144 8.83573e+011
+247 386 8.8343e+011
+114 1 8.83192e+011
+456 44 8.83177e+011
+48 12 8.81094e+011
+126 38 8.80899e+011
+526 38 8.8017e+011
+241 57 8.78907e+011
+400 277 8.7878e+011
+333 296 8.77849e+011
+390 166 8.77618e+011
+377 85 8.74634e+011
+484 375 8.73749e+011
+445 354 8.73635e+011
+474 204 8.73439e+011
+509 6 8.72433e+011
+251 364 8.71485e+011
+119 128 8.70111e+011
+209 419 8.69797e+011
+165 313 8.69538e+011
+109 94 8.69392e+011
+397 163 8.68813e+011
+423 261 8.68097e+011
+515 42 8.67494e+011
+223 433 8.66666e+011
+340 264 8.66458e+011
+368 107 8.65844e+011
+180 137 8.65629e+011
+162 252 8.65104e+011
+218 125 8.65014e+011
+289 346 8.61939e+011
+46 81 8.60611e+011
+501 361 8.60145e+011
+376 353 8.58425e+011
+548 220 8.57326e+011
+524 186 8.56856e+011
+449 166 8.56854e+011
+38 240 8.56374e+011
+554 181 8.55823e+011
+413 65 8.54403e+011
+287 262 8.54396e+011
+31 66 8.54241e+011
+396 21 8.53941e+011
+424 63 8.5383e+011
+304 189 8.53666e+011
+423 5 8.53309e+011
+56 145 8.51954e+011
+507 6 8.50439e+011
+306 364 8.50302e+011
+164 115 8.49569e+011
+340 163 8.49253e+011
+218 98 8.48366e+011
+86 181 8.47307e+011
+524 171 8.47177e+011
+306 105 8.46787e+011
+298 421 8.46653e+011
+91 290 8.45422e+011
+331 202 8.44149e+011
+389 65 8.43949e+011
+419 259 8.43386e+011
+56 66 8.42483e+011
+232 34 8.42106e+011
+238 164 8.41293e+011
+237 134 8.40717e+011
+503 61 8.40703e+011
+412 98 8.40489e+011
+93 149 8.40379e+011
+205 159 8.39964e+011
+563 323 8.39093e+011
+299 140 8.39051e+011
+112 177 8.38654e+011
+541 139 8.37882e+011
+182 108 8.37816e+011
+289 124 8.37742e+011
+178 273 8.37454e+011
+249 366 8.37156e+011
+135 147 8.35965e+011
+434 159 8.35389e+011
+354 11 8.33668e+011
+325 426 8.33356e+011
+385 88 8.33355e+011
+412 100 8.31961e+011
+368 109 8.31706e+011
+401 275 8.31385e+011
+57 70 8.30989e+011
+164 73 8.29561e+011
+327 105 8.29392e+011
+190 139 8.26753e+011
+343 264 8.26715e+011
+228 260 8.25313e+011
+95 149 8.23969e+011
+150 114 8.23292e+011
+525 222 8.22857e+011
+512 363 8.22757e+011
+374 240 8.22393e+011
+278 132 8.22307e+011
+61 370 8.2228e+011
+147 78 8.2182e+011
+67 253 8.21768e+011
+510 129 8.21264e+011
+11 204 8.20997e+011
+33 110 8.20821e+011
+46 12 8.20434e+011
+272 145 8.20402e+011
+224 149 8.19493e+011
+6 64 8.18242e+011
+463 101 8.17533e+011
+365 337 8.16844e+011
+529 39 8.1629e+011
+52 358 8.15844e+011
+207 163 8.15837e+011
+513 46 8.15825e+011
+358 241 8.1465e+011
+320 105 8.14634e+011
+397 356 8.1418e+011
+118 115 8.13876e+011
+300 264 8.13759e+011
+266 130 8.13607e+011
+471 202 8.13209e+011
+363 357 8.12394e+011
+191 350 8.12305e+011
+85 148 8.11548e+011
+461 162 8.08733e+011
+255 89 8.08415e+011
+272 170 8.08293e+011
+264 16 8.08243e+011
+105 76 8.08181e+011
+382 26 8.07794e+011
+435 319 8.07738e+011
+541 133 8.07585e+011
+42 10 8.06828e+011
+560 323 8.06769e+011
+310 6 8.06604e+011
+82 61 8.06082e+011
+193 215 8.05799e+011
+498 459 8.04643e+011
+487 44 8.03939e+011
+561 475 8.02508e+011
+576 127 8.02302e+011
+546 164 8.02249e+011
+280 192 8.01644e+011
+288 397 8.0152e+011
+168 196 8.01514e+011
+199 167 8.01512e+011
+280 195 8.00006e+011
+137 99 7.9915e+011
+566 160 7.99059e+011
+258 161 7.99019e+011
+556 181 7.97813e+011
+309 440 7.96443e+011
+145 16 7.95046e+011
+187 204 7.94936e+011
+13 204 7.94742e+011
+526 189 7.94653e+011
+180 395 7.94171e+011
+281 438 7.9387e+011
+264 71 7.93639e+011
+282 220 7.93133e+011
+576 125 7.92949e+011
+64 316 7.9257e+011
+527 344 7.9187e+011
+277 190 7.91794e+011
+520 79 7.91766e+011
+355 24 7.91698e+011
+190 136 7.91634e+011
+536 94 7.911e+011
+228 288 7.90848e+011
+394 355 7.90285e+011
+292 88 7.90147e+011
+418 284 7.90016e+011
+501 164 7.89581e+011
+539 265 7.88739e+011
+168 198 7.87015e+011
+306 90 7.86704e+011
+261 71 7.85912e+011
+328 181 7.85812e+011
+148 449 7.84455e+011
+574 127 7.83805e+011
+537 122 7.83644e+011
+440 123 7.83163e+011
+518 201 7.81361e+011
+509 179 7.81255e+011
+487 2 7.8124e+011
+306 192 7.80786e+011
+306 194 7.80007e+011
+97 149 7.79286e+011
+40 355 7.78975e+011
+139 99 7.78974e+011
+527 193 7.7889e+011
+25 221 7.77775e+011
+207 203 7.77703e+011
+423 399 7.76835e+011
+60 40 7.76392e+011
+468 202 7.76182e+011
+351 11 7.75808e+011
+297 69 7.75526e+011
+494 458 7.74304e+011
+46 10 7.74224e+011
+35 31 7.73804e+011
+149 130 7.73463e+011
+538 406 7.73043e+011
+218 128 7.72701e+011
+290 88 7.72001e+011
+351 144 7.71215e+011
+26 131 7.69417e+011
+193 218 7.69353e+011
+261 249 7.68924e+011
+36 217 7.68891e+011
+181 20 7.68802e+011
+125 270 7.68661e+011
+530 160 7.67581e+011
+392 17 7.67379e+011
+258 248 7.65966e+011
+543 133 7.65553e+011
+434 89 7.65004e+011
+242 192 7.6445e+011
+499 80 7.6437e+011
+542 95 7.63965e+011
+11 81 7.63616e+011
+463 355 7.63234e+011
+284 211 7.62833e+011
+383 88 7.62585e+011
+445 243 7.62507e+011
+314 79 7.62413e+011
+222 116 7.61956e+011
+319 386 7.61825e+011
+123 263 7.6173e+011
+163 130 7.61051e+011
+561 146 7.60774e+011
+388 161 7.60765e+011
+110 2 7.60637e+011
+88 369 7.60319e+011
+283 394 7.59075e+011
+570 121 7.58173e+011
+496 458 7.57917e+011
+381 122 7.57359e+011
+65 253 7.56506e+011
+115 131 7.56481e+011
+457 3 7.56348e+011
+80 195 7.547e+011
+1 383 7.54231e+011
+136 143 7.54166e+011
+346 45 7.541e+011
+572 405 7.54063e+011
+201 163 7.5378e+011
+486 139 7.53712e+011
+280 220 7.52929e+011
+264 141 7.52632e+011
+84 73 7.52321e+011
+457 5 7.52097e+011
+354 144 7.51768e+011
+94 7 7.51657e+011
+475 62 7.51463e+011
+269 58 7.51218e+011
+117 426 7.50954e+011
+573 124 7.50903e+011
+406 164 7.50459e+011
+130 128 7.50362e+011
+100 5 7.49856e+011
+271 108 7.49789e+011
+512 298 7.48506e+011
+248 194 7.48497e+011
+362 407 7.48412e+011
+401 166 7.48376e+011
+534 160 7.47978e+011
+190 329 7.47958e+011
+50 254 7.47942e+011
+351 146 7.47886e+011
+488 183 7.47248e+011
+31 219 7.46997e+011
+390 242 7.46625e+011
+220 212 7.46597e+011
+472 23 7.46412e+011
+25 201 7.45548e+011
+415 98 7.45209e+011
+299 296 7.44701e+011
+116 76 7.44545e+011
+196 167 7.44255e+011
+347 239 7.43994e+011
+504 361 7.43894e+011
+471 200 7.43281e+011
+523 60 7.42847e+011
+207 201 7.4207e+011
+179 168 7.41292e+011
+96 423 7.41281e+011
+232 125 7.41211e+011
+126 219 7.40922e+011
+445 118 7.39724e+011
+134 237 7.39371e+011
+166 150 7.3928e+011
+408 26 7.39249e+011
+199 132 7.39164e+011
+103 196 7.38909e+011
+506 361 7.38809e+011
+447 351 7.38001e+011
+427 182 7.37959e+011
+270 93 7.37955e+011
+264 13 7.37806e+011
+277 295 7.37652e+011
+103 198 7.374e+011
+179 166 7.37163e+011
+114 212 7.36964e+011
+4 154 7.36524e+011
+282 210 7.36206e+011
+90 376 7.3597e+011
+232 127 7.35772e+011
+415 46 7.35197e+011
+91 22 7.34691e+011
+433 86 7.34649e+011
+345 297 7.34035e+011
+107 429 7.33789e+011
+452 102 7.33005e+011
+325 341 7.32625e+011
+87 144 7.31774e+011
+448 376 7.31226e+011
+302 160 7.30584e+011
+217 280 7.30454e+011
+277 110 7.28916e+011
+273 316 7.2888e+011
+95 197 7.28245e+011
+570 405 7.27973e+011
+72 129 7.27846e+011
+118 77 7.27674e+011
+164 150 7.27575e+011
+376 124 7.27465e+011
+305 53 7.27338e+011
+143 5 7.27217e+011
+402 143 7.26481e+011
+501 263 7.26453e+011
+265 74 7.26277e+011
+423 332 7.26185e+011
+138 59 7.258e+011
+345 47 7.25644e+011
+153 131 7.25499e+011
+67 150 7.2532e+011
+381 88 7.24966e+011
+66 276 7.24659e+011
+388 14 7.24414e+011
+359 9 7.24079e+011
+468 42 7.22471e+011
+490 183 7.22251e+011
+151 130 7.21991e+011
+436 301 7.21953e+011
+258 89 7.21774e+011
+367 86 7.21554e+011
+112 212 7.20825e+011
+411 26 7.20454e+011
+514 119 7.20328e+011
+310 446 7.20254e+011
+186 21 7.19748e+011
+494 456 7.19546e+011
+148 88 7.19506e+011
+253 249 7.18309e+011
+437 240 7.17167e+011
+261 391 7.17123e+011
+430 85 7.16711e+011
+357 9 7.16512e+011
+573 330 7.15968e+011
+185 308 7.15538e+011
+192 329 7.15309e+011
+130 428 7.14223e+011
+256 248 7.14202e+011
+267 70 7.141e+011
+44 98 7.13618e+011
+92 445 7.12315e+011
+67 251 7.12214e+011
+196 111 7.12167e+011
+74 96 7.1209e+011
+541 141 7.11457e+011
+524 190 7.11376e+011
+116 169 7.09614e+011
+424 375 7.09544e+011
+263 249 7.08481e+011
+449 87 7.07955e+011
+195 329 7.07772e+011
+523 79 7.07465e+011
+540 101 7.07134e+011
+165 286 7.06356e+011
+138 178 7.05748e+011
+87 213 7.05722e+011
+189 167 7.05213e+011
+480 451 7.05076e+011
+449 84 7.04744e+011
+389 168 7.04494e+011
+224 128 7.03201e+011
+178 20 7.02617e+011
+550 57 7.02446e+011
+474 246 7.02267e+011
+354 269 7.02054e+011
+86 369 7.0177e+011
+535 121 7.01723e+011
+126 78 7.01506e+011
+53 63 7.00414e+011
+381 181 7.00363e+011
+248 293 6.99171e+011
+360 368 6.99014e+011
+541 131 6.98728e+011
+66 372 6.98318e+011
+205 15 6.98e+011
+216 128 6.97939e+011
+308 353 6.97254e+011
+349 125 6.97201e+011
+185 340 6.96574e+011
+186 101 6.95659e+011
+182 201 6.95591e+011
+399 182 6.93997e+011
+514 262 6.93573e+011
+264 390 6.92181e+011
+319 384 6.91894e+011
+484 329 6.91101e+011
+267 144 6.9079e+011
+20 218 6.90132e+011
+449 118 6.89805e+011
+34 12 6.89494e+011
+579 43 6.89352e+011
+175 272 6.89279e+011
+265 249 6.88975e+011
+517 20 6.88961e+011
+52 42 6.88306e+011
+540 182 6.8808e+011
+123 126 6.87938e+011
+196 90 6.87867e+011
+407 429 6.87861e+011
+322 426 6.87432e+011
+321 121 6.86981e+011
+278 195 6.8694e+011
+106 182 6.86642e+011
+118 95 6.86499e+011
+493 60 6.86304e+011
+448 127 6.85414e+011
+562 149 6.85119e+011
+57 365 6.84916e+011
+56 253 6.84732e+011
+247 402 6.84696e+011
+537 183 6.84178e+011
+403 166 6.84053e+011
+446 129 6.83557e+011
+85 63 6.83528e+011
+387 242 6.83456e+011
+477 340 6.82961e+011
+174 201 6.82881e+011
+270 106 6.82798e+011
+371 105 6.82498e+011
+371 89 6.82061e+011
+65 251 6.8201e+011
+317 103 6.80805e+011
+409 102 6.80525e+011
+148 80 6.80043e+011
+193 134 6.80022e+011
+193 312 6.79971e+011
+58 204 6.79952e+011
+379 88 6.799e+011
+455 162 6.79784e+011
+592 19 6.79399e+011
+209 144 6.79157e+011
+215 280 6.78747e+011
+539 241 6.77933e+011
+222 153 6.76635e+011
+557 463 6.7649e+011
+502 21 6.76433e+011
+118 222 6.75968e+011
+12 114 6.7544e+011
+470 142 6.75048e+011
+541 127 6.74911e+011
+145 1 6.74284e+011
+571 123 6.73236e+011
+279 332 6.73068e+011
+506 178 6.71804e+011
+297 72 6.7102e+011
+163 135 6.70624e+011
+148 90 6.70431e+011
+155 57 6.69738e+011
+48 254 6.694e+011
+118 5 6.68597e+011
+362 65 6.68359e+011
+178 57 6.68269e+011
+259 107 6.68023e+011
+291 335 6.67895e+011
+483 21 6.67384e+011
+306 146 6.67356e+011
+289 348 6.66688e+011
+323 121 6.66223e+011
+399 184 6.65775e+011
+434 379 6.65367e+011
+496 80 6.64653e+011
+239 219 6.63055e+011
+189 313 6.62176e+011
+46 355 6.61923e+011
+524 424 6.61279e+011
+136 238 6.60817e+011
+483 288 6.60344e+011
+451 438 6.6021e+011
+165 178 6.59564e+011
+138 56 6.59346e+011
+186 97 6.59207e+011
+149 151 6.58523e+011
+110 326 6.58361e+011
+451 163 6.57978e+011
+459 340 6.57533e+011
+223 87 6.57441e+011
+232 72 6.57347e+011
+249 260 6.56839e+011
+229 14 6.56626e+011
+301 133 6.56449e+011
+413 82 6.56362e+011
+285 343 6.56279e+011
+84 213 6.56219e+011
+244 293 6.55705e+011
+575 13 6.55279e+011
+303 88 6.55098e+011
+250 164 6.54987e+011
+343 463 6.54777e+011
+559 243 6.53844e+011
+542 262 6.53769e+011
+116 222 6.53325e+011
+93 93 6.53285e+011
+333 241 6.53011e+011
+482 125 6.52244e+011
+545 248 6.52215e+011
+210 162 6.52171e+011
+594 19 6.51726e+011
+385 90 6.51292e+011
+434 124 6.50459e+011
+124 95 6.49932e+011
+42 118 6.49286e+011
+436 379 6.49138e+011
+402 104 6.48766e+011
+261 226 6.48699e+011
+355 254 6.48577e+011
+163 152 6.48306e+011
+122 161 6.48195e+011
+33 219 6.48132e+011
+480 168 6.47851e+011
+404 164 6.4777e+011
+570 161 6.47617e+011
+388 96 6.47596e+011
+248 399 6.47264e+011
+493 58 6.47187e+011
+448 444 6.46805e+011
+42 308 6.46408e+011
+556 245 6.46264e+011
+106 184 6.46146e+011
+178 262 6.45625e+011
+269 144 6.45248e+011
+129 112 6.45056e+011
+40 308 6.44735e+011
+332 355 6.4423e+011
+412 471 6.43764e+011
+480 440 6.43466e+011
+283 124 6.43073e+011
+492 118 6.42796e+011
+187 313 6.4243e+011
+120 58 6.42062e+011
+360 160 6.41433e+011
+536 79 6.40785e+011
+421 63 6.40184e+011
+49 62 6.39588e+011
+118 2 6.39395e+011
+213 163 6.39269e+011
+273 94 6.39175e+011
+55 360 6.3869e+011
+219 153 6.3807e+011
+360 370 6.3719e+011
+275 316 6.36985e+011
+57 100 6.36761e+011
+192 15 6.36518e+011
+52 4 6.36073e+011
+140 4 6.36028e+011
+136 141 6.35659e+011
+556 243 6.35571e+011
+334 391 6.35459e+011
+96 93 6.35098e+011
+122 95 6.35028e+011
+562 271 6.34095e+011
+93 60 6.33803e+011
+210 35 6.33708e+011
+572 179 6.33275e+011
+9 46 6.32951e+011
+534 79 6.32861e+011
+502 43 6.32803e+011
+399 106 6.32386e+011
+176 57 6.31533e+011
+206 419 6.31494e+011
+248 35 6.31367e+011
+54 42 6.30835e+011
+128 114 6.30585e+011
+186 1 6.29818e+011
+259 34 6.29768e+011
+302 157 6.29612e+011
+528 221 6.29514e+011
+177 122 6.28503e+011
+408 143 6.26838e+011
+136 182 6.26668e+011
+97 363 6.26386e+011
+179 122 6.26123e+011
+562 274 6.26121e+011
+338 427 6.25829e+011
+315 238 6.25434e+011
+461 340 6.25331e+011
+136 136 6.24771e+011
+475 239 6.24704e+011
+340 391 6.24458e+011
+348 164 6.23588e+011
+371 338 6.23138e+011
+542 101 6.22847e+011
+151 91 6.22764e+011
+302 243 6.22139e+011
+325 15 6.21813e+011
+416 298 6.21595e+011
+303 108 6.21091e+011
+191 122 6.20737e+011
+404 188 6.20499e+011
+211 135 6.20178e+011
+514 19 6.19861e+011
+135 179 6.19703e+011
+28 133 6.1874e+011
+126 95 6.18712e+011
+175 168 6.18441e+011
+524 426 6.18361e+011
+218 102 6.1771e+011
+204 204 6.17136e+011
+241 421 6.17035e+011
+531 120 6.16546e+011
+337 390 6.16243e+011
+340 473 6.16119e+011
+400 199 6.15476e+011
+375 5 6.15196e+011
+526 383 6.14697e+011
+173 164 6.14214e+011
+105 360 6.13952e+011
+74 128 6.13483e+011
+41 182 6.13472e+011
+170 110 6.13225e+011
+529 177 6.12885e+011
+285 241 6.12806e+011
+538 40 6.1205e+011
+232 150 6.12005e+011
+447 243 6.11829e+011
+479 404 6.11661e+011
+59 64 6.1148e+011
+111 263 6.10887e+011
+11 78 6.10826e+011
+549 223 6.09516e+011
+157 198 6.09177e+011
+173 119 6.08836e+011
+87 288 6.08586e+011
+91 276 6.08468e+011
+594 21 6.08447e+011
+161 152 6.08071e+011
+10 32 6.07949e+011
+413 298 6.07931e+011
+417 251 6.07561e+011
+218 290 6.0755e+011
+586 17 6.07528e+011
+386 282 6.07135e+011
+542 93 6.07026e+011
+45 475 6.06821e+011
+429 44 6.06326e+011
+30 256 6.06324e+011
+195 77 6.05971e+011
+298 398 6.05873e+011
+241 194 6.05609e+011
+309 448 6.05544e+011
+391 118 6.04917e+011
+130 168 6.04792e+011
+531 266 6.04598e+011
+224 51 6.04156e+011
+433 277 6.0399e+011
+91 60 6.03947e+011
+475 341 6.03779e+011
+286 219 6.03559e+011
+120 447 6.02609e+011
+478 401 6.02597e+011
+110 110 6.02546e+011
+100 164 6.02482e+011
+47 162 6.01473e+011
+113 94 6.01137e+011
+442 97 6.01024e+011
+335 370 6.00671e+011
+542 252 5.99589e+011
+121 53 5.99084e+011
+285 346 5.98687e+011
+290 311 5.98621e+011
+272 142 5.98585e+011
+259 328 5.98286e+011
+444 452 5.96801e+011
+138 311 5.96645e+011
+390 135 5.96582e+011
+195 75 5.96576e+011
+283 197 5.96568e+011
+172 166 5.9652e+011
+283 195 5.95933e+011
+306 359 5.95915e+011
+131 147 5.95523e+011
+351 163 5.95061e+011
+293 146 5.95005e+011
+251 182 5.94644e+011
+197 75 5.94505e+011
+267 74 5.93535e+011
+62 148 5.93395e+011
+281 33 5.9307e+011
+182 96 5.92678e+011
+382 147 5.92494e+011
+198 194 5.91494e+011
+189 326 5.91278e+011
+214 174 5.90743e+011
+578 56 5.89483e+011
+222 125 5.88765e+011
+200 30 5.88656e+011
+544 262 5.87803e+011
+101 28 5.87365e+011
+72 187 5.87129e+011
+128 127 5.86853e+011
+209 138 5.86719e+011
+197 88 5.8498e+011
+216 174 5.84904e+011
+125 127 5.84639e+011
+390 130 5.84158e+011
+43 473 5.8323e+011
+149 132 5.83133e+011
+100 257 5.82294e+011
+227 123 5.81903e+011
+294 311 5.81756e+011
+484 141 5.81511e+011
+109 146 5.81368e+011
+437 280 5.81126e+011
+181 312 5.80762e+011
+269 416 5.80574e+011
+323 29 5.80181e+011
+168 289 5.79243e+011
+37 202 5.79086e+011
+479 11 5.79081e+011
+150 153 5.79003e+011
+412 416 5.78746e+011
+361 244 5.78634e+011
+227 72 5.782e+011
+279 387 5.77938e+011
+184 311 5.77708e+011
+86 372 5.77102e+011
+139 147 5.76819e+011
+484 121 5.76447e+011
+88 372 5.763e+011
+171 168 5.76176e+011
+536 260 5.7601e+011
+451 120 5.75828e+011
+116 4 5.75349e+011
+462 141 5.74347e+011
+182 121 5.74122e+011
+483 204 5.74108e+011
+514 380 5.74031e+011
+208 15 5.73701e+011
+98 259 5.72054e+011
+290 184 5.7176e+011
+119 110 5.7158e+011
+243 215 5.71501e+011
+333 415 5.71448e+011
+139 142 5.71351e+011
+72 372 5.71048e+011
+345 295 5.70962e+011
+180 201 5.70834e+011
+161 130 5.69986e+011
+242 217 5.697e+011
+235 150 5.69355e+011
+314 446 5.67633e+011
+216 163 5.67566e+011
+359 53 5.6751e+011
+561 142 5.67191e+011
+87 311 5.67184e+011
+396 138 5.668e+011
+229 150 5.66372e+011
+61 26 5.66276e+011
+569 382 5.66247e+011
+484 139 5.65557e+011
+307 448 5.65527e+011
+432 381 5.65405e+011
+390 335 5.65267e+011
+378 342 5.65207e+011
+413 300 5.64591e+011
+288 184 5.64366e+011
+130 306 5.6412e+011
+400 143 5.63902e+011
+330 213 5.63785e+011
+91 20 5.63638e+011
+77 128 5.63543e+011
+199 111 5.62836e+011
+463 224 5.62664e+011
+38 82 5.62449e+011
+320 30 5.61981e+011
+547 139 5.61062e+011
+60 109 5.61021e+011
+276 204 5.60928e+011
+91 79 5.60854e+011
+529 270 5.60563e+011
+483 47 5.60258e+011
+304 90 5.60063e+011
+375 299 5.59979e+011
+381 413 5.59823e+011
+294 313 5.59705e+011
+194 165 5.59633e+011
+201 345 5.59025e+011
+335 218 5.58338e+011
+86 364 5.57588e+011
+545 244 5.56984e+011
+508 221 5.56645e+011
+48 235 5.56597e+011
+452 62 5.56448e+011
+468 208 5.56153e+011
+437 89 5.55983e+011
+250 154 5.55921e+011
+174 122 5.55793e+011
+370 300 5.55773e+011
+463 341 5.55699e+011
+464 115 5.55192e+011
+495 473 5.54928e+011
+569 422 5.54878e+011
+185 167 5.5471e+011
+373 299 5.54596e+011
+541 254 5.54558e+011
+310 265 5.54493e+011
+120 6 5.54095e+011
+461 121 5.54021e+011
+308 31 5.5395e+011
+237 417 5.53609e+011
+222 102 5.53383e+011
+203 127 5.53041e+011
+355 105 5.52858e+011
+308 33 5.52835e+011
+509 58 5.52719e+011
+386 335 5.51933e+011
+131 135 5.51911e+011
+341 38 5.5187e+011
+242 219 5.51781e+011
+521 426 5.51608e+011
+411 263 5.51484e+011
+40 11 5.51417e+011
+558 79 5.5091e+011
+287 215 5.50647e+011
+149 196 5.49614e+011
+573 421 5.49482e+011
+201 88 5.48979e+011
+151 229 5.4896e+011
+533 39 5.48878e+011
+147 196 5.488e+011
+333 66 5.48346e+011
+157 171 5.48077e+011
+86 374 5.47439e+011
+434 82 5.47182e+011
+251 184 5.47032e+011
+342 466 5.46499e+011
+149 199 5.4599e+011
+332 357 5.45367e+011
+158 310 5.45022e+011
+196 190 5.4489e+011
+188 301 5.44677e+011
+566 145 5.43892e+011
+88 339 5.43827e+011
+156 305 5.43802e+011
+402 220 5.43713e+011
+256 106 5.43078e+011
+457 121 5.43078e+011
+540 186 5.42659e+011
+450 416 5.42658e+011
+204 394 5.42042e+011
+44 339 5.4067e+011
+268 219 5.40559e+011
+354 15 5.40271e+011
+201 109 5.40259e+011
+384 258 5.40226e+011
+357 66 5.39599e+011
+111 358 5.39596e+011
+295 298 5.39e+011
+189 324 5.38648e+011
+388 419 5.38422e+011
+247 107 5.3838e+011
+115 359 5.37815e+011
+282 418 5.37612e+011
+328 64 5.37381e+011
+235 220 5.3709e+011
+511 134 5.36942e+011
+248 362 5.36047e+011
+332 64 5.36006e+011
+280 418 5.35982e+011
+397 46 5.35884e+011
+343 200 5.35877e+011
+163 118 5.35648e+011
+562 461 5.35461e+011
+390 204 5.34907e+011
+37 200 5.33577e+011
+329 25 5.33127e+011
+185 132 5.32761e+011
+168 129 5.32476e+011
+219 111 5.32326e+011
+445 166 5.32169e+011
+202 394 5.31956e+011
+245 180 5.31459e+011
+434 92 5.31303e+011
+369 92 5.30619e+011
+215 94 5.30483e+011
+541 249 5.30331e+011
+128 307 5.29248e+011
+345 200 5.28971e+011
+149 22 5.28904e+011
+191 211 5.28425e+011
+357 282 5.27742e+011
+166 129 5.27699e+011
+152 448 5.27393e+011
+352 426 5.27113e+011
+69 338 5.2709e+011
+479 44 5.26667e+011
+86 339 5.26089e+011
+228 91 5.25978e+011
+433 45 5.25333e+011
+110 323 5.24136e+011
+217 352 5.23795e+011
+576 134 5.23792e+011
+18 342 5.23577e+011
+360 362 5.23437e+011
+389 118 5.23284e+011
+270 103 5.23147e+011
+135 322 5.2301e+011
+280 124 5.22961e+011
+164 350 5.22881e+011
+330 66 5.22483e+011
+160 61 5.21812e+011
+436 277 5.21561e+011
+363 368 5.21122e+011
+281 387 5.21088e+011
+327 102 5.21047e+011
+203 345 5.20952e+011
+547 141 5.20912e+011
+84 110 5.20746e+011
+219 314 5.20446e+011
+303 294 5.2038e+011
+534 96 5.20293e+011
+8 114 5.20043e+011
+360 448 5.1988e+011
+573 57 5.19738e+011
+433 280 5.19543e+011
+237 220 5.19443e+011
+570 451 5.19303e+011
+172 416 5.18948e+011
+123 110 5.18811e+011
+85 38 5.18418e+011
+426 103 5.18295e+011
+330 216 5.178e+011
+382 103 5.17314e+011
+245 213 5.17281e+011
+116 58 5.16383e+011
+277 210 5.16058e+011
+161 132 5.15943e+011
+284 399 5.1583e+011
+346 372 5.15712e+011
+566 18 5.14928e+011
+222 123 5.14839e+011
+531 118 5.14727e+011
+516 162 5.14698e+011
+544 250 5.14345e+011
+1 381 5.1427e+011
+453 119 5.14262e+011
+529 35 5.13448e+011
+84 100 5.1328e+011
+367 245 5.13165e+011
+314 103 5.12557e+011
+90 95 5.12308e+011
+178 329 5.12168e+011
+178 183 5.11599e+011
+372 146 5.11516e+011
+219 204 5.11464e+011
+72 408 5.11386e+011
+248 346 5.11318e+011
+81 101 5.11244e+011
+285 32 5.10397e+011
+120 55 5.09772e+011
+431 89 5.09696e+011
+117 61 5.09539e+011
+196 146 5.0905e+011
+445 204 5.08911e+011
+88 207 5.08653e+011
+76 110 5.0824e+011
+452 416 5.07962e+011
+55 172 5.07817e+011
+106 257 5.07803e+011
+408 105 5.07391e+011
+299 256 5.07353e+011
+52 451 5.07181e+011
+153 192 5.07072e+011
+376 224 5.07022e+011
+104 257 5.06719e+011
+335 220 5.06697e+011
+214 450 5.06444e+011
+345 139 5.06396e+011
+213 94 5.06367e+011
+318 187 5.0509e+011
+210 423 5.05011e+011
+335 105 5.04982e+011
+521 424 5.04037e+011
+197 84 5.03646e+011
+325 133 5.03468e+011
+226 92 5.03303e+011
+91 285 5.03293e+011
+56 303 5.03077e+011
+526 177 5.03053e+011
+510 348 5.02706e+011
+500 103 5.02671e+011
+342 196 5.02102e+011
+528 30 5.01822e+011
+3 234 5.01363e+011
+63 152 5.01145e+011
+510 365 5.0099e+011
+542 181 5.00709e+011
+169 107 5.00367e+011
+217 204 4.99943e+011
+151 134 4.99898e+011
+555 303 4.99642e+011
+76 60 4.99192e+011
+529 399 4.98996e+011
+253 9 4.98849e+011
+199 76 4.98758e+011
+450 324 4.98675e+011
+455 58 4.98624e+011
+111 338 4.98242e+011
+389 88 4.97186e+011
+247 418 4.96116e+011
+386 24 4.96022e+011
+86 377 4.96002e+011
+311 221 4.95991e+011
+317 99 4.95384e+011
+122 82 4.95092e+011
+497 282 4.94951e+011
+454 438 4.94889e+011
+289 118 4.9483e+011
+391 53 4.93473e+011
+132 394 4.93374e+011
+67 211 4.93219e+011
+405 104 4.92864e+011
+72 165 4.92501e+011
+325 221 4.92015e+011
+539 244 4.91813e+011
+493 340 4.91625e+011
+104 307 4.90947e+011
+293 332 4.90928e+011
+27 118 4.90747e+011
+12 421 4.90688e+011
+435 62 4.90618e+011
+253 182 4.89858e+011
+74 61 4.89491e+011
+566 180 4.89196e+011
+281 36 4.88789e+011
+110 76 4.88451e+011
+158 152 4.87877e+011
+186 376 4.87708e+011
+455 360 4.87488e+011
+416 244 4.8744e+011
+301 209 4.87349e+011
+340 466 4.86963e+011
+125 216 4.86615e+011
+555 201 4.86405e+011
+22 48 4.8605e+011
+479 286 4.85422e+011
+541 381 4.83643e+011
+456 358 4.8358e+011
+215 289 4.83346e+011
+260 369 4.83273e+011
+280 122 4.82927e+011
+162 34 4.81652e+011
+296 260 4.81581e+011
+527 399 4.8151e+011
+25 118 4.8118e+011
+188 304 4.81074e+011
+438 391 4.80701e+011
+449 285 4.80333e+011
+406 99 4.80314e+011
+279 164 4.79808e+011
+342 332 4.79443e+011
+593 101 4.79308e+011
+295 127 4.79106e+011
+264 309 4.78995e+011
+326 29 4.78674e+011
+258 369 4.78569e+011
+529 397 4.78531e+011
+260 457 4.7821e+011
+247 256 4.78151e+011
+143 177 4.78024e+011
+69 335 4.77988e+011
+248 182 4.77955e+011
+532 344 4.77748e+011
+433 226 4.77735e+011
+223 239 4.77556e+011
+173 343 4.77093e+011
+526 79 4.76873e+011
+410 143 4.76764e+011
+57 371 4.76546e+011
+120 222 4.75912e+011
+392 335 4.75704e+011
+288 31 4.75691e+011
+327 319 4.75432e+011
+592 105 4.75283e+011
+245 187 4.75262e+011
+407 14 4.74926e+011
+470 117 4.7457e+011
+183 382 4.74426e+011
+301 130 4.74194e+011
+303 141 4.74133e+011
+142 115 4.73269e+011
+177 344 4.73173e+011
+228 147 4.72877e+011
+369 94 4.72599e+011
+478 125 4.71939e+011
+482 367 4.71912e+011
+248 326 4.7184e+011
+509 300 4.7178e+011
+332 29 4.71701e+011
+291 146 4.71339e+011
+277 166 4.71164e+011
+192 186 4.71108e+011
+541 222 4.70497e+011
+9 234 4.7044e+011
+115 277 4.70258e+011
+409 14 4.70248e+011
+249 256 4.69465e+011
+497 284 4.69268e+011
+11 76 4.68995e+011
+329 321 4.6881e+011
+343 312 4.68503e+011
+272 207 4.68287e+011
+28 116 4.6816e+011
+27 222 4.67539e+011
+357 63 4.67469e+011
+175 76 4.67293e+011
+317 101 4.66718e+011
+524 399 4.66376e+011
+283 132 4.66192e+011
+13 112 4.659e+011
+245 256 4.65844e+011
+149 194 4.65825e+011
+535 39 4.6571e+011
+471 212 4.65538e+011
+454 116 4.65052e+011
+502 156 4.64759e+011
+94 19 4.63998e+011
+248 184 4.63978e+011
+150 303 4.63839e+011
+144 142 4.63502e+011
+226 125 4.63019e+011
+169 148 4.62909e+011
+394 104 4.62678e+011
+356 265 4.62362e+011
+146 139 4.62292e+011
+38 270 4.62246e+011
+64 424 4.61744e+011
+141 142 4.61535e+011
+205 345 4.61516e+011
+544 440 4.61452e+011
+366 94 4.61314e+011
+45 408 4.61046e+011
+340 260 4.60899e+011
+563 464 4.60796e+011
+188 265 4.60549e+011
+518 142 4.60188e+011
+336 144 4.60121e+011
+233 31 4.59996e+011
+158 258 4.59933e+011
+68 419 4.59713e+011
+125 306 4.59605e+011
+581 56 4.59548e+011
+335 415 4.58278e+011
+263 284 4.57982e+011
+580 345 4.57793e+011
+66 306 4.57599e+011
+323 133 4.57582e+011
+430 62 4.57158e+011
+438 389 4.5713e+011
+296 269 4.5712e+011
+95 39 4.56879e+011
+158 101 4.56842e+011
+123 84 4.56413e+011
+358 448 4.55993e+011
+55 333 4.55771e+011
+218 423 4.55448e+011
+266 219 4.54964e+011
+542 443 4.5478e+011
+323 11 4.54515e+011
+583 39 4.54348e+011
+81 73 4.54022e+011
+160 33 4.53821e+011
+434 240 4.53258e+011
+418 448 4.5244e+011
+124 341 4.51827e+011
+186 290 4.51626e+011
+237 196 4.51585e+011
+547 439 4.51479e+011
+291 139 4.51309e+011
+453 5 4.50615e+011
+437 44 4.5039e+011
+584 140 4.50209e+011
+175 183 4.49664e+011
+107 304 4.49474e+011
+505 380 4.49173e+011
+214 400 4.49172e+011
+421 298 4.49115e+011
+42 122 4.4892e+011
+125 110 4.48633e+011
+576 166 4.48487e+011
+413 246 4.48473e+011
+333 335 4.48405e+011
+24 49 4.47857e+011
+330 334 4.47803e+011
+162 38 4.47774e+011
+17 434 4.47723e+011
+119 118 4.47042e+011
+163 62 4.46982e+011
+117 290 4.46937e+011
+433 2 4.46494e+011
+155 318 4.4636e+011
+370 465 4.46187e+011
+58 105 4.46085e+011
+70 420 4.45922e+011
+6 234 4.45065e+011
+520 165 4.44939e+011
+298 87 4.44934e+011
+41 339 4.44255e+011
+450 198 4.44188e+011
+530 116 4.44045e+011
+351 333 4.43503e+011
+400 27 4.42956e+011
+44 253 4.42758e+011
+490 458 4.42235e+011
+343 142 4.42206e+011
+438 469 4.42178e+011
+272 204 4.41891e+011
+150 301 4.41693e+011
+213 424 4.41599e+011
+419 412 4.41337e+011
+4 165 4.41319e+011
+147 136 4.40989e+011
+155 316 4.4091e+011
+507 42 4.40884e+011
+449 23 4.40294e+011
+232 288 4.40079e+011
+420 363 4.40058e+011
+80 235 4.39586e+011
+400 427 4.39035e+011
+323 186 4.38905e+011
+417 255 4.38159e+011
+170 124 4.38055e+011
+547 243 4.37956e+011
+413 264 4.37921e+011
+370 467 4.37835e+011
+582 140 4.3733e+011
+333 180 4.37271e+011
+360 443 4.37093e+011
+361 451 4.36785e+011
+184 116 4.36547e+011
+569 181 4.36478e+011
+26 44 4.36473e+011
+105 432 4.36133e+011
+85 239 4.36048e+011
+401 126 4.35979e+011
+325 258 4.35619e+011
+409 108 4.35344e+011
+190 55 4.35154e+011
+451 360 4.35054e+011
+264 259 4.34919e+011
+43 408 4.34673e+011
+405 108 4.34328e+011
+375 463 4.34264e+011
+83 170 4.3369e+011
+502 122 4.33248e+011
+341 297 4.33247e+011
+158 163 4.331e+011
+405 10 4.3244e+011
+435 226 4.32386e+011
+151 76 4.32276e+011
+242 281 4.32028e+011
+209 125 4.31969e+011
+349 88 4.31957e+011
+520 162 4.31463e+011
+487 86 4.31449e+011
+402 427 4.31293e+011
+305 209 4.30802e+011
+38 113 4.30512e+011
+515 325 4.30137e+011
+39 117 4.30137e+011
+362 443 4.29413e+011
+135 59 4.28434e+011
+287 34 4.28189e+011
+329 99 4.28161e+011
+147 194 4.28102e+011
+163 431 4.27964e+011
+330 218 4.27857e+011
+151 94 4.27665e+011
+32 45 4.27439e+011
+342 92 4.26996e+011
+296 200 4.26746e+011
+200 391 4.26096e+011
+57 368 4.25868e+011
+231 364 4.2564e+011
+170 451 4.24841e+011
+560 268 4.24752e+011
+254 191 4.24503e+011
+199 327 4.24251e+011
+198 198 4.23966e+011
+375 156 4.23783e+011
+10 73 4.23453e+011
+260 274 4.2311e+011
+498 473 4.22963e+011
+244 103 4.22884e+011
+419 95 4.22587e+011
+105 161 4.22276e+011
+205 403 4.21764e+011
+400 280 4.21309e+011
+195 199 4.21169e+011
+26 46 4.21006e+011
+413 144 4.20711e+011
+191 292 4.20558e+011
+368 30 4.20227e+011
+529 137 4.20156e+011
+311 299 4.19763e+011
+558 60 4.19593e+011
+107 338 4.19143e+011
+391 89 4.18774e+011
+478 143 4.18113e+011
+154 295 4.17947e+011
+142 429 4.17895e+011
+107 359 4.17664e+011
+337 29 4.17529e+011
+165 38 4.17093e+011
+492 21 4.16828e+011
+377 145 4.16795e+011
+139 136 4.16714e+011
+560 266 4.16675e+011
+498 342 4.16285e+011
+88 232 4.16131e+011
+293 294 4.15978e+011
+208 405 4.15717e+011
+85 234 4.15414e+011
+485 238 4.15397e+011
+600 365 4.15293e+011
+178 201 4.1513e+011
+121 149 4.15073e+011
+97 38 4.14795e+011
+207 403 4.14467e+011
+95 285 4.14426e+011
+217 433 4.1417e+011
+99 60 4.14156e+011
+197 343 4.13948e+011
+572 446 4.13569e+011
+448 62 4.13414e+011
+318 202 4.1326e+011
+340 330 4.13152e+011
+387 101 4.13097e+011
+575 459 4.12574e+011
+538 223 4.12565e+011
+52 146 4.12257e+011
+579 245 4.11626e+011
+194 239 4.11456e+011
+262 456 4.11353e+011
+94 367 4.11056e+011
+434 238 4.11023e+011
+312 262 4.10859e+011
+424 100 4.10738e+011
+12 434 4.10314e+011
+266 20 4.1012e+011
+349 297 4.09853e+011
+170 122 4.09745e+011
+50 375 4.09709e+011
+498 340 4.09583e+011
+441 454 4.0947e+011
+212 96 4.09196e+011
+302 408 4.08492e+011
+381 352 4.08362e+011
+389 450 4.08196e+011
+402 44 4.07957e+011
+69 257 4.0784e+011
+155 447 4.07514e+011
+323 136 4.07097e+011
+434 108 4.0688e+011
+262 397 4.06686e+011
+547 281 4.06586e+011
+176 329 4.06219e+011
+245 190 4.06029e+011
+291 264 4.05916e+011
+421 290 4.05845e+011
+382 47 4.05175e+011
+154 445 4.04949e+011
+122 169 4.04723e+011
+277 426 4.04602e+011
+292 200 4.04532e+011
+374 105 4.04301e+011
+67 203 4.03991e+011
+158 313 4.03917e+011
+183 379 4.03722e+011
+510 113 4.03587e+011
+92 367 4.03501e+011
+114 261 4.03459e+011
+501 420 4.03367e+011
+121 147 4.03017e+011
+159 99 4.02775e+011
+325 138 4.02026e+011
+240 148 4.02009e+011
+90 372 4.01969e+011
+130 374 4.01744e+011
+199 329 4.01368e+011
+426 106 4.01224e+011
+345 390 4.01059e+011
+25 255 4.00699e+011
+336 49 4.00425e+011
+168 416 4.00253e+011
+564 141 4.00229e+011
+232 155 3.99882e+011
+207 125 3.99674e+011
+166 380 3.99632e+011
+165 308 3.99541e+011
+571 327 3.99537e+011
+55 335 3.99374e+011
+50 167 3.99245e+011
+88 22 3.9881e+011
+101 96 3.98755e+011
+483 241 3.98675e+011
+577 245 3.9866e+011
+58 171 3.98347e+011
+364 443 3.98298e+011
+300 444 3.98173e+011
+413 284 3.98167e+011
+94 124 3.98109e+011
+106 166 3.97836e+011
+358 178 3.97808e+011
+449 196 3.978e+011
+181 155 3.97348e+011
+567 201 3.96374e+011
+256 157 3.96358e+011
+292 51 3.96229e+011
+468 101 3.95984e+011
+211 140 3.95759e+011
+282 215 3.95712e+011
+164 434 3.95603e+011
+142 117 3.95352e+011
+498 462 3.95322e+011
+177 76 3.95062e+011
+277 33 3.94924e+011
+579 309 3.94684e+011
+578 214 3.94624e+011
+522 361 3.94554e+011
+17 237 3.94514e+011
+580 216 3.94317e+011
+302 404 3.94181e+011
+204 418 3.94137e+011
+298 127 3.94026e+011
+299 258 3.93834e+011
+387 451 3.93327e+011
+579 140 3.92903e+011
+204 125 3.92868e+011
+303 130 3.92635e+011
+375 154 3.92579e+011
+405 41 3.92026e+011
+349 392 3.91571e+011
+335 436 3.91466e+011
+532 173 3.91435e+011
+245 184 3.91392e+011
+94 388 3.91118e+011
+325 102 3.9097e+011
+487 238 3.90732e+011
+130 409 3.90723e+011
+520 97 3.90646e+011
+587 347 3.90081e+011
+64 313 3.89932e+011
+389 2 3.89649e+011
+198 145 3.89404e+011
+545 86 3.89011e+011
+213 204 3.89009e+011
+446 416 3.88946e+011
+160 258 3.88941e+011
+304 404 3.88805e+011
+190 255 3.88358e+011
+343 315 3.88297e+011
+130 411 3.87769e+011
+475 451 3.87637e+011
+345 331 3.87612e+011
+479 283 3.87557e+011
+186 349 3.87383e+011
+365 165 3.87259e+011
+181 382 3.87148e+011
+283 84 3.87057e+011
+447 180 3.87046e+011
+548 283 3.86984e+011
+170 126 3.86975e+011
+256 191 3.86769e+011
+124 412 3.86626e+011
+41 286 3.86474e+011
+137 124 3.86276e+011
+533 62 3.85973e+011
+166 133 3.85692e+011
+552 78 3.85519e+011
+125 328 3.84857e+011
+242 366 3.84835e+011
+374 451 3.84658e+011
+258 458 3.84488e+011
+523 161 3.84449e+011
+587 161 3.84432e+011
+195 255 3.84189e+011
+339 63 3.83309e+011
+334 49 3.82935e+011
+53 375 3.82911e+011
+303 296 3.82816e+011
+142 99 3.82691e+011
+484 159 3.81934e+011
+205 397 3.81336e+011
+140 239 3.81147e+011
+416 415 3.81124e+011
+319 96 3.81071e+011
+266 418 3.80795e+011
+33 164 3.80741e+011
+331 282 3.80653e+011
+430 225 3.79898e+011
+448 258 3.7982e+011
+232 133 3.79542e+011
+509 380 3.79418e+011
+168 178 3.79389e+011
+416 413 3.78667e+011
+222 51 3.78435e+011
+518 83 3.78398e+011
+133 411 3.78313e+011
+406 96 3.77993e+011
+396 182 3.77571e+011
+150 137 3.7753e+011
+183 316 3.77278e+011
+142 238 3.76649e+011
+191 306 3.76519e+011
+497 242 3.76384e+011
+258 133 3.76121e+011
+304 332 3.76102e+011
+217 400 3.75848e+011
+346 117 3.75176e+011
+117 263 3.75085e+011
+9 69 3.74938e+011
+431 81 3.74673e+011
+519 242 3.74385e+011
+152 57 3.74124e+011
+373 150 3.74044e+011
+483 238 3.73496e+011
+4 33 3.73342e+011
+323 138 3.73209e+011
+447 132 3.73188e+011
+414 219 3.72996e+011
+301 211 3.72865e+011
+378 158 3.72606e+011
+39 287 3.72603e+011
+563 71 3.72101e+011
+375 151 3.72101e+011
+557 201 3.7128e+011
+114 205 3.71094e+011
+266 259 3.70963e+011
+393 182 3.70871e+011
+440 83 3.70808e+011
+195 344 3.7066e+011
+552 19 3.7055e+011
+349 121 3.70149e+011
+571 459 3.70059e+011
+503 419 3.69914e+011
+471 82 3.69911e+011
+206 415 3.69906e+011
+70 61 3.69668e+011
+524 141 3.68848e+011
+75 408 3.68679e+011
+434 25 3.68617e+011
+238 364 3.686e+011
+185 119 3.68303e+011
+130 477 3.68278e+011
+80 406 3.67481e+011
+45 203 3.67259e+011
+202 404 3.67002e+011
+286 246 3.6679e+011
+487 240 3.66628e+011
+416 471 3.66601e+011
+205 33 3.66587e+011
+332 134 3.66388e+011
+62 285 3.66264e+011
+173 146 3.66218e+011
+445 247 3.66199e+011
+118 161 3.66126e+011
+124 148 3.66112e+011
+194 292 3.65752e+011
+256 458 3.65739e+011
+373 101 3.65601e+011
+87 355 3.65395e+011
+276 424 3.65145e+011
+140 237 3.64995e+011
+313 127 3.64878e+011
+175 142 3.64052e+011
+531 175 3.63742e+011
+191 420 3.63667e+011
+419 415 3.63633e+011
+541 242 3.63614e+011
+531 112 3.63601e+011
+239 243 3.63524e+011
+186 72 3.63507e+011
+106 262 3.63158e+011
+325 136 3.63132e+011
+268 119 3.62498e+011
+326 345 3.62134e+011
+328 51 3.62104e+011
+510 376 3.62052e+011
+508 255 3.61931e+011
+315 126 3.61539e+011
+35 45 3.61424e+011
+243 134 3.61275e+011
+414 222 3.61008e+011
+239 215 3.60931e+011
+439 454 3.60816e+011
+535 342 3.60204e+011
+191 239 3.59887e+011
+185 161 3.59601e+011
+143 235 3.59248e+011
+510 111 3.59098e+011
+523 165 3.59082e+011
+585 309 3.59054e+011
+345 343 3.59e+011
+470 433 3.58912e+011
+195 211 3.58833e+011
+220 286 3.58461e+011
+313 130 3.58434e+011
+587 310 3.57737e+011
+159 277 3.5766e+011
+288 199 3.57627e+011
+112 307 3.57528e+011
+210 94 3.57511e+011
+94 371 3.57416e+011
+264 240 3.57346e+011
+144 145 3.57288e+011
+262 271 3.57053e+011
+463 219 3.56992e+011
+520 99 3.5656e+011
+154 297 3.56036e+011
+512 111 3.55961e+011
+278 212 3.55564e+011
+69 251 3.55406e+011
+402 98 3.55343e+011
+174 291 3.55022e+011
+181 259 3.54898e+011
+522 95 3.54625e+011
+495 100 3.54293e+011
+283 332 3.53801e+011
+375 101 3.53393e+011
+403 67 3.52791e+011
+209 317 3.52656e+011
+473 102 3.5258e+011
+458 115 3.52374e+011
+9 475 3.52264e+011
+577 309 3.52002e+011
+424 172 3.51998e+011
+206 127 3.5176e+011
+379 451 3.51305e+011
+568 379 3.51272e+011
+304 406 3.51106e+011
+20 317 3.50344e+011
+274 121 3.50021e+011
+402 29 3.49905e+011
+563 154 3.4978e+011
+568 324 3.4976e+011
+546 340 3.49698e+011
+371 138 3.49648e+011
+437 228 3.49373e+011
+210 97 3.48986e+011
+199 96 3.48943e+011
+461 304 3.48839e+011
+338 220 3.48621e+011
+383 451 3.4853e+011
+379 453 3.48491e+011
+577 327 3.48489e+011
+489 469 3.48217e+011
+340 219 3.48121e+011
+454 198 3.48096e+011
+217 169 3.47944e+011
+264 89 3.47925e+011
+302 440 3.47884e+011
+415 144 3.47868e+011
+207 236 3.47598e+011
+92 282 3.47248e+011
+131 188 3.46886e+011
+174 129 3.46851e+011
+589 309 3.46834e+011
+435 228 3.46746e+011
+250 246 3.46697e+011
+209 140 3.46549e+011
+555 78 3.46211e+011
+46 92 3.46195e+011
+114 143 3.46088e+011
+278 88 3.45958e+011
+267 261 3.45875e+011
+433 295 3.45594e+011
+54 236 3.4559e+011
+288 116 3.45545e+011
+147 191 3.45524e+011
+217 425 3.45523e+011
+333 433 3.4523e+011
+400 130 3.45145e+011
+122 341 3.44985e+011
+75 199 3.44724e+011
+446 444 3.44516e+011
+376 128 3.44477e+011
+509 283 3.44476e+011
+493 469 3.44348e+011
+439 456 3.44342e+011
+567 270 3.44196e+011
+64 11 3.4406e+011
+135 61 3.44039e+011
+135 429 3.44027e+011
+156 299 3.43814e+011
+29 169 3.438e+011
+63 363 3.43583e+011
+485 235 3.43072e+011
+200 8 3.42454e+011
+571 203 3.42248e+011
+207 91 3.41711e+011
+484 243 3.41613e+011
+55 330 3.4152e+011
+169 219 3.41394e+011
+438 83 3.41272e+011
+122 222 3.41063e+011
+478 377 3.40751e+011
+171 170 3.40699e+011
+116 253 3.4049e+011
+133 477 3.40453e+011
+62 441 3.40374e+011
+565 462 3.40175e+011
+44 88 3.40154e+011
+280 88 3.39134e+011
+299 406 3.39051e+011
+451 181 3.39033e+011
+533 340 3.38992e+011
+279 236 3.38839e+011
+432 270 3.38769e+011
+198 466 3.38308e+011
+206 38 3.38125e+011
+383 449 3.38083e+011
+20 286 3.38064e+011
+89 354 3.38011e+011
+565 464 3.37673e+011
+538 178 3.37564e+011
+272 254 3.3741e+011
+447 323 3.37393e+011
+302 442 3.37328e+011
+27 169 3.37302e+011
+309 130 3.37217e+011
+487 118 3.37176e+011
+281 78 3.36797e+011
+255 406 3.36763e+011
+218 36 3.36748e+011
+509 442 3.36425e+011
+68 375 3.36405e+011
+440 87 3.35931e+011
+301 66 3.35889e+011
+71 389 3.35608e+011
+511 442 3.3549e+011
+92 8 3.35415e+011
+541 244 3.35217e+011
+157 176 3.3519e+011
+397 92 3.35113e+011
+266 399 3.34982e+011
+213 326 3.34756e+011
+194 241 3.34465e+011
+542 179 3.34256e+011
+79 217 3.34193e+011
+27 270 3.33943e+011
+308 164 3.33845e+011
+471 102 3.3374e+011
+138 120 3.33661e+011
+483 221 3.33538e+011
+214 404 3.33526e+011
+519 361 3.33356e+011
+232 270 3.33208e+011
+580 343 3.32621e+011
+118 218 3.32527e+011
+428 163 3.32472e+011
+57 234 3.32424e+011
+541 177 3.32372e+011
+181 379 3.32325e+011
+219 398 3.32138e+011
+97 366 3.32024e+011
+580 327 3.3189e+011
+497 263 3.31615e+011
+36 76 3.31501e+011
+230 332 3.31489e+011
+281 86 3.31418e+011
+63 365 3.31401e+011
+276 78 3.31372e+011
+154 161 3.31101e+011
+187 256 3.311e+011
+349 107 3.30963e+011
+335 280 3.3087e+011
+202 366 3.30824e+011
+211 203 3.30571e+011
+18 274 3.30558e+011
+412 418 3.30493e+011
+177 141 3.30451e+011
+51 230 3.30332e+011
+315 234 3.30203e+011
+234 155 3.30115e+011
+268 192 3.30005e+011
+210 326 3.29986e+011
+487 202 3.2987e+011
+535 173 3.29706e+011
+51 39 3.29485e+011
+252 87 3.29471e+011
+590 347 3.29356e+011
+51 377 3.2932e+011
+283 78 3.29126e+011
+438 402 3.2893e+011
+196 79 3.28842e+011
+343 307 3.28729e+011
+337 241 3.28573e+011
+268 137 3.28292e+011
+582 203 3.28266e+011
+336 446 3.27859e+011
+399 93 3.27822e+011
+53 377 3.27701e+011
+140 120 3.27604e+011
+527 437 3.27446e+011
+489 162 3.27414e+011
+126 237 3.27056e+011
+200 5 3.26832e+011
+215 314 3.26786e+011
+489 118 3.26604e+011
+49 377 3.26256e+011
+1 378 3.26247e+011
+95 282 3.26187e+011
+97 456 3.26131e+011
+190 71 3.26098e+011
+400 29 3.25935e+011
+102 295 3.25618e+011
+27 190 3.25546e+011
+487 204 3.25417e+011
+269 413 3.25395e+011
+464 106 3.2534e+011
+49 227 3.25239e+011
+44 250 3.25208e+011
+442 320 3.25203e+011
+49 335 3.25112e+011
+525 280 3.24775e+011
+444 320 3.24627e+011
+146 235 3.24609e+011
+542 82 3.24531e+011
+142 253 3.24368e+011
+307 129 3.23866e+011
+355 449 3.23848e+011
+343 29 3.23709e+011
+489 54 3.23163e+011
+33 79 3.22894e+011
+39 314 3.22666e+011
+444 322 3.22455e+011
+450 177 3.22266e+011
+477 220 3.22259e+011
+442 87 3.22178e+011
+242 244 3.21996e+011
+411 338 3.21936e+011
+88 391 3.21474e+011
+352 365 3.21468e+011
+467 109 3.21333e+011
+304 355 3.21164e+011
+302 445 3.20375e+011
+318 461 3.20343e+011
+455 141 3.20172e+011
+569 270 3.1992e+011
+223 384 3.19838e+011
+372 78 3.19368e+011
+337 259 3.19241e+011
+157 23 3.19014e+011
+264 126 3.18913e+011
+135 165 3.18863e+011
+456 374 3.1854e+011
+262 453 3.18271e+011
+491 469 3.17967e+011
+475 455 3.17949e+011
+104 262 3.17561e+011
+557 265 3.1725e+011
+108 222 3.17048e+011
+527 431 3.1692e+011
+548 265 3.16885e+011
+7 162 3.16778e+011
+59 303 3.16345e+011
+331 136 3.16251e+011
+296 256 3.162e+011
+159 104 3.16076e+011
+511 323 3.15995e+011
+92 320 3.15493e+011
+527 429 3.15366e+011
+35 79 3.151e+011
+385 118 3.14592e+011
+563 79 3.14499e+011
+394 241 3.14394e+011
+442 380 3.14375e+011
+565 176 3.14296e+011
+306 259 3.14193e+011
+132 390 3.13985e+011
+59 335 3.13918e+011
+53 333 3.13904e+011
+550 302 3.1368e+011
+440 393 3.13636e+011
+547 301 3.13592e+011
+442 85 3.13355e+011
+566 163 3.13185e+011
+264 109 3.1312e+011
+150 57 3.13074e+011
+469 108 3.13035e+011
+471 269 3.12698e+011
+130 475 3.12381e+011
+14 236 3.1238e+011
+293 398 3.11667e+011
+60 164 3.1115e+011
+214 169 3.11148e+011
+485 224 3.11037e+011
+390 93 3.10857e+011
+75 377 3.10791e+011
+400 375 3.10596e+011
+27 188 3.10455e+011
+514 400 3.10376e+011
+425 205 3.10248e+011
+211 201 3.10147e+011
+69 377 3.10007e+011
+464 210 3.09954e+011
+402 15 3.09817e+011
+571 239 3.09495e+011
+403 27 3.0929e+011
+153 188 3.0928e+011
+51 335 3.09251e+011
+278 86 3.0924e+011
+446 437 3.09125e+011
+377 101 3.09021e+011
+285 78 3.08821e+011
+384 114 3.08235e+011
+35 335 3.07798e+011
+363 48 3.07794e+011
+344 321 3.07456e+011
+425 200 3.07172e+011
+92 338 3.07149e+011
+246 173 3.07143e+011
+349 367 3.07045e+011
+193 306 3.06978e+011
+97 29 3.06803e+011
+492 25 3.06469e+011
+181 220 3.06278e+011
+296 311 3.06003e+011
+373 414 3.05773e+011
+102 337 3.05741e+011
+223 386 3.05546e+011
+208 314 3.05498e+011
+99 29 3.05452e+011
+484 155 3.05413e+011
+574 100 3.04771e+011
+14 238 3.04764e+011
+132 124 3.04762e+011
+439 319 3.04222e+011
+72 413 3.04208e+011
+407 279 3.04054e+011
+342 31 3.03853e+011
+31 79 3.03758e+011
+146 343 3.03741e+011
+120 341 3.03619e+011
+396 95 3.03428e+011
+182 57 3.03254e+011
+100 426 3.0299e+011
+215 316 3.0295e+011
+184 57 3.02924e+011
+68 389 3.0292e+011
+327 219 3.02639e+011
+196 29 3.02368e+011
+437 140 3.02351e+011
+221 326 3.02167e+011
+410 222 3.02074e+011
+194 83 3.01883e+011
+248 392 3.01613e+011
+35 337 3.0158e+011
+556 366 3.01542e+011
+206 75 3.01423e+011
+147 233 3.01388e+011
+183 157 3.01345e+011
+462 187 3.01313e+011
+298 130 3.01231e+011
+512 50 3.01137e+011
+12 32 3.00999e+011
+41 204 3.0099e+011
+274 123 3.00628e+011
+423 205 3.00417e+011
+213 396 3.0015e+011
+176 326 2.99757e+011
+260 453 2.99589e+011
+167 187 2.99576e+011
+238 294 2.99325e+011
+247 434 2.99257e+011
+332 62 2.99201e+011
+295 150 2.99088e+011
+350 275 2.99064e+011
+426 472 2.98604e+011
+48 225 2.98527e+011
+207 397 2.98496e+011
+431 25 2.98454e+011
+585 306 2.98403e+011
+395 130 2.98359e+011
+147 97 2.98333e+011
+309 53 2.98043e+011
+182 291 2.9798e+011
+535 178 2.97739e+011
+245 176 2.96916e+011
+580 203 2.96676e+011
+469 356 2.96478e+011
+350 273 2.96435e+011
+86 245 2.96416e+011
+255 403 2.9593e+011
+67 313 2.95638e+011
+541 370 2.95437e+011
+510 210 2.95428e+011
+117 304 2.95418e+011
+118 181 2.95272e+011
+602 365 2.95227e+011
+105 338 2.94606e+011
+334 465 2.94399e+011
+497 100 2.94271e+011
+243 430 2.94216e+011
+210 328 2.94065e+011
+400 140 2.94042e+011
+481 101 2.94038e+011
+234 296 2.9377e+011
+349 449 2.93619e+011
+72 377 2.9342e+011
+564 200 2.93287e+011
+73 154 2.9322e+011
+489 302 2.93041e+011
+524 95 2.92695e+011
+578 203 2.92572e+011
+412 222 2.92535e+011
+52 171 2.92462e+011
+232 113 2.92259e+011
+54 352 2.92246e+011
+407 6 2.92144e+011
+510 246 2.91739e+011
+345 394 2.91503e+011
+400 132 2.91391e+011
+485 221 2.91236e+011
+427 140 2.91172e+011
+78 99 2.91151e+011
+233 406 2.91074e+011
+132 121 2.91046e+011
+364 98 2.91e+011
+490 136 2.90323e+011
+481 221 2.89828e+011
+117 90 2.89808e+011
+152 37 2.89737e+011
+469 318 2.89723e+011
+455 61 2.8966e+011
+228 162 2.89633e+011
+48 422 2.89578e+011
+516 303 2.89526e+011
+182 287 2.89343e+011
+37 470 2.89307e+011
+210 395 2.88997e+011
+439 108 2.88962e+011
+292 373 2.88829e+011
+173 143 2.8862e+011
+237 423 2.88284e+011
+555 223 2.8816e+011
+129 121 2.87918e+011
+524 241 2.87853e+011
+352 449 2.87853e+011
+425 25 2.8773e+011
+123 175 2.8769e+011
+27 439 2.87467e+011
+148 326 2.8728e+011
+189 241 2.8724e+011
+531 241 2.8723e+011
+86 389 2.87227e+011
+157 39 2.87106e+011
+512 210 2.86912e+011
+343 303 2.86387e+011
+552 119 2.86114e+011
+4 198 2.85992e+011
+273 198 2.85976e+011
+14 46 2.85597e+011
+513 106 2.85589e+011
+351 355 2.85402e+011
+243 432 2.85345e+011
+361 89 2.85318e+011
+466 377 2.85237e+011
+284 312 2.85207e+011
+247 428 2.84893e+011
+132 63 2.84788e+011
+349 119 2.84593e+011
+66 367 2.84474e+011
+400 96 2.84294e+011
+148 145 2.84119e+011
+17 246 2.83992e+011
+197 82 2.837e+011
+493 225 2.83682e+011
+463 3 2.83612e+011
+302 330 2.83401e+011
+517 99 2.83308e+011
+50 456 2.82863e+011
+449 90 2.82723e+011
+553 276 2.8247e+011
+437 108 2.82299e+011
+56 352 2.822e+011
+550 139 2.81865e+011
+124 237 2.8157e+011
+511 288 2.8135e+011
+505 403 2.81339e+011
+436 463 2.80734e+011
+409 279 2.80609e+011
+83 115 2.80607e+011
+127 412 2.80574e+011
+40 253 2.80526e+011
+595 33 2.80522e+011
+574 97 2.8039e+011
+55 374 2.80338e+011
+265 192 2.80199e+011
+395 128 2.79901e+011
+134 253 2.79815e+011
+7 16 2.79811e+011
+230 50 2.79397e+011
+280 259 2.79261e+011
+235 404 2.79161e+011
+287 444 2.79108e+011
+32 43 2.79086e+011
+89 38 2.78999e+011
+298 91 2.78796e+011
+139 253 2.78791e+011
+283 82 2.78512e+011
+547 86 2.78474e+011
+188 260 2.78293e+011
+256 101 2.78172e+011
+91 113 2.7813e+011
+428 472 2.77955e+011
+285 81 2.77746e+011
+35 389 2.775e+011
+58 330 2.77487e+011
+567 248 2.77297e+011
+231 192 2.77194e+011
+563 239 2.76889e+011
+101 292 2.76862e+011
+488 299 2.76558e+011
+94 113 2.76475e+011
+506 243 2.76122e+011
+328 96 2.75779e+011
+174 132 2.75504e+011
+268 190 2.75484e+011
+298 411 2.75158e+011
+161 434 2.75142e+011
+49 231 2.75007e+011
+606 122 2.74859e+011
+284 184 2.74789e+011
+251 321 2.74737e+011
+144 377 2.74567e+011
+95 357 2.74408e+011
+374 46 2.74306e+011
+116 258 2.74082e+011
+201 370 2.7361e+011
+68 404 2.73564e+011
+238 33 2.7352e+011
+142 257 2.73232e+011
+218 237 2.72759e+011
+108 161 2.7275e+011
+446 186 2.72322e+011
+602 276 2.72222e+011
+462 183 2.72145e+011
+68 358 2.72136e+011
+97 454 2.72119e+011
+33 41 2.72066e+011
+466 213 2.7206e+011
+41 291 2.7195e+011
+438 387 2.71873e+011
+330 329 2.71751e+011
+566 358 2.71437e+011
+95 408 2.71339e+011
+404 98 2.71288e+011
+574 363 2.70889e+011
+253 435 2.70698e+011
+61 437 2.70438e+011
+223 399 2.70369e+011
+216 404 2.70129e+011
+276 123 2.6996e+011
+344 187 2.69934e+011
+311 136 2.69909e+011
+295 130 2.6983e+011
+385 247 2.69706e+011
+61 453 2.69693e+011
+91 39 2.69644e+011
+226 162 2.69596e+011
+506 157 2.69252e+011
+354 64 2.6925e+011
+391 408 2.69182e+011
+272 413 2.68727e+011
+231 275 2.68725e+011
+455 177 2.68625e+011
+457 139 2.68618e+011
+512 56 2.68435e+011
+513 442 2.68401e+011
+600 274 2.68303e+011
+305 211 2.68106e+011
+159 434 2.6808e+011
+144 120 2.68058e+011
+180 287 2.68051e+011
+306 94 2.67918e+011
+93 406 2.67562e+011
+35 43 2.67524e+011
+259 347 2.66747e+011
+373 94 2.66528e+011
+296 411 2.66421e+011
+243 357 2.65994e+011
+234 333 2.65893e+011
+352 254 2.65533e+011
+12 34 2.65508e+011
+311 101 2.6536e+011
+505 104 2.65336e+011
+501 242 2.65303e+011
+170 179 2.65302e+011
+101 185 2.65237e+011
+497 359 2.65102e+011
+120 303 2.64998e+011
+38 275 2.6463e+011
+32 335 2.64441e+011
+589 102 2.64366e+011
+168 292 2.64353e+011
+231 189 2.64244e+011
+99 292 2.64237e+011
+63 165 2.64126e+011
+402 96 2.64031e+011
+463 227 2.63991e+011
+196 431 2.6385e+011
+463 229 2.63818e+011
+340 442 2.63758e+011
+95 406 2.63749e+011
+305 66 2.63552e+011
+181 237 2.63531e+011
+507 403 2.63477e+011
+133 475 2.63342e+011
+256 241 2.63291e+011
+450 293 2.63119e+011
+165 413 2.62786e+011
+552 265 2.62769e+011
+214 429 2.62758e+011
+338 442 2.62718e+011
+543 277 2.62272e+011
+455 181 2.62167e+011
+134 122 2.62151e+011
+208 326 2.61877e+011
+32 337 2.61641e+011
+189 270 2.61639e+011
+313 464 2.61579e+011
+155 153 2.6133e+011
+471 216 2.61177e+011
+299 282 2.61022e+011
+88 397 2.61004e+011
+36 255 2.60928e+011
+186 321 2.60916e+011
+346 327 2.60779e+011
+341 241 2.60721e+011
+62 446 2.60639e+011
+216 429 2.60477e+011
+202 38 2.60472e+011
+418 376 2.60212e+011
+197 419 2.60034e+011
+59 424 2.59971e+011
+391 2 2.59901e+011
+405 110 2.59797e+011
+199 240 2.59719e+011
+475 222 2.59503e+011
+281 312 2.59452e+011
+498 356 2.59398e+011
+136 122 2.59379e+011
+94 363 2.59313e+011
+134 311 2.5901e+011
+565 239 2.58661e+011
+127 407 2.58499e+011
+314 462 2.58166e+011
+491 340 2.58158e+011
+193 89 2.58085e+011
+182 412 2.58008e+011
+70 199 2.57855e+011
+235 406 2.57652e+011
+138 316 2.5762e+011
+191 430 2.57536e+011
+584 203 2.57522e+011
+210 314 2.57473e+011
+504 459 2.57374e+011
+565 248 2.57321e+011
+425 411 2.57259e+011
+376 281 2.57192e+011
+77 164 2.57143e+011
+498 320 2.57089e+011
+202 256 2.57063e+011
+120 90 2.56818e+011
+564 266 2.56803e+011
+513 403 2.56683e+011
+193 303 2.56386e+011
+413 432 2.56278e+011
+528 60 2.56184e+011
+394 118 2.55896e+011
+74 335 2.55846e+011
+228 155 2.55783e+011
+476 379 2.55728e+011
+574 4 2.55724e+011
+282 442 2.55703e+011
+468 301 2.55642e+011
+577 90 2.5553e+011
+492 303 2.55517e+011
+332 407 2.55498e+011
+524 138 2.55217e+011
+141 316 2.55157e+011
+265 187 2.55131e+011
+130 398 2.54879e+011
+488 51 2.54738e+011
+378 95 2.54703e+011
+157 202 2.54637e+011
+290 423 2.54595e+011
+277 360 2.54488e+011
+214 237 2.54448e+011
+50 203 2.54345e+011
+572 363 2.54329e+011
+68 355 2.54276e+011
+485 284 2.54269e+011
+210 218 2.54123e+011
+334 11 2.54046e+011
+353 354 2.53889e+011
+276 254 2.53677e+011
+497 419 2.53583e+011
+247 53 2.5354e+011
+61 364 2.53335e+011
+233 274 2.5307e+011
+306 256 2.5282e+011
+323 96 2.5276e+011
+510 370 2.52749e+011
+228 157 2.52657e+011
+11 138 2.5265e+011
+305 298 2.52634e+011
+308 429 2.52474e+011
+97 289 2.52398e+011
+423 106 2.52048e+011
+560 180 2.51947e+011
+221 457 2.51938e+011
+282 268 2.51691e+011
+60 176 2.51362e+011
+427 109 2.51233e+011
+91 345 2.51207e+011
+262 321 2.51197e+011
+407 281 2.51159e+011
+478 291 2.51122e+011
+522 322 2.51074e+011
+336 443 2.51011e+011
+472 357 2.50989e+011
+265 303 2.50831e+011
+358 89 2.50781e+011
+23 255 2.50604e+011
+497 363 2.50439e+011
+476 278 2.50024e+011
+89 321 2.49935e+011
+209 399 2.49326e+011
+152 318 2.49259e+011
+42 275 2.48862e+011
+19 322 2.48728e+011
+294 368 2.48589e+011
+95 361 2.48576e+011
+184 270 2.48342e+011
+370 316 2.48237e+011
+351 121 2.4781e+011
+511 403 2.47775e+011
+488 132 2.47746e+011
+558 160 2.47614e+011
+317 404 2.47562e+011
+77 115 2.47393e+011
+10 163 2.47381e+011
+206 370 2.47302e+011
+553 279 2.47143e+011
+128 135 2.47097e+011
+420 205 2.47037e+011
+584 58 2.46984e+011
+442 359 2.46974e+011
+69 367 2.46906e+011
+105 390 2.46901e+011
+211 260 2.46881e+011
+132 398 2.46852e+011
+154 165 2.46676e+011
+265 79 2.46493e+011
+136 187 2.46278e+011
+245 195 2.46065e+011
+154 215 2.45999e+011
+226 95 2.45823e+011
+324 350 2.45721e+011
+488 135 2.45664e+011
+27 149 2.45627e+011
+375 235 2.45487e+011
+308 431 2.45486e+011
+72 199 2.45453e+011
+22 118 2.4537e+011
+439 357 2.45257e+011
+66 453 2.45238e+011
+249 53 2.45224e+011
+500 181 2.45153e+011
+229 282 2.44939e+011
+160 223 2.44839e+011
+594 425 2.44808e+011
+518 303 2.44683e+011
+217 396 2.44405e+011
+565 425 2.44401e+011
+79 116 2.44317e+011
+7 138 2.44228e+011
+152 215 2.43952e+011
+490 344 2.43941e+011
+79 150 2.43853e+011
+355 389 2.4378e+011
+171 76 2.4331e+011
+174 378 2.43201e+011
+344 327 2.43176e+011
+397 118 2.43162e+011
+466 84 2.43159e+011
+477 280 2.43061e+011
+55 137 2.42798e+011
+137 319 2.42591e+011
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_5_3.txt b/test_data/harriscorners/hc_msc_0.00_0.10_5_3.txt
new file mode 100644
index 0000000..4fe4584
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_5_3.txt
@@ -0,0 +1,1711 @@
+1710
+499 1 5.56838e+015
+274 366 4.72135e+015
+245 95 4.51807e+015
+363 401 4.46607e+015
+449 298 4.09356e+015
+282 115 3.56796e+015
+122 44 3.44995e+015
+421 182 3.32527e+015
+507 122 3.18223e+015
+251 13 3.00727e+015
+426 320 2.98528e+015
+240 90 2.97706e+015
+387 178 2.96541e+015
+553 40 2.96376e+015
+447 397 2.84196e+015
+456 281 2.80019e+015
+213 72 2.72728e+015
+65 343 2.56846e+015
+200 18 2.52165e+015
+344 10 2.50168e+015
+435 68 2.49393e+015
+131 36 2.43764e+015
+321 313 2.43527e+015
+34 137 2.43461e+015
+223 38 2.42029e+015
+448 263 2.39266e+015
+480 298 2.39066e+015
+256 386 2.37685e+015
+135 215 2.3592e+015
+144 309 2.35294e+015
+221 16 2.2931e+015
+215 73 2.25699e+015
+543 364 2.23627e+015
+423 180 2.22467e+015
+110 238 2.21656e+015
+45 27 2.2156e+015
+303 183 2.15998e+015
+299 52 2.1546e+015
+183 401 2.13711e+015
+348 179 2.10095e+015
+412 256 2.06204e+015
+124 198 2.05709e+015
+385 221 2.0508e+015
+28 8 2.01656e+015
+535 242 1.96008e+015
+246 143 1.95346e+015
+125 255 1.87572e+015
+59 219 1.87452e+015
+465 394 1.87307e+015
+329 127 1.85485e+015
+271 166 1.85146e+015
+196 57 1.8383e+015
+390 58 1.82818e+015
+237 20 1.82689e+015
+64 235 1.80741e+015
+184 35 1.80624e+015
+130 2 1.80265e+015
+312 149 1.79093e+015
+102 4 1.74618e+015
+261 297 1.72225e+015
+173 312 1.71836e+015
+308 372 1.70106e+015
+420 178 1.66249e+015
+520 61 1.65454e+015
+2 47 1.65069e+015
+125 363 1.64638e+015
+242 203 1.62704e+015
+224 419 1.62185e+015
+510 173 1.61871e+015
+387 10 1.61622e+015
+37 62 1.61539e+015
+555 40 1.61496e+015
+264 440 1.60141e+015
+449 219 1.59871e+015
+360 336 1.59803e+015
+320 224 1.59797e+015
+239 349 1.59583e+015
+418 440 1.58642e+015
+66 320 1.5835e+015
+508 18 1.58071e+015
+355 220 1.5772e+015
+159 143 1.56618e+015
+382 8 1.56351e+015
+417 7 1.55997e+015
+392 144 1.55118e+015
+412 162 1.53977e+015
+111 241 1.53321e+015
+361 131 1.52981e+015
+253 138 1.51425e+015
+411 355 1.51267e+015
+82 28 1.51047e+015
+262 165 1.50837e+015
+286 296 1.50208e+015
+483 339 1.50046e+015
+482 365 1.49697e+015
+359 294 1.49246e+015
+137 208 1.48624e+015
+91 198 1.48527e+015
+59 185 1.48357e+015
+432 146 1.47847e+015
+515 76 1.47064e+015
+239 18 1.46318e+015
+282 403 1.46228e+015
+525 60 1.45816e+015
+77 256 1.4573e+015
+177 106 1.45526e+015
+225 221 1.44507e+015
+209 223 1.4411e+015
+247 92 1.43533e+015
+545 168 1.43519e+015
+59 183 1.43493e+015
+387 295 1.43102e+015
+243 72 1.42775e+015
+462 279 1.42762e+015
+474 262 1.42698e+015
+425 376 1.39369e+015
+192 331 1.38536e+015
+271 71 1.3841e+015
+229 292 1.36253e+015
+513 340 1.359e+015
+402 122 1.35706e+015
+300 265 1.35575e+015
+562 478 1.35151e+015
+404 120 1.34931e+015
+542 18 1.33794e+015
+127 76 1.32431e+015
+79 2 1.32157e+015
+112 393 1.32152e+015
+264 298 1.31208e+015
+498 82 1.30835e+015
+294 15 1.30224e+015
+140 184 1.29606e+015
+72 24 1.28176e+015
+71 148 1.27887e+015
+105 62 1.27839e+015
+545 217 1.27409e+015
+407 64 1.2729e+015
+101 58 1.26626e+015
+31 8 1.26245e+015
+355 320 1.25486e+015
+512 168 1.25345e+015
+203 310 1.24588e+015
+177 260 1.24434e+015
+35 146 1.24221e+015
+116 43 1.24145e+015
+132 26 1.23591e+015
+281 112 1.23511e+015
+372 163 1.23154e+015
+174 238 1.22905e+015
+233 162 1.22061e+015
+41 297 1.20772e+015
+113 213 1.20733e+015
+526 223 1.20592e+015
+364 298 1.20265e+015
+277 352 1.19515e+015
+296 420 1.19344e+015
+101 78 1.19209e+015
+271 278 1.18325e+015
+455 83 1.18236e+015
+275 181 1.18097e+015
+406 375 1.18083e+015
+291 16 1.1794e+015
+250 364 1.17831e+015
+283 71 1.17736e+015
+544 171 1.15974e+015
+550 379 1.15563e+015
+236 163 1.15314e+015
+177 93 1.15285e+015
+151 307 1.15271e+015
+48 99 1.15102e+015
+36 174 1.1495e+015
+4 66 1.14847e+015
+343 337 1.14829e+015
+326 426 1.14798e+015
+207 225 1.14645e+015
+562 147 1.14622e+015
+100 221 1.14234e+015
+434 398 1.14117e+015
+37 144 1.13692e+015
+304 216 1.13594e+015
+212 183 1.13524e+015
+46 219 1.13217e+015
+88 148 1.13056e+015
+359 260 1.13048e+015
+140 203 1.12949e+015
+11 101 1.12346e+015
+377 7 1.11966e+015
+426 119 1.11902e+015
+510 455 1.11815e+015
+216 279 1.11317e+015
+158 1 1.10749e+015
+524 20 1.10354e+015
+365 7 1.10299e+015
+300 177 1.0984e+015
+55 31 1.09777e+015
+114 344 1.09403e+015
+400 261 1.08867e+015
+421 334 1.0886e+015
+164 242 1.08238e+015
+395 260 1.08219e+015
+75 236 1.08094e+015
+477 12 1.07948e+015
+430 1 1.07809e+015
+542 210 1.07802e+015
+365 200 1.07452e+015
+471 240 1.07407e+015
+69 27 1.06905e+015
+95 446 1.06738e+015
+317 385 1.06304e+015
+525 345 1.06226e+015
+479 19 1.06212e+015
+469 240 1.06153e+015
+273 130 1.0613e+015
+307 439 1.06088e+015
+281 51 1.05987e+015
+522 122 1.0587e+015
+48 26 1.0585e+015
+456 283 1.05731e+015
+230 266 1.05706e+015
+182 111 1.0539e+015
+252 140 1.0519e+015
+64 371 1.04856e+015
+522 263 1.0468e+015
+58 74 1.04451e+015
+166 96 1.0437e+015
+209 54 1.03919e+015
+367 144 1.03464e+015
+54 6 1.03302e+015
+484 59 1.0309e+015
+136 202 1.03049e+015
+233 15 1.02869e+015
+422 44 1.02763e+015
+224 183 1.02612e+015
+170 19 1.02552e+015
+87 78 1.02071e+015
+138 110 1.01929e+015
+38 296 1.01456e+015
+340 9 1.01193e+015
+339 164 1.00969e+015
+356 267 1.00662e+015
+302 206 1.00626e+015
+97 447 1.0052e+015
+338 391 1.00501e+015
+92 214 1.00349e+015
+472 63 1.00089e+015
+526 101 1.00085e+015
+530 184 1.00003e+015
+162 213 9.93519e+014
+110 96 9.93004e+014
+387 242 9.92655e+014
+438 339 9.88284e+014
+338 473 9.88094e+014
+484 23 9.86236e+014
+453 340 9.85593e+014
+352 147 9.85141e+014
+28 236 9.81983e+014
+382 411 9.78013e+014
+449 403 9.76195e+014
+528 98 9.75657e+014
+345 109 9.7119e+014
+81 3 9.69946e+014
+510 122 9.69157e+014
+301 164 9.69037e+014
+236 92 9.67759e+014
+538 95 9.65462e+014
+452 205 9.64741e+014
+91 291 9.62052e+014
+294 25 9.51766e+014
+173 94 9.50553e+014
+277 181 9.49478e+014
+388 221 9.4678e+014
+528 361 9.44064e+014
+286 166 9.39409e+014
+72 97 9.39384e+014
+579 17 9.39068e+014
+451 376 9.38193e+014
+526 99 9.37335e+014
+347 392 9.37303e+014
+46 147 9.37223e+014
+503 361 9.37064e+014
+514 223 9.35569e+014
+511 128 9.33918e+014
+345 241 9.30714e+014
+361 296 9.29147e+014
+520 183 9.29056e+014
+219 291 9.27602e+014
+22 60 9.27353e+014
+89 197 9.25837e+014
+324 341 9.2216e+014
+208 451 9.19936e+014
+74 6 9.18866e+014
+264 201 9.18741e+014
+230 36 9.17357e+014
+112 4 9.16355e+014
+421 6 9.10903e+014
+221 180 9.10118e+014
+220 178 9.09281e+014
+139 173 9.08364e+014
+232 200 9.06017e+014
+55 66 9.05001e+014
+221 182 8.98511e+014
+512 98 8.98034e+014
+48 97 8.96802e+014
+169 55 8.9628e+014
+362 251 8.95191e+014
+244 165 8.94345e+014
+443 23 8.93422e+014
+124 272 8.92896e+014
+97 79 8.91606e+014
+32 218 8.91157e+014
+234 346 8.90652e+014
+358 168 8.90558e+014
+84 78 8.90108e+014
+407 66 8.88784e+014
+78 196 8.86023e+014
+379 69 8.8261e+014
+187 99 8.80437e+014
+220 100 8.79688e+014
+94 217 8.76862e+014
+485 179 8.75185e+014
+37 138 8.73666e+014
+491 1 8.7328e+014
+370 107 8.72822e+014
+167 286 8.72496e+014
+191 359 8.72155e+014
+348 241 8.68819e+014
+380 26 8.68692e+014
+264 445 8.68482e+014
+44 81 8.64572e+014
+408 352 8.61888e+014
+357 335 8.61665e+014
+141 22 8.59754e+014
+128 164 8.59562e+014
+18 342 8.59223e+014
+276 221 8.58515e+014
+325 88 8.57478e+014
+507 164 8.55629e+014
+577 15 8.53961e+014
+566 43 8.49293e+014
+365 251 8.46865e+014
+560 229 8.40927e+014
+299 70 8.4074e+014
+343 7 8.40377e+014
+137 98 8.39008e+014
+248 404 8.38357e+014
+57 364 8.37561e+014
+539 40 8.3737e+014
+176 39 8.3526e+014
+379 353 8.33296e+014
+329 9 8.32742e+014
+59 76 8.32735e+014
+449 178 8.32148e+014
+228 184 8.28168e+014
+327 342 8.27097e+014
+167 325 8.26744e+014
+410 65 8.26621e+014
+210 445 8.23918e+014
+541 13 8.22283e+014
+246 294 8.19868e+014
+170 57 8.19202e+014
+401 184 8.17146e+014
+59 216 8.1685e+014
+147 21 8.14177e+014
+32 100 8.12485e+014
+198 130 8.12158e+014
+82 77 8.11998e+014
+63 60 8.11976e+014
+342 464 8.11894e+014
+545 57 8.10342e+014
+474 23 8.10268e+014
+512 125 8.08799e+014
+489 264 8.0679e+014
+180 394 8.06279e+014
+371 82 8.06064e+014
+55 28 8.04389e+014
+390 61 8.04348e+014
+240 201 8.04175e+014
+163 276 8.03193e+014
+259 221 8.01976e+014
+49 153 8.01763e+014
+179 113 8.00717e+014
+270 62 8.00213e+014
+468 238 7.99174e+014
+452 337 7.98755e+014
+342 123 7.98503e+014
+163 207 7.97641e+014
+277 370 7.97151e+014
+274 281 7.9699e+014
+183 19 7.96927e+014
+478 16 7.95063e+014
+432 83 7.92601e+014
+131 148 7.91769e+014
+161 144 7.90537e+014
+510 165 7.90432e+014
+463 393 7.90092e+014
+114 3 7.88743e+014
+527 39 7.87547e+014
+575 126 7.87363e+014
+278 145 7.85097e+014
+33 98 7.83348e+014
+36 268 7.82071e+014
+481 179 7.81739e+014
+492 140 7.80903e+014
+140 325 7.79192e+014
+576 178 7.79178e+014
+316 336 7.79089e+014
+243 190 7.78825e+014
+512 165 7.78799e+014
+214 56 7.783e+014
+329 66 7.78091e+014
+544 210 7.75776e+014
+524 263 7.75188e+014
+47 10 7.72714e+014
+223 15 7.69471e+014
+146 160 7.69211e+014
+228 289 7.69177e+014
+108 45 7.65461e+014
+572 142 7.65418e+014
+273 297 7.64648e+014
+513 220 7.64604e+014
+479 179 7.64206e+014
+144 187 7.63106e+014
+6 9 7.62711e+014
+282 53 7.60693e+014
+136 128 7.5774e+014
+162 216 7.56773e+014
+333 89 7.56675e+014
+537 459 7.53941e+014
+441 98 7.53336e+014
+497 228 7.52685e+014
+329 254 7.52521e+014
+207 436 7.51649e+014
+546 41 7.50525e+014
+162 168 7.47331e+014
+391 47 7.47133e+014
+358 10 7.45804e+014
+543 57 7.43641e+014
+482 327 7.4199e+014
+378 316 7.39319e+014
+334 435 7.39033e+014
+242 100 7.3893e+014
+37 288 7.38134e+014
+281 49 7.36603e+014
+174 57 7.36093e+014
+259 71 7.33592e+014
+419 7 7.33026e+014
+306 192 7.31362e+014
+465 197 7.301e+014
+448 138 7.30028e+014
+545 5 7.29725e+014
+344 197 7.27303e+014
+234 72 7.26946e+014
+108 324 7.26922e+014
+543 130 7.26518e+014
+521 63 7.2602e+014
+365 259 7.25138e+014
+561 320 7.24038e+014
+36 201 7.23933e+014
+445 453 7.23332e+014
+76 8 7.22707e+014
+82 136 7.21496e+014
+196 82 7.21387e+014
+363 182 7.20927e+014
+340 12 7.19618e+014
+208 434 7.18957e+014
+490 342 7.18842e+014
+185 19 7.18592e+014
+497 79 7.18242e+014
+324 90 7.17981e+014
+389 139 7.17751e+014
+56 5 7.16897e+014
+183 133 7.16431e+014
+103 359 7.15526e+014
+117 96 7.15375e+014
+479 294 7.1262e+014
+125 261 7.11905e+014
+416 23 7.11752e+014
+226 180 7.11167e+014
+371 393 7.10833e+014
+53 43 7.1031e+014
+360 217 7.0982e+014
+533 183 7.09102e+014
+324 164 7.09068e+014
+121 52 7.08336e+014
+313 85 7.06204e+014
+540 99 7.06135e+014
+419 163 7.05411e+014
+68 149 7.05404e+014
+422 398 7.04105e+014
+528 104 7.03537e+014
+254 422 7.03396e+014
+403 6 7.03042e+014
+358 143 7.02342e+014
+217 126 7.01674e+014
+164 359 6.99401e+014
+290 264 6.97372e+014
+171 312 6.97361e+014
+531 22 6.94959e+014
+285 211 6.93219e+014
+262 391 6.90347e+014
+482 331 6.89981e+014
+463 198 6.88679e+014
+512 295 6.88325e+014
+297 296 6.87029e+014
+260 273 6.85091e+014
+169 198 6.84484e+014
+292 311 6.84128e+014
+336 391 6.83872e+014
+358 127 6.82317e+014
+481 82 6.80609e+014
+241 68 6.79381e+014
+307 448 6.78772e+014
+351 323 6.76762e+014
+516 348 6.73841e+014
+507 59 6.72349e+014
+351 320 6.72011e+014
+100 162 6.71511e+014
+270 66 6.69343e+014
+436 91 6.68664e+014
+117 76 6.68529e+014
+42 62 6.67878e+014
+331 107 6.67015e+014
+480 403 6.6693e+014
+259 236 6.65622e+014
+359 166 6.64484e+014
+256 149 6.64066e+014
+49 159 6.64007e+014
+137 138 6.63451e+014
+87 209 6.62492e+014
+172 449 6.62328e+014
+165 217 6.62021e+014
+378 339 6.61983e+014
+271 289 6.61555e+014
+344 263 6.61148e+014
+38 172 6.60863e+014
+40 217 6.60738e+014
+487 4 6.60434e+014
+569 39 6.58847e+014
+310 33 6.58053e+014
+353 127 6.57399e+014
+66 214 6.55058e+014
+508 5 6.54719e+014
+374 241 6.53932e+014
+516 17 6.53743e+014
+252 10 6.5361e+014
+153 222 6.52629e+014
+55 294 6.52368e+014
+529 23 6.52275e+014
+260 142 6.51589e+014
+5 46 6.51057e+014
+172 56 6.5032e+014
+253 74 6.49564e+014
+211 56 6.49227e+014
+529 102 6.46048e+014
+386 126 6.45942e+014
+270 60 6.45384e+014
+210 154 6.44903e+014
+223 113 6.44225e+014
+80 474 6.43806e+014
+286 209 6.43716e+014
+115 77 6.43078e+014
+313 83 6.42546e+014
+44 10 6.415e+014
+129 168 6.41108e+014
+506 203 6.40872e+014
+396 161 6.40088e+014
+108 183 6.395e+014
+84 476 6.39244e+014
+82 74 6.39233e+014
+86 255 6.39061e+014
+282 221 6.38845e+014
+509 361 6.38822e+014
+248 219 6.36946e+014
+255 182 6.35155e+014
+556 182 6.34929e+014
+142 183 6.34815e+014
+236 221 6.33569e+014
+206 159 6.31697e+014
+64 218 6.29839e+014
+267 30 6.27034e+014
+211 33 6.26451e+014
+510 102 6.26191e+014
+537 186 6.25926e+014
+256 35 6.25321e+014
+141 2 6.24723e+014
+328 142 6.24693e+014
+240 421 6.2453e+014
+528 142 6.23682e+014
+38 219 6.22895e+014
+357 125 6.22583e+014
+66 234 6.21806e+014
+367 247 6.21637e+014
+196 192 6.21379e+014
+107 40 6.21309e+014
+287 344 6.20711e+014
+103 392 6.14176e+014
+526 104 6.13505e+014
+280 128 6.11732e+014
+151 114 6.11181e+014
+111 136 6.11011e+014
+112 134 6.10731e+014
+479 81 6.10386e+014
+458 265 6.09604e+014
+241 59 6.0957e+014
+479 263 6.0923e+014
+401 182 6.09024e+014
+363 199 6.09002e+014
+525 423 6.08629e+014
+289 212 6.07316e+014
+192 219 6.06778e+014
+141 394 6.05499e+014
+312 7 6.05123e+014
+41 64 6.05059e+014
+513 121 6.02673e+014
+210 437 6.02332e+014
+544 91 6.01977e+014
+48 256 6.01554e+014
+190 146 6.01223e+014
+527 422 6.00222e+014
+160 183 6.00166e+014
+267 296 5.99933e+014
+266 53 5.99547e+014
+110 265 5.99494e+014
+566 161 5.98555e+014
+111 40 5.98349e+014
+161 256 5.97145e+014
+412 23 5.96644e+014
+324 142 5.95855e+014
+221 114 5.95202e+014
+406 122 5.94968e+014
+413 4 5.94706e+014
+212 437 5.93975e+014
+413 21 5.93641e+014
+93 254 5.92774e+014
+407 162 5.9178e+014
+191 217 5.91737e+014
+434 148 5.91481e+014
+261 223 5.9087e+014
+324 424 5.89805e+014
+424 318 5.89544e+014
+386 162 5.89479e+014
+513 261 5.89213e+014
+252 422 5.88995e+014
+159 112 5.88564e+014
+364 255 5.87749e+014
+205 162 5.87692e+014
+274 216 5.86871e+014
+390 19 5.859e+014
+317 148 5.85354e+014
+406 142 5.85352e+014
+42 339 5.81405e+014
+268 288 5.80948e+014
+274 76 5.80497e+014
+39 143 5.79951e+014
+216 176 5.78927e+014
+273 289 5.78872e+014
+130 239 5.78688e+014
+474 202 5.78347e+014
+423 336 5.7759e+014
+54 289 5.77182e+014
+213 123 5.77163e+014
+105 4 5.76787e+014
+498 160 5.74904e+014
+487 182 5.74412e+014
+65 252 5.73992e+014
+195 16 5.71706e+014
+422 323 5.71311e+014
+217 54 5.70915e+014
+357 282 5.70579e+014
+492 182 5.70576e+014
+528 188 5.69151e+014
+154 114 5.69078e+014
+250 313 5.68908e+014
+571 161 5.66865e+014
+29 29 5.66174e+014
+495 141 5.65975e+014
+561 60 5.64948e+014
+398 358 5.64675e+014
+3 382 5.64526e+014
+188 145 5.64304e+014
+480 261 5.64086e+014
+134 238 5.6331e+014
+546 182 5.63157e+014
+44 121 5.62764e+014
+597 272 5.61775e+014
+274 206 5.61544e+014
+436 386 5.61017e+014
+457 375 5.60005e+014
+362 360 5.59753e+014
+85 59 5.59127e+014
+403 265 5.59121e+014
+136 21 5.58909e+014
+406 199 5.58675e+014
+420 81 5.58415e+014
+113 356 5.58397e+014
+508 7 5.57764e+014
+22 58 5.57586e+014
+422 48 5.57313e+014
+502 143 5.57104e+014
+598 364 5.57017e+014
+271 241 5.56826e+014
+67 47 5.56797e+014
+398 169 5.56722e+014
+507 14 5.56321e+014
+42 24 5.56257e+014
+524 99 5.56096e+014
+376 84 5.55385e+014
+572 328 5.55381e+014
+127 186 5.54993e+014
+189 205 5.54913e+014
+393 46 5.54653e+014
+514 382 5.54372e+014
+96 125 5.5297e+014
+494 455 5.52933e+014
+259 201 5.52589e+014
+306 362 5.52497e+014
+220 149 5.52428e+014
+298 332 5.52158e+014
+179 274 5.5213e+014
+332 130 5.51304e+014
+275 319 5.51212e+014
+292 29 5.50891e+014
+384 162 5.50266e+014
+128 95 5.4954e+014
+429 88 5.49432e+014
+308 8 5.49194e+014
+419 167 5.4914e+014
+549 59 5.48482e+014
+49 12 5.48459e+014
+177 18 5.47392e+014
+58 253 5.4665e+014
+538 121 5.46341e+014
+542 42 5.46232e+014
+362 397 5.46011e+014
+403 188 5.45995e+014
+182 380 5.45943e+014
+366 2 5.45126e+014
+525 381 5.43521e+014
+281 132 5.43182e+014
+560 81 5.42541e+014
+313 222 5.42403e+014
+45 131 5.42012e+014
+86 214 5.41899e+014
+413 299 5.41608e+014
+125 40 5.41303e+014
+535 393 5.41193e+014
+141 392 5.40178e+014
+266 14 5.39339e+014
+241 97 5.38935e+014
+526 398 5.38101e+014
+317 107 5.38039e+014
+85 197 5.38037e+014
+540 165 5.37829e+014
+64 276 5.37146e+014
+114 392 5.37065e+014
+477 182 5.36888e+014
+425 334 5.36694e+014
+313 75 5.35523e+014
+362 370 5.35248e+014
+507 2 5.35053e+014
+437 303 5.34067e+014
+432 268 5.33778e+014
+287 33 5.33543e+014
+265 260 5.33127e+014
+473 239 5.32846e+014
+9 476 5.3242e+014
+558 19 5.32081e+014
+120 4 5.32026e+014
+299 175 5.31346e+014
+467 125 5.30285e+014
+556 244 5.28553e+014
+332 295 5.28255e+014
+374 394 5.27614e+014
+282 135 5.27515e+014
+3 155 5.27468e+014
+109 136 5.27388e+014
+396 104 5.26868e+014
+245 206 5.26259e+014
+363 253 5.26207e+014
+44 62 5.25431e+014
+12 80 5.25383e+014
+129 309 5.24495e+014
+568 383 5.24277e+014
+184 137 5.24251e+014
+236 130 5.23814e+014
+389 97 5.23506e+014
+272 53 5.23483e+014
+282 206 5.23248e+014
+289 167 5.22424e+014
+265 31 5.21641e+014
+289 136 5.21323e+014
+45 407 5.21159e+014
+187 263 5.20429e+014
+368 337 5.18692e+014
+361 9 5.18636e+014
+126 251 5.18595e+014
+492 456 5.18572e+014
+282 351 5.17372e+014
+572 449 5.17165e+014
+535 121 5.17127e+014
+167 238 5.1692e+014
+390 420 5.16423e+014
+479 451 5.16076e+014
+168 242 5.15999e+014
+505 381 5.15906e+014
+131 255 5.1444e+014
+5 63 5.13973e+014
+155 1 5.13723e+014
+541 123 5.11781e+014
+293 334 5.11777e+014
+274 369 5.11223e+014
+516 202 5.10032e+014
+474 4 5.09617e+014
+192 123 5.08364e+014
+393 217 5.07837e+014
+117 428 5.06787e+014
+327 320 5.06619e+014
+207 417 5.06514e+014
+192 171 5.06418e+014
+91 389 5.06133e+014
+48 219 5.05137e+014
+466 40 5.04374e+014
+57 331 5.03396e+014
+33 172 5.03308e+014
+445 7 5.02973e+014
+369 162 5.02826e+014
+158 138 5.02766e+014
+77 81 5.02617e+014
+218 145 5.0236e+014
+204 308 5.0189e+014
+101 236 5.01771e+014
+425 262 5.01737e+014
+65 363 5.01626e+014
+149 39 5.01541e+014
+451 101 5.01253e+014
+220 210 5.00728e+014
+277 137 5.00242e+014
+279 363 5.00012e+014
+567 40 4.99365e+014
+144 327 4.99217e+014
+524 172 4.991e+014
+301 215 4.98928e+014
+413 66 4.98917e+014
+173 40 4.98258e+014
+132 129 4.97348e+014
+297 410 4.97009e+014
+269 105 4.9688e+014
+201 317 4.96688e+014
+246 106 4.96591e+014
+433 110 4.96555e+014
+67 337 4.96077e+014
+346 297 4.95589e+014
+363 8 4.95427e+014
+531 103 4.94557e+014
+528 160 4.94342e+014
+74 186 4.94111e+014
+435 281 4.93992e+014
+58 372 4.93544e+014
+95 452 4.93065e+014
+315 146 4.92806e+014
+262 217 4.92762e+014
+512 44 4.91199e+014
+220 151 4.91197e+014
+533 122 4.90545e+014
+533 340 4.90432e+014
+93 6 4.9005e+014
+507 455 4.89887e+014
+391 52 4.89175e+014
+279 222 4.87006e+014
+279 296 4.86664e+014
+166 20 4.86411e+014
+559 271 4.85557e+014
+133 427 4.85272e+014
+248 314 4.84723e+014
+158 74 4.84318e+014
+249 32 4.842e+014
+391 324 4.83554e+014
+278 418 4.83177e+014
+418 68 4.83058e+014
+29 220 4.82879e+014
+46 90 4.82427e+014
+95 476 4.81821e+014
+33 268 4.81324e+014
+325 295 4.81134e+014
+500 42 4.81086e+014
+15 219 4.80647e+014
+51 61 4.80599e+014
+57 290 4.8058e+014
+190 276 4.80392e+014
+245 14 4.80157e+014
+229 347 4.78551e+014
+540 140 4.7845e+014
+565 463 4.77861e+014
+137 57 4.77725e+014
+252 424 4.77636e+014
+303 180 4.77347e+014
+445 127 4.77295e+014
+553 383 4.76979e+014
+175 115 4.76675e+014
+513 401 4.76556e+014
+365 105 4.75822e+014
+320 119 4.75259e+014
+83 404 4.74548e+014
+412 220 4.74497e+014
+371 90 4.74023e+014
+178 164 4.72963e+014
+464 240 4.7156e+014
+205 202 4.71103e+014
+386 167 4.70684e+014
+208 421 4.70308e+014
+574 39 4.69667e+014
+475 245 4.69529e+014
+70 130 4.69093e+014
+179 18 4.68844e+014
+179 103 4.68731e+014
+358 393 4.68241e+014
+157 55 4.68027e+014
+34 298 4.6776e+014
+299 399 4.66909e+014
+190 144 4.66909e+014
+189 214 4.66687e+014
+177 331 4.66123e+014
+450 91 4.66073e+014
+475 342 4.65854e+014
+150 151 4.65669e+014
+471 122 4.65661e+014
+584 38 4.65427e+014
+162 74 4.65228e+014
+148 396 4.65046e+014
+363 129 4.65001e+014
+329 212 4.63677e+014
+377 119 4.62908e+014
+22 219 4.62809e+014
+463 161 4.62266e+014
+433 317 4.62001e+014
+92 20 4.6089e+014
+336 426 4.60867e+014
+432 112 4.60692e+014
+415 21 4.60047e+014
+359 161 4.59094e+014
+157 93 4.58982e+014
+205 435 4.58464e+014
+345 351 4.58316e+014
+68 304 4.58284e+014
+218 177 4.58237e+014
+243 419 4.57651e+014
+417 450 4.57645e+014
+56 221 4.57495e+014
+166 244 4.56808e+014
+529 32 4.56767e+014
+318 201 4.56284e+014
+100 199 4.56062e+014
+219 316 4.56054e+014
+446 265 4.55884e+014
+71 410 4.55699e+014
+275 352 4.55323e+014
+172 238 4.55256e+014
+24 65 4.55171e+014
+483 83 4.55049e+014
+199 110 4.54822e+014
+31 269 4.54175e+014
+62 133 4.53891e+014
+388 282 4.53596e+014
+326 13 4.53019e+014
+127 166 4.52879e+014
+104 430 4.5276e+014
+508 81 4.52634e+014
+153 217 4.52521e+014
+146 452 4.52172e+014
+323 260 4.51696e+014
+380 339 4.51677e+014
+163 20 4.51322e+014
+364 357 4.51233e+014
+366 299 4.51215e+014
+407 81 4.50957e+014
+185 401 4.50417e+014
+157 318 4.50399e+014
+208 57 4.5023e+014
+451 263 4.50218e+014
+290 49 4.50184e+014
+433 319 4.4968e+014
+569 203 4.49648e+014
+453 83 4.49279e+014
+304 193 4.4912e+014
+242 165 4.48806e+014
+408 182 4.48e+014
+214 146 4.47659e+014
+45 97 4.47197e+014
+496 462 4.47009e+014
+89 376 4.45568e+014
+429 223 4.45423e+014
+152 1 4.45409e+014
+202 314 4.45305e+014
+234 344 4.44933e+014
+110 168 4.44818e+014
+382 337 4.4478e+014
+203 258 4.44779e+014
+473 211 4.44427e+014
+512 95 4.43008e+014
+160 98 4.42986e+014
+136 176 4.42848e+014
+47 133 4.42582e+014
+128 238 4.42281e+014
+344 340 4.42203e+014
+288 396 4.41869e+014
+177 96 4.41725e+014
+161 238 4.415e+014
+449 23 4.41079e+014
+436 389 4.41002e+014
+203 18 4.39996e+014
+391 449 4.39995e+014
+282 393 4.39892e+014
+434 339 4.39785e+014
+109 358 4.39485e+014
+254 76 4.39417e+014
+246 327 4.39266e+014
+393 165 4.38009e+014
+415 164 4.37924e+014
+487 261 4.37452e+014
+245 402 4.36369e+014
+481 182 4.36311e+014
+419 52 4.35402e+014
+469 417 4.35155e+014
+31 96 4.35007e+014
+13 206 4.34325e+014
+133 78 4.34129e+014
+273 287 4.33854e+014
+467 123 4.3346e+014
+439 64 4.33354e+014
+149 231 4.33229e+014
+476 260 4.33139e+014
+410 99 4.32476e+014
+261 329 4.32465e+014
+156 307 4.31322e+014
+342 106 4.31019e+014
+30 238 4.30943e+014
+222 239 4.30198e+014
+351 271 4.2976e+014
+331 89 4.29376e+014
+34 235 4.29312e+014
+472 42 4.29265e+014
+105 198 4.29136e+014
+564 16 4.29081e+014
+408 45 4.28408e+014
+84 310 4.28401e+014
+537 103 4.28149e+014
+412 245 4.28034e+014
+500 224 4.27069e+014
+153 446 4.26986e+014
+278 367 4.26825e+014
+262 319 4.26492e+014
+410 44 4.26071e+014
+300 246 4.26024e+014
+63 369 4.26023e+014
+88 256 4.25969e+014
+20 219 4.25697e+014
+618 181 4.252e+014
+418 300 4.24781e+014
+181 398 4.24696e+014
+411 46 4.24571e+014
+446 376 4.2402e+014
+302 102 4.24017e+014
+175 20 4.2256e+014
+274 52 4.22518e+014
+350 145 4.222e+014
+130 78 4.21345e+014
+360 315 4.21242e+014
+61 181 4.20983e+014
+149 112 4.20951e+014
+132 477 4.20909e+014
+424 163 4.20647e+014
+436 43 4.20397e+014
+293 120 4.19796e+014
+48 79 4.1896e+014
+382 162 4.18775e+014
+330 202 4.18666e+014
+267 132 4.18659e+014
+331 333 4.17306e+014
+379 107 4.16739e+014
+151 196 4.16661e+014
+404 13 4.15584e+014
+461 221 4.1521e+014
+107 58 4.149e+014
+571 333 4.14522e+014
+226 15 4.14253e+014
+523 39 4.14122e+014
+518 202 4.13924e+014
+447 351 4.13663e+014
+318 311 4.13395e+014
+60 254 4.13021e+014
+271 183 4.12434e+014
+306 355 4.1231e+014
+315 160 4.12181e+014
+46 121 4.11708e+014
+189 107 4.11431e+014
+226 129 4.11369e+014
+187 182 4.11279e+014
+583 345 4.11165e+014
+393 222 4.09876e+014
+279 86 4.09836e+014
+117 132 4.0952e+014
+386 327 4.09398e+014
+117 360 4.09124e+014
+445 262 4.08974e+014
+44 476 4.08518e+014
+384 146 4.07911e+014
+284 222 4.07494e+014
+527 359 4.07067e+014
+187 109 4.06894e+014
+257 140 4.06536e+014
+269 169 4.06529e+014
+81 39 4.06527e+014
+396 319 4.06471e+014
+59 28 4.06366e+014
+112 56 4.06319e+014
+551 385 4.06122e+014
+267 16 4.05718e+014
+268 69 4.05044e+014
+537 140 4.04257e+014
+261 34 4.04243e+014
+266 139 4.03685e+014
+316 167 4.03525e+014
+166 240 4.03305e+014
+361 222 4.03086e+014
+327 90 4.03047e+014
+16 215 4.02931e+014
+157 112 4.02852e+014
+182 201 4.02789e+014
+256 405 4.0248e+014
+131 73 4.0213e+014
+358 64 4.02087e+014
+439 24 4.02047e+014
+447 145 4.0177e+014
+437 66 4.01029e+014
+441 321 4.01027e+014
+204 16 4.00877e+014
+88 354 4.00742e+014
+394 158 4.00684e+014
+247 346 4.00491e+014
+439 455 4.00413e+014
+42 10 4.00231e+014
+9 76 3.99997e+014
+133 65 3.99743e+014
+530 366 3.99415e+014
+272 133 3.99352e+014
+263 311 3.99341e+014
+547 162 3.99135e+014
+215 144 3.98906e+014
+447 244 3.98776e+014
+53 221 3.98444e+014
+295 296 3.98387e+014
+436 87 3.98264e+014
+451 82 3.98182e+014
+211 21 3.97952e+014
+348 299 3.9784e+014
+562 17 3.97728e+014
+380 121 3.97514e+014
+549 223 3.9723e+014
+395 106 3.97207e+014
+184 200 3.97024e+014
+278 189 3.96629e+014
+107 96 3.96102e+014
+83 101 3.9593e+014
+18 236 3.95692e+014
+559 224 3.95657e+014
+321 10 3.95331e+014
+283 200 3.95091e+014
+579 52 3.94279e+014
+30 135 3.94225e+014
+365 86 3.93674e+014
+91 79 3.93178e+014
+561 71 3.92866e+014
+433 25 3.92647e+014
+415 83 3.92428e+014
+158 237 3.92124e+014
+124 252 3.91522e+014
+496 120 3.90952e+014
+357 240 3.90919e+014
+257 88 3.90756e+014
+158 181 3.90558e+014
+209 36 3.89694e+014
+439 149 3.89354e+014
+579 42 3.89165e+014
+234 261 3.88788e+014
+166 113 3.88772e+014
+153 197 3.88238e+014
+272 414 3.87872e+014
+69 417 3.87737e+014
+128 40 3.87712e+014
+119 54 3.87379e+014
+50 452 3.87373e+014
+464 24 3.87362e+014
+261 440 3.87245e+014
+508 84 3.87132e+014
+90 255 3.87125e+014
+129 429 3.87011e+014
+193 217 3.86979e+014
+96 148 3.86929e+014
+390 296 3.86653e+014
+310 259 3.86422e+014
+522 141 3.86164e+014
+513 93 3.85932e+014
+329 108 3.85927e+014
+471 213 3.85409e+014
+117 184 3.85378e+014
+210 395 3.85239e+014
+39 406 3.85214e+014
+469 140 3.84695e+014
+328 288 3.83354e+014
+404 143 3.83208e+014
+122 446 3.82178e+014
+326 181 3.8177e+014
+181 291 3.81682e+014
+472 119 3.80335e+014
+257 250 3.80292e+014
+440 468 3.80048e+014
+172 37 3.79963e+014
+297 182 3.7985e+014
+393 317 3.79667e+014
+485 236 3.79342e+014
+311 298 3.79218e+014
+404 260 3.78399e+014
+400 319 3.781e+014
+79 273 3.77914e+014
+240 73 3.77553e+014
+390 54 3.77497e+014
+549 183 3.77474e+014
+20 67 3.77341e+014
+259 370 3.77202e+014
+524 199 3.76677e+014
+220 107 3.7528e+014
+353 424 3.75258e+014
+100 95 3.7522e+014
+215 426 3.74476e+014
+251 152 3.74368e+014
+203 293 3.74131e+014
+423 6 3.74124e+014
+177 180 3.74068e+014
+312 77 3.73969e+014
+418 282 3.73532e+014
+175 2 3.73292e+014
+544 20 3.73186e+014
+535 141 3.72793e+014
+422 161 3.72517e+014
+462 396 3.72224e+014
+33 65 3.72171e+014
+62 204 3.71991e+014
+219 126 3.71634e+014
+76 270 3.71351e+014
+565 61 3.71249e+014
+135 134 3.71046e+014
+561 273 3.70513e+014
+281 418 3.70052e+014
+38 169 3.70048e+014
+260 251 3.6985e+014
+49 164 3.69498e+014
+384 354 3.69278e+014
+579 79 3.69243e+014
+126 161 3.68664e+014
+500 318 3.68582e+014
+286 53 3.68156e+014
+485 327 3.67951e+014
+435 156 3.67759e+014
+289 349 3.67666e+014
+58 103 3.67281e+014
+88 261 3.67023e+014
+68 96 3.6701e+014
+333 412 3.6696e+014
+88 183 3.66913e+014
+203 396 3.66533e+014
+198 75 3.6604e+014
+44 220 3.65609e+014
+449 167 3.65331e+014
+114 428 3.65312e+014
+498 67 3.64908e+014
+168 309 3.64574e+014
+86 370 3.64083e+014
+441 63 3.6374e+014
+213 62 3.63619e+014
+153 225 3.63393e+014
+478 401 3.63363e+014
+191 57 3.62986e+014
+433 241 3.62803e+014
+222 214 3.6269e+014
+247 317 3.62176e+014
+142 307 3.61915e+014
+184 184 3.61645e+014
+536 80 3.61541e+014
+140 98 3.61233e+014
+525 174 3.611e+014
+157 200 3.60869e+014
+465 281 3.60659e+014
+78 79 3.60264e+014
+84 3 3.59896e+014
+469 123 3.5935e+014
+421 89 3.59268e+014
+126 97 3.59209e+014
+516 120 3.58921e+014
+172 112 3.58751e+014
+533 161 3.58293e+014
+167 150 3.57543e+014
+149 399 3.57188e+014
+160 430 3.56674e+014
+310 90 3.56457e+014
+266 403 3.56343e+014
+280 420 3.56257e+014
+48 458 3.56254e+014
+262 443 3.55882e+014
+121 239 3.55763e+014
+277 140 3.55404e+014
+465 355 3.54731e+014
+487 205 3.54679e+014
+221 84 3.54428e+014
+384 258 3.54232e+014
+303 52 3.54099e+014
+189 202 3.53315e+014
+124 161 3.52972e+014
+545 438 3.52905e+014
+39 355 3.52801e+014
+511 205 3.52375e+014
+161 276 3.5203e+014
+386 63 3.51745e+014
+197 55 3.51618e+014
+495 476 3.51286e+014
+84 371 3.51025e+014
+203 347 3.50597e+014
+44 337 3.49891e+014
+166 117 3.4966e+014
+189 180 3.49153e+014
+32 112 3.48985e+014
+109 27 3.48824e+014
+265 12 3.48277e+014
+165 378 3.4818e+014
+385 450 3.48056e+014
+193 111 3.47697e+014
+409 23 3.47586e+014
+310 334 3.47283e+014
+163 328 3.47182e+014
+473 355 3.47004e+014
+121 187 3.46884e+014
+180 106 3.46825e+014
+517 142 3.46785e+014
+502 145 3.46714e+014
+433 278 3.46015e+014
+317 125 3.45448e+014
+183 33 3.45381e+014
+532 19 3.45024e+014
+503 179 3.44944e+014
+296 165 3.44593e+014
+540 405 3.44295e+014
+153 57 3.44185e+014
+180 329 3.44151e+014
+381 164 3.44147e+014
+527 395 3.4389e+014
+99 195 3.43691e+014
+548 44 3.43028e+014
+260 231 3.42666e+014
+555 264 3.42039e+014
+281 35 3.41743e+014
+254 404 3.41655e+014
+449 83 3.41549e+014
+575 98 3.41514e+014
+277 333 3.41391e+014
+569 183 3.41127e+014
+430 116 3.40977e+014
+218 182 3.40453e+014
+124 82 3.40167e+014
+136 92 3.40079e+014
+518 185 3.4003e+014
+107 107 3.39934e+014
+181 33 3.39926e+014
+198 192 3.39649e+014
+298 274 3.38975e+014
+197 148 3.38966e+014
+515 184 3.38204e+014
+210 187 3.38185e+014
+512 109 3.38046e+014
+420 283 3.37943e+014
+134 132 3.37936e+014
+39 241 3.37851e+014
+407 337 3.37744e+014
+164 18 3.37527e+014
+113 262 3.37289e+014
+339 427 3.37222e+014
+35 99 3.37213e+014
+527 80 3.36913e+014
+144 432 3.36582e+014
+180 56 3.36349e+014
+239 195 3.36222e+014
+187 326 3.36064e+014
+245 385 3.36053e+014
+115 306 3.35958e+014
+375 341 3.3589e+014
+102 294 3.35716e+014
+159 90 3.3561e+014
+325 92 3.35569e+014
+503 161 3.35491e+014
+581 16 3.35437e+014
+200 293 3.35233e+014
+289 89 3.35171e+014
+413 100 3.3503e+014
+399 67 3.34278e+014
+188 104 3.34242e+014
+512 83 3.34059e+014
+90 289 3.33559e+014
+251 163 3.33432e+014
+535 18 3.33292e+014
+289 87 3.33073e+014
+146 97 3.32842e+014
+558 245 3.32752e+014
+106 77 3.32702e+014
+127 26 3.32665e+014
+475 339 3.32491e+014
+211 136 3.32203e+014
+43 474 3.32165e+014
+175 109 3.31878e+014
+179 94 3.31761e+014
+352 161 3.31754e+014
+383 260 3.3165e+014
+158 76 3.31365e+014
+317 224 3.30682e+014
+308 355 3.30579e+014
+570 324 3.30452e+014
+51 290 3.30317e+014
+414 262 3.30009e+014
+322 29 3.29838e+014
+190 322 3.298e+014
+343 37 3.29737e+014
+416 86 3.29647e+014
+164 381 3.29267e+014
+497 224 3.29094e+014
+51 292 3.28843e+014
+279 370 3.28585e+014
+378 63 3.28431e+014
+384 243 3.28294e+014
+94 219 3.2825e+014
+524 24 3.28226e+014
+411 183 3.28131e+014
+184 94 3.27881e+014
+86 365 3.27439e+014
+570 142 3.27369e+014
+224 73 3.27369e+014
+466 127 3.27355e+014
+191 189 3.26784e+014
+572 121 3.2663e+014
+500 420 3.26136e+014
+492 59 3.25899e+014
+27 220 3.25804e+014
+487 43 3.25564e+014
+272 92 3.25481e+014
+358 52 3.2548e+014
+483 177 3.25382e+014
+127 218 3.24999e+014
+486 264 3.24955e+014
+75 132 3.24848e+014
+116 344 3.24695e+014
+534 92 3.24627e+014
+559 79 3.24515e+014
+464 139 3.24486e+014
+526 171 3.24437e+014
+484 361 3.243e+014
+219 35 3.24152e+014
+161 133 3.23862e+014
+126 308 3.23772e+014
+545 160 3.23717e+014
+148 131 3.22839e+014
+77 77 3.22802e+014
+456 418 3.22546e+014
+243 209 3.22472e+014
+275 197 3.2234e+014
+517 183 3.22157e+014
+107 109 3.21533e+014
+142 239 3.20989e+014
+418 44 3.20985e+014
+408 185 3.20877e+014
+143 141 3.20876e+014
+301 86 3.20874e+014
+18 319 3.20594e+014
+482 164 3.20506e+014
+489 23 3.20346e+014
+109 428 3.20333e+014
+95 374 3.20006e+014
+113 176 3.19956e+014
+458 2 3.196e+014
+493 102 3.19341e+014
+201 21 3.19167e+014
+248 328 3.18621e+014
+146 15 3.18577e+014
+93 95 3.18381e+014
+573 333 3.18249e+014
+39 83 3.17815e+014
+104 76 3.17805e+014
+363 407 3.17722e+014
+275 289 3.17605e+014
+35 300 3.1725e+014
+375 282 3.17216e+014
+319 336 3.17103e+014
+549 282 3.17001e+014
+510 142 3.16994e+014
+336 317 3.16808e+014
+417 79 3.1679e+014
+222 153 3.16643e+014
+238 74 3.16621e+014
+151 236 3.16433e+014
+540 263 3.16377e+014
+452 161 3.16232e+014
+472 421 3.16165e+014
+93 112 3.1615e+014
+131 217 3.16082e+014
+297 99 3.15844e+014
+449 64 3.15739e+014
+273 146 3.15724e+014
+161 31 3.157e+014
+59 79 3.15397e+014
+497 283 3.15327e+014
+573 423 3.15165e+014
+70 478 3.15042e+014
+101 362 3.14779e+014
+202 7 3.14778e+014
+395 23 3.14495e+014
+13 202 3.13716e+014
+421 315 3.13608e+014
+259 161 3.13598e+014
+211 95 3.1351e+014
+554 181 3.13105e+014
+576 311 3.12601e+014
+416 377 3.12422e+014
+111 324 3.12336e+014
+281 386 3.1231e+014
+450 446 3.11839e+014
+419 362 3.11775e+014
+392 293 3.11552e+014
+356 107 3.11325e+014
+354 25 3.11322e+014
+569 420 3.11255e+014
+31 271 3.10878e+014
+247 258 3.10495e+014
+31 28 3.10389e+014
+263 167 3.10378e+014
+139 2 3.10139e+014
+85 178 3.10111e+014
+592 107 3.098e+014
+572 384 3.09791e+014
+219 279 3.09737e+014
+360 242 3.0933e+014
+11 83 3.0909e+014
+40 353 3.08705e+014
+266 287 3.08621e+014
+266 118 3.08552e+014
+479 241 3.08204e+014
+52 359 3.08117e+014
+265 72 3.07768e+014
+90 321 3.0759e+014
+589 350 3.07321e+014
+531 398 3.07041e+014
+381 180 3.06615e+014
+340 220 3.06289e+014
+500 461 3.06104e+014
+422 63 3.0606e+014
+329 320 3.06056e+014
+129 217 3.05905e+014
+169 359 3.05755e+014
+377 461 3.05733e+014
+285 263 3.05266e+014
+215 149 3.05257e+014
+191 314 3.04993e+014
+191 17 3.04949e+014
+484 376 3.04906e+014
+494 164 3.04748e+014
+234 295 3.04622e+014
+209 136 3.0453e+014
+35 172 3.0444e+014
+37 182 3.04419e+014
+89 151 3.04235e+014
+453 101 3.03719e+014
+69 47 3.03296e+014
+262 273 3.03174e+014
+331 219 3.0298e+014
+471 83 3.02978e+014
+187 292 3.02544e+014
+52 12 3.02537e+014
+119 425 3.02361e+014
+486 376 3.02219e+014
+321 168 3.017e+014
+522 124 3.01663e+014
+260 390 3.01559e+014
+143 179 3.01538e+014
+159 94 3.0139e+014
+113 174 3.01372e+014
+523 186 3.01224e+014
+19 65 3.00943e+014
+186 144 3.00764e+014
+232 274 3.00492e+014
+124 184 3.00039e+014
+184 109 2.99897e+014
+475 161 2.99889e+014
+45 137 2.99847e+014
+554 379 2.99825e+014
+84 146 2.99752e+014
+484 153 2.99537e+014
+102 42 2.99281e+014
+199 328 2.99242e+014
+32 103 2.99116e+014
+344 166 2.98558e+014
+578 50 2.98276e+014
+95 58 2.98229e+014
+51 63 2.98186e+014
+209 203 2.97978e+014
+335 445 2.9792e+014
+113 205 2.97656e+014
+15 30 2.97329e+014
+518 164 2.9699e+014
+210 13 2.96976e+014
+155 92 2.96822e+014
+84 289 2.96535e+014
+68 24 2.96117e+014
+546 262 2.9596e+014
+194 135 2.95919e+014
+575 141 2.95631e+014
+279 126 2.95506e+014
+40 239 2.95164e+014
+112 165 2.94737e+014
+238 190 2.94547e+014
+260 382 2.93758e+014
+539 220 2.93725e+014
+337 60 2.93397e+014
+149 149 2.93159e+014
+164 202 2.93061e+014
+389 327 2.9279e+014
+471 4 2.92493e+014
+148 163 2.92357e+014
+371 87 2.92127e+014
+482 360 2.92043e+014
+594 19 2.91797e+014
+308 147 2.91683e+014
+135 74 2.91631e+014
+221 339 2.91489e+014
+128 128 2.91424e+014
+202 219 2.91179e+014
+3 166 2.91143e+014
+11 114 2.9068e+014
+354 18 2.90585e+014
+427 63 2.90585e+014
+177 200 2.90438e+014
+151 400 2.90353e+014
+64 448 2.90273e+014
+377 183 2.9019e+014
+543 122 2.90124e+014
+94 260 2.89897e+014
+341 263 2.89812e+014
+388 203 2.89675e+014
+183 315 2.88786e+014
+106 98 2.88727e+014
+303 50 2.8864e+014
+283 79 2.88437e+014
+25 200 2.88121e+014
+463 123 2.88078e+014
+542 457 2.87877e+014
+468 423 2.87766e+014
+12 214 2.87683e+014
+161 128 2.87534e+014
+118 61 2.87288e+014
+350 338 2.87147e+014
+372 73 2.87064e+014
+539 126 2.86718e+014
+499 264 2.86705e+014
+285 403 2.86703e+014
+364 301 2.8666e+014
+383 325 2.86657e+014
+300 253 2.86346e+014
+395 48 2.86073e+014
+477 221 2.86052e+014
+334 143 2.85937e+014
+454 116 2.85901e+014
+290 248 2.85784e+014
+249 262 2.85462e+014
+466 102 2.85199e+014
+28 12 2.85081e+014
+34 113 2.85028e+014
+38 308 2.84779e+014
+503 167 2.84367e+014
+177 75 2.83854e+014
+168 422 2.83422e+014
+95 422 2.8333e+014
+521 344 2.83315e+014
+277 330 2.83248e+014
+143 376 2.82613e+014
+350 363 2.82472e+014
+336 183 2.82363e+014
+292 182 2.82362e+014
+480 171 2.82098e+014
+227 258 2.81477e+014
+127 189 2.81459e+014
+108 260 2.81314e+014
+446 455 2.8099e+014
+183 157 2.80891e+014
+63 202 2.80836e+014
+44 152 2.80695e+014
+229 131 2.8056e+014
+333 105 2.79973e+014
+222 430 2.79942e+014
+562 435 2.79892e+014
+23 331 2.7974e+014
+258 131 2.79659e+014
+591 103 2.79637e+014
+330 200 2.7917e+014
+188 200 2.78939e+014
+126 339 2.78841e+014
+344 164 2.78746e+014
+440 241 2.78523e+014
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_5_5.txt b/test_data/harriscorners/hc_msc_0.00_0.10_5_5.txt
new file mode 100644
index 0000000..72a928c
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_5_5.txt
@@ -0,0 +1,1443 @@
+1442
+244 94 3.12284e+016
+273 365 2.67744e+016
+237 19 2.15604e+016
+423 178 1.91173e+016
+362 401 1.84978e+016
+76 257 1.69449e+016
+423 181 1.66611e+016
+122 43 1.6497e+016
+261 297 1.60001e+016
+281 113 1.5962e+016
+543 365 1.59453e+016
+200 17 1.56676e+016
+448 297 1.54245e+016
+82 28 1.53752e+016
+420 181 1.51417e+016
+427 320 1.50018e+016
+65 343 1.48337e+016
+465 393 1.44678e+016
+447 397 1.42031e+016
+320 224 1.37774e+016
+343 9 1.37771e+016
+553 40 1.36802e+016
+131 36 1.36751e+016
+300 52 1.35633e+016
+214 72 1.34989e+016
+122 45 1.34227e+016
+239 91 1.33171e+016
+360 295 1.32124e+016
+35 138 1.31018e+016
+507 122 1.30704e+016
+131 26 1.30566e+016
+27 9 1.29558e+016
+30 8 1.29145e+016
+425 321 1.29072e+016
+59 218 1.26822e+016
+128 2 1.26592e+016
+37 62 1.23452e+016
+134 214 1.22783e+016
+252 13 1.22626e+016
+124 198 1.22449e+016
+387 178 1.21713e+016
+294 15 1.1689e+016
+195 57 1.15459e+016
+33 138 1.15427e+016
+510 124 1.15253e+016
+509 122 1.14229e+016
+81 4 1.11847e+016
+303 182 1.11431e+016
+257 385 1.11202e+016
+456 280 1.10684e+016
+125 364 1.10597e+016
+36 145 1.09697e+016
+387 10 1.08676e+016
+448 262 1.08133e+016
+33 99 1.07904e+016
+78 2 1.07333e+016
+81 2 1.0674e+016
+222 38 1.06718e+016
+84 78 1.05559e+016
+263 441 1.05487e+016
+484 338 1.05019e+016
+116 44 1.04299e+016
+435 67 1.02872e+016
+127 165 1.01312e+016
+242 71 1.01137e+016
+544 168 1.00891e+016
+243 202 1.00882e+016
+46 27 9.83315e+015
+124 254 9.82909e+015
+435 69 9.8004e+015
+101 222 9.79359e+015
+390 58 9.66299e+015
+225 420 9.50941e+015
+138 203 9.49257e+015
+513 341 9.48392e+015
+452 339 9.42374e+015
+426 119 9.39205e+015
+329 128 9.33812e+015
+343 338 9.24954e+015
+152 223 9.21555e+015
+418 440 9.19639e+015
+412 256 9.09439e+015
+529 24 9.07899e+015
+511 167 8.94628e+015
+308 371 8.82072e+015
+390 60 8.80356e+015
+55 29 8.78952e+015
+253 139 8.75676e+015
+485 59 8.72079e+015
+556 40 8.60403e+015
+138 110 8.51002e+015
+144 310 8.43191e+015
+183 400 8.34549e+015
+320 313 8.30478e+015
+142 324 8.28346e+015
+475 262 8.27e+015
+480 297 8.25996e+015
+404 121 8.21843e+015
+510 173 8.1994e+015
+519 61 8.17303e+015
+358 295 8.1578e+015
+64 236 8.14732e+015
+214 58 8.13722e+015
+41 63 8.12907e+015
+363 251 8.07731e+015
+48 99 8.01496e+015
+92 198 7.9929e+015
+470 239 7.97608e+015
+110 240 7.96261e+015
+361 131 7.96147e+015
+360 335 7.89115e+015
+301 165 7.85331e+015
+177 106 7.83729e+015
+484 179 7.79783e+015
+2 47 7.78356e+015
+302 215 7.74286e+015
+545 41 7.65114e+015
+216 279 7.61522e+015
+543 15 7.61487e+015
+210 435 7.61377e+015
+184 36 7.59651e+015
+360 337 7.52876e+015
+260 222 7.50801e+015
+461 279 7.47567e+015
+123 185 7.46356e+015
+57 5 7.42726e+015
+359 260 7.42492e+015
+181 111 7.41963e+015
+341 337 7.36241e+015
+371 162 7.30738e+015
+391 144 7.2543e+015
+41 217 7.24849e+015
+104 62 7.2381e+015
+245 143 7.23307e+015
+207 450 7.22425e+015
+418 8 7.20432e+015
+431 147 7.20143e+015
+160 143 7.18947e+015
+386 220 7.17099e+015
+88 148 7.16867e+015
+221 16 7.12851e+015
+433 112 7.10053e+015
+10 101 7.09044e+015
+112 392 7.08718e+015
+225 182 7.08097e+015
+542 210 7.06042e+015
+348 179 6.99798e+015
+163 277 6.99664e+015
+545 59 6.99224e+015
+508 18 6.9895e+015
+311 150 6.98075e+015
+234 346 6.98009e+015
+283 72 6.97713e+015
+509 455 6.97439e+015
+102 59 6.96014e+015
+404 119 6.95994e+015
+498 159 6.95511e+015
+100 78 6.94852e+015
+239 202 6.94098e+015
+410 65 6.92944e+015
+151 307 6.91044e+015
+71 147 6.88948e+015
+86 255 6.84398e+015
+283 403 6.83942e+015
+325 341 6.78802e+015
+252 423 6.78437e+015
+527 99 6.76557e+015
+246 90 6.75929e+015
+533 184 6.75511e+015
+70 25 6.75164e+015
+137 207 6.74857e+015
+230 36 6.73446e+015
+4 65 6.71585e+015
+515 76 6.71112e+015
+382 6 6.70983e+015
+244 165 6.69562e+015
+528 102 6.68506e+015
+480 179 6.68462e+015
+522 62 6.67948e+015
+356 220 6.67538e+015
+524 20 6.67365e+015
+579 16 6.67048e+015
+234 162 6.64545e+015
+96 446 6.62884e+015
+421 335 6.60663e+015
+351 321 6.57917e+015
+92 214 6.55702e+015
+410 353 6.55117e+015
+221 180 6.5489e+015
+65 319 6.53552e+015
+163 214 6.51513e+015
+169 57 6.49817e+015
+62 60 6.45268e+015
+60 183 6.43825e+015
+425 377 6.43498e+015
+407 64 6.42618e+015
+387 294 6.42215e+015
+207 224 6.40102e+015
+78 80 6.34539e+015
+55 290 6.33692e+015
+286 297 6.32815e+015
+325 164 6.29059e+015
+36 176 6.27629e+015
+365 143 6.27363e+015
+138 173 6.26644e+015
+211 185 6.26083e+015
+209 55 6.23447e+015
+36 173 6.22659e+015
+261 165 6.21033e+015
+163 216 6.21012e+015
+354 321 6.20021e+015
+170 18 6.14503e+015
+174 40 6.1051e+015
+82 135 6.07199e+015
+368 144 6.07063e+015
+358 334 6.06928e+015
+313 84 6.04247e+015
+271 279 6.0079e+015
+102 4 5.97459e+015
+383 9 5.95374e+015
+386 243 5.94366e+015
+51 98 5.94087e+015
+390 295 5.93483e+015
+78 28 5.92853e+015
+511 128 5.90705e+015
+229 292 5.89108e+015
+363 7 5.85248e+015
+106 39 5.84732e+015
+66 214 5.84243e+015
+453 204 5.82492e+015
+210 451 5.82333e+015
+358 128 5.81889e+015
+276 352 5.81691e+015
+211 438 5.81204e+015
+293 26 5.76727e+015
+479 262 5.76135e+015
+40 296 5.75248e+015
+175 94 5.74873e+015
+31 270 5.72702e+015
+528 104 5.71825e+015
+37 218 5.69231e+015
+434 398 5.67552e+015
+174 312 5.66837e+015
+177 260 5.66762e+015
+530 185 5.66369e+015
+449 218 5.66297e+015
+136 209 5.65985e+015
+476 21 5.63224e+015
+271 166 5.63045e+015
+49 151 5.62208e+015
+327 141 5.62081e+015
+497 81 5.61988e+015
+395 261 5.59833e+015
+55 66 5.58857e+015
+272 281 5.58829e+015
+338 12 5.57577e+015
+399 262 5.55614e+015
+478 19 5.55191e+015
+522 264 5.54508e+015
+540 13 5.52857e+015
+412 162 5.52691e+015
+75 6 5.51982e+015
+346 240 5.50859e+015
+212 182 5.49953e+015
+300 265 5.49744e+015
+95 477 5.48893e+015
+326 425 5.48215e+015
+466 196 5.47849e+015
+266 296 5.46651e+015
+453 206 5.46469e+015
+515 347 5.46224e+015
+37 296 5.44544e+015
+468 239 5.41851e+015
+511 220 5.41766e+015
+535 241 5.40878e+015
+325 88 5.3875e+015
+102 360 5.37628e+015
+355 268 5.37586e+015
+220 290 5.37274e+015
+332 295 5.37234e+015
+529 183 5.37172e+015
+92 292 5.35542e+015
+246 206 5.34606e+015
+166 97 5.34457e+015
+512 99 5.33689e+015
+104 4 5.33066e+015
+47 11 5.32542e+015
+276 180 5.30736e+015
+309 7 5.30553e+015
+209 20 5.30102e+015
+506 16 5.29925e+015
+100 198 5.29855e+015
+154 236 5.29819e+015
+390 297 5.29209e+015
+202 314 5.29148e+015
+471 421 5.29035e+015
+108 45 5.28056e+015
+167 326 5.27949e+015
+378 7 5.27461e+015
+494 140 5.26842e+015
+324 315 5.26576e+015
+537 393 5.24359e+015
+123 272 5.23541e+015
+527 361 5.23405e+015
+47 147 5.23331e+015
+49 12 5.1922e+015
+59 75 5.19079e+015
+163 74 5.1905e+015
+541 123 5.17912e+015
+228 185 5.16576e+015
+250 365 5.16017e+015
+32 66 5.14594e+015
+271 290 5.14513e+015
+317 312 5.12746e+015
+264 446 5.12719e+015
+226 221 5.11374e+015
+113 345 5.07233e+015
+523 123 5.05569e+015
+141 394 5.04063e+015
+422 48 5.01349e+015
+207 435 5.00539e+015
+358 10 4.97917e+015
+508 5 4.97048e+015
+167 286 4.96279e+015
+363 297 4.94868e+015
+345 350 4.93264e+015
+265 31 4.9139e+015
+344 263 4.90335e+015
+256 149 4.90132e+015
+366 7 4.89945e+015
+278 144 4.89287e+015
+544 4 4.86873e+015
+238 349 4.86092e+015
+168 197 4.85856e+015
+345 108 4.83836e+015
+18 343 4.82591e+015
+110 135 4.82124e+015
+141 183 4.81119e+015
+306 440 4.8109e+015
+408 183 4.80359e+015
+333 90 4.7874e+015
+58 29 4.786e+015
+403 265 4.78066e+015
+165 243 4.75923e+015
+178 94 4.75858e+015
+544 6 4.75714e+015
+423 398 4.75347e+015
+313 76 4.7502e+015
+332 127 4.73291e+015
+482 366 4.73216e+015
+110 95 4.72152e+015
+220 150 4.68263e+015
+6 10 4.67342e+015
+476 5 4.66944e+015
+157 73 4.66489e+015
+488 263 4.65369e+015
+416 23 4.64823e+015
+53 43 4.6413e+015
+406 198 4.63975e+015
+62 203 4.6383e+015
+542 132 4.6365e+015
+164 358 4.63509e+015
+21 61 4.62965e+015
+163 242 4.62163e+015
+287 165 4.61015e+015
+180 394 4.60211e+015
+13 218 4.57959e+015
+444 452 4.57771e+015
+325 142 4.57327e+015
+61 134 4.56429e+015
+273 131 4.55861e+015
+84 2 4.55773e+015
+390 48 4.55132e+015
+524 346 4.53135e+015
+259 237 4.52962e+015
+135 129 4.52556e+015
+484 23 4.52187e+015
+478 15 4.51677e+015
+44 97 4.5096e+015
+94 217 4.50103e+015
+371 90 4.49466e+015
+342 263 4.48978e+015
+280 50 4.47556e+015
+59 40 4.47306e+015
+365 105 4.47303e+015
+410 163 4.47301e+015
+567 43 4.47247e+015
+413 299 4.46969e+015
+165 327 4.46938e+015
+330 9 4.46261e+015
+350 145 4.45595e+015
+456 84 4.45341e+015
+442 23 4.45045e+015
+381 26 4.44114e+015
+424 44 4.4403e+015
+403 187 4.4374e+015
+221 177 4.4346e+015
+192 330 4.43128e+015
+233 199 4.41398e+015
+57 364 4.41267e+015
+174 239 4.41214e+015
+520 184 4.40034e+015
+526 346 4.38157e+015
+138 98 4.37325e+015
+46 82 4.37099e+015
+542 129 4.36947e+015
+362 395 4.36905e+015
+482 328 4.365e+015
+233 14 4.36155e+015
+68 337 4.35603e+015
+382 412 4.34545e+015
+44 62 4.34366e+015
+270 71 4.30133e+015
+272 71 4.2952e+015
+117 76 4.28889e+015
+109 137 4.28803e+015
+338 473 4.2814e+015
+490 139 4.2715e+015
+28 30 4.26158e+015
+141 22 4.2611e+015
+513 262 4.25399e+015
+159 138 4.25397e+015
+126 76 4.25304e+015
+436 303 4.24475e+015
+64 371 4.23811e+015
+8 10 4.23725e+015
+438 339 4.23157e+015
+202 311 4.22878e+015
+195 125 4.21455e+015
+364 181 4.2125e+015
+305 193 4.21245e+015
+273 296 4.19526e+015
+408 45 4.19315e+015
+334 436 4.19005e+015
+364 254 4.1879e+015
+31 135 4.16883e+015
+245 293 4.16275e+015
+249 423 4.15006e+015
+248 316 4.14921e+015
+85 214 4.14445e+015
+328 89 4.13638e+015
+452 376 4.1312e+015
+32 218 4.12658e+015
+565 160 4.1221e+015
+474 5 4.11861e+015
+448 166 4.11015e+015
+297 331 4.10369e+015
+345 110 4.1028e+015
+298 69 4.10191e+015
+190 205 4.09628e+015
+529 362 4.09409e+015
+268 53 4.0925e+015
+346 298 4.08671e+015
+42 339 4.08376e+015
+328 297 4.0832e+015
+338 391 4.08138e+015
+30 219 4.07795e+015
+41 10 4.06881e+015
+272 53 4.06073e+015
+29 237 4.05677e+015
+393 216 4.04677e+015
+423 332 4.04458e+015
+417 84 4.04177e+015
+317 335 4.04015e+015
+393 66 4.0396e+015
+71 96 4.03686e+015
+325 294 4.03516e+015
+478 12 4.01652e+015
+36 201 4.00985e+015
+192 219 3.99364e+015
+190 216 3.98225e+015
+260 71 3.97637e+015
+135 131 3.97179e+015
+277 222 3.9656e+015
+502 143 3.96454e+015
+332 131 3.96427e+015
+392 48 3.96317e+015
+389 140 3.9606e+015
+525 39 3.96056e+015
+341 122 3.96052e+015
+420 7 3.95967e+015
+174 19 3.95447e+015
+328 253 3.94975e+015
+154 234 3.94624e+015
+357 282 3.94368e+015
+113 212 3.94142e+015
+306 363 3.94026e+015
+576 179 3.93781e+015
+346 296 3.93516e+015
+259 35 3.92968e+015
+84 477 3.92511e+015
+127 187 3.92325e+015
+253 10 3.91867e+015
+374 393 3.91014e+015
+156 94 3.90733e+015
+223 218 3.89064e+015
+42 24 3.8853e+015
+302 205 3.8837e+015
+336 391 3.8786e+015
+405 375 3.87612e+015
+418 164 3.87401e+015
+525 423 3.86885e+015
+205 160 3.86817e+015
+539 405 3.86235e+015
+191 360 3.86158e+015
+46 220 3.85898e+015
+562 146 3.85467e+015
+120 51 3.84922e+015
+359 167 3.84727e+015
+65 322 3.84394e+015
+79 197 3.84065e+015
+519 263 3.83737e+015
+193 16 3.83564e+015
+160 183 3.83561e+015
+538 97 3.81172e+015
+393 218 3.81155e+015
+489 43 3.8101e+015
+449 445 3.79695e+015
+141 2 3.79638e+015
+471 212 3.78854e+015
+397 265 3.78655e+015
+132 132 3.78377e+015
+114 3 3.77946e+015
+96 79 3.77287e+015
+195 127 3.77101e+015
+46 355 3.76477e+015
+377 119 3.75862e+015
+480 82 3.75433e+015
+198 131 3.74644e+015
+191 146 3.74472e+015
+329 12 3.74267e+015
+571 450 3.73902e+015
+301 178 3.73882e+015
+251 10 3.73141e+015
+525 172 3.72826e+015
+360 217 3.72313e+015
+275 329 3.71808e+015
+550 378 3.71594e+015
+337 9 3.70648e+015
+364 258 3.70107e+015
+378 67 3.70069e+015
+386 326 3.69908e+015
+573 141 3.695e+015
+307 449 3.69414e+015
+561 224 3.68678e+015
+299 178 3.68569e+015
+459 266 3.68136e+015
+146 160 3.67597e+015
+126 96 3.67451e+015
+420 44 3.67362e+015
+281 222 3.6727e+015
+511 83 3.67185e+015
+262 201 3.67066e+015
+249 403 3.66911e+015
+374 240 3.66486e+015
+46 218 3.65216e+015
+154 114 3.65039e+015
+287 210 3.64645e+015
+411 44 3.64617e+015
+446 7 3.64108e+015
+185 20 3.63894e+015
+330 89 3.63384e+015
+53 221 3.6321e+015
+527 222 3.62783e+015
+283 52 3.62644e+015
+279 128 3.62603e+015
+125 261 3.62056e+015
+436 320 3.61829e+015
+539 123 3.61395e+015
+163 168 3.61052e+015
+407 353 3.60689e+015
+249 219 3.60647e+015
+342 107 3.60281e+015
+325 91 3.59401e+015
+274 53 3.59317e+015
+502 160 3.59135e+015
+297 420 3.58787e+015
+517 58 3.5855e+015
+70 476 3.58443e+015
+166 239 3.58164e+015
+58 290 3.57707e+015
+106 43 3.57559e+015
+160 111 3.57504e+015
+105 199 3.57171e+015
+360 220 3.56646e+015
+172 94 3.56561e+015
+475 246 3.56538e+015
+547 161 3.56434e+015
+449 168 3.56409e+015
+269 67 3.55874e+015
+191 358 3.55359e+015
+388 15 3.54757e+015
+340 165 3.53918e+015
+403 185 3.53906e+015
+530 144 3.53245e+015
+175 113 3.53169e+015
+476 341 3.52625e+015
+161 168 3.52587e+015
+281 128 3.52568e+015
+471 83 3.51861e+015
+64 218 3.50578e+015
+248 313 3.50565e+015
+47 132 3.50539e+015
+214 124 3.50142e+015
+453 102 3.49293e+015
+90 376 3.48563e+015
+509 1 3.48143e+015
+530 142 3.4794e+015
+549 59 3.47653e+015
+129 168 3.4729e+015
+490 59 3.46861e+015
+327 182 3.46578e+015
+152 225 3.46492e+015
+470 122 3.46265e+015
+44 9 3.45712e+015
+102 235 3.45277e+015
+268 289 3.43137e+015
+403 261 3.43098e+015
+389 97 3.42959e+015
+541 100 3.42897e+015
+78 41 3.42637e+015
+543 457 3.42583e+015
+387 126 3.42331e+015
+246 399 3.42023e+015
+420 164 3.41001e+015
+328 65 3.40896e+015
+578 43 3.40589e+015
+561 227 3.40178e+015
+188 264 3.39854e+015
+516 18 3.39805e+015
+163 208 3.39688e+015
+120 447 3.39648e+015
+39 355 3.39511e+015
+220 100 3.39477e+015
+182 380 3.39106e+015
+512 296 3.38459e+015
+163 96 3.38025e+015
+361 369 3.37581e+015
+216 125 3.37299e+015
+228 128 3.37129e+015
+418 283 3.37097e+015
+161 20 3.36819e+015
+38 168 3.36526e+015
+399 265 3.36483e+015
+539 458 3.36213e+015
+345 276 3.36037e+015
+393 164 3.35387e+015
+345 274 3.35127e+015
+175 115 3.34134e+015
+133 93 3.33954e+015
+559 80 3.33063e+015
+151 114 3.329e+015
+56 222 3.32763e+015
+502 362 3.32397e+015
+584 38 3.32335e+015
+385 162 3.32051e+015
+498 224 3.31559e+015
+473 63 3.31525e+015
+13 101 3.30842e+015
+562 148 3.29683e+015
+366 300 3.28856e+015
+95 6 3.28678e+015
+108 28 3.28549e+015
+282 393 3.2823e+015
+441 240 3.28055e+015
+118 425 3.2767e+015
+130 255 3.27471e+015
+156 318 3.27345e+015
+113 95 3.25635e+015
+561 320 3.2557e+015
+152 1 3.25074e+015
+378 340 3.25018e+015
+217 208 3.24968e+015
+514 120 3.24837e+015
+473 202 3.2445e+015
+384 258 3.2438e+015
+62 369 3.24322e+015
+258 161 3.24125e+015
+217 146 3.23758e+015
+401 184 3.22288e+015
+279 366 3.22202e+015
+173 116 3.21759e+015
+420 162 3.21749e+015
+270 365 3.21488e+015
+228 130 3.21255e+015
+69 420 3.20581e+015
+221 432 3.20405e+015
+263 402 3.19395e+015
+247 404 3.19304e+015
+159 75 3.19192e+015
+130 72 3.18487e+015
+363 358 3.18483e+015
+58 373 3.18351e+015
+78 270 3.18281e+015
+55 294 3.18216e+015
+79 474 3.1771e+015
+309 441 3.17356e+015
+480 451 3.15917e+015
+129 238 3.15762e+015
+274 215 3.15121e+015
+291 50 3.14881e+015
+180 165 3.14808e+015
+178 18 3.14218e+015
+364 200 3.14058e+015
+569 39 3.13791e+015
+204 16 3.13416e+015
+144 6 3.13008e+015
+377 318 3.1178e+015
+470 417 3.11058e+015
+110 264 3.09991e+015
+504 361 3.09601e+015
+449 178 3.09417e+015
+573 405 3.09048e+015
+222 114 3.08033e+015
+210 33 3.07659e+015
+375 4 3.07586e+015
+395 318 3.0678e+015
+372 83 3.05328e+015
+439 25 3.04824e+015
+241 421 3.04807e+015
+16 216 3.04026e+015
+271 182 3.03636e+015
+565 463 3.03205e+015
+568 382 3.02802e+015
+212 33 3.01414e+015
+44 474 3.01288e+015
+191 124 3.01052e+015
+558 462 3.00898e+015
+37 287 3.00853e+015
+254 75 3.00615e+015
+486 44 3.00288e+015
+257 250 2.99567e+015
+134 238 2.98783e+015
+354 25 2.98666e+015
+231 125 2.98653e+015
+298 275 2.98531e+015
+215 175 2.9816e+015
+188 145 2.97995e+015
+49 155 2.97787e+015
+25 64 2.97709e+015
+196 129 2.97462e+015
+518 202 2.97327e+015
+109 169 2.97138e+015
+463 40 2.96488e+015
+404 181 2.96428e+015
+449 139 2.96233e+015
+131 476 2.9622e+015
+288 396 2.96141e+015
+406 80 2.96121e+015
+66 252 2.95899e+015
+120 54 2.95721e+015
+396 160 2.95717e+015
+169 243 2.95399e+015
+332 201 2.94982e+015
+52 12 2.94439e+015
+318 385 2.94426e+015
+250 32 2.93722e+015
+59 78 2.9363e+015
+358 64 2.93594e+015
+263 392 2.93365e+015
+246 106 2.9335e+015
+93 255 2.93279e+015
+57 254 2.92647e+015
+277 137 2.9131e+015
+132 148 2.91249e+015
+281 419 2.90305e+015
+107 428 2.90176e+015
+379 106 2.89808e+015
+164 19 2.89638e+015
+503 164 2.8908e+015
+132 75 2.88808e+015
+217 176 2.88725e+015
+468 139 2.88215e+015
+573 422 2.88207e+015
+489 182 2.88079e+015
+460 44 2.88047e+015
+560 272 2.87883e+015
+165 110 2.87806e+015
+34 31 2.87553e+015
+432 269 2.87151e+015
+544 216 2.86895e+015
+395 105 2.86732e+015
+198 111 2.86573e+015
+35 134 2.86572e+015
+92 59 2.8651e+015
+280 132 2.86386e+015
+277 140 2.85996e+015
+210 35 2.85959e+015
+87 369 2.85659e+015
+48 256 2.85634e+015
+479 402 2.85462e+015
+354 295 2.85327e+015
+379 337 2.85164e+015
+109 59 2.8506e+015
+95 94 2.8453e+015
+382 337 2.84298e+015
+101 164 2.84136e+015
+108 108 2.841e+015
+441 98 2.83703e+015
+265 15 2.8367e+015
+486 4 2.83414e+015
+359 143 2.83051e+015
+242 190 2.82936e+015
+514 382 2.82588e+015
+544 218 2.82399e+015
+505 381 2.82384e+015
+506 164 2.82316e+015
+391 221 2.82214e+015
+398 168 2.81917e+015
+380 121 2.81416e+015
+294 269 2.80805e+015
+358 241 2.80506e+015
+144 17 2.80422e+015
+149 2 2.80235e+015
+398 357 2.8006e+015
+248 206 2.79886e+015
+433 277 2.79525e+015
+39 83 2.79262e+015
+56 78 2.78977e+015
+29 135 2.78891e+015
+289 349 2.78757e+015
+451 86 2.78052e+015
+243 168 2.77836e+015
+472 42 2.77662e+015
+247 220 2.77342e+015
+463 23 2.77251e+015
+148 397 2.77083e+015
+73 23 2.76798e+015
+270 185 2.76652e+015
+106 98 2.76563e+015
+359 53 2.76548e+015
+152 196 2.76208e+015
+282 135 2.7596e+015
+268 287 2.75779e+015
+297 182 2.7568e+015
+51 61 2.75228e+015
+570 182 2.75204e+015
+538 186 2.75038e+015
+290 166 2.74954e+015
+49 159 2.7484e+015
+160 96 2.74802e+015
+191 312 2.74203e+015
+166 312 2.74198e+015
+380 180 2.73469e+015
+256 35 2.73248e+015
+370 106 2.73124e+015
+467 124 2.7277e+015
+430 89 2.72705e+015
+599 364 2.72564e+015
+67 27 2.72262e+015
+261 218 2.72179e+015
+471 268 2.72107e+015
+552 384 2.71641e+015
+217 148 2.71422e+015
+264 311 2.71263e+015
+546 218 2.71215e+015
+145 187 2.71158e+015
+90 255 2.71101e+015
+284 199 2.70971e+015
+578 52 2.70684e+015
+18 236 2.70585e+015
+265 13 2.70167e+015
+448 401 2.69862e+015
+84 145 2.69439e+015
+275 318 2.69083e+015
+367 337 2.68995e+015
+196 193 2.68537e+015
+507 60 2.68189e+015
+341 109 2.68014e+015
+83 72 2.67987e+015
+343 198 2.67963e+015
+367 1 2.67729e+015
+433 240 2.67726e+015
+483 143 2.67701e+015
+73 164 2.67495e+015
+297 410 2.67348e+015
+500 265 2.66946e+015
+342 465 2.66746e+015
+166 117 2.66453e+015
+275 217 2.65731e+015
+309 32 2.65715e+015
+85 310 2.65447e+015
+330 106 2.6542e+015
+71 409 2.65082e+015
+69 131 2.64968e+015
+418 80 2.64624e+015
+538 94 2.64491e+015
+214 449 2.6446e+015
+512 95 2.64278e+015
+192 172 2.64181e+015
+280 136 2.63665e+015
+44 407 2.62993e+015
+436 280 2.62903e+015
+412 4 2.62474e+015
+525 186 2.62263e+015
+95 20 2.62242e+015
+522 425 2.62115e+015
+486 376 2.61418e+015
+36 299 2.61382e+015
+467 24 2.6132e+015
+550 223 2.61011e+015
+150 231 2.60927e+015
+85 180 2.60602e+015
+434 225 2.60285e+015
+3 155 2.59365e+015
+376 83 2.59086e+015
+300 106 2.58707e+015
+12 79 2.58693e+015
+177 164 2.58397e+015
+524 425 2.58065e+015
+447 350 2.57965e+015
+254 77 2.57767e+015
+85 60 2.57672e+015
+493 181 2.57487e+015
+180 380 2.57479e+015
+259 272 2.57475e+015
+86 197 2.57237e+015
+151 111 2.57227e+015
+90 259 2.56693e+015
+93 445 2.5615e+015
+90 275 2.56071e+015
+541 41 2.56046e+015
+444 119 2.55672e+015
+527 189 2.55555e+015
+261 368 2.55345e+015
+35 11 2.55339e+015
+111 41 2.55128e+015
+344 165 2.55109e+015
+489 343 2.55074e+015
+456 376 2.54582e+015
+322 425 2.54557e+015
+269 61 2.54369e+015
+217 97 2.54211e+015
+130 428 2.53997e+015
+367 303 2.53737e+015
+479 293 2.53638e+015
+421 81 2.53568e+015
+202 318 2.53307e+015
+592 18 2.5324e+015
+229 265 2.53098e+015
+449 437 2.52768e+015
+391 449 2.52673e+015
+136 21 2.52549e+015
+379 352 2.5248e+015
+576 126 2.52262e+015
+342 463 2.52032e+015
+446 352 2.51481e+015
+148 21 2.51135e+015
+274 77 2.5112e+015
+190 349 2.51015e+015
+332 415 2.50922e+015
+416 164 2.50738e+015
+432 303 2.50692e+015
+384 146 2.50464e+015
+331 258 2.50433e+015
+178 274 2.50411e+015
+217 127 2.50296e+015
+536 121 2.5026e+015
+16 434 2.50091e+015
+422 165 2.49869e+015
+532 398 2.49794e+015
+236 222 2.49386e+015
+9 476 2.49165e+015
+188 109 2.49049e+015
+299 398 2.48974e+015
+148 112 2.48881e+015
+188 181 2.48862e+015
+445 23 2.48847e+015
+186 289 2.48807e+015
+39 239 2.4878e+015
+118 115 2.48763e+015
+219 107 2.48492e+015
+166 115 2.48397e+015
+117 428 2.47824e+015
+332 106 2.47803e+015
+186 109 2.47764e+015
+187 308 2.47245e+015
+346 48 2.47124e+015
+338 263 2.46993e+015
+130 78 2.46992e+015
+301 103 2.46961e+015
+433 381 2.46947e+015
+440 455 2.46711e+015
+406 163 2.46341e+015
+225 50 2.46316e+015
+87 372 2.46228e+015
+289 137 2.46181e+015
+170 311 2.45971e+015
+278 392 2.45946e+015
+316 166 2.45135e+015
+538 39 2.45113e+015
+397 318 2.44276e+015
+528 159 2.4425e+015
+328 214 2.43758e+015
+157 40 2.43677e+015
+158 91 2.43483e+015
+432 318 2.43221e+015
+66 477 2.4315e+015
+211 153 2.42874e+015
+49 235 2.42423e+015
+106 431 2.4236e+015
+50 452 2.41876e+015
+349 298 2.4159e+015
+319 186 2.4152e+015
+469 203 2.41438e+015
+434 159 2.41349e+015
+129 309 2.40821e+015
+529 365 2.40694e+015
+498 67 2.40545e+015
+281 417 2.40443e+015
+544 91 2.40244e+015
+239 422 2.40195e+015
+493 59 2.39947e+015
+362 361 2.39624e+015
+512 43 2.39545e+015
+391 18 2.39461e+015
+390 165 2.39447e+015
+106 77 2.3939e+015
+436 182 2.38793e+015
+376 181 2.38747e+015
+146 98 2.382e+015
+183 136 2.38153e+015
+157 306 2.38056e+015
+157 236 2.37967e+015
+87 208 2.37714e+015
+351 270 2.37693e+015
+183 138 2.37593e+015
+33 236 2.37139e+015
+275 196 2.36954e+015
+30 97 2.36716e+015
+251 152 2.36695e+015
+107 183 2.36625e+015
+46 407 2.3654e+015
+517 42 2.36494e+015
+482 440 2.36466e+015
+56 171 2.36413e+015
+529 396 2.36293e+015
+271 241 2.36051e+015
+381 162 2.35932e+015
+506 203 2.35681e+015
+86 62 2.3538e+015
+432 82 2.35301e+015
+384 325 2.35219e+015
+314 222 2.35212e+015
+528 161 2.35062e+015
+294 333 2.35036e+015
+76 474 2.34916e+015
+465 355 2.34718e+015
+271 63 2.34567e+015
+182 344 2.3395e+015
+271 61 2.33918e+015
+187 99 2.33879e+015
+444 352 2.33799e+015
+34 267 2.33269e+015
+363 101 2.33186e+015
+113 176 2.32629e+015
+338 63 2.32152e+015
+74 186 2.32009e+015
+178 40 2.31708e+015
+274 222 2.3155e+015
+62 253 2.30452e+015
+182 132 2.30096e+015
+58 71 2.29856e+015
+405 42 2.29839e+015
+245 102 2.29685e+015
+291 89 2.29545e+015
+293 312 2.29427e+015
+569 203 2.29287e+015
+3 382 2.29088e+015
+212 21 2.28904e+015
+204 435 2.28837e+015
+482 332 2.28809e+015
+498 228 2.28699e+015
+221 107 2.28239e+015
+56 145 2.28002e+015
+429 223 2.27912e+015
+64 252 2.279e+015
+534 161 2.27893e+015
+203 293 2.27303e+015
+387 283 2.26913e+015
+318 460 2.26884e+015
+525 381 2.26815e+015
+569 422 2.26802e+015
+9 76 2.26736e+015
+209 395 2.26515e+015
+92 79 2.26507e+015
+9 8 2.2631e+015
+233 261 2.261e+015
+220 114 2.2588e+015
+187 101 2.2579e+015
+464 27 2.25758e+015
+290 263 2.25627e+015
+191 277 2.25609e+015
+20 317 2.25358e+015
+181 292 2.24803e+015
+183 316 2.24736e+015
+233 295 2.24612e+015
+449 63 2.24579e+015
+401 181 2.24556e+015
+419 84 2.24265e+015
+32 29 2.24055e+015
+332 412 2.23895e+015
+9 47 2.23582e+015
+321 10 2.23379e+015
+265 260 2.2326e+015
+478 82 2.23244e+015
+501 42 2.23048e+015
+436 388 2.22887e+015
+563 17 2.22778e+015
+118 96 2.22433e+015
+240 194 2.22398e+015
+403 6 2.22384e+015
+402 167 2.22219e+015
+194 312 2.22127e+015
+88 198 2.22019e+015
+176 273 2.21963e+015
+562 71 2.21879e+015
+180 167 2.21874e+015
+564 224 2.21797e+015
+325 13 2.21722e+015
+165 379 2.2171e+015
+417 300 2.21365e+015
+575 99 2.21196e+015
+483 176 2.20565e+015
+350 87 2.20459e+015
+157 182 2.20436e+015
+394 23 2.20381e+015
+358 161 2.20358e+015
+111 111 2.19911e+015
+430 45 2.19774e+015
+539 128 2.19615e+015
+274 205 2.19545e+015
+128 40 2.19425e+015
+390 325 2.19294e+015
+17 64 2.19212e+015
+22 219 2.1903e+015
+191 55 2.18992e+015
+229 14 2.18825e+015
+191 188 2.18545e+015
+454 47 2.18016e+015
+255 108 2.17636e+015
+572 327 2.17331e+015
+136 138 2.1732e+015
+33 111 2.17301e+015
+444 122 2.17186e+015
+229 16 2.17177e+015
+208 420 2.17102e+015
+109 325 2.17048e+015
+559 18 2.16776e+015
+508 361 2.16752e+015
+255 405 2.16696e+015
+242 58 2.16653e+015
+450 82 2.16582e+015
+479 439 2.16483e+015
+307 354 2.16445e+015
+597 272 2.16014e+015
+26 132 2.15676e+015
+548 45 2.15513e+015
+172 450 2.15395e+015
+445 126 2.14611e+015
+302 189 2.14514e+015
+410 261 2.14278e+015
+163 253 2.14236e+015
+184 142 2.14041e+015
+288 264 2.13923e+015
+330 92 2.13851e+015
+200 330 2.13505e+015
+332 334 2.13176e+015
+450 22 2.12904e+015
+456 161 2.12613e+015
+187 325 2.12607e+015
+138 58 2.12201e+015
+197 148 2.12188e+015
+407 142 2.12089e+015
+438 241 2.12079e+015
+103 259 2.11988e+015
+43 121 2.11903e+015
+278 190 2.1177e+015
+387 281 2.11764e+015
+375 340 2.11553e+015
+484 20 2.11551e+015
+547 182 2.11524e+015
+223 87 2.11512e+015
+53 359 2.114e+015
+462 161 2.11378e+015
+540 141 2.1133e+015
+224 398 2.11241e+015
+525 399 2.1123e+015
+366 260 2.10996e+015
+484 359 2.10928e+015
+513 402 2.10571e+015
+410 263 2.10537e+015
+448 119 2.10272e+015
+480 165 2.10222e+015
+243 31 2.10137e+015
+290 140 2.09897e+015
+431 395 2.09853e+015
+541 163 2.09783e+015
+418 68 2.09532e+015
+149 39 2.09265e+015
+434 340 2.09264e+015
+555 181 2.09261e+015
+45 343 2.09244e+015
+219 211 2.09234e+015
+178 330 2.08872e+015
+278 417 2.08744e+015
+413 245 2.08536e+015
+86 363 2.08245e+015
+401 319 2.08203e+015
+560 60 2.08137e+015
+106 28 2.08096e+015
+240 197 2.08077e+015
+532 121 2.08075e+015
+88 182 2.07856e+015
+199 293 2.07855e+015
+504 262 2.07802e+015
+497 78 2.07383e+015
+262 396 2.0721e+015
+510 361 2.06991e+015
+267 19 2.0667e+015
+561 324 2.06621e+015
+347 393 2.0652e+015
+531 159 2.06363e+015
+104 224 2.06343e+015
+411 471 2.06325e+015
+266 71 2.06094e+015
+195 83 2.06023e+015
+161 127 2.05681e+015
+485 140 2.05546e+015
+75 235 2.05516e+015
+540 165 2.05163e+015
+260 142 2.05007e+015
+167 149 2.04916e+015
+116 360 2.04895e+015
+203 257 2.04828e+015
+509 8 2.04618e+015
+279 86 2.04564e+015
+512 202 2.04284e+015
+575 38 2.03606e+015
+446 376 2.03583e+015
+427 183 2.03493e+015
+88 196 2.03321e+015
+321 119 2.03097e+015
+237 131 2.03054e+015
+446 123 2.03017e+015
+67 304 2.02697e+015
+383 335 2.02683e+015
+324 223 2.02525e+015
+265 54 2.02521e+015
+129 127 2.02504e+015
+404 144 2.0244e+015
+562 461 2.02399e+015
+220 317 2.02263e+015
+111 45 2.02046e+015
+434 45 2.01991e+015
+156 195 2.01721e+015
+570 325 2.01532e+015
+405 142 2.01426e+015
+286 344 2.01294e+015
+495 456 2.01196e+015
+454 115 2.01137e+015
+93 276 2.01125e+015
+479 405 2.01091e+015
+388 420 2.00804e+015
+149 131 2.00679e+015
+524 198 2.00571e+015
+466 41 2.00325e+015
+248 395 2.00317e+015
+126 219 2.00208e+015
+462 221 2.00169e+015
+37 268 2.00137e+015
+169 116 2.00131e+015
+256 105 2.00079e+015
+372 116 1.99768e+015
+329 200 1.99353e+015
+154 56 1.9928e+015
+67 47 1.99161e+015
+76 476 1.99152e+015
+130 217 1.9902e+015
+110 358 1.98811e+015
+183 95 1.98792e+015
+212 396 1.98692e+015
+515 202 1.98584e+015
+161 238 1.98523e+015
+434 43 1.98454e+015
+126 308 1.98394e+015
+272 316 1.9815e+015
+249 192 1.9778e+015
+122 124 1.97759e+015
+144 1 1.97687e+015
+554 382 1.97579e+015
+572 39 1.97558e+015
+272 92 1.97542e+015
+57 331 1.97251e+015
+197 81 1.97244e+015
+282 207 1.97215e+015
+175 186 1.97174e+015
+133 79 1.97122e+015
+280 439 1.96893e+015
+173 273 1.96827e+015
+469 42 1.96716e+015
+328 320 1.96654e+015
+109 147 1.96183e+015
+288 88 1.95904e+015
+20 218 1.95457e+015
+525 196 1.95381e+015
+21 131 1.95352e+015
+549 182 1.95126e+015
+414 264 1.95088e+015
+418 259 1.94725e+015
+455 264 1.94445e+015
+497 462 1.94422e+015
+55 142 1.94301e+015
+322 28 1.94291e+015
+537 263 1.94019e+015
+387 3 1.93674e+015
+524 78 1.93135e+015
+579 84 1.93082e+015
+572 332 1.92754e+015
+257 131 1.92693e+015
+314 448 1.92643e+015
+243 280 1.92471e+015
+336 427 1.92304e+015
+339 426 1.92117e+015
+69 304 1.92094e+015
+537 103 1.92015e+015
+272 170 1.91695e+015
+334 218 1.9166e+015
+408 430 1.91543e+015
+119 129 1.91226e+015
+150 150 1.91181e+015
+245 14 1.90937e+015
+287 52 1.90853e+015
+354 424 1.90808e+015
+260 329 1.90764e+015
+342 296 1.90689e+015
+527 79 1.90532e+015
+459 304 1.90282e+015
+453 161 1.90265e+015
+287 34 1.90249e+015
+155 445 1.90101e+015
+96 453 1.90059e+015
+213 146 1.90016e+015
+156 78 1.89909e+015
+404 13 1.899e+015
+95 59 1.89841e+015
+96 37 1.89742e+015
+409 140 1.8969e+015
+465 161 1.8962e+015
+265 286 1.89429e+015
+277 188 1.89329e+015
+13 203 1.893e+015
+573 161 1.89189e+015
+537 139 1.89061e+015
+437 468 1.8894e+015
+163 114 1.88806e+015
+529 31 1.88748e+015
+483 164 1.88539e+015
+458 161 1.88376e+015
+279 188 1.88267e+015
+437 466 1.88219e+015
+104 222 1.88218e+015
+247 327 1.87981e+015
+480 173 1.87958e+015
+440 378 1.87853e+015
+539 126 1.87839e+015
+119 5 1.87765e+015
+421 299 1.87753e+015
+420 143 1.87624e+015
+545 439 1.87603e+015
+214 93 1.87518e+015
+65 277 1.8747e+015
+414 261 1.87404e+015
+265 131 1.87309e+015
+401 44 1.87072e+015
+504 18 1.87065e+015
+438 397 1.86798e+015
+69 417 1.86425e+015
+411 98 1.86009e+015
+229 346 1.85908e+015
+49 220 1.85895e+015
+49 80 1.85848e+015
+177 332 1.85738e+015
+281 386 1.8568e+015
+162 134 1.85678e+015
+580 80 1.85624e+015
+181 341 1.8559e+015
+138 1 1.8558e+015
+51 287 1.85297e+015
+99 256 1.85069e+015
+508 128 1.85032e+015
+214 149 1.8499e+015
+8 234 1.84871e+015
+513 20 1.84808e+015
+87 355 1.84756e+015
+576 311 1.84736e+015
+439 122 1.84685e+015
+451 63 1.84603e+015
+210 445 1.845e+015
+223 154 1.84475e+015
+446 243 1.84297e+015
+543 443 1.84195e+015
+41 137 1.84111e+015
+180 329 1.84065e+015
+263 400 1.83446e+015
+258 108 1.8343e+015
+376 355 1.83318e+015
+251 192 1.83206e+015
+445 204 1.83039e+015
+82 197 1.83002e+015
+147 6 1.82845e+015
+202 346 1.82834e+015
+514 362 1.8273e+015
+500 474 1.82711e+015
+311 299 1.82639e+015
+528 400 1.82591e+015
+271 414 1.82317e+015
+223 124 1.81928e+015
+223 72 1.8189e+015
+386 167 1.81694e+015
+167 309 1.81594e+015
+532 341 1.81591e+015
+67 317 1.81506e+015
+97 147 1.81365e+015
+193 290 1.81325e+015
+328 106 1.81282e+015
+34 114 1.81243e+015
+211 12 1.81226e+015
+442 320 1.81175e+015
+356 255 1.81074e+015
+87 275 1.8107e+015
+389 134 1.81011e+015
+567 181 1.8079e+015
+252 163 1.8055e+015
+401 144 1.80464e+015
+99 95 1.80447e+015
+472 265 1.80421e+015
+461 123 1.80327e+015
+323 148 1.80272e+015
+104 306 1.80269e+015
+464 101 1.80268e+015
+170 111 1.80187e+015
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_5_7.txt b/test_data/harriscorners/hc_msc_0.00_0.10_5_7.txt
new file mode 100644
index 0000000..35c7e28
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_5_7.txt
@@ -0,0 +1,1688 @@
+1687
+245 94 9.30136e+016
+81 29 6.39569e+016
+421 180 6.35066e+016
+237 20 6.12891e+016
+130 26 5.73559e+016
+272 366 5.60848e+016
+274 367 5.56045e+016
+424 180 5.2228e+016
+424 177 4.80476e+016
+422 177 4.56784e+016
+75 257 4.55084e+016
+121 43 4.43046e+016
+282 113 4.4202e+016
+80 4 4.25437e+016
+261 297 4.24644e+016
+510 124 4.10031e+016
+299 53 3.96282e+016
+130 37 3.93975e+016
+424 322 3.88484e+016
+30 8 3.86084e+016
+152 223 3.77959e+016
+199 18 3.74576e+016
+542 14 3.67458e+016
+240 92 3.63166e+016
+342 9 3.62215e+016
+122 46 3.5505e+016
+83 77 3.54128e+016
+330 128 3.5085e+016
+213 57 3.34705e+016
+34 139 3.32223e+016
+195 58 3.31995e+016
+26 9 3.31359e+016
+483 178 3.29954e+016
+485 338 3.29582e+016
+543 365 3.27416e+016
+458 279 3.27386e+016
+361 294 3.25213e+016
+363 400 3.25103e+016
+37 63 3.24126e+016
+528 24 3.2326e+016
+102 222 3.23121e+016
+138 204 3.21301e+016
+302 184 3.14964e+016
+128 1 3.13079e+016
+359 294 3.09825e+016
+55 30 3.08069e+016
+385 10 3.07737e+016
+156 1 3.0623e+016
+253 12 3.05981e+016
+293 16 3.01497e+016
+361 395 2.98124e+016
+77 3 2.94966e+016
+525 24 2.94264e+016
+64 344 2.92337e+016
+295 15 2.91882e+016
+135 213 2.85454e+016
+77 1 2.83491e+016
+400 263 2.82456e+016
+36 145 2.82296e+016
+476 262 2.80804e+016
+464 394 2.80297e+016
+302 181 2.79069e+016
+135 215 2.78839e+016
+389 10 2.76503e+016
+175 110 2.75711e+016
+320 225 2.73619e+016
+257 385 2.7265e+016
+320 314 2.71163e+016
+127 165 2.7098e+016
+554 39 2.70505e+016
+61 217 2.70366e+016
+391 294 2.69023e+016
+391 296 2.68842e+016
+241 70 2.6848e+016
+436 68 2.65869e+016
+58 218 2.65231e+016
+115 43 2.63126e+016
+211 436 2.55881e+016
+104 61 2.55674e+016
+359 129 2.54312e+016
+451 338 2.5293e+016
+224 39 2.52121e+016
+33 100 2.49712e+016
+12 217 2.48797e+016
+34 8 2.47544e+016
+512 342 2.47518e+016
+359 334 2.46719e+016
+163 215 2.46305e+016
+447 261 2.45092e+016
+226 37 2.4381e+016
+224 37 2.43446e+016
+528 102 2.41065e+016
+449 299 2.40839e+016
+518 59 2.40168e+016
+122 186 2.38728e+016
+125 254 2.369e+016
+43 26 2.36731e+016
+223 420 2.36425e+016
+133 215 2.36198e+016
+389 59 2.35751e+016
+345 339 2.35185e+016
+403 120 2.34558e+016
+364 250 2.34187e+016
+263 442 2.3375e+016
+328 296 2.3031e+016
+240 95 2.28888e+016
+511 169 2.28668e+016
+427 118 2.27947e+016
+210 450 2.27082e+016
+342 338 2.24282e+016
+447 296 2.23412e+016
+215 71 2.22137e+016
+55 290 2.21761e+016
+225 181 2.20219e+016
+126 26 2.20116e+016
+243 201 2.19709e+016
+196 127 2.19087e+016
+41 217 2.18445e+016
+47 98 2.17259e+016
+523 61 2.17135e+016
+383 5 2.16703e+016
+243 203 2.15823e+016
+79 79 2.15346e+016
+390 143 2.15059e+016
+386 178 2.1468e+016
+545 59 2.14001e+016
+221 37 2.13762e+016
+416 8 2.13462e+016
+143 324 2.13032e+016
+448 398 2.11774e+016
+313 148 2.11695e+016
+158 74 2.11156e+016
+419 8 2.09545e+016
+272 280 2.09078e+016
+4 46 2.08828e+016
+486 58 2.07952e+016
+543 167 2.07451e+016
+470 421 2.07321e+016
+418 438 2.0726e+016
+357 259 2.06708e+016
+434 112 2.06287e+016
+126 364 2.05811e+016
+580 16 2.05673e+016
+60 40 2.04322e+016
+222 181 2.04271e+016
+352 321 2.04169e+016
+413 257 2.04157e+016
+56 6 2.03924e+016
+182 398 2.02828e+016
+388 177 2.0246e+016
+576 16 2.01933e+016
+562 478 2.01909e+016
+510 166 2.00596e+016
+226 421 2.00566e+016
+58 6 1.99732e+016
+48 26 1.97941e+016
+453 204 1.97713e+016
+367 144 1.97629e+016
+64 318 1.97345e+016
+138 207 1.97089e+016
+302 215 1.96931e+016
+477 19 1.96866e+016
+387 220 1.9643e+016
+302 165 1.96065e+016
+178 110 1.9605e+016
+470 238 1.95766e+016
+393 143 1.95626e+016
+506 16 1.95389e+016
+222 179 1.94752e+016
+255 139 1.94059e+016
+209 21 1.92667e+016
+109 240 1.92635e+016
+123 197 1.9089e+016
+61 203 1.90465e+016
+207 449 1.90263e+016
+546 41 1.9024e+016
+404 183 1.90211e+016
+359 220 1.89943e+016
+364 142 1.89874e+016
+408 183 1.8953e+016
+509 16 1.89143e+016
+165 240 1.88401e+016
+120 185 1.88198e+016
+150 306 1.87927e+016
+208 222 1.87786e+016
+87 254 1.87524e+016
+211 185 1.87159e+016
+534 185 1.87087e+016
+183 36 1.86228e+016
+403 118 1.86055e+016
+293 26 1.86009e+016
+107 44 1.85684e+016
+174 40 1.85675e+016
+326 141 1.8544e+016
+490 139 1.85178e+016
+329 258 1.84798e+016
+310 6 1.84673e+016
+265 445 1.84308e+016
+449 204 1.84185e+016
+145 6 1.83988e+016
+158 72 1.83299e+016
+284 402 1.83154e+016
+500 159 1.83034e+016
+246 144 1.82992e+016
+139 109 1.82733e+016
+56 4 1.82615e+016
+253 139 1.82492e+016
+36 174 1.82187e+016
+123 199 1.81422e+016
+508 454 1.81163e+016
+243 166 1.80892e+016
+143 311 1.80267e+016
+58 4 1.79954e+016
+410 353 1.79892e+016
+129 75 1.79731e+016
+528 186 1.79247e+016
+476 21 1.78957e+016
+32 270 1.78714e+016
+107 39 1.78486e+016
+413 259 1.78251e+016
+260 220 1.77797e+016
+132 74 1.77491e+016
+165 242 1.77468e+016
+514 346 1.75476e+016
+128 187 1.75359e+016
+229 37 1.75304e+016
+49 151 1.75227e+016
+185 36 1.75165e+016
+261 222 1.74813e+016
+380 6 1.72928e+016
+175 113 1.72814e+016
+112 392 1.72763e+016
+100 198 1.72396e+016
+100 79 1.72057e+016
+60 184 1.71985e+016
+143 309 1.7196e+016
+153 235 1.71937e+016
+7 10 1.71861e+016
+252 423 1.71825e+016
+66 216 1.71721e+016
+235 347 1.71679e+016
+256 151 1.71661e+016
+155 235 1.70977e+016
+313 84 1.70739e+016
+343 264 1.70146e+016
+392 218 1.70107e+016
+65 235 1.70001e+016
+152 306 1.69813e+016
+83 134 1.69535e+016
+512 221 1.69474e+016
+104 3 1.69319e+016
+511 19 1.69126e+016
+414 22 1.68553e+016
+85 148 1.68187e+016
+160 144 1.67898e+016
+88 148 1.66021e+016
+233 345 1.65118e+016
+423 332 1.64949e+016
+432 147 1.64791e+016
+325 341 1.64419e+016
+435 397 1.6436e+016
+301 205 1.63806e+016
+339 10 1.63769e+016
+422 336 1.63288e+016
+245 207 1.62985e+016
+109 43 1.62681e+016
+436 70 1.62614e+016
+165 327 1.62531e+016
+42 63 1.62289e+016
+509 19 1.62238e+016
+220 180 1.6201e+016
+69 476 1.61653e+016
+467 238 1.6144e+016
+91 197 1.6056e+016
+371 161 1.60316e+016
+234 161 1.60203e+016
+309 370 1.60094e+016
+63 236 1.59711e+016
+480 18 1.59682e+016
+168 326 1.59645e+016
+548 162 1.59415e+016
+223 433 1.59375e+016
+301 105 1.5877e+016
+196 124 1.57826e+016
+247 206 1.57794e+016
+343 108 1.57516e+016
+228 291 1.56864e+016
+163 110 1.56692e+016
+361 259 1.56653e+016
+40 296 1.56594e+016
+232 125 1.56414e+016
+91 199 1.56345e+016
+111 169 1.55642e+016
+437 304 1.5554e+016
+16 217 1.55505e+016
+208 225 1.55265e+016
+411 65 1.53753e+016
+263 402 1.53575e+016
+332 294 1.53396e+016
+305 439 1.53322e+016
+409 64 1.53216e+016
+541 124 1.53126e+016
+137 173 1.52599e+016
+32 267 1.52547e+016
+462 43 1.51744e+016
+134 97 1.5173e+016
+48 12 1.51109e+016
+102 360 1.51094e+016
+326 89 1.50497e+016
+24 62 1.50438e+016
+481 299 1.50173e+016
+479 296 1.49925e+016
+544 457 1.49882e+016
+423 46 1.4981e+016
+323 314 1.49576e+016
+365 300 1.48988e+016
+176 260 1.48965e+016
+385 295 1.487e+016
+248 399 1.48426e+016
+112 344 1.48345e+016
+29 30 1.4828e+016
+420 46 1.47924e+016
+278 220 1.47835e+016
+389 21 1.47826e+016
+362 7 1.47709e+016
+479 15 1.47637e+016
+389 164 1.47472e+016
+125 259 1.47417e+016
+451 374 1.46918e+016
+70 25 1.46523e+016
+169 56 1.46159e+016
+54 222 1.45799e+016
+513 262 1.45768e+016
+48 10 1.45731e+016
+365 6 1.45262e+016
+345 264 1.45255e+016
+259 165 1.44949e+016
+394 65 1.4488e+016
+97 448 1.44723e+016
+448 166 1.44486e+016
+168 196 1.44462e+016
+365 105 1.4427e+016
+430 148 1.44108e+016
+549 41 1.43661e+016
+404 266 1.43504e+016
+453 207 1.43457e+016
+350 321 1.43439e+016
+34 267 1.42526e+016
+431 318 1.42469e+016
+459 264 1.42347e+016
+355 128 1.42258e+016
+498 225 1.42096e+016
+153 196 1.42095e+016
+202 313 1.42053e+016
+280 365 1.41686e+016
+217 280 1.41662e+016
+377 120 1.41618e+016
+215 280 1.41474e+016
+140 19 1.41406e+016
+131 132 1.41231e+016
+172 56 1.41186e+016
+89 258 1.40916e+016
+189 218 1.40895e+016
+329 11 1.40715e+016
+407 198 1.40659e+016
+270 291 1.40521e+016
+140 182 1.40168e+016
+494 139 1.40054e+016
+330 141 1.3955e+016
+229 293 1.39503e+016
+533 20 1.39258e+016
+360 142 1.3912e+016
+412 45 1.38872e+016
+103 198 1.38623e+016
+133 132 1.38444e+016
+260 236 1.3793e+016
+164 73 1.37227e+016
+169 18 1.37015e+016
+343 122 1.37006e+016
+163 277 1.3698e+016
+37 297 1.36976e+016
+388 16 1.36829e+016
+77 40 1.36465e+016
+217 147 1.36115e+016
+166 98 1.36087e+016
+93 215 1.3604e+016
+166 110 1.35982e+016
+463 280 1.35529e+016
+134 130 1.35421e+016
+394 63 1.35211e+016
+85 1 1.35024e+016
+326 165 1.3493e+016
+432 276 1.34825e+016
+545 2 1.34542e+016
+52 42 1.34446e+016
+346 240 1.3439e+016
+273 181 1.34174e+016
+63 60 1.33951e+016
+512 219 1.33903e+016
+83 136 1.33652e+016
+218 105 1.33378e+016
+385 244 1.33243e+016
+562 461 1.33002e+016
+561 225 1.32925e+016
+107 28 1.32724e+016
+276 353 1.32724e+016
+567 42 1.32215e+016
+5 65 1.32035e+016
+165 357 1.31517e+016
+172 19 1.3142e+016
+357 166 1.31209e+016
+110 136 1.31081e+016
+56 65 1.30772e+016
+206 436 1.30665e+016
+174 311 1.30503e+016
+329 90 1.30462e+016
+544 4 1.30438e+016
+488 58 1.30306e+016
+510 129 1.29887e+016
+485 44 1.29807e+016
+3 64 1.29571e+016
+45 339 1.29363e+016
+65 60 1.29313e+016
+166 244 1.2926e+016
+265 30 1.29003e+016
+512 100 1.2878e+016
+165 179 1.28735e+016
+444 118 1.28688e+016
+282 72 1.28629e+016
+423 49 1.28417e+016
+346 350 1.28177e+016
+190 360 1.28011e+016
+557 463 1.28001e+016
+414 65 1.27423e+016
+488 44 1.2696e+016
+61 134 1.2684e+016
+274 132 1.26608e+016
+455 85 1.26436e+016
+296 332 1.26306e+016
+50 288 1.26055e+016
+223 14 1.25972e+016
+160 139 1.25934e+016
+165 181 1.25381e+016
+47 81 1.25361e+016
+46 12 1.25145e+016
+539 457 1.25132e+016
+481 84 1.25048e+016
+248 316 1.24802e+016
+340 108 1.24699e+016
+134 127 1.24638e+016
+413 163 1.24523e+016
+298 274 1.24295e+016
+217 145 1.24254e+016
+513 78 1.24226e+016
+490 2 1.24168e+016
+283 51 1.23926e+016
+359 166 1.23471e+016
+110 94 1.23388e+016
+483 363 1.23054e+016
+507 6 1.22897e+016
+300 264 1.22874e+016
+446 8 1.22644e+016
+437 319 1.22632e+016
+210 35 1.22589e+016
+273 316 1.22532e+016
+483 329 1.22456e+016
+521 184 1.22047e+016
+516 75 1.21997e+016
+151 1 1.21832e+016
+493 81 1.21584e+016
+145 16 1.21479e+016
+223 218 1.21467e+016
+54 65 1.21191e+016
+193 218 1.21132e+016
+329 13 1.21123e+016
+417 165 1.21036e+016
+524 186 1.20996e+016
+176 95 1.2069e+016
+175 20 1.20679e+016
+97 445 1.20605e+016
+174 95 1.2058e+016
+160 137 1.20291e+016
+110 179 1.20285e+016
+298 179 1.20216e+016
+548 164 1.20143e+016
+301 179 1.20109e+016
+10 102 1.20098e+016
+227 186 1.2004e+016
+27 30 1.19918e+016
+508 4 1.19818e+016
+70 149 1.19781e+016
+142 393 1.19491e+016
+46 355 1.19464e+016
+249 366 1.19293e+016
+231 199 1.19268e+016
+44 98 1.19265e+016
+304 190 1.1924e+016
+264 32 1.19235e+016
+93 213 1.19101e+016
+392 48 1.19089e+016
+257 147 1.19079e+016
+398 266 1.19069e+016
+269 53 1.19068e+016
+325 426 1.19032e+016
+111 110 1.18772e+016
+561 475 1.18529e+016
+145 161 1.18527e+016
+109 39 1.18495e+016
+281 49 1.18466e+016
+309 440 1.18386e+016
+162 96 1.18308e+016
+105 222 1.18242e+016
+222 17 1.18148e+016
+378 67 1.1807e+016
+343 124 1.17861e+016
+271 168 1.1779e+016
+287 211 1.17751e+016
+165 313 1.17241e+016
+575 178 1.17222e+016
+465 196 1.17193e+016
+284 73 1.1708e+016
+218 98 1.16942e+016
+269 70 1.16938e+016
+552 381 1.16929e+016
+421 165 1.16872e+016
+344 111 1.1686e+016
+394 164 1.16669e+016
+124 271 1.16451e+016
+448 218 1.16435e+016
+260 238 1.1629e+016
+190 350 1.16213e+016
+347 181 1.16174e+016
+507 169 1.1604e+016
+403 186 1.16009e+016
+441 24 1.15871e+016
+324 294 1.15851e+016
+261 202 1.15808e+016
+221 149 1.15437e+016
+272 72 1.15105e+016
+511 174 1.15079e+016
+379 337 1.14971e+016
+525 38 1.14821e+016
+412 298 1.14768e+016
+42 81 1.14697e+016
+57 365 1.14468e+016
+166 287 1.14227e+016
+46 10 1.14206e+016
+48 155 1.13921e+016
+334 91 1.13808e+016
+509 174 1.135e+016
+189 216 1.13423e+016
+109 98 1.13378e+016
+247 219 1.1334e+016
+540 98 1.13335e+016
+517 20 1.13315e+016
+297 69 1.13065e+016
+541 128 1.12993e+016
+167 313 1.12866e+016
+340 164 1.12681e+016
+88 368 1.12599e+016
+477 6 1.12465e+016
+521 264 1.12335e+016
+463 27 1.12299e+016
+409 162 1.12234e+016
+346 276 1.12074e+016
+332 90 1.11893e+016
+91 254 1.11875e+016
+205 309 1.11736e+016
+538 406 1.11642e+016
+193 215 1.11418e+016
+459 266 1.11372e+016
+249 402 1.11273e+016
+433 158 1.11223e+016
+279 129 1.11204e+016
+89 216 1.10985e+016
+470 121 1.10985e+016
+159 182 1.10854e+016
+503 164 1.1077e+016
+355 254 1.10757e+016
+162 169 1.10459e+016
+272 68 1.10458e+016
+276 182 1.10448e+016
+385 324 1.10444e+016
+538 97 1.10333e+016
+487 263 1.09787e+016
+33 30 1.09708e+016
+221 151 1.09449e+016
+544 7 1.09425e+016
+279 51 1.09394e+016
+380 107 1.0928e+016
+473 5 1.09265e+016
+373 392 1.09016e+016
+541 209 1.08746e+016
+437 338 1.08744e+016
+276 331 1.08639e+016
+358 319 1.08603e+016
+273 219 1.08462e+016
+166 107 1.08355e+016
+346 297 1.08312e+016
+575 13 1.08209e+016
+31 235 1.08094e+016
+220 290 1.0808e+016
+448 444 1.08038e+016
+386 326 1.0789e+016
+523 123 1.07861e+016
+35 31 1.07831e+016
+442 240 1.07757e+016
+445 123 1.07744e+016
+523 346 1.07705e+016
+404 188 1.07697e+016
+102 164 1.07466e+016
+269 68 1.07366e+016
+117 426 1.06906e+016
+118 115 1.06792e+016
+541 133 1.06698e+016
+284 198 1.06644e+016
+157 91 1.06537e+016
+418 83 1.06444e+016
+222 112 1.06267e+016
+86 61 1.05929e+016
+523 344 1.05854e+016
+360 164 1.0579e+016
+158 96 1.05772e+016
+273 295 1.05685e+016
+530 143 1.05675e+016
+552 378 1.05447e+016
+58 75 1.054e+016
+508 2 1.05353e+016
+578 43 1.05237e+016
+436 379 1.05192e+016
+295 421 1.05105e+016
+91 290 1.04978e+016
+453 85 1.04846e+016
+105 76 1.04703e+016
+282 391 1.04703e+016
+449 118 1.04635e+016
+473 23 1.04553e+016
+312 76 1.04493e+016
+324 145 1.0435e+016
+357 11 1.04259e+016
+407 45 1.04239e+016
+107 429 1.04204e+016
+192 143 1.03924e+016
+292 88 1.0368e+016
+450 87 1.03598e+016
+340 122 1.03435e+016
+139 99 1.03355e+016
+373 86 1.03266e+016
+474 247 1.03126e+016
+131 71 1.03113e+016
+164 209 1.03009e+016
+358 66 1.02913e+016
+486 139 1.02895e+016
+528 363 1.02788e+016
+42 10 1.02671e+016
+86 213 1.02622e+016
+359 11 1.02597e+016
+191 206 1.02477e+016
+100 5 1.02373e+016
+409 45 1.0231e+016
+528 361 1.02304e+016
+322 426 1.02304e+016
+83 476 1.02262e+016
+90 213 1.02142e+016
+189 144 1.01957e+016
+527 347 1.01778e+016
+283 395 1.01747e+016
+153 112 1.01738e+016
+499 80 1.017e+016
+340 166 1.01656e+016
+87 197 1.01245e+016
+196 132 1.01224e+016
+156 95 1.01131e+016
+335 436 1.01094e+016
+139 178 1.00941e+016
+258 161 1.00911e+016
+452 62 1.0088e+016
+512 81 1.00813e+016
+373 83 1.00807e+016
+158 112 1.00698e+016
+575 459 1.00672e+016
+510 82 1.00558e+016
+457 42 1.00353e+016
+378 107 9.97391e+015
+359 9 9.95954e+015
+451 438 9.93607e+015
+473 203 9.93409e+015
+234 199 9.93273e+015
+411 21 9.92944e+015
+137 99 9.91542e+015
+215 124 9.8993e+015
+272 170 9.89179e+015
+88 207 9.86409e+015
+87 144 9.8513e+015
+118 76 9.84764e+015
+514 203 9.84668e+015
+380 67 9.83497e+015
+541 130 9.83203e+015
+170 240 9.80383e+015
+41 339 9.80383e+015
+272 285 9.7754e+015
+228 129 9.75815e+015
+404 376 9.69775e+015
+396 317 9.69543e+015
+102 236 9.68856e+015
+84 213 9.6846e+015
+250 220 9.67897e+015
+173 240 9.67567e+015
+155 91 9.67496e+015
+119 447 9.66452e+015
+254 9 9.64813e+015
+475 244 9.63232e+015
+364 180 9.59908e+015
+279 143 9.59362e+015
+150 112 9.58806e+015
+357 63 9.57603e+015
+354 269 9.57148e+015
+85 73 9.56742e+015
+484 142 9.56656e+015
+537 394 9.56114e+015
+244 293 9.55486e+015
+114 1 9.55134e+015
+302 176 9.54688e+015
+287 164 9.52399e+015
+59 253 9.49748e+015
+279 136 9.48712e+015
+33 219 9.47911e+015
+92 445 9.47238e+015
+114 95 9.46839e+015
+107 76 9.46645e+015
+467 139 9.44818e+015
+61 370 9.44619e+015
+287 397 9.43782e+015
+496 81 9.43247e+015
+166 20 9.43209e+015
+164 206 9.42136e+015
+277 144 9.40392e+015
+424 399 9.39653e+015
+58 204 9.39557e+015
+94 257 9.37908e+015
+333 131 9.36064e+015
+564 160 9.34449e+015
+66 26 9.34107e+015
+426 378 9.34042e+015
+178 273 9.33939e+015
+524 426 9.32263e+015
+78 474 9.31303e+015
+305 194 9.25448e+015
+389 325 9.24795e+015
+31 218 9.23999e+015
+126 96 9.19458e+015
+241 421 9.17945e+015
+425 376 9.16309e+015
+351 146 9.15809e+015
+333 66 9.15588e+015
+514 119 9.1535e+015
+281 221 9.1533e+015
+175 240 9.14757e+015
+524 424 9.14625e+015
+540 101 9.14153e+015
+527 344 9.13678e+015
+389 66 9.12795e+015
+55 145 9.12363e+015
+161 115 9.12361e+015
+405 81 9.12193e+015
+126 78 9.11436e+015
+281 438 9.10271e+015
+392 160 9.09893e+015
+437 240 9.09412e+015
+455 58 9.09365e+015
+295 269 9.06354e+015
+444 451 9.04025e+015
+471 212 9.03681e+015
+472 266 9.03653e+015
+265 16 9.02162e+015
+357 282 9.01891e+015
+38 82 9.01787e+015
+155 112 9.01299e+015
+280 390 9.00527e+015
+110 2 8.99837e+015
+155 114 8.99348e+015
+285 298 8.98864e+015
+529 399 8.9836e+015
+186 289 8.97853e+015
+328 181 8.97769e+015
+550 58 8.97728e+015
+86 311 8.96966e+015
+68 419 8.95396e+015
+518 263 8.94428e+015
+278 390 8.93392e+015
+563 464 8.92819e+015
+418 283 8.92738e+015
+375 5 8.92101e+015
+168 115 8.91016e+015
+259 34 8.90616e+015
+376 82 8.89731e+015
+229 288 8.8962e+015
+349 144 8.88697e+015
+41 355 8.87992e+015
+538 101 8.86611e+015
+387 124 8.86054e+015
+333 202 8.84955e+015
+276 179 8.84367e+015
+572 405 8.83541e+015
+406 64 8.82399e+015
+196 190 8.82147e+015
+86 63 8.81546e+015
+271 185 8.81237e+015
+11 78 8.78306e+015
+395 160 8.75944e+015
+526 222 8.75728e+015
+453 102 8.75153e+015
+563 323 8.7427e+015
+528 222 8.73504e+015
+186 20 8.73115e+015
+330 67 8.72963e+015
+279 132 8.72408e+015
+497 66 8.71635e+015
+190 312 8.68287e+015
+77 271 8.6698e+015
+478 243 8.66755e+015
+67 149 8.64003e+015
+335 218 8.63761e+015
+119 130 8.63748e+015
+190 278 8.63303e+015
+569 382 8.62165e+015
+182 343 8.6191e+015
+277 141 8.61061e+015
+570 451 8.60679e+015
+229 13 8.60384e+015
+506 361 8.60305e+015
+171 95 8.60031e+015
+167 105 8.5812e+015
+371 89 8.57533e+015
+353 294 8.57041e+015
+481 451 8.56613e+015
+387 127 8.55473e+015
+383 162 8.54563e+015
+91 376 8.51414e+015
+480 440 8.50823e+015
+133 237 8.49734e+015
+155 318 8.49299e+015
+232 13 8.48916e+015
+269 186 8.45924e+015
+188 278 8.4574e+015
+164 115 8.44327e+015
+330 213 8.4401e+015
+191 329 8.42522e+015
+179 164 8.42483e+015
+503 143 8.41222e+015
+120 128 8.38865e+015
+390 242 8.38338e+015
+67 254 8.36515e+015
+174 187 8.35754e+015
+450 140 8.34488e+015
+204 160 8.33454e+015
+157 198 8.33424e+015
+261 140 8.32096e+015
+418 87 8.31851e+015
+561 228 8.3156e+015
+185 135 8.30745e+015
+468 204 8.30505e+015
+402 44 8.29987e+015
+70 96 8.29579e+015
+200 129 8.29512e+015
+197 194 8.29122e+015
+33 110 8.27317e+015
+133 147 8.27137e+015
+407 82 8.26828e+015
+48 221 8.25418e+015
+91 276 8.24925e+015
+525 173 8.23826e+015
+394 215 8.22995e+015
+381 121 8.19563e+015
+421 298 8.19276e+015
+437 280 8.18836e+015
+466 25 8.18621e+015
+382 338 8.18273e+015
+18 343 8.17387e+015
+440 379 8.17088e+015
+155 56 8.15932e+015
+313 79 8.15633e+015
+529 397 8.14692e+015
+12 81 8.1368e+015
+288 51 8.11796e+015
+516 42 8.09806e+015
+374 3 8.09755e+015
+190 109 8.09577e+015
+209 447 8.09369e+015
+363 357 8.08214e+015
+432 381 8.03778e+015
+86 364 8.03533e+015
+547 139 8.03433e+015
+540 41 8.01523e+015
+107 108 8.01376e+015
+572 446 8.00995e+015
+319 165 8.00763e+015
+448 124 7.99519e+015
+61 253 7.9798e+015
+448 438 7.97877e+015
+537 93 7.97801e+015
+91 60 7.96513e+015
+151 232 7.96142e+015
+504 361 7.95885e+015
+466 124 7.95295e+015
+26 131 7.92787e+015
+317 335 7.92543e+015
+136 136 7.90715e+015
+571 40 7.89258e+015
+346 47 7.88395e+015
+248 293 7.88368e+015
+241 195 7.8625e+015
+256 220 7.85821e+015
+171 312 7.84861e+015
+340 391 7.81832e+015
+72 165 7.81826e+015
+332 413 7.79737e+015
+431 81 7.79508e+015
+249 361 7.79494e+015
+78 199 7.76416e+015
+120 53 7.75068e+015
+262 392 7.74656e+015
+358 241 7.7313e+015
+185 132 7.71262e+015
+191 210 7.71059e+015
+454 116 7.7085e+015
+242 192 7.70495e+015
+242 190 7.70476e+015
+110 58 7.7007e+015
+88 364 7.69479e+015
+562 146 7.67191e+015
+384 260 7.65982e+015
+48 234 7.65165e+015
+187 108 7.6427e+015
+216 175 7.63482e+015
+547 217 7.63469e+015
+222 116 7.63441e+015
+272 64 7.62879e+015
+356 268 7.60338e+015
+339 473 7.59933e+015
+392 21 7.58836e+015
+191 126 7.58484e+015
+468 208 7.58123e+015
+175 272 7.57645e+015
+425 3 7.56768e+015
+455 162 7.56123e+015
+207 160 7.5555e+015
+290 139 7.55309e+015
+342 47 7.53438e+015
+46 221 7.53129e+015
+424 63 7.53013e+015
+147 449 7.52809e+015
+176 164 7.52739e+015
+421 141 7.52141e+015
+328 105 7.51935e+015
+400 168 7.51895e+015
+65 253 7.51367e+015
+573 421 7.51235e+015
+542 163 7.50437e+015
+405 41 7.49202e+015
+168 118 7.48608e+015
+543 217 7.48601e+015
+253 74 7.48148e+015
+391 53 7.48038e+015
+275 52 7.47806e+015
+168 181 7.46349e+015
+306 449 7.45821e+015
+306 364 7.45718e+015
+360 368 7.45275e+015
+214 94 7.43664e+015
+47 219 7.43322e+015
+337 390 7.42623e+015
+163 252 7.41602e+015
+292 335 7.41461e+015
+48 162 7.40986e+015
+486 375 7.40533e+015
+88 372 7.40165e+015
+359 53 7.39167e+015
+277 328 7.38843e+015
+366 336 7.36572e+015
+298 421 7.36527e+015
+577 245 7.36504e+015
+438 468 7.36486e+015
+110 262 7.36009e+015
+65 251 7.35313e+015
+319 187 7.35304e+015
+160 21 7.3449e+015
+57 70 7.34428e+015
+183 137 7.3421e+015
+508 201 7.34176e+015
+213 32 7.33064e+015
+204 163 7.31851e+015
+388 138 7.30902e+015
+98 257 7.29542e+015
+163 62 7.29524e+015
+524 399 7.2897e+015
+104 307 7.27571e+015
+218 208 7.2755e+015
+337 264 7.27514e+015
+264 390 7.24812e+015
+335 390 7.24455e+015
+382 26 7.23628e+015
+267 288 7.23553e+015
+237 417 7.23109e+015
+541 139 7.22546e+015
+282 419 7.22188e+015
+369 86 7.22145e+015
+310 446 7.21587e+015
+538 138 7.20573e+015
+182 95 7.20421e+015
+224 128 7.20388e+015
+181 20 7.20329e+015
+325 258 7.18381e+015
+591 19 7.18206e+015
+205 15 7.17665e+015
+355 24 7.17637e+015
+362 65 7.17424e+015
+413 246 7.17324e+015
+579 245 7.17015e+015
+253 76 7.16715e+015
+379 181 7.14601e+015
+67 251 7.13949e+015
+163 254 7.13789e+015
+536 240 7.11887e+015
+191 292 7.1184e+015
+541 141 7.09484e+015
+39 238 7.09463e+015
+222 87 7.08522e+015
+291 50 7.08288e+015
+209 419 7.0772e+015
+100 257 7.0633e+015
+83 171 7.05737e+015
+476 341 7.05325e+015
+362 244 7.04906e+015
+569 422 7.0408e+015
+186 95 7.03984e+015
+53 358 7.03962e+015
+198 111 7.03604e+015
+220 212 7.03342e+015
+205 19 7.03232e+015
+324 15 7.02326e+015
+406 164 7.01589e+015
+282 209 7.01374e+015
+86 181 7.0117e+015
+501 362 7.00986e+015
+391 17 7.00467e+015
+70 130 6.99881e+015
+22 48 6.99827e+015
+574 330 6.99744e+015
+125 126 6.9788e+015
+247 35 6.9677e+015
+214 174 6.96086e+015
+149 302 6.95765e+015
+105 360 6.94413e+015
+131 168 6.9403e+015
+354 11 6.93066e+015
+566 180 6.92583e+015
+217 425 6.92528e+015
+215 96 6.91849e+015
+110 326 6.91597e+015
+514 381 6.9145e+015
+574 140 6.91413e+015
+9 233 6.91148e+015
+536 243 6.90829e+015
+280 124 6.90779e+015
+280 419 6.90007e+015
+150 398 6.89776e+015
+85 38 6.89626e+015
+130 478 6.89567e+015
+86 374 6.88473e+015
+187 308 6.87834e+015
+232 263 6.8742e+015
+578 81 6.85031e+015
+187 265 6.84269e+015
+130 428 6.84265e+015
+163 186 6.83829e+015
+529 160 6.82768e+015
+17 434 6.82353e+015
+502 22 6.82082e+015
+494 58 6.81611e+015
+486 2 6.81265e+015
+445 205 6.80745e+015
+170 109 6.80504e+015
+58 372 6.80449e+015
+162 127 6.79678e+015
+445 353 6.78837e+015
+255 107 6.7864e+015
+583 38 6.78432e+015
+186 202 6.78126e+015
+48 133 6.77574e+015
+283 195 6.77547e+015
+315 336 6.77476e+015
+433 45 6.7738e+015
+446 351 6.76697e+015
+195 255 6.76101e+015
+156 305 6.75749e+015
+513 298 6.73612e+015
+433 85 6.73529e+015
+184 142 6.72267e+015
+362 63 6.71857e+015
+402 143 6.71733e+015
+284 211 6.71276e+015
+276 214 6.71236e+015
+289 348 6.70308e+015
+331 64 6.69805e+015
+565 323 6.69788e+015
+526 197 6.69566e+015
+299 295 6.69334e+015
+343 200 6.68869e+015
+325 131 6.68545e+015
+266 203 6.68439e+015
+220 315 6.68245e+015
+39 287 6.67691e+015
+376 316 6.66898e+015
+47 255 6.66636e+015
+373 241 6.66252e+015
+215 128 6.65129e+015
+261 71 6.65001e+015
+353 338 6.61865e+015
+183 382 6.60249e+015
+128 126 6.59527e+015
+123 125 6.59361e+015
+376 354 6.59235e+015
+247 107 6.59017e+015
+53 360 6.58696e+015
+179 168 6.58637e+015
+438 182 6.57977e+015
+471 269 6.57871e+015
+498 460 6.57867e+015
+34 235 6.57459e+015
+512 363 6.56158e+015
+37 200 6.55898e+015
+396 104 6.55457e+015
+386 4 6.55194e+015
+277 187 6.55136e+015
+89 181 6.55058e+015
+178 330 6.54923e+015
+12 204 6.54467e+015
+33 164 6.52205e+015
+544 440 6.52003e+015
+385 321 6.51918e+015
+212 150 6.5141e+015
+380 162 6.51379e+015
+506 61 6.51152e+015
+186 101 6.51009e+015
+483 204 6.50311e+015
+466 424 6.49016e+015
+183 139 6.48354e+015
+533 161 6.48041e+015
+280 204 6.47934e+015
+118 95 6.47615e+015
+9 32 6.47576e+015
+1 383 6.4724e+015
+329 216 6.47192e+015
+275 204 6.46895e+015
+548 181 6.46766e+015
+136 239 6.46228e+015
+479 403 6.46094e+015
+433 280 6.45749e+015
+419 66 6.45168e+015
+10 75 6.44646e+015
+121 125 6.44451e+015
+207 163 6.43824e+015
+325 221 6.43398e+015
+121 123 6.43234e+015
+268 242 6.43119e+015
+148 397 6.42818e+015
+509 61 6.428e+015
+114 216 6.4238e+015
+278 204 6.42324e+015
+345 166 6.41865e+015
+160 61 6.41653e+015
+328 64 6.40688e+015
+383 413 6.40422e+015
+291 262 6.40293e+015
+181 168 6.39803e+015
+533 394 6.39513e+015
+388 97 6.39003e+015
+364 201 6.38867e+015
+298 398 6.38092e+015
+272 145 6.37776e+015
+191 122 6.37519e+015
+247 105 6.36319e+015
+264 71 6.35888e+015
+331 105 6.35411e+015
+264 310 6.35333e+015
+168 316 6.34657e+015
+563 320 6.3451e+015
+562 149 6.33618e+015
+154 295 6.33426e+015
+270 108 6.33217e+015
+509 58 6.32653e+015
+277 190 6.31495e+015
+419 259 6.31229e+015
+161 152 6.31006e+015
+336 62 6.29351e+015
+95 5 6.29163e+015
+378 317 6.29011e+015
+18 65 6.28739e+015
+302 333 6.2786e+015
+74 477 6.27809e+015
+385 166 6.27209e+015
+37 202 6.27124e+015
+40 12 6.27082e+015
+382 102 6.2636e+015
+287 262 6.26167e+015
+209 161 6.26121e+015
+55 172 6.25977e+015
+130 306 6.25909e+015
+187 313 6.25673e+015
+523 78 6.25418e+015
+242 58 6.24711e+015
+446 22 6.24019e+015
+430 85 6.23618e+015
+455 48 6.23262e+015
+298 419 6.22795e+015
+262 284 6.22575e+015
+480 165 6.22128e+015
+314 446 6.21967e+015
+204 294 6.21877e+015
+561 142 6.21027e+015
+383 411 6.20504e+015
+183 379 6.2027e+015
+304 160 6.20029e+015
+394 107 6.19889e+015
+461 162 6.19743e+015
+487 377 6.19727e+015
+503 18 6.1918e+015
+128 307 6.19165e+015
+266 20 6.18754e+015
+226 112 6.18464e+015
+388 2 6.18408e+015
+479 286 6.18138e+015
+242 281 6.17657e+015
+289 262 6.17411e+015
+142 449 6.16914e+015
+147 78 6.16486e+015
+195 84 6.15592e+015
+368 109 6.14183e+015
+49 61 6.13793e+015
+106 182 6.11238e+015
+478 11 6.11026e+015
+163 118 6.10946e+015
+115 359 6.1038e+015
+291 264 6.10135e+015
+212 145 6.0982e+015
+261 369 6.09747e+015
+484 163 6.09323e+015
+394 104 6.09161e+015
+378 319 6.0903e+015
+578 53 6.08258e+015
+181 155 6.08049e+015
+28 134 6.07935e+015
+432 270 6.07384e+015
+28 136 6.07351e+015
+96 93 6.06571e+015
+401 164 6.06512e+015
+94 21 6.06459e+015
+505 262 6.06306e+015
+264 203 6.0609e+015
+418 449 6.05706e+015
+250 193 6.05534e+015
+51 453 6.05366e+015
+219 115 6.04771e+015
+158 305 6.04697e+015
+536 265 6.03647e+015
+332 334 6.03309e+015
+380 319 6.03125e+015
+580 345 6.0302e+015
+343 463 6.02845e+015
+234 262 6.01637e+015
+264 141 6.00932e+015
+269 367 6.00622e+015
+416 245 6.00519e+015
+429 43 6.00196e+015
+109 146 6.00138e+015
+269 58 5.99764e+015
+558 79 5.9937e+015
+526 79 5.99107e+015
+477 204 5.98761e+015
+485 359 5.98709e+015
+572 326 5.98419e+015
+503 261 5.98217e+015
+94 93 5.98125e+015
+97 38 5.97524e+015
+276 197 5.97047e+015
+224 149 5.96794e+015
+434 89 5.96166e+015
+542 95 5.95936e+015
+307 359 5.94258e+015
+103 258 5.94088e+015
+534 121 5.93899e+015
+191 171 5.93729e+015
+181 381 5.93636e+015
+190 55 5.92935e+015
+130 475 5.92925e+015
+408 140 5.92904e+015
+452 46 5.92775e+015
+112 216 5.9207e+015
+458 115 5.91427e+015
+485 25 5.91197e+015
+450 180 5.91151e+015
+463 224 5.90638e+015
+318 461 5.90531e+015
+290 311 5.90308e+015
+391 118 5.89301e+015
+546 181 5.8883e+015
+471 83 5.88618e+015
+254 78 5.88564e+015
+337 367 5.8849e+015
+542 443 5.88443e+015
+449 126 5.86421e+015
+575 127 5.85616e+015
+96 21 5.85515e+015
+258 249 5.85374e+015
+178 57 5.85366e+015
+449 143 5.85316e+015
+329 25 5.84887e+015
+45 408 5.84373e+015
+377 85 5.8431e+015
+318 459 5.84182e+015
+435 182 5.83748e+015
+291 266 5.83409e+015
+201 294 5.83222e+015
+251 150 5.82355e+015
+215 289 5.82147e+015
+371 338 5.81008e+015
+191 188 5.80239e+015
+168 178 5.79891e+015
+576 125 5.79479e+015
+398 356 5.79441e+015
+208 14 5.79168e+015
+43 408 5.78846e+015
+157 194 5.78496e+015
+218 128 5.78461e+015
+227 123 5.78314e+015
+581 81 5.77226e+015
+91 79 5.76526e+015
+330 334 5.76424e+015
+493 340 5.76208e+015
+506 380 5.75304e+015
+486 21 5.73758e+015
+338 427 5.7374e+015
+181 379 5.73696e+015
+450 178 5.73577e+015
+149 130 5.72311e+015
+439 123 5.72229e+015
+499 263 5.7215e+015
+256 249 5.72092e+015
+498 463 5.72003e+015
+500 266 5.71982e+015
+94 19 5.71748e+015
+452 178 5.71283e+015
+438 160 5.70776e+015
+317 103 5.70407e+015
+314 165 5.69535e+015
+138 59 5.69299e+015
+562 18 5.68613e+015
+65 182 5.68537e+015
+72 408 5.68262e+015
+167 150 5.67981e+015
+541 248 5.67929e+015
+526 195 5.66509e+015
+537 262 5.66448e+015
+106 432 5.66062e+015
+249 386 5.65913e+015
+386 92 5.65574e+015
+20 317 5.64969e+015
+96 60 5.64902e+015
+471 42 5.6451e+015
+541 381 5.63834e+015
+166 379 5.63284e+015
+464 355 5.62618e+015
+258 133 5.62597e+015
+150 132 5.62445e+015
+566 144 5.62393e+015
+118 2 5.62243e+015
+214 439 5.62238e+015
+502 460 5.62072e+015
+226 198 5.61697e+015
+125 218 5.61497e+015
+112 211 5.60927e+015
+407 429 5.60836e+015
+142 99 5.60774e+015
+443 355 5.60733e+015
+355 342 5.60242e+015
+405 11 5.60185e+015
+306 90 5.59719e+015
+189 325 5.59007e+015
+386 282 5.58814e+015
+114 212 5.5824e+015
+183 316 5.58226e+015
+43 475 5.5778e+015
+36 235 5.57469e+015
+115 130 5.57412e+015
+72 187 5.57194e+015
+209 155 5.5699e+015
+597 364 5.55856e+015
+304 332 5.55365e+015
+225 51 5.55186e+015
+187 182 5.55166e+015
+8 115 5.54647e+015
+99 60 5.53486e+015
+298 87 5.52712e+015
+375 88 5.52346e+015
+474 62 5.52258e+015
+495 474 5.51063e+015
+309 32 5.50728e+015
+169 105 5.50433e+015
+413 81 5.50391e+015
+51 39 5.49872e+015
+65 276 5.4943e+015
+243 33 5.49341e+015
+482 174 5.4926e+015
+292 122 5.4923e+015
+224 125 5.48694e+015
+483 288 5.47848e+015
+342 196 5.47372e+015
+539 186 5.46816e+015
+396 21 5.46547e+015
+445 244 5.4647e+015
+484 5 5.46348e+015
+199 166 5.46343e+015
+96 423 5.45206e+015
+433 240 5.44937e+015
+306 259 5.44625e+015
+559 272 5.44413e+015
+463 101 5.44375e+015
+261 249 5.44372e+015
+480 46 5.4371e+015
+111 358 5.43251e+015
+235 220 5.42416e+015
+437 89 5.42049e+015
+266 200 5.40944e+015
+129 259 5.40362e+015
+103 260 5.39955e+015
+558 18 5.39652e+015
+217 204 5.38399e+015
+494 458 5.3832e+015
+550 223 5.38184e+015
+210 153 5.38078e+015
+163 349 5.37269e+015
+239 220 5.37076e+015
+68 47 5.3704e+015
+307 169 5.36906e+015
+295 122 5.36666e+015
+308 355 5.36323e+015
+451 163 5.35987e+015
+226 433 5.35933e+015
+511 442 5.35691e+015
+539 262 5.35215e+015
+321 121 5.35031e+015
+159 239 5.34594e+015
+575 100 5.34555e+015
+497 118 5.34527e+015
+425 6 5.34192e+015
+352 425 5.34092e+015
+155 445 5.33757e+015
+319 386 5.33682e+015
+430 89 5.32948e+015
+385 334 5.32865e+015
+342 466 5.32813e+015
+316 105 5.32552e+015
+372 69 5.32346e+015
+298 269 5.32189e+015
+167 433 5.32015e+015
+386 65 5.31725e+015
+555 381 5.31681e+015
+182 291 5.31218e+015
+411 264 5.30817e+015
+361 362 5.30626e+015
+258 369 5.3042e+015
+321 11 5.29878e+015
+158 310 5.29739e+015
+268 88 5.29663e+015
+101 96 5.2965e+015
+18 236 5.29483e+015
+236 134 5.29148e+015
+484 3 5.29114e+015
+269 144 5.28733e+015
+181 132 5.28377e+015
+20 286 5.28013e+015
+509 442 5.27529e+015
+412 416 5.27266e+015
+371 118 5.2726e+015
+346 342 5.26635e+015
+503 156 5.26622e+015
+184 340 5.26095e+015
+542 262 5.25841e+015
+261 397 5.2576e+015
+531 120 5.25663e+015
+201 163 5.25182e+015
+189 357 5.2486e+015
+139 136 5.24675e+015
+412 471 5.24667e+015
+125 216 5.24262e+015
+366 164 5.2403e+015
+408 143 5.2401e+015
+228 264 5.23979e+015
+23 131 5.23931e+015
+248 260 5.23439e+015
+314 163 5.23014e+015
+401 318 5.22614e+015
+34 12 5.22482e+015
+561 272 5.22047e+015
+269 416 5.21204e+015
+12 114 5.20875e+015
+526 383 5.20273e+015
+135 322 5.19916e+015
+205 33 5.19682e+015
+190 136 5.19362e+015
+228 260 5.19159e+015
+127 124 5.19147e+015
+280 190 5.19133e+015
+433 226 5.19084e+015
+513 182 5.1868e+015
+66 306 5.18406e+015
+232 260 5.18256e+015
+266 131 5.17262e+015
+233 406 5.16865e+015
+584 346 5.16393e+015
+95 7 5.16289e+015
+532 345 5.15797e+015
+147 97 5.15629e+015
+479 204 5.15107e+015
+211 395 5.1502e+015
+111 338 5.14861e+015
+41 182 5.143e+015
+511 182 5.14176e+015
+436 122 5.13426e+015
+456 177 5.13079e+015
+104 35 5.12896e+015
+294 141 5.12272e+015
+101 40 5.12197e+015
+283 124 5.1205e+015
+532 343 5.11879e+015
+528 30 5.10619e+015
+343 142 5.10554e+015
+537 397 5.10533e+015
+191 306 5.10359e+015
+207 405 5.10339e+015
+155 447 5.10329e+015
+311 299 5.09873e+015
+502 123 5.0916e+015
+594 101 5.09066e+015
+534 78 5.08941e+015
+390 135 5.08931e+015
+413 264 5.08876e+015
+51 230 5.08727e+015
+253 182 5.07523e+015
+335 415 5.07261e+015
+459 304 5.05944e+015
+96 19 5.05772e+015
+199 329 5.05697e+015
+156 39 5.04983e+015
+336 144 5.04488e+015
+265 249 5.04476e+015
+94 367 5.04332e+015
+136 140 5.04109e+015
+121 215 5.03871e+015
+307 105 5.03429e+015
+160 33 5.03414e+015
+389 450 5.03246e+015
+464 115 5.0323e+015
+107 260 5.02561e+015
+250 154 5.02186e+015
+268 91 5.01687e+015
+334 62 5.01453e+015
+314 103 5.01293e+015
+128 219 5.01072e+015
+361 139 5.00963e+015
+513 442 5.00554e+015
+76 110 5.00204e+015
+420 363 4.99791e+015
+351 273 4.99515e+015
+86 377 4.99e+015
+148 22 4.98008e+015
+444 114 4.97823e+015
+529 270 4.97567e+015
+442 97 4.97508e+015
+578 49 4.96939e+015
+190 132 4.969e+015
+139 140 4.96752e+015
+502 43 4.96573e+015
+494 456 4.96425e+015
+387 451 4.95316e+015
+261 30 4.95048e+015
+267 246 4.94841e+015
+349 88 4.94707e+015
+251 164 4.94319e+015
+435 226 4.94093e+015
+332 355 4.9404e+015
+134 80 4.93997e+015
+391 450 4.9362e+015
+3 234 4.93369e+015
+349 125 4.92649e+015
+107 257 4.92269e+015
+72 235 4.91711e+015
+233 31 4.91674e+015
+25 118 4.90987e+015
+327 52 4.9081e+015
+145 23 4.90746e+015
+127 109 4.90646e+015
+223 72 4.90139e+015
+278 87 4.90093e+015
+329 321 4.90061e+015
+295 411 4.89978e+015
+143 235 4.8958e+015
+512 140 4.88972e+015
+526 177 4.88803e+015
+383 145 4.88483e+015
+75 199 4.87991e+015
+303 88 4.87724e+015
+264 258 4.87687e+015
+387 101 4.87506e+015
+47 203 4.87317e+015
+319 105 4.86886e+015
+361 48 4.86809e+015
+174 201 4.85904e+015
+476 267 4.85895e+015
+171 451 4.85795e+015
+528 431 4.85704e+015
+298 138 4.85182e+015
+207 183 4.84855e+015
+335 142 4.84779e+015
+580 218 4.84485e+015
+227 72 4.84381e+015
+280 187 4.83902e+015
+112 354 4.82301e+015
+273 93 4.82169e+015
+1 381 4.82151e+015
+42 122 4.81778e+015
+178 1 4.80514e+015
+204 419 4.8004e+015
+210 133 4.7969e+015
+400 277 4.79497e+015
+45 122 4.79489e+015
+55 330 4.79284e+015
+128 113 4.78177e+015
+213 398 4.77931e+015
+600 365 4.77866e+015
+270 92 4.7637e+015
+509 140 4.76308e+015
+298 410 4.75307e+015
+225 397 4.75189e+015
+83 197 4.75025e+015
+26 44 4.74937e+015
+371 105 4.74798e+015
+115 277 4.74311e+015
+483 47 4.74272e+015
+150 79 4.74235e+015
+518 142 4.73614e+015
+299 135 4.73604e+015
+211 13 4.73514e+015
+266 258 4.71609e+015
+410 140 4.71102e+015
+529 34 4.70819e+015
+145 140 4.70767e+015
+383 22 4.70631e+015
+113 144 4.70387e+015
+580 216 4.70361e+015
+236 403 4.70327e+015
+91 21 4.70095e+015
+96 456 4.69985e+015
+244 187 4.69767e+015
+544 261 4.69763e+015
+566 60 4.69694e+015
+498 474 4.69575e+015
+82 101 4.69533e+015
+238 34 4.69332e+015
+389 333 4.69122e+015
+593 425 4.68574e+015
+201 345 4.68516e+015
+164 434 4.68194e+015
+288 31 4.68e+015
+334 181 4.67327e+015
+210 97 4.67105e+015
+528 437 4.67065e+015
+480 168 4.66754e+015
+188 301 4.66672e+015
+115 262 4.66217e+015
+77 233 4.65924e+015
+67 202 4.65891e+015
+132 79 4.65814e+015
+106 263 4.65672e+015
+208 423 4.65323e+015
+367 86 4.65297e+015
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_7_3.txt b/test_data/harriscorners/hc_msc_0.00_0.10_7_3.txt
new file mode 100644
index 0000000..1786012
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_7_3.txt
@@ -0,0 +1,1244 @@
+1243
+245 95 1.26647e+020
+499 1 1.10239e+020
+274 366 1.00414e+020
+363 401 9.63726e+019
+251 13 7.04474e+019
+240 90 6.77478e+019
+282 115 6.25569e+019
+65 343 5.93703e+019
+507 122 5.80434e+019
+449 298 5.79116e+019
+131 36 5.78775e+019
+122 44 5.72633e+019
+261 297 5.22611e+019
+426 320 4.90999e+019
+465 394 4.89398e+019
+446 396 4.79442e+019
+344 10 4.75053e+019
+200 16 4.6941e+019
+520 61 4.67532e+019
+130 2 4.54327e+019
+37 62 4.46205e+019
+418 440 4.42616e+019
+421 182 4.41514e+019
+28 8 4.4031e+019
+387 10 4.40002e+019
+59 219 4.35944e+019
+480 298 4.32664e+019
+420 178 4.3234e+019
+387 178 4.30534e+019
+553 40 4.24744e+019
+247 92 4.19578e+019
+233 15 4.15305e+019
+237 20 4.13853e+019
+110 238 4.02671e+019
+213 72 3.98399e+019
+72 24 3.97202e+019
+435 68 3.96913e+019
+239 18 3.96415e+019
+448 263 3.96281e+019
+543 364 3.91426e+019
+456 281 3.91081e+019
+45 27 3.90646e+019
+423 178 3.86891e+019
+183 401 3.76931e+019
+271 166 3.7312e+019
+144 309 3.72145e+019
+256 386 3.68557e+019
+390 58 3.6718e+019
+125 199 3.6717e+019
+423 181 3.66046e+019
+299 52 3.62835e+019
+510 122 3.62782e+019
+223 38 3.58624e+019
+303 183 3.54916e+019
+479 19 3.5127e+019
+135 214 3.51138e+019
+34 137 3.5007e+019
+462 279 3.48495e+019
+77 257 3.45623e+019
+271 71 3.40639e+019
+355 220 3.39964e+019
+321 313 3.38621e+019
+411 354 3.37996e+019
+320 224 3.37215e+019
+526 60 3.37185e+019
+4 66 3.36766e+019
+348 179 3.35514e+019
+512 167 3.32859e+019
+102 4 3.29909e+019
+281 112 3.27584e+019
+264 440 3.26804e+019
+224 419 3.2526e+019
+482 365 3.23301e+019
+132 26 3.16807e+019
+439 339 3.15221e+019
+359 260 3.12525e+019
+385 221 3.11562e+019
+412 256 3.08576e+019
+432 146 3.07215e+019
+402 122 3.06544e+019
+101 58 3.05752e+019
+177 106 3.05161e+019
+221 16 3.04328e+019
+421 334 3.03832e+019
+92 198 3.01773e+019
+510 173 3.00735e+019
+81 2 2.98933e+019
+243 72 2.98346e+019
+136 202 2.9395e+019
+35 146 2.93501e+019
+392 144 2.93241e+019
+425 376 2.92385e+019
+515 76 2.92031e+019
+545 168 2.9121e+019
+58 183 2.91056e+019
+111 393 2.88103e+019
+262 165 2.88015e+019
+512 341 2.87275e+019
+74 6 2.86973e+019
+498 82 2.85646e+019
+308 372 2.84741e+019
+390 61 2.84288e+019
+483 24 2.80296e+019
+228 292 2.79042e+019
+361 131 2.78118e+019
+239 349 2.77336e+019
+41 297 2.76886e+019
+563 478 2.73574e+019
+181 111 2.71871e+019
+300 265 2.69052e+019
+304 216 2.68772e+019
+359 294 2.68634e+019
+293 15 2.68558e+019
+360 336 2.67743e+019
+210 445 2.66238e+019
+404 120 2.66229e+019
+302 186 2.65505e+019
+483 339 2.65384e+019
+524 20 2.65096e+019
+82 29 2.6437e+019
+264 298 2.63969e+019
+453 340 2.61181e+019
+411 162 2.60965e+019
+125 255 2.60373e+019
+246 143 2.59615e+019
+75 256 2.57551e+019
+382 8 2.57529e+019
+283 403 2.57248e+019
+138 110 2.55284e+019
+474 262 2.51675e+019
+250 364 2.51016e+019
+550 379 2.48752e+019
+388 221 2.4713e+019
+225 221 2.46766e+019
+64 235 2.46683e+019
+124 362 2.46528e+019
+167 286 2.46462e+019
+434 398 2.46313e+019
+372 163 2.43659e+019
+127 76 2.43396e+019
+12 101 2.43218e+019
+327 342 2.42538e+019
+542 18 2.41841e+019
+430 1 2.40024e+019
+128 164 2.39223e+019
+312 149 2.38891e+019
+510 455 2.38544e+019
+242 94 2.3691e+019
+140 203 2.36355e+019
+562 147 2.35703e+019
+324 341 2.35234e+019
+125 364 2.34929e+019
+116 43 2.33114e+019
+378 353 2.32916e+019
+271 279 2.32497e+019
+528 98 2.32447e+019
+424 320 2.32275e+019
+566 43 2.32008e+019
+192 331 2.30993e+019
+100 221 2.29214e+019
+348 241 2.28475e+019
+291 16 2.25082e+019
+283 72 2.24447e+019
+64 60 2.24269e+019
+170 57 2.24253e+019
+184 35 2.24172e+019
+151 307 2.22173e+019
+387 295 2.2217e+019
+36 174 2.21603e+019
+340 9 2.21407e+019
+33 99 2.20096e+019
+327 127 2.18275e+019
+334 436 2.17917e+019
+345 109 2.17775e+019
+95 446 2.16059e+019
+69 27 2.1482e+019
+55 31 2.14327e+019
+302 206 2.131e+019
+66 320 2.12773e+019
+342 337 2.12368e+019
+329 254 2.12142e+019
+139 173 2.12001e+019
+481 179 2.11707e+019
+179 113 2.11159e+019
+326 426 2.11091e+019
+87 148 2.11022e+019
+355 320 2.10994e+019
+66 214 2.10412e+019
+343 7 2.09632e+019
+422 44 2.08969e+019
+158 1 2.08739e+019
+101 78 2.08578e+019
+533 183 2.08214e+019
+111 241 2.08085e+019
+577 15 2.07589e+019
+475 22 2.0723e+019
+195 58 2.07188e+019
+395 260 2.0716e+019
+216 279 2.0702e+019
+356 268 2.07002e+019
+512 125 2.06825e+019
+203 310 2.0618e+019
+158 143 2.04611e+019
+328 142 2.04504e+019
+347 392 2.04351e+019
+277 352 2.03904e+019
+233 162 2.03872e+019
+456 83 2.03073e+019
+53 43 2.02657e+019
+514 223 2.01903e+019
+254 139 2.01499e+019
+338 165 2.01102e+019
+482 327 2.00878e+019
+522 122 1.99399e+019
+123 272 1.99002e+019
+449 219 1.98652e+019
+68 149 1.9843e+019
+208 451 1.98355e+019
+70 147 1.98252e+019
+472 63 1.97822e+019
+48 100 1.968e+019
+162 214 1.96612e+019
+345 241 1.96603e+019
+542 210 1.95717e+019
+31 219 1.94513e+019
+417 7 1.92853e+019
+248 404 1.92792e+019
+165 217 1.92368e+019
+451 376 1.92133e+019
+503 361 1.91591e+019
+206 224 1.90896e+019
+416 23 1.90641e+019
+387 243 1.89963e+019
+57 364 1.88805e+019
+492 140 1.88604e+019
+212 182 1.88578e+019
+452 205 1.87701e+019
+465 197 1.87635e+019
+177 260 1.87252e+019
+97 447 1.86714e+019
+38 296 1.86455e+019
+451 337 1.86334e+019
+366 144 1.84904e+019
+408 63 1.84809e+019
+169 198 1.84382e+019
+279 222 1.84016e+019
+46 147 1.83786e+019
+87 209 1.83548e+019
+170 18 1.8327e+019
+529 23 1.83147e+019
+86 255 1.82771e+019
+187 99 1.82249e+019
+530 21 1.82207e+019
+556 40 1.81595e+019
+127 252 1.81465e+019
+357 335 1.81437e+019
+484 179 1.81187e+019
+175 109 1.80974e+019
+2 46 1.80918e+019
+512 128 1.80912e+019
+48 26 1.80781e+019
+49 153 1.80524e+019
+56 5 1.80294e+019
+91 292 1.79296e+019
+264 445 1.79174e+019
+147 21 1.7895e+019
+55 294 1.78911e+019
+328 66 1.78835e+019
+275 181 1.78642e+019
+37 138 1.78495e+019
+242 203 1.78017e+019
+191 359 1.77619e+019
+192 219 1.7703e+019
+141 324 1.76892e+019
+358 10 1.76428e+019
+512 295 1.76228e+019
+403 188 1.76178e+019
+234 346 1.74111e+019
+456 283 1.73849e+019
+42 339 1.73567e+019
+229 35 1.73388e+019
+220 178 1.72337e+019
+114 345 1.72041e+019
+38 172 1.71814e+019
+150 222 1.71703e+019
+131 148 1.71628e+019
+512 98 1.71289e+019
+169 55 1.70724e+019
+55 66 1.70078e+019
+153 225 1.70052e+019
+273 130 1.70033e+019
+386 176 1.69975e+019
+306 439 1.69912e+019
+121 52 1.69904e+019
+408 352 1.69824e+019
+45 81 1.69635e+019
+567 161 1.68751e+019
+522 63 1.68723e+019
+164 242 1.68587e+019
+360 217 1.68518e+019
+545 4 1.68381e+019
+362 251 1.6836e+019
+236 92 1.68273e+019
+298 70 1.66953e+019
+37 288 1.66724e+019
+406 375 1.66308e+019
+379 66 1.65468e+019
+478 263 1.65405e+019
+41 64 1.65366e+019
+72 97 1.65318e+019
+433 110 1.65266e+019
+286 296 1.64243e+019
+546 57 1.63995e+019
+246 294 1.63763e+019
+22 61 1.63733e+019
+294 25 1.63515e+019
+209 223 1.63227e+019
+497 228 1.62875e+019
+15 219 1.62868e+019
+470 239 1.6271e+019
+232 200 1.62587e+019
+239 93 1.62203e+019
+312 7 1.6158e+019
+153 222 1.60484e+019
+136 206 1.60383e+019
+508 7 1.59906e+019
+54 289 1.59291e+019
+338 391 1.59277e+019
+59 185 1.59254e+019
+541 99 1.58901e+019
+108 183 1.58794e+019
+410 65 1.58171e+019
+510 343 1.57983e+019
+274 281 1.57431e+019
+426 119 1.57119e+019
+340 13 1.57111e+019
+115 392 1.56795e+019
+157 55 1.5628e+019
+422 398 1.56236e+019
+263 201 1.55939e+019
+128 95 1.55817e+019
+255 182 1.55267e+019
+435 281 1.55033e+019
+314 82 1.54848e+019
+176 39 1.54765e+019
+535 242 1.54562e+019
+525 345 1.54522e+019
+236 130 1.5449e+019
+241 69 1.54251e+019
+107 40 1.54068e+019
+47 11 1.54067e+019
+367 247 1.53557e+019
+105 62 1.52897e+019
+210 437 1.52766e+019
+167 325 1.52698e+019
+351 320 1.52657e+019
+526 101 1.52481e+019
+86 214 1.52374e+019
+526 223 1.52214e+019
+486 182 1.52011e+019
+449 178 1.51937e+019
+513 220 1.51372e+019
+259 201 1.5137e+019
+413 299 1.51318e+019
+225 38 1.51095e+019
+276 221 1.50726e+019
+436 91 1.50327e+019
+86 77 1.49463e+019
+510 18 1.49306e+019
+158 138 1.49302e+019
+482 331 1.49298e+019
+224 183 1.49094e+019
+113 213 1.49054e+019
+157 73 1.49032e+019
+542 130 1.4861e+019
+286 166 1.48554e+019
+211 57 1.48539e+019
+177 93 1.4841e+019
+254 422 1.48347e+019
+18 342 1.48257e+019
+280 128 1.48148e+019
+479 294 1.48011e+019
+358 393 1.47781e+019
+547 40 1.47149e+019
+525 424 1.46825e+019
+579 17 1.46128e+019
+317 148 1.46127e+019
+382 411 1.45964e+019
+281 51 1.45604e+019
+196 82 1.45237e+019
+259 221 1.45114e+019
+432 83 1.45097e+019
+478 16 1.44888e+019
+528 188 1.44816e+019
+245 14 1.44495e+019
+576 178 1.43924e+019
+403 6 1.43915e+019
+57 290 1.43766e+019
+510 165 1.43417e+019
+242 100 1.43356e+019
+105 4 1.43259e+019
+141 2 1.43223e+019
+289 137 1.43164e+019
+324 314 1.43141e+019
+110 96 1.42931e+019
+273 297 1.42725e+019
+236 163 1.42529e+019
+377 119 1.42322e+019
+221 182 1.42286e+019
+7 11 1.42212e+019
+301 165 1.42177e+019
+526 38 1.42017e+019
+537 186 1.41967e+019
+351 322 1.41238e+019
+103 359 1.41116e+019
+156 318 1.41025e+019
+358 64 1.40789e+019
+366 7 1.40679e+019
+379 69 1.40617e+019
+173 312 1.40589e+019
+63 218 1.40154e+019
+477 12 1.40022e+019
+457 375 1.39828e+019
+390 296 1.39683e+019
+356 128 1.39531e+019
+384 354 1.39457e+019
+241 97 1.38832e+019
+527 361 1.3871e+019
+44 10 1.38462e+019
+94 217 1.38396e+019
+54 5 1.38387e+019
+244 165 1.38343e+019
+345 351 1.38311e+019
+408 182 1.38014e+019
+137 208 1.37944e+019
+230 266 1.37901e+019
+342 106 1.37709e+019
+136 128 1.37534e+019
+511 101 1.37447e+019
+219 35 1.37438e+019
+141 394 1.37326e+019
+166 244 1.37241e+019
+6 45 1.3698e+019
+183 19 1.36664e+019
+173 40 1.36659e+019
+530 183 1.36655e+019
+358 143 1.36482e+019
+181 380 1.35998e+019
+365 251 1.35915e+019
+181 398 1.35777e+019
+239 422 1.35278e+019
+35 200 1.35166e+019
+84 476 1.35052e+019
+214 56 1.35023e+019
+181 394 1.34827e+019
+529 102 1.3443e+019
+443 23 1.34369e+019
+223 15 1.3428e+019
+352 147 1.34268e+019
+103 392 1.34223e+019
+350 145 1.34082e+019
+306 192 1.34026e+019
+481 182 1.33916e+019
+516 348 1.33565e+019
+28 236 1.33001e+019
+261 223 1.32962e+019
+325 145 1.32499e+019
+140 183 1.32387e+019
+100 199 1.32355e+019
+100 162 1.32229e+019
+162 216 1.32216e+019
+344 263 1.32212e+019
+64 371 1.32177e+019
+82 136 1.31824e+019
+389 140 1.31639e+019
+424 318 1.3115e+019
+45 97 1.31088e+019
+256 35 1.31063e+019
+290 264 1.31044e+019
+508 18 1.30855e+019
+379 7 1.30479e+019
+307 448 1.30207e+019
+584 38 1.29852e+019
+448 168 1.29805e+019
+484 59 1.29701e+019
+275 319 1.29443e+019
+528 104 1.29257e+019
+124 252 1.28811e+019
+285 212 1.28375e+019
+221 180 1.27092e+019
+155 1 1.27084e+019
+259 71 1.27038e+019
+325 165 1.26907e+019
+252 141 1.26768e+019
+541 124 1.26562e+019
+351 271 1.26365e+019
+245 206 1.26162e+019
+146 160 1.25946e+019
+272 53 1.25548e+019
+324 424 1.25504e+019
+286 209 1.2517e+019
+58 74 1.25078e+019
+220 107 1.24977e+019
+166 96 1.24633e+019
+296 420 1.2429e+019
+397 262 1.24245e+019
+198 130 1.24117e+019
+220 100 1.23716e+019
+329 9 1.23696e+019
+346 297 1.23664e+019
+243 190 1.23516e+019
+597 272 1.2338e+019
+497 79 1.23236e+019
+110 46 1.23107e+019
+475 5 1.23096e+019
+418 68 1.23015e+019
+333 89 1.2301e+019
+571 448 1.22961e+019
+408 67 1.22834e+019
+214 59 1.22653e+019
+38 219 1.22633e+019
+281 53 1.22419e+019
+433 112 1.22156e+019
+4 63 1.22071e+019
+81 77 1.22034e+019
+362 360 1.22031e+019
+520 263 1.21964e+019
+290 49 1.21853e+019
+110 27 1.21681e+019
+195 16 1.21599e+019
+378 339 1.21221e+019
+136 176 1.21044e+019
+278 145 1.20982e+019
+141 22 1.20792e+019
+297 410 1.20688e+019
+112 165 1.20159e+019
+506 203 1.19983e+019
+490 343 1.19507e+019
+344 197 1.19473e+019
+568 382 1.19237e+019
+59 76 1.19199e+019
+216 54 1.19125e+019
+48 97 1.19125e+019
+46 219 1.19092e+019
+178 164 1.19018e+019
+136 21 1.19007e+019
+520 183 1.18652e+019
+187 34 1.18487e+019
+137 98 1.18349e+019
+239 202 1.18339e+019
+338 473 1.18158e+019
+90 256 1.17777e+019
+116 184 1.17514e+019
+208 54 1.17492e+019
+277 370 1.17156e+019
+536 393 1.17066e+019
+357 282 1.16782e+019
+507 164 1.16414e+019
+163 207 1.16347e+019
+561 320 1.1614e+019
+110 264 1.15996e+019
+371 393 1.15961e+019
+514 382 1.15902e+019
+33 65 1.15751e+019
+131 476 1.15556e+019
+398 169 1.15485e+019
+97 79 1.15443e+019
+381 26 1.15376e+019
+94 6 1.15348e+019
+391 324 1.15345e+019
+42 24 1.15212e+019
+220 290 1.15031e+019
+386 292 1.14921e+019
+429 88 1.14856e+019
+369 162 1.14777e+019
+84 78 1.14663e+019
+281 132 1.14534e+019
+50 12 1.14347e+019
+500 224 1.14132e+019
+363 9 1.13926e+019
+211 33 1.13531e+019
+406 122 1.13373e+019
+420 81 1.13191e+019
+480 403 1.12908e+019
+68 337 1.12821e+019
+475 342 1.12818e+019
+267 297 1.12737e+019
+163 358 1.12512e+019
+393 46 1.12394e+019
+31 96 1.12369e+019
+152 1 1.12226e+019
+292 311 1.12156e+019
+33 172 1.12113e+019
+413 21 1.12069e+019
+392 165 1.12015e+019
+425 334 1.11982e+019
+228 184 1.11919e+019
+537 458 1.11893e+019
+422 48 1.11864e+019
+268 288 1.11778e+019
+144 187 1.1177e+019
+538 95 1.11382e+019
+187 263 1.11339e+019
+444 453 1.11195e+019
+403 265 1.11014e+019
+413 4 1.10958e+019
+560 81 1.10934e+019
+502 143 1.10811e+019
+197 55 1.10758e+019
+16 215 1.10742e+019
+513 261 1.10493e+019
+205 162 1.10476e+019
+186 401 1.10464e+019
+418 300 1.104e+019
+95 476 1.10199e+019
+480 261 1.1015e+019
+530 185 1.10074e+019
+365 105 1.09923e+019
+516 17 1.09863e+019
+524 24 1.09693e+019
+248 218 1.09645e+019
+250 32 1.09633e+019
+252 424 1.09296e+019
+41 10 1.09131e+019
+127 186 1.09029e+019
+371 90 1.08712e+019
+598 364 1.08584e+019
+308 7 1.08474e+019
+190 205 1.08353e+019
+438 304 1.0829e+019
+163 168 1.08288e+019
+528 142 1.08266e+019
+336 391 1.0793e+019
+267 30 1.0791e+019
+190 322 1.07576e+019
+374 393 1.07512e+019
+374 241 1.07314e+019
+323 260 1.07304e+019
+36 268 1.07301e+019
+9 76 1.07268e+019
+508 5 1.07251e+019
+137 138 1.0705e+019
+297 331 1.06851e+019
+94 219 1.06821e+019
+482 300 1.06756e+019
+122 185 1.06519e+019
+114 428 1.06509e+019
+85 59 1.06418e+019
+131 255 1.06307e+019
+276 329 1.06295e+019
+164 277 1.06173e+019
+488 262 1.06089e+019
+77 8 1.05985e+019
+216 175 1.05543e+019
+342 123 1.05527e+019
+348 299 1.05468e+019
+179 329 1.05262e+019
+432 268 1.05221e+019
+82 74 1.05127e+019
+260 142 1.05041e+019
+472 211 1.04993e+019
+287 33 1.04751e+019
+328 288 1.04453e+019
+154 114 1.04223e+019
+483 177 1.04212e+019
+265 32 1.03609e+019
+78 196 1.03265e+019
+177 18 1.0325e+019
+366 2 1.03081e+019
+446 261 1.02863e+019
+404 13 1.02734e+019
+469 417 1.02578e+019
+45 407 1.02578e+019
+124 261 1.02569e+019
+314 85 1.02452e+019
+6 9 1.02385e+019
+163 74 1.02218e+019
+274 369 1.02209e+019
+289 167 1.0212e+019
+358 168 1.01968e+019
+449 446 1.01715e+019
+539 40 1.016e+019
+540 13 1.01495e+019
+429 223 1.01458e+019
+492 181 1.01362e+019
+117 428 1.01334e+019
+458 266 1.01311e+019
+283 206 1.01237e+019
+324 90 1.01072e+019
+117 76 1.01062e+019
+236 221 1.0094e+019
+513 121 1.00863e+019
+175 311 1.00861e+019
+209 36 1.00685e+019
+543 16 1.00339e+019
+289 212 9.99003e+018
+560 229 9.97301e+018
+129 168 9.95191e+018
+204 435 9.94222e+018
+174 238 9.92762e+018
+511 43 9.92353e+018
+545 217 9.92332e+018
+408 45 9.918e+018
+93 254 9.89505e+018
+266 403 9.87627e+018
+206 159 9.86827e+018
+439 455 9.84324e+018
+547 162 9.81734e+018
+181 291 9.81025e+018
+251 10 9.80633e+018
+247 317 9.79693e+018
+417 450 9.79636e+018
+62 204 9.78838e+018
+106 59 9.78549e+018
+540 405 9.77286e+018
+218 177 9.72533e+018
+471 213 9.72207e+018
+250 423 9.71136e+018
+141 392 9.69192e+018
+282 199 9.67943e+018
+363 129 9.67785e+018
+39 406 9.67456e+018
+302 263 9.66442e+018
+441 98 9.66344e+018
+292 27 9.65888e+018
+68 304 9.6147e+018
+210 395 9.58667e+018
+572 328 9.57769e+018
+44 337 9.57752e+018
+390 448 9.57412e+018
+173 94 9.56677e+018
+561 71 9.5537e+018
+524 99 9.54548e+018
+278 418 9.54031e+018
+44 62 9.52466e+018
+50 97 9.51635e+018
+182 133 9.50454e+018
+332 333 9.48838e+018
+336 317 9.47401e+018
+70 478 9.46927e+018
+370 107 9.45959e+018
+330 89 9.44891e+018
+163 328 9.43208e+018
+210 154 9.42593e+018
+495 140 9.41702e+018
+191 216 9.41511e+018
+342 464 9.39952e+018
+40 218 9.39378e+018
+260 368 9.38407e+018
+357 125 9.38304e+018
+46 354 9.37814e+018
+530 366 9.37447e+018
+78 79 9.37205e+018
+419 52 9.37076e+018
+282 393 9.36517e+018
+51 61 9.3622e+018
+306 362 9.35006e+018
+29 12 9.34641e+018
+538 121 9.34586e+018
+282 135 9.33352e+018
+361 221 9.33159e+018
+445 127 9.32751e+018
+325 88 9.3172e+018
+516 202 9.30942e+018
+421 6 9.29563e+018
+357 296 9.29546e+018
+492 59 9.28452e+018
+472 421 9.27493e+018
+84 146 9.27372e+018
+171 312 9.26637e+018
+430 44 9.25004e+018
+30 135 9.24727e+018
+242 199 9.24136e+018
+415 164 9.23711e+018
+68 96 9.23339e+018
+475 161 9.23191e+018
+544 171 9.22949e+018
+160 183 9.22645e+018
+78 2 9.22379e+018
+386 327 9.19361e+018
+469 140 9.17013e+018
+471 268 9.16629e+018
+496 462 9.16173e+018
+101 236 9.16055e+018
+513 402 9.15094e+018
+341 263 9.1463e+018
+130 239 9.14589e+018
+412 24 9.14003e+018
+113 3 9.13614e+018
+115 77 9.1158e+018
+450 91 9.10064e+018
+84 310 9.07104e+018
+401 184 9.0479e+018
+505 381 9.04435e+018
+48 256 9.04015e+018
+56 373 9.03967e+018
+172 449 9.02978e+018
+274 76 9.02497e+018
+75 132 9.01379e+018
+450 22 8.99686e+018
+248 314 8.98859e+018
+321 10 8.98742e+018
+219 316 8.98637e+018
+62 133 8.98308e+018
+172 56 8.98303e+018
+190 146 8.98302e+018
+398 358 8.9816e+018
+129 309 8.97842e+018
+31 269 8.97173e+018
+113 95 8.91903e+018
+318 311 8.91428e+018
+157 200 8.88537e+018
+461 220 8.8775e+018
+507 59 8.85873e+018
+186 19 8.85657e+018
+115 306 8.84936e+018
+99 195 8.84742e+018
+363 182 8.8256e+018
+497 160 8.82285e+018
+407 162 8.81799e+018
+270 62 8.81376e+018
+526 398 8.81335e+018
+527 422 8.81302e+018
+344 340 8.80141e+018
+316 428 8.79013e+018
+363 370 8.78994e+018
+358 53 8.78425e+018
+228 289 8.77573e+018
+253 74 8.76361e+018
+526 104 8.74272e+018
+3 155 8.73865e+018
+523 186 8.72132e+018
+268 69 8.71103e+018
+316 107 8.70952e+018
+463 39 8.68978e+018
+134 238 8.68588e+018
+164 324 8.67355e+018
+368 337 8.66121e+018
+148 131 8.65427e+018
+386 162 8.63781e+018
+108 324 8.63749e+018
+394 162 8.63033e+018
+523 39 8.63019e+018
+365 200 8.61743e+018
+269 67 8.61255e+018
+538 97 8.59611e+018
+436 386 8.58967e+018
+3 382 8.57887e+018
+10 218 8.5605e+018
+391 52 8.56012e+018
+395 104 8.5576e+018
+471 4 8.54182e+018
+265 260 8.54051e+018
+341 88 8.53251e+018
+384 260 8.53063e+018
+121 239 8.52789e+018
+74 186 8.52513e+018
+199 110 8.51752e+018
+246 106 8.51521e+018
+390 19 8.5093e+018
+479 451 8.49716e+018
+569 39 8.4959e+018
+269 169 8.48547e+018
+478 401 8.47898e+018
+43 474 8.47875e+018
+439 24 8.45646e+018
+364 255 8.45402e+018
+91 389 8.43034e+018
+179 103 8.4239e+018
+501 3 8.41519e+018
+448 165 8.41444e+018
+333 412 8.41265e+018
+184 94 8.39716e+018
+271 184 8.39673e+018
+12 214 8.39435e+018
+583 345 8.39101e+018
+280 420 8.361e+018
+415 21 8.33297e+018
+243 210 8.33216e+018
+463 23 8.32995e+018
+327 182 8.3284e+018
+151 114 8.3223e+018
+300 177 8.30412e+018
+81 79 8.30075e+018
+224 218 8.29674e+018
+275 197 8.28963e+018
+88 354 8.28038e+018
+78 81 8.27686e+018
+436 87 8.27316e+018
+364 357 8.27027e+018
+242 165 8.26965e+018
+393 217 8.2695e+018
+149 38 8.26266e+018
+122 216 8.25767e+018
+326 13 8.25249e+018
+464 161 8.25089e+018
+39 143 8.247e+018
+18 236 8.24182e+018
+39 168 8.23885e+018
+262 391 8.21573e+018
+52 152 8.2117e+018
+116 96 8.20445e+018
+310 33 8.20289e+018
+39 355 8.20121e+018
+218 146 8.2009e+018
+291 30 8.19922e+018
+25 6 8.19687e+018
+282 351 8.19307e+018
+254 10 8.18947e+018
+548 45 8.18458e+018
+109 428 8.18085e+018
+331 127 8.17408e+018
+437 466 8.16171e+018
+565 463 8.1536e+018
+75 235 8.15059e+018
+100 95 8.14217e+018
+385 6 8.13856e+018
+317 385 8.13521e+018
+500 318 8.13434e+018
+274 206 8.12956e+018
+533 122 8.12825e+018
+536 103 8.12621e+018
+549 59 8.11081e+018
+173 18 8.10782e+018
+471 83 8.09004e+018
+184 318 8.0885e+018
+162 211 8.08741e+018
+259 34 8.06812e+018
+257 140 8.05876e+018
+217 126 8.05651e+018
+241 59 8.04727e+018
+191 57 8.04081e+018
+113 356 8.04072e+018
+78 28 8.02767e+018
+51 292 8.02172e+018
+274 215 8.00365e+018
+331 295 8.00196e+018
+279 363 7.99979e+018
+474 246 7.99953e+018
+89 376 7.99801e+018
+75 9 7.99011e+018
+341 126 7.98003e+018
+83 404 7.97955e+018
+256 405 7.96576e+018
+289 349 7.96297e+018
+559 271 7.96202e+018
+24 65 7.9609e+018
+406 142 7.95796e+018
+159 112 7.95156e+018
+168 243 7.9396e+018
+108 136 7.93648e+018
+163 315 7.91643e+018
+412 220 7.91529e+018
+50 452 7.91374e+018
+280 49 7.91294e+018
+222 430 7.90154e+018
+188 144 7.89987e+018
+540 140 7.8932e+018
+575 126 7.89151e+018
+286 72 7.88508e+018
+173 37 7.8824e+018
+155 195 7.87102e+018
+140 98 7.87039e+018
+267 52 7.87031e+018
+507 3 7.86522e+018
+220 149 7.85743e+018
+272 289 7.84834e+018
+392 293 7.84664e+018
+214 123 7.84268e+018
+172 238 7.84047e+018
+58 253 7.84037e+018
+362 397 7.83586e+018
+281 418 7.83231e+018
+191 189 7.81167e+018
+142 307 7.80788e+018
+410 183 7.80632e+018
+193 217 7.79904e+018
+88 369 7.78714e+018
+187 292 7.7796e+018
+243 419 7.77688e+018
+103 305 7.76143e+018
+371 160 7.75152e+018
+554 379 7.74442e+018
+412 245 7.73168e+018
+232 274 7.73092e+018
+384 258 7.68852e+018
+234 344 7.68823e+018
+304 162 7.68603e+018
+533 340 7.68221e+018
+126 97 7.67597e+018
+363 143 7.6734e+018
+392 66 7.67219e+018
+512 95 7.66307e+018
+161 144 7.65706e+018
+95 450 7.65619e+018
+112 134 7.65353e+018
+90 289 7.64962e+018
+387 16 7.64918e+018
+472 201 7.62694e+018
+126 308 7.62425e+018
+438 68 7.61293e+018
+49 147 7.60934e+018
+50 160 7.60515e+018
+175 115 7.59916e+018
+390 48 7.58908e+018
+157 112 7.57907e+018
+142 179 7.57907e+018
+317 224 7.56819e+018
+134 132 7.56665e+018
+325 295 7.56506e+018
+207 436 7.55289e+018
+197 148 7.54578e+018
+361 369 7.54427e+018
+157 40 7.53199e+018
+53 221 7.50014e+018
+525 381 7.49232e+018
+390 54 7.49189e+018
+258 237 7.48967e+018
+240 196 7.48962e+018
+121 447 7.48415e+018
+438 239 7.48276e+018
+465 281 7.47394e+018
+386 63 7.46929e+018
+117 360 7.46904e+018
+279 86 7.45605e+018
+370 82 7.42397e+018
+564 16 7.42026e+018
+45 137 7.42022e+018
+472 42 7.41945e+018
+516 120 7.4172e+018
+436 389 7.40735e+018
+186 288 7.39323e+018
+64 276 7.39207e+018
+572 161 7.38811e+018
+164 18 7.38728e+018
+258 151 7.37584e+018
+203 293 7.36611e+018
+535 121 7.36467e+018
+489 43 7.36027e+018
+256 149 7.3594e+018
+396 161 7.35411e+018
+527 80 7.35347e+018
+177 331 7.35217e+018
+57 332 7.3508e+018
+527 395 7.34813e+018
+544 91 7.34752e+018
+481 341 7.34596e+018
+160 430 7.34244e+018
+137 56 7.3311e+018
+528 160 7.32929e+018
+407 196 7.31962e+018
+49 79 7.31957e+018
+247 394 7.31932e+018
+222 239 7.30906e+018
+571 456 7.29971e+018
+347 120 7.29752e+018
+226 180 7.295e+018
+35 66 7.28246e+018
+65 252 7.28078e+018
+9 476 7.27112e+018
+416 86 7.25585e+018
+18 319 7.24954e+018
+258 131 7.2482e+018
+261 287 7.23441e+018
+172 112 7.23365e+018
+488 139 7.2255e+018
+485 4 7.22202e+018
+447 245 7.22075e+018
+107 430 7.21828e+018
+531 398 7.21046e+018
+196 193 7.21017e+018
+146 98 7.2037e+018
+247 346 7.20226e+018
+335 445 7.19351e+018
+88 183 7.18842e+018
+220 210 7.18729e+018
+544 20 7.1818e+018
+500 420 7.17492e+018
+309 356 7.17434e+018
+441 320 7.16951e+018
+375 341 7.16349e+018
+111 40 7.16313e+018
+316 167 7.16143e+018
+60 254 7.15974e+018
+287 343 7.15205e+018
+262 216 7.14822e+018
+70 409 7.14805e+018
+211 21 7.14682e+018
+169 309 7.14607e+018
+463 198 7.13885e+018
+400 319 7.13685e+018
+429 340 7.13263e+018
+95 20 7.11863e+018
+14 30 7.11492e+018
+23 322 7.11404e+018
+223 114 7.11213e+018
+390 420 7.08812e+018
+105 198 7.08099e+018
+45 131 7.0539e+018
+201 21 7.04839e+018
+22 58 7.04816e+018
+356 341 7.04004e+018
+221 339 7.02807e+018
+21 132 7.02507e+018
+215 425 7.01956e+018
+59 60 7.01797e+018
+524 172 7.0062e+018
+70 130 7.00263e+018
+572 451 6.99681e+018
+146 452 6.99341e+018
+561 60 6.9926e+018
+220 151 6.97824e+018
+2 435 6.97494e+018
+259 161 6.9632e+018
+404 143 6.95544e+018
+207 417 6.94948e+018
+447 351 6.94801e+018
+33 268 6.94687e+018
+160 98 6.94348e+018
+466 102 6.93159e+018
+405 199 6.92683e+018
+107 96 6.92637e+018
+525 174 6.91917e+018
+201 317 6.90707e+018
+166 117 6.90446e+018
+538 263 6.89402e+018
+431 275 6.89138e+018
+479 82 6.88833e+018
+293 334 6.88638e+018
+272 414 6.87593e+018
+59 372 6.87559e+018
+11 83 6.8734e+018
+212 438 6.86611e+018
+564 39 6.86475e+018
+333 216 6.86471e+018
+320 119 6.86387e+018
+164 381 6.85305e+018
+144 325 6.85208e+018
+575 98 6.85032e+018
+418 282 6.84463e+018
+366 259 6.82775e+018
+179 274 6.82331e+018
+497 224 6.8197e+018
+149 231 6.81955e+018
+95 374 6.8177e+018
+377 461 6.80531e+018
+516 141 6.80262e+018
+65 363 6.80231e+018
+571 384 6.79526e+018
+229 347 6.79181e+018
+81 474 6.78649e+018
+189 107 6.77425e+018
+551 385 6.77041e+018
+438 378 6.76459e+018
+435 242 6.76134e+018
+133 64 6.75719e+018
+509 361 6.74436e+018
+403 180 6.7414e+018
+494 455 6.72802e+018
+299 399 6.72669e+018
+475 255 6.72077e+018
+344 48 6.71746e+018
+213 62 6.71621e+018
+117 115 6.7138e+018
+141 309 6.71067e+018
+447 136 6.70839e+018
+318 460 6.70832e+018
+395 23 6.69646e+018
+63 369 6.69547e+018
+198 112 6.69166e+018
+384 146 6.69106e+018
+164 202 6.68241e+018
+330 133 6.67926e+018
+278 263 6.67473e+018
+302 102 6.66324e+018
+153 233 6.66233e+018
+101 362 6.6579e+018
+208 421 6.65578e+018
+244 402 6.65306e+018
+526 400 6.63889e+018
+504 260 6.63185e+018
+351 88 6.62605e+018
+353 127 6.6256e+018
+34 112 6.62248e+018
+297 182 6.62052e+018
+52 12 6.61764e+018
+132 237 6.61112e+018
+212 435 6.60953e+018
+440 63 6.60759e+018
+217 98 6.60042e+018
+569 202 6.59973e+018
+80 40 6.59278e+018
+570 183 6.5927e+018
+167 19 6.59248e+018
+449 403 6.55931e+018
+168 422 6.55891e+018
+465 139 6.55365e+018
+248 142 6.55229e+018
+459 44 6.54808e+018
+7 116 6.54805e+018
+398 265 6.53997e+018
+106 77 6.53729e+018
+260 231 6.53563e+018
+204 308 6.53305e+018
+67 474 6.53101e+018
+314 75 6.52896e+018
+446 376 6.52625e+018
+327 90 6.52107e+018
+475 202 6.51161e+018
+435 303 6.51055e+018
+420 283 6.50523e+018
+40 215 6.50149e+018
+540 165 6.49975e+018
+509 2 6.49463e+018
+187 182 6.49164e+018
+84 289 6.49138e+018
+184 33 6.48943e+018
+390 332 6.48138e+018
+303 180 6.47911e+018
+363 199 6.47635e+018
+339 427 6.47051e+018
+359 160 6.45957e+018
+379 121 6.4523e+018
+272 241 6.44949e+018
+221 72 6.4471e+018
+404 45 6.44026e+018
+260 272 6.43853e+018
+208 57 6.43789e+018
+175 20 6.41832e+018
+448 138 6.41227e+018
+86 365 6.41162e+018
+211 187 6.41113e+018
+219 279 6.41012e+018
+393 222 6.40712e+018
+414 262 6.40597e+018
+233 296 6.40159e+018
+29 66 6.37245e+018
+91 79 6.36267e+018
+102 42 6.34454e+018
+388 282 6.34326e+018
+378 63 6.3404e+018
+48 132 6.33689e+018
+478 176 6.3354e+018
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_7_5.txt b/test_data/harriscorners/hc_msc_0.00_0.10_7_5.txt
new file mode 100644
index 0000000..80f522d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_7_5.txt
@@ -0,0 +1,1192 @@
+1191
+245 94 7.93833e+020
+273 365 6.16873e+020
+237 20 5.39745e+020
+261 297 5.06198e+020
+423 178 5.03014e+020
+362 401 4.91781e+020
+543 365 4.52516e+020
+27 9 4.41432e+020
+65 343 4.3046e+020
+281 113 4.27048e+020
+76 257 4.23405e+020
+465 393 3.94011e+020
+82 28 3.90413e+020
+131 26 3.88975e+020
+195 58 3.73473e+020
+37 62 3.6955e+020
+252 13 3.51471e+020
+59 218 3.44381e+020
+343 9 3.41501e+020
+320 224 3.29754e+020
+387 10 3.28647e+020
+448 297 3.24214e+020
+131 36 3.22908e+020
+427 320 3.17554e+020
+420 181 3.1723e+020
+127 165 3.13923e+020
+360 295 3.03239e+020
+33 99 3.00169e+020
+200 17 2.99985e+020
+81 2 2.95783e+020
+239 91 2.9553e+020
+510 124 2.93241e+020
+447 397 2.87618e+020
+81 4 2.84364e+020
+128 2 2.77759e+020
+418 439 2.773e+020
+420 178 2.69803e+020
+552 40 2.67768e+020
+425 321 2.6707e+020
+528 24 2.63392e+020
+452 339 2.62689e+020
+519 61 2.62595e+020
+358 260 2.61695e+020
+138 203 2.61145e+020
+484 338 2.60904e+020
+257 385 2.60368e+020
+448 262 2.59614e+020
+242 71 2.57961e+020
+153 223 2.57701e+020
+294 15 2.575e+020
+225 420 2.56769e+020
+387 178 2.52336e+020
+507 122 2.51564e+020
+456 280 2.48661e+020
+122 43 2.47811e+020
+35 137 2.45925e+020
+263 441 2.44208e+020
+511 167 2.43027e+020
+525 24 2.42538e+020
+302 185 2.38449e+020
+300 52 2.36035e+020
+513 341 2.35701e+020
+390 61 2.34325e+020
+78 2 2.32844e+020
+124 198 2.30635e+020
+302 182 2.28923e+020
+320 313 2.26042e+020
+101 222 2.26017e+020
+475 262 2.25174e+020
+33 138 2.22441e+020
+389 57 2.22265e+020
+181 111 2.21448e+020
+214 72 2.20348e+020
+138 110 2.19841e+020
+36 145 2.19228e+020
+123 45 2.17149e+020
+214 55 2.12897e+020
+243 202 2.1218e+020
+183 400 2.11385e+020
+544 168 2.11351e+020
+433 112 2.09463e+020
+116 44 2.09286e+020
+356 220 2.08432e+020
+45 27 2.08064e+020
+483 178 2.06598e+020
+343 338 2.0451e+020
+325 341 2.03898e+020
+4 66 2.03043e+020
+358 295 2.02664e+020
+134 214 2.02649e+020
+216 279 1.99103e+020
+102 59 1.98212e+020
+480 297 1.95933e+020
+533 184 1.94848e+020
+55 290 1.94617e+020
+302 215 1.93067e+020
+435 69 1.92385e+020
+361 131 1.92312e+020
+426 119 1.91986e+020
+177 106 1.91973e+020
+48 26 1.87172e+020
+411 354 1.86562e+020
+222 39 1.85905e+020
+225 38 1.85773e+020
+112 393 1.85688e+020
+55 29 1.85483e+020
+57 4 1.84723e+020
+125 364 1.83788e+020
+404 121 1.81888e+020
+283 403 1.81108e+020
+421 335 1.8055e+020
+142 324 1.80529e+020
+41 63 1.79879e+020
+435 67 1.79664e+020
+66 215 1.79499e+020
+390 295 1.78087e+020
+283 72 1.77944e+020
+456 283 1.77819e+020
+338 12 1.76859e+020
+70 25 1.76428e+020
+371 162 1.76231e+020
+509 455 1.75504e+020
+176 109 1.75354e+020
+144 310 1.74926e+020
+476 21 1.74646e+020
+123 185 1.74617e+020
+524 20 1.73203e+020
+125 254 1.72286e+020
+169 57 1.71867e+020
+425 377 1.71406e+020
+309 7 1.70975e+020
+461 279 1.70515e+020
+412 256 1.70388e+020
+308 372 1.70202e+020
+150 307 1.69764e+020
+234 346 1.69292e+020
+545 41 1.69235e+020
+261 165 1.68815e+020
+92 198 1.68411e+020
+365 143 1.67882e+020
+360 337 1.67649e+020
+86 255 1.66934e+020
+383 9 1.65543e+020
+386 220 1.65449e+020
+391 144 1.64932e+020
+100 198 1.64102e+020
+207 450 1.64043e+020
+404 119 1.63952e+020
+431 147 1.63523e+020
+163 214 1.62999e+020
+434 398 1.627e+020
+327 142 1.62461e+020
+351 321 1.61772e+020
+329 128 1.61714e+020
+579 16 1.61121e+020
+480 179 1.60917e+020
+88 148 1.60012e+020
+13 218 1.59909e+020
+363 251 1.58919e+020
+167 286 1.58795e+020
+233 15 1.58777e+020
+510 173 1.58627e+020
+64 60 1.57037e+020
+360 335 1.56839e+020
+36 173 1.566e+020
+75 6 1.54692e+020
+84 78 1.54198e+020
+60 41 1.53591e+020
+174 40 1.52756e+020
+301 165 1.52512e+020
+109 239 1.51748e+020
+54 66 1.51329e+020
+346 240 1.51181e+020
+261 222 1.51067e+020
+210 451 1.50953e+020
+32 66 1.50631e+020
+64 236 1.50121e+020
+220 290 1.49923e+020
+252 423 1.49843e+020
+542 210 1.49771e+020
+417 23 1.49343e+020
+41 217 1.49255e+020
+567 43 1.47954e+020
+163 277 1.47931e+020
+139 173 1.47717e+020
+477 19 1.47708e+020
+334 436 1.4714e+020
+403 187 1.46931e+020
+95 477 1.46347e+020
+62 203 1.46285e+020
+272 280 1.45941e+020
+439 339 1.45833e+020
+177 260 1.45415e+020
+168 197 1.45225e+020
+358 334 1.44882e+020
+212 59 1.44375e+020
+545 4 1.43884e+020
+511 128 1.43713e+020
+545 59 1.43239e+020
+543 15 1.43069e+020
+57 183 1.43026e+020
+40 296 1.42921e+020
+527 99 1.42106e+020
+509 19 1.406e+020
+515 347 1.4007e+020
+342 263 1.39708e+020
+230 36 1.3968e+020
+264 445 1.39218e+020
+408 182 1.39172e+020
+271 166 1.3866e+020
+387 294 1.37934e+020
+300 265 1.37495e+020
+379 7 1.37411e+020
+348 179 1.37346e+020
+159 138 1.37309e+020
+479 18 1.37093e+020
+210 435 1.36776e+020
+71 147 1.35355e+020
+42 339 1.34621e+020
+479 262 1.34239e+020
+354 321 1.33664e+020
+328 253 1.33166e+020
+490 139 1.32774e+020
+302 205 1.3249e+020
+453 206 1.31157e+020
+482 365 1.31041e+020
+276 352 1.30244e+020
+515 76 1.30061e+020
+541 124 1.2985e+020
+355 268 1.29771e+020
+530 186 1.29579e+020
+344 264 1.29297e+020
+96 447 1.29216e+020
+448 166 1.29016e+020
+246 145 1.28768e+020
+238 349 1.27946e+020
+395 261 1.27887e+020
+413 162 1.27626e+020
+386 243 1.2761e+020
+104 4 1.27387e+020
+423 332 1.27381e+020
+470 239 1.27002e+020
+78 79 1.26576e+020
+497 81 1.26518e+020
+68 149 1.26235e+020
+100 78 1.25947e+020
+102 4 1.25874e+020
+58 364 1.25417e+020
+137 206 1.25391e+020
+68 337 1.25117e+020
+556 40 1.25032e+020
+449 168 1.24967e+020
+221 16 1.24347e+020
+326 427 1.23728e+020
+525 38 1.23589e+020
+544 6 1.23517e+020
+482 328 1.23374e+020
+471 421 1.23362e+020
+48 99 1.23059e+020
+245 143 1.229e+020
+410 65 1.22644e+020
+528 102 1.22459e+020
+52 43 1.22363e+020
+123 272 1.22363e+020
+254 138 1.22302e+020
+65 319 1.21898e+020
+44 97 1.21517e+020
+192 219 1.21199e+020
+512 262 1.21178e+020
+49 151 1.20956e+020
+212 182 1.20942e+020
+494 140 1.20897e+020
+108 28 1.20404e+020
+358 128 1.20386e+020
+10 102 1.20307e+020
+413 299 1.20222e+020
+345 350 1.1945e+020
+211 185 1.19292e+020
+417 8 1.1921e+020
+324 314 1.18726e+020
+249 364 1.18496e+020
+270 71 1.18357e+020
+345 108 1.18157e+020
+163 74 1.18148e+020
+2 47 1.17703e+020
+363 7 1.17622e+020
+311 150 1.17468e+020
+358 10 1.17263e+020
+37 296 1.17034e+020
+406 198 1.16687e+020
+184 36 1.16523e+020
+478 16 1.16439e+020
+452 204 1.16323e+020
+46 355 1.16296e+020
+225 182 1.16233e+020
+221 180 1.16066e+020
+8 10 1.16035e+020
+313 84 1.15993e+020
+407 64 1.15545e+020
+36 176 1.15526e+020
+18 343 1.15407e+020
+170 18 1.1529e+020
+85 214 1.14855e+020
+164 327 1.1456e+020
+328 297 1.13674e+020
+51 98 1.13386e+020
+480 260 1.13344e+020
+229 292 1.13092e+020
+377 119 1.12794e+020
+140 394 1.12787e+020
+37 218 1.12527e+020
+234 162 1.12504e+020
+422 48 1.12338e+020
+509 343 1.11958e+020
+540 14 1.11822e+020
+365 105 1.11782e+020
+484 59 1.11525e+020
+106 39 1.11348e+020
+345 110 1.11139e+020
+498 159 1.11124e+020
+50 12 1.11014e+020
+156 318 1.10993e+020
+340 8 1.10969e+020
+368 144 1.10947e+020
+332 295 1.10519e+020
+393 294 1.10429e+020
+361 221 1.10081e+020
+529 183 1.09791e+020
+265 31 1.09035e+020
+167 326 1.08978e+020
+313 150 1.07957e+020
+512 296 1.07632e+020
+293 27 1.07552e+020
+92 292 1.07421e+020
+367 247 1.07368e+020
+449 445 1.07357e+020
+244 165 1.06913e+020
+6 10 1.06886e+020
+102 359 1.06094e+020
+149 223 1.05734e+020
+164 358 1.05631e+020
+471 212 1.05473e+020
+108 39 1.05426e+020
+47 97 1.05308e+020
+520 184 1.04811e+020
+350 145 1.04387e+020
+225 221 1.0436e+020
+113 345 1.04263e+020
+239 202 1.04241e+020
+47 11 1.0405e+020
+317 312 1.04014e+020
+47 147 1.03987e+020
+221 432 1.03929e+020
+508 5 1.03901e+020
+436 303 1.03883e+020
+360 217 1.03813e+020
+452 377 1.03643e+020
+325 164 1.03617e+020
+249 403 1.03592e+020
+94 218 1.03541e+020
+449 219 1.03475e+020
+61 134 1.03456e+020
+247 399 1.03204e+020
+371 90 1.0299e+020
+106 61 1.02917e+020
+141 1 1.02913e+020
+523 123 1.02463e+020
+31 270 1.02251e+020
+474 5 1.02223e+020
+358 64 1.02131e+020
+278 222 1.01921e+020
+374 393 1.01682e+020
+108 45 1.0162e+020
+165 244 1.01598e+020
+135 129 1.01279e+020
+249 423 1.01159e+020
+527 361 1.00731e+020
+298 69 1.00543e+020
+506 16 1.00486e+020
+31 219 1.00194e+020
+105 198 1.0007e+020
+476 5 9.96584e+019
+239 200 9.95326e+019
+248 316 9.93434e+019
+211 438 9.91355e+019
+329 12 9.89257e+019
+423 398 9.8906e+019
+127 252 9.88278e+019
+135 131 9.8739e+019
+512 99 9.83134e+019
+272 53 9.81461e+019
+73 23 9.81458e+019
+210 445 9.77405e+019
+384 260 9.7347e+019
+46 82 9.72967e+019
+512 220 9.7136e+019
+399 261 9.68522e+019
+537 393 9.68354e+019
+576 14 9.68093e+019
+157 73 9.67172e+019
+70 476 9.66468e+019
+192 330 9.6393e+019
+449 204 9.61342e+019
+245 294 9.58579e+019
+346 298 9.5536e+019
+275 329 9.511e+019
+126 76 9.49871e+019
+358 282 9.49026e+019
+84 476 9.47066e+019
+476 341 9.46303e+019
+325 294 9.44124e+019
+166 97 9.41335e+019
+58 29 9.39272e+019
+548 163 9.37306e+019
+346 296 9.35697e+019
+228 185 9.32798e+019
+77 41 9.3079e+019
+531 102 9.29291e+019
+562 146 9.28675e+019
+444 453 9.28287e+019
+71 96 9.27674e+019
+539 405 9.22603e+019
+140 22 9.21674e+019
+488 263 9.21325e+019
+403 265 9.20866e+019
+516 18 9.20494e+019
+393 66 9.20457e+019
+519 264 9.17022e+019
+207 224 9.15861e+019
+471 268 9.15215e+019
+521 263 9.14573e+019
+550 378 9.1451e+019
+328 66 9.14058e+019
+525 423 9.12533e+019
+475 246 9.1189e+019
+55 294 9.08602e+019
+109 96 9.08475e+019
+333 91 9.08138e+019
+456 84 9.06903e+019
+144 6 9.06738e+019
+489 43 9.05444e+019
+465 196 9.04791e+019
+584 38 9.02699e+019
+118 75 9.02457e+019
+366 5 9.00689e+019
+57 373 9.00665e+019
+517 57 8.99918e+019
+193 216 8.99709e+019
+512 222 8.97672e+019
+306 440 8.97486e+019
+220 100 8.96941e+019
+36 201 8.96864e+019
+498 225 8.94193e+019
+41 10 8.93829e+019
+278 144 8.9054e+019
+180 394 8.88592e+019
+542 132 8.87235e+019
+291 50 8.86264e+019
+542 129 8.8293e+019
+224 218 8.81641e+019
+42 24 8.78803e+019
+23 61 8.78455e+019
+254 10 8.77472e+019
+79 197 8.7587e+019
+138 98 8.73343e+019
+436 320 8.73066e+019
+186 289 8.72728e+019
+362 395 8.71743e+019
+530 144 8.66952e+019
+191 360 8.64792e+019
+120 447 8.64118e+019
+410 163 8.63827e+019
+543 457 8.62426e+019
+378 66 8.61229e+019
+273 296 8.6044e+019
+221 177 8.59795e+019
+359 143 8.59091e+019
+279 128 8.58894e+019
+128 187 8.57621e+019
+187 264 8.57447e+019
+255 150 8.57291e+019
+65 371 8.56877e+019
+408 45 8.56079e+019
+191 358 8.5573e+019
+209 20 8.55482e+019
+287 166 8.55134e+019
+471 83 8.47804e+019
+5 45 8.46822e+019
+113 95 8.46187e+019
+307 449 8.4404e+019
+463 40 8.4368e+019
+330 89 8.42382e+019
+247 404 8.42323e+019
+256 139 8.41111e+019
+397 265 8.40177e+019
+193 16 8.39178e+019
+463 23 8.39095e+019
+342 107 8.39044e+019
+231 125 8.37665e+019
+571 450 8.36859e+019
+69 420 8.3625e+019
+96 449 8.35932e+019
+59 75 8.30443e+019
+314 147 8.29401e+019
+106 42 8.29042e+019
+44 9 8.26562e+019
+338 165 8.26388e+019
+359 394 8.26291e+019
+286 297 8.25398e+019
+502 160 8.25075e+019
+191 205 8.23054e+019
+393 216 8.21613e+019
+289 137 8.21493e+019
+44 62 8.20733e+019
+28 30 8.19242e+019
+165 218 8.17606e+019
+351 270 8.1627e+019
+508 166 8.15236e+019
+449 437 8.12011e+019
+297 331 8.08252e+019
+87 208 8.07022e+019
+224 178 8.06809e+019
+250 32 8.06533e+019
+541 99 8.06358e+019
+140 182 8.04016e+019
+258 161 8.03733e+019
+486 44 8.02394e+019
+221 107 8.01682e+019
+330 9 8.00678e+019
+44 11 7.99995e+019
+37 287 7.99795e+019
+393 218 7.98753e+019
+363 358 7.95189e+019
+166 277 7.94684e+019
+129 168 7.94e+019
+565 160 7.93226e+019
+297 410 7.90397e+019
+82 135 7.89872e+019
+568 382 7.89531e+019
+259 35 7.88808e+019
+160 183 7.88526e+019
+530 362 7.88399e+019
+432 275 7.86525e+019
+160 143 7.8597e+019
+444 119 7.8595e+019
+196 127 7.84312e+019
+127 96 7.77796e+019
+273 131 7.75006e+019
+328 89 7.73165e+019
+163 242 7.72851e+019
+133 93 7.71117e+019
+514 382 7.70732e+019
+241 421 7.6795e+019
+332 127 7.67645e+019
+154 114 7.67458e+019
+388 16 7.67273e+019
+405 375 7.66491e+019
+90 376 7.66306e+019
+469 140 7.65286e+019
+386 327 7.63425e+019
+162 111 7.61982e+019
+109 137 7.61619e+019
+336 391 7.6007e+019
+212 33 7.59784e+019
+130 476 7.59267e+019
+154 236 7.58574e+019
+338 391 7.56747e+019
+166 312 7.5482e+019
+535 241 7.54362e+019
+513 20 7.52841e+019
+538 97 7.52715e+019
+220 150 7.52706e+019
+382 412 7.52186e+019
+525 186 7.51588e+019
+334 218 7.51012e+019
+31 135 7.50656e+019
+182 380 7.49791e+019
+449 178 7.46652e+019
+215 175 7.44762e+019
+276 180 7.44021e+019
+393 164 7.43619e+019
+483 143 7.42479e+019
+432 269 7.4181e+019
+270 185 7.41617e+019
+163 168 7.41249e+019
+559 80 7.40476e+019
+571 447 7.40432e+019
+526 346 7.40051e+019
+203 310 7.39797e+019
+118 425 7.3788e+019
+294 269 7.37174e+019
+425 324 7.34932e+019
+472 42 7.34429e+019
+284 199 7.33816e+019
+502 143 7.32503e+019
+354 295 7.32156e+019
+435 281 7.32022e+019
+62 369 7.3194e+019
+328 214 7.31324e+019
+478 13 7.31259e+019
+198 131 7.3061e+019
+202 315 7.28467e+019
+549 59 7.28058e+019
+364 254 7.28024e+019
+53 222 7.27618e+019
+173 116 7.26039e+019
+248 395 7.23583e+019
+135 21 7.23031e+019
+9 77 7.2298e+019
+163 208 7.22229e+019
+263 403 7.21539e+019
+280 132 7.20386e+019
+245 14 7.19878e+019
+275 317 7.19106e+019
+393 48 7.18703e+019
+338 473 7.17214e+019
+191 146 7.16245e+019
+332 131 7.15695e+019
+209 395 7.13355e+019
+390 48 7.13267e+019
+347 393 7.12941e+019
+481 451 7.12731e+019
+491 59 7.09857e+019
+389 140 7.0683e+019
+416 84 7.06482e+019
+275 319 7.05979e+019
+364 181 7.05945e+019
+117 428 7.05944e+019
+473 202 7.05398e+019
+16 216 7.0487e+019
+205 160 7.03884e+019
+110 264 7.02264e+019
+381 26 7.01489e+019
+53 12 7.00877e+019
+553 378 7.00244e+019
+484 23 6.99373e+019
+107 429 6.99353e+019
+451 86 6.98804e+019
+259 71 6.96329e+019
+59 78 6.952e+019
+390 325 6.93143e+019
+456 377 6.90545e+019
+233 200 6.904e+019
+558 462 6.88409e+019
+281 419 6.87144e+019
+268 289 6.84499e+019
+297 182 6.84013e+019
+209 55 6.82455e+019
+341 122 6.82252e+019
+214 449 6.81832e+019
+527 222 6.81572e+019
+327 182 6.80718e+019
+109 169 6.78324e+019
+259 237 6.77557e+019
+264 311 6.76972e+019
+573 405 6.76025e+019
+248 313 6.75998e+019
+309 441 6.75779e+019
+64 218 6.75164e+019
+325 88 6.73227e+019
+178 94 6.73104e+019
+374 240 6.72473e+019
+221 183 6.71849e+019
+157 40 6.71832e+019
+119 115 6.71358e+019
+108 183 6.70873e+019
+338 263 6.70501e+019
+191 144 6.70268e+019
+165 111 6.70181e+019
+349 298 6.68385e+019
+489 343 6.67973e+019
+210 35 6.66714e+019
+130 72 6.66598e+019
+575 99 6.66479e+019
+429 223 6.66435e+019
+131 255 6.65871e+019
+251 10 6.65594e+019
+318 460 6.645e+019
+83 72 6.6242e+019
+418 68 6.61895e+019
+261 368 6.61888e+019
+432 82 6.60789e+019
+161 169 6.60141e+019
+180 164 6.59573e+019
+191 350 6.58608e+019
+504 361 6.58597e+019
+483 25 6.57739e+019
+439 25 6.57269e+019
+514 120 6.57231e+019
+453 102 6.57024e+019
+420 44 6.5687e+019
+39 355 6.56647e+019
+344 123 6.56199e+019
+306 193 6.56128e+019
+442 23 6.5597e+019
+502 362 6.53449e+019
+359 53 6.52323e+019
+101 164 6.52241e+019
+345 277 6.52145e+019
+362 370 6.51085e+019
+562 461 6.50311e+019
+445 8 6.49224e+019
+268 53 6.49096e+019
+313 76 6.48183e+019
+190 312 6.47541e+019
+73 164 6.46419e+019
+283 395 6.46323e+019
+51 61 6.46302e+019
+180 380 6.45736e+019
+398 168 6.45698e+019
+9 8 6.44487e+019
+565 463 6.43749e+019
+576 179 6.43547e+019
+503 164 6.43515e+019
+303 189 6.41934e+019
+528 189 6.41356e+019
+333 258 6.40549e+019
+524 425 6.40235e+019
+272 316 6.40172e+019
+378 340 6.40109e+019
+306 362 6.39144e+019
+390 449 6.38642e+019
+120 54 6.38603e+019
+206 435 6.38413e+019
+403 6 6.35565e+019
+440 455 6.34921e+019
+93 255 6.34285e+019
+34 31 6.32052e+019
+191 189 6.31829e+019
+29 135 6.31063e+019
+186 19 6.29728e+019
+539 458 6.29579e+019
+246 206 6.28984e+019
+86 311 6.28095e+019
+345 48 6.26434e+019
+287 210 6.25814e+019
+569 422 6.25782e+019
+437 466 6.25473e+019
+322 425 6.25218e+019
+56 222 6.25096e+019
+418 283 6.23954e+019
+573 423 6.23439e+019
+96 79 6.22817e+019
+379 352 6.22798e+019
+355 255 6.22798e+019
+143 17 6.21973e+019
+271 182 6.20937e+019
+113 213 6.2082e+019
+147 98 6.20811e+019
+277 371 6.20756e+019
+332 201 6.19752e+019
+522 425 6.19682e+019
+470 417 6.18792e+019
+196 124 6.18185e+019
+473 63 6.1602e+019
+325 91 6.14101e+019
+356 341 6.13098e+019
+597 272 6.12876e+019
+196 194 6.12863e+019
+282 135 6.12608e+019
+454 115 6.12579e+019
+479 402 6.11171e+019
+439 378 6.10914e+019
+38 168 6.10577e+019
+164 183 6.09233e+019
+282 393 6.08853e+019
+184 19 6.08848e+019
+438 397 6.08527e+019
+90 255 6.07e+019
+174 239 6.06974e+019
+289 349 6.06834e+019
+328 91 6.06288e+019
+158 112 6.06012e+019
+517 42 6.05383e+019
+459 266 6.04736e+019
+50 453 6.03793e+019
+413 4 6.03449e+019
+10 47 6.03392e+019
+95 20 6.03347e+019
+578 43 6.03264e+019
+166 117 6.03247e+019
+114 3 6.02935e+019
+181 292 6.02894e+019
+246 106 6.02041e+019
+576 38 6.01353e+019
+570 182 6.01161e+019
+179 329 6.00963e+019
+280 50 6.0015e+019
+175 94 5.99856e+019
+338 63 5.99321e+019
+256 35 5.99291e+019
+434 159 5.99286e+019
+561 320 5.98814e+019
+271 290 5.9848e+019
+375 4 5.97714e+019
+330 92 5.96978e+019
+275 197 5.96027e+019
+417 300 5.96015e+019
+66 477 5.94779e+019
+500 265 5.93854e+019
+536 459 5.93731e+019
+18 236 5.93065e+019
+133 148 5.92126e+019
+511 83 5.91851e+019
+147 6 5.91662e+019
+267 20 5.89898e+019
+71 409 5.89215e+019
+34 267 5.88281e+019
+493 59 5.87649e+019
+10 79 5.87461e+019
+156 195 5.86789e+019
+321 10 5.86399e+019
+92 59 5.86018e+019
+56 78 5.85224e+019
+170 311 5.82616e+019
+88 369 5.82259e+019
+441 240 5.82065e+019
+147 21 5.81303e+019
+574 459 5.81294e+019
+389 97 5.80934e+019
+532 398 5.80705e+019
+572 459 5.80106e+019
+106 98 5.79984e+019
+174 19 5.79772e+019
+120 51 5.78982e+019
+152 196 5.78593e+019
+508 8 5.78409e+019
+404 13 5.78353e+019
+92 214 5.77951e+019
+274 215 5.77481e+019
+93 445 5.76889e+019
+249 219 5.76817e+019
+575 177 5.76407e+019
+129 238 5.75857e+019
+111 111 5.75595e+019
+156 55 5.74684e+019
+367 303 5.74579e+019
+177 18 5.73905e+019
+291 264 5.73749e+019
+433 240 5.73013e+019
+211 12 5.72976e+019
+380 180 5.71178e+019
+154 234 5.7073e+019
+156 94 5.69137e+019
+264 201 5.68702e+019
+433 381 5.6851e+019
+418 80 5.67725e+019
+341 110 5.67177e+019
+319 186 5.66561e+019
+29 97 5.66333e+019
+106 431 5.64995e+019
+52 151 5.64379e+019
+48 256 5.64316e+019
+430 89 5.64141e+019
+281 417 5.63674e+019
+16 434 5.63148e+019
+161 20 5.62988e+019
+52 153 5.62572e+019
+299 178 5.62282e+019
+95 94 5.6141e+019
+578 52 5.61026e+019
+67 27 5.60772e+019
+280 52 5.60379e+019
+538 186 5.59928e+019
+187 99 5.59231e+019
+505 381 5.59028e+019
+107 76 5.58629e+019
+198 111 5.58521e+019
+482 332 5.58233e+019
+445 114 5.579e+019
+450 22 5.57851e+019
+486 139 5.5775e+019
+497 228 5.57411e+019
+132 238 5.56897e+019
+214 124 5.56888e+019
+525 173 5.55818e+019
+538 263 5.55681e+019
+23 321 5.55382e+019
+332 67 5.55131e+019
+191 123 5.54876e+019
+344 198 5.54843e+019
+493 181 5.54545e+019
+599 364 5.53374e+019
+455 178 5.53015e+019
+111 135 5.52011e+019
+39 83 5.51572e+019
+345 274 5.50957e+019
+109 135 5.50602e+019
+402 45 5.49859e+019
+70 129 5.49385e+019
+297 420 5.46939e+019
+174 312 5.45871e+019
+278 419 5.44997e+019
+44 407 5.44941e+019
+95 5 5.44233e+019
+451 178 5.43874e+019
+236 222 5.43852e+019
+229 289 5.43633e+019
+243 31 5.43337e+019
+79 474 5.42744e+019
+217 146 5.41445e+019
+486 265 5.40809e+019
+86 63 5.40726e+019
+286 213 5.38891e+019
+220 317 5.38516e+019
+177 164 5.38449e+019
+224 398 5.38214e+019
+405 42 5.38138e+019
+479 293 5.37906e+019
+536 103 5.36791e+019
+395 104 5.34956e+019
+146 162 5.34912e+019
+58 254 5.34613e+019
+451 63 5.34037e+019
+184 94 5.33609e+019
+513 402 5.33585e+019
+485 5 5.33375e+019
+359 291 5.33146e+019
+482 440 5.32786e+019
+148 397 5.31098e+019
+544 218 5.30533e+019
+217 149 5.30119e+019
+423 118 5.30034e+019
+261 286 5.29612e+019
+447 350 5.29595e+019
+449 118 5.29448e+019
+406 80 5.28882e+019
+457 116 5.27119e+019
+459 304 5.26421e+019
+245 102 5.26181e+019
+466 24 5.25841e+019
+90 275 5.25255e+019
+183 316 5.23457e+019
+181 344 5.23104e+019
+376 181 5.23089e+019
+363 101 5.22926e+019
+41 137 5.22833e+019
+103 392 5.21784e+019
+269 66 5.20988e+019
+242 190 5.20478e+019
+433 43 5.20193e+019
+79 271 5.20184e+019
+364 257 5.1932e+019
+107 107 5.1874e+019
+151 114 5.18474e+019
+68 96 5.18416e+019
+444 122 5.17555e+019
+104 202 5.17088e+019
+367 337 5.16783e+019
+98 202 5.16376e+019
+212 22 5.16335e+019
+299 398 5.16299e+019
+366 301 5.14053e+019
+283 208 5.13622e+019
+221 104 5.13222e+019
+160 96 5.12516e+019
+500 318 5.12377e+019
+254 77 5.11788e+019
+220 339 5.10338e+019
+470 121 5.10179e+019
+163 315 5.09221e+019
+592 18 5.0837e+019
+233 295 5.08078e+019
+136 179 5.07769e+019
+391 18 5.0647e+019
+21 132 5.06177e+019
+350 87 5.04758e+019
+216 125 5.04289e+019
+278 417 5.02936e+019
+129 310 5.02697e+019
+165 180 5.02438e+019
+132 75 5.0207e+019
+103 259 5.01905e+019
+297 25 5.0155e+019
+126 308 5.01031e+019
+394 23 5.01029e+019
+47 132 5.00439e+019
+460 44 4.99666e+019
+86 363 4.99198e+019
+67 304 4.98427e+019
+229 16 4.98242e+019
+506 203 4.97779e+019
+87 372 4.97297e+019
+324 259 4.97282e+019
+333 412 4.97217e+019
+217 208 4.97165e+019
+29 236 4.9683e+019
+169 243 4.96206e+019
+539 128 4.95848e+019
+85 60 4.95404e+019
+244 210 4.94329e+019
+206 308 4.94109e+019
+138 131 4.93156e+019
+528 159 4.92939e+019
+529 395 4.92836e+019
+255 405 4.92373e+019
+96 37 4.91168e+019
+163 96 4.90988e+019
+257 391 4.9061e+019
+380 121 4.90323e+019
+560 272 4.89826e+019
+445 204 4.8956e+019
+187 308 4.89417e+019
+317 453 4.89369e+019
+301 106 4.89228e+019
+243 281 4.8799e+019
+20 317 4.87714e+019
+398 357 4.87601e+019
+44 474 4.87243e+019
+387 126 4.86967e+019
+197 148 4.85305e+019
+572 326 4.84646e+019
+204 435 4.84534e+019
+255 108 4.84376e+019
+130 74 4.83864e+019
+292 311 4.83851e+019
+203 293 4.83568e+019
+257 131 4.82644e+019
+35 134 4.8225e+019
+49 235 4.81724e+019
+342 141 4.80527e+019
+387 3 4.80419e+019
+274 77 4.79842e+019
+358 241 4.77565e+019
+449 63 4.77522e+019
+431 395 4.77482e+019
+188 143 4.77392e+019
+562 142 4.77183e+019
+257 250 4.76841e+019
+376 355 4.76712e+019
+274 205 4.75031e+019
+579 85 4.74905e+019
+56 171 4.74674e+019
+33 111 4.74128e+019
+497 463 4.73769e+019
+479 439 4.72279e+019
+74 186 4.70505e+019
+172 450 4.70224e+019
+191 58 4.70223e+019
+513 95 4.6997e+019
+46 220 4.6861e+019
+375 340 4.68122e+019
+225 50 4.67924e+019
+384 146 4.67697e+019
+138 139 4.67591e+019
+513 83 4.67438e+019
+325 14 4.67042e+019
+543 443 4.66627e+019
+569 203 4.66567e+019
+290 166 4.66362e+019
+255 182 4.65128e+019
+447 352 4.64807e+019
+486 376 4.64763e+019
+279 86 4.64037e+019
+34 114 4.64019e+019
+332 333 4.63599e+019
+229 14 4.63149e+019
+525 400 4.6288e+019
+222 115 4.62848e+019
+288 396 4.62726e+019
+566 39 4.62128e+019
+101 235 4.61136e+019
+480 83 4.6099e+019
+301 103 4.60952e+019
+410 263 4.60576e+019
+314 448 4.60318e+019
+142 179 4.60296e+019
+75 476 4.6011e+019
+104 306 4.59421e+019
+76 474 4.59085e+019
+122 51 4.58116e+019
+156 445 4.57018e+019
+363 302 4.56843e+019
+165 379 4.56016e+019
+93 276 4.55077e+019
+421 299 4.54823e+019
+95 374 4.54521e+019
+104 106 4.54204e+019
+202 220 4.53838e+019
+567 180 4.53162e+019
+347 342 4.52798e+019
+511 43 4.52778e+019
+382 337 4.52686e+019
+247 219 4.51584e+019
+2 435 4.51461e+019
+156 78 4.51328e+019
+9 476 4.51146e+019
+364 296 4.50519e+019
+456 161 4.50369e+019
+188 312 4.48687e+019
+11 126 4.48468e+019
+462 221 4.48305e+019
+88 183 4.4829e+019
+529 365 4.47651e+019
+500 474 4.47239e+019
+221 72 4.47097e+019
+550 223 4.45632e+019
+298 274 4.44934e+019
+116 360 4.44848e+019
+168 358 4.44465e+019
+444 126 4.44455e+019
+168 179 4.4439e+019
+464 27 4.43949e+019
+336 317 4.43663e+019
+228 128 4.43652e+019
+412 245 4.43146e+019
+214 93 4.42701e+019
+453 161 4.42677e+019
+413 264 4.42338e+019
+572 179 4.42227e+019
+219 211 4.40778e+019
+262 396 4.40205e+019
+195 83 4.39963e+019
+104 304 4.39653e+019
+66 252 4.39632e+019
+434 225 4.39618e+019
+151 111 4.39196e+019
+265 15 4.38888e+019
+274 220 4.3884e+019
+387 283 4.38303e+019
+196 81 4.38302e+019
+232 177 4.38208e+019
+200 330 4.38108e+019
+77 163 4.37713e+019
+370 106 4.37545e+019
+205 163 4.37471e+019
+199 293 4.36896e+019
+404 143 4.36591e+019
+465 161 4.3488e+019
+329 354 4.34869e+019
+116 306 4.34602e+019
+448 136 4.34185e+019
+469 204 4.34159e+019
+291 89 4.33946e+019
+507 60 4.33697e+019
+149 132 4.33572e+019
+298 86 4.3226e+019
+254 4 4.31528e+019
+385 162 4.3152e+019
+445 445 4.30957e+019
+254 75 4.30571e+019
+561 324 4.30028e+019
+125 261 4.287e+019
+100 95 4.28409e+019
+263 392 4.2765e+019
+251 152 4.27624e+019
+255 129 4.27571e+019
+215 97 4.27478e+019
+143 449 4.27059e+019
+151 317 4.27001e+019
+8 235 4.25714e+019
+150 231 4.25568e+019
+547 139 4.25424e+019
+467 28 4.24659e+019
+203 258 4.24565e+019
+360 140 4.24049e+019
+387 450 4.2368e+019
+414 261 4.23493e+019
+449 139 4.22108e+019
+504 259 4.22057e+019
+157 306 4.21371e+019
+580 245 4.20439e+019
+167 291 4.20391e+019
+312 299 4.19839e+019
+562 72 4.192e+019
+103 98 4.1902e+019
+75 132 4.18392e+019
+402 167 4.18332e+019
+382 320 4.18273e+019
+581 445 4.18264e+019
+371 159 4.18173e+019
+287 33 4.17971e+019
+365 165 4.17175e+019
+438 240 4.16529e+019
+84 170 4.16516e+019
+168 150 4.1627e+019
+178 40 4.15722e+019
+243 168 4.15417e+019
+437 110 4.15176e+019
+569 39 4.14779e+019
+23 48 4.14673e+019
+252 163 4.14609e+019
+503 167 4.14157e+019
+63 252 4.14068e+019
+163 253 4.13896e+019
+561 227 4.13486e+019
+538 94 4.13425e+019
+441 98 4.13088e+019
+421 7 4.12957e+019
+379 106 4.11937e+019
+411 418 4.116e+019
diff --git a/test_data/harriscorners/hc_msc_0.00_0.10_7_7.txt b/test_data/harriscorners/hc_msc_0.00_0.10_7_7.txt
new file mode 100644
index 0000000..1602345
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.10_7_7.txt
@@ -0,0 +1,1336 @@
+1335
+245 94 2.23905e+021
+81 29 1.94901e+021
+130 26 1.74076e+021
+237 20 1.65854e+021
+421 180 1.49323e+021
+261 298 1.35648e+021
+424 177 1.27291e+021
+26 9 1.21566e+021
+272 366 1.20353e+021
+422 177 1.20281e+021
+424 180 1.19181e+021
+30 8 1.14311e+021
+195 58 1.12412e+021
+76 257 1.11254e+021
+81 4 1.05874e+021
+543 365 1.02632e+021
+130 37 1.00977e+021
+525 24 9.99859e+020
+37 63 9.79255e+020
+282 113 9.74533e+020
+152 223 9.60171e+020
+510 124 9.51656e+020
+528 24 9.47064e+020
+65 344 9.34467e+020
+385 10 9.23402e+020
+240 92 9.06272e+020
+343 9 9.01463e+020
+253 12 8.69899e+020
+363 400 8.39108e+020
+424 322 8.1715e+020
+388 10 8.03605e+020
+483 178 7.95869e+020
+214 57 7.8905e+020
+77 3 7.85614e+020
+77 1 7.84171e+020
+542 14 7.79818e+020
+476 262 7.77446e+020
+485 338 7.77262e+020
+127 165 7.72098e+020
+302 185 7.6577e+020
+138 204 7.61183e+020
+102 222 7.48982e+020
+128 1 7.44245e+020
+361 395 7.35875e+020
+12 218 7.32633e+020
+34 139 7.26751e+020
+257 385 7.23681e+020
+55 30 7.23659e+020
+60 217 7.20979e+020
+357 259 7.20897e+020
+464 393 7.20489e+020
+359 294 7.18986e+020
+33 100 7.15869e+020
+60 40 7.11748e+020
+361 294 7.09917e+020
+293 16 7.08559e+020
+58 218 7.05433e+020
+451 339 7.04368e+020
+295 15 7.00353e+020
+175 110 6.98635e+020
+199 18 6.97467e+020
+121 43 6.9434e+020
+320 225 6.91753e+020
+320 314 6.84618e+020
+299 53 6.82309e+020
+391 294 6.80906e+020
+458 279 6.80759e+020
+519 60 6.79072e+020
+123 43 6.76338e+020
+418 438 6.67935e+020
+320 312 6.64146e+020
+428 2 6.60889e+020
+122 46 6.56132e+020
+241 70 6.50396e+020
+447 261 6.49869e+020
+330 128 6.42916e+020
+226 36 6.39733e+020
+528 20 6.38086e+020
+512 342 6.34358e+020
+224 39 6.20877e+020
+523 62 6.20376e+020
+434 112 6.19958e+020
+240 95 6.01981e+020
+163 215 6.01009e+020
+328 296 5.92684e+020
+83 77 5.92547e+020
+389 60 5.91158e+020
+359 334 5.9048e+020
+310 6 5.86889e+020
+302 181 5.8389e+020
+210 450 5.83259e+020
+126 26 5.83175e+020
+460 279 5.82299e+020
+224 420 5.78007e+020
+55 290 5.76472e+020
+403 121 5.7631e+020
+359 220 5.62752e+020
+533 185 5.62184e+020
+226 421 5.56829e+020
+448 299 5.56231e+020
+554 40 5.55595e+020
+36 145 5.54785e+020
+115 43 5.5208e+020
+359 129 5.50027e+020
+511 169 5.48688e+020
+179 110 5.46364e+020
+405 183 5.4578e+020
+383 6 5.44858e+020
+263 442 5.4304e+020
+43 26 5.42649e+020
+182 398 5.40576e+020
+145 6 5.40486e+020
+476 21 5.38215e+020
+539 14 5.37344e+020
+408 183 5.28122e+020
+272 280 5.26306e+020
+100 198 5.25474e+020
+61 203 5.22158e+020
+511 19 5.20709e+020
+580 16 5.19542e+020
+470 422 5.14656e+020
+342 264 5.12642e+020
+337 12 5.10272e+020
+103 60 5.08843e+020
+364 251 5.07824e+020
+123 186 5.07344e+020
+477 19 5.06555e+020
+576 16 5.06218e+020
+139 109 5.05762e+020
+325 341 5.03057e+020
+427 118 5.01875e+020
+448 296 5.01557e+020
+284 402 5.01282e+020
+265 446 4.94688e+020
+449 204 4.93976e+020
+423 332 4.924e+020
+399 263 4.91906e+020
+85 148 4.91857e+020
+386 178 4.91392e+020
+302 215 4.91092e+020
+410 353 4.89393e+020
+528 186 4.89118e+020
+364 143 4.87368e+020
+490 139 4.85272e+020
+150 306 4.82739e+020
+436 397 4.8251e+020
+232 125 4.82054e+020
+327 141 4.79797e+020
+87 254 4.78881e+020
+248 399 4.7858e+020
+436 68 4.76904e+020
+243 202 4.75498e+020
+66 216 4.68328e+020
+126 254 4.68323e+020
+196 127 4.67936e+020
+36 173 4.66421e+020
+528 102 4.6211e+020
+403 118 4.60241e+020
+390 143 4.60088e+020
+352 321 4.59891e+020
+345 339 4.59398e+020
+447 397 4.58035e+020
+48 26 4.56621e+020
+453 204 4.56579e+020
+343 338 4.56469e+020
+3 65 4.5624e+020
+174 40 4.56063e+020
+513 262 4.56026e+020
+301 205 4.55854e+020
+143 324 4.54798e+020
+159 75 4.51806e+020
+387 220 4.51034e+020
+112 392 4.50994e+020
+545 59 4.50954e+020
+211 436 4.49396e+020
+329 258 4.49015e+020
+514 346 4.48706e+020
+64 318 4.44993e+020
+432 276 4.40707e+020
+69 476 4.40382e+020
+222 433 4.3906e+020
+135 213 4.38158e+020
+448 166 4.37743e+020
+120 185 4.37432e+020
+380 6 4.3424e+020
+165 327 4.32765e+020
+546 41 4.31911e+020
+444 118 4.30864e+020
+41 217 4.29821e+020
+345 264 4.29625e+020
+416 9 4.28919e+020
+302 165 4.27403e+020
+415 22 4.26694e+020
+96 477 4.25931e+020
+259 165 4.25687e+020
+509 454 4.25484e+020
+544 168 4.23755e+020
+165 182 4.23116e+020
+57 4 4.23036e+020
+104 3 4.23015e+020
+211 185 4.22781e+020
+149 223 4.207e+020
+70 25 4.20699e+020
+107 43 4.16285e+020
+562 461 4.16043e+020
+215 280 4.14565e+020
+109 240 4.13148e+020
+104 198 4.1277e+020
+168 196 4.12186e+020
+479 15 4.12037e+020
+229 36 4.11528e+020
+88 148 4.10996e+020
+47 98 4.10338e+020
+128 187 4.08006e+020
+4 45 4.07439e+020
+49 151 4.06762e+020
+252 424 4.06246e+020
+413 256 4.06034e+020
+389 21 4.04433e+020
+218 105 4.03357e+020
+45 339 4.02924e+020
+79 79 4.0136e+020
+215 71 4.00479e+020
+76 40 3.98185e+020
+367 144 3.9763e+020
+419 8 3.97357e+020
+42 63 3.95314e+020
+40 296 3.94481e+020
+545 3 3.93616e+020
+225 181 3.92397e+020
+129 74 3.92324e+020
+143 311 3.90784e+020
+256 151 3.90637e+020
+437 304 3.90078e+020
+133 213 3.87386e+020
+169 56 3.86295e+020
+313 148 3.85866e+020
+541 124 3.84231e+020
+430 117 3.83099e+020
+500 159 3.82174e+020
+209 21 3.82107e+020
+508 166 3.80318e+020
+62 60 3.79181e+020
+176 260 3.77985e+020
+235 346 3.76178e+020
+346 240 3.76049e+020
+65 60 3.7403e+020
+158 72 3.7376e+020
+233 345 3.73745e+020
+123 197 3.73433e+020
+371 161 3.72794e+020
+246 144 3.72407e+020
+293 26 3.71598e+020
+272 316 3.71096e+020
+453 207 3.70509e+020
+506 16 3.70465e+020
+54 66 3.70412e+020
+344 108 3.69282e+020
+479 296 3.68434e+020
+174 114 3.68013e+020
+328 255 3.67321e+020
+413 259 3.671e+020
+360 142 3.66804e+020
+222 179 3.66595e+020
+7 10 3.65492e+020
+32 270 3.65171e+020
+132 74 3.64914e+020
+544 457 3.61496e+020
+548 162 3.60139e+020
+481 299 3.59728e+020
+107 29 3.59292e+020
+66 476 3.59068e+020
+451 374 3.58157e+020
+355 255 3.58034e+020
+107 39 3.57857e+020
+165 179 3.56222e+020
+136 173 3.55156e+020
+298 181 3.55109e+020
+335 436 3.54853e+020
+59 184 3.54505e+020
+498 225 3.54395e+020
+404 188 3.54154e+020
+218 98 3.53499e+020
+412 298 3.52768e+020
+407 198 3.52223e+020
+221 37 3.51443e+020
+517 20 3.50536e+020
+52 42 3.49786e+020
+377 120 3.49516e+020
+430 148 3.48719e+020
+365 105 3.47933e+020
+125 364 3.47528e+020
+488 44 3.47514e+020
+432 147 3.47471e+020
+261 223 3.46431e+020
+566 42 3.4602e+020
+168 286 3.45963e+020
+249 402 3.45628e+020
+510 129 3.45621e+020
+282 72 3.4487e+020
+140 19 3.44615e+020
+313 84 3.42675e+020
+123 199 3.42541e+020
+111 110 3.42388e+020
+25 62 3.4214e+020
+139 174 3.42025e+020
+512 221 3.41889e+020
+345 350 3.40856e+020
+278 220 3.4075e+020
+103 77 3.40213e+020
+102 360 3.3877e+020
+557 463 3.37973e+020
+100 79 3.37826e+020
+389 164 3.37638e+020
+394 65 3.37243e+020
+260 220 3.36788e+020
+185 36 3.36533e+020
+329 13 3.36435e+020
+329 11 3.36313e+020
+220 180 3.36279e+020
+134 96 3.36029e+020
+462 42 3.35877e+020
+332 294 3.32997e+020
+284 72 3.32633e+020
+9 9 3.31641e+020
+473 23 3.31423e+020
+46 355 3.29975e+020
+392 218 3.29967e+020
+210 35 3.2898e+020
+548 164 3.28199e+020
+263 402 3.26687e+020
+388 16 3.26481e+020
+165 357 3.26251e+020
+525 38 3.25915e+020
+333 258 3.25518e+020
+549 40 3.24957e+020
+256 139 3.24482e+020
+164 73 3.24248e+020
+483 329 3.24016e+020
+463 280 3.23582e+020
+193 218 3.22435e+020
+168 326 3.22037e+020
+163 277 3.21959e+020
+494 139 3.21402e+020
+448 444 3.21e+020
+57 365 3.19785e+020
+524 187 3.18731e+020
+300 264 3.17566e+020
+56 183 3.17342e+020
+183 36 3.16891e+020
+196 124 3.16667e+020
+309 371 3.16411e+020
+358 66 3.16303e+020
+96 448 3.16098e+020
+446 8 3.15107e+020
+507 6 3.14909e+020
+186 289 3.14667e+020
+153 195 3.13132e+020
+470 238 3.12393e+020
+48 12 3.12139e+020
+166 110 3.11165e+020
+63 236 3.11113e+020
+228 291 3.10444e+020
+91 199 3.10413e+020
+362 7 3.08665e+020
+134 131 3.0838e+020
+220 290 3.06138e+020
+265 30 3.06047e+020
+507 169 3.03928e+020
+248 316 3.03128e+020
+485 44 3.0297e+020
+333 66 3.00625e+020
+297 69 2.99924e+020
+423 49 2.99543e+020
+449 117 2.99506e+020
+486 58 2.98863e+020
+164 313 2.9849e+020
+344 111 2.97452e+020
+386 244 2.97441e+020
+409 64 2.96482e+020
+52 99 2.96138e+020
+44 98 2.96012e+020
+65 235 2.95522e+020
+420 48 2.95332e+020
+436 379 2.95301e+020
+386 294 2.95184e+020
+482 364 2.94721e+020
+437 319 2.93527e+020
+56 44 2.93457e+020
+305 439 2.93419e+020
+88 216 2.9323e+020
+207 222 2.93104e+020
+137 178 2.92914e+020
+54 222 2.92274e+020
+521 184 2.92188e+020
+452 62 2.92105e+020
+163 110 2.9208e+020
+483 58 2.92046e+020
+160 139 2.91805e+020
+88 207 2.91607e+020
+575 459 2.9148e+020
+140 181 2.91393e+020
+364 101 2.8942e+020
+304 190 2.89213e+020
+119 115 2.89106e+020
+284 198 2.88673e+020
+8 46 2.88646e+020
+473 5 2.88632e+020
+276 353 2.88599e+020
+245 207 2.8768e+020
+357 63 2.86628e+020
+420 46 2.86394e+020
+448 438 2.86301e+020
+29 30 2.85699e+020
+474 247 2.84932e+020
+160 137 2.84919e+020
+512 100 2.84777e+020
+413 162 2.84742e+020
+243 166 2.83618e+020
+552 378 2.8357e+020
+60 134 2.83322e+020
+348 181 2.83286e+020
+86 213 2.83022e+020
+144 16 2.82955e+020
+404 266 2.82088e+020
+47 81 2.81016e+020
+169 18 2.80254e+020
+91 196 2.79322e+020
+324 294 2.78625e+020
+253 139 2.77983e+020
+463 27 2.77654e+020
+190 360 2.77438e+020
+325 426 2.76134e+020
+270 73 2.75943e+020
+258 161 2.75713e+020
+249 365 2.74009e+020
+45 12 2.73884e+020
+190 350 2.72743e+020
+193 216 2.71255e+020
+88 368 2.70827e+020
+165 242 2.70721e+020
+298 179 2.70456e+020
+112 344 2.70313e+020
+295 269 2.69057e+020
+451 438 2.6902e+020
+301 105 2.68784e+020
+155 317 2.68218e+020
+70 148 2.67646e+020
+402 266 2.67641e+020
+329 90 2.67544e+020
+538 406 2.67067e+020
+439 339 2.66676e+020
+269 70 2.65757e+020
+233 13 2.65361e+020
+414 65 2.65313e+020
+541 128 2.643e+020
+343 122 2.64061e+020
+92 254 2.63965e+020
+530 144 2.62733e+020
+223 218 2.62613e+020
+273 181 2.62469e+020
+340 108 2.62452e+020
+575 13 2.62188e+020
+426 378 2.62002e+020
+484 142 2.61764e+020
+84 144 2.61725e+020
+450 87 2.60555e+020
+346 298 2.60319e+020
+47 83 2.60044e+020
+271 167 2.59101e+020
+571 446 2.5849e+020
+35 267 2.58013e+020
+110 95 2.57385e+020
+247 207 2.57089e+020
+165 98 2.57039e+020
+402 44 2.56719e+020
+455 58 2.56331e+020
+493 81 2.56266e+020
+335 218 2.55929e+020
+110 169 2.55219e+020
+423 46 2.54143e+020
+155 235 2.53935e+020
+110 179 2.53774e+020
+373 392 2.53681e+020
+260 225 2.5343e+020
+124 271 2.53183e+020
+332 90 2.53098e+020
+208 225 2.53092e+020
+166 244 2.51914e+020
+117 426 2.5173e+020
+542 209 2.5173e+020
+114 95 2.51723e+020
+448 218 2.5168e+020
+296 332 2.51666e+020
+279 129 2.50284e+020
+356 321 2.49802e+020
+107 429 2.49684e+020
+445 123 2.49232e+020
+87 144 2.47917e+020
+232 17 2.47772e+020
+503 164 2.47528e+020
+49 155 2.4725e+020
+234 161 2.47146e+020
+471 212 2.47124e+020
+330 67 2.46956e+020
+276 331 2.46608e+020
+394 164 2.45914e+020
+457 42 2.45369e+020
+86 311 2.45187e+020
+431 319 2.45174e+020
+472 266 2.45092e+020
+83 134 2.44955e+020
+490 2 2.43673e+020
+407 45 2.43187e+020
+343 124 2.42857e+020
+125 259 2.42845e+020
+384 260 2.42744e+020
+309 440 2.42392e+020
+477 6 2.4194e+020
+455 85 2.41779e+020
+389 66 2.40815e+020
+377 67 2.39897e+020
+354 268 2.39482e+020
+421 298 2.39201e+020
+433 158 2.39124e+020
+512 219 2.38425e+020
+412 44 2.38107e+020
+56 78 2.37542e+020
+578 43 2.36626e+020
+322 426 2.36501e+020
+35 31 2.35992e+020
+313 80 2.35966e+020
+190 312 2.35789e+020
+510 174 2.34966e+020
+489 58 2.34889e+020
+142 393 2.34554e+020
+193 16 2.33441e+020
+280 365 2.33219e+020
+257 147 2.33214e+020
+68 419 2.33123e+020
+162 169 2.32655e+020
+283 395 2.32352e+020
+85 73 2.32339e+020
+496 81 2.31079e+020
+538 97 2.31042e+020
+172 19 2.3092e+020
+287 211 2.30421e+020
+162 97 2.29308e+020
+93 216 2.29276e+020
+119 447 2.28586e+020
+83 475 2.28543e+020
+431 81 2.28247e+020
+398 266 2.28246e+020
+159 182 2.27878e+020
+64 232 2.27606e+020
+498 81 2.27388e+020
+159 144 2.27241e+020
+468 139 2.27191e+020
+440 379 2.2704e+020
+9 102 2.26757e+020
+380 67 2.26427e+020
+217 147 2.26423e+020
+326 89 2.2626e+020
+465 196 2.26233e+020
+227 186 2.25708e+020
+270 53 2.25691e+020
+27 30 2.25519e+020
+487 263 2.25389e+020
+357 11 2.24852e+020
+342 47 2.2459e+020
+164 209 2.24213e+020
+168 181 2.23438e+020
+473 203 2.23007e+020
+385 326 2.2226e+020
+101 5 2.22127e+020
+353 294 2.2186e+020
+281 221 2.21432e+020
+523 123 2.20992e+020
+367 301 2.20953e+020
+271 182 2.20822e+020
+392 49 2.20673e+020
+357 282 2.20597e+020
+454 116 2.20538e+020
+70 96 2.20006e+020
+471 269 2.19979e+020
+349 146 2.19577e+020
+345 276 2.19206e+020
+378 337 2.1918e+020
+167 107 2.19132e+020
+339 166 2.18741e+020
+529 400 2.18614e+020
+244 293 2.18166e+020
+78 198 2.18097e+020
+190 206 2.17691e+020
+418 82 2.1738e+020
+330 213 2.17355e+020
+221 14 2.17093e+020
+10 78 2.17076e+020
+409 163 2.16849e+020
+155 56 2.16827e+020
+92 257 2.16817e+020
+41 81 2.16467e+020
+333 202 2.1631e+020
+574 178 2.16241e+020
+175 20 2.16042e+020
+289 139 2.15441e+020
+274 132 2.14751e+020
+118 76 2.14337e+020
+538 101 2.13985e+020
+241 421 2.13622e+020
+119 130 2.13435e+020
+217 425 2.13204e+020
+33 219 2.12884e+020
+213 32 2.12835e+020
+259 34 2.12728e+020
+516 74 2.12631e+020
+86 61 2.12411e+020
+145 161 2.1234e+020
+486 139 2.1207e+020
+570 451 2.11937e+020
+107 76 2.11732e+020
+569 382 2.11356e+020
+126 96 2.11014e+020
+396 266 2.10538e+020
+524 426 2.10493e+020
+340 164 2.10015e+020
+105 222 2.09297e+020
+277 328 2.09216e+020
+521 264 2.09068e+020
+9 100 2.08911e+020
+196 190 2.08811e+020
+269 186 2.08522e+020
+522 426 2.08478e+020
+518 263 2.08254e+020
+50 288 2.07638e+020
+191 292 2.07617e+020
+528 363 2.07119e+020
+282 391 2.06954e+020
+139 99 2.06621e+020
+424 399 2.06065e+020
+91 290 2.06058e+020
+292 88 2.0601e+020
+211 32 2.05636e+020
+295 421 2.05626e+020
+389 326 2.05193e+020
+167 105 2.0517e+020
+151 1 2.04647e+020
+260 236 2.04583e+020
+541 133 2.03692e+020
+230 16 2.03664e+020
+444 451 2.03262e+020
+163 62 2.0295e+020
+291 50 2.02838e+020
+287 397 2.02772e+020
+249 361 2.02718e+020
+18 343 2.02527e+020
+138 96 2.0229e+020
+464 199 2.02081e+020
+126 77 2.01845e+020
+476 341 2.01539e+020
+155 112 2.01458e+020
+161 185 2.00646e+020
+273 219 2.00483e+020
+516 42 2.00169e+020
+38 82 1.99216e+020
+202 313 1.99079e+020
+155 114 1.98941e+020
+153 112 1.98738e+020
+482 451 1.98735e+020
+270 290 1.9803e+020
+525 422 1.97534e+020
+158 112 1.97515e+020
+405 41 1.97301e+020
+205 309 1.97048e+020
+157 198 1.9694e+020
+524 424 1.96919e+020
+437 240 1.96387e+020
+577 245 1.96329e+020
+109 2 1.96038e+020
+419 66 1.95861e+020
+468 208 1.954e+020
+92 445 1.95219e+020
+298 274 1.95046e+020
+79 474 1.94969e+020
+120 128 1.94811e+020
+215 96 1.94538e+020
+149 302 1.94453e+020
+333 131 1.94184e+020
+231 199 1.93904e+020
+437 280 1.93715e+020
+110 136 1.9368e+020
+571 406 1.93325e+020
+170 108 1.93208e+020
+547 139 1.9289e+020
+192 144 1.9284e+020
+86 63 1.92501e+020
+441 239 1.92447e+020
+58 254 1.9228e+020
+337 264 1.92017e+020
+247 219 1.91725e+020
+441 24 1.91401e+020
+272 170 1.91342e+020
+526 361 1.9129e+020
+104 307 1.91183e+020
+220 18 1.91045e+020
+279 132 1.90354e+020
+214 94 1.90354e+020
+325 258 1.90271e+020
+260 238 1.89688e+020
+182 343 1.89588e+020
+340 122 1.89554e+020
+221 151 1.89455e+020
+196 255 1.89137e+020
+88 364 1.88923e+020
+432 381 1.88487e+020
+465 424 1.88409e+020
+467 238 1.88362e+020
+468 204 1.88303e+020
+72 165 1.88275e+020
+272 285 1.88196e+020
+459 264 1.88164e+020
+470 121 1.88134e+020
+325 165 1.88085e+020
+154 295 1.88058e+020
+75 475 1.87977e+020
+53 13 1.87551e+020
+572 178 1.875e+020
+520 121 1.87377e+020
+273 295 1.87284e+020
+528 222 1.87144e+020
+61 370 1.87089e+020
+113 2 1.86916e+020
+319 187 1.86751e+020
+265 311 1.86459e+020
+356 338 1.8644e+020
+405 376 1.86365e+020
+337 62 1.85717e+020
+583 38 1.85456e+020
+131 71 1.85207e+020
+164 206 1.85166e+020
+371 90 1.84929e+020
+91 60 1.84742e+020
+438 467 1.84683e+020
+196 132 1.84627e+020
+563 323 1.8458e+020
+57 373 1.84569e+020
+206 435 1.84425e+020
+128 191 1.84379e+020
+241 195 1.84136e+020
+191 210 1.84027e+020
+86 363 1.84013e+020
+562 145 1.83937e+020
+196 194 1.836e+020
+186 20 1.83378e+020
+531 364 1.83343e+020
+372 86 1.83182e+020
+363 357 1.83181e+020
+355 342 1.82621e+020
+406 65 1.82472e+020
+90 375 1.82391e+020
+458 115 1.82218e+020
+280 136 1.82079e+020
+514 119 1.82036e+020
+74 477 1.81549e+020
+174 92 1.8136e+020
+198 132 1.81e+020
+318 459 1.80976e+020
+514 381 1.80905e+020
+295 273 1.80405e+020
+221 149 1.80273e+020
+220 184 1.79776e+020
+380 107 1.79762e+020
+265 16 1.7958e+020
+378 107 1.79476e+020
+374 3 1.79313e+020
+444 114 1.79018e+020
+64 370 1.7898e+020
+418 283 1.78888e+020
+103 237 1.78829e+020
+185 132 1.7815e+020
+33 110 1.77899e+020
+280 204 1.77844e+020
+328 181 1.77797e+020
+377 182 1.77674e+020
+512 297 1.77627e+020
+110 262 1.77581e+020
+345 47 1.77574e+020
+513 77 1.77477e+020
+482 440 1.77294e+020
+48 234 1.77177e+020
+222 113 1.77134e+020
+577 39 1.76546e+020
+174 312 1.76482e+020
+102 164 1.76292e+020
+62 368 1.7628e+020
+459 267 1.76127e+020
+279 52 1.76097e+020
+287 165 1.7603e+020
+83 136 1.76005e+020
+262 285 1.75963e+020
+130 478 1.75946e+020
+481 84 1.75334e+020
+167 116 1.75308e+020
+281 438 1.74837e+020
+527 347 1.74618e+020
+191 329 1.74005e+020
+364 180 1.73817e+020
+357 166 1.73387e+020
+282 419 1.73154e+020
+167 118 1.73006e+020
+575 100 1.72744e+020
+157 218 1.72742e+020
+157 91 1.72653e+020
+480 440 1.72653e+020
+537 393 1.72609e+020
+453 102 1.72587e+020
+228 130 1.72519e+020
+22 48 1.7244e+020
+306 449 1.724e+020
+9 234 1.72275e+020
+569 422 1.72174e+020
+134 147 1.71951e+020
+107 108 1.71646e+020
+178 330 1.71363e+020
+278 144 1.71165e+020
+440 456 1.70459e+020
+283 52 1.69797e+020
+504 261 1.69763e+020
+394 215 1.69663e+020
+305 194 1.69528e+020
+41 355 1.69508e+020
+313 76 1.69301e+020
+512 81 1.69201e+020
+189 144 1.68989e+020
+216 175 1.68923e+020
+91 276 1.68826e+020
+359 53 1.68609e+020
+157 194 1.6804e+020
+187 265 1.67699e+020
+574 421 1.67509e+020
+524 399 1.67038e+020
+529 397 1.66633e+020
+186 95 1.66493e+020
+432 270 1.66191e+020
+494 158 1.66143e+020
+191 189 1.65762e+020
+83 171 1.65701e+020
+280 419 1.65603e+020
+334 62 1.65569e+020
+234 199 1.65329e+020
+55 145 1.65105e+020
+183 95 1.64809e+020
+137 136 1.64798e+020
+537 262 1.64588e+020
+282 268 1.64538e+020
+276 320 1.64519e+020
+494 160 1.64132e+020
+178 273 1.63951e+020
+456 177 1.6386e+020
+565 323 1.63665e+020
+89 213 1.63601e+020
+455 162 1.6341e+020
+283 195 1.63298e+020
+110 133 1.62931e+020
+39 287 1.62564e+020
+108 138 1.6236e+020
+150 112 1.62203e+020
+413 246 1.6207e+020
+567 180 1.61933e+020
+166 20 1.61732e+020
+564 160 1.61161e+020
+503 156 1.60998e+020
+494 58 1.60589e+020
+494 60 1.60573e+020
+151 232 1.603e+020
+512 295 1.59708e+020
+222 116 1.59553e+020
+433 85 1.59374e+020
+561 142 1.59296e+020
+70 130 1.59129e+020
+389 53 1.59121e+020
+17 434 1.59101e+020
+330 64 1.59013e+020
+229 282 1.58735e+020
+111 167 1.58489e+020
+227 112 1.5842e+020
+162 119 1.58267e+020
+506 361 1.58265e+020
+156 95 1.58196e+020
+261 200 1.58101e+020
+478 243 1.58039e+020
+405 11 1.57975e+020
+146 449 1.57715e+020
+376 355 1.57657e+020
+179 164 1.57565e+020
+525 347 1.57479e+020
+216 180 1.57218e+020
+362 244 1.57208e+020
+351 273 1.57181e+020
+498 463 1.5694e+020
+229 288 1.56869e+020
+471 83 1.56837e+020
+292 335 1.56776e+020
+325 132 1.56757e+020
+343 141 1.56651e+020
+433 281 1.56554e+020
+209 395 1.56158e+020
+208 14 1.55768e+020
+405 80 1.55689e+020
+160 146 1.55347e+020
+343 200 1.55308e+020
+525 173 1.55146e+020
+130 475 1.54953e+020
+211 395 1.54873e+020
+392 21 1.54821e+020
+453 178 1.54737e+020
+120 54 1.54602e+020
+298 87 1.54417e+020
+276 182 1.54273e+020
+85 40 1.54237e+020
+261 202 1.54166e+020
+20 316 1.54147e+020
+132 237 1.54146e+020
+242 33 1.53903e+020
+66 26 1.53711e+020
+168 179 1.53486e+020
+238 34 1.53485e+020
+386 4 1.53463e+020
+340 391 1.53454e+020
+261 369 1.53296e+020
+220 315 1.5295e+020
+299 269 1.52944e+020
+256 220 1.52925e+020
+527 344 1.52911e+020
+195 84 1.52875e+020
+200 129 1.5278e+020
+105 359 1.5268e+020
+450 180 1.52679e+020
+327 64 1.52522e+020
+36 200 1.52443e+020
+28 136 1.52396e+020
+360 164 1.52218e+020
+173 240 1.52014e+020
+561 226 1.51735e+020
+450 140 1.51676e+020
+306 259 1.5164e+020
+391 53 1.51637e+020
+366 164 1.51547e+020
+387 127 1.51524e+020
+381 121 1.51478e+020
+591 19 1.51183e+020
+332 413 1.51085e+020
+597 364 1.5085e+020
+298 410 1.50768e+020
+124 126 1.50594e+020
+302 333 1.50114e+020
+503 143 1.49619e+020
+174 95 1.49254e+020
+65 182 1.49251e+020
+187 313 1.4923e+020
+450 178 1.48878e+020
+362 66 1.48878e+020
+354 12 1.48833e+020
+543 162 1.48823e+020
+204 161 1.48787e+020
+289 136 1.48742e+020
+218 115 1.4857e+020
+33 164 1.48443e+020
+525 344 1.48266e+020
+528 431 1.48176e+020
+98 257 1.48172e+020
+493 340 1.48171e+020
+285 298 1.48015e+020
+497 66 1.4797e+020
+160 21 1.47932e+020
+279 49 1.47893e+020
+499 266 1.47762e+020
+215 124 1.47617e+020
+211 13 1.47592e+020
+433 44 1.47411e+020
+325 221 1.47298e+020
+296 410 1.47149e+020
+142 449 1.47117e+020
+226 198 1.46953e+020
+359 243 1.46899e+020
+360 369 1.46844e+020
+479 286 1.46643e+020
+267 290 1.46316e+020
+335 390 1.46283e+020
+170 105 1.46252e+020
+258 392 1.46127e+020
+182 290 1.45563e+020
+188 278 1.45428e+020
+503 362 1.45039e+020
+417 165 1.44548e+020
+473 41 1.44389e+020
+291 262 1.44252e+020
+319 166 1.44047e+020
+34 114 1.44008e+020
+148 226 1.43969e+020
+377 70 1.4382e+020
+537 93 1.43765e+020
+483 25 1.43661e+020
+324 15 1.43519e+020
+501 362 1.43466e+020
+204 163 1.43116e+020
+220 212 1.42925e+020
+514 203 1.42919e+020
+576 330 1.42832e+020
+425 3 1.42779e+020
+170 240 1.42494e+020
+400 168 1.42396e+020
+156 40 1.42375e+020
+346 342 1.42249e+020
+468 28 1.41968e+020
+242 281 1.41946e+020
+67 254 1.41551e+020
+346 273 1.41533e+020
+292 337 1.41431e+020
+123 124 1.41299e+020
+387 124 1.41115e+020
+275 204 1.40847e+020
+106 32 1.40787e+020
+257 133 1.40715e+020
+12 81 1.40644e+020
+198 111 1.40511e+020
+580 345 1.40445e+020
+339 473 1.404e+020
+501 320 1.40388e+020
+114 169 1.40171e+020
+502 460 1.40124e+020
+487 375 1.39983e+020
+250 34 1.399e+020
+107 182 1.39695e+020
+188 109 1.39554e+020
+330 26 1.39269e+020
+333 331 1.3922e+020
+382 102 1.39202e+020
+335 408 1.39147e+020
+418 449 1.39065e+020
+240 155 1.39028e+020
+544 440 1.38828e+020
+242 190 1.38757e+020
+77 163 1.3866e+020
+291 266 1.38519e+020
+366 336 1.38312e+020
+176 95 1.38288e+020
+471 42 1.38114e+020
+190 109 1.38099e+020
+276 179 1.38027e+020
+267 288 1.37938e+020
+20 286 1.37518e+020
+388 139 1.37441e+020
+77 271 1.37392e+020
+225 397 1.37316e+020
+563 320 1.36767e+020
+448 123 1.36734e+020
+267 20 1.36666e+020
+215 289 1.36542e+020
+237 416 1.36458e+020
+255 107 1.36269e+020
+179 379 1.36229e+020
+250 220 1.36219e+020
+509 57 1.3617e+020
+53 360 1.36117e+020
+357 164 1.35935e+020
+479 403 1.35901e+020
+513 442 1.35437e+020
+447 351 1.35425e+020
+51 39 1.35422e+020
+191 122 1.35336e+020
+1 156 1.34937e+020
+541 248 1.34813e+020
+502 22 1.34692e+020
+336 405 1.3469e+020
+207 161 1.34512e+020
+9 32 1.34111e+020
+247 34 1.34077e+020
+321 11 1.33932e+020
+547 218 1.33731e+020
+436 237 1.3363e+020
+214 436 1.33585e+020
+168 433 1.33496e+020
+542 246 1.33252e+020
+64 253 1.33225e+020
+485 6 1.33078e+020
+388 2 1.33021e+020
+74 196 1.32949e+020
+53 358 1.32849e+020
+559 80 1.32821e+020
+572 326 1.32648e+020
+382 320 1.32623e+020
+329 354 1.326e+020
+86 134 1.32581e+020
+584 346 1.32527e+020
+247 105 1.32508e+020
+56 170 1.32491e+020
+430 151 1.32405e+020
+452 162 1.32401e+020
+422 165 1.32396e+020
+390 123 1.32261e+020
+180 155 1.32252e+020
+486 3 1.32155e+020
+372 83 1.31877e+020
+593 425 1.31667e+020
+533 397 1.31614e+020
+51 453 1.31453e+020
+423 64 1.31298e+020
+250 150 1.31247e+020
+183 381 1.31124e+020
+254 78 1.30989e+020
+570 455 1.30935e+020
+390 118 1.30933e+020
+261 140 1.30911e+020
+562 149 1.30796e+020
+376 82 1.30693e+020
+31 235 1.3069e+020
+368 82 1.30634e+020
+78 133 1.30589e+020
+298 25 1.30539e+020
+510 61 1.30538e+020
+165 379 1.30376e+020
+226 123 1.30271e+020
+298 398 1.30178e+020
+89 181 1.29979e+020
+222 72 1.29885e+020
+94 375 1.29553e+020
+189 357 1.29541e+020
+432 151 1.29432e+020
+459 376 1.2933e+020
+307 428 1.29313e+020
+163 252 1.29186e+020
+71 408 1.29065e+020
+344 183 1.28692e+020
+147 97 1.28689e+020
+224 128 1.28653e+020
+175 272 1.28642e+020
+523 77 1.28518e+020
+504 258 1.2848e+020
+407 82 1.28378e+020
+311 299 1.28363e+020
+97 39 1.28355e+020
+176 164 1.28243e+020
+103 258 1.28134e+020
+268 88 1.28035e+020
+396 104 1.2782e+020
+250 31 1.2782e+020
+186 101 1.2776e+020
+407 80 1.27619e+020
+56 172 1.27468e+020
+209 419 1.27277e+020
+579 85 1.27157e+020
+257 130 1.27064e+020
+597 33 1.27054e+020
+525 281 1.26921e+020
+128 307 1.26791e+020
+183 379 1.26602e+020
+332 334 1.26565e+020
+466 123 1.26563e+020
+455 48 1.26494e+020
+308 358 1.26482e+020
+96 60 1.26457e+020
+288 348 1.26417e+020
+217 429 1.26378e+020
+382 338 1.26367e+020
+48 162 1.26286e+020
+258 369 1.26279e+020
+509 442 1.26126e+020
+275 198 1.2605e+020
+511 442 1.25957e+020
+162 152 1.25951e+020
+310 446 1.25929e+020
+392 159 1.25761e+020
+232 31 1.25635e+020
+149 232 1.25504e+020
+212 146 1.25422e+020
+262 393 1.25418e+020
+158 305 1.25393e+020
+243 30 1.25178e+020
+541 381 1.2501e+020
+533 399 1.2494e+020
+183 316 1.24851e+020
+207 163 1.24849e+020
+222 87 1.24802e+020
+218 208 1.24784e+020
+543 217 1.24592e+020
+18 235 1.24541e+020
+391 450 1.24342e+020
+142 99 1.24299e+020
+103 260 1.2425e+020
+247 107 1.24186e+020
+147 99 1.24048e+020
+506 380 1.24046e+020
+111 338 1.24039e+020
+577 52 1.23965e+020
+155 162 1.2375e+020
+582 446 1.23707e+020
+104 35 1.23603e+020
+294 141 1.2345e+020
+56 71 1.23354e+020
+429 42 1.23327e+020
+389 449 1.23249e+020
+126 307 1.23055e+020
+161 126 1.23013e+020
+94 80 1.22968e+020
+480 166 1.22879e+020
+262 397 1.22821e+020
+394 104 1.22646e+020
+451 21 1.226e+020
+533 394 1.22574e+020
+37 166 1.22432e+020
+156 78 1.22384e+020
+539 186 1.22184e+020
+26 44 1.2205e+020
+40 200 1.22042e+020
+502 123 1.22004e+020
+272 64 1.2188e+020
+299 255 1.21816e+020
+327 105 1.21794e+020
+337 367 1.21614e+020
+318 452 1.21567e+020
+161 33 1.21545e+020
+255 5 1.21527e+020
+413 264 1.2145e+020
+313 300 1.21438e+020
+185 135 1.21085e+020
+376 240 1.2107e+020
+542 443 1.21027e+020
+433 240 1.20952e+020
+17 65 1.2075e+020
+240 327 1.20718e+020
+362 63 1.20689e+020
+102 96 1.20592e+020
+93 213 1.20577e+020
+387 450 1.20158e+020
+503 18 1.20105e+020
+337 181 1.20077e+020
+430 89 1.20054e+020
+315 446 1.20019e+020
+96 21 1.19756e+020
+183 142 1.19699e+020
+121 215 1.19681e+020
+47 203 1.1965e+020
+383 25 1.19529e+020
+87 181 1.19252e+020
+43 408 1.19222e+020
+166 292 1.18995e+020
+429 223 1.18974e+020
+115 359 1.18881e+020
+150 397 1.18877e+020
+217 414 1.18835e+020
+149 132 1.18725e+020
+395 160 1.1865e+020
+394 107 1.18512e+020
+181 168 1.1843e+020
+99 164 1.1837e+020
+418 260 1.18123e+020
+417 87 1.1792e+020
+382 413 1.17877e+020
+155 445 1.17825e+020
+51 230 1.17787e+020
+332 408 1.17724e+020
+107 382 1.17689e+020
+118 95 1.1768e+020
+255 459 1.17617e+020
+111 429 1.17584e+020
+327 52 1.17383e+020
+39 238 1.17376e+020
+374 240 1.17201e+020
+256 104 1.17198e+020
+459 304 1.17149e+020
+233 406 1.1706e+020
+438 108 1.16989e+020
+212 150 1.16971e+020
+511 352 1.16916e+020
+157 122 1.16886e+020
+236 403 1.167e+020
+383 411 1.16679e+020
+101 40 1.16564e+020
+225 51 1.16419e+020
+566 144 1.16378e+020
+224 125 1.16277e+020
+174 187 1.15966e+020
+99 94 1.1591e+020
+14 435 1.15878e+020
+572 330 1.15543e+020
+309 54 1.15537e+020
+291 311 1.15535e+020
+145 23 1.15456e+020
+148 397 1.15355e+020
+200 294 1.15349e+020
+339 182 1.15267e+020
+514 403 1.15257e+020
+447 21 1.15254e+020
+540 40 1.15153e+020
+351 255 1.15122e+020
+46 408 1.15095e+020
+400 280 1.15084e+020
+22 322 1.15033e+020
+597 273 1.14987e+020
+434 242 1.14856e+020
+190 132 1.14715e+020
+537 397 1.14463e+020
+10 125 1.14378e+020
+94 366 1.14289e+020
+526 79 1.14195e+020
+148 199 1.14128e+020
+463 224 1.14045e+020
+150 79 1.13923e+020
+205 33 1.13845e+020
+480 46 1.13767e+020
+288 265 1.1372e+020
+115 130 1.13669e+020
+386 282 1.1364e+020
+94 21 1.13627e+020
+447 376 1.13576e+020
+218 204 1.1356e+020
+408 430 1.13541e+020
+275 214 1.13537e+020
+129 428 1.13393e+020
+114 261 1.13312e+020
+514 401 1.13214e+020
+452 48 1.13093e+020
+157 24 1.12997e+020
+41 203 1.12994e+020
+508 203 1.12525e+020
+266 258 1.12508e+020
+408 140 1.12484e+020
+38 354 1.12379e+020
+235 220 1.12349e+020
+401 164 1.12295e+020
+362 48 1.1226e+020
+186 202 1.12253e+020
+94 276 1.12122e+020
+106 260 1.12014e+020
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_3_3.txt b/test_data/harriscorners/hc_msc_0.00_0.15_3_3.txt
new file mode 100644
index 0000000..68d43fb
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_3_3.txt
@@ -0,0 +1,1919 @@
+1918
+449 298 3.32013e+011
+329 127 2.40479e+011
+499 1 2.3572e+011
+388 178 2.22672e+011
+421 183 2.15372e+011
+401 261 2.13482e+011
+213 72 1.93722e+011
+66 320 1.81165e+011
+321 313 1.79205e+011
+544 170 1.78251e+011
+363 401 1.74675e+011
+121 44 1.72328e+011
+365 200 1.66654e+011
+553 40 1.65255e+011
+75 236 1.60659e+011
+135 215 1.603e+011
+449 219 1.59546e+011
+159 143 1.52973e+011
+137 208 1.51472e+011
+514 77 1.44856e+011
+89 197 1.42311e+011
+45 26 1.39432e+011
+312 149 1.39254e+011
+447 397 1.39158e+011
+449 403 1.39003e+011
+412 256 1.38427e+011
+223 38 1.35886e+011
+285 297 1.35718e+011
+125 255 1.35631e+011
+385 221 1.34753e+011
+436 68 1.34254e+011
+282 115 1.34177e+011
+296 420 1.31746e+011
+396 319 1.30232e+011
+144 309 1.30226e+011
+215 73 1.28368e+011
+344 10 1.27771e+011
+173 94 1.27765e+011
+256 386 1.24699e+011
+246 143 1.23946e+011
+184 35 1.23258e+011
+299 54 1.23249e+011
+124 362 1.21894e+011
+175 94 1.21511e+011
+522 263 1.20143e+011
+59 185 1.19992e+011
+417 7 1.19915e+011
+508 18 1.19444e+011
+113 213 1.19438e+011
+34 137 1.18269e+011
+177 260 1.18138e+011
+273 365 1.1716e+011
+426 320 1.16482e+011
+58 74 1.16247e+011
+140 184 1.15883e+011
+199 18 1.15247e+011
+242 203 1.14681e+011
+348 179 1.14112e+011
+64 235 1.13843e+011
+273 290 1.1347e+011
+545 217 1.13457e+011
+221 16 1.11675e+011
+317 385 1.1145e+011
+480 298 1.11068e+011
+245 95 1.08943e+011
+126 162 1.08936e+011
+173 312 1.08494e+011
+555 40 1.07489e+011
+293 120 1.07417e+011
+121 42 1.06526e+011
+456 281 1.06354e+011
+524 263 1.05902e+011
+71 148 1.02865e+011
+507 122 1.02318e+011
+3 47 1.02278e+011
+419 7 1.0182e+011
+46 219 1.00061e+011
+301 175 9.96735e+010
+239 90 9.94915e+010
+206 223 9.87767e+010
+484 59 9.8545e+010
+308 372 9.81498e+010
+253 138 9.77265e+010
+380 68 9.75023e+010
+65 344 9.67893e+010
+419 163 9.67742e+010
+66 234 9.6108e+010
+425 262 9.50666e+010
+270 241 9.47397e+010
+394 319 9.43849e+010
+303 183 9.41986e+010
+264 201 9.34707e+010
+364 298 9.31987e+010
+197 57 9.31893e+010
+82 27 9.31434e+010
+489 264 9.16105e+010
+535 243 9.11293e+010
+448 263 9.09534e+010
+371 82 8.99196e+010
+112 4 8.94971e+010
+275 367 8.92408e+010
+183 401 8.90444e+010
+282 403 8.87494e+010
+277 181 8.86356e+010
+270 60 8.8555e+010
+48 219 8.85486e+010
+455 83 8.83753e+010
+236 163 8.78992e+010
+543 57 8.78691e+010
+301 164 8.75609e+010
+287 344 8.71933e+010
+406 375 8.67871e+010
+87 197 8.67511e+010
+271 290 8.62725e+010
+114 344 8.56334e+010
+556 182 8.54822e+010
+569 40 8.50566e+010
+511 342 8.38851e+010
+467 123 8.37288e+010
+359 168 8.36512e+010
+360 335 8.35301e+010
+507 164 8.33022e+010
+174 238 8.32778e+010
+205 202 8.31866e+010
+208 434 8.3186e+010
+572 142 8.3011e+010
+272 166 8.22367e+010
+87 78 8.20642e+010
+240 201 8.19919e+010
+423 180 8.19501e+010
+137 210 8.19359e+010
+278 352 8.19263e+010
+200 16 8.18658e+010
+10 102 8.18657e+010
+496 119 8.16362e+010
+251 13 8.14815e+010
+401 184 8.14769e+010
+381 164 8.14237e+010
+390 58 8.11309e+010
+324 88 8.08953e+010
+378 316 8.08477e+010
+301 177 8.07999e+010
+209 223 8.01866e+010
+313 75 7.98569e+010
+125 199 7.92236e+010
+299 175 7.91627e+010
+526 101 7.90062e+010
+478 16 7.89078e+010
+455 3 7.82006e+010
+423 182 7.80886e+010
+391 47 7.76358e+010
+433 146 7.75953e+010
+560 229 7.726e+010
+376 317 7.71987e+010
+287 342 7.71181e+010
+530 185 7.70649e+010
+114 3 7.67853e+010
+102 4 7.66956e+010
+424 376 7.61736e+010
+124 365 7.58478e+010
+224 221 7.57099e+010
+341 337 7.51563e+010
+392 144 7.50462e+010
+543 364 7.49456e+010
+163 207 7.48815e+010
+131 36 7.46726e+010
+279 296 7.46392e+010
+473 63 7.46334e+010
+64 371 7.38101e+010
+461 279 7.37125e+010
+28 8 7.3378e+010
+382 8 7.29965e+010
+261 165 7.29928e+010
+170 19 7.26616e+010
+275 216 7.25494e+010
+35 300 7.23838e+010
+224 183 7.22909e+010
+463 198 7.16838e+010
+355 320 7.1669e+010
+449 397 7.1427e+010
+91 198 7.12729e+010
+279 370 7.09063e+010
+317 336 7.07404e+010
+240 349 7.0726e+010
+562 478 7.07163e+010
+360 316 7.07085e+010
+192 331 7.05062e+010
+166 20 7.04956e+010
+257 90 7.02903e+010
+525 346 7.02554e+010
+109 239 7.00581e+010
+207 225 6.99875e+010
+524 199 6.99845e+010
+373 116 6.90968e+010
+485 23 6.89545e+010
+510 172 6.87798e+010
+211 56 6.86982e+010
+359 294 6.82845e+010
+209 54 6.80984e+010
+392 353 6.8006e+010
+282 221 6.79263e+010
+448 138 6.78777e+010
+251 140 6.77764e+010
+464 240 6.76343e+010
+384 162 6.74381e+010
+479 181 6.74053e+010
+192 276 6.71509e+010
+260 273 6.70827e+010
+105 62 6.70658e+010
+313 222 6.70554e+010
+471 239 6.70266e+010
+404 120 6.69485e+010
+244 72 6.65082e+010
+352 146 6.64941e+010
+338 473 6.64691e+010
+326 427 6.64265e+010
+365 7 6.63697e+010
+203 17 6.62013e+010
+207 436 6.60697e+010
+29 236 6.59508e+010
+128 1 6.59499e+010
+411 4 6.59144e+010
+556 245 6.57224e+010
+220 100 6.55948e+010
+84 78 6.52076e+010
+382 338 6.51112e+010
+342 123 6.50371e+010
+221 181 6.50149e+010
+575 126 6.50086e+010
+419 180 6.49903e+010
+477 182 6.47489e+010
+297 296 6.45906e+010
+185 18 6.45689e+010
+364 255 6.44384e+010
+365 259 6.40468e+010
+77 81 6.40258e+010
+303 207 6.38558e+010
+411 355 6.37262e+010
+380 26 6.36531e+010
+558 19 6.35145e+010
+283 71 6.34571e+010
+376 7 6.33788e+010
+164 241 6.32783e+010
+224 419 6.32311e+010
+370 107 6.32179e+010
+461 340 6.31388e+010
+172 238 6.30973e+010
+299 70 6.27673e+010
+342 464 6.2729e+010
+376 84 6.26312e+010
+479 81 6.25653e+010
+404 122 6.22043e+010
+259 236 6.20956e+010
+521 122 6.20633e+010
+507 60 6.19057e+010
+387 319 6.17718e+010
+538 95 6.16153e+010
+79 3 6.15896e+010
+353 126 6.15454e+010
+415 253 6.15049e+010
+140 173 6.14922e+010
+412 23 6.13352e+010
+513 93 6.11844e+010
+388 60 6.10129e+010
+331 107 6.08829e+010
+273 130 6.08464e+010
+305 183 6.07832e+010
+266 53 6.07627e+010
+160 183 6.06261e+010
+174 114 6.05348e+010
+110 96 6.04995e+010
+401 182 6.04418e+010
+487 3 6.02847e+010
+271 278 6.01424e+010
+300 265 6.00032e+010
+512 165 5.9997e+010
+36 147 5.99462e+010
+513 340 5.98048e+010
+61 61 5.97795e+010
+451 101 5.97104e+010
+31 8 5.9594e+010
+525 223 5.95214e+010
+97 79 5.93704e+010
+282 111 5.92748e+010
+126 76 5.89135e+010
+238 74 5.88489e+010
+225 180 5.87739e+010
+546 170 5.86927e+010
+509 361 5.86898e+010
+432 319 5.86452e+010
+55 28 5.86451e+010
+408 352 5.84593e+010
+230 267 5.83829e+010
+128 163 5.83685e+010
+264 298 5.83234e+010
+190 276 5.81608e+010
+319 201 5.80784e+010
+419 165 5.79674e+010
+223 114 5.79494e+010
+550 380 5.79183e+010
+512 99 5.79039e+010
+468 125 5.78921e+010
+363 250 5.75366e+010
+57 29 5.75269e+010
+361 131 5.74675e+010
+553 384 5.74331e+010
+277 370 5.73351e+010
+332 130 5.73124e+010
+535 267 5.71946e+010
+386 126 5.71675e+010
+192 359 5.69978e+010
+161 144 5.67578e+010
+381 411 5.65391e+010
+125 261 5.65161e+010
+389 139 5.64628e+010
+46 90 5.64483e+010
+264 440 5.63203e+010
+54 6 5.62353e+010
+374 163 5.61762e+010
+307 440 5.61124e+010
+203 310 5.60268e+010
+351 339 5.58039e+010
+295 296 5.5607e+010
+481 82 5.55495e+010
+266 14 5.5512e+010
+5 46 5.53465e+010
+161 238 5.52833e+010
+394 158 5.51805e+010
+465 394 5.51308e+010
+478 12 5.50208e+010
+445 23 5.49909e+010
+352 161 5.48942e+010
+177 106 5.48457e+010
+120 4 5.4805e+010
+520 183 5.47988e+010
+333 89 5.47962e+010
+387 242 5.47331e+010
+429 320 5.46697e+010
+396 161 5.46133e+010
+303 156 5.43943e+010
+49 158 5.42958e+010
+579 18 5.4104e+010
+13 206 5.3914e+010
+529 104 5.37689e+010
+229 292 5.376e+010
+529 32 5.37173e+010
+372 163 5.36676e+010
+497 64 5.36635e+010
+518 183 5.35838e+010
+580 52 5.35787e+010
+276 393 5.35316e+010
+186 342 5.32643e+010
+244 164 5.31083e+010
+338 391 5.29004e+010
+483 339 5.28012e+010
+510 456 5.27146e+010
+239 18 5.26892e+010
+228 184 5.26404e+010
+313 86 5.25801e+010
+169 238 5.25666e+010
+169 55 5.24658e+010
+148 396 5.24387e+010
+560 227 5.23233e+010
+277 333 5.23021e+010
+212 183 5.21943e+010
+184 137 5.21287e+010
+281 49 5.19704e+010
+118 61 5.17674e+010
+162 20 5.16328e+010
+118 59 5.16093e+010
+164 243 5.15296e+010
+219 291 5.14264e+010
+542 210 5.11964e+010
+260 250 5.10715e+010
+76 8 5.09706e+010
+285 240 5.0758e+010
+422 44 5.07025e+010
+79 474 5.05485e+010
+510 164 5.05453e+010
+561 321 5.0382e+010
+569 38 5.02849e+010
+540 40 5.02301e+010
+451 82 5.02115e+010
+150 114 5.02088e+010
+542 18 5.01409e+010
+136 202 5.01398e+010
+243 189 5.01201e+010
+36 268 5.00971e+010
+49 152 5.00459e+010
+541 13 4.9997e+010
+330 202 4.9984e+010
+500 42 4.99795e+010
+305 193 4.99758e+010
+73 186 4.99396e+010
+142 182 4.98991e+010
+544 210 4.98455e+010
+234 72 4.98345e+010
+215 144 4.98261e+010
+221 114 4.97901e+010
+317 165 4.95489e+010
+356 267 4.94771e+010
+512 168 4.94745e+010
+96 125 4.93265e+010
+419 167 4.92737e+010
+290 183 4.924e+010
+359 162 4.92243e+010
+71 410 4.9117e+010
+189 180 4.90307e+010
+508 142 4.88942e+010
+315 160 4.88818e+010
+108 325 4.88593e+010
+494 456 4.87995e+010
+22 60 4.87893e+010
+68 27 4.87746e+010
+292 15 4.86476e+010
+404 338 4.85925e+010
+398 357 4.85631e+010
+172 449 4.84895e+010
+300 245 4.84802e+010
+234 261 4.84019e+010
+170 117 4.83873e+010
+59 219 4.83872e+010
+526 171 4.82621e+010
+271 51 4.82215e+010
+560 60 4.81504e+010
+97 447 4.81475e+010
+88 256 4.81389e+010
+575 128 4.81145e+010
+562 149 4.80759e+010
+524 20 4.80395e+010
+532 268 4.80157e+010
+32 269 4.79959e+010
+267 131 4.79571e+010
+232 200 4.78804e+010
+415 251 4.77997e+010
+77 83 4.77631e+010
+56 31 4.76229e+010
+387 10 4.75446e+010
+388 282 4.7539e+010
+294 15 4.75009e+010
+511 128 4.74527e+010
+421 7 4.7441e+010
+78 196 4.74264e+010
+25 200 4.73723e+010
+487 357 4.72904e+010
+406 65 4.71602e+010
+100 221 4.7118e+010
+508 4 4.6984e+010
+118 96 4.69834e+010
+184 184 4.69171e+010
+92 21 4.67795e+010
+528 184 4.6734e+010
+537 267 4.6685e+010
+265 72 4.66755e+010
+112 393 4.66266e+010
+137 98 4.64651e+010
+441 98 4.64145e+010
+139 204 4.63868e+010
+304 363 4.62856e+010
+546 182 4.62825e+010
+398 319 4.627e+010
+38 296 4.62357e+010
+150 151 4.62263e+010
+162 212 4.61648e+010
+372 67 4.59859e+010
+36 298 4.59796e+010
+124 162 4.59757e+010
+269 105 4.59755e+010
+474 245 4.59665e+010
+510 300 4.59435e+010
+91 291 4.58293e+010
+324 166 4.5813e+010
+423 320 4.58033e+010
+469 237 4.57259e+010
+171 313 4.56933e+010
+62 372 4.55706e+010
+358 127 4.55595e+010
+286 165 4.55166e+010
+137 128 4.54939e+010
+594 19 4.54605e+010
+175 57 4.54059e+010
+434 398 4.53898e+010
+484 361 4.53839e+010
+72 97 4.53212e+010
+101 58 4.52862e+010
+282 119 4.52031e+010
+250 313 4.51898e+010
+379 107 4.50949e+010
+167 239 4.50898e+010
+236 221 4.50771e+010
+394 260 4.50428e+010
+443 23 4.49668e+010
+235 19 4.49662e+010
+210 154 4.49139e+010
+191 217 4.48388e+010
+312 81 4.48301e+010
+135 206 4.48045e+010
+115 76 4.47252e+010
+292 28 4.46923e+010
+413 100 4.46805e+010
+329 9 4.46782e+010
+77 256 4.46443e+010
+18 342 4.4631e+010
+536 138 4.46003e+010
+436 339 4.45697e+010
+329 107 4.45353e+010
+159 113 4.44626e+010
+389 327 4.43724e+010
+27 220 4.43478e+010
+134 72 4.4342e+010
+554 181 4.43144e+010
+43 62 4.42493e+010
+229 265 4.38731e+010
+157 93 4.38204e+010
+59 254 4.38166e+010
+115 390 4.38126e+010
+454 340 4.37227e+010
+40 309 4.371e+010
+458 264 4.3708e+010
+184 342 4.36215e+010
+529 361 4.36137e+010
+560 18 4.35527e+010
+36 176 4.35485e+010
+161 124 4.35119e+010
+545 6 4.34609e+010
+550 183 4.34512e+010
+237 20 4.33585e+010
+112 134 4.32658e+010
+479 451 4.32558e+010
+565 60 4.31753e+010
+430 1 4.31001e+010
+412 162 4.30471e+010
+29 29 4.30449e+010
+217 126 4.29913e+010
+439 149 4.29214e+010
+85 476 4.29116e+010
+407 336 4.27508e+010
+32 218 4.26987e+010
+152 308 4.26416e+010
+579 50 4.25834e+010
+446 265 4.25467e+010
+484 376 4.25308e+010
+217 208 4.25189e+010
+48 97 4.24476e+010
+22 219 4.23491e+010
+361 369 4.23308e+010
+172 202 4.23219e+010
+445 453 4.22977e+010
+418 85 4.22619e+010
+187 109 4.2194e+010
+192 123 4.21697e+010
+241 58 4.20811e+010
+363 182 4.19809e+010
+96 148 4.19617e+010
+293 333 4.19545e+010
+49 99 4.19208e+010
+479 179 4.19111e+010
+572 121 4.18522e+010
+276 221 4.18371e+010
+36 174 4.18037e+010
+182 111 4.18003e+010
+355 106 4.15504e+010
+57 331 4.15472e+010
+132 130 4.15286e+010
+267 31 4.14392e+010
+336 427 4.14213e+010
+391 19 4.13924e+010
+569 203 4.1321e+010
+292 310 4.12898e+010
+350 323 4.12846e+010
+270 55 4.1284e+010
+182 201 4.11235e+010
+434 339 4.11075e+010
+175 2 4.1106e+010
+85 196 4.11037e+010
+201 313 4.09992e+010
+246 294 4.09431e+010
+34 298 4.09313e+010
+443 320 4.09296e+010
+276 137 4.09062e+010
+486 58 4.09019e+010
+572 160 4.07462e+010
+452 161 4.07453e+010
+446 352 4.0683e+010
+355 13 4.06574e+010
+261 297 4.06086e+010
+465 198 4.05969e+010
+163 276 4.05877e+010
+262 393 4.05651e+010
+554 201 4.056e+010
+400 273 4.05134e+010
+387 295 4.04164e+010
+538 458 4.03377e+010
+537 141 4.02363e+010
+153 446 4.01827e+010
+388 58 4.0118e+010
+196 192 4.0115e+010
+502 143 4.00663e+010
+188 146 3.99633e+010
+366 299 3.99141e+010
+344 166 3.9896e+010
+89 147 3.98871e+010
+447 145 3.98684e+010
+63 8 3.98e+010
+143 187 3.9784e+010
+37 62 3.97673e+010
+219 126 3.97528e+010
+396 104 3.97459e+010
+208 421 3.97066e+010
+197 130 3.96576e+010
+474 23 3.96223e+010
+225 73 3.95462e+010
+41 297 3.95349e+010
+286 209 3.95077e+010
+270 66 3.94958e+010
+451 376 3.94875e+010
+213 123 3.94825e+010
+274 281 3.94512e+010
+497 342 3.94503e+010
+223 239 3.94321e+010
+59 289 3.94082e+010
+466 40 3.93775e+010
+306 362 3.92867e+010
+92 214 3.92772e+010
+177 96 3.92594e+010
+111 40 3.92037e+010
+6 9 3.91992e+010
+540 165 3.91388e+010
+266 260 3.91154e+010
+113 356 3.91059e+010
+511 205 3.90671e+010
+164 359 3.90655e+010
+474 262 3.90596e+010
+369 338 3.90341e+010
+117 76 3.90279e+010
+264 445 3.89599e+010
+561 225 3.89558e+010
+386 176 3.89504e+010
+102 358 3.89467e+010
+435 181 3.89209e+010
+474 202 3.88472e+010
+85 256 3.88314e+010
+85 478 3.88312e+010
+360 260 3.88299e+010
+371 393 3.87679e+010
+220 151 3.87407e+010
+361 396 3.86838e+010
+51 290 3.86639e+010
+162 216 3.86369e+010
+130 217 3.85442e+010
+140 325 3.85439e+010
+59 28 3.85101e+010
+55 66 3.84889e+010
+76 96 3.84672e+010
+110 265 3.8432e+010
+386 167 3.84014e+010
+162 168 3.83788e+010
+202 392 3.82566e+010
+327 320 3.81906e+010
+518 202 3.80911e+010
+226 295 3.80827e+010
+137 111 3.80611e+010
+544 92 3.79958e+010
+579 79 3.79667e+010
+132 26 3.79178e+010
+59 76 3.78605e+010
+139 2 3.78164e+010
+105 39 3.77167e+010
+225 297 3.76892e+010
+188 214 3.76705e+010
+373 242 3.76041e+010
+100 78 3.75514e+010
+67 47 3.73619e+010
+449 178 3.73306e+010
+550 383 3.72778e+010
+377 299 3.72396e+010
+179 274 3.71829e+010
+167 150 3.71606e+010
+422 398 3.71499e+010
+491 1 3.71355e+010
+363 396 3.7125e+010
+438 123 3.71068e+010
+57 27 3.70261e+010
+565 19 3.70245e+010
+93 255 3.70178e+010
+150 112 3.69315e+010
+336 391 3.69044e+010
+95 452 3.68933e+010
+543 16 3.68806e+010
+208 153 3.68343e+010
+432 83 3.67761e+010
+315 165 3.67373e+010
+216 279 3.66548e+010
+274 206 3.66128e+010
+273 297 3.66057e+010
+475 340 3.6522e+010
+234 161 3.64882e+010
+522 124 3.64773e+010
+124 272 3.64658e+010
+463 267 3.64605e+010
+432 122 3.64555e+010
+130 2 3.64474e+010
+469 123 3.6444e+010
+203 347 3.64402e+010
+240 73 3.64265e+010
+411 45 3.64242e+010
+589 309 3.64136e+010
+281 386 3.63827e+010
+398 412 3.6334e+010
+492 182 3.63111e+010
+133 427 3.62958e+010
+423 337 3.62731e+010
+510 142 3.62616e+010
+506 204 3.62613e+010
+471 262 3.6246e+010
+535 140 3.61899e+010
+543 4 3.61894e+010
+604 121 3.61506e+010
+88 199 3.61284e+010
+511 95 3.61208e+010
+263 71 3.61091e+010
+473 239 3.60588e+010
+306 88 3.60367e+010
+505 159 3.59928e+010
+67 337 3.59462e+010
+367 144 3.59302e+010
+129 168 3.59146e+010
+400 104 3.58699e+010
+267 33 3.58571e+010
+5 65 3.58467e+010
+261 329 3.58383e+010
+507 178 3.58268e+010
+135 237 3.58226e+010
+366 142 3.57907e+010
+268 14 3.57187e+010
+279 368 3.56922e+010
+486 205 3.5683e+010
+65 363 3.56335e+010
+12 80 3.55347e+010
+58 103 3.55183e+010
+525 381 3.54806e+010
+276 391 3.54707e+010
+146 160 3.54263e+010
+263 167 3.52973e+010
+410 163 3.52264e+010
+343 36 3.51996e+010
+258 34 3.5165e+010
+379 352 3.51263e+010
+82 135 3.512e+010
+38 170 3.51103e+010
+418 440 3.5062e+010
+524 171 3.50423e+010
+64 448 3.50251e+010
+259 71 3.49972e+010
+259 221 3.49966e+010
+413 65 3.49903e+010
+109 60 3.4986e+010
+318 107 3.49812e+010
+436 387 3.49418e+010
+144 327 3.49122e+010
+81 75 3.47987e+010
+567 61 3.47967e+010
+460 395 3.47555e+010
+282 401 3.47459e+010
+464 24 3.47452e+010
+355 220 3.47349e+010
+214 59 3.47315e+010
+129 429 3.4719e+010
+543 130 3.4715e+010
+390 161 3.46712e+010
+449 83 3.46425e+010
+549 59 3.46386e+010
+315 145 3.46057e+010
+410 99 3.45742e+010
+567 423 3.4525e+010
+497 79 3.45012e+010
+353 105 3.44548e+010
+193 17 3.44028e+010
+246 106 3.43839e+010
+300 183 3.43136e+010
+22 58 3.42834e+010
+453 83 3.42489e+010
+283 35 3.42231e+010
+490 181 3.42043e+010
+285 263 3.41597e+010
+357 240 3.41371e+010
+163 147 3.41141e+010
+240 365 3.4059e+010
+462 394 3.4037e+010
+191 171 3.40022e+010
+190 146 3.39938e+010
+2 155 3.39925e+010
+217 55 3.39838e+010
+367 7 3.39736e+010
+425 181 3.394e+010
+375 299 3.39286e+010
+498 68 3.39284e+010
+49 164 3.38826e+010
+397 355 3.3866e+010
+233 198 3.38623e+010
+321 103 3.38173e+010
+194 110 3.38099e+010
+148 21 3.37901e+010
+407 81 3.37553e+010
+153 299 3.3725e+010
+484 179 3.37159e+010
+510 140 3.36363e+010
+365 86 3.36295e+010
+276 139 3.35842e+010
+153 197 3.35371e+010
+423 6 3.3536e+010
+269 51 3.35188e+010
+440 181 3.34728e+010
+378 340 3.34414e+010
+161 133 3.34368e+010
+378 338 3.34046e+010
+252 422 3.33852e+010
+503 361 3.338e+010
+40 217 3.33284e+010
+386 292 3.33112e+010
+44 121 3.33035e+010
+254 74 3.33e+010
+358 335 3.32641e+010
+512 125 3.3261e+010
+113 263 3.32446e+010
+298 191 3.31578e+010
+543 252 3.3116e+010
+197 75 3.31046e+010
+109 358 3.30568e+010
+285 261 3.30215e+010
+335 240 3.2995e+010
+198 15 3.29466e+010
+273 71 3.29352e+010
+360 292 3.29279e+010
+254 404 3.29182e+010
+109 241 3.2913e+010
+141 391 3.2898e+010
+158 1 3.28516e+010
+598 364 3.2829e+010
+165 154 3.27809e+010
+542 42 3.2779e+010
+445 7 3.27764e+010
+577 178 3.27128e+010
+226 15 3.26989e+010
+550 222 3.26966e+010
+65 252 3.26954e+010
+247 258 3.266e+010
+143 395 3.25668e+010
+344 197 3.25513e+010
+128 238 3.25205e+010
+527 359 3.24942e+010
+345 109 3.24429e+010
+114 220 3.23661e+010
+181 33 3.23464e+010
+46 80 3.23424e+010
+515 1 3.2336e+010
+297 274 3.23056e+010
+325 148 3.22999e+010
+262 219 3.22802e+010
+464 26 3.22678e+010
+209 136 3.22475e+010
+45 131 3.22084e+010
+227 258 3.21576e+010
+131 73 3.21473e+010
+218 144 3.2134e+010
+541 122 3.21134e+010
+282 351 3.20493e+010
+311 334 3.20173e+010
+403 6 3.20151e+010
+389 420 3.20125e+010
+187 100 3.19551e+010
+534 18 3.19331e+010
+133 238 3.18808e+010
+163 108 3.1872e+010
+366 95 3.18113e+010
+294 25 3.17575e+010
+490 183 3.17406e+010
+243 205 3.17254e+010
+208 449 3.16687e+010
+211 33 3.16493e+010
+433 317 3.1638e+010
+383 89 3.16358e+010
+194 135 3.16339e+010
+44 10 3.16162e+010
+274 76 3.16129e+010
+130 239 3.16097e+010
+324 142 3.15459e+010
+505 382 3.15319e+010
+168 242 3.15291e+010
+530 364 3.15036e+010
+334 368 3.14948e+010
+189 202 3.14933e+010
+480 402 3.14244e+010
+252 10 3.14194e+010
+473 120 3.14115e+010
+430 181 3.13927e+010
+286 52 3.13823e+010
+535 120 3.13787e+010
+167 325 3.13593e+010
+421 315 3.13583e+010
+524 169 3.13575e+010
+64 276 3.13248e+010
+340 164 3.13207e+010
+243 55 3.13048e+010
+559 271 3.12986e+010
+64 318 3.12795e+010
+166 113 3.12175e+010
+278 145 3.11219e+010
+298 332 3.10548e+010
+7 65 3.10527e+010
+492 456 3.09752e+010
+367 86 3.09644e+010
+522 140 3.09568e+010
+415 83 3.0923e+010
+482 364 3.08933e+010
+313 71 3.08801e+010
+447 23 3.08772e+010
+538 78 3.07838e+010
+345 241 3.07034e+010
+271 71 3.06856e+010
+141 22 3.06776e+010
+447 376 3.06595e+010
+498 82 3.06565e+010
+24 65 3.06286e+010
+183 133 3.06157e+010
+95 79 3.05822e+010
+42 10 3.05601e+010
+347 392 3.05554e+010
+479 19 3.05527e+010
+191 314 3.05483e+010
+355 24 3.05315e+010
+343 351 3.05255e+010
+113 205 3.05241e+010
+212 437 3.05028e+010
+516 18 3.04946e+010
+175 106 3.04801e+010
+184 117 3.04762e+010
+59 216 3.04203e+010
+47 133 3.04132e+010
+528 98 3.03671e+010
+44 220 3.0354e+010
+513 220 3.03328e+010
+333 105 3.03153e+010
+562 17 3.03151e+010
+192 141 3.03119e+010
+108 45 3.03008e+010
+46 147 3.02913e+010
+509 168 3.02785e+010
+518 164 3.02507e+010
+285 403 3.02426e+010
+447 245 3.02379e+010
+618 181 3.02249e+010
+406 142 3.01828e+010
+272 133 3.0173e+010
+356 334 3.01459e+010
+129 309 3.01032e+010
+273 353 3.01028e+010
+297 137 3.00783e+010
+9 476 3.00409e+010
+311 33 2.99698e+010
+375 225 2.99597e+010
+170 199 2.99514e+010
+36 202 2.99056e+010
+207 159 2.98943e+010
+29 220 2.98911e+010
+397 25 2.98546e+010
+418 414 2.98259e+010
+497 283 2.98107e+010
+527 39 2.981e+010
+48 256 2.97906e+010
+514 223 2.97842e+010
+360 216 2.97808e+010
+320 119 2.97802e+010
+86 370 2.97646e+010
+110 168 2.97306e+010
+437 303 2.97008e+010
+308 147 2.96975e+010
+363 407 2.96887e+010
+472 355 2.96768e+010
+376 67 2.9642e+010
+303 170 2.96336e+010
+318 147 2.96107e+010
+345 306 2.95975e+010
+563 225 2.9545e+010
+415 262 2.94785e+010
+292 147 2.9458e+010
+70 130 2.94209e+010
+206 293 2.93707e+010
+272 282 2.92931e+010
+303 180 2.92892e+010
+363 355 2.92381e+010
+374 394 2.92364e+010
+216 172 2.92323e+010
+343 7 2.92279e+010
+179 359 2.91558e+010
+530 24 2.91448e+010
+320 335 2.91426e+010
+153 216 2.91369e+010
+172 166 2.91233e+010
+35 200 2.91153e+010
+498 160 2.91137e+010
+592 107 2.91085e+010
+511 209 2.90855e+010
+64 27 2.90422e+010
+199 328 2.90303e+010
+153 93 2.90294e+010
+326 180 2.89858e+010
+303 52 2.89692e+010
+425 44 2.8952e+010
+383 181 2.88673e+010
+92 112 2.88159e+010
+329 212 2.88021e+010
+180 136 2.87883e+010
+180 106 2.878e+010
+530 193 2.87612e+010
+314 88 2.87297e+010
+273 53 2.87195e+010
+520 163 2.87193e+010
+419 314 2.87108e+010
+381 47 2.86816e+010
+51 377 2.86816e+010
+252 153 2.86699e+010
+220 210 2.86051e+010
+162 128 2.85959e+010
+569 122 2.857e+010
+311 298 2.85405e+010
+503 265 2.85123e+010
+528 161 2.85065e+010
+329 103 2.84393e+010
+83 183 2.84091e+010
+60 187 2.84032e+010
+484 153 2.8386e+010
+60 148 2.83768e+010
+287 34 2.83665e+010
+201 166 2.83574e+010
+177 311 2.83303e+010
+54 358 2.83024e+010
+101 197 2.82999e+010
+94 217 2.82903e+010
+24 63 2.82769e+010
+421 334 2.82234e+010
+364 409 2.82183e+010
+260 142 2.82132e+010
+242 101 2.82021e+010
+308 8 2.81796e+010
+513 44 2.81739e+010
+259 228 2.81672e+010
+113 347 2.81266e+010
+84 237 2.81047e+010
+136 93 2.80904e+010
+174 418 2.80867e+010
+270 91 2.80719e+010
+301 86 2.80634e+010
+84 181 2.80558e+010
+130 77 2.80501e+010
+278 417 2.80401e+010
+190 184 2.8024e+010
+454 264 2.79856e+010
+185 170 2.79644e+010
+328 165 2.79359e+010
+94 291 2.78767e+010
+539 220 2.78728e+010
+105 430 2.78683e+010
+44 476 2.7867e+010
+133 78 2.78455e+010
+31 28 2.77662e+010
+228 288 2.77609e+010
+79 273 2.7731e+010
+224 154 2.77283e+010
+516 348 2.77048e+010
+516 142 2.76708e+010
+453 358 2.76642e+010
+397 21 2.76304e+010
+188 104 2.76281e+010
+521 344 2.76231e+010
+230 35 2.76007e+010
+2 166 2.75605e+010
+485 236 2.75596e+010
+361 9 2.75558e+010
+57 364 2.75226e+010
+166 96 2.75211e+010
+203 397 2.74693e+010
+412 221 2.74471e+010
+422 63 2.74119e+010
+241 68 2.74052e+010
+115 44 2.73709e+010
+219 387 2.73313e+010
+451 204 2.73255e+010
+329 66 2.72136e+010
+163 249 2.72081e+010
+528 142 2.72025e+010
+263 311 2.71133e+010
+90 377 2.7076e+010
+175 40 2.70451e+010
+554 244 2.70385e+010
+39 143 2.7035e+010
+136 57 2.69469e+010
+369 140 2.69269e+010
+245 213 2.69179e+010
+573 333 2.69027e+010
+332 295 2.68878e+010
+267 146 2.68597e+010
+503 161 2.68584e+010
+214 146 2.68299e+010
+319 167 2.68261e+010
+13 208 2.68166e+010
+166 286 2.6782e+010
+489 23 2.6768e+010
+228 198 2.67157e+010
+335 93 2.67035e+010
+550 121 2.67021e+010
+565 161 2.66929e+010
+231 150 2.66819e+010
+175 121 2.66737e+010
+501 102 2.66589e+010
+356 317 2.66529e+010
+484 161 2.66353e+010
+88 376 2.65901e+010
+461 123 2.65756e+010
+136 171 2.65532e+010
+491 470 2.65491e+010
+285 211 2.65172e+010
+445 128 2.64998e+010
+500 223 2.64884e+010
+361 166 2.6464e+010
+95 284 2.64288e+010
+38 219 2.64077e+010
+214 56 2.64039e+010
+54 449 2.64e+010
+32 112 2.63986e+010
+109 183 2.63704e+010
+308 448 2.63477e+010
+36 64 2.63129e+010
+127 308 2.628e+010
+288 397 2.62596e+010
+134 172 2.62036e+010
+576 164 2.6195e+010
+221 125 2.61903e+010
+376 239 2.61463e+010
+330 11 2.61356e+010
+323 424 2.61179e+010
+544 20 2.61112e+010
+357 143 2.60613e+010
+525 39 2.60593e+010
+512 349 2.60198e+010
+578 123 2.5966e+010
+493 140 2.59598e+010
+127 186 2.59426e+010
+283 240 2.5924e+010
+373 86 2.59226e+010
+545 438 2.58981e+010
+28 254 2.58857e+010
+527 382 2.58852e+010
+175 187 2.58707e+010
+285 242 2.58514e+010
+94 422 2.58328e+010
+531 103 2.58257e+010
+189 137 2.5782e+010
+479 241 2.57463e+010
+247 347 2.57131e+010
+109 340 2.56844e+010
+151 133 2.56711e+010
+542 216 2.56515e+010
+450 442 2.56414e+010
+103 223 2.56401e+010
+44 81 2.56361e+010
+251 184 2.56317e+010
+76 270 2.55674e+010
+265 249 2.55531e+010
+52 288 2.55462e+010
+330 200 2.55404e+010
+39 242 2.55043e+010
+125 40 2.54915e+010
+262 217 2.54865e+010
+513 402 2.54673e+010
+509 83 2.54497e+010
+54 303 2.54443e+010
+280 112 2.54331e+010
+177 120 2.53432e+010
+84 59 2.53428e+010
+148 163 2.5327e+010
+445 126 2.53103e+010
+422 161 2.53084e+010
+498 70 2.53074e+010
+244 219 2.53026e+010
+262 390 2.53001e+010
+180 394 2.52989e+010
+177 331 2.52911e+010
+510 98 2.52869e+010
+367 247 2.52836e+010
+162 210 2.52547e+010
+116 42 2.52499e+010
+289 212 2.52342e+010
+572 328 2.52267e+010
+155 396 2.52234e+010
+254 76 2.52181e+010
+349 241 2.52e+010
+204 308 2.52e+010
+308 183 2.51877e+010
+276 135 2.51833e+010
+140 317 2.51716e+010
+573 139 2.51258e+010
+210 422 2.51247e+010
+290 89 2.51025e+010
+597 272 2.50876e+010
+161 32 2.50828e+010
+288 86 2.50528e+010
+131 148 2.50134e+010
+220 418 2.50127e+010
+166 359 2.50117e+010
+360 242 2.49948e+010
+482 173 2.49784e+010
+372 73 2.4948e+010
+266 118 2.49366e+010
+509 102 2.49159e+010
+180 56 2.49141e+010
+310 90 2.48846e+010
+187 257 2.4867e+010
+512 201 2.48444e+010
+495 141 2.48285e+010
+561 201 2.47891e+010
+540 263 2.4774e+010
+193 171 2.47654e+010
+69 417 2.47465e+010
+474 143 2.47447e+010
+562 157 2.47287e+010
+383 146 2.4718e+010
+420 362 2.47071e+010
+387 139 2.46913e+010
+62 133 2.46743e+010
+235 198 2.46613e+010
+281 143 2.46475e+010
+201 74 2.46139e+010
+117 360 2.45877e+010
+335 104 2.45837e+010
+485 221 2.45802e+010
+509 137 2.45768e+010
+310 259 2.45652e+010
+20 67 2.45591e+010
+169 57 2.45456e+010
+54 221 2.45348e+010
+384 25 2.45292e+010
+69 47 2.45273e+010
+128 40 2.45158e+010
+480 128 2.4502e+010
+287 263 2.44568e+010
+48 458 2.44281e+010
+200 293 2.44177e+010
+330 168 2.44036e+010
+406 162 2.43734e+010
+303 209 2.43597e+010
+472 42 2.43238e+010
+163 97 2.43217e+010
+83 101 2.43109e+010
+46 420 2.43086e+010
+195 343 2.43074e+010
+37 138 2.42855e+010
+525 79 2.42684e+010
+337 240 2.42433e+010
+452 265 2.42421e+010
+424 163 2.42418e+010
+81 219 2.423e+010
+308 90 2.42261e+010
+351 320 2.42229e+010
+215 427 2.42092e+010
+560 81 2.42087e+010
+83 404 2.41925e+010
+202 7 2.4149e+010
+367 2 2.41479e+010
+339 475 2.41478e+010
+209 203 2.41394e+010
+133 411 2.41322e+010
+89 22 2.41191e+010
+534 161 2.40618e+010
+575 54 2.40597e+010
+494 163 2.40239e+010
+451 138 2.40182e+010
+223 15 2.39641e+010
+453 205 2.3908e+010
+495 284 2.3884e+010
+513 261 2.38309e+010
+177 185 2.38212e+010
+243 419 2.37793e+010
+326 13 2.37713e+010
+361 449 2.37025e+010
+480 171 2.36997e+010
+244 217 2.3696e+010
+478 4 2.36895e+010
+571 333 2.36882e+010
+576 91 2.36706e+010
+418 282 2.36688e+010
+340 9 2.36552e+010
+442 182 2.36416e+010
+416 282 2.36354e+010
+515 381 2.36307e+010
+534 393 2.36171e+010
+536 40 2.36113e+010
+123 261 2.35949e+010
+324 163 2.3594e+010
+389 222 2.35533e+010
+533 340 2.35181e+010
+304 292 2.35037e+010
+385 450 2.34733e+010
+79 269 2.34694e+010
+524 349 2.34575e+010
+164 114 2.34391e+010
+160 256 2.34275e+010
+515 184 2.34164e+010
+574 39 2.34088e+010
+402 265 2.33816e+010
+422 48 2.33605e+010
+59 372 2.33549e+010
+324 341 2.33508e+010
+277 164 2.33395e+010
+138 146 2.33349e+010
+44 152 2.33276e+010
+391 166 2.33264e+010
+520 141 2.33217e+010
+279 363 2.32978e+010
+106 2 2.32735e+010
+206 417 2.32733e+010
+240 194 2.32658e+010
+408 67 2.324e+010
+344 276 2.32265e+010
+133 376 2.3195e+010
+336 50 2.31582e+010
+146 165 2.31217e+010
+234 346 2.30731e+010
+449 324 2.30493e+010
+273 146 2.30268e+010
+389 242 2.30215e+010
+497 229 2.30159e+010
+170 201 2.30046e+010
+118 224 2.29861e+010
+225 112 2.29783e+010
+161 397 2.29771e+010
+525 423 2.29066e+010
+268 289 2.28929e+010
+154 114 2.28788e+010
+295 138 2.28743e+010
+568 383 2.2859e+010
+363 295 2.28404e+010
+152 58 2.28398e+010
+87 230 2.28313e+010
+171 56 2.28275e+010
+111 55 2.28101e+010
+532 22 2.28051e+010
+58 147 2.28036e+010
+389 334 2.27726e+010
+229 148 2.27675e+010
+37 288 2.27672e+010
+465 355 2.27641e+010
+382 160 2.2759e+010
+588 345 2.2738e+010
+302 102 2.26739e+010
+409 281 2.26324e+010
+11 114 2.26314e+010
+19 65 2.26267e+010
+347 370 2.26255e+010
+259 159 2.26029e+010
+248 315 2.26012e+010
+125 112 2.25938e+010
+245 385 2.2584e+010
+280 188 2.25755e+010
+198 167 2.25461e+010
+433 63 2.25379e+010
+378 183 2.25278e+010
+51 257 2.25097e+010
+58 79 2.24833e+010
+158 237 2.24573e+010
+211 136 2.2445e+010
+93 95 2.2442e+010
+32 103 2.2439e+010
+275 352 2.24136e+010
+94 5 2.24097e+010
+269 144 2.23845e+010
+264 220 2.23833e+010
+560 274 2.23623e+010
+194 201 2.23586e+010
+220 38 2.23535e+010
+515 120 2.2339e+010
+512 109 2.23151e+010
+38 167 2.22991e+010
+426 119 2.2246e+010
+78 59 2.22253e+010
+114 176 2.2218e+010
+461 161 2.21659e+010
+512 295 2.21545e+010
+51 64 2.21236e+010
+205 164 2.21151e+010
+266 139 2.21101e+010
+383 325 2.21022e+010
+204 293 2.20716e+010
+541 99 2.20471e+010
+539 99 2.20405e+010
+139 148 2.20362e+010
+296 410 2.2021e+010
+206 220 2.2006e+010
+132 255 2.19838e+010
+258 327 2.19393e+010
+369 84 2.19205e+010
+416 23 2.18662e+010
+175 342 2.18282e+010
+179 103 2.18253e+010
+305 217 2.18119e+010
+401 169 2.18072e+010
+185 374 2.18039e+010
+234 158 2.17853e+010
+123 46 2.17838e+010
+503 180 2.17763e+010
+281 384 2.17759e+010
+251 257 2.17556e+010
+138 185 2.17509e+010
+311 265 2.17397e+010
+481 179 2.17076e+010
+290 249 2.17036e+010
+144 255 2.17022e+010
+157 103 2.17001e+010
+513 180 2.1698e+010
+347 144 2.16822e+010
+88 183 2.16808e+010
+591 103 2.16799e+010
+205 127 2.16775e+010
+250 191 2.16769e+010
+299 106 2.16688e+010
+106 37 2.16652e+010
+414 143 2.16473e+010
+109 99 2.16078e+010
+523 344 2.16059e+010
+358 9 2.15888e+010
+71 47 2.15883e+010
+494 23 2.15763e+010
+243 385 2.1568e+010
+572 364 2.15558e+010
+515 335 2.15342e+010
+379 319 2.15342e+010
+431 340 2.15314e+010
+172 107 2.15297e+010
+347 297 2.15157e+010
+74 6 2.15107e+010
+520 201 2.15036e+010
+31 233 2.14987e+010
+279 183 2.14987e+010
+282 392 2.14874e+010
+215 62 2.14859e+010
+432 268 2.14719e+010
+179 361 2.14713e+010
+266 286 2.14555e+010
+63 230 2.14478e+010
+278 189 2.14265e+010
+545 160 2.14216e+010
+408 141 2.141e+010
+315 238 2.14099e+010
+11 72 2.14086e+010
+513 122 2.13861e+010
+323 370 2.13639e+010
+497 223 2.13633e+010
+316 101 2.13502e+010
+320 224 2.13317e+010
+175 19 2.13221e+010
+391 324 2.13217e+010
+280 186 2.13139e+010
+329 255 2.13106e+010
+394 336 2.12895e+010
+228 347 2.12852e+010
+533 346 2.12741e+010
+281 132 2.1273e+010
+139 58 2.12519e+010
+123 343 2.12413e+010
+391 449 2.12083e+010
+263 142 2.1208e+010
+531 239 2.12023e+010
+402 217 2.11947e+010
+176 180 2.11681e+010
+76 59 2.11564e+010
+105 4 2.11527e+010
+476 261 2.11214e+010
+363 253 2.11157e+010
+323 118 2.11056e+010
+363 129 2.11035e+010
+516 43 2.10979e+010
+196 81 2.10968e+010
+144 432 2.10914e+010
+409 4 2.10838e+010
+247 164 2.10791e+010
+341 314 2.10786e+010
+150 38 2.10623e+010
+164 379 2.10621e+010
+186 200 2.10595e+010
+163 137 2.10552e+010
+133 392 2.10356e+010
+423 122 2.10147e+010
+154 345 2.098e+010
+267 296 2.09721e+010
+185 311 2.09721e+010
+512 139 2.09489e+010
+151 400 2.09461e+010
+529 136 2.09435e+010
+240 165 2.09095e+010
+332 397 2.09011e+010
+198 111 2.08971e+010
+252 222 2.08846e+010
+54 44 2.08746e+010
+180 123 2.08743e+010
+350 318 2.08579e+010
+134 134 2.08565e+010
+315 240 2.08465e+010
+521 426 2.08353e+010
+132 477 2.08219e+010
+545 43 2.08114e+010
+158 74 2.0797e+010
+427 44 2.07913e+010
+507 81 2.07608e+010
+496 462 2.07386e+010
+137 324 2.07279e+010
+333 28 2.07265e+010
+487 222 2.07183e+010
+393 262 2.07141e+010
+249 363 2.0702e+010
+577 403 2.06881e+010
+214 148 2.06852e+010
+256 405 2.06692e+010
+94 198 2.06673e+010
+297 182 2.06606e+010
+13 236 2.06532e+010
+248 262 2.06409e+010
+249 404 2.06304e+010
+36 233 2.06091e+010
+270 64 2.06054e+010
+327 342 2.06029e+010
+402 166 2.05951e+010
+145 187 2.05783e+010
+51 153 2.0562e+010
+279 191 2.05175e+010
+483 286 2.0513e+010
+91 390 2.05054e+010
+458 200 2.04938e+010
+222 214 2.04753e+010
+88 370 2.04546e+010
+282 135 2.04496e+010
+141 3 2.04343e+010
+368 162 2.0415e+010
+246 326 2.04007e+010
+344 263 2.03829e+010
+271 183 2.03827e+010
+95 420 2.03652e+010
+398 169 2.02984e+010
+88 261 2.02914e+010
+374 126 2.02789e+010
+250 315 2.0252e+010
+441 63 2.02428e+010
+95 59 2.02419e+010
+362 359 2.02408e+010
+127 26 2.02343e+010
+477 184 2.0233e+010
+40 148 2.02189e+010
+251 247 2.02119e+010
+205 396 2.02011e+010
+566 43 2.01984e+010
+482 164 2.01795e+010
+387 203 2.01776e+010
+156 307 2.01715e+010
+114 374 2.01405e+010
+261 440 2.01348e+010
+437 126 2.01245e+010
+300 188 2.01245e+010
+198 10 2.00946e+010
+208 315 2.00838e+010
+216 235 2.00684e+010
+384 111 2.00678e+010
+440 241 2.00477e+010
+557 264 2.0044e+010
+226 185 2.00362e+010
+511 181 2.00353e+010
+420 283 1.99901e+010
+250 422 1.99875e+010
+81 4 1.99791e+010
+588 19 1.99513e+010
+540 141 1.99511e+010
+84 372 1.99414e+010
+547 180 1.99346e+010
+464 226 1.9933e+010
+399 67 1.99078e+010
+221 85 1.99002e+010
+252 238 1.98741e+010
+279 194 1.9871e+010
+6 151 1.98591e+010
+236 295 1.98549e+010
+153 222 1.98402e+010
+344 187 1.98362e+010
+41 337 1.98341e+010
+303 406 1.97984e+010
+421 89 1.97892e+010
+590 162 1.97859e+010
+368 31 1.97791e+010
+297 257 1.97773e+010
+487 242 1.97728e+010
+449 284 1.9772e+010
+247 180 1.97481e+010
+106 97 1.96905e+010
+526 122 1.96827e+010
+219 315 1.96772e+010
+170 131 1.96723e+010
+561 144 1.96541e+010
+275 318 1.96515e+010
+31 81 1.96483e+010
+370 29 1.96365e+010
+572 450 1.96302e+010
+312 7 1.96282e+010
+59 204 1.95999e+010
+159 90 1.9594e+010
+302 141 1.95888e+010
+146 15 1.95859e+010
+391 52 1.95675e+010
+215 402 1.95563e+010
+96 257 1.95491e+010
+162 150 1.95176e+010
+23 254 1.95146e+010
+487 119 1.9513e+010
+137 177 1.95009e+010
+222 176 1.94798e+010
+90 321 1.94775e+010
+354 238 1.94715e+010
+482 123 1.94601e+010
+179 18 1.94506e+010
+525 265 1.94415e+010
+244 402 1.94402e+010
+416 377 1.94391e+010
+331 89 1.94346e+010
+395 262 1.94323e+010
+45 407 1.94299e+010
+439 179 1.94129e+010
+149 399 1.94107e+010
+46 121 1.94084e+010
+77 29 1.9405e+010
+179 75 1.93775e+010
+470 202 1.93455e+010
+325 315 1.93425e+010
+179 121 1.93321e+010
+3 109 1.93289e+010
+165 208 1.9313e+010
+229 178 1.92968e+010
+524 289 1.92797e+010
+310 138 1.92775e+010
+193 139 1.92675e+010
+86 356 1.92504e+010
+424 102 1.92369e+010
+263 31 1.9236e+010
+270 222 1.92338e+010
+59 70 1.92303e+010
+390 132 1.92303e+010
+33 235 1.91799e+010
+244 255 1.91594e+010
+516 202 1.91563e+010
+224 130 1.91545e+010
+357 52 1.91504e+010
+304 172 1.91281e+010
+230 92 1.91233e+010
+406 78 1.91132e+010
+47 10 1.91124e+010
+33 39 1.91078e+010
+564 158 1.91044e+010
+154 21 1.91027e+010
+527 357 1.90942e+010
+344 341 1.90807e+010
+407 262 1.9077e+010
+64 218 1.90579e+010
+459 161 1.90578e+010
+225 239 1.90409e+010
+272 414 1.90397e+010
+559 422 1.90361e+010
+108 260 1.90092e+010
+366 107 1.8955e+010
+284 48 1.89487e+010
+529 191 1.89444e+010
+463 139 1.89101e+010
+70 390 1.88963e+010
+125 330 1.88794e+010
+13 202 1.88771e+010
+434 381 1.88679e+010
+396 141 1.88516e+010
+289 264 1.88421e+010
+569 420 1.88364e+010
+575 98 1.88321e+010
+466 127 1.88305e+010
+52 359 1.88241e+010
+340 220 1.88128e+010
+290 112 1.87997e+010
+426 471 1.8795e+010
+325 118 1.87913e+010
+435 144 1.87817e+010
+399 131 1.87649e+010
+93 7 1.87584e+010
+577 15 1.87383e+010
+144 179 1.87319e+010
+192 326 1.87288e+010
+589 350 1.87032e+010
+330 165 1.86974e+010
+361 156 1.86959e+010
+506 198 1.86937e+010
+217 284 1.86878e+010
+164 310 1.86833e+010
+197 165 1.86823e+010
+579 42 1.86777e+010
+374 65 1.8665e+010
+149 2 1.86537e+010
+561 151 1.86468e+010
+53 30 1.86442e+010
+477 221 1.86277e+010
+479 458 1.86036e+010
+415 21 1.85973e+010
+410 417 1.85815e+010
+103 392 1.85619e+010
+243 430 1.85494e+010
+438 454 1.85449e+010
+250 425 1.85384e+010
+292 349 1.85369e+010
+101 113 1.85304e+010
+257 140 1.85289e+010
+436 105 1.85219e+010
+153 75 1.85207e+010
+527 398 1.85207e+010
+8 43 1.85189e+010
+449 349 1.85184e+010
+107 111 1.84942e+010
+459 140 1.84787e+010
+434 396 1.84772e+010
+512 83 1.84544e+010
+172 37 1.84274e+010
+97 198 1.84182e+010
+413 46 1.84048e+010
+344 329 1.83901e+010
+547 162 1.83641e+010
+374 366 1.83499e+010
+569 325 1.83323e+010
+469 302 1.83317e+010
+454 47 1.83312e+010
+184 109 1.83302e+010
+127 365 1.83128e+010
+41 395 1.83098e+010
+200 415 1.83076e+010
+62 439 1.83055e+010
+209 187 1.8277e+010
+420 140 1.8271e+010
+109 77 1.8254e+010
+346 200 1.82437e+010
+572 405 1.82433e+010
+237 149 1.82215e+010
+411 183 1.82146e+010
+225 51 1.81876e+010
+342 297 1.81846e+010
+332 257 1.81647e+010
+115 130 1.81586e+010
+83 3 1.81547e+010
+62 164 1.81388e+010
+479 263 1.81273e+010
+549 281 1.81198e+010
+155 200 1.80967e+010
+569 183 1.80837e+010
+460 356 1.808e+010
+214 161 1.80218e+010
+31 134 1.80096e+010
+68 149 1.8004e+010
+119 54 1.79794e+010
+371 190 1.79663e+010
+176 200 1.79522e+010
+440 125 1.79416e+010
+258 107 1.79409e+010
+407 106 1.79336e+010
+467 22 1.79259e+010
+260 457 1.79164e+010
+312 139 1.79144e+010
+214 132 1.79085e+010
+246 172 1.79076e+010
+140 428 1.78948e+010
+210 21 1.78929e+010
+124 93 1.78822e+010
+472 144 1.78663e+010
+54 389 1.77985e+010
+227 38 1.77954e+010
+571 448 1.77952e+010
+200 110 1.77867e+010
+505 264 1.77755e+010
+13 204 1.77749e+010
+361 296 1.7773e+010
+519 348 1.77618e+010
+350 86 1.77251e+010
+440 468 1.77018e+010
+281 372 1.77014e+010
+465 236 1.76898e+010
+137 138 1.76888e+010
+522 79 1.7678e+010
+415 100 1.7676e+010
+129 113 1.76745e+010
+404 221 1.76662e+010
+281 311 1.76536e+010
+128 257 1.76521e+010
+334 49 1.76436e+010
+591 308 1.76283e+010
+257 221 1.76044e+010
+368 29 1.75896e+010
+87 395 1.75821e+010
+166 126 1.7581e+010
+232 101 1.75749e+010
+436 184 1.75652e+010
+202 293 1.7561e+010
+260 201 1.75522e+010
+258 349 1.7544e+010
+189 171 1.75328e+010
+406 199 1.75314e+010
+557 302 1.75173e+010
+544 175 1.75147e+010
+201 317 1.74751e+010
+384 242 1.74744e+010
+517 1 1.7457e+010
+576 182 1.7456e+010
+84 134 1.7441e+010
+230 112 1.74221e+010
+347 119 1.74166e+010
+509 128 1.74022e+010
+355 296 1.73969e+010
+469 140 1.73959e+010
+88 355 1.73866e+010
+226 121 1.73864e+010
+212 94 1.73789e+010
+42 25 1.73656e+010
+450 91 1.73603e+010
+38 64 1.73563e+010
+198 28 1.73522e+010
+98 149 1.73431e+010
+461 102 1.73321e+010
+374 144 1.73216e+010
+81 40 1.73155e+010
+139 394 1.73025e+010
+409 337 1.72891e+010
+353 424 1.72552e+010
+277 238 1.72493e+010
+570 59 1.72483e+010
+39 82 1.72461e+010
+358 282 1.72371e+010
+467 121 1.72349e+010
+331 103 1.72216e+010
+38 254 1.72146e+010
+77 474 1.71658e+010
+209 451 1.71576e+010
+258 200 1.71517e+010
+537 221 1.71423e+010
+433 241 1.71171e+010
+584 37 1.70959e+010
+215 206 1.70904e+010
+483 326 1.70885e+010
+400 199 1.70871e+010
+393 184 1.70846e+010
+90 399 1.70795e+010
+266 111 1.70586e+010
+24 185 1.7047e+010
+210 163 1.70394e+010
+59 374 1.70376e+010
+405 164 1.70319e+010
+245 211 1.70209e+010
+208 308 1.702e+010
+527 188 1.70189e+010
+68 304 1.70182e+010
+546 365 1.70134e+010
+429 63 1.7009e+010
+146 327 1.69893e+010
+465 100 1.69889e+010
+383 413 1.69747e+010
+248 15 1.69684e+010
+435 87 1.69622e+010
+416 86 1.69591e+010
+42 305 1.69552e+010
+305 411 1.69445e+010
+274 313 1.69354e+010
+248 219 1.69266e+010
+498 44 1.69249e+010
+301 107 1.69079e+010
+187 264 1.69072e+010
+189 169 1.69014e+010
+454 418 1.6896e+010
+565 463 1.68957e+010
+164 312 1.68827e+010
+571 268 1.68741e+010
+164 381 1.68721e+010
+187 219 1.68595e+010
+302 205 1.68567e+010
+490 343 1.68482e+010
+280 392 1.68469e+010
+574 164 1.68423e+010
+281 418 1.68319e+010
+472 211 1.68294e+010
+89 289 1.68072e+010
+102 236 1.68048e+010
+89 230 1.67965e+010
+303 444 1.67943e+010
+62 136 1.67878e+010
+324 31 1.67823e+010
+375 282 1.67816e+010
+545 141 1.67725e+010
+485 326 1.67591e+010
+164 287 1.67581e+010
+487 266 1.6745e+010
+259 331 1.67255e+010
+95 359 1.6717e+010
+470 204 1.66995e+010
+196 310 1.66993e+010
+244 182 1.66988e+010
+313 447 1.66763e+010
+140 315 1.6676e+010
+117 132 1.66477e+010
+263 401 1.664e+010
+165 203 1.66381e+010
+253 147 1.66364e+010
+212 422 1.66329e+010
+79 219 1.66236e+010
+563 178 1.66132e+010
+219 279 1.66092e+010
+217 314 1.66061e+010
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_3_5.txt b/test_data/harriscorners/hc_msc_0.00_0.15_3_5.txt
new file mode 100644
index 0000000..d0545d3
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_3_5.txt
@@ -0,0 +1,2755 @@
+2754
+273 366 1.03858e+012
+122 43 9.43959e+011
+330 128 7.81711e+011
+420 181 7.62046e+011
+422 181 7.52504e+011
+84 78 7.4066e+011
+122 45 7.37604e+011
+448 297 7.33463e+011
+298 53 7.27697e+011
+214 73 6.97482e+011
+237 19 6.86312e+011
+134 214 6.70817e+011
+272 291 6.68358e+011
+199 18 6.67754e+011
+246 94 6.65694e+011
+485 59 6.49721e+011
+436 67 6.48386e+011
+553 40 6.47487e+011
+175 94 6.43601e+011
+387 178 6.25761e+011
+125 364 6.1605e+011
+507 122 6.13473e+011
+395 318 6.08429e+011
+544 168 6.07178e+011
+447 397 6.00073e+011
+400 262 5.93597e+011
+124 254 5.91885e+011
+425 321 5.8891e+011
+303 182 5.86818e+011
+33 137 5.83375e+011
+125 256 5.81492e+011
+275 368 5.65537e+011
+253 139 5.58292e+011
+124 198 5.57708e+011
+184 35 5.51281e+011
+65 235 5.50484e+011
+277 368 5.45713e+011
+35 138 5.4003e+011
+262 441 5.3871e+011
+77 257 5.33267e+011
+302 176 5.29753e+011
+137 209 5.28544e+011
+423 178 5.24847e+011
+257 385 5.23807e+011
+222 38 5.22534e+011
+160 143 5.17429e+011
+90 198 5.12305e+011
+48 27 5.11262e+011
+393 143 5.0707e+011
+242 203 5.05173e+011
+55 29 5.04045e+011
+207 224 5.03916e+011
+427 320 5.03309e+011
+294 15 4.96819e+011
+363 401 4.96682e+011
+344 9 4.86838e+011
+325 88 4.86587e+011
+360 295 4.83138e+011
+207 222 4.81868e+011
+543 365 4.80161e+011
+82 28 4.78084e+011
+543 15 4.76715e+011
+418 8 4.75979e+011
+207 435 4.6989e+011
+456 282 4.69045e+011
+514 76 4.67605e+011
+523 264 4.66568e+011
+301 165 4.66397e+011
+412 256 4.66215e+011
+344 338 4.64985e+011
+239 202 4.6057e+011
+131 36 4.6034e+011
+456 280 4.58317e+011
+449 218 4.5769e+011
+341 337 4.56345e+011
+346 9 4.55572e+011
+390 58 4.54325e+011
+282 117 4.52687e+011
+137 207 4.52659e+011
+509 122 4.52639e+011
+30 8 4.48264e+011
+104 62 4.47021e+011
+225 182 4.46868e+011
+210 435 4.44856e+011
+447 263 4.43206e+011
+317 335 4.40347e+011
+78 2 4.39515e+011
+397 318 4.39302e+011
+101 222 4.36833e+011
+360 335 4.34819e+011
+65 319 4.34407e+011
+285 297 4.32564e+011
+166 241 4.31838e+011
+48 98 4.31676e+011
+238 91 4.31184e+011
+209 55 4.28632e+011
+80 4 4.28396e+011
+172 95 4.24149e+011
+174 312 4.21507e+011
+196 57 4.1893e+011
+281 112 4.17668e+011
+141 183 4.1557e+011
+465 393 4.12699e+011
+311 150 4.12493e+011
+65 343 4.08438e+011
+498 159 4.08252e+011
+124 185 4.07536e+011
+261 297 4.07314e+011
+36 145 4.07292e+011
+383 162 4.06814e+011
+427 118 4.04419e+011
+510 124 4.02483e+011
+545 58 4.02138e+011
+325 164 4.00403e+011
+418 164 3.9947e+011
+508 18 3.98737e+011
+512 342 3.97353e+011
+143 310 3.97089e+011
+511 167 3.93619e+011
+359 167 3.91162e+011
+420 164 3.90696e+011
+291 15 3.88885e+011
+542 209 3.88336e+011
+433 147 3.8725e+011
+562 224 3.87039e+011
+276 182 3.86994e+011
+245 143 3.86457e+011
+416 7 3.85426e+011
+509 164 3.85315e+011
+420 7 3.84395e+011
+244 165 3.805e+011
+453 204 3.80371e+011
+379 69 3.78181e+011
+389 140 3.72939e+011
+5 46 3.7286e+011
+211 438 3.7241e+011
+510 173 3.72303e+011
+282 114 3.71615e+011
+312 76 3.71404e+011
+268 53 3.71127e+011
+543 216 3.7112e+011
+274 290 3.68457e+011
+261 222 3.67218e+011
+478 181 3.6644e+011
+221 181 3.66146e+011
+468 237 3.65916e+011
+404 121 3.65781e+011
+86 255 3.63986e+011
+60 184 3.63558e+011
+33 99 3.62376e+011
+116 44 3.6155e+011
+529 24 3.60692e+011
+47 220 3.60467e+011
+529 183 3.58587e+011
+459 263 3.57831e+011
+484 338 3.57384e+011
+451 339 3.56297e+011
+274 288 3.54993e+011
+100 79 3.5493e+011
+366 7 3.54322e+011
+78 80 3.5261e+011
+201 313 3.511e+011
+313 147 3.49731e+011
+138 172 3.49358e+011
+263 297 3.49179e+011
+459 279 3.48533e+011
+113 345 3.46847e+011
+241 71 3.46469e+011
+512 98 3.45819e+011
+127 164 3.4565e+011
+37 63 3.45124e+011
+470 238 3.44575e+011
+131 26 3.43377e+011
+364 200 3.43142e+011
+364 251 3.41754e+011
+58 74 3.4076e+011
+377 318 3.40129e+011
+83 135 3.39823e+011
+106 39 3.37731e+011
+320 225 3.36827e+011
+482 338 3.3627e+011
+347 179 3.3592e+011
+102 360 3.35268e+011
+496 119 3.34527e+011
+509 1 3.33243e+011
+363 8 3.33012e+011
+36 176 3.31887e+011
+528 104 3.31515e+011
+163 277 3.31134e+011
+88 196 3.30915e+011
+71 147 3.29476e+011
+546 41 3.27813e+011
+59 219 3.27181e+011
+480 82 3.2701e+011
+139 203 3.26386e+011
+423 45 3.26376e+011
+308 371 3.26095e+011
+112 213 3.26084e+011
+421 162 3.25361e+011
+525 199 3.25335e+011
+552 384 3.23493e+011
+390 48 3.23064e+011
+266 295 3.22698e+011
+113 343 3.22403e+011
+480 181 3.21743e+011
+509 455 3.21147e+011
+354 320 3.20076e+011
+31 270 3.20023e+011
+136 203 3.19881e+011
+138 110 3.19824e+011
+386 221 3.1865e+011
+233 199 3.16623e+011
+164 20 3.16136e+011
+217 208 3.15341e+011
+377 316 3.1373e+011
+528 102 3.10351e+011
+467 124 3.09602e+011
+159 183 3.09307e+011
+384 222 3.08947e+011
+511 220 3.08225e+011
+412 45 3.07548e+011
+176 106 3.07475e+011
+36 299 3.07447e+011
+313 84 3.06677e+011
+527 99 3.06542e+011
+382 5 3.05338e+011
+109 240 3.05208e+011
+225 420 3.04668e+011
+110 135 3.04343e+011
+403 119 3.03408e+011
+366 201 3.0305e+011
+372 83 3.02607e+011
+228 185 3.01129e+011
+395 261 3.01079e+011
+152 223 3.01034e+011
+317 165 3.0101e+011
+168 19 3.01e+011
+506 164 2.99669e+011
+465 197 2.98716e+011
+573 141 2.98537e+011
+364 257 2.98361e+011
+555 181 2.98257e+011
+251 12 2.97766e+011
+560 226 2.97764e+011
+484 179 2.97388e+011
+283 402 2.9724e+011
+321 313 2.96154e+011
+270 53 2.94922e+011
+264 299 2.93485e+011
+388 10 2.92956e+011
+457 264 2.9295e+011
+113 392 2.91688e+011
+75 237 2.90917e+011
+276 352 2.90566e+011
+211 185 2.90175e+011
+364 254 2.89675e+011
+488 265 2.89662e+011
+262 165 2.89386e+011
+283 72 2.89089e+011
+276 180 2.8898e+011
+183 138 2.88697e+011
+424 261 2.88172e+011
+142 324 2.8817e+011
+163 96 2.88105e+011
+156 94 2.87929e+011
+527 360 2.87364e+011
+214 58 2.87239e+011
+478 15 2.84978e+011
+305 193 2.84318e+011
+151 307 2.84268e+011
+230 36 2.84216e+011
+470 122 2.84191e+011
+357 334 2.83321e+011
+113 3 2.83074e+011
+223 419 2.82728e+011
+525 172 2.82036e+011
+221 150 2.81971e+011
+51 98 2.81289e+011
+165 96 2.80869e+011
+327 141 2.79424e+011
+170 18 2.79238e+011
+449 402 2.79129e+011
+318 384 2.79011e+011
+524 20 2.78469e+011
+160 111 2.78191e+011
+10 102 2.78064e+011
+30 237 2.77724e+011
+486 358 2.77e+011
+566 61 2.76744e+011
+537 139 2.76444e+011
+41 63 2.7632e+011
+62 60 2.75612e+011
+278 366 2.74411e+011
+569 39 2.7437e+011
+475 261 2.73925e+011
+407 352 2.73863e+011
+350 338 2.73767e+011
+544 3 2.73506e+011
+222 16 2.73301e+011
+130 217 2.72867e+011
+351 321 2.72542e+011
+461 263 2.71774e+011
+96 79 2.71594e+011
+526 102 2.71095e+011
+569 41 2.70576e+011
+244 71 2.69907e+011
+131 1 2.69156e+011
+254 75 2.68712e+011
+527 362 2.68572e+011
+271 278 2.67763e+011
+559 19 2.67715e+011
+207 450 2.67636e+011
+88 148 2.67338e+011
+502 143 2.67267e+011
+125 260 2.6671e+011
+373 162 2.66377e+011
+188 181 2.66254e+011
+32 268 2.65592e+011
+273 296 2.6463e+011
+297 420 2.64572e+011
+174 239 2.64386e+011
+82 76 2.63849e+011
+223 220 2.6383e+011
+176 259 2.63679e+011
+192 172 2.62973e+011
+175 113 2.62664e+011
+325 141 2.62387e+011
+343 122 2.6225e+011
+483 359 2.61959e+011
+213 55 2.61419e+011
+363 297 2.61196e+011
+508 5 2.60767e+011
+362 395 2.60511e+011
+260 235 2.60261e+011
+372 117 2.60218e+011
+40 217 2.59686e+011
+154 236 2.59349e+011
+537 393 2.5877e+011
+348 338 2.58583e+011
+423 48 2.58557e+011
+306 363 2.58373e+011
+49 151 2.57805e+011
+479 18 2.57388e+011
+92 214 2.57293e+011
+37 297 2.56565e+011
+522 123 2.56155e+011
+277 138 2.56061e+011
+292 121 2.55216e+011
+510 79 2.55006e+011
+330 106 2.54977e+011
+76 8 2.54416e+011
+186 215 2.53984e+011
+183 401 2.52683e+011
+544 7 2.52543e+011
+67 234 2.52414e+011
+252 423 2.51913e+011
+79 270 2.51858e+011
+524 347 2.51319e+011
+62 371 2.50521e+011
+541 41 2.50509e+011
+222 115 2.492e+011
+24 62 2.48919e+011
+51 289 2.48884e+011
+173 115 2.48509e+011
+463 27 2.47846e+011
+332 106 2.47724e+011
+75 235 2.46863e+011
+387 126 2.46845e+011
+455 264 2.46543e+011
+507 2 2.45986e+011
+109 58 2.4546e+011
+293 26 2.45332e+011
+146 160 2.44901e+011
+267 15 2.44321e+011
+371 162 2.44073e+011
+480 299 2.43989e+011
+464 199 2.43857e+011
+324 314 2.43711e+011
+260 237 2.43253e+011
+264 201 2.43118e+011
+498 65 2.42992e+011
+430 320 2.42868e+011
+21 61 2.42696e+011
+190 172 2.42346e+011
+412 5 2.42041e+011
+107 62 2.41762e+011
+557 18 2.41748e+011
+526 347 2.41657e+011
+417 84 2.41639e+011
+578 50 2.41499e+011
+374 240 2.41013e+011
+273 71 2.40446e+011
+345 276 2.40396e+011
+163 213 2.4027e+011
+276 217 2.39864e+011
+281 48 2.39416e+011
+37 218 2.39069e+011
+234 160 2.38654e+011
+387 326 2.38484e+011
+424 337 2.38345e+011
+164 208 2.38266e+011
+442 22 2.38089e+011
+272 167 2.37981e+011
+434 397 2.37882e+011
+167 326 2.37716e+011
+374 85 2.37673e+011
+477 5 2.3716e+011
+191 145 2.37093e+011
+326 427 2.37061e+011
+209 154 2.36926e+011
+133 74 2.36897e+011
+260 71 2.36303e+011
+423 398 2.3626e+011
+401 183 2.35729e+011
+534 267 2.35107e+011
+541 123 2.34776e+011
+158 112 2.34762e+011
+454 83 2.34431e+011
+519 202 2.3415e+011
+473 261 2.33965e+011
+31 135 2.33909e+011
+298 69 2.3373e+011
+175 115 2.33695e+011
+269 242 2.33271e+011
+364 181 2.33102e+011
+376 85 2.33025e+011
+448 139 2.33023e+011
+173 113 2.32933e+011
+273 131 2.32931e+011
+478 82 2.329e+011
+542 132 2.3286e+011
+324 148 2.32798e+011
+63 133 2.32197e+011
+575 126 2.32094e+011
+157 73 2.31451e+011
+386 243 2.3134e+011
+511 83 2.31307e+011
+314 164 2.31289e+011
+418 439 2.30854e+011
+409 45 2.29927e+011
+360 260 2.29883e+011
+286 164 2.29858e+011
+380 337 2.29811e+011
+512 94 2.29811e+011
+372 69 2.29762e+011
+267 13 2.29113e+011
+395 159 2.29071e+011
+511 128 2.28637e+011
+225 295 2.2833e+011
+445 22 2.28238e+011
+265 31 2.28179e+011
+362 130 2.28026e+011
+333 90 2.27673e+011
+132 72 2.27036e+011
+191 277 2.26993e+011
+216 145 2.26938e+011
+272 282 2.26412e+011
+25 66 2.26296e+011
+358 128 2.26203e+011
+182 111 2.25789e+011
+148 397 2.25773e+011
+436 182 2.25528e+011
+258 89 2.25187e+011
+209 20 2.24957e+011
+579 16 2.24883e+011
+360 131 2.24755e+011
+280 371 2.2469e+011
+267 130 2.24114e+011
+510 141 2.23454e+011
+404 338 2.22901e+011
+212 182 2.22551e+011
+498 67 2.22247e+011
+546 216 2.21727e+011
+346 350 2.21603e+011
+317 312 2.21277e+011
+92 292 2.20759e+011
+525 196 2.20606e+011
+276 392 2.20427e+011
+302 173 2.20421e+011
+547 161 2.20364e+011
+332 295 2.20354e+011
+539 96 2.19298e+011
+330 10 2.19132e+011
+344 165 2.19086e+011
+235 162 2.18893e+011
+539 458 2.18791e+011
+422 337 2.18778e+011
+57 5 2.18113e+011
+164 358 2.1789e+011
+271 63 2.17809e+011
+278 144 2.17632e+011
+230 292 2.17489e+011
+78 474 2.17321e+011
+48 133 2.17292e+011
+529 362 2.1631e+011
+175 1 2.16304e+011
+293 119 2.16211e+011
+25 64 2.16179e+011
+283 50 2.15953e+011
+452 83 2.15887e+011
+302 215 2.15873e+011
+102 235 2.1582e+011
+255 151 2.15615e+011
+171 201 2.15604e+011
+214 145 2.15276e+011
+235 346 2.14947e+011
+516 347 2.14757e+011
+381 26 2.14181e+011
+450 82 2.13965e+011
+68 46 2.13673e+011
+216 279 2.13523e+011
+339 473 2.12906e+011
+242 58 2.12786e+011
+368 143 2.1273e+011
+44 62 2.12701e+011
+72 96 2.12694e+011
+116 76 2.1262e+011
+55 5 2.12562e+011
+255 149 2.12532e+011
+172 40 2.12527e+011
+79 196 2.12476e+011
+274 52 2.11948e+011
+332 202 2.11736e+011
+441 240 2.117e+011
+75 96 2.11345e+011
+138 98 2.11187e+011
+327 182 2.10812e+011
+135 129 2.10552e+011
+410 353 2.10519e+011
+151 114 2.10476e+011
+249 313 2.10437e+011
+186 108 2.10047e+011
+451 373 2.10009e+011
+350 145 2.0973e+011
+549 382 2.09547e+011
+28 30 2.0949e+011
+278 392 2.09342e+011
+352 146 2.09032e+011
+237 163 2.0881e+011
+532 102 2.08681e+011
+358 241 2.08625e+011
+576 179 2.0854e+011
+462 395 2.08268e+011
+176 186 2.082e+011
+329 202 2.08169e+011
+206 158 2.0763e+011
+25 200 2.0702e+011
+229 198 2.06803e+011
+186 170 2.06794e+011
+84 477 2.06517e+011
+406 81 2.06415e+011
+163 211 2.06395e+011
+189 109 2.06268e+011
+478 13 2.06266e+011
+96 449 2.05814e+011
+47 11 2.05321e+011
+53 5 2.04908e+011
+161 20 2.04652e+011
+264 71 2.04398e+011
+124 40 2.04371e+011
+302 180 2.04336e+011
+441 98 2.04315e+011
+420 166 2.04016e+011
+520 182 2.03993e+011
+451 262 2.03849e+011
+533 183 2.0379e+011
+549 183 2.03513e+011
+425 377 2.03199e+011
+507 60 2.03155e+011
+161 238 2.03018e+011
+269 63 2.02833e+011
+361 251 2.02541e+011
+379 107 2.02119e+011
+480 165 2.01838e+011
+557 246 2.01814e+011
+420 45 2.01651e+011
+47 147 2.01606e+011
+533 21 2.01249e+011
+398 356 2.01199e+011
+84 2 2.00872e+011
+214 124 2.0064e+011
+379 339 2.00136e+011
+506 16 1.99945e+011
+418 283 1.99934e+011
+413 99 1.9954e+011
+489 182 1.99184e+011
+162 216 1.99015e+011
+444 452 1.98775e+011
+505 61 1.98552e+011
+189 146 1.98506e+011
+451 264 1.98452e+011
+287 51 1.98122e+011
+228 130 1.97959e+011
+561 321 1.97841e+011
+37 173 1.97473e+011
+572 39 1.97381e+011
+446 352 1.97279e+011
+530 360 1.97214e+011
+355 268 1.96974e+011
+181 394 1.96954e+011
+536 244 1.96591e+011
+274 215 1.9658e+011
+561 18 1.96335e+011
+269 278 1.96202e+011
+136 98 1.96061e+011
+510 143 1.95772e+011
+365 299 1.95443e+011
+511 203 1.95428e+011
+203 294 1.95173e+011
+336 391 1.95027e+011
+104 4 1.94962e+011
+359 317 1.94002e+011
+358 10 1.93527e+011
+527 183 1.93283e+011
+307 89 1.93273e+011
+487 24 1.93261e+011
+269 61 1.9263e+011
+271 61 1.92568e+011
+564 62 1.92211e+011
+563 18 1.9215e+011
+55 66 1.91485e+011
+233 261 1.91459e+011
+191 330 1.91346e+011
+265 446 1.90957e+011
+193 16 1.90799e+011
+473 203 1.9074e+011
+414 21 1.90313e+011
+580 80 1.90309e+011
+58 289 1.90297e+011
+281 222 1.90151e+011
+163 74 1.90116e+011
+247 220 1.90101e+011
+181 138 1.90017e+011
+479 261 1.89856e+011
+185 20 1.89618e+011
+221 177 1.89408e+011
+185 201 1.89321e+011
+102 5 1.89308e+011
+184 344 1.89252e+011
+196 131 1.89223e+011
+214 143 1.89044e+011
+578 80 1.88855e+011
+43 9 1.88785e+011
+117 392 1.8871e+011
+436 338 1.88696e+011
+140 394 1.88583e+011
+357 220 1.8855e+011
+377 6 1.88489e+011
+85 181 1.88236e+011
+474 63 1.88163e+011
+301 264 1.87959e+011
+49 159 1.87764e+011
+555 244 1.87676e+011
+343 463 1.87422e+011
+109 98 1.8731e+011
+538 94 1.87309e+011
+286 343 1.87225e+011
+338 391 1.87025e+011
+479 451 1.87e+011
+304 157 1.85761e+011
+298 136 1.85431e+011
+266 71 1.85384e+011
+397 265 1.8533e+011
+516 182 1.85254e+011
+42 24 1.85242e+011
+314 161 1.85073e+011
+3 155 1.84921e+011
+538 122 1.84681e+011
+96 446 1.84559e+011
+123 272 1.84558e+011
+162 126 1.84411e+011
+134 237 1.84408e+011
+175 41 1.84319e+011
+284 241 1.84169e+011
+112 41 1.8403e+011
+502 164 1.83889e+011
+502 160 1.83695e+011
+504 164 1.83693e+011
+412 65 1.83588e+011
+476 341 1.83486e+011
+6 65 1.83459e+011
+248 316 1.83263e+011
+570 141 1.83247e+011
+181 202 1.82962e+011
+286 262 1.82945e+011
+174 19 1.82941e+011
+214 61 1.82611e+011
+242 168 1.82517e+011
+269 93 1.82379e+011
+536 121 1.82287e+011
+190 218 1.82174e+011
+412 24 1.82158e+011
+45 82 1.82104e+011
+62 253 1.81929e+011
+405 376 1.8186e+011
+433 111 1.81832e+011
+364 354 1.81668e+011
+159 91 1.81576e+011
+159 75 1.81461e+011
+135 131 1.81436e+011
+324 341 1.81276e+011
+314 222 1.81189e+011
+186 218 1.81035e+011
+498 63 1.8093e+011
+363 408 1.80912e+011
+204 203 1.80892e+011
+150 152 1.80601e+011
+168 56 1.80371e+011
+226 221 1.80239e+011
+264 444 1.80233e+011
+297 331 1.80217e+011
+492 139 1.80102e+011
+410 24 1.79882e+011
+203 308 1.798e+011
+111 393 1.79589e+011
+36 201 1.79364e+011
+235 73 1.79333e+011
+296 296 1.7929e+011
+411 98 1.79061e+011
+95 477 1.78825e+011
+361 316 1.78733e+011
+387 283 1.78455e+011
+390 297 1.7843e+011
+278 191 1.78239e+011
+194 218 1.77897e+011
+21 59 1.77833e+011
+119 95 1.77819e+011
+467 41 1.77544e+011
+191 205 1.77364e+011
+451 375 1.77354e+011
+35 173 1.77342e+011
+517 184 1.77266e+011
+541 164 1.77e+011
+551 182 1.76953e+011
+342 465 1.76822e+011
+344 263 1.7673e+011
+111 264 1.76199e+011
+341 163 1.7606e+011
+263 219 1.75816e+011
+119 60 1.75599e+011
+354 127 1.75558e+011
+225 51 1.75509e+011
+414 259 1.75484e+011
+161 169 1.75153e+011
+66 252 1.74922e+011
+130 428 1.74728e+011
+498 224 1.74676e+011
+133 132 1.74563e+011
+126 219 1.74431e+011
+169 197 1.73841e+011
+509 83 1.73822e+011
+563 159 1.73686e+011
+452 102 1.73357e+011
+142 2 1.73322e+011
+95 148 1.73275e+011
+186 341 1.73085e+011
+476 21 1.72958e+011
+60 253 1.72955e+011
+90 376 1.72733e+011
+405 199 1.72409e+011
+399 318 1.7225e+011
+44 474 1.72145e+011
+554 202 1.71974e+011
+196 76 1.71801e+011
+5 9 1.71002e+011
+38 168 1.70773e+011
+447 350 1.70657e+011
+239 350 1.70649e+011
+38 171 1.70002e+011
+272 181 1.69979e+011
+273 222 1.69855e+011
+14 203 1.69597e+011
+411 22 1.69369e+011
+260 329 1.69288e+011
+227 72 1.69255e+011
+571 122 1.68973e+011
+95 217 1.68639e+011
+534 161 1.68416e+011
+384 323 1.68297e+011
+352 163 1.68237e+011
+486 4 1.68201e+011
+45 148 1.68186e+011
+140 3 1.68044e+011
+53 221 1.67976e+011
+273 220 1.6797e+011
+559 80 1.67531e+011
+178 274 1.6752e+011
+517 43 1.67408e+011
+489 139 1.67339e+011
+171 239 1.67195e+011
+403 181 1.6695e+011
+408 82 1.66923e+011
+151 111 1.66624e+011
+245 293 1.66556e+011
+421 398 1.66543e+011
+572 332 1.66424e+011
+12 80 1.66412e+011
+95 6 1.66381e+011
+220 126 1.66318e+011
+100 198 1.66154e+011
+419 87 1.66034e+011
+289 396 1.65928e+011
+509 301 1.65808e+011
+473 23 1.65596e+011
+220 290 1.65439e+011
+289 183 1.65361e+011
+163 168 1.65102e+011
+402 167 1.65045e+011
+460 339 1.64897e+011
+529 365 1.64649e+011
+270 66 1.64628e+011
+368 337 1.64492e+011
+209 420 1.6438e+011
+309 7 1.64359e+011
+39 239 1.64228e+011
+364 356 1.64099e+011
+510 362 1.63969e+011
+39 309 1.63945e+011
+33 234 1.63945e+011
+341 165 1.63938e+011
+216 125 1.63828e+011
+94 94 1.63794e+011
+387 281 1.63493e+011
+507 83 1.63434e+011
+278 334 1.63341e+011
+57 146 1.6327e+011
+108 45 1.63101e+011
+321 29 1.63095e+011
+191 360 1.63066e+011
+393 353 1.62944e+011
+162 123 1.62875e+011
+395 22 1.62767e+011
+282 393 1.62572e+011
+408 183 1.62512e+011
+434 340 1.62455e+011
+278 331 1.62248e+011
+120 110 1.6213e+011
+318 202 1.62126e+011
+452 162 1.62116e+011
+571 162 1.61788e+011
+372 393 1.6177e+011
+259 34 1.61587e+011
+371 90 1.6148e+011
+524 223 1.61294e+011
+60 203 1.61263e+011
+432 123 1.61083e+011
+56 78 1.60931e+011
+276 334 1.60914e+011
+49 12 1.60879e+011
+440 181 1.60782e+011
+59 147 1.60506e+011
+154 198 1.60481e+011
+109 95 1.60431e+011
+560 272 1.60408e+011
+280 385 1.60397e+011
+571 450 1.60236e+011
+251 152 1.60176e+011
+262 392 1.60045e+011
+32 29 1.60037e+011
+424 62 1.60009e+011
+178 122 1.60007e+011
+411 101 1.59959e+011
+461 123 1.59868e+011
+118 110 1.5983e+011
+365 106 1.59693e+011
+41 307 1.5969e+011
+131 77 1.59536e+011
+35 134 1.5949e+011
+220 100 1.59482e+011
+200 166 1.59466e+011
+217 55 1.59255e+011
+510 180 1.59204e+011
+111 95 1.59152e+011
+165 327 1.59092e+011
+366 260 1.59067e+011
+391 159 1.59037e+011
+446 7 1.58991e+011
+407 65 1.5895e+011
+297 273 1.58695e+011
+539 79 1.58646e+011
+361 314 1.58601e+011
+354 106 1.5854e+011
+288 263 1.58503e+011
+474 245 1.58251e+011
+326 295 1.58247e+011
+449 445 1.57725e+011
+129 167 1.5739e+011
+221 152 1.57276e+011
+230 149 1.57195e+011
+389 243 1.56948e+011
+525 39 1.56919e+011
+595 18 1.5688e+011
+408 430 1.56818e+011
+249 192 1.56766e+011
+90 289 1.56508e+011
+166 149 1.56109e+011
+481 172 1.55977e+011
+160 95 1.55973e+011
+96 196 1.55963e+011
+129 238 1.5595e+011
+388 97 1.55944e+011
+368 1 1.5578e+011
+178 18 1.55541e+011
+125 76 1.55344e+011
+186 101 1.55269e+011
+529 31 1.55067e+011
+386 165 1.55066e+011
+439 124 1.55019e+011
+410 82 1.54856e+011
+508 179 1.5455e+011
+329 166 1.54399e+011
+150 1 1.54251e+011
+413 298 1.54232e+011
+375 392 1.54199e+011
+445 128 1.54048e+011
+537 261 1.54029e+011
+57 254 1.53898e+011
+210 136 1.53823e+011
+537 80 1.53689e+011
+354 25 1.53673e+011
+190 216 1.53629e+011
+279 187 1.53555e+011
+163 148 1.53511e+011
+181 135 1.53486e+011
+307 448 1.5343e+011
+44 98 1.53245e+011
+418 258 1.53221e+011
+341 8 1.53155e+011
+58 71 1.53114e+011
+328 106 1.52872e+011
+264 250 1.52557e+011
+358 8 1.52416e+011
+573 405 1.52081e+011
+437 304 1.52031e+011
+411 355 1.51913e+011
+495 456 1.51897e+011
+392 295 1.51813e+011
+257 220 1.51749e+011
+462 100 1.51666e+011
+284 110 1.51561e+011
+154 196 1.51533e+011
+329 257 1.51529e+011
+392 19 1.51415e+011
+263 141 1.51311e+011
+144 16 1.51166e+011
+166 115 1.51e+011
+516 19 1.50989e+011
+531 142 1.50775e+011
+493 457 1.50741e+011
+225 130 1.50689e+011
+454 47 1.50616e+011
+387 167 1.5038e+011
+118 425 1.50316e+011
+316 239 1.5008e+011
+572 334 1.49312e+011
+165 110 1.49192e+011
+26 132 1.49165e+011
+526 382 1.49067e+011
+80 40 1.49029e+011
+595 20 1.48845e+011
+93 255 1.48721e+011
+116 129 1.48676e+011
+57 364 1.48401e+011
+377 65 1.48361e+011
+233 345 1.48281e+011
+259 273 1.48264e+011
+352 11 1.48228e+011
+89 259 1.48188e+011
+228 38 1.48125e+011
+270 106 1.48064e+011
+539 405 1.48029e+011
+204 164 1.47917e+011
+512 262 1.47716e+011
+312 222 1.47571e+011
+401 104 1.47464e+011
+546 17 1.47314e+011
+345 108 1.47268e+011
+238 220 1.47232e+011
+562 149 1.47116e+011
+429 117 1.46912e+011
+65 275 1.46791e+011
+241 166 1.46577e+011
+501 42 1.46533e+011
+270 144 1.46528e+011
+99 360 1.46408e+011
+574 129 1.46394e+011
+49 256 1.46266e+011
+529 161 1.46198e+011
+465 355 1.46077e+011
+69 129 1.46054e+011
+557 182 1.45518e+011
+239 74 1.45491e+011
+249 219 1.45455e+011
+330 89 1.45433e+011
+104 224 1.45121e+011
+68 337 1.45081e+011
+393 216 1.44974e+011
+53 42 1.4485e+011
+262 402 1.44717e+011
+18 342 1.44682e+011
+276 220 1.44593e+011
+187 201 1.44476e+011
+146 79 1.4419e+011
+154 114 1.44111e+011
+198 75 1.439e+011
+95 422 1.439e+011
+395 105 1.43793e+011
+343 198 1.43716e+011
+95 59 1.43642e+011
+565 18 1.43634e+011
+53 359 1.43582e+011
+299 190 1.43485e+011
+416 261 1.43364e+011
+321 104 1.43335e+011
+388 14 1.43294e+011
+355 12 1.43053e+011
+578 43 1.42619e+011
+382 411 1.42546e+011
+549 59 1.42503e+011
+206 160 1.42442e+011
+223 153 1.42387e+011
+403 187 1.42307e+011
+93 476 1.42072e+011
+550 223 1.41957e+011
+437 124 1.41887e+011
+485 162 1.41882e+011
+514 363 1.41836e+011
+12 205 1.4181e+011
+32 66 1.4149e+011
+331 142 1.41351e+011
+471 421 1.41338e+011
+407 142 1.41333e+011
+174 201 1.41237e+011
+439 122 1.41146e+011
+227 259 1.41073e+011
+462 339 1.40925e+011
+281 35 1.40833e+011
+535 393 1.40692e+011
+192 140 1.40597e+011
+504 160 1.40593e+011
+277 186 1.40366e+011
+361 370 1.39801e+011
+289 88 1.39769e+011
+387 175 1.3972e+011
+253 194 1.39577e+011
+293 312 1.3948e+011
+446 123 1.39425e+011
+382 180 1.3935e+011
+71 409 1.39222e+011
+411 471 1.39163e+011
+302 170 1.39119e+011
+246 206 1.3891e+011
+172 55 1.38903e+011
+483 176 1.38803e+011
+388 420 1.38651e+011
+460 162 1.3859e+011
+290 348 1.38428e+011
+513 143 1.38335e+011
+469 141 1.38308e+011
+422 315 1.3829e+011
+352 126 1.38227e+011
+32 218 1.38102e+011
+119 129 1.38002e+011
+485 377 1.37903e+011
+163 311 1.37898e+011
+346 296 1.37617e+011
+73 186 1.37367e+011
+462 341 1.37277e+011
+281 419 1.37054e+011
+222 239 1.36871e+011
+123 161 1.36833e+011
+78 60 1.36578e+011
+506 177 1.36501e+011
+249 423 1.36421e+011
+354 15 1.36415e+011
+483 377 1.363e+011
+380 119 1.36272e+011
+87 369 1.36228e+011
+50 62 1.36078e+011
+478 241 1.3604e+011
+123 95 1.35931e+011
+276 394 1.35715e+011
+183 184 1.35553e+011
+92 59 1.35384e+011
+458 161 1.35354e+011
+85 214 1.35237e+011
+397 24 1.35229e+011
+299 106 1.35088e+011
+294 334 1.34994e+011
+286 34 1.34901e+011
+469 43 1.34771e+011
+525 422 1.34717e+011
+322 119 1.34599e+011
+93 20 1.34531e+011
+49 235 1.3446e+011
+376 353 1.34455e+011
+236 150 1.34445e+011
+40 354 1.34385e+011
+191 314 1.34353e+011
+387 322 1.34087e+011
+506 381 1.34083e+011
+334 28 1.34034e+011
+265 204 1.33913e+011
+194 172 1.33902e+011
+130 255 1.33883e+011
+410 66 1.33848e+011
+127 26 1.33717e+011
+279 193 1.33685e+011
+337 428 1.3367e+011
+87 372 1.3344e+011
+37 268 1.33416e+011
+437 122 1.33358e+011
+393 218 1.33322e+011
+272 353 1.33291e+011
+184 142 1.33249e+011
+513 200 1.33086e+011
+171 448 1.33044e+011
+513 44 1.33038e+011
+536 242 1.33019e+011
+195 111 1.33018e+011
+513 181 1.3299e+011
+119 58 1.32921e+011
+3 382 1.32873e+011
+58 102 1.32868e+011
+510 135 1.32828e+011
+468 139 1.32809e+011
+483 174 1.32784e+011
+18 64 1.32651e+011
+482 46 1.32607e+011
+497 283 1.32463e+011
+111 169 1.32458e+011
+138 146 1.32451e+011
+148 22 1.32359e+011
+247 347 1.3235e+011
+186 309 1.32321e+011
+157 308 1.3229e+011
+162 254 1.32289e+011
+599 364 1.32131e+011
+164 313 1.32127e+011
+520 345 1.31948e+011
+279 419 1.3192e+011
+397 22 1.3191e+011
+109 325 1.31765e+011
+333 369 1.31744e+011
+370 87 1.31682e+011
+242 420 1.31576e+011
+212 32 1.31489e+011
+308 440 1.30944e+011
+456 85 1.30934e+011
+279 129 1.3087e+011
+503 362 1.30647e+011
+344 110 1.30642e+011
+538 268 1.30443e+011
+421 140 1.30436e+011
+21 66 1.3025e+011
+258 329 1.30155e+011
+294 332 1.30124e+011
+532 266 1.30084e+011
+180 165 1.30067e+011
+92 95 1.29947e+011
+30 256 1.29805e+011
+199 293 1.29784e+011
+390 326 1.29758e+011
+448 285 1.29746e+011
+447 376 1.29602e+011
+505 361 1.29556e+011
+258 161 1.29458e+011
+482 86 1.29368e+011
+448 22 1.29237e+011
+131 238 1.29188e+011
+532 268 1.29051e+011
+260 249 1.29043e+011
+87 340 1.29031e+011
+206 163 1.2863e+011
+129 113 1.28615e+011
+540 141 1.28598e+011
+297 182 1.28556e+011
+531 160 1.28539e+011
+332 241 1.28477e+011
+377 121 1.28464e+011
+110 358 1.28458e+011
+410 260 1.28141e+011
+331 166 1.28101e+011
+280 134 1.28014e+011
+164 286 1.27889e+011
+384 89 1.27871e+011
+471 212 1.27849e+011
+443 320 1.27834e+011
+274 209 1.2781e+011
+28 255 1.27764e+011
+506 160 1.27732e+011
+304 53 1.27708e+011
+107 108 1.27596e+011
+21 218 1.27572e+011
+251 192 1.27543e+011
+573 161 1.27117e+011
+270 104 1.26963e+011
+266 293 1.26827e+011
+453 359 1.26764e+011
+280 132 1.26673e+011
+433 113 1.2661e+011
+584 38 1.26537e+011
+263 390 1.26527e+011
+393 65 1.26517e+011
+276 222 1.26516e+011
+384 258 1.26506e+011
+405 163 1.26476e+011
+469 201 1.26469e+011
+469 204 1.26305e+011
+329 320 1.26268e+011
+588 161 1.2623e+011
+106 98 1.26217e+011
+335 427 1.26065e+011
+177 57 1.26007e+011
+461 43 1.25875e+011
+281 193 1.25846e+011
+376 182 1.2581e+011
+471 83 1.25733e+011
+325 13 1.25712e+011
+460 357 1.25681e+011
+570 182 1.25611e+011
+437 150 1.25552e+011
+215 174 1.25448e+011
+108 358 1.25446e+011
+514 381 1.25407e+011
+500 265 1.25363e+011
+109 147 1.25149e+011
+359 218 1.25061e+011
+191 123 1.25015e+011
+191 312 1.24782e+011
+223 124 1.24771e+011
+374 300 1.24753e+011
+382 46 1.24721e+011
+438 241 1.24713e+011
+64 218 1.24671e+011
+247 106 1.24659e+011
+38 138 1.24624e+011
+370 392 1.24611e+011
+540 1 1.2458e+011
+126 330 1.24568e+011
+188 264 1.24451e+011
+88 182 1.24258e+011
+448 165 1.2417e+011
+199 29 1.24104e+011
+573 178 1.2406e+011
+529 141 1.23999e+011
+446 243 1.23882e+011
+35 267 1.23868e+011
+283 53 1.23845e+011
+323 105 1.23727e+011
+483 288 1.23677e+011
+294 295 1.2365e+011
+354 220 1.23613e+011
+217 97 1.23317e+011
+287 111 1.23295e+011
+328 255 1.23257e+011
+507 203 1.23211e+011
+382 147 1.2297e+011
+391 322 1.22942e+011
+41 11 1.22863e+011
+265 140 1.22836e+011
+366 86 1.22705e+011
+326 342 1.22648e+011
+33 111 1.22616e+011
+246 181 1.22516e+011
+288 125 1.22366e+011
+114 178 1.22359e+011
+535 93 1.22334e+011
+280 136 1.22286e+011
+566 39 1.22285e+011
+332 415 1.22269e+011
+249 387 1.22235e+011
+253 77 1.21939e+011
+260 390 1.21895e+011
+451 324 1.2189e+011
+549 379 1.21843e+011
+267 287 1.21782e+011
+95 124 1.21714e+011
+515 120 1.21629e+011
+436 320 1.21572e+011
+208 202 1.21568e+011
+250 91 1.21545e+011
+304 55 1.2151e+011
+451 86 1.21456e+011
+120 446 1.21379e+011
+541 99 1.21373e+011
+30 220 1.21098e+011
+245 385 1.21075e+011
+392 166 1.21018e+011
+366 95 1.21002e+011
+167 315 1.20972e+011
+145 326 1.20626e+011
+243 189 1.20615e+011
+91 276 1.20516e+011
+157 306 1.20424e+011
+107 428 1.20256e+011
+359 53 1.20144e+011
+43 150 1.20044e+011
+250 183 1.19961e+011
+517 58 1.19957e+011
+39 144 1.19908e+011
+562 324 1.19839e+011
+360 161 1.19737e+011
+301 102 1.19703e+011
+274 75 1.19469e+011
+236 197 1.19458e+011
+194 135 1.19444e+011
+200 327 1.19442e+011
+272 184 1.1943e+011
+333 356 1.19418e+011
+198 111 1.1941e+011
+210 33 1.19197e+011
+98 446 1.19163e+011
+464 23 1.19032e+011
+545 91 1.1901e+011
+309 354 1.18822e+011
+169 117 1.18801e+011
+34 31 1.18576e+011
+12 113 1.18541e+011
+423 122 1.18422e+011
+93 79 1.18415e+011
+152 130 1.18221e+011
+487 180 1.18113e+011
+172 53 1.17949e+011
+346 239 1.17923e+011
+501 102 1.17857e+011
+478 205 1.17511e+011
+241 68 1.17479e+011
+334 241 1.1731e+011
+444 123 1.17279e+011
+448 63 1.17271e+011
+272 146 1.1712e+011
+380 182 1.1711e+011
+58 100 1.17051e+011
+253 10 1.16829e+011
+188 136 1.16769e+011
+281 129 1.16725e+011
+572 59 1.16679e+011
+228 287 1.16634e+011
+246 257 1.1659e+011
+370 107 1.16581e+011
+354 295 1.16553e+011
+171 165 1.16511e+011
+310 298 1.16503e+011
+388 334 1.16473e+011
+339 12 1.16453e+011
+194 312 1.16428e+011
+246 89 1.16374e+011
+278 295 1.16348e+011
+169 238 1.16338e+011
+252 183 1.16322e+011
+105 431 1.16243e+011
+175 272 1.16093e+011
+53 450 1.15896e+011
+122 123 1.15809e+011
+314 336 1.15781e+011
+369 30 1.15677e+011
+283 135 1.15646e+011
+480 45 1.15507e+011
+341 109 1.15476e+011
+239 194 1.15471e+011
+390 324 1.15292e+011
+49 166 1.15254e+011
+387 318 1.15211e+011
+537 40 1.15205e+011
+484 155 1.15068e+011
+449 324 1.14961e+011
+29 135 1.14842e+011
+502 265 1.148e+011
+49 162 1.14656e+011
+421 80 1.14565e+011
+451 44 1.14492e+011
+52 154 1.14476e+011
+174 121 1.14434e+011
+390 165 1.14413e+011
+329 297 1.14382e+011
+162 202 1.14316e+011
+360 220 1.14104e+011
+569 203 1.14079e+011
+490 58 1.13862e+011
+433 381 1.13804e+011
+391 221 1.13802e+011
+246 387 1.13711e+011
+195 164 1.13665e+011
+251 163 1.13659e+011
+66 213 1.13638e+011
+58 373 1.13571e+011
+541 3 1.13349e+011
+88 230 1.13332e+011
+184 118 1.13296e+011
+523 79 1.13279e+011
+302 189 1.13151e+011
+82 197 1.13135e+011
+485 140 1.1313e+011
+263 400 1.13114e+011
+201 393 1.13029e+011
+91 259 1.12963e+011
+229 91 1.12935e+011
+448 119 1.12903e+011
+229 346 1.12851e+011
+265 260 1.12823e+011
+516 2 1.12714e+011
+559 61 1.12705e+011
+274 206 1.1267e+011
+509 102 1.12663e+011
+446 144 1.12568e+011
+3 165 1.1254e+011
+196 342 1.12417e+011
+198 194 1.12356e+011
+12 433 1.12236e+011
+11 72 1.12222e+011
+149 129 1.12148e+011
+181 105 1.12127e+011
+446 246 1.1202e+011
+113 205 1.11968e+011
+328 26 1.11653e+011
+163 165 1.11579e+011
+187 325 1.11564e+011
+362 64 1.1156e+011
+367 30 1.11524e+011
+133 148 1.11439e+011
+334 281 1.11425e+011
+489 43 1.11345e+011
+401 200 1.11306e+011
+386 334 1.11218e+011
+463 40 1.11197e+011
+395 141 1.11187e+011
+405 144 1.1118e+011
+59 40 1.11171e+011
+204 347 1.11159e+011
+18 236 1.11123e+011
+129 308 1.1107e+011
+375 224 1.11007e+011
+301 244 1.10921e+011
+481 440 1.10893e+011
+251 248 1.10888e+011
+582 79 1.10887e+011
+551 378 1.10864e+011
+278 112 1.10833e+011
+234 32 1.10792e+011
+75 61 1.10763e+011
+149 163 1.10667e+011
+526 349 1.10664e+011
+420 315 1.10595e+011
+54 303 1.10539e+011
+266 147 1.10513e+011
+521 79 1.10449e+011
+357 282 1.10366e+011
+522 425 1.1032e+011
+418 414 1.10281e+011
+251 10 1.10166e+011
+115 218 1.10149e+011
+60 77 1.10131e+011
+576 165 1.10091e+011
+562 142 1.10078e+011
+255 405 1.10004e+011
+257 249 1.10002e+011
+231 71 1.09965e+011
+96 257 1.09781e+011
+326 179 1.09685e+011
+434 277 1.09681e+011
+134 411 1.09608e+011
+230 265 1.09571e+011
+150 231 1.09489e+011
+494 79 1.09358e+011
+102 39 1.09276e+011
+361 214 1.09229e+011
+179 57 1.09166e+011
+528 159 1.09074e+011
+259 143 1.08915e+011
+394 183 1.08836e+011
+487 204 1.08819e+011
+409 140 1.08617e+011
+572 57 1.08609e+011
+69 304 1.08522e+011
+354 424 1.08476e+011
+525 186 1.08471e+011
+162 31 1.08372e+011
+163 349 1.08353e+011
+228 265 1.08335e+011
+389 133 1.0818e+011
+433 239 1.08174e+011
+393 141 1.08067e+011
+120 54 1.08035e+011
+304 206 1.07853e+011
+57 333 1.07765e+011
+484 20 1.07751e+011
+540 206 1.07734e+011
+113 262 1.07716e+011
+329 66 1.07662e+011
+10 218 1.07573e+011
+357 143 1.07495e+011
+182 310 1.07445e+011
+151 400 1.07308e+011
+113 218 1.07187e+011
+345 199 1.07186e+011
+294 269 1.07088e+011
+327 166 1.07054e+011
+568 422 1.06813e+011
+182 132 1.06773e+011
+438 455 1.06618e+011
+319 186 1.06571e+011
+432 395 1.06548e+011
+202 318 1.0652e+011
+160 138 1.06446e+011
+540 262 1.06441e+011
+571 159 1.06426e+011
+343 37 1.06417e+011
+246 419 1.06392e+011
+588 309 1.06351e+011
+485 235 1.06295e+011
+350 128 1.06268e+011
+243 102 1.0621e+011
+136 323 1.06208e+011
+141 21 1.06137e+011
+427 183 1.06099e+011
+247 326 1.0599e+011
+389 55 1.05893e+011
+67 275 1.05737e+011
+77 29 1.05714e+011
+414 144 1.05714e+011
+186 312 1.05711e+011
+132 411 1.05591e+011
+432 115 1.0558e+011
+568 382 1.05538e+011
+534 40 1.05505e+011
+265 286 1.05426e+011
+543 457 1.05391e+011
+540 219 1.05377e+011
+403 143 1.05353e+011
+406 77 1.05346e+011
+157 235 1.0527e+011
+547 439 1.05256e+011
+166 152 1.05048e+011
+498 341 1.04768e+011
+309 33 1.04738e+011
+412 82 1.04603e+011
+302 132 1.04553e+011
+85 60 1.04458e+011
+367 303 1.04341e+011
+432 269 1.04341e+011
+165 379 1.04271e+011
+519 80 1.04106e+011
+510 114 1.0397e+011
+274 77 1.03936e+011
+92 149 1.03877e+011
+310 335 1.03817e+011
+494 81 1.03605e+011
+527 120 1.03599e+011
+46 407 1.03568e+011
+525 80 1.0356e+011
+72 46 1.03484e+011
+519 164 1.03382e+011
+483 325 1.03351e+011
+277 131 1.03318e+011
+346 46 1.03299e+011
+382 89 1.03287e+011
+83 60 1.03207e+011
+229 14 1.03099e+011
+235 262 1.02962e+011
+52 30 1.02817e+011
+382 87 1.02761e+011
+511 118 1.02758e+011
+541 253 1.02722e+011
+574 56 1.02673e+011
+170 313 1.02666e+011
+174 188 1.02658e+011
+155 234 1.02588e+011
+364 86 1.02536e+011
+386 294 1.02513e+011
+238 94 1.02452e+011
+69 419 1.02368e+011
+162 138 1.02332e+011
+451 164 1.02129e+011
+504 262 1.01991e+011
+258 108 1.01962e+011
+28 221 1.01918e+011
+96 453 1.01911e+011
+540 221 1.01899e+011
+377 119 1.01866e+011
+396 46 1.01678e+011
+402 219 1.01582e+011
+288 123 1.01554e+011
+39 287 1.01474e+011
+112 132 1.01307e+011
+201 128 1.01298e+011
+231 151 1.01294e+011
+376 300 1.01152e+011
+283 211 1.01128e+011
+211 163 1.01124e+011
+345 371 1.0101e+011
+246 216 1.00929e+011
+75 128 1.00912e+011
+87 376 1.00809e+011
+337 12 1.00773e+011
+300 246 1.0076e+011
+462 162 1.00605e+011
+380 87 1.0057e+011
+513 117 1.00486e+011
+43 122 1.00365e+011
+99 257 1.00281e+011
+110 183 1.00163e+011
+248 261 1.00112e+011
+327 10 1.0002e+011
+389 131 9.99856e+010
+618 181 9.99343e+010
+565 463 9.99031e+010
+347 370 9.9845e+010
+605 121 9.97144e+010
+131 393 9.96973e+010
+411 415 9.96161e+010
+248 345 9.95975e+010
+209 163 9.95621e+010
+170 131 9.9557e+010
+424 7 9.94988e+010
+153 56 9.9492e+010
+483 141 9.94533e+010
+529 135 9.94478e+010
+147 90 9.9437e+010
+4 235 9.94101e+010
+141 115 9.93341e+010
+434 45 9.93083e+010
+339 220 9.92593e+010
+216 106 9.90813e+010
+380 412 9.87689e+010
+419 362 9.87384e+010
+114 132 9.86911e+010
+261 456 9.86817e+010
+566 143 9.86306e+010
+41 60 9.8572e+010
+538 182 9.84955e+010
+513 324 9.84057e+010
+434 86 9.83815e+010
+275 109 9.82941e+010
+123 83 9.82677e+010
+471 138 9.81274e+010
+334 103 9.80714e+010
+399 200 9.80698e+010
+434 62 9.80134e+010
+386 296 9.79468e+010
+341 313 9.78997e+010
+319 95 9.78915e+010
+167 358 9.78216e+010
+183 17 9.77401e+010
+203 395 9.77315e+010
+177 330 9.76926e+010
+223 87 9.7601e+010
+541 380 9.75975e+010
+6 151 9.7549e+010
+513 2 9.75011e+010
+16 434 9.74026e+010
+46 90 9.73341e+010
+276 426 9.7199e+010
+497 59 9.71244e+010
+214 425 9.71206e+010
+264 311 9.6948e+010
+10 475 9.69356e+010
+298 400 9.68805e+010
+254 108 9.67438e+010
+484 222 9.67285e+010
+280 439 9.67118e+010
+405 165 9.67113e+010
+168 130 9.66443e+010
+95 285 9.64931e+010
+494 65 9.64432e+010
+375 144 9.63763e+010
+499 459 9.63652e+010
+260 107 9.62633e+010
+270 364 9.61609e+010
+419 97 9.61569e+010
+404 104 9.61502e+010
+420 142 9.61193e+010
+374 151 9.61139e+010
+438 25 9.60811e+010
+288 113 9.60445e+010
+544 142 9.59764e+010
+307 196 9.58894e+010
+87 356 9.5705e+010
+272 109 9.56891e+010
+173 417 9.56726e+010
+358 161 9.56419e+010
+10 75 9.55461e+010
+323 134 9.55027e+010
+520 425 9.54895e+010
+426 335 9.54635e+010
+349 87 9.54575e+010
+191 350 9.53695e+010
+49 452 9.53503e+010
+108 259 9.52984e+010
+302 141 9.52827e+010
+126 327 9.52806e+010
+157 170 9.52781e+010
+328 103 9.51868e+010
+501 82 9.51194e+010
+556 265 9.51192e+010
+583 141 9.50528e+010
+525 189 9.50452e+010
+401 118 9.50222e+010
+150 131 9.49089e+010
+434 26 9.48505e+010
+401 318 9.47954e+010
+430 89 9.46781e+010
+431 182 9.45811e+010
+229 268 9.45756e+010
+494 472 9.44384e+010
+244 212 9.44231e+010
+335 50 9.43164e+010
+147 125 9.42901e+010
+535 78 9.42279e+010
+182 312 9.4218e+010
+316 100 9.41907e+010
+538 162 9.41023e+010
+44 408 9.38806e+010
+309 266 9.38708e+010
+275 316 9.38602e+010
+69 28 9.38449e+010
+9 44 9.37985e+010
+250 260 9.36444e+010
+561 275 9.36304e+010
+234 295 9.36272e+010
+180 122 9.36074e+010
+187 106 9.35582e+010
+375 125 9.35154e+010
+56 331 9.3507e+010
+152 446 9.34466e+010
+84 236 9.34228e+010
+311 260 9.33416e+010
+470 23 9.33013e+010
+394 337 9.32739e+010
+157 163 9.32683e+010
+373 75 9.32301e+010
+330 412 9.32249e+010
+374 146 9.32047e+010
+262 396 9.31288e+010
+425 102 9.30578e+010
+102 362 9.30358e+010
+148 193 9.30295e+010
+197 91 9.28487e+010
+401 376 9.28411e+010
+205 55 9.28271e+010
+567 181 9.28199e+010
+576 57 9.27301e+010
+448 259 9.26835e+010
+528 397 9.2682e+010
+143 143 9.259e+010
+391 450 9.25543e+010
+343 296 9.25526e+010
+82 100 9.24159e+010
+561 146 9.23765e+010
+64 362 9.23673e+010
+348 372 9.23088e+010
+293 147 9.22789e+010
+478 221 9.22521e+010
+373 126 9.22233e+010
+378 163 9.21858e+010
+126 307 9.21748e+010
+27 117 9.21636e+010
+523 141 9.21363e+010
+214 161 9.20283e+010
+179 169 9.20278e+010
+357 316 9.1948e+010
+147 131 9.19304e+010
+409 163 9.19069e+010
+70 476 9.1854e+010
+116 359 9.18253e+010
+412 183 9.17717e+010
+76 111 9.17328e+010
+249 164 9.17058e+010
+401 144 9.15885e+010
+448 125 9.15499e+010
+180 167 9.15275e+010
+311 266 9.1474e+010
+259 141 9.14032e+010
+556 303 9.13846e+010
+538 244 9.12704e+010
+39 82 9.12496e+010
+204 17 9.12492e+010
+242 281 9.11884e+010
+144 6 9.1176e+010
+204 398 9.11424e+010
+440 455 9.11368e+010
+151 57 9.1136e+010
+444 119 9.11243e+010
+485 237 9.10969e+010
+539 128 9.10425e+010
+544 246 9.09648e+010
+301 204 9.09604e+010
+252 148 9.09475e+010
+485 288 9.08176e+010
+135 135 9.0814e+010
+540 264 9.08028e+010
+248 365 9.07484e+010
+314 447 9.05867e+010
+276 296 9.05596e+010
+451 125 9.0539e+010
+359 448 9.05358e+010
+446 165 9.0535e+010
+433 159 9.03385e+010
+219 106 9.03374e+010
+342 35 9.03151e+010
+204 15 9.03065e+010
+168 151 9.02689e+010
+246 213 9.01658e+010
+525 184 9.01402e+010
+229 348 9.00586e+010
+144 1 9.00117e+010
+116 289 8.99796e+010
+413 252 8.99658e+010
+177 201 8.99317e+010
+482 124 8.97928e+010
+16 213 8.97644e+010
+42 298 8.97637e+010
+328 14 8.97198e+010
+259 229 8.94992e+010
+332 412 8.94218e+010
+458 357 8.93431e+010
+464 266 8.91801e+010
+497 461 8.89752e+010
+469 207 8.8926e+010
+140 390 8.88957e+010
+231 348 8.88901e+010
+336 241 8.88416e+010
+255 80 8.87997e+010
+329 214 8.8777e+010
+335 143 8.87529e+010
+109 76 8.87103e+010
+191 187 8.86686e+010
+249 181 8.86165e+010
+536 181 8.85909e+010
+188 303 8.85867e+010
+317 460 8.85037e+010
+45 356 8.84953e+010
+231 159 8.84433e+010
+137 94 8.84339e+010
+576 311 8.84054e+010
+399 28 8.83721e+010
+86 149 8.83467e+010
+152 92 8.83323e+010
+242 384 8.82976e+010
+119 115 8.79487e+010
+109 179 8.79369e+010
+218 315 8.7841e+010
+106 77 8.78366e+010
+464 237 8.78188e+010
+188 300 8.77415e+010
+428 62 8.76775e+010
+561 245 8.76642e+010
+484 86 8.7662e+010
+131 476 8.76328e+010
+297 15 8.75768e+010
+432 26 8.75038e+010
+494 59 8.7447e+010
+113 306 8.74425e+010
+317 102 8.74393e+010
+393 164 8.74338e+010
+132 376 8.73896e+010
+284 199 8.73891e+010
+386 450 8.72135e+010
+243 182 8.71567e+010
+256 105 8.7128e+010
+158 102 8.68861e+010
+486 242 8.68154e+010
+486 223 8.68151e+010
+532 396 8.67711e+010
+510 348 8.67229e+010
+50 378 8.67177e+010
+50 376 8.66834e+010
+112 339 8.66273e+010
+284 34 8.6621e+010
+159 152 8.65985e+010
+322 425 8.65802e+010
+112 355 8.65439e+010
+266 19 8.64975e+010
+122 114 8.64642e+010
+505 199 8.64425e+010
+255 191 8.63491e+010
+55 171 8.63459e+010
+259 370 8.62992e+010
+576 82 8.62738e+010
+36 470 8.61625e+010
+135 139 8.61348e+010
+205 416 8.61196e+010
+39 78 8.6076e+010
+507 41 8.59867e+010
+148 137 8.58439e+010
+240 134 8.5842e+010
+310 258 8.58092e+010
+462 140 8.58046e+010
+333 94 8.57675e+010
+158 254 8.56331e+010
+299 254 8.56322e+010
+91 113 8.56287e+010
+85 110 8.56056e+010
+407 105 8.56005e+010
+319 31 8.55933e+010
+55 142 8.55885e+010
+208 143 8.55719e+010
+465 115 8.54912e+010
+123 342 8.54828e+010
+547 283 8.52798e+010
+198 311 8.5279e+010
+570 325 8.52526e+010
+227 262 8.5193e+010
+356 297 8.50586e+010
+544 249 8.50085e+010
+88 310 8.49595e+010
+466 139 8.48632e+010
+450 197 8.48135e+010
+545 263 8.47838e+010
+400 132 8.47749e+010
+269 220 8.47495e+010
+83 146 8.46998e+010
+533 346 8.46432e+010
+188 256 8.45955e+010
+194 138 8.44623e+010
+137 144 8.44571e+010
+497 70 8.44566e+010
+92 444 8.44265e+010
+362 452 8.44055e+010
+579 57 8.43257e+010
+27 45 8.43235e+010
+524 162 8.4315e+010
+276 203 8.41862e+010
+123 412 8.41421e+010
+39 268 8.40869e+010
+451 417 8.40582e+010
+513 350 8.39396e+010
+510 59 8.39204e+010
+454 118 8.37822e+010
+232 273 8.37675e+010
+539 126 8.36964e+010
+414 264 8.36543e+010
+70 478 8.36469e+010
+229 16 8.35568e+010
+302 405 8.34711e+010
+246 183 8.34693e+010
+245 172 8.34527e+010
+343 240 8.34464e+010
+344 178 8.34077e+010
+573 422 8.33663e+010
+169 123 8.3353e+010
+526 397 8.33357e+010
+297 410 8.33325e+010
+49 458 8.33175e+010
+149 201 8.32381e+010
+532 341 8.32367e+010
+26 271 8.30741e+010
+447 133 8.30011e+010
+259 458 8.29912e+010
+246 34 8.29464e+010
+450 178 8.29283e+010
+161 61 8.28741e+010
+338 63 8.28429e+010
+408 15 8.28295e+010
+408 335 8.27913e+010
+86 310 8.27394e+010
+155 445 8.27256e+010
+183 382 8.27251e+010
+69 417 8.26358e+010
+473 356 8.25636e+010
+44 251 8.25538e+010
+134 428 8.25375e+010
+448 7 8.24022e+010
+541 81 8.23799e+010
+512 287 8.23493e+010
+106 359 8.23471e+010
+451 46 8.23218e+010
+64 153 8.22456e+010
+449 441 8.22139e+010
+243 218 8.21512e+010
+281 207 8.20716e+010
+361 449 8.2002e+010
+63 9 8.19586e+010
+572 327 8.1944e+010
+339 426 8.19432e+010
+162 37 8.18125e+010
+456 1 8.18036e+010
+279 87 8.1735e+010
+41 183 8.17143e+010
+538 103 8.17115e+010
+180 103 8.16373e+010
+161 120 8.14965e+010
+216 403 8.14718e+010
+183 56 8.14422e+010
+280 144 8.13949e+010
+450 437 8.12785e+010
+206 234 8.12753e+010
+296 146 8.12444e+010
+435 93 8.12177e+010
+56 234 8.10666e+010
+150 236 8.10589e+010
+515 203 8.08989e+010
+351 364 8.08059e+010
+413 244 8.07181e+010
+70 373 8.06674e+010
+89 21 8.06388e+010
+103 261 8.0622e+010
+319 107 8.05137e+010
+587 18 8.03979e+010
+438 397 8.03825e+010
+497 78 8.03636e+010
+114 357 8.03382e+010
+405 7 8.0335e+010
+493 164 8.03262e+010
+196 345 8.03142e+010
+305 217 8.03119e+010
+255 194 8.0306e+010
+435 395 8.02776e+010
+490 469 8.02532e+010
+8 235 8.0248e+010
+237 76 8.01724e+010
+58 106 8.01168e+010
+258 158 8.00404e+010
+478 399 7.99356e+010
+43 339 7.98998e+010
+175 418 7.98952e+010
+411 417 7.9885e+010
+81 238 7.98086e+010
+218 351 7.95972e+010
+421 89 7.95405e+010
+576 91 7.93711e+010
+176 140 7.9358e+010
+95 260 7.92717e+010
+346 201 7.92601e+010
+162 152 7.92011e+010
+103 259 7.90958e+010
+161 326 7.9069e+010
+186 94 7.90583e+010
+99 151 7.90546e+010
+550 282 7.90419e+010
+430 63 7.90353e+010
+562 200 7.90084e+010
+156 318 7.89667e+010
+252 146 7.89589e+010
+395 242 7.89295e+010
+125 114 7.89132e+010
+275 196 7.88946e+010
+214 93 7.88252e+010
+198 148 7.87704e+010
+89 398 7.86107e+010
+586 309 7.86054e+010
+267 417 7.85936e+010
+343 354 7.83947e+010
+391 335 7.83831e+010
+476 221 7.83579e+010
+498 81 7.83554e+010
+28 119 7.82608e+010
+197 466 7.82501e+010
+121 148 7.82353e+010
+416 250 7.82014e+010
+145 343 7.81821e+010
+399 92 7.81767e+010
+13 237 7.80787e+010
+532 172 7.80697e+010
+301 85 7.80574e+010
+481 402 7.80479e+010
+354 326 7.80107e+010
+591 104 7.79618e+010
+69 389 7.79075e+010
+184 94 7.79072e+010
+579 202 7.78778e+010
+493 162 7.78772e+010
+374 352 7.78482e+010
+126 111 7.78087e+010
+106 28 7.7682e+010
+140 316 7.76695e+010
+440 468 7.76602e+010
+131 134 7.76478e+010
+24 254 7.76436e+010
+201 7 7.76432e+010
+143 98 7.76086e+010
+173 106 7.75846e+010
+276 319 7.7489e+010
+399 412 7.74486e+010
+323 370 7.73966e+010
+453 418 7.734e+010
+63 448 7.72254e+010
+586 345 7.70831e+010
+488 52 7.70724e+010
+384 450 7.7042e+010
+322 11 7.69605e+010
+139 215 7.69068e+010
+119 5 7.69062e+010
+311 89 7.68749e+010
+511 208 7.68717e+010
+120 85 7.68413e+010
+270 414 7.67827e+010
+231 177 7.67804e+010
+517 141 7.6776e+010
+236 136 7.67527e+010
+129 125 7.67458e+010
+266 191 7.66703e+010
+444 204 7.66081e+010
+326 101 7.65964e+010
+511 350 7.6583e+010
+359 28 7.65708e+010
+125 342 7.65444e+010
+179 380 7.64953e+010
+227 201 7.64921e+010
+575 99 7.64685e+010
+306 147 7.64565e+010
+159 154 7.64527e+010
+102 57 7.63422e+010
+9 47 7.63234e+010
+62 229 7.63192e+010
+182 380 7.62911e+010
+220 84 7.62691e+010
+263 260 7.62043e+010
+480 405 7.60778e+010
+108 28 7.60201e+010
+445 445 7.5988e+010
+25 49 7.59767e+010
+160 310 7.59484e+010
+109 144 7.58588e+010
+303 87 7.58344e+010
+213 131 7.58293e+010
+44 337 7.5773e+010
+291 50 7.57634e+010
+128 375 7.57214e+010
+150 195 7.57072e+010
+570 327 7.57017e+010
+312 131 7.56984e+010
+183 316 7.5673e+010
+390 205 7.56601e+010
+143 237 7.56174e+010
+187 99 7.56104e+010
+103 98 7.55444e+010
+456 122 7.55368e+010
+196 197 7.55211e+010
+294 137 7.55156e+010
+225 201 7.55041e+010
+504 179 7.54654e+010
+180 360 7.53774e+010
+90 255 7.52935e+010
+262 446 7.52512e+010
+130 373 7.52216e+010
+212 396 7.52114e+010
+46 204 7.52014e+010
+291 147 7.51517e+010
+141 118 7.5108e+010
+88 286 7.50373e+010
+360 182 7.50172e+010
+146 98 7.49765e+010
+388 3 7.49212e+010
+417 79 7.49196e+010
+69 370 7.4904e+010
+408 473 7.48854e+010
+385 337 7.48845e+010
+421 291 7.48619e+010
+379 123 7.46758e+010
+80 406 7.46386e+010
+259 145 7.46069e+010
+528 356 7.45826e+010
+578 326 7.4442e+010
+133 391 7.44167e+010
+125 86 7.44106e+010
+251 222 7.43563e+010
+528 41 7.42972e+010
+381 261 7.42706e+010
+266 79 7.42603e+010
+126 127 7.42458e+010
+442 128 7.41757e+010
+527 79 7.41112e+010
+254 248 7.40857e+010
+480 457 7.40714e+010
+263 258 7.40615e+010
+102 30 7.40247e+010
+603 365 7.40208e+010
+418 94 7.40078e+010
+284 125 7.39914e+010
+51 336 7.3983e+010
+266 75 7.39738e+010
+154 448 7.39709e+010
+248 361 7.39656e+010
+466 101 7.389e+010
+409 144 7.38846e+010
+104 181 7.381e+010
+185 132 7.37809e+010
+196 1 7.36537e+010
+400 129 7.36214e+010
+185 304 7.36009e+010
+350 297 7.35817e+010
+209 316 7.35748e+010
+222 107 7.34367e+010
+513 402 7.34222e+010
+317 98 7.34056e+010
+568 222 7.33859e+010
+48 102 7.33641e+010
+350 372 7.33074e+010
+374 4 7.32433e+010
+430 45 7.32307e+010
+344 306 7.32257e+010
+395 107 7.31954e+010
+28 259 7.30293e+010
+575 135 7.30029e+010
+93 276 7.29999e+010
+483 374 7.29957e+010
+147 451 7.29677e+010
+101 295 7.29586e+010
+151 76 7.29453e+010
+137 122 7.29228e+010
+163 248 7.29063e+010
+217 171 7.28937e+010
+116 276 7.2877e+010
+386 3 7.2864e+010
+207 309 7.2801e+010
+176 344 7.26947e+010
+185 106 7.26791e+010
+324 119 7.26055e+010
+421 298 7.25626e+010
+53 389 7.24996e+010
+391 125 7.24246e+010
+164 432 7.23963e+010
+225 147 7.23108e+010
+332 68 7.23007e+010
+179 271 7.22776e+010
+214 290 7.21497e+010
+401 43 7.21346e+010
+410 104 7.20366e+010
+343 350 7.20244e+010
+289 308 7.20127e+010
+69 391 7.19033e+010
+362 49 7.18201e+010
+481 126 7.17872e+010
+293 90 7.17593e+010
+471 268 7.17165e+010
+229 365 7.17034e+010
+498 263 7.15211e+010
+498 139 7.14247e+010
+174 344 7.14072e+010
+445 86 7.13843e+010
+426 24 7.13763e+010
+138 131 7.1308e+010
+569 385 7.12876e+010
+538 186 7.12703e+010
+506 197 7.12399e+010
+59 171 7.12034e+010
+208 416 7.1172e+010
+124 148 7.1171e+010
+469 434 7.11623e+010
+288 160 7.11376e+010
+135 234 7.11263e+010
+49 374 7.11061e+010
+416 301 7.10102e+010
+282 298 7.09926e+010
+242 357 7.09312e+010
+417 471 7.09273e+010
+86 288 7.09255e+010
+378 88 7.09233e+010
+104 76 7.09195e+010
+230 111 7.08339e+010
+400 17 7.0805e+010
+484 366 7.08034e+010
+344 187 7.07755e+010
+120 187 7.07342e+010
+272 315 7.06892e+010
+56 180 7.06455e+010
+528 437 7.06455e+010
+70 259 7.06223e+010
+473 6 7.05786e+010
+353 238 7.04594e+010
+65 307 7.03727e+010
+470 417 7.033e+010
+589 346 7.03263e+010
+361 157 7.0325e+010
+195 83 7.03058e+010
+67 256 7.0288e+010
+214 450 7.02572e+010
+200 109 7.01417e+010
+31 46 7.00508e+010
+133 63 7.00486e+010
+368 161 6.99433e+010
+481 363 6.98982e+010
+523 362 6.98727e+010
+336 94 6.98314e+010
+95 367 6.98138e+010
+303 109 6.97885e+010
+333 65 6.97625e+010
+267 118 6.97215e+010
+235 76 6.97056e+010
+243 429 6.96522e+010
+39 115 6.9597e+010
+332 395 6.95871e+010
+433 93 6.95828e+010
+345 140 6.9543e+010
+58 109 6.94975e+010
+558 462 6.94901e+010
+156 103 6.94723e+010
+485 159 6.94351e+010
+101 445 6.94075e+010
+299 86 6.93679e+010
+412 263 6.93611e+010
+521 323 6.93344e+010
+67 28 6.93284e+010
+21 131 6.92398e+010
+168 415 6.92312e+010
+194 200 6.91953e+010
+115 169 6.91879e+010
+383 103 6.91862e+010
+154 162 6.91853e+010
+474 238 6.9179e+010
+65 311 6.91641e+010
+160 133 6.91598e+010
+199 143 6.91597e+010
+512 110 6.91563e+010
+482 222 6.90404e+010
+570 270 6.90396e+010
+335 219 6.89966e+010
+124 172 6.89593e+010
+529 347 6.89469e+010
+242 53 6.88969e+010
+460 165 6.88867e+010
+436 43 6.88629e+010
+523 290 6.88607e+010
+247 329 6.88404e+010
+194 326 6.88361e+010
+95 281 6.87761e+010
+405 42 6.86921e+010
+539 184 6.86822e+010
+22 48 6.86445e+010
+125 340 6.85971e+010
+487 118 6.85908e+010
+149 451 6.85286e+010
+237 73 6.85264e+010
+133 93 6.8521e+010
+157 40 6.85092e+010
+434 225 6.84999e+010
+143 449 6.84983e+010
+344 331 6.84751e+010
+213 166 6.8425e+010
+317 404 6.84059e+010
+384 65 6.84023e+010
+432 242 6.83701e+010
+251 93 6.83394e+010
+232 190 6.83199e+010
+138 178 6.8295e+010
+209 308 6.82486e+010
+33 336 6.8092e+010
+269 314 6.80769e+010
+273 254 6.80764e+010
+481 328 6.80705e+010
+330 218 6.7998e+010
+112 242 6.79967e+010
+210 143 6.79828e+010
+199 10 6.79796e+010
+331 243 6.79524e+010
+530 177 6.79223e+010
+438 82 6.7829e+010
+278 166 6.77818e+010
+123 81 6.77805e+010
+290 11 6.77371e+010
+23 130 6.77332e+010
+5 33 6.76661e+010
+343 27 6.76612e+010
+448 86 6.76291e+010
+264 283 6.75677e+010
+67 317 6.75537e+010
+86 62 6.75333e+010
+182 156 6.75292e+010
+293 199 6.75049e+010
+369 463 6.7373e+010
+96 38 6.7315e+010
+183 158 6.72684e+010
+186 375 6.72582e+010
+113 309 6.72234e+010
+155 345 6.71941e+010
+154 397 6.71351e+010
+455 418 6.70108e+010
+82 274 6.70104e+010
+301 206 6.70014e+010
+467 136 6.69622e+010
+73 164 6.68601e+010
+27 150 6.68377e+010
+354 341 6.68148e+010
+322 186 6.68091e+010
+119 223 6.68001e+010
+306 145 6.67239e+010
+111 389 6.67087e+010
+402 14 6.66708e+010
+336 183 6.66284e+010
+256 102 6.65677e+010
+263 145 6.65607e+010
+408 262 6.65544e+010
+87 93 6.64897e+010
+125 124 6.63371e+010
+498 241 6.6309e+010
+579 310 6.62451e+010
+323 137 6.61879e+010
+437 160 6.61798e+010
+310 138 6.61552e+010
+117 263 6.60939e+010
+372 143 6.60621e+010
+473 452 6.60494e+010
+210 96 6.6019e+010
+45 343 6.59952e+010
+207 186 6.5811e+010
+382 121 6.56977e+010
+236 295 6.56575e+010
+149 449 6.56247e+010
+500 71 6.56194e+010
+139 311 6.56142e+010
+468 319 6.55971e+010
+221 431 6.55749e+010
+46 206 6.5533e+010
+341 331 6.54534e+010
+512 108 6.5435e+010
+261 383 6.53939e+010
+133 144 6.5358e+010
+176 325 6.53045e+010
+426 472 6.53029e+010
+312 133 6.52728e+010
+145 146 6.51885e+010
+135 21 6.51802e+010
+199 97 6.51708e+010
+351 270 6.50995e+010
+57 361 6.50909e+010
+463 185 6.49972e+010
+101 165 6.49264e+010
+532 114 6.49185e+010
+218 388 6.49129e+010
+308 130 6.48741e+010
+345 321 6.48124e+010
+143 433 6.47745e+010
+401 80 6.47733e+010
+453 438 6.47435e+010
+303 293 6.47367e+010
+511 369 6.46976e+010
+388 290 6.46706e+010
+104 307 6.46488e+010
+78 218 6.46206e+010
+207 76 6.45303e+010
+227 122 6.44808e+010
+46 419 6.44676e+010
+325 109 6.44515e+010
+17 274 6.4414e+010
+222 215 6.43865e+010
+55 389 6.4354e+010
+456 377 6.42878e+010
+50 146 6.42841e+010
+246 15 6.42579e+010
+288 162 6.42491e+010
+258 191 6.42238e+010
+95 291 6.41345e+010
+547 224 6.41336e+010
+349 276 6.41335e+010
+184 164 6.40758e+010
+62 200 6.39745e+010
+589 349 6.39625e+010
+464 212 6.39517e+010
+386 356 6.39219e+010
+327 29 6.38888e+010
+82 72 6.38562e+010
+438 23 6.38544e+010
+68 56 6.38255e+010
+102 28 6.37963e+010
+288 276 6.37962e+010
+544 85 6.37918e+010
+301 444 6.3781e+010
+602 275 6.37149e+010
+184 156 6.36158e+010
+137 180 6.36043e+010
+483 242 6.36e+010
+459 200 6.35686e+010
+585 59 6.35271e+010
+55 44 6.35235e+010
+313 261 6.3503e+010
+479 402 6.34936e+010
+387 434 6.34895e+010
+33 39 6.34628e+010
+510 366 6.34165e+010
+478 143 6.3371e+010
+370 93 6.33503e+010
+48 135 6.33474e+010
+360 140 6.33428e+010
+18 247 6.33245e+010
+27 189 6.3302e+010
+125 412 6.32963e+010
+203 39 6.32814e+010
+209 394 6.32358e+010
+85 340 6.31508e+010
+375 282 6.31118e+010
+561 152 6.30931e+010
+100 30 6.30283e+010
+493 42 6.30271e+010
+496 475 6.30176e+010
+579 214 6.28995e+010
+231 161 6.28963e+010
+257 458 6.28674e+010
+186 166 6.27958e+010
+261 317 6.27035e+010
+60 177 6.26868e+010
+289 248 6.26583e+010
+495 42 6.26506e+010
+414 220 6.2629e+010
+553 18 6.26286e+010
+376 88 6.25875e+010
+123 170 6.25735e+010
+413 250 6.25638e+010
+152 193 6.25587e+010
+347 275 6.25036e+010
+64 28 6.24982e+010
+52 180 6.24604e+010
+434 280 6.24415e+010
+573 363 6.24172e+010
+471 356 6.23262e+010
+282 310 6.23194e+010
+117 223 6.2285e+010
+523 429 6.22715e+010
+251 239 6.21873e+010
+86 363 6.21798e+010
+37 254 6.21625e+010
+218 283 6.21339e+010
+102 113 6.21085e+010
+309 173 6.20801e+010
+347 124 6.20541e+010
+278 236 6.20376e+010
+324 258 6.19392e+010
+518 360 6.19298e+010
+269 118 6.19032e+010
+342 107 6.18994e+010
+268 141 6.18869e+010
+412 160 6.17803e+010
+72 338 6.17687e+010
+45 254 6.17333e+010
+553 221 6.17258e+010
+123 216 6.17152e+010
+151 59 6.1691e+010
+259 349 6.16564e+010
+511 297 6.16229e+010
+290 140 6.1621e+010
+148 195 6.15732e+010
+544 243 6.15618e+010
+13 420 6.15565e+010
+66 271 6.15541e+010
+111 45 6.1439e+010
+282 265 6.13908e+010
+12 75 6.137e+010
+148 197 6.13631e+010
+142 429 6.13181e+010
+298 257 6.13021e+010
+203 108 6.12699e+010
+396 95 6.12543e+010
+144 234 6.12192e+010
+420 119 6.11812e+010
+259 200 6.11712e+010
+458 394 6.11707e+010
+153 312 6.11538e+010
+502 419 6.11078e+010
+12 46 6.10855e+010
+216 249 6.1055e+010
+355 18 6.10461e+010
+266 110 6.10168e+010
+474 82 6.09461e+010
+542 178 6.09404e+010
+467 108 6.09066e+010
+314 126 6.08643e+010
+331 221 6.08532e+010
+250 367 6.08455e+010
+95 374 6.08297e+010
+250 400 6.07063e+010
+484 206 6.06957e+010
+250 403 6.06725e+010
+458 115 6.06658e+010
+192 240 6.06067e+010
+186 73 6.05984e+010
+250 369 6.05859e+010
+359 361 6.05629e+010
+527 194 6.05607e+010
+9 31 6.056e+010
+577 403 6.05576e+010
+381 450 6.04628e+010
+416 268 6.04298e+010
+81 219 6.04242e+010
+213 400 6.03757e+010
+305 188 6.03167e+010
+162 432 6.02597e+010
+167 123 6.01528e+010
+520 242 6.0019e+010
+186 292 6.00106e+010
+366 244 5.99835e+010
+308 104 5.99771e+010
+104 28 5.99492e+010
+310 130 5.99408e+010
+82 153 5.99295e+010
+377 96 5.99245e+010
+262 89 5.9901e+010
+145 397 5.97624e+010
+435 104 5.97383e+010
+167 127 5.96838e+010
+103 294 5.96795e+010
+307 257 5.96789e+010
+381 452 5.96691e+010
+387 246 5.96582e+010
+140 149 5.96367e+010
+373 355 5.9577e+010
+374 155 5.95716e+010
+483 204 5.95645e+010
+401 425 5.94953e+010
+239 148 5.94662e+010
+67 390 5.94018e+010
+153 22 5.93884e+010
+305 398 5.93866e+010
+94 39 5.93726e+010
+56 294 5.93506e+010
+250 320 5.93227e+010
+49 226 5.9319e+010
+58 303 5.93174e+010
+372 351 5.93125e+010
+200 99 5.9295e+010
+26 168 5.91663e+010
+103 336 5.91154e+010
+307 172 5.91029e+010
+147 343 5.91015e+010
+167 39 5.90953e+010
+427 105 5.9078e+010
+308 220 5.90748e+010
+222 213 5.90548e+010
+263 239 5.90318e+010
+338 93 5.90236e+010
+46 421 5.90226e+010
+254 258 5.89026e+010
+136 58 5.88498e+010
+557 365 5.88472e+010
+332 393 5.88387e+010
+199 199 5.883e+010
+193 238 5.88031e+010
+217 285 5.87947e+010
+213 418 5.86752e+010
+104 162 5.86678e+010
+11 178 5.86583e+010
+454 121 5.85851e+010
+138 254 5.8557e+010
+404 30 5.85533e+010
+156 174 5.85034e+010
+162 91 5.84974e+010
+376 46 5.8431e+010
+209 404 5.83291e+010
+212 202 5.83178e+010
+152 90 5.83127e+010
+510 245 5.83056e+010
+123 218 5.82679e+010
+397 137 5.82497e+010
+287 248 5.81719e+010
+399 95 5.81402e+010
+539 177 5.81053e+010
+448 288 5.80806e+010
+193 290 5.80803e+010
+400 134 5.80633e+010
+294 399 5.80363e+010
+358 66 5.80338e+010
+530 192 5.8014e+010
+513 60 5.80032e+010
+281 124 5.79716e+010
+230 332 5.79175e+010
+191 292 5.79174e+010
+220 327 5.787e+010
+468 302 5.78236e+010
+362 155 5.77529e+010
+437 387 5.77517e+010
+578 329 5.7709e+010
+519 141 5.767e+010
+229 51 5.76634e+010
+412 222 5.76515e+010
+35 44 5.75903e+010
+544 436 5.75654e+010
+592 108 5.75439e+010
+26 222 5.74759e+010
+378 148 5.7443e+010
+520 239 5.74379e+010
+169 121 5.74357e+010
+194 198 5.74351e+010
+404 28 5.74148e+010
+464 227 5.74082e+010
+487 231 5.7391e+010
+475 399 5.73619e+010
+345 328 5.73561e+010
+445 414 5.73558e+010
+173 131 5.73428e+010
+70 261 5.73308e+010
+76 147 5.73174e+010
+244 400 5.73108e+010
+80 404 5.73006e+010
+113 374 5.72632e+010
+211 93 5.72593e+010
+248 395 5.72162e+010
+306 412 5.72129e+010
+250 327 5.72068e+010
+294 374 5.71698e+010
+221 130 5.71292e+010
+282 373 5.70734e+010
+155 298 5.70571e+010
+227 284 5.70451e+010
+200 405 5.70319e+010
+156 78 5.70057e+010
+152 317 5.6991e+010
+467 210 5.69635e+010
+50 228 5.69349e+010
+230 262 5.69236e+010
+521 91 5.69217e+010
+353 18 5.68775e+010
+143 141 5.68648e+010
+88 396 5.68566e+010
+195 211 5.68365e+010
+206 404 5.67966e+010
+211 316 5.67854e+010
+543 262 5.67426e+010
+41 336 5.67355e+010
+314 131 5.67225e+010
+433 82 5.67172e+010
+297 316 5.67139e+010
+533 62 5.67058e+010
+32 80 5.66537e+010
+437 111 5.66239e+010
+181 293 5.6616e+010
+250 53 5.66032e+010
+521 189 5.6523e+010
+94 407 5.65224e+010
+472 102 5.64653e+010
+516 83 5.64347e+010
+220 421 5.64249e+010
+47 478 5.64061e+010
+115 253 5.63916e+010
+20 317 5.63654e+010
+142 255 5.63227e+010
+111 111 5.63117e+010
+567 359 5.62677e+010
+183 292 5.62502e+010
+566 177 5.62374e+010
+203 7 5.6234e+010
+434 387 5.62267e+010
+275 95 5.60509e+010
+153 20 5.60468e+010
+408 109 5.59995e+010
+224 74 5.59957e+010
+83 403 5.59911e+010
+543 444 5.59354e+010
+53 146 5.59345e+010
+84 170 5.59231e+010
+284 78 5.59145e+010
+558 324 5.58855e+010
+205 29 5.58667e+010
+510 57 5.58286e+010
+248 206 5.58228e+010
+61 439 5.58127e+010
+164 364 5.57919e+010
+366 454 5.57789e+010
+581 327 5.57701e+010
+540 443 5.57393e+010
+275 122 5.57358e+010
+455 437 5.56948e+010
+459 113 5.56906e+010
+3 110 5.56616e+010
+156 448 5.55314e+010
+141 427 5.55141e+010
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_3_7.txt b/test_data/harriscorners/hc_msc_0.00_0.15_3_7.txt
new file mode 100644
index 0000000..d5d75e1
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_3_7.txt
@@ -0,0 +1,3102 @@
+3101
+121 44 3.00111e+012
+274 367 2.74009e+012
+421 180 2.53537e+012
+277 367 2.49213e+012
+401 263 2.3162e+012
+331 128 2.28505e+012
+135 214 2.15244e+012
+299 53 2.04517e+012
+246 94 2.01927e+012
+83 77 1.97487e+012
+424 322 1.9503e+012
+238 19 1.94856e+012
+81 29 1.92336e+012
+271 291 1.92071e+012
+199 18 1.75559e+012
+437 68 1.73882e+012
+75 257 1.7191e+012
+458 279 1.7175e+012
+542 14 1.70482e+012
+282 113 1.68526e+012
+122 46 1.68098e+012
+55 30 1.67721e+012
+80 4 1.63066e+012
+165 240 1.59462e+012
+510 124 1.57588e+012
+210 436 1.54354e+012
+361 294 1.52489e+012
+244 98 1.50193e+012
+130 26 1.486e+012
+482 178 1.47515e+012
+424 177 1.45542e+012
+302 184 1.44458e+012
+151 223 1.43906e+012
+512 78 1.4284e+012
+481 180 1.42664e+012
+302 181 1.4207e+012
+213 58 1.4021e+012
+460 264 1.39875e+012
+390 142 1.39784e+012
+394 142 1.38932e+012
+345 339 1.36153e+012
+561 225 1.35675e+012
+160 144 1.35424e+012
+165 242 1.34858e+012
+563 225 1.3484e+012
+281 111 1.34313e+012
+396 317 1.34272e+012
+394 317 1.33599e+012
+138 204 1.33086e+012
+484 58 1.32695e+012
+510 166 1.32636e+012
+183 34 1.32318e+012
+486 58 1.32222e+012
+293 16 1.32167e+012
+174 95 1.32066e+012
+543 167 1.31259e+012
+304 181 1.31222e+012
+343 8 1.30545e+012
+224 181 1.30253e+012
+304 183 1.30194e+012
+260 297 1.29945e+012
+208 222 1.29339e+012
+125 255 1.29313e+012
+34 138 1.29025e+012
+102 222 1.28989e+012
+167 242 1.28895e+012
+258 384 1.27852e+012
+342 338 1.27623e+012
+342 10 1.26198e+012
+348 339 1.25686e+012
+361 395 1.25263e+012
+222 181 1.24944e+012
+167 240 1.24367e+012
+554 39 1.23548e+012
+130 37 1.22671e+012
+484 338 1.21752e+012
+528 102 1.20902e+012
+115 43 1.20586e+012
+295 15 1.20461e+012
+421 165 1.20225e+012
+138 208 1.20183e+012
+36 145 1.19701e+012
+419 8 1.19542e+012
+413 255 1.19381e+012
+124 185 1.19175e+012
+244 166 1.18873e+012
+158 74 1.17875e+012
+416 8 1.17549e+012
+125 253 1.17256e+012
+263 442 1.15975e+012
+413 259 1.15676e+012
+544 58 1.15505e+012
+30 8 1.15454e+012
+65 235 1.15433e+012
+79 80 1.15012e+012
+497 160 1.14793e+012
+127 164 1.13872e+012
+528 24 1.13699e+012
+302 176 1.13681e+012
+126 364 1.1271e+012
+90 197 1.12249e+012
+242 203 1.11534e+012
+359 166 1.11153e+012
+215 71 1.10708e+012
+302 166 1.10641e+012
+448 399 1.10582e+012
+313 148 1.10418e+012
+4 46 1.09981e+012
+44 26 1.08591e+012
+326 165 1.08554e+012
+386 178 1.08267e+012
+450 338 1.07609e+012
+47 98 1.07151e+012
+390 59 1.0699e+012
+241 70 1.06961e+012
+224 37 1.06807e+012
+252 139 1.06766e+012
+299 165 1.06473e+012
+326 89 1.05807e+012
+112 344 1.05799e+012
+255 139 1.05288e+012
+34 267 1.0526e+012
+224 39 1.05113e+012
+359 334 1.04669e+012
+450 204 1.04345e+012
+319 225 1.04285e+012
+542 365 1.04225e+012
+282 49 1.03888e+012
+507 19 1.03728e+012
+87 197 1.02779e+012
+104 61 1.02725e+012
+111 169 1.02619e+012
+208 225 1.0246e+012
+448 296 1.02303e+012
+511 2 1.02043e+012
+175 111 1.01515e+012
+383 162 1.01383e+012
+223 420 1.01307e+012
+202 313 1.01172e+012
+383 5 1.00903e+012
+310 149 1.00895e+012
+319 314 1.00862e+012
+276 182 1.0056e+012
+208 55 1.00541e+012
+449 299 1.00457e+012
+359 129 1.00345e+012
+454 204 1.00161e+012
+238 201 1.00035e+012
+391 296 9.9867e+011
+65 232 9.98653e+011
+547 162 9.98094e+011
+388 177 9.94198e+011
+209 21 9.9377e+011
+464 395 9.92293e+011
+552 383 9.89748e+011
+509 163 9.89725e+011
+352 321 9.87703e+011
+403 120 9.87049e+011
+378 68 9.86639e+011
+373 84 9.8561e+011
+319 312 9.85132e+011
+358 319 9.84082e+011
+83 136 9.82918e+011
+448 261 9.78032e+011
+277 365 9.77906e+011
+83 134 9.76797e+011
+506 17 9.75987e+011
+155 235 9.75416e+011
+481 84 9.75121e+011
+467 238 9.72139e+011
+36 139 9.68976e+011
+513 342 9.64977e+011
+269 53 9.64672e+011
+362 258 9.62916e+011
+301 179 9.59742e+011
+123 199 9.59224e+011
+432 147 9.566e+011
+125 199 9.5659e+011
+404 183 9.54566e+011
+542 214 9.53666e+011
+470 238 9.52945e+011
+447 299 9.50904e+011
+32 267 9.50376e+011
+206 436 9.47512e+011
+503 1 9.46258e+011
+265 296 9.45997e+011
+226 37 9.4449e+011
+55 290 9.43352e+011
+174 113 9.42666e+011
+144 311 9.4138e+011
+206 449 9.39657e+011
+364 255 9.3849e+011
+107 39 9.36774e+011
+132 74 9.33892e+011
+387 220 9.31659e+011
+428 117 9.31422e+011
+326 141 9.3095e+011
+87 254 9.2995e+011
+313 84 9.29081e+011
+176 108 9.28543e+011
+361 336 9.27344e+011
+46 221 9.226e+011
+283 402 9.21484e+011
+260 220 9.20784e+011
+64 342 9.19693e+011
+469 123 9.19459e+011
+364 253 9.19117e+011
+365 6 9.18525e+011
+125 259 9.1777e+011
+261 222 9.16291e+011
+274 132 9.13975e+011
+424 45 9.11024e+011
+357 166 9.10409e+011
+143 323 9.07076e+011
+36 135 9.06141e+011
+411 258 9.03711e+011
+152 308 9.01676e+011
+34 100 9.01119e+011
+162 110 8.99382e+011
+412 45 8.99146e+011
+481 337 8.93173e+011
+189 218 8.92897e+011
+163 215 8.92498e+011
+61 217 8.92448e+011
+60 184 8.90961e+011
+166 98 8.90397e+011
+174 41 8.89402e+011
+389 11 8.87189e+011
+361 334 8.85579e+011
+385 164 8.84851e+011
+328 296 8.84649e+011
+64 319 8.83354e+011
+420 46 8.80579e+011
+140 182 8.80418e+011
+528 183 8.79139e+011
+232 199 8.79051e+011
+164 97 8.78425e+011
+142 185 8.7704e+011
+280 365 8.75207e+011
+364 251 8.71425e+011
+256 152 8.70837e+011
+32 269 8.70565e+011
+546 41 8.68591e+011
+455 283 8.6835e+011
+112 391 8.67389e+011
+213 74 8.62783e+011
+41 217 8.62034e+011
+46 26 8.61053e+011
+249 143 8.60589e+011
+294 27 8.60464e+011
+282 117 8.53233e+011
+56 6 8.51695e+011
+174 312 8.50026e+011
+247 144 8.49445e+011
+475 261 8.48079e+011
+267 53 8.4704e+011
+380 5 8.44096e+011
+562 478 8.43036e+011
+156 1 8.42127e+011
+317 165 8.40977e+011
+485 359 8.401e+011
+111 136 8.38415e+011
+195 58 8.35935e+011
+516 75 8.35746e+011
+365 300 8.3544e+011
+387 11 8.35377e+011
+177 105 8.33975e+011
+508 454 8.31995e+011
+486 180 8.31829e+011
+379 7 8.26629e+011
+272 280 8.26095e+011
+58 6 8.25835e+011
+512 219 8.25834e+011
+464 198 8.25095e+011
+317 163 8.24706e+011
+384 10 8.24435e+011
+12 217 8.20592e+011
+217 145 8.16945e+011
+128 187 8.1609e+011
+508 2 8.15806e+011
+36 298 8.15088e+011
+314 163 8.14747e+011
+495 118 8.13129e+011
+234 161 8.12715e+011
+402 118 8.11975e+011
+145 161 8.09219e+011
+36 63 8.08903e+011
+49 29 8.08572e+011
+431 318 8.08351e+011
+464 196 8.06717e+011
+31 235 8.04414e+011
+523 265 8.03313e+011
+47 28 8.03109e+011
+170 240 8.03018e+011
+50 289 8.02557e+011
+317 336 7.99196e+011
+329 258 7.97306e+011
+236 347 7.94361e+011
+229 37 7.94052e+011
+312 75 7.9349e+011
+261 236 7.93021e+011
+113 346 7.92674e+011
+505 165 7.92452e+011
+512 97 7.88971e+011
+365 258 7.88201e+011
+538 457 7.87947e+011
+245 207 7.87883e+011
+436 396 7.87441e+011
+169 18 7.86033e+011
+36 174 7.83556e+011
+315 336 7.81351e+011
+294 122 7.80162e+011
+413 6 7.79861e+011
+192 143 7.78043e+011
+340 338 7.76048e+011
+101 360 7.75817e+011
+423 336 7.75443e+011
+447 218 7.73463e+011
+526 197 7.73267e+011
+528 186 7.72399e+011
+522 346 7.70938e+011
+362 7 7.69982e+011
+392 47 7.69568e+011
+525 24 7.68656e+011
+370 83 7.67038e+011
+511 19 7.66079e+011
+139 325 7.6544e+011
+505 162 7.63981e+011
+158 96 7.63691e+011
+276 353 7.63386e+011
+497 118 7.61665e+011
+153 197 7.61488e+011
+267 294 7.59866e+011
+247 219 7.59719e+011
+189 216 7.57897e+011
+388 164 7.57854e+011
+380 162 7.56882e+011
+250 12 7.55207e+011
+392 218 7.54636e+011
+24 62 7.53723e+011
+211 184 7.53598e+011
+510 81 7.52893e+011
+394 140 7.5262e+011
+25 65 7.52151e+011
+498 66 7.50247e+011
+168 326 7.5021e+011
+363 403 7.50058e+011
+115 392 7.49388e+011
+514 203 7.48534e+011
+390 140 7.48511e+011
+229 293 7.47533e+011
+364 400 7.466e+011
+265 445 7.46162e+011
+251 423 7.44326e+011
+477 19 7.44135e+011
+355 128 7.425e+011
+182 137 7.41657e+011
+162 96 7.40805e+011
+379 338 7.40704e+011
+291 122 7.40688e+011
+303 169 7.40018e+011
+484 363 7.38403e+011
+57 75 7.36466e+011
+190 171 7.35927e+011
+227 293 7.35715e+011
+389 323 7.3307e+011
+29 30 7.31571e+011
+528 360 7.31337e+011
+543 211 7.29519e+011
+273 219 7.29306e+011
+222 218 7.29207e+011
+408 183 7.28754e+011
+191 278 7.28685e+011
+538 138 7.26237e+011
+227 186 7.26184e+011
+385 324 7.2607e+011
+110 58 7.24232e+011
+409 354 7.23223e+011
+302 215 7.22306e+011
+490 139 7.19772e+011
+299 105 7.1941e+011
+376 317 7.15133e+011
+58 218 7.14945e+011
+175 187 7.14838e+011
+480 18 7.14347e+011
+134 132 7.14253e+011
+407 82 7.12144e+011
+523 344 7.10404e+011
+544 4 7.0979e+011
+548 182 7.07165e+011
+101 79 7.06725e+011
+190 108 7.06677e+011
+544 2 7.06514e+011
+520 201 7.05631e+011
+367 142 7.04709e+011
+462 27 7.03105e+011
+479 14 7.02908e+011
+165 20 6.98128e+011
+145 392 6.97663e+011
+211 144 6.97266e+011
+541 41 6.95762e+011
+580 16 6.93764e+011
+253 11 6.92462e+011
+418 87 6.92229e+011
+420 87 6.92036e+011
+253 74 6.91376e+011
+34 7 6.90835e+011
+90 258 6.90058e+011
+253 76 6.89649e+011
+223 112 6.88627e+011
+175 260 6.87901e+011
+466 123 6.86706e+011
+188 182 6.86127e+011
+247 207 6.85501e+011
+129 75 6.84813e+011
+442 239 6.84648e+011
+131 132 6.84078e+011
+275 137 6.82933e+011
+514 346 6.82689e+011
+359 219 6.82661e+011
+150 306 6.82061e+011
+275 141 6.80694e+011
+49 150 6.80406e+011
+535 266 6.80185e+011
+275 139 6.80093e+011
+343 122 6.77882e+011
+298 274 6.77563e+011
+405 81 6.76459e+011
+323 315 6.75746e+011
+462 42 6.7547e+011
+89 149 6.75126e+011
+380 68 6.74999e+011
+36 219 6.74818e+011
+472 261 6.74011e+011
+453 85 6.73716e+011
+56 4 6.7182e+011
+114 169 6.69566e+011
+509 203 6.66335e+011
+156 95 6.66238e+011
+568 42 6.66126e+011
+218 208 6.65534e+011
+47 150 6.62571e+011
+142 393 6.62147e+011
+510 139 6.61001e+011
+343 108 6.60593e+011
+342 166 6.60046e+011
+108 60 6.59257e+011
+558 19 6.58869e+011
+346 276 6.58701e+011
+164 209 6.57281e+011
+186 202 6.5644e+011
+541 124 6.56386e+011
+392 160 6.5615e+011
+87 149 6.55923e+011
+134 97 6.55721e+011
+222 151 6.55213e+011
+278 219 6.55129e+011
+471 421 6.54279e+011
+487 263 6.52939e+011
+394 163 6.50756e+011
+137 171 6.4971e+011
+394 160 6.48559e+011
+372 69 6.4796e+011
+97 80 6.47647e+011
+188 108 6.46321e+011
+159 181 6.45858e+011
+139 174 6.45296e+011
+378 317 6.44634e+011
+487 265 6.44042e+011
+380 107 6.43955e+011
+509 142 6.43946e+011
+330 141 6.40954e+011
+477 204 6.40746e+011
+372 161 6.39155e+011
+156 74 6.39071e+011
+322 146 6.3741e+011
+215 125 6.36683e+011
+414 22 6.3414e+011
+78 271 6.34006e+011
+510 84 6.32921e+011
+162 115 6.32411e+011
+369 143 6.3186e+011
+331 105 6.30442e+011
+527 195 6.30363e+011
+108 98 6.30298e+011
+278 390 6.30167e+011
+157 91 6.29408e+011
+104 3 6.28973e+011
+533 266 6.28807e+011
+534 184 6.28591e+011
+479 204 6.2853e+011
+164 206 6.28354e+011
+533 20 6.2826e+011
+256 147 6.28091e+011
+61 253 6.27921e+011
+190 360 6.26917e+011
+542 208 6.26034e+011
+102 236 6.25643e+011
+97 449 6.2525e+011
+441 22 6.2518e+011
+266 16 6.24051e+011
+232 263 6.23922e+011
+361 400 6.23725e+011
+59 253 6.23657e+011
+33 30 6.23425e+011
+385 295 6.2338e+011
+191 204 6.23113e+011
+503 164 6.22741e+011
+157 72 6.22199e+011
+435 182 6.21775e+011
+139 109 6.19022e+011
+266 30 6.1864e+011
+184 110 6.1856e+011
+263 402 6.1824e+011
+272 64 6.17975e+011
+248 314 6.17837e+011
+173 240 6.17554e+011
+493 139 6.17342e+011
+528 363 6.16553e+011
+261 141 6.16365e+011
+61 203 6.1615e+011
+450 374 6.15456e+011
+516 182 6.13716e+011
+277 217 6.12725e+011
+226 421 6.12429e+011
+261 234 6.11744e+011
+22 65 6.11718e+011
+377 120 6.11457e+011
+511 203 6.10909e+011
+437 182 6.10711e+011
+223 14 6.10445e+011
+411 21 6.10132e+011
+340 122 6.1009e+011
+54 222 6.09964e+011
+465 121 6.09679e+011
+518 58 6.08936e+011
+509 174 6.08334e+011
+362 130 6.07766e+011
+269 132 6.07452e+011
+437 304 6.07392e+011
+329 105 6.07232e+011
+61 134 6.06114e+011
+571 40 6.05535e+011
+485 45 6.05469e+011
+106 43 6.0535e+011
+385 244 6.05268e+011
+346 179 6.04312e+011
+373 392 6.04165e+011
+394 218 6.02906e+011
+527 347 6.02678e+011
+540 98 6.02254e+011
+579 81 6.0182e+011
+296 421 6.00908e+011
+392 163 6.00353e+011
+155 91 6.00184e+011
+134 127 5.99957e+011
+357 11 5.9995e+011
+279 353 5.99789e+011
+184 399 5.99629e+011
+512 142 5.99354e+011
+296 331 5.99339e+011
+508 201 5.98744e+011
+222 149 5.98029e+011
+110 179 5.9665e+011
+506 3 5.964e+011
+328 11 5.96378e+011
+573 140 5.95986e+011
+332 294 5.94713e+011
+268 243 5.93815e+011
+356 259 5.93402e+011
+100 198 5.92979e+011
+170 200 5.92913e+011
+537 96 5.92243e+011
+345 166 5.92154e+011
+342 164 5.91779e+011
+274 72 5.91357e+011
+466 26 5.91147e+011
+478 5 5.89565e+011
+205 295 5.89356e+011
+78 40 5.89351e+011
+418 85 5.89209e+011
+463 280 5.88675e+011
+72 259 5.88171e+011
+480 165 5.87847e+011
+232 347 5.87392e+011
+269 277 5.86538e+011
+277 187 5.85345e+011
+175 20 5.84875e+011
+448 124 5.84594e+011
+436 124 5.83306e+011
+114 216 5.82154e+011
+210 74 5.82128e+011
+544 457 5.8205e+011
+265 300 5.82041e+011
+265 32 5.81894e+011
+85 1 5.8168e+011
+284 299 5.80778e+011
+483 164 5.80508e+011
+300 205 5.80476e+011
+577 53 5.8038e+011
+91 254 5.80045e+011
+161 169 5.79816e+011
+566 61 5.79029e+011
+455 86 5.78522e+011
+112 216 5.78429e+011
+75 9 5.78274e+011
+512 84 5.77386e+011
+504 143 5.76502e+011
+493 81 5.76144e+011
+389 21 5.76098e+011
+182 399 5.76097e+011
+499 225 5.75493e+011
+180 137 5.74228e+011
+207 156 5.73883e+011
+43 81 5.73647e+011
+165 278 5.7332e+011
+278 137 5.71727e+011
+375 118 5.71235e+011
+506 143 5.70458e+011
+517 346 5.70191e+011
+378 315 5.69885e+011
+144 181 5.69884e+011
+524 20 5.68971e+011
+145 7 5.68692e+011
+48 12 5.68399e+011
+575 178 5.66933e+011
+522 22 5.66845e+011
+514 348 5.66598e+011
+345 349 5.66397e+011
+187 217 5.66309e+011
+475 244 5.65531e+011
+250 220 5.64973e+011
+162 252 5.64727e+011
+120 115 5.63957e+011
+550 181 5.63898e+011
+449 140 5.6299e+011
+447 8 5.62895e+011
+522 20 5.62863e+011
+424 63 5.62808e+011
+387 128 5.62401e+011
+331 202 5.62037e+011
+57 72 5.61863e+011
+48 10 5.61376e+011
+272 68 5.61346e+011
+310 370 5.612e+011
+108 240 5.60869e+011
+185 343 5.60337e+011
+56 145 5.59739e+011
+237 91 5.59637e+011
+443 21 5.59458e+011
+168 115 5.59284e+011
+107 63 5.5892e+011
+94 257 5.58909e+011
+259 165 5.58493e+011
+27 30 5.5842e+011
+105 223 5.58153e+011
+163 278 5.58057e+011
+218 105 5.57806e+011
+178 273 5.56757e+011
+536 393 5.5659e+011
+423 261 5.56297e+011
+334 91 5.55261e+011
+204 309 5.54895e+011
+473 204 5.54832e+011
+516 42 5.54639e+011
+524 171 5.54461e+011
+418 438 5.54446e+011
+85 61 5.54444e+011
+64 134 5.5397e+011
+523 122 5.53902e+011
+247 386 5.53344e+011
+126 38 5.53123e+011
+57 183 5.53001e+011
+360 141 5.52903e+011
+356 219 5.52676e+011
+287 262 5.52646e+011
+160 137 5.525e+011
+331 90 5.51832e+011
+165 357 5.51683e+011
+556 18 5.51377e+011
+298 138 5.51053e+011
+209 419 5.50852e+011
+449 138 5.50694e+011
+304 190 5.49312e+011
+167 313 5.48574e+011
+374 240 5.48134e+011
+327 105 5.48076e+011
+287 51 5.47983e+011
+385 166 5.47948e+011
+71 150 5.47915e+011
+38 240 5.4739e+011
+376 162 5.47337e+011
+412 100 5.45901e+011
+422 49 5.45854e+011
+385 88 5.45625e+011
+238 161 5.45625e+011
+218 98 5.44901e+011
+542 98 5.44404e+011
+46 12 5.43914e+011
+554 181 5.42794e+011
+11 204 5.42548e+011
+228 260 5.42066e+011
+273 166 5.41879e+011
+195 132 5.41254e+011
+161 217 5.40124e+011
+445 123 5.40071e+011
+191 350 5.39625e+011
+119 128 5.39594e+011
+279 143 5.39556e+011
+299 140 5.39366e+011
+147 398 5.39174e+011
+510 129 5.39147e+011
+397 163 5.37076e+011
+448 166 5.36803e+011
+404 376 5.36331e+011
+412 98 5.36322e+011
+276 331 5.36093e+011
+66 216 5.35387e+011
+210 154 5.35283e+011
+273 168 5.34841e+011
+387 125 5.3404e+011
+413 65 5.33967e+011
+241 57 5.33795e+011
+272 170 5.33747e+011
+354 11 5.33026e+011
+446 21 5.33008e+011
+63 59 5.3275e+011
+365 201 5.32547e+011
+305 439 5.32358e+011
+256 220 5.31682e+011
+358 241 5.30017e+011
+205 163 5.2976e+011
+13 204 5.29741e+011
+176 240 5.29645e+011
+250 193 5.2953e+011
+172 18 5.29125e+011
+509 343 5.28405e+011
+489 2 5.27802e+011
+282 71 5.26894e+011
+191 206 5.26264e+011
+372 118 5.26062e+011
+233 345 5.26043e+011
+478 243 5.25182e+011
+363 357 5.24735e+011
+393 20 5.24614e+011
+152 112 5.2458e+011
+467 140 5.24554e+011
+562 18 5.24447e+011
+78 474 5.23458e+011
+282 73 5.2266e+011
+262 166 5.22637e+011
+185 217 5.22095e+011
+310 6 5.21831e+011
+113 177 5.2176e+011
+471 202 5.20978e+011
+187 204 5.19651e+011
+280 129 5.18227e+011
+349 181 5.17859e+011
+247 216 5.17454e+011
+34 235 5.17345e+011
+168 118 5.17163e+011
+150 112 5.16508e+011
+364 180 5.16029e+011
+527 344 5.15742e+011
+561 475 5.15546e+011
+261 71 5.1553e+011
+67 253 5.15318e+011
+353 338 5.14681e+011
+271 145 5.14144e+011
+563 323 5.13471e+011
+537 93 5.13394e+011
+576 125 5.12802e+011
+172 55 5.12724e+011
+306 195 5.12051e+011
+322 104 5.11524e+011
+46 81 5.10792e+011
+83 476 5.10776e+011
+261 202 5.10697e+011
+395 22 5.10334e+011
+438 160 5.09987e+011
+139 99 5.07962e+011
+162 126 5.07763e+011
+537 122 5.07745e+011
+581 81 5.07352e+011
+86 181 5.07082e+011
+129 218 5.0679e+011
+415 164 5.06715e+011
+405 339 5.05503e+011
+56 66 5.05316e+011
+531 141 5.0524e+011
+266 130 5.04622e+011
+147 78 5.04363e+011
+540 406 5.03926e+011
+509 179 5.02817e+011
+61 371 5.02368e+011
+164 312 5.02115e+011
+542 95 5.0187e+011
+560 18 5.01382e+011
+164 73 5.0116e+011
+480 300 5.00297e+011
+277 190 5.00188e+011
+344 264 5.00139e+011
+93 214 4.99908e+011
+435 319 4.99023e+011
+11 81 4.98868e+011
+82 61 4.98826e+011
+543 8 4.98244e+011
+93 216 4.97939e+011
+72 146 4.97882e+011
+401 166 4.97429e+011
+376 160 4.96933e+011
+397 356 4.96901e+011
+80 195 4.96146e+011
+199 166 4.9601e+011
+306 192 4.95494e+011
+289 124 4.95169e+011
+298 421 4.95082e+011
+170 54 4.94626e+011
+160 139 4.93945e+011
+392 17 4.93638e+011
+411 65 4.93593e+011
+521 183 4.93382e+011
+150 114 4.93317e+011
+563 62 4.93286e+011
+65 253 4.92284e+011
+541 133 4.91999e+011
+6 64 4.91798e+011
+207 163 4.91109e+011
+149 130 4.91073e+011
+116 77 4.91066e+011
+270 108 4.9054e+011
+418 283 4.9014e+011
+91 290 4.89905e+011
+362 407 4.89634e+011
+264 71 4.89412e+011
+328 182 4.89261e+011
+232 260 4.89112e+011
+90 376 4.88949e+011
+46 10 4.88742e+011
+36 170 4.87995e+011
+137 99 4.87838e+011
+109 43 4.87551e+011
+109 94 4.87427e+011
+168 196 4.87353e+011
+166 107 4.86962e+011
+180 395 4.86927e+011
+572 405 4.86631e+011
+488 58 4.86254e+011
+109 39 4.85336e+011
+193 218 4.85164e+011
+448 376 4.84741e+011
+42 10 4.84428e+011
+576 127 4.843e+011
+340 264 4.8429e+011
+415 98 4.83946e+011
+301 101 4.83924e+011
+114 2 4.8388e+011
+196 126 4.83629e+011
+325 426 4.83561e+011
+434 159 4.83516e+011
+434 112 4.83464e+011
+319 386 4.83293e+011
+129 78 4.82735e+011
+270 93 4.82516e+011
+250 90 4.82476e+011
+7 9 4.82284e+011
+35 31 4.81634e+011
+238 164 4.81584e+011
+114 212 4.81479e+011
+280 191 4.81292e+011
+268 279 4.8119e+011
+279 132 4.80917e+011
+228 130 4.80816e+011
+10 102 4.8081e+011
+93 149 4.80788e+011
+402 186 4.80489e+011
+288 397 4.79859e+011
+383 88 4.79201e+011
+42 12 4.78881e+011
+220 212 4.78589e+011
+118 115 4.78032e+011
+150 398 4.77649e+011
+574 127 4.77194e+011
+383 221 4.76946e+011
+66 276 4.76906e+011
+501 164 4.76646e+011
+207 201 4.76262e+011
+357 9 4.76077e+011
+124 271 4.75958e+011
+148 449 4.75845e+011
+560 323 4.75091e+011
+563 160 4.74694e+011
+290 88 4.74432e+011
+51 155 4.7428e+011
+116 389 4.74181e+011
+468 202 4.74077e+011
+26 131 4.7388e+011
+452 102 4.73851e+011
+217 280 4.73778e+011
+102 164 4.73489e+011
+390 166 4.72257e+011
+445 118 4.71673e+011
+273 316 4.71244e+011
+507 6 4.70422e+011
+279 145 4.70331e+011
+501 142 4.70023e+011
+33 110 4.69878e+011
+222 116 4.69758e+011
+541 163 4.69638e+011
+421 141 4.69527e+011
+520 122 4.69357e+011
+480 451 4.68923e+011
+506 361 4.68915e+011
+402 143 4.68815e+011
+168 315 4.68682e+011
+268 58 4.68554e+011
+364 141 4.68113e+011
+484 375 4.67916e+011
+539 265 4.67668e+011
+277 144 4.67655e+011
+112 212 4.6682e+011
+394 63 4.66605e+011
+207 203 4.6612e+011
+96 423 4.65812e+011
+377 85 4.65558e+011
+365 105 4.65426e+011
+95 197 4.65296e+011
+202 294 4.65151e+011
+570 405 4.64884e+011
+48 132 4.64881e+011
+389 17 4.64736e+011
+486 139 4.64257e+011
+31 67 4.641e+011
+194 215 4.63372e+011
+360 315 4.63258e+011
+107 429 4.63143e+011
+298 296 4.62956e+011
+359 9 4.62809e+011
+449 87 4.62642e+011
+297 68 4.6262e+011
+60 40 4.62229e+011
+196 167 4.62216e+011
+447 351 4.62067e+011
+524 187 4.61453e+011
+440 124 4.61118e+011
+375 65 4.60971e+011
+115 131 4.60655e+011
+277 179 4.60567e+011
+258 161 4.60111e+011
+512 362 4.59862e+011
+117 425 4.59663e+011
+468 42 4.59633e+011
+419 259 4.59359e+011
+4 9 4.59282e+011
+422 121 4.58775e+011
+220 106 4.58723e+011
+573 124 4.58669e+011
+145 16 4.58364e+011
+4 154 4.58207e+011
+306 364 4.57911e+011
+365 337 4.57755e+011
+88 368 4.57298e+011
+266 203 4.5675e+011
+40 355 4.56504e+011
+517 20 4.56152e+011
+192 139 4.55831e+011
+135 147 4.55659e+011
+151 130 4.55188e+011
+506 62 4.54368e+011
+272 58 4.54252e+011
+371 89 4.5425e+011
+428 1 4.54161e+011
+25 201 4.53756e+011
+200 129 4.53511e+011
+276 110 4.53404e+011
+66 26 4.53279e+011
+58 204 4.52755e+011
+182 201 4.52735e+011
+513 46 4.52494e+011
+68 47 4.52375e+011
+1 383 4.52134e+011
+204 307 4.52096e+011
+335 88 4.5194e+011
+488 183 4.51816e+011
+310 446 4.51406e+011
+224 149 4.51289e+011
+490 183 4.51054e+011
+265 249 4.50948e+011
+53 63 4.50928e+011
+174 201 4.50853e+011
+134 238 4.49746e+011
+422 399 4.48606e+011
+404 200 4.48477e+011
+25 199 4.47874e+011
+74 96 4.47641e+011
+345 297 4.47104e+011
+309 440 4.46933e+011
+65 59 4.46878e+011
+455 162 4.46778e+011
+110 2 4.4675e+011
+148 80 4.46737e+011
+232 34 4.46627e+011
+142 18 4.45587e+011
+349 145 4.45568e+011
+205 21 4.45546e+011
+67 251 4.44385e+011
+432 112 4.44093e+011
+258 90 4.43984e+011
+373 89 4.4395e+011
+541 131 4.4395e+011
+474 246 4.43845e+011
+408 26 4.43795e+011
+84 148 4.43423e+011
+113 243 4.43322e+011
+437 240 4.43165e+011
+284 295 4.4307e+011
+547 216 4.42401e+011
+292 88 4.41688e+011
+164 150 4.41604e+011
+535 121 4.41495e+011
+306 90 4.41105e+011
+193 134 4.39788e+011
+541 141 4.39574e+011
+281 438 4.395e+011
+340 109 4.39241e+011
+498 62 4.39087e+011
+52 42 4.38962e+011
+433 114 4.38868e+011
+407 429 4.38593e+011
+216 128 4.38554e+011
+175 272 4.38082e+011
+118 76 4.36878e+011
+246 72 4.36421e+011
+394 354 4.36236e+011
+53 358 4.35718e+011
+514 262 4.3557e+011
+573 330 4.35371e+011
+550 57 4.35061e+011
+463 101 4.35021e+011
+368 109 4.34546e+011
+195 329 4.34336e+011
+353 333 4.34097e+011
+223 433 4.33868e+011
+44 98 4.33678e+011
+308 353 4.33409e+011
+407 198 4.33357e+011
+218 128 4.32403e+011
+239 219 4.32092e+011
+289 346 4.31337e+011
+201 163 4.313e+011
+190 139 4.31089e+011
+534 160 4.31052e+011
+526 189 4.30793e+011
+190 329 4.30669e+011
+319 384 4.30535e+011
+215 280 4.3053e+011
+152 116 4.30521e+011
+265 74 4.30181e+011
+381 88 4.29552e+011
+472 23 4.29452e+011
+332 355 4.29432e+011
+436 379 4.2928e+011
+575 15 4.29186e+011
+382 26 4.29121e+011
+362 65 4.28325e+011
+259 391 4.2829e+011
+291 335 4.28205e+011
+228 263 4.28195e+011
+31 218 4.28019e+011
+84 213 4.27677e+011
+205 159 4.27667e+011
+325 341 4.27377e+011
+7 67 4.26906e+011
+461 162 4.25692e+011
+437 338 4.25551e+011
+66 372 4.25517e+011
+400 318 4.25449e+011
+378 64 4.25325e+011
+300 264 4.25295e+011
+93 93 4.25282e+011
+185 340 4.25197e+011
+250 165 4.24528e+011
+48 134 4.244e+011
+486 375 4.23563e+011
+359 7 4.23523e+011
+481 125 4.23432e+011
+505 178 4.23025e+011
+43 150 4.22852e+011
+269 144 4.2273e+011
+142 5 4.22655e+011
+304 160 4.22528e+011
+285 164 4.22411e+011
+185 308 4.22133e+011
+237 134 4.22103e+011
+579 43 4.21548e+011
+511 262 4.21495e+011
+190 136 4.21131e+011
+494 458 4.21007e+011
+302 160 4.20994e+011
+346 239 4.20446e+011
+72 234 4.20396e+011
+23 59 4.20347e+011
+73 236 4.20342e+011
+559 244 4.20322e+011
+209 162 4.19599e+011
+556 245 4.19037e+011
+351 11 4.18367e+011
+55 360 4.182e+011
+189 313 4.18094e+011
+76 236 4.17994e+011
+434 379 4.17658e+011
+229 13 4.17252e+011
+12 114 4.16975e+011
+572 179 4.16857e+011
+96 94 4.16612e+011
+40 308 4.16606e+011
+120 58 4.15931e+011
+524 189 4.15884e+011
+451 163 4.15875e+011
+130 428 4.15417e+011
+209 143 4.15061e+011
+219 153 4.149e+011
+449 118 4.147e+011
+76 96 4.14638e+011
+249 260 4.13878e+011
+43 146 4.13739e+011
+408 143 4.13512e+011
+399 106 4.13281e+011
+406 164 4.13261e+011
+283 124 4.13151e+011
+42 308 4.12846e+011
+346 45 4.12032e+011
+207 159 4.11689e+011
+268 68 4.11622e+011
+424 375 4.11365e+011
+443 124 4.1134e+011
+529 160 4.10983e+011
+255 89 4.10862e+011
+282 391 4.1085e+011
+136 239 4.10841e+011
+56 70 4.10647e+011
+196 124 4.10439e+011
+523 79 4.10014e+011
+446 129 4.09505e+011
+93 60 4.09502e+011
+487 2 4.09305e+011
+202 307 4.08821e+011
+448 444 4.08799e+011
+86 369 4.08323e+011
+276 316 4.08305e+011
+196 90 4.08221e+011
+224 128 4.08137e+011
+464 354 4.08047e+011
+166 150 4.07834e+011
+594 19 4.07531e+011
+470 140 4.07514e+011
+264 141 4.07286e+011
+445 353 4.07191e+011
+187 313 4.06935e+011
+564 156 4.06834e+011
+230 180 4.06364e+011
+302 157 4.06283e+011
+475 62 4.06134e+011
+531 160 4.0611e+011
+54 42 4.0602e+011
+263 249 4.0599e+011
+188 167 4.05479e+011
+525 39 4.05449e+011
+521 79 4.05065e+011
+52 4 4.05033e+011
+149 151 4.04775e+011
+196 111 4.03971e+011
+443 128 4.03485e+011
+41 182 4.03398e+011
+72 128 4.03316e+011
+452 45 4.0326e+011
+379 88 4.0215e+011
+97 363 4.02064e+011
+411 26 4.02034e+011
+400 200 4.0116e+011
+163 152 4.00687e+011
+302 243 4.00603e+011
+87 63 4.00437e+011
+458 339 4.00358e+011
+75 234 4.00313e+011
+480 440 3.99669e+011
+179 121 3.98675e+011
+97 149 3.98342e+011
+165 179 3.97826e+011
+309 448 3.97737e+011
+178 20 3.97737e+011
+512 299 3.9736e+011
+483 288 3.97325e+011
+315 238 3.97036e+011
+236 74 3.9689e+011
+258 248 3.96055e+011
+211 136 3.95967e+011
+261 249 3.95944e+011
+323 121 3.95911e+011
+68 476 3.95627e+011
+224 51 3.95062e+011
+592 20 3.94811e+011
+541 128 3.94793e+011
+46 355 3.947e+011
+570 121 3.94639e+011
+195 77 3.94152e+011
+149 1 3.94063e+011
+404 164 3.93945e+011
+120 447 3.93881e+011
+386 282 3.93797e+011
+508 61 3.93514e+011
+344 463 3.93455e+011
+454 47 3.93371e+011
+375 352 3.93354e+011
+540 101 3.93205e+011
+442 97 3.93172e+011
+444 452 3.93105e+011
+178 57 3.92898e+011
+47 162 3.92804e+011
+273 94 3.92794e+011
+556 243 3.92467e+011
+321 121 3.92363e+011
+57 365 3.92152e+011
+385 90 3.92146e+011
+71 477 3.92059e+011
+11 78 3.91341e+011
+122 95 3.91008e+011
+251 182 3.90973e+011
+264 390 3.90955e+011
+390 242 3.90802e+011
+85 63 3.90764e+011
+210 34 3.90756e+011
+399 184 3.90619e+011
+118 95 3.90319e+011
+470 142 3.90277e+011
+125 80 3.90268e+011
+107 29 3.9023e+011
+95 149 3.90125e+011
+197 75 3.89983e+011
+281 372 3.89974e+011
+136 136 3.89872e+011
+502 43 3.89841e+011
+376 124 3.89667e+011
+238 76 3.89121e+011
+413 81 3.89084e+011
+232 125 3.89077e+011
+571 123 3.88681e+011
+42 63 3.88569e+011
+165 115 3.88371e+011
+88 288 3.87985e+011
+523 99 3.8692e+011
+390 130 3.86621e+011
+402 104 3.86508e+011
+19 65 3.86036e+011
+72 187 3.85995e+011
+105 360 3.85734e+011
+91 276 3.85507e+011
+391 118 3.84681e+011
+220 128 3.84573e+011
+333 242 3.8452e+011
+351 146 3.84475e+011
+539 79 3.84459e+011
+432 276 3.84386e+011
+110 326 3.84008e+011
+557 463 3.83873e+011
+445 244 3.83716e+011
+285 241 3.83567e+011
+526 383 3.83417e+011
+544 247 3.83401e+011
+227 127 3.83244e+011
+361 244 3.82987e+011
+29 257 3.82959e+011
+330 167 3.82557e+011
+540 182 3.81823e+011
+271 142 3.81501e+011
+252 249 3.81127e+011
+561 271 3.81105e+011
+200 30 3.8106e+011
+381 120 3.81026e+011
+283 195 3.80417e+011
+103 198 3.80377e+011
+139 20 3.80026e+011
+29 222 3.79888e+011
+235 150 3.79327e+011
+150 153 3.78465e+011
+242 190 3.78436e+011
+135 179 3.78349e+011
+76 238 3.77785e+011
+244 293 3.77762e+011
+97 445 3.77626e+011
+173 119 3.77571e+011
+489 44 3.77459e+011
+413 298 3.76788e+011
+480 168 3.76756e+011
+98 259 3.7657e+011
+193 137 3.76358e+011
+403 339 3.76219e+011
+76 30 3.75763e+011
+364 102 3.75442e+011
+232 150 3.75358e+011
+529 177 3.75287e+011
+299 72 3.75068e+011
+572 162 3.74951e+011
+259 328 3.74713e+011
+218 102 3.74454e+011
+108 76 3.7433e+011
+64 316 3.74295e+011
+409 102 3.73926e+011
+338 428 3.73711e+011
+290 311 3.73551e+011
+449 126 3.73497e+011
+378 342 3.7316e+011
+181 312 3.73e+011
+577 56 3.72996e+011
+151 2 3.72616e+011
+110 110 3.71761e+011
+450 45 3.71265e+011
+494 456 3.70944e+011
+575 13 3.70867e+011
+359 53 3.70691e+011
+59 64 3.70384e+011
+484 141 3.70278e+011
+87 144 3.69996e+011
+477 340 3.69934e+011
+59 100 3.69741e+011
+139 178 3.69651e+011
+192 15 3.69521e+011
+259 107 3.69511e+011
+484 139 3.6943e+011
+536 260 3.69387e+011
+317 103 3.68893e+011
+301 133 3.68845e+011
+148 90 3.6879e+011
+45 475 3.68318e+011
+468 208 3.68182e+011
+256 248 3.67934e+011
+432 381 3.67521e+011
+483 47 3.67497e+011
+396 138 3.67185e+011
+185 167 3.66903e+011
+279 332 3.66888e+011
+371 338 3.65541e+011
+322 426 3.65375e+011
+119 110 3.65202e+011
+10 32 3.64988e+011
+133 147 3.64773e+011
+419 141 3.64282e+011
+354 144 3.6409e+011
+91 20 3.63807e+011
+461 340 3.63801e+011
+491 180 3.63614e+011
+246 293 3.63338e+011
+282 211 3.63279e+011
+240 192 3.63003e+011
+342 466 3.62938e+011
+174 122 3.62865e+011
+542 262 3.62847e+011
+48 235 3.62802e+011
+88 216 3.62747e+011
+38 267 3.62472e+011
+105 76 3.61803e+011
+451 438 3.61141e+011
+218 290 3.61108e+011
+320 30 3.60802e+011
+148 88 3.60398e+011
+71 46 3.60053e+011
+228 287 3.60042e+011
+209 138 3.60028e+011
+186 102 3.59959e+011
+204 204 3.59869e+011
+321 28 3.59745e+011
+323 29 3.59175e+011
+314 446 3.5906e+011
+289 348 3.58999e+011
+531 266 3.58915e+011
+92 444 3.58827e+011
+212 162 3.58615e+011
+387 335 3.58575e+011
+86 371 3.58335e+011
+253 386 3.58291e+011
+281 33 3.58081e+011
+283 126 3.57959e+011
+362 315 3.57603e+011
+121 125 3.57294e+011
+268 219 3.56723e+011
+259 72 3.56604e+011
+161 152 3.56289e+011
+412 416 3.56109e+011
+509 58 3.56086e+011
+283 395 3.55916e+011
+269 416 3.55856e+011
+562 274 3.55673e+011
+328 167 3.55634e+011
+262 199 3.54454e+011
+544 262 3.54452e+011
+192 313 3.54368e+011
+434 338 3.54018e+011
+335 392 3.53969e+011
+561 142 3.53321e+011
+511 134 3.53299e+011
+287 402 3.53194e+011
+571 60 3.52766e+011
+280 418 3.5274e+011
+343 200 3.52726e+011
+123 125 3.52467e+011
+562 461 3.52457e+011
+451 120 3.52395e+011
+110 265 3.52388e+011
+479 11 3.52149e+011
+333 66 3.51584e+011
+9 47 3.51358e+011
+529 270 3.51304e+011
+303 87 3.5119e+011
+222 99 3.51101e+011
+282 418 3.50983e+011
+214 174 3.50615e+011
+360 313 3.50167e+011
+337 392 3.49969e+011
+310 353 3.49871e+011
+483 204 3.49697e+011
+356 23 3.49215e+011
+329 25 3.49091e+011
+251 184 3.49051e+011
+221 87 3.48464e+011
+294 311 3.48101e+011
+536 78 3.47714e+011
+488 25 3.47274e+011
+37 202 3.46948e+011
+413 353 3.4668e+011
+573 57 3.46397e+011
+186 2 3.4578e+011
+369 92 3.44843e+011
+375 5 3.44837e+011
+349 125 3.44818e+011
+290 184 3.44816e+011
+323 14 3.44755e+011
+251 150 3.44429e+011
+149 199 3.4403e+011
+206 419 3.44015e+011
+306 359 3.43986e+011
+499 80 3.43964e+011
+130 112 3.43861e+011
+536 245 3.43202e+011
+138 311 3.43079e+011
+475 340 3.4297e+011
+357 66 3.42948e+011
+248 293 3.42873e+011
+411 263 3.42394e+011
+381 181 3.42342e+011
+354 269 3.42331e+011
+348 164 3.42141e+011
+384 257 3.42063e+011
+541 249 3.42063e+011
+561 146 3.4185e+011
+18 342 3.41765e+011
+372 121 3.4164e+011
+116 58 3.41608e+011
+149 196 3.4129e+011
+215 94 3.41006e+011
+360 370 3.40403e+011
+47 255 3.40121e+011
+131 135 3.40022e+011
+498 460 3.3986e+011
+163 118 3.39345e+011
+28 133 3.39248e+011
+164 349 3.38954e+011
+397 46 3.38856e+011
+538 41 3.38603e+011
+340 472 3.38171e+011
+566 144 3.37897e+011
+115 359 3.37831e+011
+558 79 3.37681e+011
+181 165 3.37589e+011
+355 105 3.37531e+011
+247 107 3.36715e+011
+149 132 3.36459e+011
+84 100 3.36431e+011
+524 424 3.3631e+011
+504 361 3.36232e+011
+202 394 3.36198e+011
+250 154 3.36178e+011
+136 145 3.36058e+011
+445 166 3.35491e+011
+165 286 3.35486e+011
+464 115 3.35329e+011
+203 201 3.35323e+011
+110 261 3.35202e+011
+117 61 3.35166e+011
+277 210 3.3512e+011
+130 237 3.34859e+011
+265 144 3.34503e+011
+524 426 3.3424e+011
+523 40 3.34224e+011
+248 399 3.34129e+011
+528 163 3.33926e+011
+565 323 3.33827e+011
+113 94 3.33724e+011
+342 196 3.33577e+011
+52 451 3.33521e+011
+158 309 3.32959e+011
+179 262 3.32856e+011
+217 292 3.32585e+011
+541 205 3.32464e+011
+242 219 3.32439e+011
+388 419 3.3241e+011
+307 104 3.32312e+011
+367 245 3.32161e+011
+147 196 3.32122e+011
+434 124 3.30958e+011
+76 110 3.30949e+011
+505 262 3.30681e+011
+135 322 3.30649e+011
+204 394 3.3038e+011
+542 93 3.30213e+011
+331 413 3.30195e+011
+8 114 3.30031e+011
+136 181 3.29728e+011
+77 128 3.29442e+011
+123 110 3.29386e+011
+375 224 3.29275e+011
+224 125 3.28656e+011
+84 110 3.28627e+011
+86 374 3.28461e+011
+255 107 3.28358e+011
+547 141 3.28165e+011
+247 366 3.27956e+011
+339 392 3.27914e+011
+447 243 3.27618e+011
+463 341 3.27609e+011
+450 324 3.27361e+011
+389 118 3.27023e+011
+81 101 3.26634e+011
+71 372 3.25943e+011
+333 415 3.25941e+011
+27 118 3.25881e+011
+461 121 3.25875e+011
+360 159 3.2582e+011
+346 372 3.2575e+011
+227 72 3.25645e+011
+100 7 3.256e+011
+290 396 3.25489e+011
+242 217 3.2536e+011
+173 416 3.2536e+011
+219 314 3.25192e+011
+111 358 3.2507e+011
+110 263 3.24971e+011
+529 268 3.24706e+011
+358 25 3.24681e+011
+198 195 3.24677e+011
+521 426 3.24445e+011
+317 99 3.24372e+011
+495 473 3.23727e+011
+245 180 3.23568e+011
+110 76 3.23381e+011
+437 277 3.23211e+011
+40 23 3.23152e+011
+526 177 3.23102e+011
+86 377 3.23013e+011
+354 14 3.22925e+011
+122 82 3.2291e+011
+125 216 3.22814e+011
+128 114 3.22659e+011
+353 24 3.22599e+011
+151 91 3.22369e+011
+523 222 3.22294e+011
+359 368 3.22282e+011
+457 121 3.22211e+011
+342 47 3.22133e+011
+284 399 3.22119e+011
+564 145 3.22062e+011
+267 145 3.22024e+011
+494 59 3.21499e+011
+327 102 3.21432e+011
+389 88 3.20722e+011
+545 244 3.2061e+011
+182 96 3.20305e+011
+91 285 3.2015e+011
+130 128 3.20128e+011
+432 122 3.20098e+011
+523 119 3.20085e+011
+569 382 3.20038e+011
+241 134 3.19976e+011
+313 103 3.19656e+011
+542 181 3.19533e+011
+164 182 3.19294e+011
+25 118 3.18951e+011
+285 33 3.18929e+011
+279 387 3.1891e+011
+173 58 3.18766e+011
+383 22 3.18659e+011
+179 169 3.18427e+011
+181 168 3.18227e+011
+153 192 3.17865e+011
+359 66 3.17834e+011
+199 90 3.17716e+011
+173 106 3.17209e+011
+335 218 3.17018e+011
+286 215 3.17016e+011
+449 285 3.16652e+011
+512 116 3.16645e+011
+280 122 3.16479e+011
+426 103 3.16263e+011
+90 95 3.16173e+011
+376 342 3.15915e+011
+515 122 3.15914e+011
+169 130 3.15815e+011
+173 343 3.15738e+011
+76 60 3.1529e+011
+284 198 3.1517e+011
+242 421 3.14975e+011
+86 339 3.14817e+011
+434 82 3.14754e+011
+461 124 3.14624e+011
+326 29 3.14575e+011
+566 180 3.14413e+011
+69 338 3.14377e+011
+540 218 3.14369e+011
+527 140 3.1412e+011
+289 118 3.14097e+011
+559 273 3.14037e+011
+497 282 3.13993e+011
+222 101 3.13869e+011
+450 62 3.13835e+011
+496 458 3.13756e+011
+550 223 3.13744e+011
+248 346 3.13651e+011
+451 124 3.13562e+011
+552 222 3.13532e+011
+240 194 3.13212e+011
+115 277 3.12904e+011
+329 216 3.12752e+011
+88 339 3.12684e+011
+285 346 3.12279e+011
+126 126 3.11938e+011
+538 181 3.11705e+011
+573 40 3.11579e+011
+534 78 3.11572e+011
+383 102 3.11425e+011
+249 207 3.11332e+011
+501 363 3.10991e+011
+531 120 3.10896e+011
+247 256 3.10733e+011
+452 62 3.10312e+011
+356 283 3.09816e+011
+196 327 3.09781e+011
+355 142 3.09477e+011
+478 125 3.09457e+011
+356 268 3.09271e+011
+310 265 3.09158e+011
+382 147 3.09039e+011
+150 233 3.09018e+011
+192 186 3.09006e+011
+12 421 3.08615e+011
+280 223 3.08384e+011
+515 380 3.08283e+011
+390 335 3.08191e+011
+509 300 3.07641e+011
+352 425 3.07497e+011
+517 120 3.0728e+011
+317 101 3.06886e+011
+248 182 3.06864e+011
+181 20 3.06863e+011
+9 234 3.06836e+011
+319 187 3.06817e+011
+539 241 3.06627e+011
+593 101 3.06485e+011
+574 162 3.06466e+011
+530 96 3.06147e+011
+349 371 3.06069e+011
+541 380 3.06006e+011
+178 330 3.05615e+011
+410 143 3.05345e+011
+170 167 3.05297e+011
+391 205 3.0475e+011
+94 19 3.04569e+011
+188 301 3.04339e+011
+132 78 3.04278e+011
+282 386 3.04054e+011
+566 18 3.03878e+011
+87 311 3.03339e+011
+245 256 3.03328e+011
+38 82 3.03189e+011
+501 266 3.03165e+011
+394 104 3.03083e+011
+514 118 3.03038e+011
+139 22 3.03014e+011
+68 419 3.03004e+011
+124 95 3.02523e+011
+160 61 3.02457e+011
+261 226 3.02361e+011
+110 323 3.02098e+011
+575 81 3.02026e+011
+263 284 3.01735e+011
+335 370 3.01654e+011
+188 265 3.01602e+011
+374 124 3.01598e+011
+391 354 3.01585e+011
+528 30 3.01558e+011
+13 112 3.01546e+011
+11 75 3.01452e+011
+110 243 3.01236e+011
+3 234 3.01093e+011
+162 33 3.00902e+011
+471 212 3.00747e+011
+160 33 3.0069e+011
+336 144 3.00618e+011
+189 326 3.00446e+011
+104 258 3.00412e+011
+284 132 3.00258e+011
+137 59 2.99935e+011
+260 457 2.99692e+011
+124 341 2.99621e+011
+418 448 2.99565e+011
+37 200 2.99555e+011
+570 451 2.98785e+011
+275 68 2.98361e+011
+376 158 2.98303e+011
+323 133 2.98246e+011
+85 38 2.98244e+011
+222 123 2.98149e+011
+576 134 2.97829e+011
+72 409 2.97605e+011
+303 141 2.97579e+011
+296 269 2.97388e+011
+481 171 2.9731e+011
+381 321 2.97237e+011
+163 62 2.96989e+011
+454 116 2.96773e+011
+266 219 2.9656e+011
+24 49 2.96439e+011
+430 62 2.96349e+011
+215 162 2.96092e+011
+128 126 2.95788e+011
+237 196 2.95765e+011
+110 145 2.95564e+011
+151 135 2.95096e+011
+497 284 2.95038e+011
+529 397 2.95032e+011
+272 208 2.94897e+011
+132 394 2.9486e+011
+247 362 2.94755e+011
+34 170 2.945e+011
+285 343 2.94342e+011
+247 184 2.94233e+011
+548 220 2.9389e+011
+139 142 2.93886e+011
+379 181 2.93551e+011
+390 135 2.93401e+011
+146 139 2.93316e+011
+415 298 2.93206e+011
+444 205 2.93108e+011
+479 286 2.92979e+011
+420 90 2.92747e+011
+412 472 2.92605e+011
+576 166 2.92428e+011
+28 116 2.92316e+011
+214 400 2.92064e+011
+254 9 2.92041e+011
+149 194 2.91766e+011
+275 204 2.91258e+011
+184 376 2.91152e+011
+127 110 2.91034e+011
+22 48 2.90666e+011
+569 422 2.90545e+011
+250 402 2.90407e+011
+44 339 2.8994e+011
+439 25 2.89678e+011
+106 180 2.89649e+011
+283 164 2.89491e+011
+42 119 2.89306e+011
+85 239 2.89195e+011
+375 146 2.89169e+011
+33 218 2.89084e+011
+335 220 2.89e+011
+369 94 2.88849e+011
+143 177 2.88702e+011
+144 142 2.88594e+011
+249 256 2.88522e+011
+215 289 2.87798e+011
+170 124 2.87649e+011
+391 53 2.87423e+011
+74 61 2.87394e+011
+181 121 2.87084e+011
+392 336 2.87076e+011
+74 128 2.87074e+011
+83 171 2.86947e+011
+293 146 2.8663e+011
+515 325 2.86513e+011
+70 420 2.86465e+011
+186 376 2.86348e+011
+181 16 2.86266e+011
+155 57 2.86124e+011
+94 8 2.86122e+011
+243 281 2.86063e+011
+334 427 2.86027e+011
+391 96 2.85915e+011
+516 163 2.8514e+011
+529 399 2.85089e+011
+105 432 2.84795e+011
+49 61 2.84772e+011
+1 381 2.84283e+011
+119 55 2.84183e+011
+406 161 2.83957e+011
+306 146 2.83882e+011
+362 318 2.83834e+011
+103 57 2.83669e+011
+165 118 2.83639e+011
+132 392 2.83177e+011
+404 105 2.83123e+011
+329 213 2.82995e+011
+191 122 2.82919e+011
+68 316 2.82583e+011
+190 127 2.82535e+011
+547 439 2.82529e+011
+497 43 2.82239e+011
+116 222 2.82151e+011
+249 367 2.82147e+011
+231 71 2.82067e+011
+131 126 2.81966e+011
+400 27 2.8181e+011
+484 2 2.81806e+011
+78 110 2.81628e+011
+100 445 2.81432e+011
+130 306 2.81406e+011
+419 412 2.812e+011
+299 256 2.81148e+011
+201 345 2.81118e+011
+10 73 2.81062e+011
+254 191 2.8094e+011
+322 187 2.80934e+011
+26 44 2.80701e+011
+158 305 2.80628e+011
+379 183 2.80547e+011
+311 221 2.80506e+011
+168 58 2.80501e+011
+149 22 2.80462e+011
+329 219 2.79971e+011
+225 87 2.79968e+011
+183 116 2.79903e+011
+454 438 2.79872e+011
+259 35 2.79748e+011
+270 60 2.79621e+011
+104 307 2.79559e+011
+198 198 2.79312e+011
+163 135 2.79222e+011
+160 121 2.79167e+011
+450 416 2.79047e+011
+199 327 2.79003e+011
+235 219 2.78977e+011
+453 120 2.78724e+011
+139 147 2.7847e+011
+209 125 2.78198e+011
+247 418 2.78099e+011
+133 91 2.78039e+011
+352 125 2.77805e+011
+421 298 2.77707e+011
+420 361 2.77305e+011
+122 160 2.7729e+011
+281 36 2.77146e+011
+366 94 2.76939e+011
+147 136 2.7658e+011
+195 199 2.75975e+011
+131 146 2.75843e+011
+32 45 2.75786e+011
+500 104 2.75746e+011
+245 187 2.75675e+011
+527 398 2.75552e+011
+170 451 2.75383e+011
+217 433 2.75252e+011
+45 408 2.75061e+011
+485 238 2.7468e+011
+494 340 2.74592e+011
+586 17 2.74214e+011
+218 420 2.73703e+011
+6 151 2.73667e+011
+413 144 2.73601e+011
+402 220 2.73361e+011
+57 303 2.73184e+011
+368 30 2.73162e+011
+562 276 2.72742e+011
+459 101 2.7252e+011
+262 383 2.72516e+011
+518 141 2.72084e+011
+342 312 2.72036e+011
+55 172 2.72031e+011
+408 105 2.71839e+011
+389 96 2.71685e+011
+529 137 2.7168e+011
+247 35 2.71522e+011
+219 204 2.71485e+011
+409 64 2.71377e+011
+26 46 2.71375e+011
+478 143 2.71085e+011
+456 358 2.70913e+011
+186 290 2.70882e+011
+142 429 2.7077e+011
+181 1 2.7053e+011
+4 165 2.70365e+011
+95 285 2.70106e+011
+335 29 2.69849e+011
+575 459 2.69831e+011
+290 308 2.69808e+011
+86 364 2.69646e+011
+527 137 2.6955e+011
+106 258 2.69398e+011
+391 89 2.69353e+011
+141 142 2.69321e+011
+200 391 2.69253e+011
+94 367 2.69233e+011
+228 92 2.69212e+011
+333 29 2.69046e+011
+123 84 2.68991e+011
+454 360 2.68908e+011
+560 268 2.68675e+011
+17 434 2.68384e+011
+177 344 2.68337e+011
+572 421 2.68231e+011
+118 223 2.68155e+011
+293 273 2.681e+011
+579 245 2.67911e+011
+139 136 2.67886e+011
+427 183 2.67883e+011
+155 318 2.67867e+011
+355 255 2.67744e+011
+162 327 2.67742e+011
+452 360 2.67609e+011
+69 335 2.67593e+011
+362 452 2.67544e+011
+521 424 2.67491e+011
+561 150 2.67477e+011
+329 320 2.67277e+011
+581 56 2.66904e+011
+147 194 2.6663e+011
+503 62 2.66517e+011
+147 198 2.66356e+011
+540 21 2.66329e+011
+516 1 2.66246e+011
+492 161 2.65992e+011
+436 25 2.65667e+011
+428 335 2.65554e+011
+382 47 2.65416e+011
+531 115 2.65334e+011
+186 304 2.65319e+011
+55 333 2.65224e+011
+441 454 2.65199e+011
+150 229 2.65163e+011
+94 124 2.65102e+011
+437 280 2.64996e+011
+58 105 2.64877e+011
+215 97 2.64681e+011
+580 346 2.64599e+011
+413 284 2.64481e+011
+362 443 2.64443e+011
+107 359 2.64287e+011
+311 299 2.64237e+011
+438 469 2.6413e+011
+185 95 2.64035e+011
+445 143 2.63915e+011
+435 62 2.63386e+011
+231 364 2.63137e+011
+122 86 2.63129e+011
+452 416 2.63122e+011
+335 142 2.63085e+011
+223 240 2.62949e+011
+345 139 2.62797e+011
+329 99 2.6251e+011
+278 224 2.62444e+011
+199 329 2.62147e+011
+567 202 2.62127e+011
+88 207 2.62034e+011
+114 261 2.62017e+011
+542 443 2.61814e+011
+71 49 2.61716e+011
+97 38 2.61592e+011
+375 156 2.61342e+011
+57 371 2.61259e+011
+88 232 2.61126e+011
+481 175 2.61012e+011
+158 101 2.60891e+011
+415 265 2.60808e+011
+432 237 2.60706e+011
+552 378 2.60698e+011
+409 67 2.60668e+011
+155 295 2.60192e+011
+408 161 2.6005e+011
+228 90 2.59872e+011
+12 434 2.59796e+011
+117 290 2.59565e+011
+337 29 2.59443e+011
+545 86 2.59242e+011
+375 148 2.59242e+011
+181 18 2.59236e+011
+67 151 2.59051e+011
+95 39 2.58962e+011
+338 13 2.58711e+011
+540 187 2.58688e+011
+136 141 2.58563e+011
+434 108 2.58522e+011
+25 255 2.58416e+011
+401 126 2.58364e+011
+284 219 2.58252e+011
+101 29 2.58181e+011
+68 306 2.57724e+011
+78 135 2.57549e+011
+426 106 2.57495e+011
+365 165 2.57376e+011
+409 14 2.57363e+011
+85 234 2.5736e+011
+277 426 2.56944e+011
+342 331 2.56912e+011
+256 191 2.56712e+011
+577 245 2.56595e+011
+266 200 2.56173e+011
+407 108 2.55687e+011
+163 432 2.55588e+011
+346 322 2.5547e+011
+351 333 2.5528e+011
+42 122 2.55188e+011
+164 434 2.54985e+011
+404 188 2.54661e+011
+377 145 2.54337e+011
+587 161 2.54245e+011
+389 2 2.54075e+011
+208 403 2.54038e+011
+351 128 2.53973e+011
+286 184 2.53763e+011
+245 184 2.53744e+011
+487 238 2.5346e+011
+222 104 2.53441e+011
+484 325 2.53277e+011
+448 62 2.52977e+011
+158 152 2.52849e+011
+423 103 2.52217e+011
+161 38 2.52007e+011
+213 424 2.51946e+011
+433 44 2.51885e+011
+155 316 2.51857e+011
+587 347 2.51647e+011
+405 108 2.51517e+011
+571 327 2.51478e+011
+49 257 2.51241e+011
+345 331 2.51193e+011
+111 338 2.51098e+011
+404 220 2.51068e+011
+462 141 2.50871e+011
+214 450 2.50566e+011
+142 99 2.5051e+011
+475 451 2.50467e+011
+419 95 2.50279e+011
+44 253 2.50004e+011
+484 5 2.49901e+011
+66 306 2.49793e+011
+510 349 2.49701e+011
+338 63 2.49587e+011
+539 246 2.49575e+011
+232 155 2.49336e+011
+204 125 2.49161e+011
+313 299 2.49113e+011
+54 303 2.49045e+011
+483 238 2.48872e+011
+106 184 2.48625e+011
+330 334 2.48513e+011
+389 450 2.48435e+011
+303 131 2.48296e+011
+205 403 2.48146e+011
+142 117 2.48105e+011
+540 254 2.48095e+011
+497 242 2.48087e+011
+409 108 2.48009e+011
+207 125 2.47896e+011
+168 416 2.47847e+011
+17 237 2.47691e+011
+387 451 2.47671e+011
+375 299 2.47545e+011
+208 308 2.47045e+011
+50 254 2.47003e+011
+357 63 2.46935e+011
+447 180 2.46899e+011
+509 380 2.46873e+011
+342 92 2.46786e+011
+509 365 2.46331e+011
+109 257 2.46259e+011
+571 459 2.46217e+011
+269 140 2.46096e+011
+574 445 2.46081e+011
+381 413 2.46047e+011
+181 155 2.45448e+011
+90 372 2.45371e+011
+529 34 2.4494e+011
+484 121 2.44925e+011
+6 234 2.44914e+011
+114 205 2.44686e+011
+323 135 2.44679e+011
+388 174 2.44514e+011
+331 282 2.44471e+011
+284 215 2.44346e+011
+424 100 2.44279e+011
+95 5 2.44242e+011
+286 246 2.43993e+011
+64 183 2.43951e+011
+192 292 2.43904e+011
+499 266 2.43894e+011
+258 458 2.43738e+011
+150 231 2.43576e+011
+396 182 2.43344e+011
+575 83 2.43184e+011
+519 242 2.43005e+011
+295 146 2.42405e+011
+445 247 2.42314e+011
+201 200 2.42225e+011
+282 215 2.42095e+011
+84 73 2.41699e+011
+265 309 2.41675e+011
+149 303 2.416e+011
+531 118 2.41366e+011
+424 332 2.41201e+011
+209 415 2.41157e+011
+361 48 2.41096e+011
+243 215 2.41033e+011
+537 183 2.40996e+011
+283 84 2.40807e+011
+276 223 2.40639e+011
+579 309 2.40525e+011
+375 154 2.40233e+011
+189 255 2.39975e+011
+302 404 2.3984e+011
+264 259 2.39597e+011
+360 361 2.39533e+011
+555 202 2.39369e+011
+134 80 2.3914e+011
+463 224 2.39116e+011
+180 270 2.38898e+011
+459 356 2.3888e+011
+304 404 2.3884e+011
+130 409 2.38769e+011
+413 183 2.38702e+011
+191 420 2.38701e+011
+44 122 2.38476e+011
+63 152 2.38434e+011
+364 443 2.38307e+011
+265 312 2.38133e+011
+130 374 2.38061e+011
+378 158 2.37864e+011
+439 454 2.37808e+011
+535 39 2.37786e+011
+507 42 2.37782e+011
+4 33 2.37745e+011
+99 164 2.37742e+011
+526 79 2.37691e+011
+279 164 2.37673e+011
+245 104 2.37538e+011
+286 219 2.37418e+011
+72 164 2.37226e+011
+150 301 2.37105e+011
+387 102 2.37039e+011
+335 415 2.36946e+011
+492 117 2.36756e+011
+479 401 2.36514e+011
+303 294 2.36062e+011
+239 215 2.35951e+011
+170 126 2.35883e+011
+135 59 2.35639e+011
+389 66 2.35638e+011
+118 6 2.35398e+011
+490 458 2.35125e+011
+50 375 2.35057e+011
+194 238 2.35028e+011
+343 142 2.34859e+011
+166 380 2.34338e+011
+336 49 2.34168e+011
+268 119 2.34128e+011
+121 149 2.34012e+011
+256 157 2.34011e+011
+358 449 2.33908e+011
+404 278 2.33891e+011
+340 330 2.33833e+011
+213 203 2.3363e+011
+9 69 2.33575e+011
+274 121 2.33295e+011
+101 97 2.33244e+011
+127 307 2.33229e+011
+114 349 2.33213e+011
+305 149 2.33024e+011
+429 43 2.33003e+011
+374 451 2.32897e+011
+38 113 2.32833e+011
+502 122 2.32754e+011
+150 137 2.3272e+011
+145 145 2.32616e+011
+33 164 2.32587e+011
+152 23 2.32539e+011
+446 416 2.32453e+011
+256 459 2.32384e+011
+67 149 2.32329e+011
+505 382 2.32261e+011
+183 382 2.3204e+011
+577 309 2.31998e+011
+317 202 2.31949e+011
+325 100 2.3184e+011
+226 123 2.31813e+011
+272 140 2.31786e+011
+92 367 2.31777e+011
+417 415 2.31706e+011
+443 183 2.31648e+011
+106 262 2.31454e+011
+212 97 2.31445e+011
+474 7 2.31377e+011
+415 47 2.3131e+011
+531 112 2.31265e+011
+133 411 2.31195e+011
+416 412 2.31146e+011
+142 115 2.31101e+011
+212 149 2.31079e+011
+587 310 2.3104e+011
+415 144 2.31002e+011
+296 199 2.3091e+011
+356 265 2.30909e+011
+195 255 2.3086e+011
+417 245 2.30809e+011
+160 310 2.30578e+011
+539 223 2.30516e+011
+94 371 2.30372e+011
+304 90 2.30364e+011
+506 380 2.30265e+011
+470 433 2.3015e+011
+67 202 2.30099e+011
+41 286 2.30003e+011
+499 340 2.2998e+011
+248 326 2.29708e+011
+583 39 2.29575e+011
+208 405 2.29486e+011
+46 204 2.29451e+011
+54 236 2.2937e+011
+194 123 2.29314e+011
+355 426 2.29258e+011
+547 243 2.29247e+011
+205 345 2.28986e+011
+393 183 2.28962e+011
+548 281 2.28936e+011
+287 211 2.2891e+011
+250 246 2.28821e+011
+391 450 2.28791e+011
+483 241 2.28788e+011
+592 105 2.28775e+011
+231 91 2.28747e+011
+64 312 2.2873e+011
+541 223 2.28351e+011
+155 445 2.28327e+011
+468 101 2.28249e+011
+571 203 2.28078e+011
+520 164 2.28049e+011
+40 12 2.28013e+011
+489 469 2.27943e+011
+403 427 2.27765e+011
+178 201 2.27401e+011
+202 404 2.27126e+011
+363 3 2.27062e+011
+298 401 2.2694e+011
+232 288 2.2692e+011
+155 78 2.26744e+011
+86 355 2.26609e+011
+75 199 2.26379e+011
+386 4 2.26159e+011
+400 130 2.26057e+011
+197 343 2.25939e+011
+413 244 2.25923e+011
+217 423 2.25781e+011
+446 444 2.25728e+011
+70 61 2.25404e+011
+234 74 2.2534e+011
+217 400 2.25325e+011
+589 309 2.25246e+011
+196 189 2.25244e+011
+137 124 2.25034e+011
+571 446 2.24858e+011
+560 266 2.24569e+011
+435 228 2.24519e+011
+64 424 2.24493e+011
+433 280 2.24171e+011
+373 351 2.24157e+011
+532 345 2.24083e+011
+27 169 2.23824e+011
+69 258 2.23808e+011
+539 444 2.23688e+011
+116 4 2.23615e+011
+181 259 2.23573e+011
+518 83 2.23509e+011
+260 369 2.23507e+011
+179 183 2.23423e+011
+503 104 2.23402e+011
+186 161 2.23281e+011
+235 222 2.23221e+011
+122 341 2.22817e+011
+466 422 2.22814e+011
+448 132 2.22798e+011
+140 24 2.22779e+011
+319 96 2.22711e+011
+155 447 2.22649e+011
+437 228 2.22515e+011
+200 8 2.22467e+011
+307 218 2.22437e+011
+362 215 2.22228e+011
+402 44 2.22181e+011
+510 113 2.21671e+011
+158 163 2.21355e+011
+135 411 2.21242e+011
+577 326 2.21137e+011
+503 382 2.20621e+011
+419 315 2.20553e+011
+176 330 2.20541e+011
+262 271 2.20334e+011
+485 235 2.20297e+011
+334 50 2.20263e+011
+36 76 2.20215e+011
+414 219 2.20192e+011
+258 370 2.20068e+011
+138 120 2.20036e+011
+478 375 2.19988e+011
+600 365 2.19805e+011
+402 29 2.19631e+011
+29 169 2.19605e+011
+286 348 2.1952e+011
+373 299 2.19437e+011
+493 469 2.1937e+011
+245 213 2.19304e+011
+313 128 2.19284e+011
+185 119 2.19172e+011
+471 82 2.19147e+011
+383 414 2.19033e+011
+499 264 2.1899e+011
+337 92 2.18843e+011
+439 456 2.18789e+011
+269 103 2.18718e+011
+260 271 2.18535e+011
+217 425 2.18508e+011
+349 107 2.18338e+011
+114 143 2.18244e+011
+276 78 2.1823e+011
+71 389 2.18116e+011
+201 108 2.18109e+011
+196 466 2.18059e+011
+288 31 2.18011e+011
+53 375 2.17892e+011
+498 462 2.17885e+011
+568 323 2.17698e+011
+524 141 2.17428e+011
+83 217 2.17158e+011
+498 342 2.17145e+011
+160 106 2.17039e+011
+232 270 2.17026e+011
+143 235 2.16867e+011
+568 379 2.16786e+011
+309 130 2.16661e+011
+213 326 2.16589e+011
+432 226 2.16449e+011
+328 51 2.1639e+011
+113 338 2.16372e+011
+304 332 2.16352e+011
+541 242 2.16245e+011
+257 103 2.16005e+011
+205 397 2.1578e+011
+402 98 2.15642e+011
+107 323 2.15612e+011
+340 219 2.15542e+011
+450 196 2.1551e+011
+340 92 2.15445e+011
+177 141 2.15206e+011
+126 330 2.15096e+011
+154 161 2.14921e+011
+199 96 2.14843e+011
+260 33 2.14778e+011
+46 118 2.14568e+011
+349 121 2.14544e+011
+290 140 2.14327e+011
+206 184 2.14268e+011
+477 220 2.14094e+011
+405 9 2.14066e+011
+281 86 2.14004e+011
+486 159 2.13944e+011
+175 141 2.13842e+011
+157 313 2.13798e+011
+483 221 2.13719e+011
+234 155 2.13596e+011
+268 192 2.13589e+011
+567 270 2.1353e+011
+200 5 2.13515e+011
+335 280 2.1348e+011
+140 120 2.13394e+011
+142 253 2.13389e+011
+263 90 2.13199e+011
+397 92 2.13134e+011
+287 167 2.13107e+011
+135 168 2.12895e+011
+124 412 2.12849e+011
+499 138 2.1277e+011
+582 203 2.12207e+011
+309 34 2.12148e+011
+558 62 2.12079e+011
+400 29 2.1202e+011
+186 71 2.11794e+011
+343 307 2.11626e+011
+15 213 2.11572e+011
+80 406 2.11567e+011
+542 179 2.11416e+011
+433 25 2.1129e+011
+284 223 2.11158e+011
+333 180 2.11111e+011
+210 326 2.10864e+011
+432 1 2.10837e+011
+219 398 2.10614e+011
+262 397 2.10568e+011
+67 257 2.10207e+011
+131 188 2.10198e+011
+509 377 2.10181e+011
+580 327 2.10152e+011
+412 418 2.10122e+011
+318 461 2.09877e+011
+281 78 2.09798e+011
+389 290 2.09782e+011
+196 212 2.09709e+011
+299 254 2.09685e+011
+479 404 2.0968e+011
+62 285 2.09538e+011
+578 214 2.09392e+011
+133 477 2.09285e+011
+502 156 2.0913e+011
+292 200 2.08996e+011
+210 97 2.08984e+011
+194 241 2.08823e+011
+341 297 2.08767e+011
+209 317 2.08672e+011
+268 137 2.08469e+011
+523 163 2.08456e+011
+511 323 2.08379e+011
+451 181 2.08331e+011
+563 79 2.07709e+011
+277 33 2.07681e+011
+46 92 2.07251e+011
+243 213 2.07152e+011
+169 105 2.06964e+011
+279 236 2.06895e+011
+469 108 2.06805e+011
+97 456 2.06645e+011
+75 408 2.06597e+011
+302 291 2.06427e+011
+195 343 2.06342e+011
+417 251 2.06135e+011
+598 365 2.06063e+011
+220 286 2.05873e+011
+405 41 2.05696e+011
+205 235 2.05687e+011
+380 451 2.05591e+011
+581 58 2.05423e+011
+196 146 2.05305e+011
+436 93 2.05289e+011
+207 236 2.05086e+011
+286 350 2.05057e+011
+349 392 2.05044e+011
+95 282 2.04827e+011
+224 93 2.04766e+011
+582 141 2.04714e+011
+255 406 2.04515e+011
+104 262 2.04404e+011
+135 61 2.04108e+011
+183 304 2.04079e+011
+383 449 2.03844e+011
+223 157 2.03801e+011
+59 335 2.0376e+011
+215 314 2.03402e+011
+132 390 2.03196e+011
+291 51 2.0316e+011
+523 161 2.02977e+011
+135 429 2.02916e+011
+311 259 2.0287e+011
+41 339 2.02737e+011
+491 469 2.02601e+011
+400 277 2.02505e+011
+165 38 2.02466e+011
+565 271 2.02408e+011
+272 255 2.02358e+011
+160 163 2.02343e+011
+59 303 2.0229e+011
+552 19 2.02278e+011
+565 176 2.02265e+011
+27 190 2.02255e+011
+464 106 2.0217e+011
+448 258 2.02165e+011
+203 23 2.02033e+011
+383 451 2.01993e+011
+400 427 2.01764e+011
+403 27 2.01739e+011
+244 33 2.01689e+011
+146 326 2.01476e+011
+584 140 2.01436e+011
+511 442 2.01378e+011
+487 204 2.01059e+011
+363 88 2.00957e+011
+257 133 2.00751e+011
+157 24 2.00744e+011
+283 332 2.00728e+011
+223 386 2.00622e+011
+342 31 2.00586e+011
+105 161 2.0028e+011
+501 421 2.00089e+011
+283 78 2.00078e+011
+344 321 2.00054e+011
+437 140 1.99975e+011
+140 237 1.99891e+011
+41 204 1.99802e+011
+33 79 1.9977e+011
+416 223 1.99749e+011
+58 171 1.99708e+011
+210 140 1.99608e+011
+484 173 1.99513e+011
+214 404 1.99337e+011
+432 270 1.99322e+011
+476 398 1.99242e+011
+218 350 1.99185e+011
+51 39 1.99141e+011
+547 301 1.98992e+011
+462 187 1.98874e+011
+375 151 1.98827e+011
+181 340 1.98789e+011
+563 154 1.98721e+011
+395 130 1.9859e+011
+183 21 1.9845e+011
+485 204 1.98317e+011
+211 203 1.98288e+011
+461 304 1.98253e+011
+449 60 1.98213e+011
+284 334 1.97993e+011
+400 93 1.97766e+011
+352 159 1.97692e+011
+291 146 1.97533e+011
+541 177 1.97499e+011
+310 79 1.97491e+011
+495 165 1.97408e+011
+552 218 1.97372e+011
+358 181 1.97341e+011
+521 95 1.97247e+011
+312 262 1.97169e+011
+452 179 1.97167e+011
+522 361 1.97071e+011
+158 258 1.96957e+011
+64 363 1.96854e+011
+92 282 1.96778e+011
+146 235 1.96641e+011
+447 323 1.96625e+011
+155 313 1.9636e+011
+141 150 1.96317e+011
+135 165 1.96135e+011
+116 253 1.96109e+011
+42 59 1.95775e+011
+121 170 1.95747e+011
+247 434 1.95555e+011
+27 271 1.95356e+011
+349 138 1.95299e+011
+538 178 1.95228e+011
+481 102 1.95188e+011
+336 367 1.95005e+011
+38 77 1.9497e+011
+406 96 1.94952e+011
+569 270 1.94925e+011
+302 408 1.94876e+011
+407 14 1.9471e+011
+373 150 1.94628e+011
+484 243 1.94613e+011
+178 237 1.94391e+011
+25 221 1.94246e+011
+68 389 1.94061e+011
+73 154 1.94058e+011
+49 227 1.94049e+011
+334 465 1.93989e+011
+280 208 1.93786e+011
+182 57 1.93784e+011
+282 143 1.93673e+011
+155 99 1.93547e+011
+181 382 1.93479e+011
+281 374 1.93265e+011
+345 34 1.93203e+011
+243 430 1.93158e+011
+464 210 1.93153e+011
+214 169 1.93137e+011
+183 157 1.93093e+011
+509 442 1.93073e+011
+288 199 1.93048e+011
+557 201 1.9302e+011
+214 396 1.92914e+011
+343 34 1.92628e+011
+278 86 1.92421e+011
+484 175 1.92389e+011
+238 95 1.92253e+011
+184 57 1.92225e+011
+440 82 1.92223e+011
+88 21 1.92102e+011
+478 377 1.91959e+011
+349 296 1.91796e+011
+449 440 1.91733e+011
+438 81 1.91634e+011
+57 234 1.91586e+011
+379 413 1.91557e+011
+29 231 1.91532e+011
+439 108 1.91499e+011
+211 201 1.91496e+011
+534 82 1.91448e+011
+232 113 1.91444e+011
+574 100 1.91277e+011
+230 332 1.91235e+011
+530 347 1.91019e+011
+130 475 1.91006e+011
+400 280 1.90531e+011
+556 366 1.9012e+011
+380 63 1.90055e+011
+454 417 1.89943e+011
+407 6 1.89933e+011
+498 59 1.89856e+011
+206 14 1.89813e+011
+401 15 1.89808e+011
+97 366 1.89443e+011
+475 455 1.89411e+011
+281 89 1.89406e+011
+282 145 1.89404e+011
+438 402 1.89204e+011
+564 200 1.891e+011
+307 129 1.89087e+011
+384 114 1.89014e+011
+308 164 1.8898e+011
+546 90 1.88881e+011
+184 394 1.88768e+011
+434 274 1.8875e+011
+296 311 1.88465e+011
+9 475 1.88354e+011
+224 202 1.88327e+011
+157 177 1.88243e+011
+500 356 1.88161e+011
+55 330 1.88115e+011
+513 106 1.87974e+011
+18 275 1.8782e+011
+297 399 1.87731e+011
+126 237 1.87675e+011
+489 54 1.87531e+011
+66 367 1.87499e+011
+242 244 1.87486e+011
+49 377 1.87441e+011
+83 355 1.87368e+011
+138 56 1.8707e+011
+385 118 1.86938e+011
+124 149 1.86756e+011
+148 145 1.86684e+011
+442 87 1.86672e+011
+437 44 1.86522e+011
+343 315 1.86495e+011
+217 352 1.86484e+011
+64 365 1.86405e+011
+266 261 1.86376e+011
+430 25 1.86323e+011
+429 90 1.863e+011
+498 57 1.86245e+011
+255 403 1.86144e+011
+531 173 1.86114e+011
+545 281 1.86093e+011
+315 234 1.8599e+011
+119 53 1.85873e+011
+497 265 1.85764e+011
+196 29 1.85747e+011
+370 468 1.85669e+011
+371 138 1.85594e+011
+478 406 1.85445e+011
+421 416 1.85308e+011
+469 356 1.85279e+011
+120 341 1.85193e+011
+510 110 1.85134e+011
+437 108 1.84821e+011
+466 210 1.84766e+011
+157 39 1.84763e+011
+281 293 1.84629e+011
+574 97 1.84568e+011
+35 45 1.84567e+011
+219 174 1.84565e+011
+45 250 1.84551e+011
+565 464 1.84346e+011
+230 50 1.84338e+011
+182 287 1.84183e+011
+210 395 1.84115e+011
+132 120 1.84104e+011
+41 314 1.84e+011
+14 46 1.83862e+011
+266 259 1.83791e+011
+196 143 1.83766e+011
+305 152 1.83646e+011
+429 46 1.8363e+011
+578 203 1.83427e+011
+47 167 1.83312e+011
+512 110 1.8315e+011
+485 224 1.83124e+011
+202 88 1.82825e+011
+503 421 1.82766e+011
+129 121 1.82393e+011
+511 288 1.82341e+011
+122 412 1.82297e+011
+82 115 1.8216e+011
+159 104 1.82047e+011
+251 321 1.81877e+011
+463 237 1.81865e+011
+165 305 1.81811e+011
+304 109 1.81599e+011
+580 218 1.81591e+011
+367 98 1.81572e+011
+434 93 1.81449e+011
+134 253 1.81421e+011
+533 42 1.81411e+011
+93 219 1.81389e+011
+472 269 1.81323e+011
+585 309 1.81243e+011
+121 215 1.80989e+011
+330 329 1.8093e+011
+264 126 1.80873e+011
+72 413 1.8083e+011
+199 98 1.80762e+011
+498 473 1.8074e+011
+547 86 1.80648e+011
+7 162 1.80521e+011
+118 2 1.80521e+011
+63 258 1.80428e+011
+557 265 1.80376e+011
+553 276 1.80023e+011
+595 33 1.79852e+011
+178 333 1.79825e+011
+49 231 1.79478e+011
+475 143 1.79473e+011
+39 117 1.79453e+011
+328 96 1.79439e+011
+14 236 1.79392e+011
+14 238 1.79291e+011
+239 243 1.79154e+011
+428 472 1.79138e+011
+373 414 1.79027e+011
+360 251 1.79012e+011
+393 11 1.78949e+011
+91 39 1.78735e+011
+78 99 1.78637e+011
+455 177 1.78631e+011
+134 120 1.78611e+011
+120 343 1.78588e+011
+68 375 1.78364e+011
+48 225 1.78328e+011
+527 432 1.78156e+011
+66 154 1.78062e+011
+94 388 1.77953e+011
+37 470 1.77856e+011
+97 29 1.77791e+011
+139 253 1.77757e+011
+247 428 1.77716e+011
+343 303 1.77518e+011
+215 352 1.77156e+011
+426 472 1.77009e+011
+395 128 1.77004e+011
+247 407 1.76925e+011
+606 122 1.76879e+011
+361 89 1.76834e+011
+159 278 1.76752e+011
+383 64 1.76648e+011
+481 405 1.76553e+011
+89 38 1.76507e+011
+323 138 1.76432e+011
+543 203 1.76288e+011
+264 109 1.7627e+011
+469 318 1.7626e+011
+191 114 1.76247e+011
+12 34 1.76202e+011
+351 274 1.7617e+011
+69 154 1.76049e+011
+466 213 1.75984e+011
+579 141 1.75686e+011
+207 397 1.75571e+011
+257 403 1.75497e+011
+325 257 1.75445e+011
+444 322 1.75271e+011
+17 213 1.75195e+011
+265 192 1.75176e+011
+513 442 1.75117e+011
+60 171 1.74978e+011
+152 36 1.74821e+011
+446 186 1.74682e+011
+193 85 1.74427e+011
+509 283 1.74335e+011
+145 120 1.74323e+011
+234 333 1.74127e+011
+580 203 1.74055e+011
+88 397 1.73945e+011
+95 357 1.73798e+011
+516 3 1.7376e+011
+248 392 1.73692e+011
+555 303 1.73497e+011
+112 306 1.73435e+011
+86 389 1.73322e+011
+206 38 1.7321e+011
+67 361 1.73116e+011
+260 453 1.72451e+011
+446 437 1.72245e+011
+484 155 1.72167e+011
+53 332 1.72019e+011
+328 323 1.71917e+011
+182 412 1.71772e+011
+469 416 1.71766e+011
+511 286 1.7175e+011
+197 419 1.71736e+011
+153 241 1.71736e+011
+221 326 1.71599e+011
+349 141 1.71481e+011
+484 159 1.71435e+011
+301 66 1.71409e+011
+245 433 1.71395e+011
+291 149 1.7118e+011
+266 399 1.71106e+011
+167 187 1.70999e+011
+173 145 1.70952e+011
+133 475 1.70952e+011
+344 187 1.70916e+011
+558 303 1.70901e+011
+546 284 1.70879e+011
+296 256 1.70815e+011
+80 235 1.70777e+011
+37 468 1.70755e+011
+117 90 1.70742e+011
+299 406 1.7062e+011
+32 335 1.70597e+011
+97 454 1.70532e+011
+269 413 1.70474e+011
+359 135 1.70455e+011
+357 178 1.70444e+011
+373 101 1.70375e+011
+256 101 1.70135e+011
+193 89 1.70061e+011
+581 177 1.70031e+011
+216 404 1.69999e+011
+463 229 1.69977e+011
+258 231 1.69976e+011
+262 453 1.69952e+011
+236 417 1.69947e+011
+489 161 1.69932e+011
+189 270 1.69906e+011
+142 238 1.69895e+011
+75 146 1.69813e+011
+17 246 1.69653e+011
+214 429 1.69473e+011
+398 133 1.69448e+011
+300 445 1.69224e+011
+528 120 1.69124e+011
+107 304 1.69052e+011
+107 337 1.69022e+011
+74 335 1.69019e+011
+79 217 1.68819e+011
+99 29 1.68727e+011
+35 43 1.68492e+011
+206 75 1.68453e+011
+398 277 1.6834e+011
+400 375 1.68e+011
+188 57 1.67946e+011
+486 117 1.67936e+011
+562 239 1.67904e+011
+32 43 1.67885e+011
+556 276 1.67831e+011
+86 245 1.6763e+011
+243 432 1.67602e+011
+233 406 1.67551e+011
+334 431 1.67541e+011
+541 370 1.67527e+011
+346 327 1.675e+011
+93 406 1.67379e+011
+600 274 1.67377e+011
+516 303 1.6733e+011
+315 124 1.67239e+011
+506 157 1.67218e+011
+118 4 1.67065e+011
+353 220 1.66968e+011
+520 97 1.66948e+011
+602 276 1.66921e+011
+298 408 1.66804e+011
+535 178 1.66698e+011
+209 397 1.66686e+011
+282 268 1.66458e+011
+62 446 1.66435e+011
+396 95 1.66283e+011
+22 217 1.66248e+011
+268 190 1.66061e+011
+56 352 1.65929e+011
+238 33 1.65916e+011
+475 222 1.65896e+011
+294 199 1.65739e+011
+422 292 1.65723e+011
+117 303 1.65608e+011
+68 205 1.65305e+011
+375 95 1.65285e+011
+295 411 1.65275e+011
+61 437 1.65266e+011
+341 239 1.65249e+011
+305 66 1.65201e+011
+20 217 1.65183e+011
+223 399 1.6517e+011
+519 360 1.65114e+011
+123 175 1.64842e+011
+221 385 1.6481e+011
+146 343 1.64757e+011
+536 173 1.6475e+011
+39 291 1.64698e+011
+117 258 1.64653e+011
+191 241 1.64651e+011
+208 326 1.64638e+011
+243 357 1.64526e+011
+86 360 1.64508e+011
+391 408 1.64343e+011
+513 403 1.64319e+011
+16 248 1.64233e+011
+228 157 1.64232e+011
+126 326 1.64201e+011
+555 305 1.64156e+011
+273 198 1.64001e+011
+584 203 1.63945e+011
+144 343 1.63824e+011
+146 97 1.63814e+011
+142 257 1.63809e+011
+99 292 1.63685e+011
+484 329 1.6368e+011
+375 101 1.63527e+011
+524 241 1.63491e+011
+364 98 1.63484e+011
+497 419 1.63471e+011
+191 430 1.63393e+011
+25 217 1.63273e+011
+124 237 1.63133e+011
+93 408 1.6309e+011
+491 358 1.63037e+011
+235 404 1.62937e+011
+471 216 1.62911e+011
+67 309 1.62859e+011
+370 463 1.62811e+011
+80 238 1.62764e+011
+409 334 1.62707e+011
+210 94 1.62351e+011
+165 307 1.62339e+011
+64 165 1.62311e+011
+114 305 1.62286e+011
+231 274 1.62123e+011
+557 306 1.61714e+011
+277 254 1.61697e+011
+360 448 1.61658e+011
+72 199 1.61637e+011
+501 241 1.61582e+011
+51 335 1.6149e+011
+308 429 1.61365e+011
+475 267 1.61278e+011
+69 377 1.61207e+011
+425 25 1.61152e+011
+417 302 1.61062e+011
+449 194 1.60765e+011
+311 101 1.60719e+011
+306 258 1.60649e+011
+566 358 1.60631e+011
+550 139 1.60554e+011
+192 210 1.60391e+011
+232 133 1.60353e+011
+580 216 1.60198e+011
+71 377 1.60175e+011
+26 187 1.60008e+011
+35 389 1.59961e+011
+94 391 1.59885e+011
+564 266 1.59779e+011
+36 255 1.59757e+011
+98 263 1.59743e+011
+286 307 1.59738e+011
+507 113 1.59731e+011
+247 279 1.59721e+011
+16 274 1.59692e+011
+181 160 1.59647e+011
+62 441 1.59548e+011
+424 172 1.59536e+011
+152 56 1.59459e+011
+528 437 1.59399e+011
+378 95 1.5932e+011
+412 105 1.59288e+011
+507 255 1.59261e+011
+184 270 1.59232e+011
+340 142 1.5921e+011
+88 391 1.59208e+011
+311 136 1.59197e+011
+418 376 1.5906e+011
+454 198 1.58973e+011
+422 286 1.58937e+011
+262 259 1.58917e+011
+217 396 1.58902e+011
+161 101 1.58814e+011
+290 423 1.58633e+011
+152 318 1.58537e+011
+260 316 1.58514e+011
+202 366 1.58443e+011
+349 88 1.58436e+011
+370 351 1.58382e+011
+546 342 1.58183e+011
+35 335 1.5817e+011
+574 363 1.58156e+011
+294 409 1.58049e+011
+471 416 1.5795e+011
+184 412 1.57712e+011
+513 400 1.57665e+011
+375 235 1.57651e+011
+79 150 1.57576e+011
+507 403 1.57449e+011
+525 281 1.5705e+011
+112 310 1.56811e+011
+433 294 1.56716e+011
+157 240 1.56707e+011
+273 413 1.56705e+011
+55 137 1.56705e+011
+377 300 1.56695e+011
+510 246 1.56601e+011
+341 139 1.56524e+011
+246 176 1.56493e+011
+552 265 1.56377e+011
+313 142 1.56358e+011
+229 282 1.56348e+011
+292 114 1.56124e+011
+34 13 1.5607e+011
+337 242 1.56039e+011
+152 449 1.56031e+011
+61 453 1.55962e+011
+306 94 1.55899e+011
+198 143 1.55892e+011
+173 143 1.55664e+011
+342 187 1.55642e+011
+313 464 1.55547e+011
+473 102 1.55436e+011
+423 106 1.55305e+011
+121 53 1.55283e+011
+347 32 1.55236e+011
+57 137 1.55024e+011
+120 90 1.54942e+011
+125 151 1.54897e+011
+165 303 1.54769e+011
+489 51 1.54726e+011
+24 272 1.54693e+011
+528 118 1.54653e+011
+317 403 1.54627e+011
+67 312 1.54496e+011
+520 99 1.54441e+011
+352 365 1.54302e+011
+468 224 1.54247e+011
+247 405 1.54231e+011
+307 108 1.5419e+011
+285 145 1.54033e+011
+589 102 1.53965e+011
+482 271 1.5375e+011
+377 298 1.53611e+011
+70 199 1.53604e+011
+333 433 1.53568e+011
+170 219 1.53495e+011
+196 431 1.53346e+011
+344 327 1.53309e+011
+293 141 1.53288e+011
+176 326 1.53212e+011
+187 384 1.53115e+011
+294 92 1.53098e+011
+157 194 1.52977e+011
+127 407 1.52919e+011
+335 435 1.52908e+011
+161 258 1.52848e+011
+149 313 1.52774e+011
+414 105 1.52727e+011
+238 294 1.52363e+011
+11 163 1.52306e+011
+196 26 1.52278e+011
+39 275 1.52212e+011
+182 102 1.52191e+011
+505 404 1.5209e+011
+226 282 1.51961e+011
+619 183 1.51922e+011
+86 242 1.51905e+011
+102 337 1.51862e+011
+91 345 1.51796e+011
+602 366 1.51769e+011
+508 394 1.51726e+011
+206 415 1.51716e+011
+261 321 1.51695e+011
+475 239 1.51633e+011
+455 58 1.51602e+011
+67 211 1.51533e+011
+105 337 1.51445e+011
+400 96 1.51426e+011
+576 130 1.51386e+011
+402 96 1.51384e+011
+475 298 1.51338e+011
+522 291 1.51302e+011
+571 237 1.50771e+011
+466 377 1.50683e+011
+181 379 1.50643e+011
+196 79 1.50475e+011
+78 155 1.50456e+011
+39 253 1.50361e+011
+20 255 1.50277e+011
+201 370 1.50233e+011
+522 322 1.50188e+011
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_5_3.txt b/test_data/harriscorners/hc_msc_0.00_0.15_5_3.txt
new file mode 100644
index 0000000..c5726b9
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_5_3.txt
@@ -0,0 +1,1671 @@
+1670
+245 95 2.98677e+015
+363 401 2.95346e+015
+499 1 2.82848e+015
+449 298 2.63708e+015
+274 366 2.48547e+015
+122 44 2.14697e+015
+282 115 2.0924e+015
+507 122 2.08827e+015
+421 182 1.98758e+015
+251 13 1.89287e+015
+387 178 1.88994e+015
+553 40 1.86006e+015
+426 320 1.79558e+015
+446 396 1.68018e+015
+213 72 1.67913e+015
+240 90 1.66558e+015
+344 10 1.6497e+015
+65 343 1.5712e+015
+131 36 1.56612e+015
+144 309 1.54037e+015
+435 68 1.46886e+015
+480 298 1.46864e+015
+200 16 1.45036e+015
+456 281 1.42175e+015
+223 38 1.4029e+015
+215 73 1.35439e+015
+348 179 1.33634e+015
+34 137 1.31714e+015
+256 386 1.29963e+015
+321 313 1.29722e+015
+183 401 1.29677e+015
+135 215 1.29e+015
+303 183 1.28845e+015
+45 27 1.25028e+015
+125 199 1.23078e+015
+299 53 1.23077e+015
+59 219 1.22992e+015
+412 256 1.21004e+015
+125 255 1.20506e+015
+448 262 1.19894e+015
+246 143 1.19774e+015
+28 8 1.18439e+015
+64 234 1.17161e+015
+110 238 1.16259e+015
+312 149 1.15598e+015
+465 394 1.15394e+015
+390 58 1.13224e+015
+261 297 1.10977e+015
+423 181 1.0956e+015
+385 221 1.09017e+015
+308 372 1.08611e+015
+124 362 1.08176e+015
+102 4 1.05702e+015
+224 419 1.05474e+015
+418 440 1.04116e+015
+184 35 1.03772e+015
+239 349 1.03002e+015
+449 219 1.02949e+015
+382 8 1.02203e+015
+392 144 1.01834e+015
+271 166 1.01105e+015
+510 173 1.01086e+015
+329 127 1.00966e+015
+355 220 9.99554e+014
+37 62 9.91071e+014
+221 16 9.90682e+014
+387 10 9.8661e+014
+59 185 9.8322e+014
+262 165 9.82478e+014
+130 2 9.77001e+014
+66 320 9.70812e+014
+137 208 9.67308e+014
+411 355 9.66312e+014
+432 146 9.61176e+014
+417 7 9.5779e+014
+239 18 9.43356e+014
+177 107 9.31974e+014
+243 72 9.2274e+014
+59 183 9.16097e+014
+282 403 9.15323e+014
+360 336 9.12485e+014
+192 331 9.10641e+014
+300 265 9.00171e+014
+404 120 8.9862e+014
+555 40 8.91696e+014
+462 279 8.83525e+014
+158 143 8.67029e+014
+514 76 8.56354e+014
+545 168 8.56139e+014
+425 377 8.52581e+014
+92 198 8.44485e+014
+264 298 8.37092e+014
+77 257 8.29217e+014
+101 58 8.26447e+014
+263 441 8.19425e+014
+71 148 8.1911e+014
+294 15 8.11008e+014
+35 146 8.09336e+014
+512 168 8.06277e+014
+545 217 8.049e+014
+113 213 8.0471e+014
+543 364 8.04369e+014
+542 18 8.0299e+014
+177 260 8.00515e+014
+402 122 7.95476e+014
+271 71 7.90522e+014
+277 352 7.84372e+014
+209 223 7.80318e+014
+419 180 7.77906e+014
+253 138 7.74947e+014
+140 184 7.71869e+014
+355 320 7.64998e+014
+291 16 7.58361e+014
+372 163 7.57751e+014
+126 76 7.57558e+014
+455 83 7.56051e+014
+41 297 7.55281e+014
+550 379 7.39932e+014
+176 93 7.3759e+014
+498 82 7.37463e+014
+132 26 7.3726e+014
+229 292 7.36899e+014
+111 393 7.3385e+014
+236 163 7.30714e+014
+483 339 7.29307e+014
+203 310 7.27816e+014
+513 340 7.26349e+014
+225 221 7.24263e+014
+542 210 7.16842e+014
+207 225 7.15899e+014
+114 344 7.11431e+014
+164 242 7.07056e+014
+526 223 7.06896e+014
+482 365 7.04297e+014
+37 144 7.03109e+014
+563 478 7.01085e+014
+479 19 7.00196e+014
+46 219 6.96858e+014
+434 398 6.93924e+014
+522 263 6.93909e+014
+421 334 6.89832e+014
+359 294 6.89776e+014
+359 260 6.89285e+014
+525 345 6.82711e+014
+105 62 6.8149e+014
+365 200 6.81312e+014
+72 24 6.77686e+014
+58 74 6.77663e+014
+304 216 6.77292e+014
+296 420 6.72335e+014
+510 455 6.70867e+014
+474 262 6.68519e+014
+342 337 6.68276e+014
+317 385 6.67559e+014
+12 101 6.6265e+014
+110 96 6.59552e+014
+484 59 6.5865e+014
+138 110 6.5559e+014
+387 295 6.55261e+014
+326 426 6.53224e+014
+406 375 6.52652e+014
+173 312 6.52592e+014
+453 340 6.52104e+014
+281 51 6.48941e+014
+544 171 6.47255e+014
+395 260 6.45429e+014
+100 221 6.43995e+014
+478 12 6.41181e+014
+280 112 6.41064e+014
+151 307 6.37267e+014
+224 183 6.3501e+014
+301 164 6.34268e+014
+249 363 6.31291e+014
+251 140 6.31052e+014
+361 131 6.29618e+014
+173 94 6.27141e+014
+87 78 6.24912e+014
+352 147 6.22906e+014
+97 447 6.21691e+014
+270 278 6.21544e+014
+451 376 6.19031e+014
+449 403 6.16102e+014
+48 100 6.13825e+014
+91 292 6.11823e+014
+72 97 6.1155e+014
+162 213 6.09198e+014
+356 267 6.09176e+014
+264 201 6.08449e+014
+272 130 6.07205e+014
+285 297 6.06993e+014
+528 98 6.05675e+014
+345 109 6.05353e+014
+181 111 6.03976e+014
+221 180 5.99324e+014
+338 391 5.97616e+014
+139 173 5.9523e+014
+522 122 5.9511e+014
+135 202 5.94896e+014
+236 92 5.92489e+014
+324 341 5.91428e+014
+233 162 5.90822e+014
+46 147 5.90571e+014
+400 261 5.89184e+014
+345 241 5.88995e+014
+327 127 5.88967e+014
+5 66 5.86816e+014
+283 71 5.86418e+014
+379 69 5.85552e+014
+230 266 5.85354e+014
+232 200 5.80922e+014
+512 98 5.79507e+014
+470 239 5.7904e+014
+22 60 5.77914e+014
+503 361 5.76896e+014
+338 473 5.76503e+014
+212 182 5.74983e+014
+84 78 5.72108e+014
+387 243 5.71906e+014
+191 359 5.71853e+014
+140 204 5.70204e+014
+167 286 5.6958e+014
+244 165 5.66567e+014
+408 352 5.63968e+014
+74 6 5.63963e+014
+36 175 5.63243e+014
+236 20 5.6271e+014
+339 164 5.62587e+014
+348 241 5.61737e+014
+530 184 5.55189e+014
+539 40 5.52719e+014
+526 99 5.52082e+014
+299 70 5.51551e+014
+64 371 5.49326e+014
+514 223 5.48835e+014
+422 44 5.44537e+014
+97 79 5.44233e+014
+526 101 5.43108e+014
+170 18 5.42835e+014
+100 78 5.42397e+014
+32 218 5.42295e+014
+382 411 5.41588e+014
+449 178 5.40841e+014
+246 294 5.40159e+014
+484 179 5.40153e+014
+221 182 5.38849e+014
+524 20 5.37929e+014
+2 46 5.37761e+014
+248 404 5.37085e+014
+562 148 5.36617e+014
+511 128 5.36562e+014
+44 81 5.31332e+014
+18 342 5.28234e+014
+270 62 5.26702e+014
+327 342 5.26647e+014
+242 203 5.26491e+014
+78 196 5.23381e+014
+508 18 5.23292e+014
+55 31 5.22784e+014
+560 229 5.21928e+014
+512 125 5.20024e+014
+478 16 5.19549e+014
+468 238 5.18189e+014
+472 63 5.1635e+014
+208 54 5.13498e+014
+277 370 5.1264e+014
+343 7 5.11854e+014
+430 1 5.10335e+014
+175 311 5.10201e+014
+577 15 5.07958e+014
+275 181 5.04005e+014
+333 89 5.02864e+014
+481 179 5.02383e+014
+123 272 5.01717e+014
+329 9 5.01102e+014
+273 297 5.00673e+014
+137 98 4.98287e+014
+325 88 4.97777e+014
+114 3 4.9736e+014
+48 97 4.96853e+014
+479 179 4.96514e+014
+513 220 4.96492e+014
+328 66 4.96241e+014
+57 364 4.9243e+014
+183 19 4.9182e+014
+243 189 4.91742e+014
+136 128 4.91585e+014
+432 83 4.90741e+014
+365 251 4.88777e+014
+198 130 4.87388e+014
+423 178 4.85473e+014
+169 57 4.85231e+014
+545 57 4.82781e+014
+544 210 4.82176e+014
+371 82 4.81556e+014
+421 6 4.80958e+014
+82 28 4.80883e+014
+264 445 4.80865e+014
+342 464 4.79924e+014
+507 164 4.79639e+014
+163 207 4.78438e+014
+146 160 4.78169e+014
+391 47 4.78044e+014
+389 139 4.77979e+014
+441 98 4.77747e+014
+388 221 4.77087e+014
+242 100 4.77062e+014
+306 192 4.7693e+014
+538 95 4.76158e+014
+54 6 4.75792e+014
+358 10 4.75526e+014
+158 1 4.73447e+014
+344 197 4.7273e+014
+274 281 4.72133e+014
+416 23 4.71949e+014
+62 60 4.70677e+014
+144 187 4.69558e+014
+575 126 4.69281e+014
+452 205 4.69133e+014
+422 398 4.69109e+014
+276 221 4.63912e+014
+111 241 4.63879e+014
+187 100 4.61868e+014
+277 181 4.61613e+014
+131 148 4.61179e+014
+567 43 4.61075e+014
+448 138 4.60244e+014
+370 107 4.59878e+014
+302 205 4.58323e+014
+259 71 4.57786e+014
+281 49 4.56384e+014
+88 148 4.56143e+014
+542 130 4.54879e+014
+401 184 4.54324e+014
+294 26 4.54285e+014
+196 82 4.53132e+014
+512 295 4.53023e+014
+220 178 4.51169e+014
+36 268 4.50911e+014
+342 123 4.50455e+014
+292 311 4.50062e+014
+366 7 4.49027e+014
+226 180 4.49013e+014
+286 166 4.48958e+014
+82 135 4.48941e+014
+510 18 4.48355e+014
+358 168 4.48264e+014
+220 100 4.47588e+014
+380 25 4.47416e+014
+75 235 4.47049e+014
+216 279 4.45367e+014
+445 453 4.45286e+014
+403 6 4.44956e+014
+174 57 4.44338e+014
+357 335 4.43959e+014
+185 18 4.43846e+014
+306 440 4.42981e+014
+561 320 4.42195e+014
+378 353 4.41615e+014
+208 451 4.41454e+014
+35 200 4.41257e+014
+217 126 4.40551e+014
+528 104 4.39037e+014
+38 172 4.38015e+014
+367 144 4.38003e+014
+77 8 4.37971e+014
+579 17 4.36454e+014
+262 391 4.35894e+014
+179 113 4.35691e+014
+223 15 4.35561e+014
+169 55 4.35108e+014
+175 239 4.34509e+014
+347 392 4.3417e+014
+524 263 4.34165e+014
+115 44 4.34152e+014
+371 392 4.3143e+014
+37 288 4.31075e+014
+313 85 4.29024e+014
+386 292 4.28108e+014
+492 140 4.27592e+014
+351 320 4.27184e+014
+529 102 4.26799e+014
+254 422 4.26372e+014
+569 39 4.25749e+014
+210 154 4.25202e+014
+147 21 4.25079e+014
+540 99 4.23957e+014
+137 138 4.23463e+014
+300 177 4.22975e+014
+68 27 4.22733e+014
+167 325 4.21387e+014
+47 10 4.20512e+014
+6 9 4.20309e+014
+29 236 4.19369e+014
+482 327 4.18708e+014
+49 159 4.1814e+014
+239 202 4.18074e+014
+533 183 4.17907e+014
+334 435 4.17718e+014
+169 198 4.17637e+014
+374 241 4.17599e+014
+55 28 4.1726e+014
+172 449 4.17173e+014
+529 24 4.17137e+014
+336 391 4.16757e+014
+82 78 4.16331e+014
+108 324 4.1565e+014
+115 77 4.15197e+014
+223 113 4.14784e+014
+259 221 4.14294e+014
+229 184 4.14166e+014
+367 247 4.13737e+014
+181 394 4.12385e+014
+66 213 4.1234e+014
+6 45 4.12161e+014
+44 10 4.10712e+014
+206 159 4.08511e+014
+81 3 4.08256e+014
+236 221 4.07578e+014
+481 82 4.0695e+014
+53 43 4.06064e+014
+572 142 4.05858e+014
+360 217 4.0473e+014
+537 458 4.04522e+014
+241 59 4.03423e+014
+531 22 4.02866e+014
+37 296 4.02812e+014
+353 127 4.02575e+014
+506 203 4.02217e+014
+480 403 4.00442e+014
+37 138 3.98938e+014
+576 178 3.98574e+014
+474 23 3.97958e+014
+307 448 3.9676e+014
+48 26 3.96446e+014
+520 183 3.96395e+014
+270 60 3.961e+014
+320 224 3.95174e+014
+95 446 3.95035e+014
+365 259 3.94712e+014
+49 152 3.94592e+014
+510 102 3.94485e+014
+38 219 3.93824e+014
+192 219 3.93577e+014
+211 33 3.92271e+014
+253 74 3.9218e+014
+544 4 3.91254e+014
+207 436 3.90741e+014
+312 7 3.90734e+014
+363 199 3.90546e+014
+112 4 3.89894e+014
+546 365 3.89697e+014
+509 361 3.89668e+014
+364 255 3.89249e+014
+396 161 3.88221e+014
+124 261 3.86911e+014
+561 227 3.86235e+014
+289 212 3.85853e+014
+214 59 3.85463e+014
+130 239 3.84409e+014
+39 143 3.84386e+014
+274 76 3.83379e+014
+141 394 3.82827e+014
+391 61 3.82797e+014
+351 323 3.827e+014
+406 142 3.82213e+014
+507 60 3.80919e+014
+359 166 3.80913e+014
+68 149 3.8065e+014
+282 221 3.80464e+014
+252 422 3.80022e+014
+378 339 3.79712e+014
+216 176 3.79561e+014
+103 392 3.79126e+014
+234 19 3.78989e+014
+310 33 3.78328e+014
+412 24 3.77741e+014
+110 265 3.77639e+014
+105 4 3.77218e+014
+195 16 3.76547e+014
+413 21 3.75355e+014
+458 265 3.75005e+014
+278 145 3.74195e+014
+597 272 3.73915e+014
+358 143 3.73081e+014
+259 236 3.72932e+014
+328 142 3.72582e+014
+190 146 3.72517e+014
+161 144 3.72284e+014
+357 125 3.72094e+014
+241 68 3.72011e+014
+248 218 3.71895e+014
+104 359 3.70135e+014
+572 328 3.69959e+014
+112 134 3.69318e+014
+510 165 3.69137e+014
+438 68 3.69135e+014
+142 183 3.68996e+014
+358 127 3.68947e+014
+268 288 3.6872e+014
+526 104 3.68473e+014
+274 216 3.68104e+014
+463 198 3.67879e+014
+267 297 3.6786e+014
+270 66 3.6707e+014
+117 76 3.65896e+014
+528 188 3.65504e+014
+398 357 3.65362e+014
+384 162 3.65344e+014
+444 23 3.65065e+014
+398 169 3.64829e+014
+42 24 3.64553e+014
+42 62 3.64481e+014
+42 339 3.64388e+014
+32 100 3.64297e+014
+159 112 3.62717e+014
+412 64 3.61792e+014
+141 2 3.61118e+014
+230 35 3.60729e+014
+85 475 3.59961e+014
+541 13 3.5993e+014
+366 2 3.59747e+014
+497 229 3.59626e+014
+598 364 3.59021e+014
+434 148 3.58772e+014
+188 145 3.58545e+014
+164 359 3.58269e+014
+266 14 3.58145e+014
+248 93 3.57973e+014
+162 216 3.57917e+014
+508 5 3.57494e+014
+324 424 3.56855e+014
+487 182 3.56056e+014
+160 183 3.55809e+014
+281 132 3.55581e+014
+492 182 3.55145e+014
+528 362 3.53883e+014
+113 356 3.53412e+014
+65 252 3.53268e+014
+57 5 3.52653e+014
+543 57 3.52443e+014
+477 182 3.51826e+014
+272 282 3.51448e+014
+275 318 3.51009e+014
+380 8 3.50704e+014
+297 296 3.50646e+014
+498 160 3.50587e+014
+266 53 3.50297e+014
+121 52 3.49534e+014
+22 58 3.49495e+014
+135 238 3.49294e+014
+514 382 3.48957e+014
+183 133 3.48886e+014
+535 243 3.48415e+014
+151 114 3.47909e+014
+325 165 3.46585e+014
+368 337 3.4499e+014
+196 57 3.44359e+014
+568 383 3.43365e+014
+270 241 3.43056e+014
+313 222 3.42865e+014
+388 60 3.42228e+014
+571 448 3.39689e+014
+479 181 3.39639e+014
+419 167 3.39163e+014
+117 96 3.38595e+014
+537 186 3.3856e+014
+292 29 3.38498e+014
+287 33 3.38362e+014
+208 434 3.37893e+014
+298 332 3.37169e+014
+525 381 3.36517e+014
+327 320 3.36389e+014
+5 63 3.36179e+014
+497 79 3.36148e+014
+3 382 3.35989e+014
+191 217 3.35869e+014
+265 31 3.35824e+014
+127 186 3.35582e+014
+516 348 3.3547e+014
+154 114 3.35146e+014
+99 80 3.35007e+014
+540 165 3.34871e+014
+525 60 3.34728e+014
+543 16 3.34663e+014
+502 143 3.34429e+014
+129 309 3.33888e+014
+374 394 3.32185e+014
+287 344 3.31982e+014
+543 132 3.31529e+014
+285 212 3.31372e+014
+413 299 3.31199e+014
+168 242 3.31085e+014
+524 172 3.31005e+014
+467 125 3.3097e+014
+317 148 3.30481e+014
+456 284 3.30352e+014
+535 121 3.30225e+014
+317 107 3.29798e+014
+163 168 3.2963e+014
+274 206 3.28898e+014
+363 182 3.28682e+014
+290 264 3.28043e+014
+282 53 3.2798e+014
+217 54 3.2797e+014
+408 67 3.27958e+014
+479 451 3.2793e+014
+315 146 3.27284e+014
+560 60 3.26826e+014
+282 351 3.26541e+014
+96 125 3.26326e+014
+306 362 3.26062e+014
+544 91 3.2594e+014
+546 182 3.25601e+014
+213 123 3.25446e+014
+361 396 3.25073e+014
+289 137 3.24351e+014
+560 81 3.24106e+014
+64 276 3.24062e+014
+111 40 3.2386e+014
+393 47 3.23702e+014
+187 34 3.23664e+014
+424 318 3.23444e+014
+246 106 3.23182e+014
+220 210 3.22864e+014
+262 217 3.22763e+014
+219 291 3.22347e+014
+412 4 3.21931e+014
+257 35 3.21767e+014
+82 74 3.21319e+014
+45 131 3.20976e+014
+391 52 3.20785e+014
+362 360 3.20784e+014
+184 137 3.20533e+014
+63 218 3.20343e+014
+521 60 3.19479e+014
+267 30 3.19042e+014
+86 214 3.18645e+014
+100 162 3.18637e+014
+408 63 3.1839e+014
+377 7 3.18296e+014
+179 274 3.18295e+014
+425 262 3.18291e+014
+494 456 3.18257e+014
+269 105 3.18197e+014
+559 271 3.16455e+014
+540 140 3.16277e+014
+507 3 3.16178e+014
+141 392 3.16083e+014
+357 282 3.16039e+014
+85 197 3.14744e+014
+371 90 3.14205e+014
+84 59 3.14103e+014
+533 122 3.13708e+014
+479 81 3.13643e+014
+437 303 3.13614e+014
+45 407 3.13596e+014
+293 334 3.13421e+014
+48 256 3.12827e+014
+413 66 3.12763e+014
+572 161 3.12733e+014
+558 19 3.12289e+014
+505 381 3.11931e+014
+274 369 3.11888e+014
+221 114 3.11885e+014
+85 256 3.11585e+014
+115 392 3.11506e+014
+93 254 3.11236e+014
+132 255 3.11075e+014
+172 56 3.10964e+014
+492 456 3.10415e+014
+513 402 3.10346e+014
+344 263 3.10291e+014
+420 81 3.1022e+014
+584 38 3.09983e+014
+96 452 3.09791e+014
+74 186 3.09345e+014
+331 107 3.08614e+014
+474 202 3.08187e+014
+391 324 3.07954e+014
+110 46 3.07744e+014
+181 380 3.07614e+014
+422 48 3.07609e+014
+208 421 3.07596e+014
+105 40 3.07196e+014
+220 150 3.07128e+014
+432 268 3.06947e+014
+396 104 3.06154e+014
+161 256 3.06083e+014
+516 202 3.06018e+014
+54 289 3.05816e+014
+177 18 3.05692e+014
+196 192 3.05618e+014
+55 65 3.0557e+014
+179 103 3.05274e+014
+297 410 3.05068e+014
+51 61 3.04867e+014
+538 97 3.04845e+014
+140 325 3.0482e+014
+173 40 3.0427e+014
+3 155 3.03876e+014
+526 398 3.03336e+014
+418 68 3.03264e+014
+59 76 3.02905e+014
+300 50 3.02724e+014
+33 172 3.02121e+014
+58 253 3.01826e+014
+279 222 3.01767e+014
+271 289 3.01767e+014
+102 236 3.01761e+014
+457 375 3.01485e+014
+175 40 3.0095e+014
+471 122 3.00916e+014
+275 352 3.00424e+014
+218 145 3.00245e+014
+136 21 2.99871e+014
+415 21 2.99762e+014
+272 53 2.99746e+014
+83 404 2.99397e+014
+292 27 2.99216e+014
+251 10 2.98994e+014
+190 276 2.98917e+014
+171 312 2.98876e+014
+91 390 2.98861e+014
+412 162 2.98827e+014
+419 163 2.98564e+014
+453 83 2.98274e+014
+556 182 2.98102e+014
+129 168 2.98087e+014
+433 110 2.97906e+014
+388 282 2.97753e+014
+34 298 2.97228e+014
+475 342 2.97163e+014
+127 166 2.96678e+014
+463 393 2.96374e+014
+59 216 2.96338e+014
+316 336 2.95096e+014
+225 37 2.94823e+014
+320 119 2.94321e+014
+125 40 2.93984e+014
+569 203 2.93881e+014
+243 419 2.93744e+014
+150 38 2.93641e+014
+359 160 2.93417e+014
+490 343 2.93023e+014
+438 339 2.92587e+014
+425 334 2.92223e+014
+403 265 2.92117e+014
+65 363 2.92034e+014
+369 162 2.91481e+014
+245 206 2.91008e+014
+390 19 2.90975e+014
+541 123 2.90743e+014
+445 127 2.9074e+014
+166 20 2.89814e+014
+542 42 2.89778e+014
+148 396 2.89341e+014
+532 340 2.89262e+014
+158 74 2.88662e+014
+496 462 2.88608e+014
+527 39 2.88093e+014
+377 119 2.87571e+014
+406 162 2.87563e+014
+205 202 2.87442e+014
+278 418 2.87429e+014
+495 140 2.87153e+014
+299 175 2.86963e+014
+146 452 2.86935e+014
+432 319 2.86927e+014
+451 263 2.86706e+014
+109 358 2.85896e+014
+436 387 2.85815e+014
+177 96 2.85703e+014
+68 304 2.8555e+014
+487 261 2.85454e+014
+149 231 2.84979e+014
+204 308 2.84568e+014
+5 47 2.84277e+014
+407 81 2.84251e+014
+239 422 2.83973e+014
+512 95 2.83948e+014
+283 206 2.83898e+014
+351 271 2.83572e+014
+549 59 2.83517e+014
+55 294 2.83491e+014
+318 201 2.82441e+014
+487 4 2.82052e+014
+158 138 2.82052e+014
+378 316 2.81714e+014
+279 363 2.80951e+014
+229 347 2.80916e+014
+467 123 2.80794e+014
+128 164 2.80641e+014
+564 16 2.80467e+014
+149 112 2.79945e+014
+44 121 2.79725e+014
+401 182 2.79449e+014
+86 254 2.79388e+014
+528 142 2.79086e+014
+618 181 2.78862e+014
+175 20 2.78164e+014
+271 291 2.77974e+014
+248 315 2.76935e+014
+525 424 2.76928e+014
+89 376 2.76409e+014
+350 145 2.7637e+014
+326 13 2.7569e+014
+280 128 2.75245e+014
+100 199 2.75053e+014
+44 62 2.74732e+014
+290 49 2.74718e+014
+418 300 2.74654e+014
+177 331 2.73882e+014
+500 224 2.73845e+014
+46 90 2.73427e+014
+520 64 2.73146e+014
+273 290 2.73075e+014
+180 392 2.72995e+014
+451 336 2.72892e+014
+382 338 2.72245e+014
+331 333 2.72066e+014
+250 312 2.72051e+014
+235 346 2.71078e+014
+187 263 2.70971e+014
+376 84 2.70927e+014
+342 106 2.70871e+014
+537 392 2.70769e+014
+518 202 2.70254e+014
+424 163 2.69967e+014
+340 13 2.69849e+014
+386 327 2.69309e+014
+412 220 2.69148e+014
+164 277 2.69018e+014
+267 16 2.68564e+014
+265 260 2.68547e+014
+128 238 2.68512e+014
+410 99 2.68113e+014
+364 357 2.6745e+014
+473 211 2.67381e+014
+379 107 2.67256e+014
+59 372 2.66917e+014
+95 78 2.66804e+014
+47 133 2.66594e+014
+117 132 2.66282e+014
+463 161 2.66252e+014
+267 132 2.66245e+014
+205 435 2.65865e+014
+336 427 2.65788e+014
+88 354 2.65666e+014
+30 238 2.64894e+014
+278 367 2.64653e+014
+260 142 2.64541e+014
+132 477 2.64393e+014
+417 450 2.64297e+014
+262 319 2.64202e+014
+12 80 2.64156e+014
+277 137 2.63998e+014
+190 205 2.63677e+014
+439 455 2.63495e+014
+66 233 2.63212e+014
+162 211 2.63161e+014
+199 110 2.62826e+014
+9 76 2.62811e+014
+60 254 2.62659e+014
+186 401 2.62462e+014
+84 310 2.62447e+014
+474 246 2.62262e+014
+13 206 2.61788e+014
+117 428 2.61787e+014
+376 317 2.6135e+014
+56 290 2.61268e+014
+256 405 2.61223e+014
+184 200 2.60978e+014
+214 146 2.60808e+014
+408 182 2.6069e+014
+450 91 2.60451e+014
+144 327 2.60106e+014
+80 134 2.59588e+014
+44 476 2.59551e+014
+117 360 2.59409e+014
+386 167 2.5913e+014
+363 9 2.58782e+014
+324 314 2.58705e+014
+523 39 2.58563e+014
+260 272 2.58188e+014
+232 14 2.58092e+014
+529 32 2.5801e+014
+182 398 2.57166e+014
+450 22 2.56769e+014
+562 17 2.56674e+014
+157 112 2.56553e+014
+192 171 2.56403e+014
+509 128 2.56349e+014
+193 17 2.56231e+014
+571 333 2.56131e+014
+94 6 2.55747e+014
+403 188 2.55404e+014
+447 244 2.55381e+014
+321 10 2.55174e+014
+317 167 2.54994e+014
+523 344 2.54977e+014
+361 10 2.54952e+014
+324 163 2.54759e+014
+395 106 2.5419e+014
+261 329 2.54062e+014
+300 246 2.53997e+014
+38 147 2.53139e+014
+404 13 2.52934e+014
+29 29 2.52816e+014
+323 260 2.52632e+014
+439 24 2.52334e+014
+331 89 2.52093e+014
+392 165 2.51895e+014
+44 98 2.51714e+014
+50 452 2.51175e+014
+141 22 2.51163e+014
+166 96 2.50897e+014
+436 339 2.50773e+014
+272 287 2.50727e+014
+282 135 2.50492e+014
+547 40 2.49647e+014
+18 236 2.48889e+014
+451 101 2.48823e+014
+279 86 2.48784e+014
+357 240 2.4868e+014
+390 420 2.48641e+014
+219 315 2.48443e+014
+500 42 2.48327e+014
+182 201 2.4791e+014
+67 47 2.47594e+014
+418 282 2.47465e+014
+137 56 2.47351e+014
+46 121 2.47351e+014
+249 32 2.4725e+014
+314 75 2.47138e+014
+57 332 2.47025e+014
+447 351 2.4653e+014
+396 319 2.46192e+014
+410 44 2.45913e+014
+279 296 2.45787e+014
+83 101 2.45658e+014
+181 291 2.45511e+014
+535 393 2.45191e+014
+246 14 2.45143e+014
+315 160 2.45001e+014
+38 169 2.44627e+014
+565 161 2.44476e+014
+485 4 2.44465e+014
+135 134 2.4427e+014
+30 135 2.44163e+014
+391 449 2.44067e+014
+53 221 2.43795e+014
+15 219 2.43711e+014
+446 376 2.43686e+014
+222 239 2.43513e+014
+537 140 2.43388e+014
+79 273 2.43202e+014
+88 183 2.43185e+014
+186 109 2.42676e+014
+87 208 2.42632e+014
+211 21 2.4253e+014
+469 140 2.41823e+014
+62 133 2.41638e+014
+271 414 2.41618e+014
+175 115 2.41383e+014
+393 317 2.41211e+014
+259 201 2.40979e+014
+153 222 2.40872e+014
+446 265 2.40626e+014
+404 143 2.40155e+014
+379 121 2.401e+014
+78 81 2.39962e+014
+187 182 2.39831e+014
+525 174 2.39799e+014
+140 98 2.39472e+014
+421 89 2.39424e+014
+246 327 2.39369e+014
+303 180 2.39206e+014
+206 417 2.3916e+014
+538 121 2.38892e+014
+33 140 2.38338e+014
+59 289 2.38278e+014
+166 113 2.37975e+014
+311 298 2.37971e+014
+583 345 2.37858e+014
+302 102 2.37783e+014
+259 370 2.37742e+014
+280 420 2.37298e+014
+544 20 2.37041e+014
+415 164 2.36811e+014
+133 427 2.36537e+014
+70 130 2.35817e+014
+157 95 2.3492e+014
+254 182 2.34252e+014
+516 120 2.33652e+014
+447 145 2.3359e+014
+157 318 2.33402e+014
+63 369 2.33108e+014
+487 205 2.32834e+014
+247 347 2.32592e+014
+433 112 2.32207e+014
+149 399 2.3169e+014
+508 81 2.31689e+014
+104 430 2.31505e+014
+498 67 2.31349e+014
+513 121 2.30897e+014
+177 180 2.30844e+014
+69 418 2.30355e+014
+88 261 2.30209e+014
+282 392 2.3016e+014
+156 1 2.30084e+014
+281 418 2.30084e+014
+465 355 2.29602e+014
+201 313 2.29351e+014
+565 61 2.29229e+014
+489 263 2.28809e+014
+288 397 2.28778e+014
+96 148 2.28341e+014
+412 245 2.28261e+014
+308 8 2.28177e+014
+80 474 2.27988e+014
+261 35 2.27672e+014
+394 158 2.2763e+014
+511 43 2.27144e+014
+272 133 2.2696e+014
+537 103 2.26134e+014
+198 75 2.25931e+014
+380 340 2.25544e+014
+531 103 2.25456e+014
+451 82 2.25244e+014
+500 318 2.25e+014
+386 127 2.23979e+014
+221 84 2.23736e+014
+62 372 2.23665e+014
+92 20 2.23327e+014
+512 262 2.23268e+014
+524 99 2.23143e+014
+511 205 2.23103e+014
+386 63 2.22702e+014
+274 54 2.22701e+014
+420 283 2.22569e+014
+439 149 2.22411e+014
+271 184 2.22302e+014
+213 62 2.22252e+014
+164 18 2.22225e+014
+209 36 2.22139e+014
+203 293 2.22091e+014
+390 54 2.2197e+014
+32 112 2.21908e+014
+239 195 2.2189e+014
+517 16 2.21744e+014
+528 160 2.21105e+014
+9 476 2.21028e+014
+134 132 2.20967e+014
+49 12 2.20341e+014
+288 87 2.20288e+014
+496 119 2.20032e+014
+115 306 2.20001e+014
+411 46 2.19936e+014
+579 78 2.19681e+014
+365 105 2.19554e+014
+502 145 2.19543e+014
+202 347 2.19541e+014
+333 412 2.19522e+014
+234 261 2.19472e+014
+445 7 2.19158e+014
+219 126 2.19037e+014
+512 109 2.19033e+014
+226 130 2.18901e+014
+313 83 2.18517e+014
+473 355 2.18203e+014
+515 184 2.18063e+014
+254 404 2.18004e+014
+166 117 2.17719e+014
+277 140 2.17297e+014
+358 64 2.17297e+014
+39 241 2.17289e+014
+416 86 2.17175e+014
+244 402 2.17153e+014
+164 381 2.17136e+014
+535 141 2.16891e+014
+303 193 2.16848e+014
+347 296 2.16722e+014
+122 446 2.16655e+014
+299 399 2.16388e+014
+159 89 2.16387e+014
+193 111 2.16247e+014
+555 264 2.16172e+014
+180 329 2.16111e+014
+495 476 2.15849e+014
+296 165 2.15174e+014
+91 79 2.1508e+014
+345 352 2.15004e+014
+80 40 2.14924e+014
+383 147 2.14882e+014
+94 219 2.14873e+014
+184 94 2.14851e+014
+212 438 2.14812e+014
+322 29 2.14388e+014
+110 168 2.14208e+014
+366 299 2.13926e+014
+558 245 2.13884e+014
+88 370 2.13826e+014
+100 95 2.13797e+014
+553 383 2.1322e+014
+241 97 2.13163e+014
+144 432 2.13029e+014
+375 341 2.12758e+014
+266 139 2.12633e+014
+475 339 2.12546e+014
+289 395 2.12361e+014
+434 339 2.12293e+014
+218 182 2.12213e+014
+310 259 2.12122e+014
+411 183 2.12042e+014
+415 83 2.12023e+014
+325 92 2.11979e+014
+527 421 2.11848e+014
+188 214 2.11813e+014
+142 307 2.11798e+014
+522 141 2.1168e+014
+313 88 2.11572e+014
+58 28 2.11436e+014
+275 289 2.11256e+014
+436 91 2.1114e+014
+289 167 2.10913e+014
+361 369 2.10821e+014
+251 163 2.10683e+014
+210 395 2.10425e+014
+248 145 2.1013e+014
+517 142 2.0994e+014
+211 136 2.09912e+014
+183 33 2.09906e+014
+430 116 2.09882e+014
+108 183 2.0977e+014
+456 418 2.09668e+014
+220 107 2.09601e+014
+561 273 2.09464e+014
+228 288 2.0866e+014
+268 68 2.085e+014
+42 9 2.08498e+014
+547 162 2.08431e+014
+48 458 2.08016e+014
+218 149 2.07944e+014
+127 218 2.07912e+014
+310 91 2.07849e+014
+536 80 2.07775e+014
+534 92 2.07761e+014
+254 76 2.0765e+014
+269 169 2.07543e+014
+461 220 2.07513e+014
+335 425 2.07279e+014
+234 344 2.07111e+014
+200 293 2.07077e+014
+58 103 2.07068e+014
+361 315 2.07019e+014
+293 120 2.06787e+014
+165 378 2.06781e+014
+297 182 2.0678e+014
+465 281 2.06758e+014
+327 182 2.0629e+014
+554 181 2.06258e+014
+465 198 2.06019e+014
+550 223 2.05911e+014
+433 25 2.05884e+014
+462 396 2.05871e+014
+400 319 2.05647e+014
+339 427 2.05525e+014
+153 57 2.05471e+014
+230 38 2.0536e+014
+433 317 2.05315e+014
+356 107 2.0514e+014
+48 220 2.05123e+014
+510 142 2.05065e+014
+202 7 2.0498e+014
+301 86 2.04969e+014
+76 270 2.04025e+014
+175 2 2.0393e+014
+35 99 2.03818e+014
+472 42 2.03806e+014
+508 84 2.03575e+014
+185 33 2.03237e+014
+526 171 2.02882e+014
+592 107 2.02667e+014
+512 83 2.01938e+014
+285 263 2.01532e+014
+472 421 2.01488e+014
+150 151 2.01453e+014
+565 463 2.01411e+014
+71 409 2.01016e+014
+497 283 2.00952e+014
+516 18 2.00948e+014
+395 23 2.0084e+014
+570 324 2.00778e+014
+247 318 2.00751e+014
+332 295 2.00653e+014
+309 356 2.00146e+014
+452 161 2.00129e+014
+550 183 2.00031e+014
+436 87 1.99831e+014
+479 293 1.99789e+014
+95 374 1.99624e+014
+258 88 1.99528e+014
+31 96 1.99525e+014
+545 43 1.99356e+014
+409 23 1.99184e+014
+189 180 1.98366e+014
+153 216 1.97926e+014
+191 57 1.97866e+014
+484 361 1.97272e+014
+527 80 1.96994e+014
+224 73 1.96956e+014
+109 428 1.96847e+014
+116 344 1.96806e+014
+485 236 1.96803e+014
+67 338 1.96787e+014
+482 331 1.96468e+014
+441 321 1.9641e+014
+133 64 1.96378e+014
+384 243 1.96175e+014
+11 83 1.95983e+014
+33 268 1.95621e+014
+363 253 1.95404e+014
+329 320 1.9508e+014
+180 56 1.94866e+014
+419 362 1.94717e+014
+270 131 1.94675e+014
+408 45 1.94646e+014
+108 136 1.94457e+014
+159 94 1.94411e+014
+119 425 1.94224e+014
+570 142 1.93878e+014
+188 104 1.9383e+014
+352 162 1.93791e+014
+209 203 1.93741e+014
+281 386 1.93727e+014
+221 339 1.93473e+014
+89 151 1.9345e+014
+24 65 1.93315e+014
+235 295 1.93278e+014
+532 397 1.93221e+014
+113 96 1.93184e+014
+135 74 1.93167e+014
+378 63 1.93159e+014
+422 161 1.93153e+014
+70 478 1.93053e+014
+102 42 1.9272e+014
+530 366 1.92715e+014
+527 395 1.9266e+014
+169 359 1.92551e+014
+49 147 1.92526e+014
+58 31 1.92508e+014
+298 274 1.92507e+014
+110 94 1.92438e+014
+187 326 1.92328e+014
+215 426 1.92275e+014
+107 58 1.9227e+014
+35 300 1.92193e+014
+303 50 1.92072e+014
+321 168 1.91878e+014
+172 37 1.91834e+014
+329 255 1.91705e+014
+186 291 1.91593e+014
+273 146 1.9156e+014
+340 220 1.91545e+014
+64 448 1.91524e+014
+160 98 1.91486e+014
+446 261 1.91463e+014
+483 177 1.91403e+014
+75 132 1.91314e+014
+18 319 1.91296e+014
+193 217 1.91095e+014
+479 241 1.90351e+014
+570 183 1.90336e+014
+153 196 1.89988e+014
+164 328 1.89282e+014
+548 45 1.89233e+014
+266 287 1.89066e+014
+95 58 1.88674e+014
+199 328 1.88619e+014
+344 166 1.88607e+014
+559 224 1.88516e+014
+285 53 1.88274e+014
+216 144 1.88233e+014
+463 123 1.88203e+014
+52 153 1.88178e+014
+440 63 1.88165e+014
+245 385 1.88121e+014
+113 205 1.88056e+014
+260 390 1.8799e+014
+377 183 1.8793e+014
+348 299 1.87845e+014
+184 184 1.8782e+014
+52 359 1.87569e+014
+540 263 1.87265e+014
+104 76 1.87209e+014
+449 64 1.87068e+014
+337 60 1.87017e+014
+85 478 1.8701e+014
+25 200 1.86899e+014
+575 98 1.86847e+014
+576 311 1.86811e+014
+194 135 1.86726e+014
+95 477 1.86321e+014
+453 102 1.86318e+014
+523 198 1.86174e+014
+56 373 1.86083e+014
+306 356 1.85979e+014
+11 114 1.85748e+014
+350 338 1.855e+014
+241 165 1.85372e+014
+99 195 1.85271e+014
+419 7 1.85239e+014
+149 149 1.85221e+014
+392 293 1.85219e+014
+446 455 1.85177e+014
+429 224 1.85151e+014
+203 396 1.84788e+014
+503 180 1.84629e+014
+429 88 1.84475e+014
+126 251 1.83977e+014
+214 99 1.83964e+014
+589 350 1.83946e+014
+414 262 1.83764e+014
+330 202 1.83762e+014
+574 39 1.83652e+014
+40 239 1.83462e+014
+118 61 1.83159e+014
+469 417 1.82688e+014
+559 79 1.82508e+014
+161 134 1.81975e+014
+232 274 1.81881e+014
+94 260 1.81846e+014
+132 128 1.81789e+014
+363 129 1.81784e+014
+183 157 1.81743e+014
+416 377 1.81736e+014
+486 377 1.817e+014
+51 292 1.81555e+014
+116 390 1.81534e+014
+69 47 1.81442e+014
+395 48 1.81325e+014
+482 164 1.81322e+014
+545 160 1.80942e+014
+477 221 1.80867e+014
+84 371 1.80856e+014
+549 283 1.80792e+014
+572 121 1.80709e+014
+540 405 1.80541e+014
+492 59 1.8054e+014
+146 98 1.80163e+014
+114 176 1.79916e+014
+127 308 1.79816e+014
+466 102 1.79645e+014
+181 33 1.79616e+014
+375 282 1.79233e+014
+336 183 1.79219e+014
+126 339 1.78734e+014
+525 77 1.78728e+014
+51 63 1.77966e+014
+151 1 1.77927e+014
+328 108 1.77843e+014
+365 86 1.77803e+014
+525 79 1.77646e+014
+152 59 1.7764e+014
+160 219 1.77505e+014
+158 181 1.77454e+014
+302 263 1.77326e+014
+188 200 1.77153e+014
+85 180 1.77011e+014
+344 329 1.76994e+014
+172 203 1.76964e+014
+243 209 1.76869e+014
+317 125 1.76832e+014
+137 324 1.76746e+014
+201 317 1.76647e+014
+469 41 1.76606e+014
+289 89 1.76582e+014
+89 290 1.76428e+014
+543 121 1.76426e+014
+35 66 1.76344e+014
+49 237 1.76088e+014
+168 422 1.76059e+014
+29 220 1.7572e+014
+179 17 1.75532e+014
+464 139 1.75439e+014
+310 173 1.75332e+014
+34 113 1.75276e+014
+524 24 1.75235e+014
+311 334 1.75196e+014
+266 117 1.75098e+014
+144 256 1.74926e+014
+189 107 1.74898e+014
+265 250 1.74892e+014
+523 186 1.7486e+014
+146 15 1.74616e+014
+384 258 1.74359e+014
+484 161 1.74345e+014
+371 87 1.74255e+014
+278 263 1.74201e+014
+319 186 1.74186e+014
+93 112 1.74021e+014
+103 98 1.74005e+014
+361 222 1.73814e+014
+95 20 1.7378e+014
+262 273 1.73721e+014
+375 225 1.73671e+014
+151 400 1.7366e+014
+289 349 1.73627e+014
+554 379 1.73453e+014
+233 71 1.73447e+014
+93 78 1.73155e+014
+579 43 1.73077e+014
+68 96 1.72848e+014
+95 422 1.72378e+014
+191 189 1.72232e+014
+473 119 1.71851e+014
+595 19 1.7179e+014
+215 149 1.71732e+014
+129 217 1.71616e+014
+93 95 1.71579e+014
+23 331 1.71553e+014
+33 65 1.71523e+014
+180 94 1.71495e+014
+94 217 1.71327e+014
+361 450 1.71291e+014
+96 455 1.71269e+014
+408 47 1.71219e+014
+226 14 1.71185e+014
+312 77 1.71181e+014
+449 445 1.71139e+014
+161 32 1.71085e+014
+243 205 1.71052e+014
+336 317 1.70993e+014
+77 273 1.70879e+014
+180 106 1.70712e+014
+270 146 1.7064e+014
+16 215 1.70596e+014
+51 151 1.70392e+014
+574 333 1.70203e+014
+385 245 1.70101e+014
+184 109 1.70005e+014
+349 278 1.69932e+014
+270 56 1.69751e+014
+449 165 1.69712e+014
+188 207 1.69629e+014
+254 10 1.69608e+014
+200 98 1.69514e+014
+375 391 1.69497e+014
+392 260 1.69447e+014
+572 384 1.69326e+014
+455 404 1.69182e+014
+179 164 1.69156e+014
+331 219 1.69108e+014
+165 218 1.68996e+014
+504 260 1.68828e+014
+144 376 1.68782e+014
+265 72 1.68716e+014
+487 266 1.68306e+014
+344 164 1.68265e+014
+392 222 1.68168e+014
+283 200 1.68165e+014
+556 244 1.68127e+014
+319 337 1.68126e+014
+287 263 1.68119e+014
+433 63 1.68063e+014
+573 139 1.67971e+014
+164 312 1.67962e+014
+313 70 1.67894e+014
+283 79 1.67758e+014
+143 179 1.67685e+014
+205 162 1.6768e+014
+202 219 1.67485e+014
+572 405 1.67413e+014
+428 118 1.67396e+014
+510 366 1.67178e+014
+111 144 1.67157e+014
+388 434 1.67157e+014
+500 461 1.67058e+014
+227 258 1.66985e+014
+364 301 1.66973e+014
+151 236 1.66875e+014
+590 162 1.66851e+014
+44 337 1.66797e+014
+368 96 1.66645e+014
+488 43 1.66546e+014
+254 193 1.66439e+014
+124 82 1.66255e+014
+355 11 1.66138e+014
+497 224 1.66096e+014
+413 99 1.66077e+014
+503 161 1.65967e+014
+363 407 1.65838e+014
+539 220 1.65834e+014
+84 237 1.65774e+014
+198 168 1.657e+014
+4 266 1.65633e+014
+95 450 1.65615e+014
+143 141 1.65388e+014
+578 123 1.65354e+014
+161 430 1.6527e+014
+513 93 1.6508e+014
+114 389 1.64894e+014
+129 127 1.64527e+014
+484 153 1.64313e+014
+216 97 1.64131e+014
+533 161 1.6412e+014
+533 346 1.64029e+014
+517 182 1.64023e+014
+448 62 1.63966e+014
+539 126 1.63867e+014
+250 192 1.63661e+014
+381 180 1.63608e+014
+107 74 1.63507e+014
+119 122 1.63398e+014
+572 451 1.63274e+014
+535 19 1.63194e+014
+224 295 1.63188e+014
+480 171 1.63119e+014
+142 239 1.6311e+014
+129 190 1.63077e+014
+198 148 1.62975e+014
+202 392 1.62935e+014
+157 93 1.62903e+014
+38 308 1.62844e+014
+522 425 1.62754e+014
+92 59 1.6262e+014
+335 445 1.62535e+014
+424 337 1.62522e+014
+3 166 1.62292e+014
+223 214 1.62178e+014
+450 117 1.62147e+014
+148 131 1.62107e+014
+235 33 1.62094e+014
+168 308 1.62086e+014
+286 209 1.6203e+014
+544 442 1.61922e+014
+400 104 1.61891e+014
+466 127 1.61674e+014
+62 204 1.61585e+014
+2 286 1.61536e+014
+309 183 1.61513e+014
+135 467 1.61467e+014
+266 403 1.61457e+014
+112 262 1.61343e+014
+421 314 1.61326e+014
+377 461 1.61213e+014
+172 166 1.61188e+014
+466 40 1.61186e+014
+342 296 1.60961e+014
+344 340 1.6093e+014
+248 262 1.60921e+014
+132 303 1.60855e+014
+177 200 1.60805e+014
+158 237 1.60636e+014
+56 358 1.60625e+014
+31 269 1.60606e+014
+501 103 1.605e+014
+101 258 1.60436e+014
+127 328 1.59977e+014
+60 203 1.59977e+014
+260 231 1.59936e+014
+76 476 1.59843e+014
+493 102 1.59766e+014
+48 156 1.59675e+014
+320 335 1.59531e+014
+409 473 1.59461e+014
+247 258 1.593e+014
+439 241 1.5923e+014
+281 35 1.59163e+014
+277 329 1.58985e+014
+163 73 1.58643e+014
+219 53 1.5863e+014
+211 95 1.58526e+014
+178 367 1.58442e+014
+201 74 1.58296e+014
+117 184 1.58226e+014
+553 203 1.58184e+014
+359 53 1.58055e+014
+268 53 1.5787e+014
+562 144 1.57853e+014
+303 157 1.57771e+014
+261 368 1.57736e+014
+274 218 1.57625e+014
+55 172 1.57438e+014
+290 182 1.57431e+014
+481 182 1.57304e+014
+177 380 1.57275e+014
+562 434 1.5714e+014
+171 112 1.56937e+014
+300 183 1.56899e+014
+356 13 1.5685e+014
+244 292 1.5677e+014
+577 51 1.56746e+014
+537 243 1.56377e+014
+379 183 1.56372e+014
+454 116 1.56316e+014
+392 353 1.56277e+014
+290 248 1.56162e+014
+512 288 1.55992e+014
+39 355 1.5591e+014
+486 45 1.55894e+014
+317 224 1.55822e+014
+296 138 1.55726e+014
+471 268 1.55494e+014
+438 239 1.55147e+014
+357 341 1.55041e+014
+390 296 1.55038e+014
+279 427 1.55022e+014
+293 269 1.54916e+014
+261 455 1.54828e+014
+463 23 1.54605e+014
+451 196 1.54306e+014
+334 143 1.543e+014
+218 177 1.54142e+014
+411 418 1.54097e+014
+251 184 1.54041e+014
+329 322 1.5392e+014
+467 23 1.53686e+014
+106 98 1.53524e+014
+576 164 1.53474e+014
+245 101 1.53462e+014
+318 460 1.53439e+014
+261 287 1.53353e+014
+175 417 1.53231e+014
+327 90 1.53038e+014
+22 220 1.52922e+014
+106 37 1.52861e+014
+61 370 1.52733e+014
+432 122 1.52692e+014
+181 138 1.52645e+014
+393 217 1.5255e+014
+274 197 1.52469e+014
+122 216 1.52389e+014
+97 197 1.52378e+014
+70 390 1.52237e+014
+392 167 1.5223e+014
+502 2 1.51926e+014
+3 435 1.51919e+014
+209 173 1.5186e+014
+71 261 1.51806e+014
+109 101 1.51689e+014
+42 305 1.51587e+014
+29 12 1.51563e+014
+222 430 1.51561e+014
+111 325 1.51558e+014
+475 269 1.51444e+014
+44 23 1.51428e+014
+277 165 1.5142e+014
+401 169 1.51414e+014
+124 252 1.51248e+014
+414 145 1.51017e+014
+449 82 1.5097e+014
+249 85 1.50938e+014
+246 37 1.50771e+014
+25 6 1.50438e+014
+578 162 1.50342e+014
+371 160 1.50294e+014
+433 278 1.50263e+014
+103 293 1.50253e+014
+95 94 1.50121e+014
+155 446 1.49986e+014
+238 190 1.49938e+014
+148 2 1.49805e+014
+329 212 1.49791e+014
+397 95 1.49749e+014
+257 132 1.49598e+014
+512 117 1.49594e+014
+208 57 1.49566e+014
+333 281 1.49502e+014
+103 105 1.49357e+014
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_5_5.txt b/test_data/harriscorners/hc_msc_0.00_0.15_5_5.txt
new file mode 100644
index 0000000..8d61b5e
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_5_5.txt
@@ -0,0 +1,1586 @@
+1585
+273 366 1.41455e+016
+246 94 1.25357e+016
+237 20 1.207e+016
+77 257 1.08258e+016
+261 297 1.0637e+016
+122 43 1.04572e+016
+543 365 1.03719e+016
+362 401 1.0133e+016
+423 178 1.00259e+016
+427 320 9.7695e+015
+281 113 9.47644e+015
+465 393 9.28011e+015
+448 297 9.27192e+015
+199 18 9.20115e+015
+65 343 8.92524e+015
+447 397 8.66244e+015
+507 122 8.65586e+015
+344 9 8.58562e+015
+423 180 8.52764e+015
+131 36 8.41797e+015
+425 321 8.39959e+015
+300 52 8.28395e+015
+27 9 8.25503e+015
+552 40 8.23189e+015
+30 8 8.22015e+015
+37 62 8.02744e+015
+420 181 7.89487e+015
+387 178 7.64888e+015
+59 218 7.52096e+015
+510 124 7.50884e+015
+360 295 7.48827e+015
+81 4 7.45358e+015
+122 45 7.3828e+015
+33 138 7.33314e+015
+82 29 7.28623e+015
+509 122 7.24272e+015
+35 137 7.23218e+015
+131 26 7.22382e+015
+320 225 7.19594e+015
+294 15 7.12376e+015
+239 91 7.10473e+015
+257 385 7.06823e+015
+134 214 6.9861e+015
+36 145 6.97259e+015
+303 182 6.96362e+015
+125 364 6.83648e+015
+456 280 6.7672e+015
+33 99 6.74504e+015
+388 10 6.73787e+015
+484 338 6.71487e+015
+195 58 6.60689e+015
+214 73 6.60414e+015
+435 67 6.54987e+015
+84 78 6.44761e+015
+124 254 6.37078e+015
+128 1 6.34468e+015
+390 58 6.31354e+015
+242 71 6.31088e+015
+251 12 6.22896e+015
+225 420 6.1763e+015
+544 168 6.17368e+015
+263 441 6.16764e+015
+512 341 6.13029e+015
+343 338 6.1205e+015
+448 262 6.09661e+015
+529 24 5.95264e+015
+452 339 5.88751e+015
+124 198 5.8845e+015
+101 222 5.85967e+015
+127 165 5.84557e+015
+412 256 5.82457e+015
+222 39 5.7729e+015
+390 60 5.58222e+015
+404 121 5.44631e+015
+55 29 5.42311e+015
+131 1 5.41236e+015
+253 139 5.35422e+015
+78 2 5.35214e+015
+138 110 5.30734e+015
+153 223 5.27407e+015
+329 128 5.25429e+015
+510 173 5.24113e+015
+144 310 5.22575e+015
+418 440 5.22493e+015
+183 400 5.19184e+015
+64 236 5.16844e+015
+426 119 5.14027e+015
+301 165 5.08471e+015
+483 179 5.07424e+015
+360 335 5.03891e+015
+543 15 5.01004e+015
+92 198 5.00393e+015
+177 106 4.97756e+015
+484 59 4.93854e+015
+57 5 4.93309e+015
+48 26 4.91029e+015
+123 185 4.90845e+015
+360 337 4.89709e+015
+511 167 4.86046e+015
+261 222 4.85048e+015
+359 260 4.71142e+015
+243 202 4.69399e+015
+545 58 4.63852e+015
+142 324 4.59492e+015
+311 150 4.56742e+015
+225 182 4.56466e+015
+245 143 4.56201e+015
+509 455 4.52485e+015
+252 423 4.51475e+015
+302 215 4.50609e+015
+181 111 4.50604e+015
+533 184 4.49794e+015
+392 144 4.49572e+015
+207 450 4.48665e+015
+137 207 4.47924e+015
+371 162 4.4761e+015
+404 119 4.44918e+015
+115 44 4.44304e+015
+480 179 4.38945e+015
+163 277 4.38014e+015
+545 41 4.37827e+015
+109 240 4.37048e+015
+351 321 4.3525e+015
+210 435 4.34555e+015
+308 372 4.34127e+015
+364 251 4.33602e+015
+283 72 4.33362e+015
+184 36 4.3333e+015
+151 307 4.31436e+015
+361 131 4.31417e+015
+459 279 4.30829e+015
+542 210 4.30168e+015
+138 204 4.25743e+015
+433 147 4.25194e+015
+60 183 4.24068e+015
+348 179 4.17456e+015
+431 147 4.16071e+015
+235 346 4.13791e+015
+498 159 4.13178e+015
+475 261 4.1198e+015
+382 6 4.06625e+015
+40 217 4.05965e+015
+136 203 4.05517e+015
+527 99 4.05439e+015
+216 279 4.0417e+015
+41 63 4.03873e+015
+113 392 4.00162e+015
+221 180 3.99882e+015
+239 202 3.97458e+015
+418 8 3.96688e+015
+207 224 3.94376e+015
+214 57 3.94342e+015
+261 165 3.94238e+015
+358 334 3.91523e+015
+78 80 3.91082e+015
+71 148 3.90499e+015
+100 78 3.90227e+015
+106 39 3.87786e+015
+363 7 3.87615e+015
+244 165 3.87294e+015
+48 99 3.86844e+015
+276 352 3.86512e+015
+578 16 3.86369e+015
+86 255 3.86036e+015
+556 39 3.85386e+015
+175 94 3.81964e+015
+357 220 3.81816e+015
+36 176 3.81792e+015
+62 60 3.81355e+015
+283 403 3.80254e+015
+386 220 3.80122e+015
+528 104 3.77764e+015
+163 213 3.76824e+015
+4 65 3.74284e+015
+453 204 3.7131e+015
+313 84 3.70831e+015
+325 164 3.68528e+015
+354 321 3.67503e+015
+37 218 3.67137e+015
+522 264 3.66947e+015
+434 398 3.63598e+015
+530 185 3.63153e+015
+321 313 3.63071e+015
+449 219 3.62758e+015
+82 135 3.61882e+015
+121 185 3.61707e+015
+169 56 3.61041e+015
+177 259 3.6088e+015
+300 265 3.60148e+015
+266 296 3.59964e+015
+324 341 3.58836e+015
+386 243 3.58815e+015
+529 183 3.55584e+015
+511 220 3.53189e+015
+55 289 3.53043e+015
+480 299 3.52843e+015
+327 141 3.51267e+015
+10 102 3.49457e+015
+49 151 3.48481e+015
+395 261 3.4631e+015
+92 292 3.45667e+015
+211 438 3.45646e+015
+230 36 3.45067e+015
+293 26 3.45014e+015
+123 272 3.44755e+015
+390 297 3.44561e+015
+228 185 3.42879e+015
+309 7 3.40629e+015
+325 88 3.38194e+015
+541 123 3.37492e+015
+324 314 3.36918e+015
+513 76 3.34282e+015
+425 377 3.33878e+015
+174 40 3.3263e+015
+515 347 3.31927e+015
+421 335 3.3186e+015
+358 10 3.31677e+015
+470 238 3.30409e+015
+271 290 3.29742e+015
+104 4 3.29285e+015
+47 11 3.29179e+015
+54 66 3.28852e+015
+511 128 3.27845e+015
+508 19 3.27638e+015
+361 251 3.2738e+015
+223 16 3.27204e+015
+138 172 3.26173e+015
+140 394 3.25931e+015
+113 345 3.25388e+015
+211 185 3.21698e+015
+384 221 3.20543e+015
+326 427 3.18638e+015
+102 360 3.18136e+015
+408 183 3.17683e+015
+234 162 3.17658e+015
+169 197 3.17292e+015
+272 281 3.17118e+015
+265 31 3.15656e+015
+167 326 3.15355e+015
+212 59 3.15085e+015
+527 361 3.14767e+015
+163 74 3.13742e+015
+165 241 3.11902e+015
+88 148 3.10726e+015
+110 95 3.08418e+015
+433 111 3.08298e+015
+37 173 3.08287e+015
+95 477 3.08023e+015
+544 4 3.07975e+015
+100 198 3.06897e+015
+478 18 3.06574e+015
+212 182 3.06323e+015
+58 74 3.05961e+015
+403 265 3.0554e+015
+265 446 3.05145e+015
+332 295 3.03656e+015
+18 343 3.03652e+015
+31 270 3.02607e+015
+32 66 3.01425e+015
+523 123 3.0098e+015
+256 139 3.0076e+015
+164 358 3.00136e+015
+239 349 3.00055e+015
+346 240 2.99879e+015
+51 98 2.99797e+015
+220 290 2.99343e+015
+371 90 2.9916e+015
+220 150 2.9915e+015
+544 6 2.96968e+015
+5 46 2.96069e+015
+44 98 2.95643e+015
+411 353 2.94888e+015
+542 132 2.94661e+015
+135 129 2.94657e+015
+37 296 2.94242e+015
+344 263 2.93882e+015
+313 76 2.93368e+015
+52 42 2.932e+015
+444 453 2.92655e+015
+379 7 2.92437e+015
+141 183 2.92105e+015
+367 143 2.91362e+015
+350 145 2.91072e+015
+66 214 2.91053e+015
+537 393 2.91013e+015
+508 5 2.89075e+015
+391 295 2.88095e+015
+178 94 2.88047e+015
+272 288 2.86441e+015
+163 243 2.86365e+015
+399 262 2.85996e+015
+333 90 2.85987e+015
+413 299 2.85482e+015
+285 297 2.83687e+015
+208 55 2.82468e+015
+172 57 2.82066e+015
+117 76 2.81806e+015
+386 294 2.81514e+015
+6 10 2.81048e+015
+414 21 2.80935e+015
+280 50 2.80755e+015
+366 7 2.80591e+015
+102 5 2.805e+015
+106 61 2.80336e+015
+478 15 2.79557e+015
+357 128 2.79339e+015
+61 203 2.79184e+015
+124 40 2.78886e+015
+259 237 2.78417e+015
+61 134 2.76492e+015
+96 449 2.76014e+015
+362 395 2.75774e+015
+305 193 2.75074e+015
+271 279 2.74236e+015
+31 135 2.73896e+015
+58 29 2.73112e+015
+65 319 2.73103e+015
+476 21 2.7277e+015
+298 69 2.72662e+015
+540 13 2.72153e+015
+47 147 2.71702e+015
+138 98 2.71477e+015
+158 73 2.71214e+015
+206 435 2.71177e+015
+249 423 2.70989e+015
+230 292 2.70571e+015
+355 267 2.70371e+015
+202 315 2.70225e+015
+493 139 2.70193e+015
+181 394 2.69231e+015
+248 316 2.69008e+015
+8 10 2.67692e+015
+57 364 2.67446e+015
+390 48 2.67437e+015
+524 346 2.67268e+015
+68 337 2.67218e+015
+272 167 2.67138e+015
+522 62 2.65962e+015
+233 199 2.65576e+015
+221 177 2.64816e+015
+273 296 2.64743e+015
+76 8 2.63918e+015
+506 16 2.63767e+015
+260 71 2.63251e+015
+223 220 2.62973e+015
+162 216 2.62837e+015
+85 214 2.62771e+015
+401 263 2.61979e+015
+512 262 2.6166e+015
+436 303 2.61117e+015
+160 143 2.59716e+015
+165 327 2.59373e+015
+135 131 2.58884e+015
+524 19 2.58697e+015
+531 102 2.57905e+015
+490 139 2.57458e+015
+341 122 2.57284e+015
+408 45 2.56735e+015
+191 360 2.56638e+015
+84 477 2.5609e+015
+63 133 2.54658e+015
+393 48 2.54462e+015
+191 205 2.54285e+015
+21 61 2.54133e+015
+72 97 2.5377e+015
+32 218 2.53691e+015
+193 16 2.52986e+015
+338 473 2.52483e+015
+175 311 2.51716e+015
+113 213 2.51645e+015
+160 145 2.51511e+015
+245 294 2.50688e+015
+471 212 2.5042e+015
+96 79 2.49852e+015
+38 138 2.49748e+015
+382 412 2.49237e+015
+268 53 2.48384e+015
+524 24 2.48036e+015
+345 350 2.46823e+015
+329 12 2.46584e+015
+480 262 2.45776e+015
+403 187 2.45663e+015
+519 62 2.45574e+015
+307 449 2.4549e+015
+174 313 2.45395e+015
+525 172 2.45371e+015
+448 166 2.45354e+015
+259 35 2.44485e+015
+364 254 2.4403e+015
+374 240 2.42361e+015
+171 17 2.41414e+015
+478 12 2.41211e+015
+339 13 2.40954e+015
+191 146 2.40721e+015
+386 326 2.40688e+015
+471 421 2.40646e+015
+542 129 2.40638e+015
+512 99 2.40276e+015
+346 296 2.40201e+015
+325 294 2.39906e+015
+191 330 2.39826e+015
+168 18 2.39093e+015
+297 331 2.39002e+015
+141 2 2.38935e+015
+411 44 2.38876e+015
+377 119 2.38703e+015
+374 393 2.38544e+015
+96 447 2.38167e+015
+328 297 2.37835e+015
+454 84 2.3686e+015
+283 52 2.36801e+015
+360 220 2.36744e+015
+364 181 2.35683e+015
+278 144 2.35641e+015
+223 218 2.35332e+015
+336 391 2.35153e+015
+571 450 2.33661e+015
+64 371 2.33413e+015
+530 362 2.33315e+015
+538 97 2.33274e+015
+393 218 2.33189e+015
+286 165 2.32899e+015
+49 12 2.3288e+015
+28 30 2.32355e+015
+159 183 2.32244e+015
+364 257 2.32219e+015
+166 97 2.32107e+015
+163 211 2.32071e+015
+410 65 2.31999e+015
+406 198 2.31428e+015
+154 114 2.313e+015
+328 89 2.30838e+015
+44 9 2.30025e+015
+276 180 2.29828e+015
+90 376 2.2973e+015
+193 218 2.2961e+015
+365 106 2.29005e+015
+248 313 2.28341e+015
+453 102 2.28027e+015
+297 420 2.27714e+015
+547 161 2.27585e+015
+507 2 2.27447e+015
+416 84 2.27107e+015
+127 26 2.26936e+015
+389 140 2.26919e+015
+302 204 2.26389e+015
+120 447 2.26021e+015
+42 339 2.25746e+015
+449 445 2.25684e+015
+46 82 2.25207e+015
+359 217 2.24701e+015
+255 149 2.2385e+015
+191 218 2.23653e+015
+345 108 2.23624e+015
+110 137 2.23587e+015
+133 132 2.23304e+015
+53 221 2.23301e+015
+330 89 2.23244e+015
+381 26 2.23195e+015
+312 7 2.2284e+015
+159 138 2.2276e+015
+358 282 2.22602e+015
+12 218 2.22213e+015
+393 216 2.2206e+015
+340 165 2.21798e+015
+502 160 2.21757e+015
+276 182 2.21703e+015
+187 264 2.21474e+015
+345 276 2.21348e+015
+422 48 2.20989e+015
+451 376 2.20825e+015
+299 178 2.20815e+015
+105 42 2.20658e+015
+480 82 2.20578e+015
+561 227 2.19798e+015
+39 295 2.19508e+015
+79 197 2.18617e+015
+473 23 2.18421e+015
+420 7 2.1762e+015
+158 112 2.17595e+015
+42 24 2.17463e+015
+306 363 2.17175e+015
+539 458 2.17126e+015
+78 41 2.1705e+015
+345 110 2.16948e+015
+146 160 2.16865e+015
+330 10 2.16847e+015
+167 285 2.16745e+015
+46 355 2.16726e+015
+99 360 2.16188e+015
+113 95 2.16163e+015
+338 391 2.16e+015
+473 202 2.15831e+015
+509 1 2.15701e+015
+197 131 2.15408e+015
+548 163 2.15327e+015
+175 115 2.15197e+015
+30 237 2.15177e+015
+225 220 2.14947e+015
+191 216 2.14603e+015
+58 290 2.13333e+015
+539 405 2.1323e+015
+159 75 2.12533e+015
+46 220 2.12514e+015
+125 260 2.12197e+015
+221 183 2.12172e+015
+126 77 2.11062e+015
+216 125 2.1034e+015
+238 94 2.10262e+015
+436 320 2.09903e+015
+271 131 2.09803e+015
+559 80 2.09587e+015
+306 440 2.09496e+015
+418 164 2.09308e+015
+423 398 2.09303e+015
+325 91 2.09171e+015
+156 94 2.09056e+015
+161 20 2.09028e+015
+160 111 2.07711e+015
+561 225 2.077e+015
+568 43 2.07486e+015
+166 277 2.07324e+015
+214 124 2.0727e+015
+480 451 2.07116e+015
+217 208 2.06712e+015
+475 246 2.06383e+015
+118 425 2.06238e+015
+470 122 2.06216e+015
+514 260 2.05857e+015
+274 215 2.05784e+015
+249 365 2.05705e+015
+309 441 2.05571e+015
+524 38 2.0504e+015
+378 340 2.05015e+015
+36 201 2.04987e+015
+363 358 2.04698e+015
+324 142 2.04657e+015
+384 258 2.04593e+015
+418 283 2.04587e+015
+281 222 2.04402e+015
+378 68 2.04349e+015
+129 238 2.03979e+015
+576 179 2.03862e+015
+219 100 2.03796e+015
+69 420 2.03684e+015
+327 182 2.02998e+015
+44 62 2.02818e+015
+79 271 2.02452e+015
+511 83 2.02001e+015
+573 405 2.01567e+015
+327 91 2.01393e+015
+203 309 2.01205e+015
+268 289 2.01135e+015
+573 141 2.00995e+015
+216 146 2.00685e+015
+520 183 2.00372e+015
+42 297 2.00107e+015
+541 405 2.0007e+015
+407 352 1.9993e+015
+345 274 1.999e+015
+254 10 1.99742e+015
+334 436 1.99661e+015
+101 235 1.99488e+015
+110 135 1.9932e+015
+437 339 1.99232e+015
+212 33 1.9914e+015
+502 143 1.98963e+015
+163 208 1.98467e+015
+173 116 1.98382e+015
+272 53 1.98368e+015
+397 265 1.98126e+015
+451 373 1.97793e+015
+41 10 1.97348e+015
+272 72 1.97219e+015
+442 22 1.97182e+015
+253 75 1.97095e+015
+388 15 1.96711e+015
+279 366 1.95513e+015
+215 175 1.95199e+015
+483 364 1.94697e+015
+463 40 1.94347e+015
+364 200 1.9389e+015
+172 95 1.93689e+015
+210 21 1.93637e+015
+475 341 1.93454e+015
+498 224 1.92726e+015
+503 164 1.92445e+015
+301 178 1.92281e+015
+488 262 1.92221e+015
+488 264 1.92152e+015
+47 132 1.91996e+015
+421 398 1.91891e+015
+511 102 1.91087e+015
+299 176 1.90935e+015
+185 20 1.90824e+015
+274 53 1.90258e+015
+359 167 1.90226e+015
+357 297 1.90077e+015
+110 264 1.89841e+015
+318 385 1.89508e+015
+141 21 1.89503e+015
+114 3 1.89454e+015
+281 419 1.8945e+015
+131 476 1.89372e+015
+280 132 1.88911e+015
+471 83 1.88731e+015
+403 185 1.88375e+015
+458 265 1.88112e+015
+130 72 1.88106e+015
+395 105 1.88063e+015
+406 80 1.87993e+015
+112 242 1.87833e+015
+25 64 1.87157e+015
+384 162 1.86277e+015
+109 169 1.86217e+015
+169 243 1.86109e+015
+128 168 1.85188e+015
+420 164 1.84885e+015
+387 127 1.84571e+015
+281 128 1.8429e+015
+163 96 1.84126e+015
+568 382 1.84083e+015
+518 202 1.83708e+015
+358 241 1.83569e+015
+161 169 1.83264e+015
+49 159 1.83071e+015
+448 137 1.8304e+015
+505 361 1.82827e+015
+451 86 1.82706e+015
+398 357 1.82607e+015
+277 137 1.82302e+015
+449 204 1.82265e+015
+294 269 1.8204e+015
+156 91 1.81891e+015
+131 255 1.81772e+015
+329 67 1.81753e+015
+441 98 1.8162e+015
+95 217 1.8161e+015
+35 134 1.81501e+015
+246 106 1.81444e+015
+92 59 1.81409e+015
+328 255 1.8139e+015
+549 59 1.81387e+015
+413 65 1.81342e+015
+489 182 1.81277e+015
+584 38 1.81169e+015
+99 446 1.80927e+015
+86 149 1.80919e+015
+332 201 1.80892e+015
+134 238 1.80456e+015
+38 287 1.80433e+015
+222 114 1.80295e+015
+66 322 1.80222e+015
+354 295 1.80025e+015
+32 141 1.79774e+015
+163 168 1.79704e+015
+405 376 1.79431e+015
+166 312 1.79039e+015
+471 268 1.79022e+015
+145 187 1.78547e+015
+422 162 1.78233e+015
+448 401 1.78224e+015
+367 337 1.78097e+015
+514 120 1.78059e+015
+241 166 1.78004e+015
+77 29 1.7718e+015
+372 83 1.77122e+015
+396 160 1.77047e+015
+464 23 1.76868e+015
+467 124 1.76857e+015
+464 197 1.76839e+015
+343 198 1.76725e+015
+514 382 1.76439e+015
+271 182 1.76092e+015
+144 6 1.75965e+015
+156 318 1.75949e+015
+84 148 1.75912e+015
+282 135 1.75802e+015
+60 40 1.7557e+015
+432 269 1.7553e+015
+44 474 1.74744e+015
+317 312 1.74548e+015
+242 420 1.74413e+015
+107 429 1.74329e+015
+18 236 1.74233e+015
+148 397 1.7385e+015
+250 403 1.736e+015
+394 318 1.73525e+015
+265 15 1.73365e+015
+505 381 1.73192e+015
+237 163 1.73091e+015
+392 165 1.72878e+015
+160 96 1.7264e+015
+133 75 1.72411e+015
+165 110 1.724e+015
+366 300 1.72188e+015
+525 422 1.7215e+015
+282 392 1.72097e+015
+58 373 1.7188e+015
+449 178 1.71695e+015
+39 355 1.71631e+015
+64 218 1.71505e+015
+66 252 1.71184e+015
+192 172 1.70897e+015
+512 95 1.70596e+015
+486 265 1.70064e+015
+62 369 1.69848e+015
+284 199 1.69846e+015
+174 19 1.69656e+015
+165 19 1.69159e+015
+344 165 1.6909e+015
+519 60 1.68791e+015
+561 320 1.68602e+015
+198 111 1.6858e+015
+246 89 1.68525e+015
+258 161 1.68385e+015
+151 114 1.68253e+015
+70 476 1.68084e+015
+367 1 1.67766e+015
+206 160 1.67654e+015
+398 168 1.6736e+015
+379 107 1.66888e+015
+102 58 1.66812e+015
+251 10 1.6663e+015
+95 94 1.66533e+015
+424 337 1.66145e+015
+342 465 1.66076e+015
+3 155 1.65242e+015
+367 303 1.65218e+015
+268 287 1.65118e+015
+81 76 1.64939e+015
+274 77 1.6492e+015
+544 216 1.64821e+015
+90 275 1.64773e+015
+391 221 1.64748e+015
+297 182 1.63839e+015
+507 60 1.63831e+015
+109 59 1.6374e+015
+249 220 1.63577e+015
+79 473 1.63351e+015
+95 20 1.63147e+015
+247 220 1.63038e+015
+440 455 1.62985e+015
+269 61 1.62942e+015
+316 335 1.62804e+015
+289 396 1.62612e+015
+377 318 1.62604e+015
+188 181 1.62405e+015
+201 311 1.62264e+015
+429 117 1.62211e+015
+404 181 1.62179e+015
+543 457 1.6216e+015
+106 98 1.61922e+015
+359 53 1.61911e+015
+447 350 1.61643e+015
+36 299 1.61005e+015
+331 258 1.60692e+015
+350 338 1.60568e+015
+93 255 1.6036e+015
+489 43 1.60242e+015
+445 8 1.60096e+015
+291 50 1.60088e+015
+434 159 1.59796e+015
+59 31 1.59774e+015
+217 149 1.5918e+015
+578 43 1.58859e+015
+441 240 1.58819e+015
+150 231 1.58803e+015
+389 54 1.58716e+015
+49 235 1.58415e+015
+486 44 1.58241e+015
+382 337 1.58112e+015
+39 239 1.57937e+015
+280 136 1.57809e+015
+157 40 1.57781e+015
+236 222 1.57682e+015
+174 239 1.57591e+015
+576 126 1.57542e+015
+51 61 1.57537e+015
+180 164 1.57526e+015
+48 257 1.57335e+015
+484 366 1.57327e+015
+277 140 1.57255e+015
+390 449 1.56853e+015
+517 58 1.56402e+015
+12 79 1.56364e+015
+56 78 1.56174e+015
+87 372 1.56084e+015
+275 317 1.56074e+015
+70 23 1.56071e+015
+70 129 1.5598e+015
+261 393 1.55825e+015
+271 61 1.55782e+015
+570 182 1.55722e+015
+532 398 1.55634e+015
+183 136 1.55547e+015
+158 91 1.5525e+015
+60 254 1.55059e+015
+536 121 1.54963e+015
+149 112 1.54956e+015
+298 274 1.54944e+015
+242 190 1.54939e+015
+217 97 1.54937e+015
+146 98 1.54781e+015
+483 143 1.5451e+015
+447 352 1.545e+015
+550 378 1.54468e+015
+529 365 1.54145e+015
+271 63 1.54073e+015
+297 410 1.53842e+015
+491 1 1.53636e+015
+261 217 1.53367e+015
+319 186 1.5333e+015
+316 166 1.53284e+015
+269 66 1.53241e+015
+517 42 1.53056e+015
+34 31 1.52862e+015
+191 350 1.52744e+015
+270 185 1.52355e+015
+524 425 1.52328e+015
+106 431 1.52218e+015
+509 163 1.52168e+015
+569 39 1.52143e+015
+107 107 1.52121e+015
+265 201 1.52049e+015
+281 417 1.51887e+015
+62 253 1.51661e+015
+386 296 1.51409e+015
+178 274 1.51398e+015
+217 127 1.51137e+015
+420 162 1.51065e+015
+434 277 1.5076e+015
+528 159 1.50577e+015
+482 440 1.50376e+015
+38 168 1.50369e+015
+569 203 1.50327e+015
+318 460 1.50054e+015
+133 148 1.49971e+015
+466 24 1.49762e+015
+423 165 1.49618e+015
+525 186 1.49556e+015
+483 326 1.49396e+015
+75 96 1.4935e+015
+468 139 1.4928e+015
+503 362 1.49126e+015
+338 63 1.48949e+015
+508 166 1.4894e+015
+29 135 1.48928e+015
+16 434 1.489e+015
+50 453 1.48743e+015
+550 223 1.48587e+015
+332 131 1.48496e+015
+500 82 1.48443e+015
+149 1 1.48381e+015
+183 138 1.4838e+015
+449 63 1.48264e+015
+376 84 1.48228e+015
+196 194 1.48211e+015
+513 83 1.48163e+015
+328 214 1.47998e+015
+289 349 1.47964e+015
+126 96 1.47949e+015
+402 167 1.4791e+015
+506 163 1.47826e+015
+91 259 1.4761e+015
+498 67 1.47272e+015
+165 117 1.4698e+015
+187 308 1.46944e+015
+469 204 1.46514e+015
+263 392 1.46425e+015
+203 294 1.46213e+015
+565 463 1.46056e+015
+179 380 1.45908e+015
+254 77 1.45879e+015
+71 408 1.45602e+015
+119 115 1.45471e+015
+449 168 1.4545e+015
+534 161 1.45226e+015
+64 252 1.4522e+015
+466 196 1.4518e+015
+309 33 1.44932e+015
+560 272 1.4482e+015
+210 154 1.44652e+015
+539 128 1.44027e+015
+565 159 1.43984e+015
+233 261 1.43936e+015
+85 180 1.43844e+015
+406 163 1.43814e+015
+525 381 1.43796e+015
+332 415 1.43768e+015
+538 40 1.43668e+015
+359 142 1.43465e+015
+9 8 1.43421e+015
+50 155 1.43194e+015
+464 27 1.43076e+015
+358 66 1.42794e+015
+56 171 1.42741e+015
+172 450 1.4272e+015
+174 17 1.42495e+015
+512 295 1.42431e+015
+202 318 1.42274e+015
+332 412 1.42131e+015
+314 222 1.42101e+015
+384 146 1.4198e+015
+572 327 1.41941e+015
+525 224 1.41857e+015
+242 168 1.41817e+015
+541 41 1.41585e+015
+369 82 1.41518e+015
+76 474 1.41492e+015
+225 52 1.4121e+015
+187 101 1.41207e+015
+242 58 1.41046e+015
+375 340 1.41022e+015
+129 309 1.40976e+015
+275 329 1.40972e+015
+52 153 1.4059e+015
+525 222 1.4048e+015
+53 359 1.40453e+015
+325 13 1.40408e+015
+44 408 1.40339e+015
+433 381 1.40322e+015
+245 102 1.4029e+015
+486 376 1.40189e+015
+276 319 1.4016e+015
+450 398 1.4011e+015
+575 99 1.40048e+015
+190 312 1.39895e+015
+485 4 1.39841e+015
+46 407 1.39751e+015
+3 382 1.39722e+015
+103 259 1.39341e+015
+391 18 1.39297e+015
+561 146 1.39156e+015
+163 253 1.3913e+015
+421 80 1.3851e+015
+508 361 1.38468e+015
+501 42 1.38445e+015
+225 50 1.38417e+015
+465 355 1.38361e+015
+92 444 1.38263e+015
+387 283 1.38151e+015
+246 207 1.38129e+015
+264 311 1.37753e+015
+456 161 1.37672e+015
+88 182 1.3748e+015
+395 23 1.37413e+015
+389 97 1.37259e+015
+200 330 1.36777e+015
+85 310 1.36756e+015
+255 405 1.36439e+015
+377 183 1.36347e+015
+563 17 1.36176e+015
+513 402 1.36041e+015
+578 52 1.36021e+015
+55 145 1.3578e+015
+411 4 1.35467e+015
+497 81 1.35262e+015
+275 196 1.35011e+015
+277 220 1.34837e+015
+182 379 1.34821e+015
+152 196 1.34756e+015
+82 72 1.34435e+015
+483 328 1.34346e+015
+263 200 1.34301e+015
+330 92 1.34154e+015
+540 141 1.3403e+015
+184 142 1.33977e+015
+405 142 1.33956e+015
+592 18 1.33906e+015
+481 328 1.33844e+015
+9 75 1.33768e+015
+92 79 1.33761e+015
+302 190 1.33657e+015
+449 118 1.33469e+015
+227 130 1.33236e+015
+473 5 1.33158e+015
+210 395 1.33114e+015
+524 198 1.33063e+015
+250 400 1.3293e+015
+119 96 1.32856e+015
+274 206 1.32782e+015
+561 324 1.32735e+015
+292 310 1.3266e+015
+520 64 1.32642e+015
+377 316 1.32577e+015
+307 354 1.32478e+015
+552 384 1.32159e+015
+110 358 1.32151e+015
+272 316 1.3207e+015
+294 331 1.32067e+015
+291 89 1.31985e+015
+420 45 1.31749e+015
+289 137 1.31733e+015
+259 369 1.31713e+015
+472 42 1.31702e+015
+464 390 1.31687e+015
+360 369 1.31672e+015
+481 165 1.31603e+015
+599 365 1.31536e+015
+248 395 1.31171e+015
+84 60 1.31167e+015
+329 200 1.31145e+015
+300 106 1.31088e+015
+529 396 1.31039e+015
+380 120 1.30819e+015
+570 325 1.30778e+015
+445 22 1.30512e+015
+106 359 1.3045e+015
+86 197 1.30379e+015
+251 152 1.30272e+015
+454 115 1.30258e+015
+323 146 1.30227e+015
+516 19 1.30074e+015
+516 183 1.30021e+015
+74 186 1.29761e+015
+559 18 1.29717e+015
+220 315 1.29577e+015
+186 109 1.29513e+015
+397 318 1.29383e+015
+569 422 1.29177e+015
+288 264 1.2909e+015
+114 178 1.29085e+015
+220 317 1.28986e+015
+328 320 1.28939e+015
+545 91 1.28898e+015
+33 111 1.28784e+015
+212 396 1.2877e+015
+362 361 1.28753e+015
+288 88 1.28679e+015
+233 296 1.2867e+015
+541 163 1.28545e+015
+149 223 1.28482e+015
+537 263 1.28281e+015
+148 22 1.28031e+015
+261 368 1.27869e+015
+338 263 1.2773e+015
+157 306 1.27681e+015
+183 316 1.27634e+015
+200 293 1.27578e+015
+387 3 1.27374e+015
+184 94 1.27279e+015
+454 47 1.27046e+015
+279 86 1.26996e+015
+191 188 1.26986e+015
+433 240 1.26906e+015
+272 170 1.26846e+015
+573 178 1.2682e+015
+87 207 1.26707e+015
+478 82 1.26663e+015
+319 335 1.26553e+015
+186 289 1.26233e+015
+462 161 1.26189e+015
+449 437 1.26151e+015
+388 420 1.25996e+015
+122 124 1.25972e+015
+529 31 1.25783e+015
+434 43 1.25778e+015
+183 394 1.25652e+015
+157 182 1.25631e+015
+136 138 1.25499e+015
+408 430 1.25484e+015
+265 52 1.25461e+015
+221 432 1.25298e+015
+383 335 1.25139e+015
+490 58 1.24976e+015
+456 377 1.24882e+015
+273 220 1.24873e+015
+229 14 1.24814e+015
+359 291 1.24732e+015
+436 182 1.24714e+015
+321 10 1.24642e+015
+506 203 1.24469e+015
+500 266 1.24466e+015
+469 42 1.24463e+015
+512 43 1.24392e+015
+562 149 1.2415e+015
+412 245 1.24104e+015
+265 286 1.24074e+015
+453 161 1.23895e+015
+219 211 1.23352e+015
+277 329 1.23339e+015
+206 158 1.23339e+015
+247 405 1.23297e+015
+116 360 1.23241e+015
+259 273 1.23241e+015
+387 281 1.23217e+015
+525 79 1.23193e+015
+479 439 1.23029e+015
+322 28 1.2299e+015
+562 461 1.22976e+015
+362 214 1.22862e+015
+327 9 1.2275e+015
+278 417 1.22269e+015
+351 271 1.21956e+015
+263 402 1.2186e+015
+461 43 1.2176e+015
+597 272 1.21664e+015
+407 65 1.21594e+015
+73 163 1.21463e+015
+191 277 1.21444e+015
+120 187 1.21382e+015
+445 126 1.21337e+015
+51 287 1.21331e+015
+21 131 1.21283e+015
+176 57 1.21205e+015
+410 263 1.21184e+015
+451 63 1.2117e+015
+411 98 1.20856e+015
+175 186 1.20826e+015
+223 87 1.20819e+015
+513 20 1.208e+015
+48 102 1.20539e+015
+395 165 1.20387e+015
+208 421 1.20311e+015
+195 83 1.20221e+015
+483 164 1.20174e+015
+576 311 1.20009e+015
+155 445 1.19424e+015
+96 37 1.19386e+015
+255 108 1.19324e+015
+182 344 1.19314e+015
+514 362 1.19018e+015
+239 194 1.18967e+015
+242 281 1.18913e+015
+363 302 1.18905e+015
+240 197 1.18762e+015
+446 376 1.18758e+015
+314 447 1.1867e+015
+438 241 1.18409e+015
+95 59 1.18274e+015
+267 19 1.18003e+015
+225 129 1.17986e+015
+417 301 1.17894e+015
+9 475 1.17539e+015
+422 64 1.17498e+015
+177 332 1.17448e+015
+567 181 1.17404e+015
+165 379 1.17387e+015
+69 304 1.17131e+015
+198 148 1.17076e+015
+548 45 1.17063e+015
+87 369 1.16934e+015
+462 397 1.1685e+015
+16 213 1.16565e+015
+109 146 1.16563e+015
+86 63 1.16506e+015
+67 48 1.16325e+015
+479 242 1.16197e+015
+414 261 1.16164e+015
+93 276 1.16075e+015
+349 241 1.15959e+015
+444 123 1.15939e+015
+12 113 1.15905e+015
+461 123 1.15894e+015
+512 204 1.15823e+015
+55 142 1.1575e+015
+278 392 1.1563e+015
+269 241 1.15595e+015
+265 54 1.15533e+015
+478 221 1.15505e+015
+335 427 1.15493e+015
+330 106 1.15365e+015
+597 364 1.15283e+015
+547 218 1.15275e+015
+145 16 1.15241e+015
+168 358 1.15222e+015
+504 18 1.15165e+015
+215 97 1.15162e+015
+529 141 1.15061e+015
+439 25 1.14906e+015
+527 79 1.14884e+015
+455 265 1.14837e+015
+87 275 1.14596e+015
+370 107 1.14444e+015
+262 396 1.14433e+015
+432 82 1.14374e+015
+414 264 1.14145e+015
+535 140 1.13958e+015
+99 95 1.13956e+015
+251 192 1.13895e+015
+525 196 1.13784e+015
+443 320 1.13451e+015
+537 139 1.13272e+015
+108 45 1.13087e+015
+83 100 1.13065e+015
+411 418 1.13018e+015
+355 341 1.13017e+015
+187 325 1.12813e+015
+526 399 1.12808e+015
+143 17 1.12791e+015
+572 39 1.12702e+015
+272 146 1.12324e+015
+331 334 1.12234e+015
+564 225 1.12192e+015
+122 268 1.12167e+015
+311 299 1.11977e+015
+403 14 1.11901e+015
+227 72 1.11805e+015
+202 346 1.11698e+015
+449 22 1.1168e+015
+13 203 1.1151e+015
+116 131 1.1145e+015
+120 54 1.11365e+015
+104 76 1.11321e+015
+322 424 1.11171e+015
+87 355 1.11162e+015
+50 289 1.11036e+015
+95 374 1.10878e+015
+419 362 1.10874e+015
+307 196 1.10811e+015
+438 397 1.10758e+015
+257 220 1.10593e+015
+251 163 1.1045e+015
+317 337 1.10354e+015
+572 459 1.10349e+015
+130 428 1.10292e+015
+214 450 1.10289e+015
+118 131 1.1006e+015
+497 283 1.1003e+015
+555 181 1.09976e+015
+328 106 1.0985e+015
+266 131 1.09791e+015
+444 118 1.09689e+015
+154 195 1.09632e+015
+151 399 1.09592e+015
+232 13 1.09469e+015
+528 400 1.09401e+015
+263 140 1.09318e+015
+354 424 1.09286e+015
+531 159 1.0928e+015
+359 161 1.09277e+015
+533 346 1.09276e+015
+103 98 1.0912e+015
+508 83 1.09045e+015
+446 123 1.09031e+015
+183 201 1.08991e+015
+160 126 1.08954e+015
+211 12 1.08948e+015
+424 261 1.08928e+015
+467 319 1.08922e+015
+486 139 1.08915e+015
+111 132 1.08773e+015
+113 354 1.08746e+015
+247 327 1.08691e+015
+438 122 1.0854e+015
+143 449 1.08519e+015
+269 56 1.08451e+015
+181 202 1.08428e+015
+125 124 1.08402e+015
+156 308 1.08163e+015
+485 235 1.08157e+015
+329 109 1.08005e+015
+572 333 1.07998e+015
+500 318 1.07869e+015
+298 137 1.07865e+015
+618 181 1.07785e+015
+246 256 1.07742e+015
+438 183 1.07645e+015
+419 68 1.07599e+015
+260 329 1.07542e+015
+222 107 1.07534e+015
+289 139 1.07276e+015
+284 386 1.07196e+015
+278 331 1.0718e+015
+229 346 1.07175e+015
+64 275 1.07159e+015
+323 148 1.07097e+015
+493 58 1.06982e+015
+504 260 1.06963e+015
+223 124 1.06814e+015
+186 170 1.06799e+015
+136 135 1.06732e+015
+467 41 1.06715e+015
+108 75 1.06686e+015
+394 183 1.06682e+015
+272 92 1.0643e+015
+58 71 1.06364e+015
+12 433 1.06318e+015
+391 324 1.06317e+015
+196 76 1.06242e+015
+474 64 1.06207e+015
+455 179 1.06075e+015
+339 427 1.05845e+015
+354 25 1.05672e+015
+541 380 1.05529e+015
+64 182 1.05511e+015
+221 84 1.05435e+015
+135 73 1.05338e+015
+394 65 1.05275e+015
+380 181 1.05232e+015
+99 257 1.05199e+015
+493 456 1.05168e+015
+562 141 1.0498e+015
+223 154 1.04923e+015
+45 343 1.0487e+015
+458 115 1.04828e+015
+286 34 1.04787e+015
+151 152 1.04688e+015
+433 26 1.04663e+015
+224 398 1.04511e+015
+455 418 1.03994e+015
+378 352 1.03987e+015
+436 468 1.03954e+015
+26 131 1.03932e+015
+96 453 1.03895e+015
+271 414 1.03791e+015
+383 103 1.03714e+015
+278 190 1.03669e+015
+576 165 1.03638e+015
+539 126 1.03587e+015
+8 235 1.03525e+015
+321 119 1.0347e+015
+206 163 1.03406e+015
+190 315 1.03403e+015
+232 176 1.03388e+015
+418 79 1.03362e+015
+199 166 1.03226e+015
+446 243 1.03164e+015
+537 103 1.03086e+015
+102 41 1.02985e+015
+342 296 1.02888e+015
+150 150 1.02826e+015
+431 395 1.02691e+015
+194 312 1.02677e+015
+573 423 1.02528e+015
+126 218 1.02458e+015
+25 200 1.02398e+015
+409 140 1.0233e+015
+486 326 1.02098e+015
+69 417 1.02097e+015
+214 93 1.02018e+015
+485 46 1.02002e+015
+493 79 1.01924e+015
+130 426 1.01868e+015
+17 64 1.01705e+015
+445 444 1.01569e+015
+374 151 1.01519e+015
+568 183 1.0145e+015
+389 134 1.01428e+015
+290 263 1.01203e+015
+185 132 1.01193e+015
+480 204 1.01005e+015
+336 183 1.00895e+015
+50 221 1.00878e+015
+557 18 1.00874e+015
+311 222 1.00855e+015
+148 79 1.00669e+015
+110 179 1.00656e+015
+170 313 1.00605e+015
+515 203 1.00242e+015
+559 60 1.00119e+015
+493 82 1.00077e+015
+227 198 9.99329e+014
+162 99 9.97682e+014
+266 293 9.97389e+014
+243 31 9.97283e+014
+104 307 9.96584e+014
+148 231 9.96545e+014
+135 21 9.96534e+014
+297 15 9.96299e+014
+261 287 9.96241e+014
+385 64 9.96117e+014
+426 334 9.96031e+014
+154 56 9.95024e+014
+483 46 9.94129e+014
+39 83 9.93943e+014
+112 206 9.93469e+014
+181 293 9.92653e+014
+420 43 9.91752e+014
+256 102 9.91304e+014
+257 391 9.91294e+014
+271 56 9.90347e+014
+151 317 9.90021e+014
+486 328 9.87232e+014
+363 49 9.84837e+014
+46 122 9.84731e+014
+205 202 9.84589e+014
+180 168 9.84585e+014
+149 131 9.84096e+014
+131 411 9.83525e+014
+136 323 9.82152e+014
+425 102 9.8201e+014
+246 420 9.81986e+014
+267 118 9.81527e+014
+249 387 9.81469e+014
+364 165 9.81237e+014
+574 129 9.78378e+014
+166 219 9.77795e+014
+363 407 9.77512e+014
+53 452 9.7694e+014
+323 133 9.76646e+014
+318 164 9.76609e+014
+538 187 9.76024e+014
+436 466 9.75435e+014
+424 62 9.75418e+014
+115 129 9.74918e+014
+483 359 9.73177e+014
+524 189 9.72955e+014
+418 167 9.72241e+014
+105 224 9.72183e+014
+270 170 9.70119e+014
+74 234 9.69966e+014
+546 142 9.69303e+014
+510 59 9.67454e+014
+386 334 9.67436e+014
+391 125 9.67055e+014
+173 123 9.66894e+014
+210 136 9.65848e+014
+186 292 9.65797e+014
+406 76 9.65492e+014
+403 5 9.6461e+014
+261 141 9.63924e+014
+36 470 9.62826e+014
+556 264 9.62013e+014
+71 406 9.61696e+014
+256 105 9.61626e+014
+234 32 9.61357e+014
+22 48 9.61082e+014
+116 289 9.60598e+014
+188 255 9.59234e+014
+450 197 9.57856e+014
+354 15 9.56874e+014
+440 379 9.5646e+014
+112 40 9.5582e+014
+333 281 9.55499e+014
+545 439 9.5494e+014
+414 145 9.54125e+014
+138 131 9.5363e+014
+467 39 9.53519e+014
+117 429 9.5345e+014
+257 250 9.51333e+014
+438 378 9.49651e+014
+106 29 9.49571e+014
+333 66 9.49337e+014
+108 259 9.49195e+014
+543 443 9.48491e+014
+383 109 9.47699e+014
+446 266 9.47096e+014
+581 245 9.47048e+014
+404 7 9.47032e+014
+134 412 9.46751e+014
+394 20 9.46705e+014
+401 320 9.46229e+014
+173 272 9.45377e+014
+422 119 9.43742e+014
+360 140 9.43565e+014
+362 64 9.42618e+014
+269 104 9.42078e+014
+300 246 9.41389e+014
+526 119 9.41197e+014
+84 170 9.41091e+014
+23 322 9.40613e+014
+334 143 9.38666e+014
+129 125 9.37928e+014
+130 113 9.37893e+014
+420 87 9.35811e+014
+458 376 9.35015e+014
+245 385 9.34918e+014
+334 28 9.34698e+014
+451 125 9.34191e+014
+90 113 9.33765e+014
+401 144 9.33179e+014
+249 91 9.30829e+014
+143 433 9.30524e+014
+267 243 9.30307e+014
+437 110 9.30226e+014
+276 187 9.2902e+014
+287 308 9.28807e+014
+579 84 9.28127e+014
+179 271 9.2557e+014
+265 260 9.25461e+014
+154 163 9.25327e+014
+310 335 9.25137e+014
+352 341 9.2439e+014
+113 306 9.2351e+014
+163 348 9.2305e+014
+575 38 9.22874e+014
+10 203 9.22463e+014
+581 445 9.21977e+014
+333 356 9.21147e+014
+130 218 9.20487e+014
+547 283 9.19828e+014
+156 195 9.19633e+014
+310 259 9.19444e+014
+362 66 9.18668e+014
+344 48 9.1797e+014
+549 384 9.17163e+014
+551 182 9.17015e+014
+432 121 9.16201e+014
+247 348 9.15569e+014
+307 89 9.13978e+014
+284 212 9.13757e+014
+257 131 9.13335e+014
+252 183 9.13267e+014
+387 449 9.13205e+014
+434 226 9.12882e+014
+512 287 9.12792e+014
+318 202 9.11974e+014
+340 220 9.10896e+014
+557 20 9.10415e+014
+564 162 9.10309e+014
+123 83 9.09332e+014
+202 220 9.09074e+014
+485 237 9.07653e+014
+147 15 9.06944e+014
+298 399 9.05255e+014
+273 223 9.04378e+014
+290 182 9.03495e+014
+245 387 9.03024e+014
+162 120 9.02033e+014
+104 106 9.01445e+014
+420 142 9.00206e+014
+528 437 9.0016e+014
+216 121 8.984e+014
+133 79 8.98033e+014
+512 183 8.98024e+014
+101 444 8.96869e+014
+546 181 8.95236e+014
+566 39 8.95207e+014
+460 357 8.94075e+014
+94 422 8.93768e+014
+510 135 8.92666e+014
+206 404 8.92501e+014
+575 332 8.92421e+014
+483 287 8.92282e+014
+589 350 8.91953e+014
+85 363 8.91697e+014
+480 45 8.90907e+014
+475 269 8.90067e+014
+446 145 8.89203e+014
+5 236 8.88166e+014
+502 103 8.87783e+014
+502 166 8.86731e+014
+177 396 8.86565e+014
+497 78 8.86361e+014
+422 332 8.84848e+014
+102 392 8.84198e+014
+286 262 8.83819e+014
+420 90 8.82921e+014
+200 8 8.82731e+014
+152 236 8.82477e+014
+363 455 8.81823e+014
+247 399 8.81153e+014
+199 97 8.80592e+014
+531 143 8.80502e+014
+270 145 8.80154e+014
+279 188 8.79957e+014
+107 325 8.77177e+014
+70 259 8.76866e+014
+100 165 8.7683e+014
+280 35 8.76515e+014
+478 399 8.7547e+014
+214 290 8.74813e+014
+535 92 8.74201e+014
+91 257 8.7383e+014
+277 223 8.7377e+014
+364 353 8.73156e+014
+227 259 8.7313e+014
+181 341 8.7285e+014
+230 332 8.71772e+014
+186 312 8.70662e+014
+41 168 8.69091e+014
+162 186 8.68699e+014
+566 176 8.68573e+014
+159 254 8.68565e+014
+37 267 8.68409e+014
+355 325 8.65949e+014
+288 125 8.65819e+014
+299 254 8.64635e+014
+366 454 8.63465e+014
+421 299 8.634e+014
+560 275 8.6301e+014
+186 215 8.62919e+014
+136 180 8.6236e+014
+126 339 8.62207e+014
+195 110 8.61837e+014
+288 111 8.61137e+014
+497 118 8.61123e+014
+276 203 8.60121e+014
+183 56 8.60033e+014
+167 315 8.60027e+014
+363 453 8.59776e+014
+497 286 8.59146e+014
+307 257 8.58936e+014
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_5_7.txt b/test_data/harriscorners/hc_msc_0.00_0.15_5_7.txt
new file mode 100644
index 0000000..a0ef6ec
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_5_7.txt
@@ -0,0 +1,2085 @@
+2084
+81 29 4.02032e+016
+246 94 3.87072e+016
+421 180 3.83742e+016
+238 20 3.80821e+016
+274 367 3.38325e+016
+272 367 3.36916e+016
+131 26 3.09709e+016
+424 180 2.87657e+016
+282 113 2.84256e+016
+424 177 2.83919e+016
+75 257 2.83902e+016
+261 297 2.81707e+016
+80 3 2.701e+016
+510 124 2.61816e+016
+130 37 2.59809e+016
+424 322 2.47883e+016
+121 43 2.45696e+016
+30 8 2.42082e+016
+542 14 2.35507e+016
+199 18 2.32623e+016
+299 53 2.28522e+016
+152 223 2.18569e+016
+330 128 2.15327e+016
+458 279 2.13623e+016
+544 366 2.08709e+016
+343 8 2.07863e+016
+102 222 2.03723e+016
+55 30 2.03269e+016
+213 57 2.01506e+016
+34 139 1.99213e+016
+483 178 1.98886e+016
+359 294 1.98468e+016
+361 294 1.98055e+016
+195 58 1.97963e+016
+292 16 1.97653e+016
+302 184 1.97284e+016
+26 9 1.96779e+016
+84 77 1.95378e+016
+37 63 1.94078e+016
+528 25 1.93352e+016
+485 338 1.89733e+016
+361 395 1.8714e+016
+156 1 1.85472e+016
+385 10 1.8229e+016
+302 181 1.80201e+016
+122 46 1.80071e+016
+400 263 1.79925e+016
+295 15 1.777e+016
+77 2 1.76548e+016
+391 296 1.76447e+016
+138 204 1.76151e+016
+464 395 1.75798e+016
+64 344 1.75593e+016
+258 384 1.7538e+016
+241 70 1.74276e+016
+436 68 1.73337e+016
+391 294 1.71034e+016
+388 11 1.70714e+016
+135 213 1.7031e+016
+60 217 1.69708e+016
+224 39 1.67893e+016
+36 145 1.66165e+016
+319 225 1.64007e+016
+451 338 1.63895e+016
+525 25 1.62658e+016
+226 37 1.62123e+016
+12 217 1.61594e+016
+211 436 1.61454e+016
+34 100 1.61401e+016
+115 42 1.59763e+016
+512 342 1.57383e+016
+250 12 1.57233e+016
+359 334 1.56331e+016
+345 339 1.55022e+016
+554 40 1.53778e+016
+447 261 1.53666e+016
+328 296 1.52377e+016
+389 59 1.52043e+016
+403 120 1.51288e+016
+253 11 1.50803e+016
+224 420 1.4996e+016
+122 186 1.47938e+016
+343 338 1.47885e+016
+127 165 1.47254e+016
+225 181 1.45681e+016
+449 299 1.43893e+016
+511 169 1.42545e+016
+320 312 1.4234e+016
+364 251 1.40627e+016
+364 400 1.40381e+016
+313 148 1.40369e+016
+503 1 1.40209e+016
+476 262 1.40071e+016
+125 253 1.39923e+016
+263 442 1.3929e+016
+386 178 1.38975e+016
+158 74 1.37705e+016
+47 98 1.36928e+016
+359 129 1.36831e+016
+175 110 1.35755e+016
+383 5 1.3531e+016
+545 59 1.3484e+016
+528 103 1.34465e+016
+419 8 1.3415e+016
+209 450 1.34099e+016
+58 217 1.31949e+016
+448 296 1.31725e+016
+143 323 1.31218e+016
+562 478 1.3084e+016
+448 398 1.30806e+016
+79 79 1.30508e+016
+518 59 1.30428e+016
+41 217 1.30195e+016
+363 403 1.28623e+016
+163 215 1.28171e+016
+138 207 1.27365e+016
+390 143 1.26575e+016
+302 165 1.26508e+016
+486 58 1.25765e+016
+207 449 1.25557e+016
+418 438 1.25268e+016
+361 400 1.25254e+016
+484 58 1.25241e+016
+352 321 1.25128e+016
+272 280 1.24878e+016
+120 185 1.24527e+016
+56 290 1.24512e+016
+4 45 1.23828e+016
+356 259 1.22695e+016
+150 306 1.22557e+016
+359 220 1.22121e+016
+427 118 1.22072e+016
+408 183 1.21853e+016
+238 91 1.2166e+016
+43 26 1.21649e+016
+165 240 1.21434e+016
+580 16 1.212e+016
+403 118 1.21199e+016
+222 179 1.211e+016
+56 4 1.21076e+016
+310 6 1.20661e+016
+508 454 1.20309e+016
+226 421 1.19983e+016
+58 4 1.19557e+016
+393 143 1.19259e+016
+528 186 1.1913e+016
+246 144 1.18636e+016
+56 6 1.18528e+016
+284 402 1.18227e+016
+72 257 1.18125e+016
+534 185 1.17686e+016
+177 105 1.17571e+016
+253 139 1.17395e+016
+143 311 1.17335e+016
+107 39 1.16975e+016
+255 139 1.16777e+016
+300 165 1.16773e+016
+182 398 1.16467e+016
+546 41 1.15728e+016
+449 204 1.15692e+016
+265 445 1.1555e+016
+60 40 1.15469e+016
+294 27 1.15449e+016
+126 364 1.15435e+016
+165 242 1.15298e+016
+413 259 1.15292e+016
+387 219 1.14469e+016
+128 187 1.14427e+016
+260 220 1.14349e+016
+243 166 1.14055e+016
+500 159 1.13824e+016
+302 215 1.13431e+016
+329 258 1.12594e+016
+471 421 1.12427e+016
+405 183 1.11936e+016
+139 109 1.11739e+016
+60 184 1.11722e+016
+87 254 1.11605e+016
+256 151 1.11476e+016
+104 3 1.11212e+016
+132 74 1.10903e+016
+104 61 1.10634e+016
+313 84 1.10407e+016
+453 204 1.10203e+016
+261 222 1.09514e+016
+253 423 1.09445e+016
+108 240 1.08401e+016
+209 21 1.08362e+016
+343 264 1.08224e+016
+327 141 1.08168e+016
+380 6 1.07669e+016
+215 71 1.07661e+016
+392 218 1.07636e+016
+208 222 1.07542e+016
+61 203 1.07413e+016
+435 397 1.07352e+016
+414 22 1.07328e+016
+145 7 1.07085e+016
+174 41 1.06813e+016
+235 347 1.06786e+016
+433 147 1.06577e+016
+211 185 1.06052e+016
+548 162 1.06048e+016
+239 201 1.0546e+016
+229 37 1.05246e+016
+434 112 1.05058e+016
+36 174 1.05047e+016
+65 235 1.04521e+016
+37 172 1.03958e+016
+514 345 1.03387e+016
+63 236 1.03332e+016
+417 9 1.03175e+016
+166 326 1.02815e+016
+241 202 1.02563e+016
+410 353 1.02434e+016
+123 199 1.0242e+016
+411 257 1.02203e+016
+541 124 1.01852e+016
+83 134 1.01336e+016
+208 225 1.0093e+016
+101 360 9.9941e+015
+152 308 9.99024e+015
+49 150 9.99005e+015
+428 1 9.95392e+015
+301 205 9.95389e+015
+100 198 9.95255e+015
+111 169 9.94397e+015
+508 20 9.93638e+015
+437 304 9.86447e+015
+432 112 9.82495e+015
+176 260 9.79373e+015
+371 161 9.74187e+015
+112 391 9.73351e+015
+32 269 9.69788e+015
+52 98 9.69695e+015
+183 35 9.68477e+015
+233 345 9.67119e+015
+100 79 9.66801e+015
+54 222 9.64737e+015
+325 341 9.64706e+015
+508 166 9.64023e+015
+134 97 9.63638e+015
+479 15 9.62351e+015
+185 36 9.62071e+015
+477 18 9.60804e+015
+365 6 9.58921e+015
+91 199 9.57541e+015
+480 262 9.52449e+015
+543 169 9.4912e+015
+85 148 9.49111e+015
+362 7 9.4595e+015
+462 42 9.38275e+015
+350 321 9.37927e+015
+345 264 9.3515e+015
+24 62 9.33834e+015
+163 212 9.32488e+015
+523 22 9.30177e+015
+505 15 9.27408e+015
+174 114 9.2678e+015
+168 326 9.26762e+015
+183 111 9.26076e+015
+139 325 9.26013e+015
+512 221 9.25604e+015
+158 72 9.25083e+015
+430 117 9.244e+015
+356 219 9.23981e+015
+280 365 9.2338e+015
+326 89 9.22856e+015
+32 267 9.21674e+015
+367 6 9.18172e+015
+168 196 9.14782e+015
+404 266 9.14436e+015
+66 216 9.14409e+015
+431 318 9.13306e+015
+91 196 9.12831e+015
+332 294 9.11039e+015
+106 43 9.08363e+015
+329 11 9.07291e+015
+112 344 9.07163e+015
+422 336 9.07154e+015
+448 166 9.01348e+015
+543 167 8.98734e+015
+513 262 8.98138e+015
+160 144 8.9765e+015
+343 122 8.95231e+015
+134 132 8.94302e+015
+432 276 8.9311e+015
+125 259 8.91555e+015
+52 42 8.88845e+015
+377 120 8.88669e+015
+77 40 8.88168e+015
+260 236 8.88036e+015
+270 290 8.8703e+015
+213 74 8.86344e+015
+49 28 8.86325e+015
+389 21 8.83267e+015
+217 280 8.81252e+015
+235 161 8.80229e+015
+385 295 8.80057e+015
+512 219 8.79432e+015
+454 207 8.78116e+015
+385 244 8.77753e+015
+546 167 8.76909e+015
+163 110 8.76576e+015
+533 20 8.76457e+015
+562 461 8.76205e+015
+263 402 8.72376e+015
+48 12 8.65048e+015
+29 30 8.63958e+015
+298 181 8.63532e+015
+355 128 8.63345e+015
+65 232 8.61791e+015
+215 280 8.59341e+015
+330 141 8.59127e+015
+232 125 8.55018e+015
+259 165 8.51436e+015
+357 166 8.47488e+015
+164 73 8.46128e+015
+482 299 8.40801e+015
+50 288 8.40044e+015
+140 19 8.38139e+015
+363 130 8.37969e+015
+65 319 8.34467e+015
+296 332 8.33559e+015
+140 182 8.30998e+015
+544 457 8.29851e+015
+129 74 8.29655e+015
+539 13 8.29651e+015
+49 25 8.2952e+015
+412 45 8.26158e+015
+164 278 8.25562e+015
+459 264 8.2535e+015
+450 374 8.2514e+015
+510 129 8.24726e+015
+56 65 8.23219e+015
+445 118 8.21604e+015
+169 55 8.21473e+015
+165 357 8.21315e+015
+367 143 8.20687e+015
+283 51 8.20246e+015
+103 76 8.2e+015
+229 291 8.1991e+015
+190 360 8.19794e+015
+388 164 8.13453e+015
+276 353 8.1224e+015
+7 9 8.11508e+015
+498 225 8.10282e+015
+333 258 8.08282e+015
+329 90 8.0467e+015
+46 12 8.04558e+015
+6 65 8.03916e+015
+110 94 8.01879e+015
+539 457 8.01409e+015
+89 258 8.01138e+015
+248 316 8.00559e+015
+272 316 8.00454e+015
+544 4 8.00324e+015
+54 65 7.98478e+015
+87 149 7.97937e+015
+227 186 7.97444e+015
+40 296 7.97183e+015
+145 161 7.89819e+015
+142 393 7.88133e+015
+176 95 7.87442e+015
+414 65 7.87156e+015
+248 314 7.84723e+015
+162 96 7.82497e+015
+231 199 7.82321e+015
+437 319 7.81067e+015
+9 9 7.80492e+015
+110 179 7.79472e+015
+65 59 7.79315e+015
+218 105 7.78855e+015
+189 218 7.78829e+015
+165 98 7.78488e+015
+360 141 7.77324e+015
+523 61 7.76701e+015
+70 477 7.76312e+015
+97 448 7.7568e+015
+172 55 7.75612e+015
+174 95 7.75516e+015
+485 44 7.75278e+015
+346 240 7.75102e+015
+298 179 7.74254e+015
+523 63 7.74245e+015
+561 226 7.73436e+015
+280 49 7.72284e+015
+62 60 7.70461e+015
+304 190 7.68991e+015
+210 34 7.68942e+015
+507 169 7.67754e+015
+265 30 7.65991e+015
+490 139 7.65643e+015
+218 98 7.65625e+015
+362 259 7.64293e+015
+160 146 7.62483e+015
+47 81 7.61382e+015
+563 225 7.60052e+015
+364 141 7.5996e+015
+190 350 7.59881e+015
+524 187 7.59353e+015
+324 315 7.58777e+015
+153 235 7.58294e+015
+329 13 7.58093e+015
+448 218 7.56523e+015
+493 81 7.56234e+015
+284 73 7.56132e+015
+344 108 7.55912e+015
+110 136 7.55653e+015
+217 147 7.55542e+015
+124 271 7.54108e+015
+517 20 7.53994e+015
+44 98 7.51041e+015
+167 313 7.50921e+015
+345 350 7.43419e+015
+413 298 7.42997e+015
+463 27 7.42e+015
+37 297 7.41912e+015
+423 332 7.41837e+015
+215 74 7.41734e+015
+37 170 7.40169e+015
+302 169 7.40125e+015
+301 264 7.39697e+015
+576 15 7.38729e+015
+273 182 7.37953e+015
+464 280 7.3666e+015
+265 32 7.36644e+015
+506 6 7.36418e+015
+503 164 7.3641e+015
+430 148 7.36092e+015
+223 218 7.3606e+015
+245 207 7.35793e+015
+115 392 7.34232e+015
+568 42 7.33521e+015
+385 324 7.33458e+015
+165 179 7.32835e+015
+278 219 7.32565e+015
+223 14 7.30214e+015
+346 276 7.2694e+015
+217 145 7.25571e+015
+248 399 7.25174e+015
+159 182 7.25073e+015
+421 165 7.24843e+015
+223 433 7.22101e+015
+433 158 7.20538e+015
+349 181 7.19205e+015
+455 85 7.17733e+015
+206 434 7.15029e+015
+274 132 7.14783e+015
+46 355 7.14417e+015
+109 38 7.14129e+015
+83 136 7.14074e+015
+540 406 7.11184e+015
+395 164 7.09581e+015
+257 147 7.08555e+015
+282 73 7.08548e+015
+175 20 7.08271e+015
+358 319 7.07519e+015
+109 98 7.07359e+015
+305 439 7.07185e+015
+373 392 7.06939e+015
+470 121 7.05905e+015
+174 312 7.04755e+015
+279 353 7.04053e+015
+509 174 7.0396e+015
+111 110 7.03544e+015
+377 68 7.0336e+015
+61 134 7.01473e+015
+276 317 7.00448e+015
+165 181 6.99774e+015
+522 264 6.98894e+015
+386 326 6.9889e+015
+481 84 6.98686e+015
+392 49 6.98398e+015
+271 168 6.97705e+015
+379 338 6.97244e+015
+272 132 6.95336e+015
+380 107 6.95312e+015
+389 17 6.93794e+015
+297 69 6.92724e+015
+420 47 6.92133e+015
+365 301 6.91788e+015
+561 475 6.91699e+015
+488 44 6.90854e+015
+193 218 6.89572e+015
+360 164 6.89052e+015
+131 133 6.89027e+015
+153 196 6.88461e+015
+453 85 6.88281e+015
+272 73 6.88214e+015
+419 165 6.88133e+015
+35 31 6.8805e+015
+407 198 6.83126e+015
+357 11 6.82233e+015
+450 87 6.82229e+015
+155 235 6.81604e+015
+4 9 6.79824e+015
+523 123 6.78751e+015
+192 143 6.78352e+015
+436 379 6.77494e+015
+42 62 6.76692e+015
+168 18 6.76109e+015
+359 11 6.76074e+015
+229 293 6.75748e+015
+142 185 6.74354e+015
+221 151 6.74146e+015
+557 463 6.72087e+015
+540 98 6.71412e+015
+309 440 6.70325e+015
+483 363 6.69041e+015
+208 55 6.67502e+015
+391 164 6.67414e+015
+358 66 6.66834e+015
+574 178 6.6632e+015
+373 85 6.65456e+015
+247 219 6.65228e+015
+164 209 6.64711e+015
+56 78 6.61816e+015
+507 162 6.61515e+015
+145 16 6.60409e+015
+541 128 6.60219e+015
+523 344 6.59443e+015
+194 216 6.59237e+015
+494 139 6.59128e+015
+474 247 6.57542e+015
+269 54 6.57475e+015
+447 8 6.57221e+015
+247 207 6.5528e+015
+510 100 6.52551e+015
+411 21 6.50728e+015
+448 444 6.5024e+015
+272 170 6.50039e+015
+158 96 6.48841e+015
+449 117 6.48535e+015
+120 115 6.48409e+015
+295 421 6.48322e+015
+272 285 6.4797e+015
+200 313 6.47652e+015
+325 426 6.47238e+015
+331 89 6.45374e+015
+575 459 6.45101e+015
+549 40 6.44879e+015
+191 206 6.44792e+015
+470 238 6.44618e+015
+527 18 6.44383e+015
+56 364 6.4292e+015
+34 267 6.4132e+015
+139 99 6.4113e+015
+189 145 6.39346e+015
+523 346 6.39249e+015
+473 203 6.38156e+015
+105 223 6.37657e+015
+157 91 6.36535e+015
+36 177 6.36322e+015
+138 173 6.35443e+015
+346 297 6.3537e+015
+340 122 6.35264e+015
+510 4 6.34311e+015
+527 347 6.34187e+015
+107 429 6.3406e+015
+273 295 6.33987e+015
+411 66 6.33787e+015
+542 209 6.33767e+015
+57 75 6.33343e+015
+487 264 6.33298e+015
+509 17 6.32299e+015
+409 45 6.31542e+015
+250 402 6.31462e+015
+160 137 6.30557e+015
+298 274 6.28911e+015
+326 165 6.27908e+015
+365 105 6.27348e+015
+279 136 6.25062e+015
+313 76 6.24814e+015
+332 92 6.24343e+015
+277 182 6.2403e+015
+91 290 6.23622e+015
+92 254 6.22997e+015
+162 169 6.21626e+015
+505 164 6.21217e+015
+117 426 6.21193e+015
+158 112 6.20926e+015
+309 373 6.2092e+015
+528 363 6.20746e+015
+221 106 6.20226e+015
+131 71 6.19693e+015
+344 111 6.1799e+015
+85 61 6.17605e+015
+119 447 6.16372e+015
+340 166 6.16287e+015
+541 130 6.15389e+015
+132 1 6.15115e+015
+541 133 6.14911e+015
+84 213 6.14283e+015
+58 204 6.1419e+015
+528 361 6.13237e+015
+512 78 6.11581e+015
+205 308 6.10623e+015
+305 194 6.10597e+015
+258 161 6.10122e+015
+126 26 6.10016e+015
+276 331 6.09946e+015
+76 8 6.09448e+015
+178 273 6.08154e+015
+114 95 6.07127e+015
+220 290 6.06231e+015
+423 49 6.05786e+015
+118 76 6.03517e+015
+196 132 6.03418e+015
+342 164 6.0333e+015
+59 253 6.02013e+015
+273 219 6.00886e+015
+108 60 6.00623e+015
+488 58 5.99886e+015
+284 198 5.99048e+015
+196 128 5.98631e+015
+215 124 5.98579e+015
+71 149 5.98069e+015
+444 451 5.97756e+015
+445 123 5.92672e+015
+483 142 5.9232e+015
+282 391 5.9062e+015
+510 82 5.90513e+015
+114 169 5.90262e+015
+153 112 5.90032e+015
+340 164 5.89964e+015
+526 360 5.8871e+015
+88 216 5.87998e+015
+156 95 5.87742e+015
+301 105 5.87129e+015
+155 91 5.86753e+015
+83 476 5.86163e+015
+514 97 5.85656e+015
+71 146 5.84604e+015
+572 179 5.83433e+015
+520 122 5.82955e+015
+337 13 5.82888e+015
+68 419 5.81993e+015
+55 145 5.81768e+015
+402 186 5.81553e+015
+45 339 5.80807e+015
+407 46 5.80804e+015
+88 368 5.80221e+015
+137 171 5.79479e+015
+102 236 5.78264e+015
+572 406 5.7781e+015
+88 207 5.76228e+015
+295 269 5.75857e+015
+442 240 5.7584e+015
+107 29 5.75522e+015
+333 67 5.7149e+015
+280 130 5.70624e+015
+266 16 5.70283e+015
+33 30 5.69858e+015
+351 145 5.68772e+015
+333 202 5.68675e+015
+371 89 5.68116e+015
+353 294 5.67324e+015
+78 474 5.66952e+015
+396 317 5.65752e+015
+268 279 5.65453e+015
+463 199 5.65176e+015
+575 13 5.64855e+015
+87 63 5.64771e+015
+278 391 5.63816e+015
+78 271 5.63809e+015
+223 113 5.63412e+015
+328 181 5.63258e+015
+76 30 5.63077e+015
+155 114 5.63012e+015
+189 216 5.62902e+015
+92 257 5.62534e+015
+471 212 5.61904e+015
+527 344 5.61788e+015
+481 451 5.61388e+015
+423 46 5.61092e+015
+94 257 5.58599e+015
+497 66 5.58362e+015
+394 63 5.57384e+015
+324 164 5.56671e+015
+453 102 5.54713e+015
+271 185 5.5429e+015
+155 112 5.53761e+015
+33 218 5.53077e+015
+472 266 5.52624e+015
+166 20 5.52097e+015
+506 361 5.50997e+015
+91 376 5.50327e+015
+150 112 5.49545e+015
+11 78 5.47692e+015
+86 311 5.47684e+015
+104 57 5.47349e+015
+349 145 5.45487e+015
+418 83 5.44893e+015
+357 282 5.44836e+015
+287 397 5.42968e+015
+376 338 5.41419e+015
+233 33 5.40912e+015
+174 187 5.40763e+015
+511 96 5.39734e+015
+464 196 5.39451e+015
+31 235 5.37917e+015
+468 204 5.37727e+015
+514 203 5.37339e+015
+161 115 5.35506e+015
+364 180 5.35152e+015
+164 206 5.34659e+015
+357 63 5.33729e+015
+50 155 5.33467e+015
+302 176 5.31294e+015
+452 62 5.3029e+015
+17 343 5.30282e+015
+525 173 5.30211e+015
+578 43 5.30082e+015
+254 9 5.29934e+015
+330 67 5.29908e+015
+234 198 5.29706e+015
+448 124 5.28372e+015
+451 438 5.28174e+015
+392 215 5.27779e+015
+480 440 5.27008e+015
+437 240 5.26768e+015
+529 399 5.26396e+015
+418 87 5.25974e+015
+405 81 5.24948e+015
+190 278 5.24581e+015
+540 101 5.24217e+015
+383 162 5.24092e+015
+418 283 5.23771e+015
+563 323 5.23664e+015
+43 81 5.23314e+015
+238 161 5.22563e+015
+189 313 5.22064e+015
+540 41 5.21851e+015
+424 399 5.21607e+015
+437 338 5.20784e+015
+61 253 5.20172e+015
+91 276 5.19983e+015
+544 7 5.19966e+015
+169 58 5.19958e+015
+449 140 5.19718e+015
+48 221 5.19717e+015
+12 81 5.19671e+015
+466 123 5.18847e+015
+10 103 5.18157e+015
+185 289 5.17232e+015
+249 366 5.1722e+015
+114 1 5.15984e+015
+279 132 5.15468e+015
+188 278 5.15123e+015
+217 292 5.1509e+015
+211 32 5.14491e+015
+229 13 5.14459e+015
+537 393 5.1387e+015
+113 177 5.13731e+015
+291 88 5.13172e+015
+136 136 5.13097e+015
+560 228 5.12858e+015
+550 58 5.12703e+015
+244 293 5.12603e+015
+340 109 5.12377e+015
+441 22 5.11863e+015
+133 237 5.11259e+015
+467 236 5.11005e+015
+407 81 5.10702e+015
+31 218 5.10508e+015
+185 135 5.10383e+015
+371 83 5.10028e+015
+404 376 5.09842e+015
+319 165 5.08936e+015
+363 357 5.08887e+015
+247 366 5.0747e+015
+280 438 5.07151e+015
+86 134 5.07083e+015
+358 241 5.06757e+015
+261 140 5.05702e+015
+394 215 5.04991e+015
+422 399 5.04467e+015
+484 329 5.03272e+015
+455 162 5.02962e+015
+570 451 5.02918e+015
+323 146 5.0061e+015
+529 397 4.99778e+015
+432 381 4.99555e+015
+175 272 4.98751e+015
+468 208 4.98528e+015
+569 382 4.97789e+015
+335 435 4.97337e+015
+424 63 4.96562e+015
+472 23 4.95028e+015
+31 220 4.94779e+015
+256 220 4.92813e+015
+92 444 4.91662e+015
+153 115 4.91553e+015
+543 213 4.91041e+015
+48 234 4.89633e+015
+87 197 4.88871e+015
+486 139 4.88429e+015
+198 195 4.8826e+015
+163 252 4.87804e+015
+454 116 4.8761e+015
+327 105 4.87418e+015
+213 32 4.86865e+015
+253 74 4.865e+015
+571 446 4.85498e+015
+119 130 4.85382e+015
+227 130 4.85209e+015
+259 35 4.81799e+015
+328 214 4.81783e+015
+292 335 4.81598e+015
+272 64 4.79905e+015
+306 449 4.79636e+015
+108 76 4.79398e+015
+424 376 4.79083e+015
+110 58 4.79051e+015
+65 251 4.78569e+015
+335 218 4.78495e+015
+33 110 4.77355e+015
+394 317 4.77167e+015
+64 253 4.75913e+015
+155 318 4.75865e+015
+166 285 4.74892e+015
+218 208 4.74652e+015
+41 339 4.74357e+015
+135 179 4.7376e+015
+400 168 4.73459e+015
+467 138 4.73415e+015
+87 144 4.73269e+015
+516 42 4.73231e+015
+322 426 4.72644e+015
+238 95 4.72048e+015
+239 164 4.72036e+015
+466 24 4.70513e+015
+504 143 4.70109e+015
+253 76 4.69658e+015
+382 338 4.69303e+015
+182 343 4.69016e+015
+163 62 4.68347e+015
+163 254 4.67247e+015
+525 37 4.66653e+015
+530 142 4.66339e+015
+478 243 4.66275e+015
+384 258 4.6562e+015
+167 116 4.65606e+015
+382 67 4.64997e+015
+537 93 4.64151e+015
+538 138 4.64031e+015
+103 198 4.63946e+015
+147 449 4.63169e+015
+413 6 4.62098e+015
+83 171 4.61519e+015
+150 2 4.61164e+015
+387 128 4.60379e+015
+275 139 4.59988e+015
+319 187 4.59445e+015
+253 385 4.59171e+015
+157 235 4.59166e+015
+519 63 4.59094e+015
+40 355 4.58388e+015
+340 474 4.57743e+015
+215 97 4.56755e+015
+78 197 4.56594e+015
+282 418 4.56574e+015
+473 6 4.5397e+015
+139 178 4.53815e+015
+421 298 4.53675e+015
+522 426 4.53611e+015
+187 265 4.53393e+015
+183 137 4.53284e+015
+216 175 4.52812e+015
+134 147 4.51471e+015
+214 94 4.51217e+015
+448 438 4.5118e+015
+190 329 4.51141e+015
+403 188 4.51075e+015
+222 116 4.51063e+015
+250 220 4.50129e+015
+149 302 4.49582e+015
+62 371 4.4795e+015
+362 65 4.47793e+015
+39 238 4.47767e+015
+267 288 4.47723e+015
+279 143 4.47577e+015
+259 392 4.47559e+015
+100 445 4.47148e+015
+92 60 4.46587e+015
+87 181 4.46059e+015
+217 425 4.45219e+015
+310 446 4.45165e+015
+242 421 4.44654e+015
+70 96 4.44605e+015
+168 118 4.444e+015
+280 419 4.4434e+015
+276 214 4.44231e+015
+359 53 4.43677e+015
+577 245 4.43656e+015
+343 200 4.43302e+015
+261 71 4.42276e+015
+102 162 4.41928e+015
+373 241 4.41897e+015
+279 145 4.40969e+015
+364 101 4.4096e+015
+362 244 4.40613e+015
+579 245 4.40544e+015
+388 126 4.39825e+015
+397 160 4.3954e+015
+337 264 4.38359e+015
+150 398 4.37732e+015
+89 181 4.36602e+015
+113 243 4.36491e+015
+125 78 4.3589e+015
+499 80 4.35209e+015
+53 360 4.33591e+015
+396 104 4.32451e+015
+190 109 4.32091e+015
+516 74 4.31815e+015
+186 202 4.31272e+015
+12 204 4.31087e+015
+162 19 4.3092e+015
+65 370 4.30658e+015
+161 21 4.30602e+015
+438 468 4.30456e+015
+184 142 4.30183e+015
+514 118 4.29911e+015
+22 48 4.28904e+015
+526 221 4.2872e+015
+392 20 4.28015e+015
+172 16 4.27739e+015
+247 362 4.27709e+015
+110 2 4.2701e+015
+181 165 4.26502e+015
+48 162 4.25464e+015
+342 47 4.24882e+015
+220 315 4.24122e+015
+9 234 4.23953e+015
+175 240 4.23739e+015
+220 212 4.23704e+015
+163 186 4.23546e+015
+345 166 4.22736e+015
+67 253 4.22029e+015
+354 12 4.19731e+015
+130 477 4.19719e+015
+105 360 4.19556e+015
+541 141 4.19235e+015
+193 329 4.18696e+015
+10 75 4.18588e+015
+196 111 4.18505e+015
+270 108 4.18468e+015
+530 96 4.17792e+015
+114 215 4.17605e+015
+272 145 4.1724e+015
+104 307 4.17169e+015
+441 454 4.17059e+015
+209 161 4.1566e+015
+107 108 4.15094e+015
+406 164 4.15091e+015
+402 143 4.14997e+015
+366 336 4.14731e+015
+565 323 4.1441e+015
+552 377 4.13962e+015
+277 145 4.13664e+015
+509 58 4.12715e+015
+509 61 4.12355e+015
+517 183 4.12309e+015
+283 396 4.12029e+015
+247 107 4.11978e+015
+392 17 4.11225e+015
+136 181 4.10368e+015
+173 240 4.10347e+015
+43 146 4.10324e+015
+445 205 4.10051e+015
+567 180 4.1003e+015
+389 124 4.09965e+015
+172 18 4.09906e+015
+192 292 4.09723e+015
+487 375 4.09374e+015
+392 159 4.09307e+015
+204 294 4.08454e+015
+255 107 4.08104e+015
+84 72 4.08053e+015
+336 62 4.07372e+015
+382 102 4.06961e+015
+388 138 4.05956e+015
+277 187 4.05718e+015
+355 255 4.05615e+015
+512 361 4.05252e+015
+212 145 4.05185e+015
+226 112 4.05122e+015
+591 19 4.05046e+015
+283 195 4.04689e+015
+182 95 4.04553e+015
+298 25 4.04127e+015
+74 96 4.0379e+015
+268 242 4.03772e+015
+147 78 4.03733e+015
+284 134 4.03496e+015
+277 111 4.03344e+015
+285 164 4.02655e+015
+209 419 4.02531e+015
+97 445 4.02458e+015
+378 64 4.02349e+015
+438 182 4.02348e+015
+420 66 4.0207e+015
+320 336 4.02049e+015
+213 22 4.01946e+015
+188 109 4.01707e+015
+433 81 4.01616e+015
+263 284 4.01596e+015
+288 51 4.01554e+015
+362 63 4.00877e+015
+391 53 4.0048e+015
+142 449 3.99284e+015
+353 339 3.991e+015
+187 313 3.9889e+015
+125 80 3.98881e+015
+155 295 3.9838e+015
+325 133 3.98067e+015
+202 308 3.97867e+015
+302 195 3.97678e+015
+376 161 3.97664e+015
+242 58 3.97376e+015
+388 2 3.96902e+015
+323 14 3.96875e+015
+455 48 3.96638e+015
+262 392 3.96625e+015
+269 58 3.96559e+015
+186 308 3.96349e+015
+97 38 3.96311e+015
+418 449 3.96288e+015
+128 78 3.96281e+015
+447 351 3.96136e+015
+122 123 3.96118e+015
+331 413 3.95229e+015
+136 239 3.9485e+015
+526 197 3.94638e+015
+17 434 3.94585e+015
+484 325 3.94476e+015
+196 124 3.94034e+015
+277 190 3.93557e+015
+480 166 3.93113e+015
+402 44 3.93066e+015
+394 104 3.92819e+015
+39 286 3.9261e+015
+542 95 3.92531e+015
+190 171 3.925e+015
+298 419 3.92133e+015
+110 265 3.91304e+015
+376 316 3.91008e+015
+533 394 3.90574e+015
+426 379 3.90362e+015
+437 280 3.89705e+015
+401 164 3.89568e+015
+346 47 3.89363e+015
+224 128 3.89182e+015
+180 136 3.8837e+015
+319 163 3.88275e+015
+380 162 3.8823e+015
+250 90 3.88128e+015
+318 459 3.88042e+015
+471 269 3.87578e+015
+569 423 3.87568e+015
+9 32 3.87472e+015
+129 428 3.87461e+015
+186 21 3.87241e+015
+541 163 3.86085e+015
+484 163 3.85838e+015
+318 336 3.85803e+015
+55 172 3.84885e+015
+72 164 3.8467e+015
+446 21 3.8423e+015
+70 128 3.83933e+015
+130 475 3.83648e+015
+51 453 3.8362e+015
+381 120 3.83275e+015
+98 257 3.8324e+015
+264 71 3.82588e+015
+329 216 3.82556e+015
+33 164 3.82484e+015
+264 141 3.82152e+015
+290 311 3.81741e+015
+533 161 3.80303e+015
+254 78 3.8018e+015
+162 118 3.80122e+015
+38 82 3.80076e+015
+110 326 3.79766e+015
+253 388 3.79345e+015
+394 106 3.79293e+015
+243 281 3.79254e+015
+547 141 3.7894e+015
+299 295 3.78912e+015
+205 163 3.78628e+015
+201 294 3.7855e+015
+148 397 3.78285e+015
+167 105 3.78282e+015
+287 262 3.77659e+015
+461 162 3.76947e+015
+26 131 3.76894e+015
+103 258 3.76682e+015
+247 105 3.76417e+015
+576 125 3.75977e+015
+572 326 3.75924e+015
+165 116 3.75766e+015
+110 262 3.75688e+015
+88 80 3.7524e+015
+425 184 3.75032e+015
+290 397 3.74903e+015
+240 192 3.74826e+015
+541 248 3.74664e+015
+234 262 3.74181e+015
+537 262 3.7332e+015
+85 40 3.73216e+015
+195 255 3.72918e+015
+450 180 3.72004e+015
+508 201 3.71596e+015
+317 103 3.71399e+015
+264 391 3.71368e+015
+106 432 3.71352e+015
+137 72 3.71026e+015
+75 477 3.70809e+015
+575 127 3.70264e+015
+561 142 3.69745e+015
+222 87 3.69363e+015
+398 356 3.69109e+015
+315 446 3.68667e+015
+452 178 3.68555e+015
+365 201 3.68515e+015
+187 182 3.68437e+015
+329 26 3.68118e+015
+449 143 3.68105e+015
+574 330 3.67649e+015
+281 124 3.67395e+015
+265 312 3.67123e+015
+558 79 3.66765e+015
+162 126 3.66756e+015
+421 141 3.66739e+015
+289 139 3.6669e+015
+207 163 3.66495e+015
+513 42 3.66214e+015
+391 118 3.65952e+015
+183 139 3.65893e+015
+523 78 3.65316e+015
+67 251 3.64964e+015
+249 386 3.64614e+015
+382 413 3.64535e+015
+355 342 3.64476e+015
+112 215 3.64385e+015
+382 25 3.64342e+015
+162 152 3.64124e+015
+449 126 3.64072e+015
+96 95 3.6407e+015
+520 201 3.64063e+015
+547 217 3.63414e+015
+521 185 3.63369e+015
+277 179 3.6311e+015
+548 139 3.62886e+015
+226 198 3.6255e+015
+408 140 3.61657e+015
+515 381 3.61233e+015
+167 107 3.60938e+015
+315 336 3.60863e+015
+552 383 3.60044e+015
+479 286 3.59762e+015
+241 190 3.59377e+015
+149 130 3.59165e+015
+65 182 3.58934e+015
+525 398 3.58806e+015
+480 46 3.58429e+015
+100 257 3.57696e+015
+142 99 3.56521e+015
+8 115 3.56335e+015
+563 160 3.56276e+015
+508 203 3.56236e+015
+86 363 3.55986e+015
+109 43 3.55887e+015
+240 195 3.55086e+015
+115 359 3.54838e+015
+319 386 3.53983e+015
+287 215 3.53938e+015
+431 81 3.53749e+015
+396 23 3.52756e+015
+181 155 3.52638e+015
+125 125 3.52555e+015
+62 368 3.51843e+015
+526 79 3.51777e+015
+115 130 3.51598e+015
+149 232 3.50933e+015
+385 334 3.50922e+015
+337 389 3.5047e+015
+383 321 3.50424e+015
+114 212 3.50407e+015
+109 145 3.50356e+015
+111 358 3.49989e+015
+307 359 3.4979e+015
+396 21 3.4962e+015
+407 429 3.49436e+015
+200 129 3.49259e+015
+178 331 3.49259e+015
+65 275 3.49177e+015
+404 164 3.48909e+015
+409 26 3.48865e+015
+337 428 3.48563e+015
+365 165 3.48493e+015
+563 320 3.48318e+015
+541 381 3.47948e+015
+204 160 3.47119e+015
+1 383 3.47108e+015
+289 348 3.46974e+015
+575 100 3.46945e+015
+596 363 3.46935e+015
+337 391 3.46215e+015
+452 46 3.46181e+015
+158 305 3.46024e+015
+287 213 3.45961e+015
+311 79 3.45315e+015
+181 168 3.45312e+015
+523 424 3.45144e+015
+281 223 3.44712e+015
+330 334 3.44109e+015
+94 93 3.44068e+015
+225 51 3.4364e+015
+487 377 3.43608e+015
+307 169 3.43314e+015
+119 95 3.43301e+015
+342 466 3.42913e+015
+342 196 3.42715e+015
+112 212 3.42622e+015
+314 165 3.41991e+015
+292 122 3.41867e+015
+229 288 3.41017e+015
+278 224 3.40771e+015
+17 65 3.40464e+015
+534 121 3.40437e+015
+470 42 3.3976e+015
+483 204 3.39718e+015
+302 333 3.39641e+015
+239 220 3.3953e+015
+306 361 3.38798e+015
+483 287 3.38468e+015
+406 354 3.38117e+015
+372 69 3.37862e+015
+386 282 3.37505e+015
+228 260 3.37409e+015
+524 422 3.3739e+015
+436 122 3.37278e+015
+275 204 3.37226e+015
+185 94 3.37073e+015
+209 155 3.36802e+015
+378 183 3.36655e+015
+199 329 3.36633e+015
+13 435 3.36258e+015
+41 182 3.3584e+015
+203 318 3.35591e+015
+149 132 3.35067e+015
+308 354 3.3502e+015
+478 11 3.34875e+015
+96 423 3.34808e+015
+232 260 3.34485e+015
+160 33 3.34352e+015
+506 380 3.34213e+015
+18 236 3.34171e+015
+212 97 3.34148e+015
+471 82 3.3409e+015
+163 349 3.33994e+015
+357 267 3.33833e+015
+477 339 3.3345e+015
+503 18 3.33393e+015
+435 237 3.33352e+015
+409 64 3.33331e+015
+505 261 3.3256e+015
+224 149 3.32524e+015
+86 377 3.32504e+015
+306 90 3.32371e+015
+12 114 3.32059e+015
+432 237 3.31977e+015
+513 182 3.31945e+015
+101 6 3.31905e+015
+94 375 3.31555e+015
+212 150 3.31512e+015
+455 177 3.31236e+015
+494 58 3.30749e+015
+46 408 3.30304e+015
+340 466 3.30294e+015
+580 346 3.30208e+015
+360 362 3.29545e+015
+267 246 3.28713e+015
+125 96 3.28553e+015
+83 181 3.28466e+015
+336 144 3.2832e+015
+199 166 3.28117e+015
+314 103 3.28093e+015
+190 136 3.27858e+015
+215 128 3.27513e+015
+368 109 3.27169e+015
+438 159 3.26882e+015
+359 368 3.2658e+015
+511 103 3.26166e+015
+335 391 3.26073e+015
+503 260 3.25899e+015
+129 259 3.25731e+015
+219 115 3.25684e+015
+43 475 3.25589e+015
+261 199 3.24923e+015
+178 56 3.24922e+015
+295 122 3.24521e+015
+550 383 3.24246e+015
+513 442 3.23843e+015
+101 40 3.23613e+015
+174 201 3.23507e+015
+548 381 3.2344e+015
+530 159 3.23341e+015
+594 101 3.23293e+015
+558 19 3.23263e+015
+291 50 3.23232e+015
+135 322 3.23027e+015
+248 395 3.2259e+015
+25 118 3.22082e+015
+298 269 3.22045e+015
+167 433 3.21596e+015
+542 444 3.21191e+015
+211 396 3.20764e+015
+529 270 3.20543e+015
+94 19 3.20415e+015
+72 187 3.20177e+015
+251 164 3.20054e+015
+475 340 3.19942e+015
+574 140 3.19815e+015
+101 96 3.19627e+015
+499 266 3.19465e+015
+269 416 3.1945e+015
+406 143 3.19369e+015
+183 316 3.19345e+015
+284 299 3.19139e+015
+465 424 3.19094e+015
+311 299 3.18991e+015
+504 362 3.18918e+015
+213 396 3.1874e+015
+563 18 3.18262e+015
+265 249 3.17726e+015
+128 126 3.17417e+015
+171 451 3.16898e+015
+157 39 3.16796e+015
+306 363 3.16104e+015
+332 355 3.1596e+015
+527 160 3.15476e+015
+525 177 3.15423e+015
+442 97 3.15207e+015
+139 136 3.15195e+015
+385 166 3.15171e+015
+497 117 3.15167e+015
+115 277 3.14875e+015
+386 4 3.14803e+015
+113 76 3.14673e+015
+408 143 3.14588e+015
+214 439 3.14407e+015
+415 165 3.14187e+015
+279 330 3.14129e+015
+210 153 3.13695e+015
+267 68 3.13365e+015
+503 156 3.13075e+015
+155 57 3.12407e+015
+269 144 3.12247e+015
+411 264 3.12244e+015
+578 84 3.12239e+015
+387 451 3.11988e+015
+559 272 3.11966e+015
+65 477 3.11593e+015
+343 463 3.11439e+015
+304 160 3.11382e+015
+377 85 3.11161e+015
+385 91 3.11141e+015
+491 58 3.10996e+015
+319 105 3.10316e+015
+405 41 3.10294e+015
+298 138 3.10144e+015
+288 265 3.09256e+015
+215 289 3.08621e+015
+508 380 3.08565e+015
+76 110 3.08516e+015
+352 425 3.08327e+015
+432 268 3.07953e+015
+464 115 3.07528e+015
+419 141 3.07506e+015
+143 235 3.0746e+015
+310 354 3.07219e+015
+566 144 3.07091e+015
+186 101 3.06926e+015
+413 81 3.06752e+015
+164 434 3.0649e+015
+61 78 3.06407e+015
+502 43 3.06109e+015
+72 235 3.05997e+015
+150 79 3.05769e+015
+375 88 3.05581e+015
+250 150 3.05283e+015
+511 442 3.05275e+015
+82 100 3.04885e+015
+282 268 3.04868e+015
+112 354 3.04865e+015
+413 244 3.04143e+015
+339 391 3.03992e+015
+526 383 3.0347e+015
+471 142 3.03301e+015
+506 61 3.02856e+015
+510 206 3.02811e+015
+266 401 3.02651e+015
+343 142 3.02387e+015
+96 19 3.01898e+015
+35 200 3.01277e+015
+432 270 3.01154e+015
+125 216 3.00824e+015
+35 202 3.00223e+015
+283 124 2.99268e+015
+190 133 2.99241e+015
+37 202 2.99004e+015
+410 140 2.98948e+015
+413 264 2.98414e+015
+280 190 2.98257e+015
+248 260 2.98143e+015
+74 198 2.97949e+015
+97 456 2.97898e+015
+445 244 2.97696e+015
+361 48 2.97652e+015
+189 210 2.97488e+015
+528 30 2.97458e+015
+68 48 2.97445e+015
+509 442 2.97264e+015
+577 53 2.97216e+015
+323 29 2.97023e+015
+216 204 2.96959e+015
+440 97 2.96774e+015
+362 453 2.96768e+015
+548 181 2.96728e+015
+356 24 2.96723e+015
+378 317 2.96546e+015
+439 108 2.96237e+015
+325 258 2.96141e+015
+334 62 2.96122e+015
+278 86 2.96081e+015
+437 108 2.95963e+015
+224 125 2.95531e+015
+155 444 2.95231e+015
+464 354 2.95027e+015
+412 3 2.94807e+015
+98 164 2.94781e+015
+390 135 2.9453e+015
+391 325 2.94395e+015
+107 258 2.9439e+015
+232 31 2.94356e+015
+498 463 2.9428e+015
+564 156 2.94016e+015
+227 72 2.93656e+015
+321 27 2.93355e+015
+94 276 2.93132e+015
+84 100 2.93062e+015
+178 1 2.93045e+015
+107 260 2.92893e+015
+3 235 2.92459e+015
+402 259 2.92375e+015
+329 321 2.92186e+015
+106 263 2.91929e+015
+420 362 2.91923e+015
+94 367 2.9186e+015
+560 145 2.91761e+015
+180 270 2.91654e+015
+417 245 2.91483e+015
+444 114 2.91334e+015
+255 459 2.9103e+015
+430 151 2.90934e+015
+194 84 2.90609e+015
+578 81 2.90136e+015
+295 410 2.89958e+015
+584 346 2.89711e+015
+147 97 2.89463e+015
+71 407 2.89458e+015
+114 143 2.89119e+015
+322 104 2.88843e+015
+173 416 2.88627e+015
+275 51 2.88505e+015
+480 329 2.88332e+015
+268 92 2.8818e+015
+367 88 2.87988e+015
+313 300 2.87974e+015
+166 379 2.87827e+015
+409 66 2.87748e+015
+289 112 2.87696e+015
+191 210 2.87465e+015
+298 140 2.87194e+015
+242 33 2.86805e+015
+200 76 2.86799e+015
+68 316 2.86764e+015
+561 272 2.85984e+015
+495 474 2.85949e+015
+550 223 2.85881e+015
+191 188 2.85766e+015
+66 26 2.85354e+015
+120 55 2.85331e+015
+335 428 2.84993e+015
+437 25 2.84491e+015
+594 425 2.84083e+015
+272 68 2.83649e+015
+114 261 2.83237e+015
+541 21 2.83233e+015
+148 394 2.83003e+015
+26 44 2.82751e+015
+275 78 2.82588e+015
+51 39 2.82376e+015
+233 406 2.82369e+015
+538 40 2.8226e+015
+350 273 2.82012e+015
+401 318 2.81892e+015
+412 416 2.81622e+015
+104 35 2.81035e+015
+314 163 2.80952e+015
+178 333 2.80861e+015
+375 225 2.80743e+015
+425 103 2.80576e+015
+150 151 2.80298e+015
+210 97 2.80296e+015
+562 149 2.7984e+015
+268 119 2.79669e+015
+261 369 2.79396e+015
+280 121 2.78862e+015
+258 459 2.78591e+015
+250 192 2.7843e+015
+241 155 2.78421e+015
+299 87 2.78264e+015
+575 165 2.78068e+015
+363 48 2.77829e+015
+22 131 2.77755e+015
+196 189 2.77523e+015
+286 246 2.7722e+015
+552 222 2.76881e+015
+511 135 2.76856e+015
+543 21 2.76724e+015
+13 112 2.76538e+015
+200 30 2.76279e+015
+173 106 2.75798e+015
+207 405 2.75706e+015
+266 131 2.75653e+015
+509 140 2.7553e+015
+413 284 2.75387e+015
+307 428 2.75256e+015
+181 16 2.75155e+015
+26 46 2.75089e+015
+335 142 2.74983e+015
+386 88 2.7487e+015
+564 145 2.74864e+015
+412 99 2.74468e+015
+70 22 2.7411e+015
+374 3 2.73928e+015
+183 382 2.73913e+015
+247 255 2.73329e+015
+127 109 2.73266e+015
+301 101 2.72978e+015
+486 239 2.72962e+015
+528 432 2.72956e+015
+258 370 2.72913e+015
+512 140 2.7279e+015
+232 288 2.72562e+015
+518 141 2.72528e+015
+309 33 2.72493e+015
+289 124 2.7247e+015
+33 260 2.72318e+015
+597 33 2.72298e+015
+287 167 2.72124e+015
+283 84 2.71966e+015
+184 166 2.71942e+015
+433 43 2.71779e+015
+423 372 2.71683e+015
+439 26 2.71493e+015
+484 6 2.71383e+015
+530 115 2.71303e+015
+571 203 2.70978e+015
+413 144 2.70564e+015
+184 340 2.70559e+015
+150 135 2.70487e+015
+371 338 2.70241e+015
+54 453 2.69461e+015
+414 219 2.69051e+015
+236 416 2.69026e+015
+391 450 2.6891e+015
+298 409 2.68892e+015
+91 285 2.68532e+015
+577 310 2.68518e+015
+189 255 2.68504e+015
+134 80 2.68336e+015
+583 38 2.68273e+015
+282 211 2.68186e+015
+480 168 2.68144e+015
+501 363 2.68137e+015
+385 65 2.67992e+015
+272 205 2.67577e+015
+155 161 2.67361e+015
+446 416 2.67267e+015
+133 91 2.67239e+015
+303 173 2.67083e+015
+444 128 2.67016e+015
+501 320 2.66744e+015
+408 162 2.66659e+015
+148 91 2.66583e+015
+1 381 2.66315e+015
+395 183 2.6624e+015
+36 76 2.66228e+015
+396 138 2.65629e+015
+412 418 2.65334e+015
+54 330 2.65214e+015
+288 308 2.65054e+015
+250 154 2.64992e+015
+40 308 2.64913e+015
+38 354 2.64517e+015
+302 87 2.64125e+015
+302 243 2.63261e+015
+196 167 2.63225e+015
+86 355 2.63167e+015
+236 403 2.63125e+015
+201 345 2.62993e+015
+444 444 2.6298e+015
+182 287 2.6288e+015
+181 382 2.62822e+015
+513 403 2.62501e+015
+207 203 2.62465e+015
+261 327 2.62314e+015
+251 182 2.62037e+015
+207 403 2.6199e+015
+145 140 2.61723e+015
+195 170 2.61144e+015
+182 202 2.60993e+015
+66 29 2.60975e+015
+387 419 2.60973e+015
+272 208 2.60905e+015
+371 118 2.60701e+015
+277 320 2.60637e+015
+149 312 2.60458e+015
+54 236 2.60093e+015
+212 134 2.59698e+015
+283 32 2.59378e+015
+147 233 2.59185e+015
+278 328 2.59118e+015
+266 244 2.59091e+015
+128 307 2.58956e+015
+202 394 2.58638e+015
+476 398 2.58551e+015
+501 145 2.58519e+015
+182 289 2.58338e+015
+390 130 2.58213e+015
+140 236 2.58184e+015
+302 245 2.58133e+015
+485 359 2.57911e+015
+228 282 2.57776e+015
+568 202 2.57684e+015
+415 221 2.57659e+015
+42 307 2.57633e+015
+275 209 2.57385e+015
+476 81 2.57273e+015
+97 366 2.57251e+015
+480 205 2.57058e+015
+403 15 2.56307e+015
+405 11 2.56244e+015
+137 61 2.56196e+015
+47 204 2.55981e+015
+349 125 2.55972e+015
+283 265 2.55886e+015
+413 183 2.55869e+015
+481 101 2.55682e+015
+531 120 2.55646e+015
+582 446 2.55618e+015
+321 120 2.55384e+015
+204 419 2.5537e+015
+191 420 2.5536e+015
+240 327 2.55314e+015
+130 111 2.55284e+015
+545 181 2.55103e+015
+77 162 2.551e+015
+226 282 2.54824e+015
+552 381 2.54494e+015
+130 216 2.5447e+015
+218 128 2.54378e+015
+219 398 2.54296e+015
+242 220 2.54244e+015
+382 451 2.54211e+015
+483 241 2.542e+015
+268 219 2.53905e+015
+332 242 2.53628e+015
+67 323 2.53491e+015
+253 182 2.53316e+015
+55 333 2.53108e+015
+183 378 2.53014e+015
+41 203 2.52845e+015
+126 73 2.52809e+015
+136 140 2.52593e+015
+231 364 2.52591e+015
+497 284 2.52483e+015
+146 235 2.52355e+015
+478 143 2.52161e+015
+338 182 2.52027e+015
+78 111 2.51893e+015
+188 300 2.51665e+015
+90 94 2.51476e+015
+284 215 2.508e+015
+502 460 2.50721e+015
+187 324 2.50679e+015
+175 125 2.50622e+015
+47 255 2.50586e+015
+282 386 2.50561e+015
+57 137 2.50492e+015
+223 399 2.50451e+015
+264 321 2.50344e+015
+86 360 2.50265e+015
+463 224 2.50213e+015
+50 231 2.50204e+015
+469 108 2.50155e+015
+266 203 2.50019e+015
+476 6 2.49789e+015
+273 94 2.49787e+015
+564 141 2.49586e+015
+245 388 2.49457e+015
+268 137 2.49186e+015
+31 256 2.49032e+015
+175 120 2.4901e+015
+332 357 2.49001e+015
+84 109 2.48981e+015
+14 47 2.48901e+015
+375 156 2.48798e+015
+80 406 2.48779e+015
+268 88 2.48634e+015
+578 48 2.48629e+015
+225 397 2.48347e+015
+255 4 2.48277e+015
+288 135 2.48216e+015
+43 408 2.48163e+015
+335 405 2.48046e+015
+174 122 2.48044e+015
+280 186 2.48042e+015
+4 33 2.47754e+015
+544 262 2.47645e+015
+511 298 2.47453e+015
+298 398 2.47126e+015
+130 306 2.46848e+015
+383 22 2.46807e+015
+240 150 2.46792e+015
+299 256 2.46774e+015
+181 1 2.46771e+015
+69 305 2.46599e+015
+215 314 2.46395e+015
+346 34 2.46271e+015
+318 99 2.46164e+015
+157 24 2.46125e+015
+222 72 2.46106e+015
+166 150 2.45983e+015
+283 338 2.45952e+015
+264 55 2.45759e+015
+412 430 2.456e+015
+230 179 2.45526e+015
+60 148 2.45523e+015
+540 186 2.4552e+015
+419 79 2.45519e+015
+82 369 2.45423e+015
+25 201 2.45301e+015
+585 39 2.45248e+015
+558 143 2.45196e+015
+94 372 2.45173e+015
+468 318 2.45005e+015
+248 184 2.44822e+015
+483 239 2.44816e+015
+299 254 2.44733e+015
+207 201 2.44713e+015
+199 98 2.44632e+015
+211 11 2.44234e+015
+497 282 2.44192e+015
+326 29 2.44109e+015
+335 407 2.43986e+015
+503 177 2.43936e+015
+494 340 2.43746e+015
+530 347 2.43656e+015
+435 182 2.43626e+015
+254 194 2.43435e+015
+217 429 2.43307e+015
+83 196 2.4321e+015
+306 258 2.43044e+015
+313 79 2.42828e+015
+251 184 2.42735e+015
+55 371 2.42716e+015
+67 202 2.427e+015
+405 9 2.42685e+015
+450 416 2.42143e+015
+227 285 2.42095e+015
+576 57 2.42056e+015
+167 152 2.41767e+015
+264 259 2.41751e+015
+130 109 2.41689e+015
+244 187 2.40624e+015
+528 437 2.40205e+015
+460 376 2.402e+015
+69 258 2.40175e+015
+247 405 2.39657e+015
+205 403 2.39416e+015
+186 270 2.39382e+015
+130 114 2.39366e+015
+424 261 2.38883e+015
+246 326 2.38506e+015
+113 338 2.38333e+015
+5 150 2.38224e+015
+393 135 2.38086e+015
+522 360 2.37815e+015
+124 341 2.37382e+015
+179 379 2.37139e+015
+333 330 2.37094e+015
+47 258 2.37073e+015
+135 58 2.36885e+015
+327 52 2.36784e+015
+479 455 2.3675e+015
+142 429 2.36727e+015
+64 312 2.36667e+015
+345 331 2.3655e+015
+397 46 2.36334e+015
+380 158 2.36212e+015
+595 103 2.36132e+015
+389 290 2.35781e+015
+342 330 2.35756e+015
+94 124 2.3568e+015
+71 389 2.35548e+015
+246 35 2.35452e+015
+478 7 2.35371e+015
+277 205 2.3528e+015
+391 205 2.35239e+015
+540 181 2.34839e+015
+111 206 2.34748e+015
+545 86 2.34652e+015
+544 440 2.34609e+015
+166 430 2.34185e+015
+149 23 2.34075e+015
+239 215 2.33881e+015
+374 151 2.33805e+015
+433 227 2.33718e+015
+104 262 2.33534e+015
+49 258 2.33525e+015
+106 183 2.32916e+015
+283 164 2.32816e+015
+269 260 2.32747e+015
+48 131 2.32626e+015
+552 181 2.32387e+015
+576 134 2.32188e+015
+180 141 2.32028e+015
+274 121 2.31373e+015
+268 139 2.30846e+015
+303 372 2.30733e+015
+212 162 2.30646e+015
+184 116 2.30518e+015
+242 244 2.30493e+015
+284 77 2.30458e+015
+381 88 2.3028e+015
+217 398 2.30135e+015
+107 382 2.29994e+015
+266 219 2.29973e+015
+148 192 2.2993e+015
+537 397 2.296e+015
+445 247 2.29595e+015
+156 79 2.294e+015
+443 351 2.29391e+015
+376 145 2.29276e+015
+277 427 2.29241e+015
+20 316 2.29217e+015
+205 345 2.29082e+015
+235 220 2.28852e+015
+391 97 2.28842e+015
+554 181 2.28837e+015
+405 76 2.28727e+015
+206 236 2.28552e+015
+248 346 2.28478e+015
+111 338 2.28336e+015
+518 17 2.28306e+015
+187 167 2.28212e+015
+130 409 2.28177e+015
+433 122 2.28031e+015
+119 170 2.27987e+015
+446 293 2.27941e+015
+373 144 2.27747e+015
+402 101 2.27662e+015
+57 101 2.26839e+015
+476 268 2.26775e+015
+286 350 2.264e+015
+45 122 2.26265e+015
+168 414 2.26251e+015
+282 215 2.26166e+015
+105 111 2.26163e+015
+450 325 2.26103e+015
+351 12 2.25848e+015
+303 403 2.25786e+015
+195 77 2.25755e+015
+567 60 2.25684e+015
+210 307 2.25672e+015
+478 221 2.25663e+015
+254 191 2.25273e+015
+191 122 2.25262e+015
+573 4 2.25196e+015
+500 104 2.25177e+015
+359 135 2.25015e+015
+310 220 2.24882e+015
+281 33 2.2468e+015
+548 281 2.24655e+015
+556 381 2.24584e+015
+574 135 2.24427e+015
+334 282 2.24407e+015
+74 61 2.24314e+015
+14 236 2.24295e+015
+217 396 2.24262e+015
+259 330 2.24147e+015
+338 47 2.2408e+015
+387 102 2.23839e+015
+402 99 2.23796e+015
+216 329 2.2378e+015
+198 466 2.23722e+015
+565 176 2.23636e+015
+525 281 2.23466e+015
+353 24 2.23412e+015
+151 316 2.23225e+015
+342 311 2.23107e+015
+185 304 2.23061e+015
+516 76 2.22888e+015
+37 167 2.22452e+015
+476 271 2.21687e+015
+129 117 2.21553e+015
+71 49 2.21397e+015
+313 32 2.21282e+015
+550 139 2.21046e+015
+344 322 2.21024e+015
+494 459 2.2095e+015
+450 197 2.20494e+015
+213 326 2.20297e+015
+151 91 2.20266e+015
+111 430 2.20096e+015
+276 194 2.19938e+015
+568 38 2.19804e+015
+502 122 2.19734e+015
+453 378 2.19632e+015
+547 302 2.1924e+015
+27 169 2.19124e+015
+309 55 2.18978e+015
+203 200 2.18947e+015
+193 87 2.1894e+015
+460 422 2.18864e+015
+375 147 2.18841e+015
+373 125 2.1835e+015
+281 36 2.18274e+015
+142 432 2.1818e+015
+419 411 2.18024e+015
+226 424 2.17766e+015
+573 56 2.17509e+015
+241 144 2.17338e+015
+210 133 2.17274e+015
+282 145 2.1703e+015
+97 454 2.16872e+015
+343 370 2.16777e+015
+415 98 2.1674e+015
+560 268 2.16646e+015
+540 183 2.16493e+015
+201 28 2.15949e+015
+556 245 2.15936e+015
+593 105 2.15835e+015
+497 265 2.15741e+015
+117 290 2.15614e+015
+145 24 2.15585e+015
+513 303 2.15521e+015
+346 327 2.1549e+015
+431 25 2.1549e+015
+270 218 2.15383e+015
+160 347 2.1535e+015
+347 414 2.15202e+015
+418 98 2.15199e+015
+44 253 2.15181e+015
+550 181 2.15135e+015
+260 271 2.14759e+015
+170 219 2.14684e+015
+520 242 2.14553e+015
+271 355 2.1449e+015
+86 109 2.14471e+015
+266 259 2.14323e+015
+600 274 2.14138e+015
+300 258 2.14059e+015
+157 194 2.1401e+015
+139 140 2.13816e+015
+504 460 2.13477e+015
+162 191 2.13467e+015
+509 365 2.13467e+015
+374 451 2.13358e+015
+304 243 2.13167e+015
+215 316 2.13091e+015
+259 108 2.13008e+015
+130 412 2.12978e+015
+330 356 2.1274e+015
+121 214 2.1239e+015
+157 122 2.1226e+015
+569 141 2.12092e+015
+240 315 2.11616e+015
+437 228 2.11473e+015
+290 184 2.1141e+015
+319 452 2.11375e+015
+267 108 2.11372e+015
+71 47 2.11169e+015
+189 269 2.11051e+015
+355 105 2.10836e+015
+433 1 2.1069e+015
+205 22 2.10664e+015
+128 81 2.10596e+015
+203 203 2.10531e+015
+308 166 2.10501e+015
+199 115 2.1035e+015
+133 412 2.10164e+015
+360 443 2.09998e+015
+484 235 2.09969e+015
+464 377 2.09907e+015
+200 8 2.09831e+015
+315 124 2.09816e+015
+32 79 2.09275e+015
+235 222 2.09095e+015
+349 270 2.08915e+015
+355 425 2.08893e+015
+393 11 2.0885e+015
+186 72 2.08831e+015
+15 212 2.08793e+015
+597 273 2.0864e+015
+20 254 2.08588e+015
+344 186 2.08396e+015
+95 387 2.08205e+015
+95 285 2.08175e+015
+539 79 2.08133e+015
+498 242 2.08113e+015
+53 369 2.08085e+015
+361 321 2.0805e+015
+286 307 2.07909e+015
+519 180 2.07663e+015
+557 475 2.07659e+015
+534 143 2.07587e+015
+202 404 2.07242e+015
+193 121 2.0724e+015
+346 322 2.07236e+015
+63 258 2.07131e+015
+474 451 2.07065e+015
+453 94 2.06947e+015
+142 257 2.06928e+015
+322 423 2.06916e+015
+277 264 2.06907e+015
+371 335 2.06826e+015
+511 352 2.06716e+015
+167 187 2.06698e+015
+183 57 2.06343e+015
+244 180 2.05941e+015
+458 164 2.05924e+015
+383 145 2.05854e+015
+527 267 2.0548e+015
+97 29 2.0545e+015
+267 262 2.04779e+015
+141 143 2.0469e+015
+279 33 2.04645e+015
+76 61 2.04482e+015
+575 333 2.04404e+015
+69 303 2.04305e+015
+127 331 2.04303e+015
+213 204 2.04105e+015
+466 213 2.03896e+015
+576 37 2.03877e+015
+57 302 2.03668e+015
+217 413 2.03485e+015
+567 224 2.03417e+015
+463 187 2.03365e+015
+101 29 2.03358e+015
+335 28 2.03225e+015
+53 333 2.03171e+015
+424 106 2.03141e+015
+556 366 2.03014e+015
+25 256 2.02872e+015
+452 416 2.02798e+015
+383 147 2.02597e+015
+359 125 2.02578e+015
+386 25 2.02456e+015
+288 31 2.02276e+015
+297 401 2.02187e+015
+9 222 2.02029e+015
+456 418 2.01978e+015
+36 233 2.01958e+015
+359 27 2.01941e+015
+17 212 2.01871e+015
+83 275 2.01639e+015
+40 200 2.01143e+015
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_7_3.txt b/test_data/harriscorners/hc_msc_0.00_0.15_7_3.txt
new file mode 100644
index 0000000..a447ec4
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_7_3.txt
@@ -0,0 +1,944 @@
+943
+245 95 8.29987e+019
+363 401 6.31582e+019
+274 366 6.21795e+019
+499 1 5.06707e+019
+251 13 4.65892e+019
+240 90 3.97539e+019
+122 44 3.67023e+019
+131 36 3.64636e+019
+507 122 3.63828e+019
+449 298 3.33565e+019
+65 343 3.30421e+019
+261 297 3.15072e+019
+344 10 3.1281e+019
+465 394 2.93093e+019
+200 16 2.89419e+019
+59 219 2.88975e+019
+282 115 2.87339e+019
+418 440 2.87042e+019
+446 396 2.82962e+019
+130 2 2.75483e+019
+480 298 2.55476e+019
+110 238 2.5223e+019
+427 320 2.4938e+019
+387 10 2.46049e+019
+387 178 2.42342e+019
+125 199 2.41836e+019
+456 280 2.41094e+019
+553 40 2.40732e+019
+271 166 2.4e+019
+37 62 2.3961e+019
+448 262 2.38667e+019
+144 309 2.3349e+019
+239 18 2.31203e+019
+479 19 2.24661e+019
+213 72 2.22864e+019
+435 68 2.22013e+019
+520 61 2.21936e+019
+72 24 2.21809e+019
+183 400 2.20096e+019
+411 354 2.1967e+019
+355 220 2.19571e+019
+423 181 2.16989e+019
+77 257 2.14745e+019
+271 71 2.12549e+019
+543 365 2.12376e+019
+46 28 2.12018e+019
+462 279 2.06096e+019
+135 214 2.03358e+019
+102 4 2.03114e+019
+101 58 2.02767e+019
+510 122 2.02325e+019
+233 15 1.9954e+019
+303 183 1.99147e+019
+512 167 1.97006e+019
+35 146 1.95473e+019
+421 334 1.94648e+019
+432 146 1.93837e+019
+263 441 1.9352e+019
+392 144 1.93377e+019
+300 52 1.92231e+019
+425 377 1.91266e+019
+510 173 1.90584e+019
+224 419 1.89032e+019
+514 76 1.88629e+019
+255 387 1.88492e+019
+402 122 1.88196e+019
+111 393 1.87212e+019
+242 71 1.87178e+019
+262 165 1.86869e+019
+58 183 1.86452e+019
+4 66 1.84871e+019
+29 8 1.84801e+019
+309 372 1.83732e+019
+177 106 1.83031e+019
+74 6 1.82426e+019
+390 58 1.82258e+019
+439 339 1.81548e+019
+236 20 1.79696e+019
+348 179 1.78916e+019
+512 341 1.77754e+019
+41 297 1.77753e+019
+498 82 1.75934e+019
+304 216 1.74912e+019
+404 120 1.7443e+019
+239 349 1.72909e+019
+35 137 1.72645e+019
+482 365 1.71904e+019
+300 265 1.70241e+019
+137 203 1.6803e+019
+385 221 1.67419e+019
+293 15 1.65908e+019
+453 340 1.65294e+019
+358 260 1.6438e+019
+382 8 1.60801e+019
+125 255 1.60471e+019
+280 112 1.58647e+019
+26 9 1.57474e+019
+138 110 1.56045e+019
+124 362 1.55557e+019
+372 163 1.5543e+019
+388 221 1.54795e+019
+64 234 1.54079e+019
+550 379 1.53762e+019
+192 331 1.53381e+019
+324 341 1.53067e+019
+167 286 1.52911e+019
+327 342 1.51556e+019
+245 143 1.51277e+019
+348 241 1.50524e+019
+301 186 1.49496e+019
+64 60 1.49356e+019
+412 256 1.48233e+019
+545 168 1.48086e+019
+264 298 1.48075e+019
+181 111 1.46702e+019
+419 180 1.46544e+019
+391 61 1.46153e+019
+420 178 1.4399e+019
+525 60 1.43649e+019
+542 18 1.43116e+019
+81 3 1.42908e+019
+327 127 1.42767e+019
+312 149 1.4255e+019
+334 436 1.42445e+019
+378 353 1.40935e+019
+66 214 1.39588e+019
+132 26 1.39494e+019
+562 147 1.39424e+019
+210 445 1.39316e+019
+139 173 1.39137e+019
+434 398 1.38655e+019
+92 197 1.38388e+019
+360 131 1.36976e+019
+170 57 1.36779e+019
+82 29 1.35208e+019
+577 15 1.3483e+019
+249 363 1.34681e+019
+37 144 1.33313e+019
+66 320 1.33162e+019
+328 142 1.32414e+019
+248 93 1.31669e+019
+282 403 1.31653e+019
+510 455 1.31389e+019
+221 15 1.3126e+019
+360 294 1.30786e+019
+53 43 1.30625e+019
+277 352 1.30597e+019
+228 292 1.30431e+019
+127 75 1.30325e+019
+512 125 1.29815e+019
+356 268 1.29578e+019
+567 43 1.2946e+019
+345 241 1.29423e+019
+542 210 1.28154e+019
+360 337 1.27951e+019
+203 310 1.2787e+019
+248 404 1.27478e+019
+514 223 1.27219e+019
+36 175 1.27045e+019
+522 122 1.2672e+019
+206 224 1.26706e+019
+387 243 1.26188e+019
+424 320 1.25327e+019
+233 162 1.251e+019
+225 221 1.2491e+019
+451 376 1.24894e+019
+482 327 1.24831e+019
+291 16 1.24481e+019
+503 361 1.24172e+019
+481 179 1.23634e+019
+177 260 1.23535e+019
+338 165 1.23388e+019
+302 205 1.23315e+019
+528 98 1.23197e+019
+345 109 1.22397e+019
+140 204 1.22352e+019
+31 219 1.222e+019
+416 23 1.20866e+019
+355 320 1.20673e+019
+12 101 1.20216e+019
+46 147 1.19846e+019
+449 219 1.19809e+019
+270 279 1.1863e+019
+279 222 1.18536e+019
+68 149 1.18293e+019
+123 272 1.18002e+019
+162 214 1.17908e+019
+223 38 1.17801e+019
+192 219 1.17293e+019
+55 31 1.17166e+019
+328 66 1.17155e+019
+475 22 1.1711e+019
+512 295 1.1625e+019
+191 359 1.15984e+019
+48 100 1.15341e+019
+42 339 1.14968e+019
+70 147 1.14521e+019
+533 183 1.14342e+019
+342 337 1.1425e+019
+169 198 1.13877e+019
+97 447 1.13821e+019
+484 179 1.12997e+019
+512 128 1.12707e+019
+343 7 1.12688e+019
+472 63 1.12629e+019
+114 345 1.12611e+019
+283 72 1.12464e+019
+408 352 1.12035e+019
+403 188 1.10715e+019
+91 292 1.10304e+019
+45 81 1.09887e+019
+524 20 1.09808e+019
+164 242 1.09698e+019
+512 98 1.09051e+019
+220 178 1.08538e+019
+395 260 1.07925e+019
+358 10 1.0781e+019
+360 217 1.07374e+019
+232 200 1.0729e+019
+99 221 1.07074e+019
+529 24 1.06368e+019
+38 172 1.06295e+019
+124 41 1.06198e+019
+37 296 1.06176e+019
+272 130 1.05809e+019
+422 44 1.05803e+019
+246 294 1.05371e+019
+136 206 1.05075e+019
+115 392 1.04512e+019
+541 99 1.0408e+019
+456 83 1.03975e+019
+264 445 1.03763e+019
+33 99 1.0334e+019
+422 398 1.02864e+019
+340 13 1.0267e+019
+236 92 1.02378e+019
+187 99 1.01632e+019
+449 178 1.01258e+019
+321 312 1.01109e+019
+470 239 1.00193e+019
+101 77 1.00148e+019
+526 223 1.00128e+019
+510 343 9.98385e+018
+179 113 9.98107e+018
+132 148 9.96132e+018
+408 63 9.94548e+018
+387 295 9.93554e+018
+367 247 9.92399e+018
+263 201 9.92195e+018
+55 294 9.91961e+018
+157 73 9.9176e+018
+165 218 9.91456e+018
+113 213 9.89036e+018
+177 93 9.84234e+018
+413 299 9.83522e+018
+57 364 9.79893e+018
+85 214 9.79349e+018
+298 70 9.78146e+018
+127 165 9.74652e+018
+546 365 9.70629e+018
+68 27 9.70054e+018
+486 182 9.69527e+018
+72 97 9.66968e+018
+433 110 9.66629e+018
+195 58 9.6552e+018
+37 288 9.65441e+018
+229 35 9.64947e+018
+15 219 9.60826e+018
+147 21 9.56221e+018
+242 100 9.55146e+018
+88 148 9.53962e+018
+95 446 9.53912e+018
+455 284 9.53724e+018
+347 393 9.5192e+018
+326 426 9.47138e+018
+451 337 9.4539e+018
+236 163 9.45169e+018
+289 137 9.42787e+018
+526 38 9.41141e+018
+281 51 9.3576e+018
+528 188 9.35476e+018
+9 101 9.32829e+018
+254 138 9.311e+018
+452 205 9.30687e+018
+542 130 9.29466e+018
+275 181 9.29065e+018
+484 338 9.24613e+018
+86 255 9.2383e+018
+497 228 9.19755e+018
+159 138 9.17975e+018
+115 44 9.15714e+018
+105 4 9.15425e+018
+87 209 9.12236e+018
+44 10 9.1167e+018
+432 83 9.11165e+018
+513 220 9.10413e+018
+379 69 9.10307e+018
+273 297 9.10229e+018
+342 106 9.08825e+018
+110 96 9.07083e+018
+59 185 9.06797e+018
+49 153 9.05899e+018
+41 64 9.04567e+018
+245 14 9.03061e+018
+317 148 9.01125e+018
+57 290 9.00075e+018
+525 345 8.96833e+018
+358 64 8.92242e+018
+230 266 8.91446e+018
+382 411 8.90609e+018
+312 7 8.89761e+018
+135 129 8.85472e+018
+350 145 8.85053e+018
+196 82 8.81065e+018
+225 38 8.80099e+018
+141 394 8.77839e+018
+56 5 8.76264e+018
+208 451 8.75751e+018
+306 192 8.75105e+018
+103 392 8.73581e+018
+255 182 8.71918e+018
+365 251 8.71353e+018
+182 398 8.69432e+018
+408 182 8.6647e+018
+212 182 8.65731e+018
+137 208 8.65149e+018
+314 82 8.64074e+018
+366 143 8.63639e+018
+584 38 8.63378e+018
+547 40 8.62703e+018
+351 320 8.61508e+018
+529 102 8.57277e+018
+306 439 8.56546e+018
+108 183 8.54742e+018
+478 12 8.54357e+018
+100 162 8.52508e+018
+511 101 8.5212e+018
+351 322 8.49495e+018
+273 281 8.48993e+018
+173 40 8.4817e+018
+526 101 8.47792e+018
+435 281 8.47692e+018
+545 4 8.46875e+018
+403 6 8.45169e+018
+526 99 8.4305e+018
+156 318 8.42597e+018
+35 201 8.41892e+018
+377 119 8.40704e+018
+254 422 8.40647e+018
+244 165 8.39951e+018
+389 140 8.37756e+018
+181 380 8.33603e+018
+351 271 8.29222e+018
+18 343 8.27106e+018
+328 253 8.26364e+018
+282 117 8.2602e+018
+170 18 8.25974e+018
+478 16 8.23611e+018
+221 182 8.23147e+018
+221 180 8.21409e+018
+124 252 8.21078e+018
+294 26 8.19957e+018
+224 183 8.19636e+018
+597 272 8.17663e+018
+301 164 8.17016e+018
+141 2 8.14181e+018
+481 182 8.14175e+018
+545 57 8.11629e+018
+338 391 8.11212e+018
+286 166 8.10819e+018
+33 140 8.0866e+018
+333 89 8.07445e+018
+175 109 8.07328e+018
+183 19 8.05781e+018
+465 197 8.0511e+018
+158 143 8.02439e+018
+379 7 8.01621e+018
+181 394 7.99991e+018
+418 68 7.99389e+018
+390 296 7.98428e+018
+280 128 7.98066e+018
+6 45 7.96696e+018
+63 219 7.95593e+018
+82 136 7.94451e+018
+424 318 7.9348e+018
+241 69 7.92156e+018
+520 64 7.92035e+018
+259 71 7.88672e+018
+140 183 7.87541e+018
+58 74 7.85317e+018
+259 201 7.79851e+018
+541 124 7.78833e+018
+157 55 7.75517e+018
+195 16 7.73758e+018
+259 221 7.72042e+018
+38 147 7.71546e+018
+37 141 7.70688e+018
+362 360 7.68274e+018
+391 324 7.68137e+018
+104 359 7.66655e+018
+506 203 7.66479e+018
+208 54 7.6547e+018
+153 225 7.65066e+018
+528 104 7.64017e+018
+329 9 7.60116e+018
+107 40 7.57867e+018
+307 448 7.56713e+018
+571 448 7.51864e+018
+484 59 7.51587e+018
+110 264 7.49294e+018
+411 162 7.49047e+018
+398 169 7.49043e+018
+110 46 7.48868e+018
+220 107 7.48711e+018
+568 383 7.45102e+018
+386 292 7.45078e+018
+4 63 7.4432e+018
+500 224 7.43127e+018
+508 7 7.42205e+018
+22 61 7.42167e+018
+537 458 7.41984e+018
+281 53 7.40739e+018
+576 178 7.39841e+018
+392 165 7.39169e+018
+537 186 7.39154e+018
+413 21 7.38743e+018
+127 252 7.37666e+018
+243 190 7.36138e+018
+33 172 7.35515e+018
+261 223 7.35376e+018
+418 300 7.32907e+018
+420 81 7.30744e+018
+444 453 7.27809e+018
+268 288 7.27711e+018
+363 9 7.27078e+018
+324 314 7.27035e+018
+252 141 7.26481e+018
+248 218 7.24343e+018
+292 311 7.24247e+018
+290 49 7.23539e+018
+144 187 7.2072e+018
+521 263 7.20492e+018
+481 338 7.20474e+018
+371 392 7.17633e+018
+598 364 7.16063e+018
+393 46 7.15866e+018
+48 97 7.15068e+018
+7 11 7.1459e+018
+490 343 7.14412e+018
+267 297 7.14112e+018
+457 375 7.1258e+018
+530 183 7.12096e+018
+374 393 7.11224e+018
+38 219 7.11013e+018
+324 424 7.0982e+018
+561 320 7.09749e+018
+48 25 7.09471e+018
+406 375 7.07361e+018
+84 476 7.07352e+018
+507 164 7.07035e+018
+163 277 7.04762e+018
+357 334 7.03488e+018
+94 219 7.03191e+018
+515 347 7.02897e+018
+514 382 7.00906e+018
+352 147 6.99949e+018
+9 76 6.99607e+018
+137 138 6.99229e+018
+45 97 6.99097e+018
+528 362 6.97571e+018
+371 90 6.95145e+018
+287 33 6.93652e+018
+162 207 6.93476e+018
+464 391 6.91543e+018
+544 6 6.89948e+018
+525 425 6.89477e+018
+438 304 6.89326e+018
+198 131 6.87786e+018
+369 162 6.87639e+018
+281 132 6.87017e+018
+344 197 6.83864e+018
+320 225 6.82907e+018
+475 342 6.82348e+018
+517 16 6.81707e+018
+265 32 6.81223e+018
+357 282 6.79951e+018
+276 221 6.76602e+018
+239 422 6.76382e+018
+297 332 6.74483e+018
+156 1 6.74295e+018
+245 206 6.73828e+018
+560 81 6.73692e+018
+100 199 6.73534e+018
+184 35 6.73128e+018
+166 243 6.72925e+018
+186 401 6.70926e+018
+475 262 6.70052e+018
+250 32 6.6848e+018
+151 307 6.65405e+018
+380 25 6.65164e+018
+488 262 6.64421e+018
+338 473 6.6414e+018
+557 39 6.6282e+018
+408 67 6.6276e+018
+425 333 6.62416e+018
+325 165 6.60706e+018
+97 79 6.5987e+018
+421 48 6.59663e+018
+210 437 6.58414e+018
+502 143 6.58152e+018
+277 370 6.56472e+018
+511 43 6.55615e+018
+131 255 6.54071e+018
+297 410 6.53454e+018
+122 52 6.52882e+018
+65 371 6.52107e+018
+345 351 6.50846e+018
+358 143 6.50363e+018
+482 331 6.50157e+018
+449 446 6.48873e+018
+412 64 6.48058e+018
+223 15 6.47487e+018
+187 34 6.47419e+018
+131 476 6.47187e+018
+397 262 6.46342e+018
+116 184 6.44879e+018
+204 435 6.44684e+018
+543 16 6.42748e+018
+285 212 6.42344e+018
+68 304 6.39205e+018
+302 263 6.38623e+018
+439 455 6.3786e+018
+216 54 6.36956e+018
+181 291 6.36852e+018
+537 392 6.35609e+018
+124 261 6.35099e+018
+209 36 6.34713e+018
+179 329 6.34327e+018
+417 7 6.3379e+018
+173 94 6.31455e+018
+283 206 6.3143e+018
+274 369 6.30463e+018
+417 450 6.3014e+018
+572 328 6.29612e+018
+248 145 6.28161e+018
+210 154 6.27036e+018
+250 423 6.27018e+018
+374 241 6.26639e+018
+324 90 6.25283e+018
+492 140 6.25216e+018
+42 24 6.24789e+018
+70 478 6.23877e+018
+539 40 6.22031e+018
+508 5 6.21721e+018
+240 97 6.21488e+018
+445 127 6.21473e+018
+84 78 6.21352e+018
+216 280 6.20378e+018
+216 175 6.1969e+018
+277 329 6.19529e+018
+85 59 6.18791e+018
+211 33 6.18637e+018
+449 167 6.18573e+018
+285 297 6.17726e+018
+378 339 6.1771e+018
+292 27 6.15214e+018
+46 354 6.12955e+018
+122 255 6.12315e+018
+106 62 6.10747e+018
+30 135 6.10255e+018
+323 260 6.088e+018
+357 296 6.08613e+018
+510 165 6.0834e+018
+348 299 6.07384e+018
+206 159 6.06629e+018
+357 125 6.05967e+018
+492 59 6.0501e+018
+177 18 6.04843e+018
+146 160 6.0457e+018
+214 59 6.01688e+018
+218 177 6.00353e+018
+492 182 5.99995e+018
+123 185 5.99329e+018
+101 236 5.98858e+018
+471 212 5.97695e+018
+545 217 5.95716e+018
+404 13 5.94121e+018
+175 40 5.93497e+018
+274 76 5.92397e+018
+313 85 5.91766e+018
+252 424 5.91061e+018
+508 19 5.907e+018
+290 264 5.90568e+018
+77 8 5.90487e+018
+336 317 5.87058e+018
+356 128 5.86296e+018
+330 89 5.85978e+018
+247 318 5.85345e+018
+260 368 5.85108e+018
+30 96 5.83988e+018
+441 98 5.83824e+018
+289 212 5.83043e+018
+545 43 5.8245e+018
+358 53 5.81415e+018
+129 309 5.81188e+018
+483 177 5.80586e+018
+91 256 5.79594e+018
+54 66 5.79535e+018
+366 7 5.79429e+018
+444 23 5.78502e+018
+16 214 5.78354e+018
+129 238 5.7806e+018
+412 24 5.77644e+018
+272 53 5.76507e+018
+34 177 5.76267e+018
+81 77 5.75974e+018
+188 264 5.75556e+018
+54 5 5.75347e+018
+368 337 5.74349e+018
+513 402 5.7285e+018
+248 315 5.72799e+018
+451 263 5.72217e+018
+158 1 5.72215e+018
+364 106 5.69916e+018
+332 333 5.6914e+018
+154 114 5.68434e+018
+115 306 5.67851e+018
+164 358 5.67247e+018
+497 79 5.66516e+018
+480 403 5.66342e+018
+446 261 5.66147e+018
+496 462 5.6605e+018
+458 266 5.66049e+018
+429 88 5.64736e+018
+516 202 5.63057e+018
+561 71 5.6277e+018
+324 145 5.62223e+018
+239 202 5.61179e+018
+266 403 5.61168e+018
+153 223 5.61002e+018
+179 103 5.60659e+018
+236 221 5.58958e+018
+275 318 5.5894e+018
+346 297 5.58591e+018
+317 107 5.56324e+018
+328 288 5.56049e+018
+524 99 5.55718e+018
+364 255 5.54631e+018
+398 358 5.5436e+018
+280 420 5.53429e+018
+482 300 5.52583e+018
+530 366 5.51392e+018
+107 58 5.51314e+018
+321 10 5.5067e+018
+309 7 5.49114e+018
+472 421 5.48004e+018
+88 354 5.46611e+018
+395 105 5.44622e+018
+117 428 5.44148e+018
+235 346 5.4319e+018
+184 94 5.41307e+018
+428 224 5.40874e+018
+148 131 5.39908e+018
+62 203 5.39641e+018
+379 66 5.39264e+018
+252 74 5.38864e+018
+450 22 5.38829e+018
+56 373 5.38488e+018
+523 186 5.38204e+018
+289 167 5.37964e+018
+439 24 5.37163e+018
+44 62 5.37126e+018
+210 395 5.36517e+018
+415 21 5.36288e+018
+241 59 5.3583e+018
+469 139 5.35293e+018
+246 106 5.35099e+018
+560 229 5.34579e+018
+358 393 5.34376e+018
+114 3 5.3381e+018
+45 407 5.33067e+018
+135 238 5.32654e+018
+530 186 5.32386e+018
+115 77 5.3222e+018
+533 122 5.32197e+018
+75 132 5.31661e+018
+83 404 5.31617e+018
+282 393 5.31221e+018
+497 160 5.30359e+018
+341 263 5.29559e+018
+39 168 5.29356e+018
+436 91 5.29061e+018
+278 418 5.28507e+018
+227 185 5.28239e+018
+415 164 5.27202e+018
+386 327 5.26954e+018
+164 328 5.2683e+018
+296 420 5.25384e+018
+243 209 5.2427e+018
+84 310 5.24061e+018
+32 66 5.23854e+018
+155 195 5.22984e+018
+136 21 5.2274e+018
+366 2 5.20477e+018
+10 218 5.20317e+018
+390 448 5.19654e+018
+432 268 5.19633e+018
+3 155 5.19445e+018
+336 391 5.18948e+018
+50 452 5.18844e+018
+160 183 5.18355e+018
+137 98 5.16795e+018
+410 183 5.1558e+018
+274 215 5.1516e+018
+224 218 5.13728e+018
+152 115 5.13696e+018
+74 186 5.13309e+018
+479 451 5.12978e+018
+540 140 5.12616e+018
+540 405 5.1227e+018
+46 219 5.11892e+018
+463 23 5.11198e+018
+232 274 5.10285e+018
+43 474 5.10246e+018
+403 265 5.10039e+018
+512 95 5.09822e+018
+437 466 5.09387e+018
+113 356 5.08853e+018
+159 112 5.0851e+018
+99 195 5.08121e+018
+471 268 5.07774e+018
+317 385 5.07671e+018
+167 326 5.07527e+018
+333 413 5.07362e+018
+190 146 5.07152e+018
+569 39 5.05775e+018
+475 5 5.05733e+018
+162 211 5.05689e+018
+29 12 5.03995e+018
+140 98 5.03971e+018
+5 9 5.03864e+018
+142 307 5.0216e+018
+361 221 5.01835e+018
+430 1 5.01349e+018
+413 4 5.0133e+018
+370 107 5.01297e+018
+190 322 5.0016e+018
+470 214 4.98938e+018
+108 28 4.98819e+018
+52 153 4.98359e+018
+109 428 4.97984e+018
+475 161 4.97956e+018
+50 160 4.97852e+018
+95 450 4.97696e+018
+242 199 4.97571e+018
+29 236 4.96923e+018
+94 6 4.9683e+018
+256 405 4.96801e+018
+134 132 4.95246e+018
+554 378 4.95161e+018
+18 236 4.94787e+018
+243 419 4.93751e+018
+559 271 4.93177e+018
+157 112 4.9239e+018
+87 78 4.92218e+018
+505 381 4.92217e+018
+324 163 4.91971e+018
+124 39 4.91382e+018
+126 308 4.91257e+018
+122 216 4.91238e+018
+189 205 4.90974e+018
+407 162 4.90237e+018
+564 16 4.90122e+018
+390 48 4.89595e+018
+113 95 4.89447e+018
+164 18 4.89401e+018
+186 19 4.89266e+018
+258 237 4.8776e+018
+535 121 4.87181e+018
+127 186 4.86718e+018
+450 91 4.84284e+018
+438 239 4.82017e+018
+342 123 4.81232e+018
+198 55 4.80898e+018
+108 324 4.80803e+018
+184 318 4.79947e+018
+186 291 4.79827e+018
+447 245 4.79343e+018
+35 66 4.79241e+018
+68 96 4.77555e+018
+270 62 4.77418e+018
+461 220 4.76933e+018
+90 376 4.76657e+018
+463 39 4.7665e+018
+310 33 4.75855e+018
+365 200 4.75753e+018
+375 341 4.75386e+018
+47 11 4.75282e+018
+309 356 4.74917e+018
+436 386 4.74765e+018
+412 220 4.74606e+018
+77 77 4.73806e+018
+268 68 4.73023e+018
+211 58 4.72625e+018
+51 292 4.72516e+018
+88 183 4.71407e+018
+441 320 4.71071e+018
+256 35 4.7056e+018
+121 447 4.70292e+018
+391 52 4.70108e+018
+526 398 4.69518e+018
+219 100 4.69039e+018
+342 465 4.68718e+018
+107 430 4.68588e+018
+327 182 4.68111e+018
+575 126 4.67829e+018
+500 318 4.66777e+018
+60 254 4.6638e+018
+315 146 4.65798e+018
+282 351 4.65695e+018
+188 207 4.65347e+018
+215 425 4.64717e+018
+78 81 4.62116e+018
+539 95 4.61206e+018
+221 339 4.61167e+018
+188 144 4.61114e+018
+199 110 4.61108e+018
+186 288 4.60441e+018
+536 103 4.59427e+018
+466 102 4.58914e+018
+291 30 4.58084e+018
+274 206 4.57837e+018
+190 217 4.57007e+018
+267 52 4.56963e+018
+544 20 4.5688e+018
+548 45 4.55945e+018
+524 172 4.55341e+018
+174 116 4.54913e+018
+23 322 4.54542e+018
+11 83 4.5385e+018
+162 216 4.53376e+018
+39 143 4.52906e+018
+222 239 4.52727e+018
+525 174 4.52555e+018
+418 282 4.51005e+018
+545 91 4.50959e+018
+173 56 4.50071e+018
+220 150 4.49892e+018
+41 9 4.48967e+018
+90 289 4.48542e+018
+479 294 4.48499e+018
+363 129 4.48419e+018
+175 239 4.48408e+018
+478 263 4.47044e+018
+416 86 4.46716e+018
+547 162 4.46663e+018
+438 378 4.46553e+018
+408 45 4.46153e+018
+70 409 4.46112e+018
+75 9 4.45321e+018
+514 122 4.44885e+018
+394 162 4.44647e+018
+386 63 4.44498e+018
+150 38 4.44265e+018
+272 289 4.43904e+018
+481 341 4.4348e+018
+527 395 4.42923e+018
+317 167 4.42374e+018
+18 319 4.41603e+018
+219 316 4.41173e+018
+142 179 4.41161e+018
+527 80 4.40428e+018
+182 133 4.3973e+018
+146 452 4.39419e+018
+100 95 4.39304e+018
+488 139 4.38931e+018
+49 147 4.387e+018
+383 261 4.38581e+018
+428 118 4.38264e+018
+164 381 4.37407e+018
+247 346 4.36584e+018
+82 74 4.36506e+018
+262 216 4.36064e+018
+347 120 4.35765e+018
+396 161 4.35514e+018
+261 142 4.35375e+018
+526 400 4.35226e+018
+281 417 4.35057e+018
+178 164 4.33755e+018
+117 360 4.33547e+018
+326 13 4.33496e+018
+254 10 4.32877e+018
+516 141 4.32512e+018
+344 48 4.31925e+018
+187 182 4.31516e+018
+408 47 4.31488e+018
+512 262 4.3128e+018
+262 392 4.30796e+018
+137 56 4.30305e+018
+431 275 4.29548e+018
+571 456 4.29406e+018
+88 369 4.29166e+018
+305 363 4.2855e+018
+172 449 4.2802e+018
+377 461 4.27793e+018
+286 72 4.27611e+018
+188 146 4.26818e+018
+108 136 4.26324e+018
+168 242 4.26276e+018
+150 222 4.25872e+018
+206 162 4.2579e+018
+57 332 4.25619e+018
+570 183 4.25613e+018
+406 141 4.25598e+018
+390 332 4.25218e+018
+186 37 4.24809e+018
+221 72 4.2473e+018
+149 231 4.24566e+018
+226 180 4.24072e+018
+392 293 4.24038e+018
+157 40 4.2399e+018
+538 97 4.2383e+018
+214 123 4.23793e+018
+509 2 4.22769e+018
+84 256 4.22152e+018
+395 23 4.2103e+018
+359 160 4.21014e+018
+356 341 4.2088e+018
+533 340 4.20744e+018
+239 195 4.20009e+018
+173 313 4.20007e+018
+203 293 4.18806e+018
+400 319 4.18437e+018
+271 414 4.17868e+018
+107 74 4.17825e+018
+46 8 4.17777e+018
+118 76 4.17648e+018
+141 324 4.17371e+018
+75 235 4.16998e+018
+165 111 4.16993e+018
+571 451 4.16411e+018
+34 113 4.16114e+018
+430 44 4.15713e+018
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_7_5.txt b/test_data/harriscorners/hc_msc_0.00_0.15_7_5.txt
new file mode 100644
index 0000000..55d18f9
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_7_5.txt
@@ -0,0 +1,1365 @@
+1364
+273 365 3.59215e+020
+261 297 3.36972e+020
+237 20 3.11225e+020
+246 95 2.98616e+020
+543 365 2.85984e+020
+362 401 2.83266e+020
+27 9 2.80065e+020
+281 113 2.72669e+020
+65 343 2.67265e+020
+77 257 2.65123e+020
+239 19 2.6076e+020
+465 393 2.52392e+020
+423 178 2.41726e+020
+82 29 2.36819e+020
+37 62 2.36681e+020
+195 58 2.13449e+020
+427 320 2.07029e+020
+344 9 2.05175e+020
+59 218 2.03209e+020
+131 26 1.99713e+020
+388 10 1.98142e+020
+448 297 1.93475e+020
+81 4 1.87918e+020
+131 36 1.86591e+020
+510 124 1.85929e+020
+320 225 1.82441e+020
+251 13 1.81183e+020
+33 99 1.81181e+020
+133 26 1.79114e+020
+127 165 1.77555e+020
+425 321 1.75829e+020
+200 17 1.74464e+020
+418 440 1.69567e+020
+358 260 1.6869e+020
+225 420 1.68613e+020
+447 397 1.68453e+020
+507 122 1.67511e+020
+360 295 1.66627e+020
+242 71 1.65665e+020
+257 384 1.65607e+020
+552 40 1.64556e+020
+82 2 1.64506e+020
+484 338 1.63559e+020
+128 2 1.63554e+020
+452 339 1.61635e+020
+239 91 1.60731e+020
+153 223 1.57368e+020
+512 341 1.56245e+020
+529 24 1.5494e+020
+456 280 1.54584e+020
+390 60 1.53679e+020
+122 43 1.53424e+020
+131 1 1.52669e+020
+387 178 1.50331e+020
+448 262 1.47583e+020
+294 15 1.4582e+020
+389 57 1.41699e+020
+419 180 1.41204e+020
+300 52 1.39634e+020
+138 110 1.39341e+020
+263 441 1.37057e+020
+33 138 1.3576e+020
+343 338 1.35264e+020
+356 220 1.33461e+020
+511 167 1.32498e+020
+302 182 1.31624e+020
+35 137 1.31228e+020
+137 203 1.31175e+020
+181 111 1.30632e+020
+101 222 1.30516e+020
+302 185 1.30065e+020
+183 400 1.29627e+020
+533 184 1.29156e+020
+483 179 1.28258e+020
+37 145 1.26692e+020
+4 65 1.2631e+020
+519 61 1.23756e+020
+404 121 1.20971e+020
+544 168 1.20893e+020
+57 4 1.20848e+020
+225 38 1.20092e+020
+215 55 1.18846e+020
+177 106 1.17412e+020
+509 455 1.14935e+020
+435 67 1.1415e+020
+123 185 1.13574e+020
+302 215 1.13442e+020
+112 393 1.12672e+020
+134 214 1.12445e+020
+55 289 1.12168e+020
+144 310 1.11698e+020
+55 29 1.11016e+020
+125 254 1.10717e+020
+216 280 1.107e+020
+371 162 1.09789e+020
+261 165 1.08813e+020
+325 341 1.08587e+020
+309 7 1.07835e+020
+412 256 1.06937e+020
+207 450 1.06847e+020
+480 179 1.05487e+020
+434 398 1.05063e+020
+404 119 1.0465e+020
+475 262 1.04507e+020
+351 321 1.04276e+020
+360 337 1.03782e+020
+283 403 1.03552e+020
+411 354 1.03241e+020
+283 72 1.02983e+020
+392 144 1.02931e+020
+510 173 1.02696e+020
+327 141 1.02211e+020
+150 307 1.01977e+020
+361 131 1.01916e+020
+122 45 1.01542e+020
+522 62 1.00391e+020
+545 41 1.00086e+020
+252 423 9.97081e+019
+45 28 9.95116e+019
+261 222 9.94178e+019
+235 346 9.93112e+019
+578 16 9.86208e+019
+125 363 9.85348e+019
+124 198 9.84848e+019
+169 56 9.81812e+019
+92 197 9.79354e+019
+115 44 9.7855e+019
+386 220 9.77967e+019
+86 255 9.74559e+019
+301 165 9.72384e+019
+54 66 9.7201e+019
+142 324 9.67616e+019
+163 213 9.61534e+019
+421 335 9.59279e+019
+64 60 9.52269e+019
+115 42 9.52138e+019
+390 295 9.48938e+019
+320 312 9.48049e+019
+64 236 9.44669e+019
+456 283 9.42546e+019
+177 260 9.39658e+019
+425 377 9.38315e+019
+243 99 9.34308e+019
+48 26 9.28623e+019
+57 183 9.28051e+019
+168 197 9.2488e+019
+460 279 9.20821e+019
+84 78 9.19512e+019
+390 297 9.15503e+019
+66 214 9.11215e+019
+542 210 9.10454e+019
+524 25 9.09906e+019
+545 58 9.07238e+019
+174 40 9.0623e+019
+383 9 9.03937e+019
+543 15 9.02041e+019
+431 147 9.0181e+019
+300 265 9.01508e+019
+417 23 9.00212e+019
+78 2 8.95893e+019
+358 334 8.93778e+019
+100 199 8.92893e+019
+328 128 8.90727e+019
+339 13 8.88526e+019
+163 277 8.87556e+019
+408 183 8.81343e+019
+346 240 8.80964e+019
+342 263 8.77445e+019
+41 217 8.76783e+019
+403 187 8.76407e+019
+222 39 8.76388e+019
+36 173 8.71105e+019
+515 347 8.6512e+019
+544 4 8.63366e+019
+334 436 8.62147e+019
+433 111 8.57385e+019
+246 145 8.5471e+019
+541 124 8.54039e+019
+276 352 8.52986e+019
+32 66 8.49668e+019
+426 119 8.49291e+019
+109 239 8.43061e+019
+271 166 8.31645e+019
+453 206 8.30085e+019
+61 203 8.27192e+019
+530 186 8.26403e+019
+527 98 8.20544e+019
+41 63 8.19114e+019
+214 73 8.17657e+019
+137 206 8.14686e+019
+211 435 8.12035e+019
+123 272 8.10897e+019
+52 43 8.10565e+019
+379 7 8.08538e+019
+104 4 8.07644e+019
+272 281 8.07049e+019
+264 445 7.96647e+019
+308 372 7.93847e+019
+44 97 7.91135e+019
+13 218 7.90514e+019
+38 172 7.83448e+019
+42 339 7.80983e+019
+355 321 7.80155e+019
+344 264 7.79922e+019
+365 143 7.77515e+019
+238 349 7.76097e+019
+95 476 7.75541e+019
+567 43 7.75254e+019
+544 6 7.74083e+019
+452 204 7.73106e+019
+478 18 7.70854e+019
+448 166 7.6786e+019
+71 148 7.67606e+019
+509 19 7.66938e+019
+220 290 7.65868e+019
+511 128 7.64664e+019
+413 299 7.61311e+019
+57 364 7.60986e+019
+386 243 7.59318e+019
+358 10 7.57385e+019
+324 314 7.57173e+019
+512 262 7.54705e+019
+18 343 7.53465e+019
+139 173 7.52399e+019
+212 59 7.51886e+019
+102 58 7.50327e+019
+225 182 7.4911e+019
+78 80 7.47748e+019
+221 180 7.47377e+019
+85 214 7.44932e+019
+395 261 7.44094e+019
+100 78 7.40694e+019
+377 119 7.40133e+019
+68 337 7.40097e+019
+311 150 7.40073e+019
+245 143 7.38363e+019
+167 286 7.37338e+019
+363 7 7.3692e+019
+106 39 7.34415e+019
+49 151 7.3329e+019
+159 138 7.29323e+019
+480 299 7.27758e+019
+528 104 7.27476e+019
+140 394 7.24644e+019
+478 16 7.23438e+019
+302 204 7.22354e+019
+313 84 7.19745e+019
+242 203 7.12505e+019
+230 36 7.12342e+019
+46 355 7.09729e+019
+490 139 7.07855e+019
+92 292 7.07276e+019
+367 247 7.06968e+019
+348 179 7.06644e+019
+529 183 7.05365e+019
+8 10 7.04723e+019
+509 343 7.03699e+019
+361 221 7.00249e+019
+313 150 6.99311e+019
+326 427 6.9529e+019
+350 145 6.95257e+019
+364 251 6.94218e+019
+293 27 6.9401e+019
+163 74 6.93581e+019
+386 294 6.93412e+019
+471 212 6.90247e+019
+265 31 6.87986e+019
+476 21 6.8661e+019
+449 219 6.85744e+019
+164 358 6.85178e+019
+37 218 6.83816e+019
+371 90 6.80174e+019
+525 38 6.78985e+019
+192 219 6.75702e+019
+474 22 6.7439e+019
+37 296 6.7239e+019
+328 253 6.65066e+019
+113 345 6.64229e+019
+328 297 6.61781e+019
+436 303 6.61775e+019
+165 244 6.59652e+019
+545 44 6.57946e+019
+439 339 6.57721e+019
+357 129 6.56863e+019
+482 364 6.55334e+019
+135 129 6.55218e+019
+524 19 6.54527e+019
+449 168 6.53376e+019
+88 148 6.51978e+019
+298 69 6.51937e+019
+36 176 6.51579e+019
+523 123 6.51463e+019
+248 316 6.48266e+019
+374 393 6.47457e+019
+101 360 6.46883e+019
+6 10 6.46508e+019
+253 139 6.46046e+019
+356 268 6.44998e+019
+135 131 6.44953e+019
+498 159 6.42979e+019
+249 423 6.41779e+019
+38 138 6.40375e+019
+360 217 6.38735e+019
+156 318 6.36458e+019
+51 98 6.36243e+019
+249 364 6.34953e+019
+234 162 6.3476e+019
+41 297 6.34297e+019
+270 279 6.33422e+019
+345 351 6.325e+019
+127 26 6.3085e+019
+141 1 6.30678e+019
+32 219 6.25783e+019
+529 97 6.24882e+019
+512 220 6.24798e+019
+329 12 6.23884e+019
+493 139 6.21851e+019
+449 204 6.19707e+019
+108 39 6.18145e+019
+514 260 6.18061e+019
+508 5 6.17471e+019
+84 477 6.16905e+019
+361 251 6.15812e+019
+212 182 6.12364e+019
+548 163 6.12249e+019
+228 185 6.1096e+019
+167 327 6.09129e+019
+164 328 6.05721e+019
+471 268 6.05567e+019
+449 445 6.00971e+019
+406 198 5.99652e+019
+110 96 5.99321e+019
+106 61 5.97558e+019
+521 263 5.96608e+019
+357 297 5.95029e+019
+513 76 5.92837e+019
+49 99 5.9276e+019
+444 453 5.90617e+019
+484 59 5.88869e+019
+84 148 5.88019e+019
+403 265 5.87281e+019
+118 75 5.84669e+019
+366 5 5.84538e+019
+244 165 5.84015e+019
+184 36 5.83679e+019
+384 259 5.80244e+019
+346 296 5.78691e+019
+358 282 5.78082e+019
+75 7 5.77727e+019
+332 294 5.75806e+019
+211 438 5.75326e+019
+191 360 5.75187e+019
+475 341 5.74451e+019
+61 134 5.73755e+019
+418 8 5.70057e+019
+483 300 5.68334e+019
+187 264 5.6817e+019
+120 447 5.68156e+019
+325 165 5.66121e+019
+10 102 5.654e+019
+128 186 5.63304e+019
+463 40 5.62036e+019
+158 73 5.5936e+019
+50 13 5.59353e+019
+512 295 5.58282e+019
+527 361 5.57902e+019
+238 94 5.56172e+019
+113 95 5.55961e+019
+250 403 5.55942e+019
+193 16 5.55467e+019
+515 75 5.55437e+019
+358 64 5.54935e+019
+365 106 5.53268e+019
+192 216 5.51363e+019
+333 90 5.50665e+019
+44 9 5.49759e+019
+307 449 5.49625e+019
+245 294 5.49563e+019
+239 199 5.49352e+019
+229 292 5.47608e+019
+330 89 5.45543e+019
+72 96 5.44778e+019
+256 139 5.4405e+019
+480 262 5.43322e+019
+102 5 5.43238e+019
+519 264 5.42318e+019
+451 377 5.4068e+019
+77 29 5.38874e+019
+219 99 5.36411e+019
+511 100 5.33321e+019
+537 393 5.31267e+019
+345 110 5.31243e+019
+44 11 5.31088e+019
+223 218 5.30381e+019
+47 99 5.28769e+019
+314 147 5.28505e+019
+542 132 5.28229e+019
+224 178 5.27244e+019
+273 296 5.24504e+019
+191 205 5.23827e+019
+221 177 5.23659e+019
+183 34 5.21125e+019
+192 330 5.19132e+019
+259 35 5.18554e+019
+70 25 5.17833e+019
+481 297 5.17786e+019
+502 159 5.16933e+019
+325 294 5.16818e+019
+23 61 5.15708e+019
+69 420 5.15539e+019
+211 185 5.15494e+019
+483 328 5.1526e+019
+94 219 5.13616e+019
+475 246 5.11454e+019
+584 38 5.10728e+019
+78 41 5.09546e+019
+138 98 5.08902e+019
+47 147 5.08237e+019
+362 395 5.06823e+019
+96 449 5.06646e+019
+471 421 5.06473e+019
+286 73 5.04926e+019
+70 23 5.03913e+019
+90 376 5.01636e+019
+166 312 5.01447e+019
+212 33 5.00304e+019
+58 29 5.00227e+019
+180 394 4.99679e+019
+470 238 4.99204e+019
+571 451 4.98809e+019
+363 358 4.98588e+019
+223 221 4.9742e+019
+463 23 4.96422e+019
+486 44 4.94733e+019
+144 6 4.94571e+019
+281 222 4.93366e+019
+408 45 4.93271e+019
+130 476 4.93057e+019
+498 224 4.92775e+019
+31 135 4.91807e+019
+511 102 4.90338e+019
+513 20 4.89102e+019
+407 352 4.88614e+019
+289 137 4.87074e+019
+539 405 4.87066e+019
+568 382 4.8701e+019
+345 108 4.86908e+019
+186 288 4.86086e+019
+540 14 4.86074e+019
+53 222 4.83444e+019
+271 72 4.82839e+019
+220 150 4.82123e+019
+432 275 4.82064e+019
+436 320 4.79436e+019
+423 398 4.79251e+019
+154 114 4.78581e+019
+393 48 4.78394e+019
+105 42 4.77516e+019
+306 440 4.76267e+019
+219 280 4.75915e+019
+328 66 4.74557e+019
+149 223 4.73455e+019
+382 412 4.72793e+019
+541 405 4.72352e+019
+248 395 4.72334e+019
+207 224 4.71707e+019
+393 218 4.71573e+019
+254 10 4.70603e+019
+47 11 4.70174e+019
+170 17 4.70101e+019
+473 202 4.69477e+019
+35 201 4.68585e+019
+449 178 4.68103e+019
+280 132 4.67355e+019
+163 111 4.66994e+019
+191 146 4.66684e+019
+559 80 4.6604e+019
+272 53 4.65209e+019
+541 99 4.63924e+019
+107 429 4.62768e+019
+296 331 4.62583e+019
+259 71 4.62428e+019
+118 425 4.619e+019
+514 382 4.61302e+019
+455 84 4.61263e+019
+186 37 4.60979e+019
+538 123 4.6009e+019
+481 451 4.5961e+019
+96 447 4.59569e+019
+294 269 4.59117e+019
+59 74 4.58859e+019
+399 262 4.58344e+019
+223 16 4.5776e+019
+31 270 4.57353e+019
+233 14 4.57248e+019
+284 199 4.56972e+019
+482 326 4.56897e+019
+275 317 4.56434e+019
+423 332 4.55243e+019
+359 142 4.55103e+019
+328 214 4.533e+019
+386 327 4.52195e+019
+60 40 4.51681e+019
+259 237 4.50931e+019
+53 5 4.5077e+019
+421 398 4.50355e+019
+489 44 4.49882e+019
+531 103 4.4948e+019
+126 76 4.4907e+019
+281 128 4.48174e+019
+258 161 4.47909e+019
+351 271 4.46935e+019
+354 295 4.46389e+019
+297 410 4.46149e+019
+422 49 4.45282e+019
+374 240 4.44413e+019
+191 144 4.44303e+019
+248 313 4.44141e+019
+451 86 4.43841e+019
+178 94 4.43312e+019
+397 265 4.42739e+019
+573 405 4.41768e+019
+539 97 4.41698e+019
+38 287 4.41306e+019
+110 264 4.41247e+019
+278 145 4.40446e+019
+309 441 4.40274e+019
+31 268 4.40003e+019
+431 269 4.39948e+019
+157 40 4.38931e+019
+281 419 4.38407e+019
+168 18 4.38292e+019
+32 141 4.38115e+019
+215 175 4.37147e+019
+318 460 4.3681e+019
+221 432 4.35245e+019
+285 297 4.34874e+019
+209 395 4.34262e+019
+483 143 4.33929e+019
+453 102 4.33169e+019
+239 202 4.32016e+019
+87 207 4.31239e+019
+197 131 4.29915e+019
+141 182 4.2936e+019
+128 168 4.29333e+019
+98 447 4.2862e+019
+503 164 4.2813e+019
+473 5 4.28127e+019
+160 183 4.27821e+019
+392 165 4.27643e+019
+9 8 4.27048e+019
+165 111 4.26923e+019
+277 329 4.26676e+019
+9 76 4.26526e+019
+328 89 4.2621e+019
+338 473 4.26093e+019
+286 165 4.25636e+019
+394 216 4.25357e+019
+257 152 4.24913e+019
+173 116 4.24418e+019
+306 193 4.24369e+019
+336 391 4.24105e+019
+390 48 4.24094e+019
+344 123 4.24006e+019
+57 373 4.21543e+019
+291 50 4.21537e+019
+377 340 4.21474e+019
+163 208 4.21431e+019
+488 262 4.20647e+019
+444 118 4.19796e+019
+575 99 4.18937e+019
+191 350 4.18698e+019
+272 316 4.17821e+019
+469 139 4.17437e+019
+42 24 4.16684e+019
+28 30 4.16625e+019
+340 165 4.16366e+019
+378 67 4.16112e+019
+341 122 4.16083e+019
+242 421 4.15169e+019
+542 129 4.137e+019
+141 21 4.13359e+019
+46 82 4.12591e+019
+416 84 4.12281e+019
+466 281 4.12026e+019
+96 79 4.11963e+019
+166 277 4.1171e+019
+390 449 4.117e+019
+471 83 4.10593e+019
+65 371 4.10472e+019
+79 198 4.09971e+019
+440 455 4.09496e+019
+233 199 4.09298e+019
+82 134 4.09221e+019
+221 184 4.08693e+019
+562 461 4.07995e+019
+524 346 4.07588e+019
+46 80 4.07546e+019
+325 88 4.07466e+019
+127 251 4.06849e+019
+268 289 4.06598e+019
+449 438 4.06554e+019
+446 8 4.05901e+019
+7 46 4.05163e+019
+497 81 4.05149e+019
+158 112 4.02036e+019
+398 169 4.01008e+019
+530 363 4.00979e+019
+277 371 3.99907e+019
+113 213 3.99302e+019
+539 458 3.99077e+019
+50 453 3.98855e+019
+328 91 3.98806e+019
+110 169 3.97312e+019
+112 242 3.96563e+019
+345 276 3.96487e+019
+499 82 3.95922e+019
+209 35 3.95463e+019
+364 254 3.95311e+019
+411 44 3.94602e+019
+147 98 3.93946e+019
+355 341 3.92797e+019
+302 190 3.91888e+019
+418 282 3.91814e+019
+9 47 3.91556e+019
+389 140 3.90995e+019
+330 92 3.89819e+019
+561 146 3.89488e+019
+163 169 3.89441e+019
+327 182 3.88997e+019
+55 79 3.88658e+019
+410 65 3.88409e+019
+131 255 3.88338e+019
+418 68 3.87986e+019
+517 17 3.87931e+019
+525 186 3.87589e+019
+18 236 3.86406e+019
+297 182 3.85888e+019
+432 82 3.85257e+019
+313 76 3.8499e+019
+109 137 3.84747e+019
+454 115 3.84622e+019
+502 144 3.84405e+019
+388 15 3.84017e+019
+129 238 3.8351e+019
+210 21 3.82951e+019
+367 303 3.82746e+019
+280 50 3.82342e+019
+66 319 3.82203e+019
+186 34 3.8217e+019
+489 181 3.8171e+019
+175 94 3.81516e+019
+44 63 3.81387e+019
+556 39 3.80925e+019
+572 459 3.80739e+019
+119 115 3.80316e+019
+464 197 3.79154e+019
+92 59 3.78741e+019
+524 423 3.78588e+019
+506 16 3.77698e+019
+517 42 3.76244e+019
+434 159 3.74983e+019
+524 425 3.74757e+019
+597 272 3.74629e+019
+439 397 3.73755e+019
+332 258 3.73457e+019
+274 215 3.71655e+019
+130 72 3.70207e+019
+515 120 3.69294e+019
+549 379 3.69144e+019
+222 107 3.68973e+019
+186 19 3.68473e+019
+106 431 3.68451e+019
+282 135 3.68169e+019
+271 131 3.67253e+019
+571 447 3.67128e+019
+281 52 3.67056e+019
+532 398 3.66933e+019
+569 422 3.66364e+019
+538 263 3.66178e+019
+246 106 3.65429e+019
+344 198 3.64589e+019
+126 96 3.64585e+019
+338 264 3.63654e+019
+478 12 3.62923e+019
+52 153 3.62789e+019
+334 218 3.61074e+019
+86 311 3.60442e+019
+451 178 3.60199e+019
+180 380 3.5881e+019
+359 53 3.5862e+019
+338 63 3.58245e+019
+525 173 3.58022e+019
+55 294 3.57195e+019
+166 97 3.56283e+019
+109 28 3.5608e+019
+325 91 3.55925e+019
+332 68 3.54557e+019
+349 241 3.54538e+019
+281 417 3.54488e+019
+220 317 3.54314e+019
+527 222 3.53312e+019
+513 402 3.53302e+019
+165 219 3.52948e+019
+184 94 3.52789e+019
+451 63 3.51847e+019
+203 309 3.51578e+019
+268 53 3.51443e+019
+70 129 3.51163e+019
+505 361 3.49992e+019
+549 59 3.49857e+019
+159 181 3.495e+019
+259 369 3.49116e+019
+270 185 3.48976e+019
+333 202 3.48756e+019
+439 378 3.48742e+019
+429 117 3.48632e+019
+520 184 3.48466e+019
+319 186 3.4774e+019
+505 382 3.47604e+019
+321 10 3.47345e+019
+29 135 3.46748e+019
+278 419 3.467e+019
+166 118 3.46221e+019
+106 98 3.46082e+019
+261 368 3.45931e+019
+236 222 3.45493e+019
+464 390 3.44797e+019
+482 440 3.44261e+019
+502 362 3.43464e+019
+297 419 3.43194e+019
+367 337 3.43176e+019
+212 22 3.42414e+019
+455 178 3.41871e+019
+338 391 3.41632e+019
+271 290 3.41562e+019
+71 408 3.41426e+019
+79 271 3.40455e+019
+347 338 3.40072e+019
+449 118 3.40006e+019
+570 182 3.40003e+019
+177 18 3.38366e+019
+316 312 3.38285e+019
+391 221 3.38018e+019
+391 324 3.37814e+019
+381 26 3.3765e+019
+437 466 3.37466e+019
+176 20 3.36962e+019
+245 102 3.36233e+019
+562 148 3.35933e+019
+262 286 3.35825e+019
+63 220 3.35143e+019
+211 12 3.33116e+019
+364 257 3.32276e+019
+457 116 3.32253e+019
+276 319 3.32097e+019
+447 350 3.3197e+019
+395 105 3.31843e+019
+103 259 3.31758e+019
+206 435 3.31681e+019
+217 149 3.30992e+019
+500 318 3.30716e+019
+355 256 3.30438e+019
+95 20 3.30208e+019
+23 322 3.30206e+019
+160 96 3.28934e+019
+332 127 3.28743e+019
+52 13 3.27398e+019
+397 104 3.2685e+019
+542 207 3.2646e+019
+196 194 3.26384e+019
+146 161 3.26137e+019
+190 312 3.26015e+019
+93 255 3.25993e+019
+404 13 3.25586e+019
+86 63 3.25483e+019
+41 10 3.25306e+019
+217 208 3.25052e+019
+297 25 3.24855e+019
+268 287 3.24751e+019
+90 275 3.24629e+019
+98 202 3.24235e+019
+183 316 3.23174e+019
+217 146 3.21737e+019
+134 238 3.21676e+019
+105 359 3.21587e+019
+148 397 3.21235e+019
+364 181 3.21117e+019
+180 164 3.20586e+019
+198 111 3.2053e+019
+81 76 3.2019e+019
+572 326 3.19077e+019
+377 183 3.18433e+019
+246 14 3.18358e+019
+271 181 3.18112e+019
+159 144 3.17921e+019
+405 376 3.17908e+019
+289 349 3.17905e+019
+16 435 3.17787e+019
+449 63 3.17766e+019
+233 296 3.15588e+019
+34 31 3.15556e+019
+274 77 3.1491e+019
+92 444 3.14774e+019
+255 405 3.14617e+019
+276 180 3.14591e+019
+107 75 3.1453e+019
+96 37 3.14512e+019
+485 264 3.13797e+019
+59 254 3.12858e+019
+11 79 3.12714e+019
+191 188 3.12522e+019
+398 357 3.12468e+019
+87 372 3.12418e+019
+345 48 3.12219e+019
+513 95 3.11972e+019
+456 377 3.1175e+019
+417 301 3.11633e+019
+246 89 3.11389e+019
+261 444 3.11068e+019
+21 131 3.10557e+019
+345 274 3.09681e+019
+539 128 3.0943e+019
+35 134 3.08816e+019
+49 235 3.08298e+019
+114 2 3.0791e+019
+443 22 3.0789e+019
+275 196 3.07446e+019
+358 394 3.07022e+019
+182 379 3.06409e+019
+135 21 3.0637e+019
+388 126 3.06299e+019
+486 266 3.06217e+019
+511 83 3.06118e+019
+95 94 3.05649e+019
+206 308 3.05352e+019
+358 241 3.05245e+019
+389 54 3.04688e+019
+39 355 3.04539e+019
+129 309 3.04032e+019
+569 203 3.03759e+019
+331 413 3.03604e+019
+56 171 3.03594e+019
+172 450 3.02637e+019
+264 311 3.02172e+019
+187 308 3.01994e+019
+348 393 3.01253e+019
+203 293 3.00381e+019
+204 435 2.99966e+019
+529 395 2.99764e+019
+157 144 2.99581e+019
+44 408 2.99338e+019
+267 20 2.99252e+019
+104 106 2.99212e+019
+254 77 2.99169e+019
+491 59 2.98993e+019
+33 111 2.98931e+019
+208 55 2.98818e+019
+375 340 2.98606e+019
+242 190 2.98517e+019
+508 166 2.98494e+019
+324 143 2.98005e+019
+88 183 2.97999e+019
+433 381 2.97468e+019
+278 417 2.97428e+019
+513 83 2.97295e+019
+395 23 2.96647e+019
+241 166 2.96291e+019
+180 329 2.95562e+019
+133 75 2.95512e+019
+243 281 2.95454e+019
+433 43 2.94897e+019
+82 72 2.94341e+019
+543 457 2.94057e+019
+169 243 2.93935e+019
+458 265 2.93879e+019
+202 220 2.93417e+019
+106 29 2.93295e+019
+530 143 2.93266e+019
+517 57 2.93241e+019
+456 161 2.93009e+019
+403 5 2.93006e+019
+168 358 2.92917e+019
+387 3 2.91979e+019
+142 186 2.91588e+019
+133 148 2.91317e+019
+206 160 2.91255e+019
+256 147 2.90962e+019
+342 106 2.90788e+019
+529 365 2.90664e+019
+274 205 2.90103e+019
+73 163 2.89594e+019
+406 80 2.88929e+019
+500 266 2.88617e+019
+202 315 2.88517e+019
+468 204 2.88338e+019
+156 91 2.88267e+019
+282 392 2.8826e+019
+470 121 2.88251e+019
+200 292 2.88203e+019
+76 474 2.8737e+019
+299 178 2.87162e+019
+138 131 2.86341e+019
+578 44 2.86135e+019
+160 20 2.86053e+019
+249 220 2.85764e+019
+56 222 2.85384e+019
+220 339 2.84372e+019
+441 240 2.84224e+019
+448 136 2.83987e+019
+458 376 2.83691e+019
+136 179 2.83669e+019
+101 235 2.8361e+019
+200 330 2.83559e+019
+453 161 2.8347e+019
+485 5 2.83443e+019
+198 148 2.83208e+019
+567 181 2.82542e+019
+414 3 2.8217e+019
+575 179 2.81999e+019
+48 257 2.81269e+019
+46 408 2.81021e+019
+493 59 2.81018e+019
+414 261 2.81005e+019
+506 203 2.80845e+019
+562 141 2.80761e+019
+246 207 2.80587e+019
+143 449 2.79884e+019
+156 445 2.79506e+019
+150 231 2.79247e+019
+449 22 2.792e+019
+215 96 2.79092e+019
+183 394 2.79036e+019
+445 126 2.78861e+019
+314 448 2.78775e+019
+525 399 2.78332e+019
+95 374 2.78262e+019
+402 167 2.77978e+019
+365 165 2.77479e+019
+44 475 2.77372e+019
+247 219 2.77087e+019
+391 18 2.76776e+019
+334 130 2.76765e+019
+592 19 2.7674e+019
+292 311 2.76593e+019
+439 25 2.76455e+019
+279 85 2.75916e+019
+147 22 2.7577e+019
+2 436 2.75408e+019
+561 324 2.75328e+019
+187 101 2.7508e+019
+404 143 2.74682e+019
+325 13 2.74084e+019
+11 126 2.73465e+019
+107 183 2.73321e+019
+464 27 2.73309e+019
+322 424 2.72551e+019
+265 15 2.7255e+019
+126 308 2.72521e+019
+99 95 2.72371e+019
+565 159 2.71894e+019
+164 183 2.71786e+019
+103 392 2.7161e+019
+300 106 2.71535e+019
+84 60 2.71485e+019
+436 280 2.71096e+019
+34 114 2.70949e+019
+75 476 2.70083e+019
+528 159 2.69901e+019
+13 102 2.69809e+019
+221 72 2.69776e+019
+444 114 2.69409e+019
+49 159 2.68799e+019
+163 253 2.68714e+019
+119 131 2.68399e+019
+216 124 2.68109e+019
+318 454 2.68011e+019
+561 227 2.67839e+019
+162 186 2.67758e+019
+309 355 2.67489e+019
+272 170 2.67479e+019
+137 138 2.67271e+019
+232 176 2.67229e+019
+254 4 2.67057e+019
+382 320 2.669e+019
+103 98 2.66458e+019
+413 65 2.66327e+019
+265 201 2.66303e+019
+479 439 2.66129e+019
+537 103 2.66062e+019
+538 40 2.66005e+019
+187 312 2.65527e+019
+496 463 2.65447e+019
+219 73 2.64487e+019
+414 264 2.64438e+019
+145 187 2.64017e+019
+104 238 2.63724e+019
+411 418 2.6349e+019
+79 473 2.63376e+019
+422 118 2.62915e+019
+16 213 2.62692e+019
+157 95 2.62627e+019
+255 150 2.62555e+019
+580 245 2.62527e+019
+219 211 2.62457e+019
+107 106 2.62328e+019
+361 369 2.62304e+019
+62 253 2.62219e+019
+504 260 2.62108e+019
+448 401 2.61847e+019
+493 82 2.61703e+019
+34 267 2.61694e+019
+7 101 2.61593e+019
+272 286 2.614e+019
+383 324 2.6116e+019
+551 223 2.60905e+019
+177 331 2.60594e+019
+492 182 2.6034e+019
+387 449 2.60111e+019
+596 364 2.60092e+019
+255 108 2.60021e+019
+198 124 2.59876e+019
+387 283 2.59771e+019
+579 85 2.59679e+019
+560 320 2.59661e+019
+298 274 2.59166e+019
+502 167 2.58904e+019
+270 170 2.58324e+019
+62 369 2.58313e+019
+255 152 2.5831e+019
+151 115 2.58067e+019
+116 361 2.5745e+019
+298 86 2.57183e+019
+572 179 2.56429e+019
+265 286 2.5613e+019
+30 237 2.56047e+019
+104 307 2.55305e+019
+243 209 2.55182e+019
+332 332 2.54825e+019
+100 164 2.54561e+019
+40 239 2.54217e+019
+206 437 2.54084e+019
+294 330 2.53907e+019
+314 300 2.53723e+019
+349 297 2.53617e+019
+486 376 2.53605e+019
+93 276 2.53258e+019
+277 137 2.5312e+019
+445 444 2.52986e+019
+506 163 2.52931e+019
+122 124 2.52786e+019
+380 181 2.52619e+019
+89 369 2.52335e+019
+576 38 2.52304e+019
+156 93 2.52285e+019
+261 396 2.52186e+019
+125 260 2.51993e+019
+206 163 2.51987e+019
+190 315 2.51982e+019
+299 398 2.51746e+019
+573 445 2.51279e+019
+305 363 2.51013e+019
+125 124 2.50805e+019
+329 199 2.50728e+019
+3 155 2.50609e+019
+74 186 2.50272e+019
+243 31 2.50177e+019
+468 122 2.50168e+019
+255 129 2.50119e+019
+184 143 2.50118e+019
+507 60 2.49711e+019
+208 422 2.49234e+019
+322 28 2.49189e+019
+449 139 2.49093e+019
+102 41 2.49005e+019
+267 118 2.48985e+019
+312 299 2.48745e+019
+508 163 2.48257e+019
+254 75 2.48036e+019
+418 362 2.47877e+019
+257 391 2.47842e+019
+252 163 2.47836e+019
+429 89 2.47413e+019
+229 281 2.47376e+019
+524 78 2.47304e+019
+229 14 2.47179e+019
+412 245 2.46913e+019
+528 400 2.46878e+019
+191 172 2.46843e+019
+223 114 2.46668e+019
+225 50 2.46231e+019
+526 224 2.46029e+019
+291 263 2.45474e+019
+23 48 2.45285e+019
+185 110 2.44864e+019
+148 112 2.44574e+019
+561 318 2.44043e+019
+309 33 2.43752e+019
+149 132 2.43603e+019
+223 150 2.43577e+019
+447 245 2.43473e+019
+151 317 2.43377e+019
+136 135 2.43167e+019
+454 48 2.42749e+019
+446 205 2.42697e+019
+384 146 2.42496e+019
+244 207 2.42462e+019
+383 335 2.42393e+019
+214 123 2.42138e+019
+317 167 2.41798e+019
+177 273 2.41712e+019
+159 90 2.41564e+019
+210 154 2.41372e+019
+597 33 2.41232e+019
+578 245 2.41227e+019
+493 79 2.41022e+019
+441 98 2.4099e+019
+150 111 2.40837e+019
+257 131 2.40344e+019
+361 67 2.40003e+019
+226 52 2.39921e+019
+3 382 2.39827e+019
+501 43 2.39632e+019
+48 102 2.39607e+019
+421 81 2.39569e+019
+122 268 2.39427e+019
+478 221 2.3937e+019
+164 381 2.39207e+019
+339 427 2.39207e+019
+188 255 2.39111e+019
+527 79 2.3903e+019
+162 119 2.38896e+019
+68 95 2.38819e+019
+379 107 2.38544e+019
+537 187 2.38506e+019
+544 443 2.38434e+019
+342 142 2.3842e+019
+155 162 2.38219e+019
+409 62 2.37789e+019
+181 344 2.37487e+019
+53 359 2.37484e+019
+214 93 2.3743e+019
+109 59 2.37069e+019
+159 219 2.3661e+019
+69 304 2.36549e+019
+195 83 2.36535e+019
+309 357 2.36443e+019
+562 71 2.36262e+019
+287 397 2.36144e+019
+359 291 2.36084e+019
+467 319 2.35366e+019
+283 266 2.35347e+019
+256 102 2.3493e+019
+164 379 2.34909e+019
+148 6 2.34894e+019
+87 275 2.34848e+019
+149 79 2.34262e+019
+360 140 2.33894e+019
+363 302 2.33844e+019
+307 165 2.3335e+019
+294 431 2.33228e+019
+143 17 2.33173e+019
+339 182 2.33145e+019
+528 431 2.32905e+019
+263 200 2.32785e+019
+475 269 2.32747e+019
+503 180 2.32665e+019
+4 60 2.32348e+019
+287 308 2.32281e+019
+452 404 2.32217e+019
+271 414 2.32093e+019
+599 365 2.32031e+019
+176 311 2.31736e+019
+541 381 2.31712e+019
+408 430 2.31627e+019
+546 218 2.31049e+019
+355 325 2.30818e+019
+581 445 2.3068e+019
+525 381 2.30612e+019
+202 192 2.29565e+019
+544 218 2.29539e+019
+510 60 2.29259e+019
+92 79 2.28957e+019
+143 433 2.28944e+019
+255 181 2.28776e+019
+263 403 2.28706e+019
+430 395 2.28553e+019
+182 292 2.28526e+019
+512 442 2.28419e+019
+363 49 2.28349e+019
+110 179 2.28233e+019
+465 138 2.27932e+019
+181 286 2.27873e+019
+113 354 2.27671e+019
+481 165 2.27469e+019
+409 163 2.27306e+019
+444 123 2.27203e+019
+328 322 2.27199e+019
+287 33 2.27174e+019
+95 59 2.26945e+019
+257 459 2.26927e+019
+91 257 2.26713e+019
+395 165 2.2656e+019
+108 382 2.2639e+019
+51 61 2.26275e+019
+458 418 2.26075e+019
+306 168 2.25949e+019
+289 396 2.25628e+019
+480 83 2.25426e+019
+576 311 2.25164e+019
+529 31 2.24798e+019
+486 139 2.24717e+019
+8 235 2.24693e+019
+518 202 2.24658e+019
+472 41 2.24497e+019
+75 133 2.24335e+019
+468 207 2.23856e+019
+269 60 2.23735e+019
+84 171 2.23281e+019
+369 82 2.2273e+019
+250 31 2.22292e+019
+347 341 2.22288e+019
+223 87 2.21979e+019
+261 216 2.21862e+019
+396 160 2.21319e+019
+414 67 2.21196e+019
+555 378 2.20925e+019
+55 146 2.20877e+019
+85 180 2.20772e+019
+279 366 2.20734e+019
+246 368 2.20628e+019
+170 311 2.20572e+019
+112 206 2.20356e+019
+82 44 2.2029e+019
+277 217 2.20186e+019
+277 140 2.20148e+019
+120 55 2.20051e+019
+278 263 2.19897e+019
+534 161 2.19861e+019
+250 152 2.19664e+019
+540 163 2.19626e+019
+126 339 2.18938e+019
+466 126 2.18937e+019
+410 263 2.18788e+019
+446 375 2.18368e+019
+563 16 2.18093e+019
+7 116 2.18e+019
+154 295 2.17805e+019
+185 132 2.17581e+019
+67 303 2.17581e+019
+539 141 2.17559e+019
+391 125 2.17433e+019
+438 65 2.17369e+019
+262 283 2.17182e+019
+558 271 2.16953e+019
+186 182 2.16726e+019
+336 406 2.16313e+019
+336 183 2.16145e+019
+511 43 2.16023e+019
+327 319 2.15839e+019
+210 225 2.15763e+019
+465 355 2.14971e+019
+45 343 2.14859e+019
+380 120 2.14745e+019
+323 146 2.14627e+019
+299 254 2.14467e+019
+433 240 2.14074e+019
+46 220 2.13839e+019
+167 308 2.13737e+019
+566 176 2.1358e+019
+240 328 2.1345e+019
+201 75 2.13375e+019
+508 361 2.1315e+019
+174 17 2.13141e+019
+12 113 2.13121e+019
+248 368 2.13113e+019
+413 161 2.12966e+019
+224 398 2.12568e+019
+418 338 2.12382e+019
+423 162 2.12217e+019
+387 281 2.12163e+019
+342 464 2.11895e+019
+539 248 2.11481e+019
+437 109 2.11438e+019
+455 265 2.1141e+019
+60 78 2.10979e+019
+166 239 2.10731e+019
+497 229 2.10709e+019
+533 346 2.10646e+019
+479 243 2.10471e+019
+462 161 2.10252e+019
+543 172 2.10037e+019
+66 251 2.09916e+019
+420 339 2.09783e+019
+119 97 2.09765e+019
+370 107 2.09547e+019
+234 34 2.09449e+019
+569 200 2.09328e+019
+535 120 2.09327e+019
+378 352 2.09303e+019
+161 99 2.09184e+019
+64 182 2.09086e+019
+183 135 2.08664e+019
+154 56 2.08648e+019
+96 453 2.08545e+019
+565 463 2.0844e+019
+215 182 2.08342e+019
+212 146 2.08099e+019
+138 358 2.08001e+019
+442 320 2.07879e+019
+67 28 2.0769e+019
+162 190 2.07683e+019
+394 65 2.07228e+019
+64 145 2.0722e+019
+382 103 2.07113e+019
+202 318 2.06187e+019
+335 317 2.06138e+019
+85 363 2.06036e+019
+445 22 2.0594e+019
+568 183 2.05936e+019
+116 131 2.05556e+019
+277 220 2.05408e+019
+464 123 2.05326e+019
+149 1 2.0524e+019
+376 84 2.04896e+019
+161 33 2.04745e+019
+420 322 2.04529e+019
+245 387 2.04309e+019
+561 225 2.04134e+019
+243 168 2.03923e+019
+160 126 2.03902e+019
+461 423 2.03756e+019
+221 84 2.03664e+019
+560 272 2.03536e+019
+232 92 2.03522e+019
+422 298 2.03521e+019
+76 273 2.03417e+019
+572 237 2.03374e+019
+450 196 2.02929e+019
+576 125 2.02913e+019
+271 62 2.02894e+019
+525 105 2.02838e+019
+390 333 2.02838e+019
+210 52 2.02187e+019
+291 90 2.02144e+019
+323 259 2.02065e+019
+9 475 2.02008e+019
+240 155 2.01812e+019
+77 163 2.01736e+019
+301 86 2.01587e+019
+478 82 2.01546e+019
+418 79 2.01483e+019
+286 248 2.01373e+019
+244 245 2.01254e+019
+247 399 2.01108e+019
+406 163 2.00993e+019
+424 338 2.00538e+019
+576 57 2.00466e+019
+152 236 2.00425e+019
+422 65 2.00423e+019
+603 364 2.00148e+019
+524 199 1.99247e+019
+578 52 1.98588e+019
+384 161 1.9822e+019
diff --git a/test_data/harriscorners/hc_msc_0.00_0.15_7_7.txt b/test_data/harriscorners/hc_msc_0.00_0.15_7_7.txt
new file mode 100644
index 0000000..be25d89
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_0.00_0.15_7_7.txt
@@ -0,0 +1,1376 @@
+1375
+81 29 1.19845e+021
+238 20 1.0467e+021
+131 26 9.62539e+020
+260 297 8.86736e+020
+246 93 8.64866e+020
+421 180 8.32933e+020
+26 9 7.60316e+020
+272 366 7.3704e+020
+424 177 7.33895e+020
+29 8 7.17347e+020
+274 367 7.01893e+020
+422 177 6.8182e+020
+76 257 6.80966e+020
+195 58 6.80484e+020
+543 366 6.60423e+020
+131 37 6.60354e+020
+81 3 6.51375e+020
+282 113 6.43644e+020
+510 124 5.88561e+020
+244 97 5.82805e+020
+37 63 5.81732e+020
+525 25 5.68797e+020
+385 10 5.5797e+020
+64 344 5.54219e+020
+152 223 5.49106e+020
+528 25 5.33876e+020
+424 321 5.28618e+020
+343 8 5.00771e+020
+388 11 4.99731e+020
+542 15 4.93555e+020
+302 185 4.8929e+020
+214 57 4.89092e+020
+253 12 4.85506e+020
+55 30 4.7671e+020
+12 218 4.66859e+020
+361 395 4.65695e+020
+359 294 4.64645e+020
+77 2 4.62388e+020
+102 222 4.57956e+020
+60 217 4.57565e+020
+293 16 4.51322e+020
+482 178 4.51246e+020
+33 100 4.50317e+020
+451 339 4.49869e+020
+257 385 4.48543e+020
+391 294 4.46401e+020
+465 392 4.40418e+020
+483 180 4.39522e+020
+485 338 4.39441e+020
+138 204 4.37775e+020
+458 279 4.34732e+020
+199 18 4.26798e+020
+356 259 4.26793e+020
+361 294 4.24217e+020
+128 1 4.20868e+020
+226 37 4.20094e+020
+418 438 4.17748e+020
+512 342 4.16115e+020
+241 70 4.14304e+020
+34 139 4.11601e+020
+447 261 4.08752e+020
+224 39 4.08311e+020
+330 128 3.9767e+020
+127 165 3.96349e+020
+320 226 3.96211e+020
+123 43 3.96079e+020
+328 296 3.92094e+020
+299 53 3.90175e+020
+519 60 3.83963e+020
+320 312 3.81461e+020
+224 420 3.81434e+020
+310 6 3.80813e+020
+60 40 3.80448e+020
+364 400 3.78647e+020
+533 185 3.70168e+020
+359 334 3.68648e+020
+389 59 3.66767e+020
+361 401 3.65883e+020
+403 120 3.60231e+020
+359 220 3.58415e+020
+476 262 3.52486e+020
+302 181 3.52229e+020
+523 62 3.49203e+020
+175 109 3.47371e+020
+238 91 3.44565e+020
+115 42 3.44325e+020
+36 139 3.42629e+020
+511 169 3.3859e+020
+226 421 3.36629e+020
+343 264 3.34623e+020
+58 217 3.31011e+020
+448 299 3.29826e+020
+408 183 3.29215e+020
+383 5 3.28729e+020
+265 446 3.28265e+020
+56 290 3.27942e+020
+284 402 3.25884e+020
+528 186 3.24981e+020
+209 450 3.23229e+020
+83 77 3.22395e+020
+428 1 3.22026e+020
+405 182 3.15659e+020
+139 109 3.14663e+020
+580 16 3.13191e+020
+263 442 3.1143e+020
+435 397 3.10926e+020
+399 263 3.0891e+020
+150 306 3.084e+020
+386 178 3.07982e+020
+122 186 3.07553e+020
+325 341 3.0622e+020
+449 204 3.05765e+020
+345 339 3.05579e+020
+182 398 3.0408e+020
+364 251 3.02845e+020
+343 338 3.00909e+020
+272 280 3.00549e+020
+145 7 3.00273e+020
+436 67 2.9996e+020
+159 75 2.99716e+020
+552 41 2.98438e+020
+327 141 2.98137e+020
+359 129 2.97957e+020
+403 118 2.96002e+020
+434 112 2.94659e+020
+163 215 2.93948e+020
+448 296 2.9326e+020
+410 353 2.9186e+020
+301 205 2.91769e+020
+120 185 2.91521e+020
+84 148 2.87761e+020
+432 276 2.85021e+020
+511 20 2.84532e+020
+207 449 2.83982e+020
+509 454 2.83331e+020
+36 173 2.82845e+020
+513 262 2.81318e+020
+104 3 2.81065e+020
+87 254 2.80829e+020
+61 203 2.80308e+020
+100 198 2.79714e+020
+329 258 2.78943e+020
+122 46 2.78485e+020
+302 215 2.78211e+020
+514 346 2.7794e+020
+545 59 2.77788e+020
+563 478 2.77565e+020
+125 254 2.7726e+020
+432 112 2.77122e+020
+448 166 2.76322e+020
+415 22 2.75575e+020
+562 461 2.75079e+020
+37 145 2.74212e+020
+211 436 2.737e+020
+143 324 2.73555e+020
+302 165 2.73257e+020
+447 398 2.72039e+020
+352 321 2.71661e+020
+57 4 2.71506e+020
+470 422 2.71155e+020
+168 196 2.71154e+020
+232 125 2.69865e+020
+112 392 2.68473e+020
+479 15 2.67148e+020
+174 40 2.66752e+020
+35 144 2.66434e+020
+452 204 2.66313e+020
+128 187 2.66014e+020
+182 111 2.65822e+020
+390 143 2.656e+020
+380 6 2.64686e+020
+43 26 2.64259e+020
+252 424 2.63675e+020
+165 327 2.61435e+020
+41 217 2.61055e+020
+225 181 2.60887e+020
+423 332 2.60681e+020
+445 118 2.6002e+020
+345 264 2.59409e+020
+79 79 2.59365e+020
+259 165 2.58191e+020
+387 220 2.5755e+020
+135 213 2.57525e+020
+480 262 2.57022e+020
+313 148 2.56508e+020
+528 103 2.56129e+020
+96 477 2.55109e+020
+546 41 2.54459e+020
+76 40 2.53937e+020
+143 311 2.52329e+020
+176 260 2.51531e+020
+47 98 2.50204e+020
+437 304 2.4998e+020
+419 8 2.49442e+020
+541 124 2.48003e+020
+109 240 2.47047e+020
+163 212 2.45471e+020
+246 144 2.44989e+020
+393 143 2.43872e+020
+215 280 2.43115e+020
+54 66 2.42643e+020
+256 151 2.42332e+020
+500 159 2.42171e+020
+425 118 2.4127e+020
+428 117 2.41184e+020
+222 179 2.40859e+020
+548 162 2.38097e+020
+273 317 2.37737e+020
+107 39 2.37728e+020
+218 105 2.36856e+020
+413 259 2.34813e+020
+3 64 2.33219e+020
+133 213 2.33178e+020
+517 20 2.33081e+020
+248 399 2.3281e+020
+218 99 2.3272e+020
+66 216 2.32184e+020
+412 298 2.31896e+020
+294 27 2.31511e+020
+396 263 2.30875e+020
+212 184 2.29971e+020
+235 346 2.29572e+020
+59 184 2.29006e+020
+65 60 2.28855e+020
+233 345 2.28793e+020
+238 199 2.27764e+020
+25 62 2.25903e+020
+132 74 2.25501e+020
+52 42 2.25155e+020
+229 36 2.24619e+020
+62 60 2.24233e+020
+102 360 2.23966e+020
+140 19 2.23884e+020
+389 21 2.23814e+020
+313 84 2.23339e+020
+576 16 2.23264e+020
+50 151 2.23257e+020
+508 166 2.22877e+020
+430 117 2.22788e+020
+377 120 2.22571e+020
+346 240 2.22327e+020
+364 142 2.21997e+020
+165 182 2.20765e+020
+422 336 2.1804e+020
+298 181 2.18023e+020
+510 129 2.17924e+020
+454 207 2.17579e+020
+371 161 2.17373e+020
+220 180 2.17068e+020
+260 220 2.16861e+020
+490 138 2.14597e+020
+539 13 2.1392e+020
+433 147 2.13498e+020
+544 4 2.13215e+020
+48 26 2.13165e+020
+4 45 2.11827e+020
+505 15 2.11769e+020
+169 55 2.11505e+020
+285 72 2.11036e+020
+412 256 2.10414e+020
+337 13 2.09907e+020
+329 11 2.08997e+020
+40 296 2.08841e+020
+70 477 2.08547e+020
+527 18 2.08465e+020
+261 222 2.07387e+020
+512 221 2.06955e+020
+358 66 2.06924e+020
+482 299 2.06716e+020
+544 169 2.06608e+020
+250 402 2.062e+020
+100 79 2.0576e+020
+165 357 2.05673e+020
+56 183 2.05556e+020
+488 44 2.04845e+020
+362 131 2.04324e+020
+46 355 2.04205e+020
+158 72 2.03654e+020
+179 114 2.0343e+020
+134 97 2.03296e+020
+524 187 2.0249e+020
+104 61 2.02043e+020
+507 169 2.01207e+020
+448 445 2.00375e+020
+335 435 2.00169e+020
+300 264 1.99608e+020
+164 73 1.99198e+020
+350 321 1.9851e+020
+498 225 1.98434e+020
+209 21 1.98211e+020
+449 117 1.98111e+020
+329 13 1.97659e+020
+164 278 1.97531e+020
+248 316 1.9717e+020
+506 6 1.97004e+020
+462 42 1.96943e+020
+210 34 1.96761e+020
+68 338 1.96123e+020
+345 350 1.95402e+020
+527 100 1.95331e+020
+63 236 1.95316e+020
+134 131 1.94562e+020
+392 218 1.94253e+020
+386 244 1.93384e+020
+111 110 1.93263e+020
+52 99 1.92282e+020
+450 374 1.92139e+020
+360 141 1.92088e+020
+222 433 1.91878e+020
+256 139 1.91714e+020
+362 7 1.91238e+020
+44 98 1.90926e+020
+186 36 1.90308e+020
+9 47 1.89086e+020
+129 74 1.89059e+020
+297 69 1.88886e+020
+165 179 1.87866e+020
+483 58 1.8776e+020
+32 269 1.87388e+020
+485 44 1.87168e+020
+332 294 1.86983e+020
+476 20 1.86449e+020
+389 17 1.85393e+020
+333 66 1.8499e+020
+333 258 1.84638e+020
+436 379 1.8453e+020
+9 9 1.84409e+020
+416 9 1.83935e+020
+56 364 1.83714e+020
+174 114 1.83627e+020
+475 247 1.83451e+020
+7 9 1.83424e+020
+185 289 1.83308e+020
+88 207 1.8317e+020
+437 319 1.82485e+020
+54 222 1.82032e+020
+463 27 1.81921e+020
+575 459 1.80784e+020
+103 76 1.80614e+020
+404 266 1.7995e+020
+190 360 1.79638e+020
+282 73 1.79444e+020
+485 58 1.79255e+020
+65 235 1.78724e+020
+355 129 1.785e+020
+165 313 1.77242e+020
+304 190 1.77028e+020
+193 218 1.76975e+020
+165 242 1.75817e+020
+385 294 1.75233e+020
+65 318 1.74946e+020
+229 291 1.74166e+020
+190 350 1.74077e+020
+450 87 1.73588e+020
+544 456 1.73557e+020
+119 116 1.7355e+020
+265 30 1.73155e+020
+243 166 1.73058e+020
+123 199 1.72802e+020
+324 314 1.72772e+020
+258 161 1.72513e+020
+403 188 1.72111e+020
+343 122 1.71852e+020
+464 280 1.71606e+020
+110 95 1.71554e+020
+194 216 1.70864e+020
+238 350 1.7073e+020
+284 198 1.70643e+020
+357 63 1.70476e+020
+45 12 1.70103e+020
+242 203 1.69566e+020
+140 181 1.69532e+020
+263 402 1.69429e+020
+407 198 1.69244e+020
+402 186 1.69159e+020
+430 148 1.68888e+020
+88 216 1.68821e+020
+97 448 1.6855e+020
+568 42 1.67833e+020
+265 32 1.67628e+020
+88 148 1.67495e+020
+110 179 1.67286e+020
+349 181 1.66988e+020
+324 294 1.66979e+020
+298 179 1.66661e+020
+114 95 1.66487e+020
+329 90 1.66369e+020
+345 107 1.65897e+020
+47 81 1.65866e+020
+571 446 1.65559e+020
+253 139 1.6545e+020
+84 213 1.65217e+020
+296 332 1.65162e+020
+168 326 1.65098e+020
+373 392 1.65093e+020
+271 167 1.64739e+020
+107 29 1.64468e+020
+448 218 1.6411e+020
+223 218 1.63853e+020
+295 269 1.63649e+020
+503 164 1.63453e+020
+493 81 1.62957e+020
+276 353 1.6252e+020
+356 321 1.62094e+020
+76 30 1.61899e+020
+124 271 1.61766e+020
+42 62 1.61735e+020
+447 8 1.60834e+020
+93 199 1.60714e+020
+168 285 1.60136e+020
+484 329 1.59886e+020
+220 290 1.58926e+020
+355 255 1.5884e+020
+167 244 1.5883e+020
+448 438 1.58827e+020
+557 463 1.58574e+020
+248 423 1.58325e+020
+482 364 1.5824e+020
+104 58 1.57994e+020
+431 319 1.57924e+020
+112 344 1.57902e+020
+540 406 1.57755e+020
+41 339 1.56533e+020
+166 110 1.56001e+020
+538 406 1.55828e+020
+60 135 1.55578e+020
+124 365 1.55287e+020
+48 13 1.549e+020
+117 426 1.54626e+020
+483 142 1.54607e+020
+86 311 1.54591e+020
+277 219 1.54446e+020
+44 339 1.54255e+020
+511 100 1.5417e+020
+89 258 1.53831e+020
+108 170 1.5348e+020
+512 219 1.53146e+020
+433 158 1.53045e+020
+56 78 1.53034e+020
+138 173 1.52917e+020
+142 393 1.52829e+020
+539 457 1.52626e+020
+414 65 1.52606e+020
+346 297 1.52604e+020
+271 73 1.52053e+020
+280 365 1.51423e+020
+367 144 1.51319e+020
+541 457 1.50917e+020
+125 259 1.50758e+020
+29 31 1.50731e+020
+542 209 1.50175e+020
+35 31 1.50002e+020
+68 419 1.49863e+020
+227 186 1.49852e+020
+162 97 1.49484e+020
+83 134 1.49184e+020
+365 105 1.4897e+020
+208 225 1.48481e+020
+238 95 1.48453e+020
+343 124 1.48393e+020
+335 218 1.48366e+020
+332 90 1.48285e+020
+273 181 1.4818e+020
+183 36 1.47993e+020
+471 266 1.47984e+020
+165 98 1.47606e+020
+455 85 1.47367e+020
+326 426 1.47043e+020
+332 92 1.46965e+020
+525 37 1.4696e+020
+163 110 1.46529e+020
+471 212 1.46467e+020
+235 161 1.46423e+020
+388 164 1.46335e+020
+196 128 1.46048e+020
+164 209 1.46001e+020
+353 294 1.45952e+020
+385 326 1.45586e+020
+107 429 1.45498e+020
+330 67 1.45477e+020
+160 137 1.45447e+020
+276 331 1.44853e+020
+349 146 1.44765e+020
+541 128 1.44579e+020
+64 232 1.44118e+020
+523 123 1.44116e+020
+111 169 1.44102e+020
+344 111 1.43916e+020
+77 7 1.4385e+020
+510 174 1.43839e+020
+451 438 1.43822e+020
+159 182 1.43358e+020
+395 164 1.42687e+020
+451 62 1.42312e+020
+345 276 1.42084e+020
+391 164 1.41812e+020
+120 447 1.41398e+020
+213 32 1.40679e+020
+473 203 1.40496e+020
+145 161 1.40469e+020
+83 475 1.40364e+020
+93 196 1.40334e+020
+215 71 1.39727e+020
+440 379 1.39683e+020
+377 68 1.39639e+020
+246 88 1.3951e+020
+145 16 1.39317e+020
+122 197 1.39202e+020
+384 260 1.38831e+020
+357 11 1.38794e+020
+191 206 1.38326e+020
+357 282 1.38093e+020
+473 6 1.38073e+020
+309 440 1.38052e+020
+412 45 1.37844e+020
+190 313 1.3784e+020
+244 208 1.37689e+020
+155 318 1.37423e+020
+514 97 1.37116e+020
+454 116 1.36879e+020
+333 202 1.36873e+020
+217 425 1.3674e+020
+118 76 1.36531e+020
+249 366 1.36375e+020
+328 214 1.36204e+020
+392 49 1.36098e+020
+92 254 1.35542e+020
+472 24 1.35512e+020
+33 219 1.35455e+020
+135 179 1.35335e+020
+494 138 1.35158e+020
+574 13 1.35068e+020
+212 74 1.35046e+020
+217 292 1.34232e+020
+438 339 1.34162e+020
+471 269 1.34091e+020
+153 194 1.34087e+020
+217 147 1.3403e+020
+510 4 1.34022e+020
+18 343 1.33683e+020
+71 146 1.33253e+020
+359 11 1.32951e+020
+444 451 1.32738e+020
+326 90 1.32727e+020
+549 39 1.32638e+020
+305 440 1.32306e+020
+420 49 1.32299e+020
+207 222 1.32084e+020
+50 288 1.31787e+020
+445 123 1.31522e+020
+259 34 1.31395e+020
+10 78 1.30827e+020
+160 185 1.30791e+020
+539 97 1.30004e+020
+552 377 1.29906e+020
+422 298 1.29773e+020
+257 147 1.29662e+020
+71 149 1.29209e+020
+339 166 1.29167e+020
+231 199 1.29138e+020
+280 130 1.28815e+020
+215 96 1.28718e+020
+213 71 1.2853e+020
+529 400 1.28362e+020
+49 155 1.28273e+020
+572 406 1.28174e+020
+431 81 1.27465e+020
+91 290 1.27293e+020
+468 208 1.26857e+020
+378 338 1.26303e+020
+342 47 1.26104e+020
+155 114 1.26074e+020
+163 62 1.25845e+020
+489 58 1.25841e+020
+158 112 1.25777e+020
+340 164 1.25556e+020
+530 143 1.25551e+020
+233 33 1.25397e+020
+485 263 1.25213e+020
+487 263 1.2511e+020
+272 170 1.25013e+020
+268 280 1.24869e+020
+272 285 1.24832e+020
+541 130 1.24718e+020
+482 451 1.24402e+020
+396 266 1.24398e+020
+577 246 1.24388e+020
+574 178 1.24387e+020
+149 302 1.24129e+020
+569 382 1.23617e+020
+519 121 1.23121e+020
+191 143 1.23074e+020
+572 179 1.23037e+020
+371 90 1.22686e+020
+528 363 1.22585e+020
+75 475 1.22503e+020
+86 63 1.2233e+020
+570 451 1.22158e+020
+301 105 1.22075e+020
+139 99 1.21698e+020
+167 278 1.21425e+020
+138 96 1.21415e+020
+526 360 1.21258e+020
+151 226 1.20944e+020
+270 290 1.20864e+020
+521 264 1.20668e+020
+515 59 1.20623e+020
+176 20 1.20448e+020
+70 96 1.2024e+020
+522 426 1.20127e+020
+424 399 1.19895e+020
+86 61 1.19812e+020
+272 132 1.19575e+020
+372 86 1.19392e+020
+318 459 1.19376e+020
+287 397 1.1928e+020
+271 186 1.19101e+020
+295 421 1.19087e+020
+420 47 1.18864e+020
+88 368 1.18826e+020
+282 391 1.18734e+020
+337 62 1.18556e+020
+74 477 1.18535e+020
+424 376 1.18457e+020
+260 238 1.18229e+020
+386 164 1.18212e+020
+355 342 1.18202e+020
+364 101 1.18176e+020
+280 136 1.17981e+020
+319 187 1.17724e+020
+214 94 1.17631e+020
+421 399 1.17608e+020
+381 67 1.174e+020
+59 254 1.17192e+020
+220 184 1.17181e+020
+459 264 1.16983e+020
+169 17 1.16632e+020
+92 257 1.16603e+020
+269 54 1.16407e+020
+35 266 1.16375e+020
+470 121 1.16374e+020
+550 59 1.16326e+020
+35 217 1.16144e+020
+155 295 1.16091e+020
+312 80 1.1608e+020
+247 219 1.1585e+020
+309 373 1.15803e+020
+78 474 1.1515e+020
+530 96 1.15035e+020
+205 308 1.15018e+020
+540 101 1.1501e+020
+468 138 1.14583e+020
+103 237 1.14356e+020
+263 285 1.14291e+020
+89 375 1.14178e+020
+221 151 1.14015e+020
+380 107 1.13932e+020
+306 449 1.13761e+020
+538 101 1.13758e+020
+407 45 1.13448e+020
+575 100 1.13144e+020
+440 456 1.13096e+020
+363 357 1.13091e+020
+217 74 1.13061e+020
+468 204 1.13004e+020
+260 236 1.12891e+020
+162 169 1.12805e+020
+517 42 1.12416e+020
+463 199 1.12384e+020
+35 177 1.12369e+020
+458 115 1.12015e+020
+273 295 1.11868e+020
+130 477 1.11847e+020
+279 51 1.11763e+020
+153 112 1.11324e+020
+204 221 1.11166e+020
+578 44 1.11163e+020
+196 132 1.11161e+020
+164 206 1.11048e+020
+217 145 1.11022e+020
+328 181 1.11002e+020
+289 139 1.10893e+020
+258 236 1.10892e+020
+104 307 1.10863e+020
+187 265 1.10738e+020
+402 44 1.10678e+020
+265 17 1.10631e+020
+48 234 1.10498e+020
+249 361 1.10321e+020
+437 240 1.103e+020
+100 445 1.10274e+020
+432 381 1.10045e+020
+409 45 1.09991e+020
+273 219 1.0972e+020
+541 133 1.09718e+020
+438 467 1.09596e+020
+337 264 1.0942e+020
+192 292 1.09356e+020
+423 50 1.09265e+020
+282 268 1.09142e+020
+426 379 1.09139e+020
+482 440 1.09133e+020
+94 257 1.09013e+020
+136 136 1.08897e+020
+455 162 1.08682e+020
+119 131 1.08613e+020
+260 226 1.08494e+020
+33 111 1.0842e+020
+392 215 1.08372e+020
+537 262 1.08312e+020
+174 93 1.08217e+020
+279 419 1.0811e+020
+157 218 1.08107e+020
+453 102 1.08038e+020
+563 323 1.07971e+020
+107 75 1.07956e+020
+265 311 1.07806e+020
+91 60 1.07618e+020
+244 293 1.07571e+020
+78 198 1.07517e+020
+56 75 1.07454e+020
+283 52 1.07355e+020
+411 66 1.06898e+020
+105 97 1.06808e+020
+420 66 1.06613e+020
+480 440 1.06334e+020
+22 48 1.06169e+020
+279 132 1.06093e+020
+494 160 1.05963e+020
+483 325 1.05878e+020
+105 223 1.05722e+020
+358 54 1.05679e+020
+437 281 1.05422e+020
+227 112 1.05408e+020
+92 444 1.05172e+020
+131 71 1.05095e+020
+9 234 1.04866e+020
+486 138 1.0484e+020
+205 435 1.04736e+020
+357 166 1.0467e+020
+198 132 1.04656e+020
+84 72 1.04457e+020
+216 180 1.04429e+020
+109 136 1.04346e+020
+464 197 1.04025e+020
+313 76 1.03986e+020
+467 280 1.03688e+020
+176 92 1.03613e+020
+282 419 1.03606e+020
+91 276 1.03538e+020
+162 119 1.0325e+020
+160 146 1.03142e+020
+87 144 1.03091e+020
+298 274 1.03086e+020
+167 118 1.03081e+020
+453 178 1.02903e+020
+394 215 1.02594e+020
+387 217 1.02352e+020
+418 83 1.02305e+020
+514 83 1.02286e+020
+114 1 1.02236e+020
+530 397 1.02166e+020
+266 300 1.01956e+020
+444 114 1.01955e+020
+471 237 1.01929e+020
+223 14 1.0154e+020
+340 108 1.01539e+020
+130 475 1.01416e+020
+283 195 1.01096e+020
+343 200 1.01075e+020
+83 171 1.01051e+020
+55 145 1.00802e+020
+281 221 1.00721e+020
+196 195 1.00288e+020
+527 347 1.0026e+020
+153 235 1.00147e+020
+186 20 1.00043e+020
+506 361 1.00006e+020
+213 22 9.99276e+019
+292 335 9.99214e+019
+178 273 9.98931e+019
+525 173 9.97996e+019
+366 164 9.97496e+019
+441 239 9.96772e+019
+159 144 9.95626e+019
+216 175 9.94119e+019
+325 133 9.92481e+019
+10 103 9.92304e+019
+360 164 9.90958e+019
+87 251 9.89965e+019
+418 283 9.89799e+019
+365 302 9.89541e+019
+334 62 9.89156e+019
+561 226 9.8694e+019
+182 343 9.855e+019
+146 449 9.85125e+019
+196 255 9.84025e+019
+174 95 9.83474e+019
+242 421 9.83395e+019
+465 425 9.82269e+019
+167 116 9.81877e+019
+89 276 9.81615e+019
+232 13 9.79901e+019
+295 273 9.79356e+019
+565 323 9.77993e+019
+305 194 9.74411e+019
+187 313 9.73247e+019
+455 177 9.70404e+019
+229 13 9.69303e+019
+450 180 9.66983e+019
+211 396 9.66569e+019
+43 80 9.6526e+019
+133 237 9.6437e+019
+463 22 9.59753e+019
+70 128 9.58495e+019
+134 147 9.58451e+019
+596 363 9.56622e+019
+10 75 9.53523e+019
+569 423 9.53145e+019
+223 113 9.52836e+019
+537 393 9.52115e+019
+279 49 9.51592e+019
+362 244 9.51379e+019
+524 399 9.51109e+019
+39 287 9.50356e+019
+65 182 9.49448e+019
+497 66 9.48303e+019
+442 241 9.47793e+019
+319 166 9.47781e+019
+561 142 9.47468e+019
+480 84 9.47155e+019
+142 449 9.46142e+019
+198 196 9.45232e+019
+512 77 9.44957e+019
+187 309 9.43503e+019
+346 47 9.41565e+019
+274 216 9.40392e+019
+504 260 9.38883e+019
+512 75 9.36759e+019
+164 169 9.34677e+019
+359 243 9.34264e+019
+157 90 9.34108e+019
+253 389 9.33388e+019
+226 198 9.32368e+019
+220 315 9.31856e+019
+72 164 9.31431e+019
+209 396 9.29852e+019
+182 95 9.29638e+019
+278 328 9.29247e+019
+475 342 9.29109e+019
+281 438 9.26089e+019
+70 22 9.26075e+019
+527 221 9.25813e+019
+56 374 9.25133e+019
+256 220 9.232e+019
+110 262 9.20867e+019
+449 140 9.19913e+019
+382 102 9.19272e+019
+503 156 9.1862e+019
+515 119 9.1808e+019
+418 449 9.1735e+019
+209 55 9.17208e+019
+162 240 9.15658e+019
+176 95 9.14512e+019
+240 155 9.14137e+019
+415 357 9.12541e+019
+404 376 9.12434e+019
+283 133 9.12261e+019
+322 426 9.08648e+019
+494 58 9.07303e+019
+389 325 9.05739e+019
+277 182 9.04254e+019
+267 290 9.02987e+019
+17 434 9.00394e+019
+299 269 8.98774e+019
+362 66 8.97833e+019
+351 273 8.9776e+019
+150 112 8.97602e+019
+197 123 8.97482e+019
+325 258 8.96032e+019
+280 204 8.92664e+019
+98 257 8.91994e+019
+222 116 8.88758e+019
+105 360 8.88598e+019
+343 142 8.87726e+019
+110 265 8.87683e+019
+499 81 8.87507e+019
+340 473 8.86098e+019
+542 246 8.85609e+019
+567 180 8.84217e+019
+354 12 8.83561e+019
+323 14 8.83327e+019
+190 329 8.82378e+019
+234 198 8.815e+019
+323 166 8.80306e+019
+155 91 8.80257e+019
+548 139 8.79879e+019
+330 26 8.78014e+019
+512 103 8.77119e+019
+178 331 8.75699e+019
+277 111 8.75492e+019
+513 442 8.74994e+019
+53 360 8.74918e+019
+200 313 8.73938e+019
+106 32 8.72505e+019
+156 39 8.72472e+019
+191 210 8.7104e+019
+254 78 8.69126e+019
+392 20 8.68812e+019
+267 288 8.66695e+019
+278 224 8.65093e+019
+89 181 8.63852e+019
+63 253 8.62883e+019
+288 135 8.6286e+019
+122 123 8.62796e+019
+541 248 8.61244e+019
+336 405 8.60029e+019
+307 169 8.56701e+019
+523 346 8.55281e+019
+78 271 8.54444e+019
+298 409 8.54021e+019
+479 243 8.52017e+019
+125 77 8.51698e+019
+364 180 8.50775e+019
+238 34 8.50553e+019
+509 58 8.49618e+019
+441 23 8.49363e+019
+430 151 8.49212e+019
+125 96 8.47546e+019
+528 431 8.47149e+019
+78 133 8.46532e+019
+521 187 8.46152e+019
+296 410 8.45683e+019
+229 281 8.4341e+019
+69 24 8.42628e+019
+378 183 8.42244e+019
+97 38 8.42236e+019
+163 252 8.42189e+019
+12 81 8.41872e+019
+499 266 8.41549e+019
+466 123 8.39586e+019
+510 60 8.3786e+019
+400 168 8.35568e+019
+240 166 8.34965e+019
+155 56 8.33887e+019
+283 204 8.33148e+019
+220 212 8.32821e+019
+186 94 8.32707e+019
+244 281 8.32147e+019
+106 106 8.32006e+019
+368 82 8.31694e+019
+114 169 8.31689e+019
+432 268 8.31585e+019
+218 208 8.31366e+019
+405 79 8.31235e+019
+512 94 8.3079e+019
+279 145 8.30195e+019
+516 381 8.30001e+019
+51 453 8.2975e+019
+479 286 8.28702e+019
+257 134 8.27818e+019
+591 20 8.25994e+019
+448 124 8.25967e+019
+239 163 8.25702e+019
+397 104 8.25153e+019
+103 258 8.25026e+019
+151 232 8.24401e+019
+424 64 8.23554e+019
+188 278 8.18747e+019
+559 80 8.16475e+019
+108 138 8.16127e+019
+307 428 8.13638e+019
+480 166 8.12968e+019
+525 344 8.12399e+019
+487 375 8.12365e+019
+323 146 8.12178e+019
+94 80 8.12014e+019
+388 127 8.11938e+019
+175 272 8.11515e+019
+103 260 8.11273e+019
+40 355 8.11037e+019
+471 82 8.10771e+019
+161 33 8.10021e+019
+501 320 8.07807e+019
+186 133 8.07783e+019
+299 87 8.07609e+019
+172 16 8.05861e+019
+55 172 8.05843e+019
+358 268 8.05677e+019
+390 118 8.05213e+019
+113 243 8.04351e+019
+89 476 8.04091e+019
+327 105 8.03623e+019
+283 395 8.03206e+019
+86 363 8.01405e+019
+447 351 7.99787e+019
+291 50 7.98646e+019
+597 33 7.95826e+019
+571 326 7.95684e+019
+405 11 7.95143e+019
+298 25 7.94783e+019
+247 105 7.94544e+019
+308 358 7.94042e+019
+242 33 7.9374e+019
+576 330 7.93602e+019
+302 333 7.92478e+019
+498 463 7.92305e+019
+18 235 7.92039e+019
+147 99 7.91927e+019
+388 138 7.91044e+019
+212 146 7.90692e+019
+376 240 7.90502e+019
+74 196 7.90095e+019
+129 191 7.87289e+019
+527 344 7.87253e+019
+511 297 7.85507e+019
+286 164 7.83601e+019
+289 50 7.8354e+019
+232 31 7.82514e+019
+255 107 7.81661e+019
+147 97 7.81126e+019
+132 146 7.80838e+019
+432 151 7.79556e+019
+407 81 7.79047e+019
+511 294 7.77657e+019
+367 337 7.77025e+019
+541 381 7.75158e+019
+108 382 7.73779e+019
+388 2 7.7248e+019
+102 96 7.72392e+019
+167 105 7.72273e+019
+183 142 7.72263e+019
+390 124 7.7207e+019
+387 450 7.71389e+019
+247 107 7.70242e+019
+9 32 7.69758e+019
+514 203 7.69178e+019
+258 392 7.68357e+019
+373 241 7.68266e+019
+115 116 7.67604e+019
+436 237 7.66915e+019
+533 394 7.66582e+019
+240 327 7.66291e+019
+423 165 7.66153e+019
+65 370 7.66121e+019
+478 7 7.65592e+019
+383 321 7.64505e+019
+166 18 7.64082e+019
+506 380 7.62648e+019
+261 140 7.61944e+019
+455 48 7.61932e+019
+191 188 7.61486e+019
+391 325 7.61151e+019
+200 294 7.60009e+019
+346 342 7.59963e+019
+578 85 7.5928e+019
+447 21 7.58337e+019
+594 425 7.57561e+019
+222 72 7.57071e+019
+174 312 7.57015e+019
+150 397 7.56411e+019
+161 19 7.56363e+019
+197 111 7.5564e+019
+348 343 7.54951e+019
+162 152 7.53758e+019
+207 163 7.53726e+019
+2 156 7.53395e+019
+205 163 7.5271e+019
+156 95 7.52589e+019
+174 187 7.51399e+019
+291 262 7.50824e+019
+543 173 7.50625e+019
+560 145 7.50559e+019
+94 375 7.49812e+019
+310 446 7.49144e+019
+413 264 7.48769e+019
+33 164 7.47757e+019
+148 226 7.47685e+019
+167 433 7.47536e+019
+299 255 7.46908e+019
+394 104 7.45988e+019
+291 89 7.45807e+019
+504 143 7.45509e+019
+406 354 7.45268e+019
+126 125 7.44843e+019
+227 130 7.44733e+019
+311 299 7.44405e+019
+272 64 7.44049e+019
+287 214 7.43584e+019
+166 20 7.43525e+019
+315 446 7.43389e+019
+183 316 7.42675e+019
+452 48 7.42671e+019
+106 263 7.42079e+019
+150 79 7.41431e+019
+149 232 7.41426e+019
+255 4 7.40842e+019
+582 446 7.38889e+019
+540 40 7.38776e+019
+211 11 7.38358e+019
+275 214 7.37676e+019
+255 459 7.37357e+019
+431 270 7.37241e+019
+514 403 7.35226e+019
+41 203 7.35097e+019
+155 162 7.3453e+019
+382 413 7.33788e+019
+404 15 7.33645e+019
+181 165 7.32611e+019
+217 429 7.32367e+019
+524 78 7.32304e+019
+64 372 7.31693e+019
+149 132 7.3118e+019
+371 83 7.30746e+019
+35 200 7.29873e+019
+333 330 7.28998e+019
+401 164 7.27721e+019
+480 46 7.27538e+019
+290 311 7.26881e+019
+259 70 7.26265e+019
+388 53 7.25129e+019
+277 320 7.24732e+019
+542 162 7.24486e+019
+35 202 7.23315e+019
+242 282 7.22684e+019
+71 407 7.22529e+019
+104 197 7.217e+019
+262 369 7.20761e+019
+149 229 7.2062e+019
+56 334 7.19225e+019
+464 119 7.17616e+019
+209 419 7.14853e+019
+321 12 7.14723e+019
+161 126 7.14424e+019
+518 17 7.14412e+019
+112 354 7.1426e+019
+509 442 7.13552e+019
+14 435 7.12725e+019
+438 108 7.12488e+019
+99 94 7.12144e+019
+85 40 7.10427e+019
+407 164 7.09961e+019
+330 414 7.09427e+019
+226 294 7.09272e+019
+8 115 7.08801e+019
+163 348 7.08676e+019
+185 135 7.08143e+019
+420 362 7.07353e+019
+447 376 7.07109e+019
+109 2 7.06959e+019
+214 436 7.06592e+019
+382 411 7.05753e+019
+12 204 7.05498e+019
+309 82 7.05405e+019
+101 40 7.04909e+019
+106 183 7.04511e+019
+114 215 7.04355e+019
+215 289 7.04265e+019
+194 84 7.04115e+019
+339 182 7.03924e+019
+275 204 7.03173e+019
+525 177 7.03049e+019
+3 61 7.02841e+019
+270 108 7.01882e+019
+460 376 7.01283e+019
+202 309 7.01139e+019
+269 58 7.00363e+019
+385 65 7.00017e+019
+113 76 6.99917e+019
+330 334 6.99901e+019
+584 346 6.99452e+019
+114 130 6.96503e+019
+275 52 6.95492e+019
+362 48 6.94687e+019
+276 269 6.94389e+019
+222 86 6.9403e+019
+77 162 6.94023e+019
+165 379 6.91197e+019
+584 37 6.90761e+019
+225 51 6.90345e+019
+48 161 6.89877e+019
+106 260 6.89545e+019
+558 143 6.8889e+019
+360 369 6.88457e+019
+483 287 6.88412e+019
+157 122 6.88369e+019
+46 408 6.88243e+019
+207 161 6.88104e+019
+212 150 6.88066e+019
+298 419 6.87498e+019
+53 295 6.87239e+019
+258 370 6.86683e+019
+249 386 6.85982e+019
+96 456 6.85063e+019
+86 377 6.84762e+019
+102 162 6.84238e+019
+386 284 6.83644e+019
+408 429 6.83378e+019
+43 146 6.82991e+019
+203 160 6.82965e+019
+39 238 6.82332e+019
+386 282 6.8228e+019
+318 453 6.82182e+019
+399 108 6.80385e+019
+225 397 6.80356e+019
+468 28 6.80044e+019
+182 286 6.79741e+019
+537 93 6.79578e+019
+336 144 6.79174e+019
+525 282 6.77392e+019
+41 182 6.76206e+019
+409 164 6.76183e+019
+412 246 6.75797e+019
+594 101 6.7571e+019
+26 44 6.75535e+019
+290 397 6.75391e+019
+521 184 6.74987e+019
+254 130 6.73582e+019
+524 422 6.73486e+019
+396 23 6.73205e+019
+262 394 6.72415e+019
+200 129 6.72045e+019
+4 35 6.7178e+019
+168 316 6.70663e+019
+204 419 6.70299e+019
+394 106 6.68906e+019
+258 459 6.68058e+019
+171 451 6.67998e+019
+526 79 6.67522e+019
+149 130 6.67144e+019
+142 235 6.66966e+019
+453 378 6.6643e+019
+129 428 6.66193e+019
+418 260 6.65872e+019
+376 83 6.65556e+019
+190 109 6.64335e+019
+10 125 6.6433e+019
+211 225 6.63941e+019
+215 124 6.63748e+019
+560 228 6.63022e+019
+53 330 6.62862e+019
+316 105 6.62033e+019
+302 195 6.60024e+019
+543 444 6.59114e+019
+597 273 6.58592e+019
+396 21 6.58449e+019
+417 87 6.58295e+019
+511 352 6.57685e+019
+186 269 6.57519e+019
+314 300 6.56535e+019
+516 73 6.5621e+019
+298 398 6.56164e+019
+188 109 6.55806e+019
+114 132 6.53665e+019
+4 154 6.53301e+019
+132 255 6.53079e+019
+275 139 6.52473e+019
+199 329 6.51991e+019
+143 96 6.51678e+019
+380 451 6.51267e+019
+241 190 6.51169e+019
+576 37 6.5089e+019
+432 237 6.50178e+019
+288 348 6.49851e+019
+33 260 6.4906e+019
+87 134 6.48227e+019
+147 78 6.47884e+019
+175 240 6.47184e+019
+119 95 6.46226e+019
+270 415 6.46207e+019
+63 368 6.45539e+019
+173 240 6.4523e+019
+20 316 6.44544e+019
+113 144 6.43916e+019
+137 237 6.43798e+019
+452 404 6.43051e+019
+186 202 6.42239e+019
+541 142 6.41613e+019
+204 294 6.41456e+019
+349 270 6.41104e+019
+268 19 6.40677e+019
+408 26 6.40278e+019
+155 444 6.39677e+019
+278 86 6.39378e+019
+381 120 6.38952e+019
+412 3 6.38501e+019
+175 120 6.38141e+019
+385 334 6.37499e+019
+409 162 6.37143e+019
+461 161 6.36369e+019
+268 88 6.36179e+019
+36 76 6.36049e+019
+109 145 6.35894e+019
+337 428 6.35685e+019
+596 313 6.35406e+019
+187 294 6.35155e+019
+437 25 6.34582e+019
+129 259 6.34422e+019
+563 145 6.34359e+019
+572 330 6.34297e+019
+158 305 6.34119e+019
+186 101 6.33879e+019
+51 230 6.31035e+019
+111 358 6.30858e+019
+268 118 6.30729e+019
+247 405 6.30616e+019
+236 403 6.2931e+019
+310 356 6.29023e+019
+56 137 6.27598e+019
+261 199 6.27481e+019
+250 150 6.27123e+019
+233 406 6.26888e+019
+189 255 6.26078e+019
+481 101 6.26059e+019
+476 83 6.25485e+019
+580 346 6.25086e+019
+98 164 6.25063e+019
+272 415 6.24794e+019
+114 261 6.24436e+019
+182 289 6.23794e+019
+150 2 6.23583e+019
+270 19 6.23447e+019
+250 221 6.22637e+019
+547 301 6.21899e+019
+470 42 6.20869e+019
+402 143 6.20659e+019
+438 182 6.20266e+019
+255 74 6.19814e+019
+253 163 6.18393e+019
+96 95 6.17938e+019
+595 269 6.16652e+019
+150 199 6.16594e+019
+95 387 6.16428e+019
+72 188 6.1597e+019
+485 6 6.15168e+019
+94 276 6.14711e+019
+180 155 6.14689e+019
+249 388 6.14418e+019
+275 136 6.14297e+019
+173 417 6.14283e+019
+244 388 6.12935e+019
+264 321 6.12834e+019
+543 21 6.12682e+019
+86 360 6.12407e+019
+116 361 6.12319e+019
+115 359 6.12198e+019
+436 121 6.10912e+019
+216 204 6.10251e+019
+562 149 6.09231e+019
+283 338 6.09154e+019
+316 103 6.08985e+019
+314 103 6.08443e+019
+231 178 6.08252e+019
+201 195 6.07872e+019
+262 143 6.07621e+019
+65 220 6.07601e+019
+528 31 6.06961e+019
+503 363 6.06777e+019
+449 143 6.05111e+019
+543 217 6.04767e+019
+541 21 6.04346e+019
+449 126 6.03371e+019
+397 160 6.03305e+019
+414 2 6.03018e+019
+117 212 6.0299e+019
+501 145 6.02982e+019
+382 451 6.02636e+019
+563 320 6.02162e+019
+410 140 6.02e+019
+156 305 6.01762e+019
+200 76 6.01612e+019
+443 168 6.00791e+019
+251 164 6.00767e+019
+271 145 6.00233e+019
+423 372 5.9924e+019
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_3_3.txt b/test_data/harriscorners/hc_msc_3.00_0.04_3_3.txt
new file mode 100644
index 0000000..e50317d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_3_3.txt
@@ -0,0 +1,2294 @@
+2293
+449 298 7.11603e+011
+499 1 6.14136e+011
+535 242 5.50429e+011
+329 127 5.373e+011
+274 366 5.00877e+011
+421 183 4.81895e+011
+401 261 4.8154e+011
+388 178 4.73174e+011
+76 236 4.55167e+011
+553 41 4.41546e+011
+213 73 4.38065e+011
+200 18 4.32789e+011
+321 313 4.21361e+011
+385 221 4.18499e+011
+436 68 4.12777e+011
+66 320 4.11039e+011
+447 397 4.07071e+011
+89 197 4.04961e+011
+121 44 4.04891e+011
+173 312 4.01539e+011
+544 170 3.93932e+011
+286 296 3.92621e+011
+135 215 3.87618e+011
+456 281 3.8236e+011
+45 26 3.74365e+011
+159 143 3.72284e+011
+363 401 3.71432e+011
+471 240 3.66628e+011
+545 217 3.66514e+011
+273 289 3.57933e+011
+449 219 3.57373e+011
+486 22 3.55373e+011
+245 94 3.54639e+011
+365 200 3.52418e+011
+515 77 3.5205e+011
+110 239 3.46322e+011
+301 175 3.46175e+011
+34 138 3.45836e+011
+448 263 3.44597e+011
+364 298 3.36092e+011
+455 3 3.34436e+011
+407 64 3.31906e+011
+174 238 3.28586e+011
+378 317 3.27893e+011
+3 47 3.21677e+011
+256 386 3.21376e+011
+137 208 3.20548e+011
+210 54 3.19496e+011
+144 309 3.16408e+011
+299 53 3.14265e+011
+296 420 3.12681e+011
+221 16 3.08559e+011
+36 269 3.08535e+011
+412 256 3.08137e+011
+223 38 3.06453e+011
+282 115 3.06092e+011
+317 336 3.0581e+011
+59 185 3.00251e+011
+449 403 2.99991e+011
+508 18 2.9945e+011
+82 27 2.98989e+011
+66 344 2.98062e+011
+524 263 2.96509e+011
+312 149 2.96108e+011
+396 319 2.93987e+011
+125 255 2.91872e+011
+126 162 2.91522e+011
+317 385 2.91386e+011
+120 4 2.90357e+011
+344 10 2.85939e+011
+242 203 2.82159e+011
+175 94 2.81316e+011
+197 57 2.79765e+011
+253 138 2.78104e+011
+419 7 2.74974e+011
+92 214 2.74678e+011
+507 165 2.72862e+011
+293 120 2.72409e+011
+412 162 2.71107e+011
+489 264 2.71049e+011
+59 74 2.7104e+011
+124 363 2.67523e+011
+426 320 2.66975e+011
+207 223 2.65415e+011
+382 8 2.65404e+011
+246 143 2.64206e+011
+480 298 2.63568e+011
+422 178 2.63002e+011
+82 77 2.61869e+011
+236 74 2.61067e+011
+177 260 2.60806e+011
+184 35 2.60553e+011
+380 68 2.57742e+011
+508 122 2.56886e+011
+236 19 2.56049e+011
+340 9 2.54259e+011
+464 241 2.54188e+011
+419 163 2.53764e+011
+360 315 2.52885e+011
+112 213 2.51371e+011
+236 163 2.49906e+011
+240 90 2.48659e+011
+230 266 2.47889e+011
+479 21 2.47441e+011
+530 61 2.47167e+011
+287 342 2.47008e+011
+64 234 2.46691e+011
+303 184 2.45944e+011
+140 184 2.44138e+011
+359 168 2.43987e+011
+303 207 2.42507e+011
+348 179 2.41435e+011
+28 236 2.39823e+011
+112 4 2.38769e+011
+263 202 2.38225e+011
+281 296 2.37883e+011
+556 182 2.36169e+011
+526 223 2.359e+011
+407 337 2.35793e+011
+220 37 2.35599e+011
+49 99 2.35373e+011
+103 61 2.34769e+011
+203 311 2.34468e+011
+177 166 2.32881e+011
+124 199 2.32514e+011
+279 369 2.32499e+011
+251 13 2.30285e+011
+48 219 2.29656e+011
+524 199 2.27565e+011
+370 107 2.27089e+011
+422 323 2.26376e+011
+425 262 2.26308e+011
+275 181 2.24395e+011
+387 294 2.24322e+011
+415 251 2.21234e+011
+71 148 2.20707e+011
+282 403 2.20115e+011
+569 40 2.18207e+011
+301 164 2.17556e+011
+79 3 2.16608e+011
+308 371 2.15971e+011
+167 238 2.15416e+011
+270 241 2.14214e+011
+484 59 2.13514e+011
+330 164 2.12962e+011
+102 5 2.11026e+011
+271 166 2.11024e+011
+406 375 2.10999e+011
+155 235 2.1087e+011
+373 116 2.09855e+011
+262 165 2.09022e+011
+240 366 2.08406e+011
+382 162 2.07044e+011
+170 19 2.06809e+011
+199 86 2.06783e+011
+153 217 2.06757e+011
+313 75 2.06749e+011
+543 364 2.05938e+011
+521 61 2.05412e+011
+335 105 2.05218e+011
+183 401 2.05129e+011
+365 7 2.05046e+011
+386 126 2.04596e+011
+125 261 2.04527e+011
+539 62 2.04443e+011
+525 60 2.03871e+011
+224 221 2.0234e+011
+185 19 2.0226e+011
+530 184 2.02188e+011
+263 440 2.01914e+011
+511 342 2.01603e+011
+203 17 2.01409e+011
+455 83 2.01138e+011
+473 63 2.00896e+011
+192 124 2.00475e+011
+561 60 1.99979e+011
+326 87 1.9944e+011
+205 202 1.99065e+011
+33 269 1.98924e+011
+359 294 1.98079e+011
+562 148 1.97233e+011
+44 219 1.96878e+011
+270 60 1.9638e+011
+114 344 1.95844e+011
+192 276 1.95691e+011
+465 198 1.95328e+011
+139 58 1.94676e+011
+287 165 1.9386e+011
+173 75 1.93826e+011
+276 222 1.93512e+011
+88 256 1.93469e+011
+371 82 1.93216e+011
+543 58 1.92945e+011
+239 349 1.92191e+011
+38 296 1.91838e+011
+445 23 1.91334e+011
+510 172 1.91067e+011
+245 205 1.90717e+011
+391 47 1.90012e+011
+467 123 1.89929e+011
+572 142 1.89129e+011
+10 102 1.88404e+011
+360 335 1.8802e+011
+282 111 1.87659e+011
+80 474 1.87547e+011
+161 238 1.87481e+011
+538 95 1.87258e+011
+387 167 1.87223e+011
+575 126 1.86488e+011
+526 101 1.86459e+011
+307 439 1.86365e+011
+518 183 1.85775e+011
+416 44 1.85724e+011
+365 259 1.85173e+011
+338 473 1.84708e+011
+512 201 1.84572e+011
+402 276 1.83593e+011
+208 434 1.83225e+011
+323 223 1.83036e+011
+57 29 1.82532e+011
+22 219 1.82195e+011
+212 17 1.81629e+011
+257 88 1.80368e+011
+433 319 1.8007e+011
+35 176 1.79976e+011
+324 165 1.79684e+011
+392 144 1.77674e+011
+553 383 1.77614e+011
+87 78 1.77346e+011
+320 223 1.76796e+011
+387 319 1.76448e+011
+390 58 1.76366e+011
+192 331 1.75947e+011
+266 53 1.75916e+011
+401 184 1.75483e+011
+88 148 1.75362e+011
+101 78 1.75323e+011
+271 278 1.74727e+011
+529 193 1.74033e+011
+487 3 1.73876e+011
+278 352 1.73539e+011
+352 146 1.73308e+011
+513 93 1.73276e+011
+380 26 1.73103e+011
+496 119 1.72817e+011
+112 56 1.72733e+011
+64 371 1.72464e+011
+137 212 1.72354e+011
+111 134 1.72178e+011
+461 267 1.71962e+011
+160 112 1.71933e+011
+507 60 1.71802e+011
+161 256 1.71786e+011
+293 25 1.71392e+011
+512 99 1.70887e+011
+319 202 1.70792e+011
+558 19 1.70434e+011
+525 346 1.6944e+011
+363 250 1.69243e+011
+127 76 1.69015e+011
+341 337 1.68035e+011
+479 81 1.6756e+011
+478 16 1.67489e+011
+508 82 1.6721e+011
+284 222 1.66901e+011
+211 183 1.6665e+011
+138 201 1.66338e+011
+560 229 1.66294e+011
+67 46 1.66167e+011
+484 375 1.66128e+011
+313 222 1.65955e+011
+68 27 1.65771e+011
+353 127 1.65767e+011
+62 60 1.65742e+011
+97 79 1.65452e+011
+433 146 1.65209e+011
+355 320 1.65036e+011
+342 38 1.64931e+011
+250 364 1.64562e+011
+286 210 1.64184e+011
+230 36 1.64177e+011
+424 47 1.63979e+011
+529 143 1.63973e+011
+131 36 1.63468e+011
+163 208 1.63409e+011
+128 1 1.63197e+011
+361 131 1.63017e+011
+163 276 1.62543e+011
+96 447 1.61968e+011
+490 342 1.61551e+011
+512 165 1.60542e+011
+515 17 1.60432e+011
+424 376 1.60095e+011
+562 478 1.60052e+011
+141 22 1.60025e+011
+528 361 1.59888e+011
+556 244 1.5945e+011
+426 119 1.59323e+011
+411 355 1.58329e+011
+498 158 1.58278e+011
+249 33 1.57947e+011
+212 437 1.57875e+011
+411 5 1.57515e+011
+187 216 1.57353e+011
+366 66 1.57286e+011
+355 220 1.56944e+011
+376 84 1.56933e+011
+524 21 1.56872e+011
+46 90 1.56322e+011
+277 332 1.56018e+011
+461 340 1.55891e+011
+273 130 1.55611e+011
+35 300 1.55536e+011
+28 8 1.55505e+011
+299 70 1.55299e+011
+461 279 1.55084e+011
+140 173 1.55081e+011
+497 80 1.55039e+011
+381 411 1.54707e+011
+571 160 1.54629e+011
+275 216 1.54619e+011
+224 183 1.54143e+011
+546 42 1.53896e+011
+260 273 1.53648e+011
+419 440 1.53237e+011
+482 365 1.52827e+011
+166 96 1.52706e+011
+342 123 1.52645e+011
+108 44 1.52086e+011
+228 289 1.51516e+011
+229 292 1.51228e+011
+108 325 1.51192e+011
+27 220 1.50742e+011
+220 100 1.50672e+011
+392 353 1.5065e+011
+162 213 1.50487e+011
+77 256 1.50357e+011
+579 18 1.50301e+011
+314 86 1.50011e+011
+315 165 1.4988e+011
+326 427 1.49601e+011
+166 20 1.48949e+011
+112 393 1.48873e+011
+166 287 1.48182e+011
+497 64 1.48131e+011
+312 81 1.4796e+011
+527 40 1.47898e+011
+259 236 1.47456e+011
+413 100 1.46809e+011
+244 164 1.46738e+011
+477 182 1.46697e+011
+532 268 1.46676e+011
+565 60 1.46612e+011
+282 119 1.46572e+011
+376 7 1.46479e+011
+347 350 1.4632e+011
+554 201 1.46254e+011
+31 8 1.46152e+011
+383 146 1.46061e+011
+297 296 1.45866e+011
+226 295 1.45405e+011
+244 72 1.45395e+011
+285 404 1.45324e+011
+448 138 1.44968e+011
+225 72 1.44964e+011
+342 464 1.44826e+011
+400 273 1.4479e+011
+404 122 1.44734e+011
+332 130 1.44708e+011
+362 370 1.44585e+011
+276 393 1.43838e+011
+260 250 1.43665e+011
+110 96 1.43555e+011
+509 455 1.43259e+011
+250 313 1.42978e+011
+497 228 1.42808e+011
+271 365 1.42698e+011
+177 106 1.42658e+011
+160 183 1.42483e+011
+116 43 1.42354e+011
+352 161 1.4232e+011
+489 22 1.42083e+011
+195 126 1.41879e+011
+486 84 1.41806e+011
+36 147 1.41491e+011
+221 181 1.41435e+011
+164 241 1.41262e+011
+109 340 1.40843e+011
+234 346 1.40825e+011
+55 66 1.40815e+011
+174 57 1.40157e+011
+503 265 1.39969e+011
+215 144 1.39905e+011
+271 293 1.39672e+011
+281 51 1.39657e+011
+419 180 1.39651e+011
+13 206 1.39444e+011
+364 255 1.39095e+011
+180 394 1.39049e+011
+148 396 1.39003e+011
+283 71 1.38832e+011
+373 163 1.3821e+011
+300 265 1.38172e+011
+382 338 1.37702e+011
+550 380 1.37699e+011
+580 52 1.37677e+011
+77 81 1.37523e+011
+49 159 1.37353e+011
+165 202 1.37231e+011
+483 339 1.37208e+011
+91 389 1.3638e+011
+59 219 1.36105e+011
+389 139 1.35968e+011
+522 122 1.35804e+011
+371 393 1.35798e+011
+537 267 1.35672e+011
+131 217 1.35562e+011
+395 260 1.35295e+011
+441 24 1.34721e+011
+363 181 1.34702e+011
+138 111 1.34667e+011
+542 18 1.34515e+011
+331 107 1.34346e+011
+435 182 1.34007e+011
+422 44 1.33884e+011
+224 419 1.33494e+011
+412 23 1.33427e+011
+537 459 1.33297e+011
+305 107 1.33289e+011
+130 77 1.32504e+011
+54 6 1.32308e+011
+315 160 1.32301e+011
+228 129 1.32233e+011
+174 114 1.32211e+011
+76 7 1.32077e+011
+151 447 1.31469e+011
+451 101 1.31451e+011
+184 138 1.3127e+011
+176 39 1.3091e+011
+214 57 1.30903e+011
+329 9 1.30174e+011
+432 112 1.30159e+011
+22 60 1.30079e+011
+381 356 1.29988e+011
+396 161 1.29353e+011
+494 22 1.29172e+011
+351 339 1.29168e+011
+474 262 1.28794e+011
+285 240 1.28719e+011
+561 321 1.28712e+011
+389 327 1.28457e+011
+35 10 1.28393e+011
+509 361 1.28348e+011
+270 67 1.28313e+011
+408 352 1.2785e+011
+266 14 1.27666e+011
+478 4 1.27633e+011
+452 205 1.27338e+011
+469 237 1.27295e+011
+304 193 1.27195e+011
+177 75 1.27114e+011
+339 164 1.27054e+011
+572 121 1.26988e+011
+35 144 1.26851e+011
+223 114 1.2677e+011
+192 359 1.26769e+011
+169 55 1.26527e+011
+292 16 1.26515e+011
+264 445 1.26444e+011
+243 189 1.26101e+011
+228 184 1.2592e+011
+334 89 1.2581e+011
+300 245 1.25767e+011
+441 98 1.25347e+011
+440 64 1.25271e+011
+438 339 1.25088e+011
+424 397 1.24762e+011
+225 180 1.24689e+011
+359 162 1.24467e+011
+538 185 1.24398e+011
+371 67 1.2404e+011
+237 131 1.24015e+011
+465 394 1.23659e+011
+264 298 1.23524e+011
+508 5 1.23268e+011
+454 339 1.23149e+011
+394 158 1.23117e+011
+220 178 1.23094e+011
+494 456 1.22998e+011
+34 236 1.22933e+011
+422 320 1.22807e+011
+48 133 1.22555e+011
+355 106 1.22194e+011
+539 40 1.22175e+011
+141 325 1.22103e+011
+507 204 1.2203e+011
+217 279 1.21878e+011
+109 60 1.21774e+011
+163 108 1.21648e+011
+466 40 1.21538e+011
+529 104 1.21514e+011
+182 110 1.2147e+011
+433 339 1.21342e+011
+387 242 1.21331e+011
+503 360 1.21181e+011
+318 312 1.21084e+011
+303 156 1.20938e+011
+549 183 1.20818e+011
+436 390 1.20612e+011
+85 476 1.20612e+011
+484 181 1.20293e+011
+478 12 1.2019e+011
+273 70 1.20112e+011
+186 342 1.20057e+011
+65 213 1.20049e+011
+52 290 1.19991e+011
+73 185 1.19902e+011
+118 61 1.19875e+011
+170 117 1.19795e+011
+451 83 1.19699e+011
+458 265 1.19652e+011
+162 128 1.1962e+011
+153 301 1.19532e+011
+277 137 1.1943e+011
+435 88 1.19393e+011
+49 152 1.19309e+011
+357 126 1.19288e+011
+179 18 1.19265e+011
+259 142 1.19254e+011
+474 202 1.19252e+011
+512 168 1.19195e+011
+439 181 1.19055e+011
+115 76 1.18901e+011
+255 182 1.18718e+011
+338 391 1.18611e+011
+302 103 1.18381e+011
+408 162 1.18368e+011
+43 62 1.18193e+011
+239 421 1.18115e+011
+219 291 1.18042e+011
+336 426 1.17996e+011
+529 32 1.17946e+011
+135 172 1.17922e+011
+5 13 1.17834e+011
+445 126 1.17717e+011
+126 189 1.17581e+011
+452 375 1.1754e+011
+118 96 1.17397e+011
+548 222 1.17269e+011
+102 358 1.16643e+011
+290 183 1.16641e+011
+324 143 1.16472e+011
+162 20 1.16278e+011
+507 178 1.16011e+011
+266 259 1.15904e+011
+404 338 1.15744e+011
+83 3 1.15711e+011
+91 291 1.15568e+011
+541 209 1.15541e+011
+271 52 1.15414e+011
+133 427 1.15084e+011
+510 223 1.15016e+011
+424 336 1.14661e+011
+428 181 1.14646e+011
+258 34 1.14383e+011
+513 122 1.14282e+011
+163 168 1.14072e+011
+24 65 1.13955e+011
+537 140 1.1394e+011
+544 210 1.13755e+011
+92 21 1.13626e+011
+446 352 1.13537e+011
+150 114 1.13394e+011
+436 385 1.13391e+011
+434 398 1.13274e+011
+439 149 1.13219e+011
+241 58 1.13026e+011
+234 261 1.12956e+011
+487 357 1.12891e+011
+411 46 1.12174e+011
+132 130 1.12044e+011
+101 58 1.1193e+011
+265 72 1.11796e+011
+189 180 1.11695e+011
+203 257 1.11621e+011
+82 134 1.11587e+011
+223 239 1.11458e+011
+272 296 1.11165e+011
+29 28 1.10899e+011
+367 144 1.10701e+011
+278 189 1.10499e+011
+292 28 1.10482e+011
+137 98 1.104e+011
+363 355 1.10324e+011
+129 429 1.10149e+011
+390 161 1.10106e+011
+419 167 1.0999e+011
+120 51 1.09967e+011
+438 123 1.09734e+011
+96 125 1.09634e+011
+150 151 1.09514e+011
+210 153 1.09409e+011
+38 10 1.0934e+011
+479 263 1.09247e+011
+508 141 1.09166e+011
+137 145 1.09124e+011
+157 93 1.09013e+011
+356 267 1.09004e+011
+233 200 1.08804e+011
+394 222 1.08455e+011
+287 34 1.08434e+011
+63 9 1.08384e+011
+500 42 1.0834e+011
+57 331 1.08328e+011
+387 10 1.08108e+011
+350 323 1.08014e+011
+37 61 1.07944e+011
+546 183 1.07938e+011
+110 265 1.07929e+011
+113 356 1.07908e+011
+348 240 1.07893e+011
+306 88 1.07839e+011
+134 72 1.07753e+011
+184 184 1.0767e+011
+379 107 1.07628e+011
+395 354 1.07623e+011
+330 202 1.07535e+011
+205 162 1.07386e+011
+58 254 1.0738e+011
+430 2 1.07319e+011
+32 218 1.07104e+011
+511 128 1.068e+011
+427 5 1.06212e+011
+347 392 1.061e+011
+116 220 1.06079e+011
+484 154 1.06077e+011
+515 2 1.06024e+011
+332 255 1.05977e+011
+474 23 1.05867e+011
+172 449 1.0573e+011
+423 5 1.05705e+011
+236 92 1.05475e+011
+541 13 1.05281e+011
+71 410 1.05227e+011
+335 240 1.05116e+011
+217 55 1.05088e+011
+253 74 1.05044e+011
+135 236 1.04888e+011
+116 391 1.04753e+011
+514 44 1.04383e+011
+111 41 1.04378e+011
+100 221 1.04329e+011
+309 33 1.04294e+011
+78 196 1.04289e+011
+240 73 1.04232e+011
+398 357 1.04208e+011
+543 130 1.04124e+011
+81 131 1.04098e+011
+358 143 1.0391e+011
+458 3 1.03763e+011
+166 114 1.03744e+011
+244 217 1.03725e+011
+3 381 1.03643e+011
+72 97 1.03609e+011
+267 131 1.03542e+011
+545 5 1.03471e+011
+143 187 1.0329e+011
+96 148 1.02697e+011
+526 171 1.02693e+011
+292 147 1.02646e+011
+573 333 1.02594e+011
+292 311 1.02589e+011
+327 320 1.02466e+011
+279 126 1.02401e+011
+209 136 1.02321e+011
+483 83 1.02237e+011
+354 26 1.02088e+011
+164 359 1.02066e+011
+362 397 1.01828e+011
+480 128 1.01805e+011
+448 340 1.01451e+011
+187 109 1.0132e+011
+304 363 1.01194e+011
+192 139 1.01191e+011
+518 163 1.01187e+011
+543 252 1.01049e+011
+197 130 1.01035e+011
+474 4 1.00887e+011
+274 206 1.00834e+011
+205 127 1.00787e+011
+172 108 1.00715e+011
+59 289 1.00709e+011
+388 282 1.00694e+011
+230 263 1.0068e+011
+217 208 1.0059e+011
+577 178 1.00506e+011
+459 123 1.00467e+011
+479 451 1.00465e+011
+262 393 1.0042e+011
+162 216 1.00262e+011
+191 217 1.002e+011
+102 234 9.99555e+010
+237 221 9.99489e+010
+423 203 9.98984e+010
+136 176 9.98466e+010
+25 200 9.98235e+010
+494 164 9.97998e+010
+41 297 9.97992e+010
+155 197 9.97372e+010
+317 107 9.96472e+010
+158 1 9.94626e+010
+138 23 9.90874e+010
+2 155 9.8956e+010
+479 179 9.88607e+010
+470 419 9.88302e+010
+207 417 9.87572e+010
+108 183 9.87055e+010
+513 223 9.86775e+010
+161 124 9.86681e+010
+542 42 9.84651e+010
+449 178 9.81639e+010
+267 31 9.81348e+010
+390 19 9.8077e+010
+220 149 9.80307e+010
+510 300 9.79638e+010
+375 299 9.78488e+010
+191 56 9.78339e+010
+477 402 9.76679e+010
+345 241 9.74889e+010
+5 66 9.7277e+010
+269 105 9.72484e+010
+474 245 9.70966e+010
+137 128 9.70703e+010
+594 19 9.69695e+010
+277 145 9.68864e+010
+126 113 9.68778e+010
+369 338 9.68369e+010
+154 93 9.67895e+010
+445 6 9.67557e+010
+335 93 9.67211e+010
+454 263 9.66188e+010
+493 102 9.65791e+010
+367 85 9.65347e+010
+256 150 9.65294e+010
+462 394 9.64657e+010
+544 91 9.64574e+010
+58 103 9.62071e+010
+361 9 9.61023e+010
+364 407 9.60834e+010
+139 2 9.60435e+010
+550 383 9.5703e+010
+196 192 9.56917e+010
+172 202 9.56913e+010
+40 217 9.54403e+010
+484 361 9.53068e+010
+360 216 9.5284e+010
+70 131 9.52624e+010
+535 18 9.52578e+010
+18 342 9.51953e+010
+104 199 9.51292e+010
+492 182 9.5078e+010
+418 85 9.5014e+010
+434 156 9.49881e+010
+194 110 9.47035e+010
+498 70 9.46886e+010
+540 165 9.46589e+010
+281 142 9.45623e+010
+259 221 9.43936e+010
+281 35 9.4297e+010
+63 132 9.42759e+010
+388 221 9.42364e+010
+219 126 9.4148e+010
+445 453 9.40267e+010
+183 133 9.40104e+010
+85 196 9.38638e+010
+182 201 9.37493e+010
+252 153 9.35187e+010
+308 147 9.34967e+010
+242 97 9.34308e+010
+121 128 9.34021e+010
+443 319 9.33475e+010
+307 362 9.3269e+010
+515 142 9.32618e+010
+513 295 9.3171e+010
+326 296 9.31672e+010
+604 121 9.30464e+010
+39 309 9.30203e+010
+184 118 9.2932e+010
+572 449 9.29218e+010
+261 329 9.28972e+010
+582 18 9.28201e+010
+276 52 9.26863e+010
+161 133 9.26703e+010
+432 83 9.24122e+010
+90 321 9.24075e+010
+425 180 9.22002e+010
+261 296 9.20444e+010
+502 143 9.18062e+010
+304 216 9.17792e+010
+246 294 9.16265e+010
+76 96 9.14524e+010
+87 209 9.13882e+010
+306 354 9.12603e+010
+135 139 9.12228e+010
+187 99 9.11368e+010
+508 2 9.10333e+010
+6 9 9.09382e+010
+152 308 9.08942e+010
+149 39 9.08751e+010
+446 145 9.08515e+010
+353 424 9.08149e+010
+259 202 9.07781e+010
+218 145 9.07625e+010
+245 402 9.05576e+010
+452 161 9.05023e+010
+569 203 9.04615e+010
+460 40 9.04555e+010
+450 442 9.03468e+010
+208 449 9.03304e+010
+37 138 9.03031e+010
+512 349 9.01837e+010
+179 274 9.01238e+010
+293 297 9.0077e+010
+374 241 9.00471e+010
+131 73 8.99731e+010
+296 49 8.99514e+010
+464 26 8.98612e+010
+453 358 8.98574e+010
+175 189 8.97828e+010
+514 335 8.97522e+010
+497 342 8.96716e+010
+523 182 8.96496e+010
+203 347 8.9403e+010
+173 2 8.93128e+010
+160 98 8.9308e+010
+252 10 8.92898e+010
+261 34 8.91629e+010
+323 425 8.91509e+010
+95 340 8.90217e+010
+60 148 8.88971e+010
+479 176 8.88939e+010
+396 104 8.88402e+010
+193 171 8.88225e+010
+380 122 8.87837e+010
+345 109 8.87248e+010
+124 272 8.86899e+010
+263 403 8.86893e+010
+418 414 8.85754e+010
+286 53 8.85543e+010
+188 146 8.85221e+010
+533 161 8.83333e+010
+541 122 8.82635e+010
+335 49 8.82568e+010
+293 333 8.82435e+010
+511 211 8.81617e+010
+565 18 8.79903e+010
+360 260 8.7966e+010
+143 3 8.795e+010
+48 256 8.79384e+010
+270 55 8.78689e+010
+473 355 8.76904e+010
+158 237 8.75723e+010
+263 311 8.73415e+010
+482 333 8.71859e+010
+344 166 8.71216e+010
+36 201 8.70125e+010
+246 327 8.69789e+010
+512 140 8.69413e+010
+50 11 8.69285e+010
+202 392 8.67979e+010
+67 337 8.67686e+010
+270 221 8.67361e+010
+129 168 8.66936e+010
+537 121 8.66811e+010
+511 205 8.65898e+010
+526 422 8.64998e+010
+281 386 8.64898e+010
+242 100 8.64849e+010
+232 15 8.64339e+010
+439 394 8.63954e+010
+148 163 8.63126e+010
+29 254 8.62988e+010
+378 338 8.62613e+010
+93 255 8.62242e+010
+422 333 8.60309e+010
+355 13 8.58583e+010
+213 123 8.58312e+010
+389 333 8.5704e+010
+167 325 8.56305e+010
+432 122 8.56161e+010
+304 180 8.55827e+010
+189 206 8.54465e+010
+398 412 8.54246e+010
+127 40 8.54223e+010
+313 71 8.53009e+010
+518 203 8.52971e+010
+560 272 8.52673e+010
+384 26 8.52653e+010
+403 7 8.52403e+010
+562 223 8.51734e+010
+425 43 8.51712e+010
+373 76 8.50496e+010
+220 419 8.48701e+010
+247 258 8.48408e+010
+248 191 8.47514e+010
+577 50 8.45565e+010
+297 275 8.44868e+010
+101 197 8.44831e+010
+379 352 8.44643e+010
+491 1 8.42902e+010
+156 74 8.42721e+010
+318 147 8.41873e+010
+272 281 8.41456e+010
+319 167 8.39807e+010
+266 139 8.39524e+010
+208 421 8.39404e+010
+250 72 8.39284e+010
+105 39 8.39002e+010
+489 42 8.38973e+010
+248 219 8.38482e+010
+279 198 8.38115e+010
+579 79 8.378e+010
+148 21 8.37732e+010
+548 59 8.36497e+010
+487 205 8.36033e+010
+94 5 8.34962e+010
+113 176 8.33992e+010
+438 162 8.3372e+010
+167 150 8.33187e+010
+376 66 8.32914e+010
+226 15 8.31878e+010
+285 263 8.31585e+010
+47 79 8.31333e+010
+195 17 8.3096e+010
+259 71 8.30867e+010
+533 341 8.30861e+010
+463 100 8.30579e+010
+171 96 8.30408e+010
+471 262 8.29106e+010
+200 416 8.2868e+010
+44 81 8.2851e+010
+589 309 8.28037e+010
+446 377 8.27945e+010
+124 94 8.27651e+010
+311 334 8.27518e+010
+146 160 8.25897e+010
+373 87 8.24436e+010
+165 217 8.22652e+010
+210 445 8.22494e+010
+60 110 8.2156e+010
+132 25 8.21249e+010
+39 144 8.21179e+010
+84 237 8.21088e+010
+516 348 8.2044e+010
+463 161 8.20016e+010
+44 10 8.18636e+010
+483 358 8.18358e+010
+100 162 8.17092e+010
+284 370 8.16125e+010
+280 166 8.16112e+010
+334 368 8.13552e+010
+163 147 8.13365e+010
+410 99 8.1251e+010
+321 103 8.118e+010
+562 70 8.1149e+010
+219 109 8.10174e+010
+297 138 8.09339e+010
+565 161 8.08878e+010
+402 265 8.07877e+010
+443 355 8.07479e+010
+475 340 8.03586e+010
+290 298 8.015e+010
+344 197 8.01278e+010
+488 120 7.9995e+010
+562 151 7.99934e+010
+325 149 7.99881e+010
+330 212 7.99818e+010
+216 106 7.98515e+010
+574 130 7.98435e+010
+389 420 7.96921e+010
+298 108 7.95318e+010
+397 25 7.94727e+010
+99 426 7.94655e+010
+198 75 7.94052e+010
+9 476 7.93657e+010
+64 448 7.90233e+010
+197 82 7.90067e+010
+299 397 7.8933e+010
+241 93 7.88376e+010
+395 45 7.87884e+010
+388 97 7.87004e+010
+305 54 7.85127e+010
+46 147 7.83588e+010
+538 79 7.82614e+010
+95 452 7.82438e+010
+42 353 7.82408e+010
+344 276 7.82195e+010
+413 66 7.81968e+010
+321 119 7.81311e+010
+128 95 7.81247e+010
+181 33 7.81216e+010
+598 363 7.81109e+010
+429 88 7.7898e+010
+243 55 7.78792e+010
+315 145 7.78039e+010
+65 363 7.77154e+010
+179 359 7.76751e+010
+298 191 7.76697e+010
+456 201 7.76548e+010
+421 315 7.76062e+010
+160 150 7.75729e+010
+12 80 7.75028e+010
+332 295 7.72885e+010
+86 370 7.72798e+010
+390 133 7.71521e+010
+505 159 7.71097e+010
+254 404 7.68351e+010
+357 240 7.68052e+010
+206 293 7.67585e+010
+567 423 7.674e+010
+413 262 7.67001e+010
+618 181 7.64906e+010
+161 31 7.63716e+010
+153 227 7.63613e+010
+32 100 7.63066e+010
+461 357 7.63004e+010
+65 252 7.62788e+010
+129 309 7.61354e+010
+521 344 7.61153e+010
+452 43 7.60635e+010
+531 40 7.60173e+010
+125 329 7.59957e+010
+44 121 7.59828e+010
+92 8 7.59602e+010
+396 21 7.58672e+010
+407 81 7.58431e+010
+55 303 7.58348e+010
+187 220 7.57381e+010
+433 240 7.57233e+010
+400 104 7.56671e+010
+177 113 7.54459e+010
+283 80 7.54417e+010
+141 391 7.53469e+010
+19 65 7.53316e+010
+228 92 7.53156e+010
+525 381 7.52686e+010
+412 469 7.52323e+010
+303 406 7.52176e+010
+303 211 7.52127e+010
+547 246 7.52118e+010
+75 375 7.51493e+010
+406 199 7.50911e+010
+415 83 7.50425e+010
+194 135 7.49642e+010
+247 346 7.49366e+010
+252 222 7.48965e+010
+342 136 7.48438e+010
+144 327 7.48413e+010
+349 9 7.48053e+010
+63 206 7.47984e+010
+317 230 7.47796e+010
+352 318 7.47464e+010
+259 163 7.47069e+010
+262 219 7.4666e+010
+102 294 7.45278e+010
+342 314 7.44466e+010
+38 170 7.44278e+010
+557 302 7.442e+010
+104 163 7.44134e+010
+172 166 7.43761e+010
+498 20 7.43203e+010
+267 296 7.42857e+010
+364 333 7.40832e+010
+351 363 7.40439e+010
+189 202 7.39408e+010
+433 303 7.38987e+010
+479 294 7.38704e+010
+389 203 7.3748e+010
+246 106 7.36438e+010
+253 365 7.35019e+010
+338 220 7.34969e+010
+378 182 7.34467e+010
+290 264 7.33946e+010
+117 132 7.33803e+010
+362 360 7.32024e+010
+473 120 7.31668e+010
+93 477 7.31444e+010
+346 47 7.30308e+010
+310 90 7.30172e+010
+128 238 7.29213e+010
+62 135 7.28829e+010
+358 282 7.28263e+010
+49 164 7.28015e+010
+156 307 7.27969e+010
+127 26 7.27728e+010
+165 154 7.27482e+010
+39 406 7.27112e+010
+96 257 7.26709e+010
+176 185 7.26345e+010
+513 261 7.254e+010
+133 78 7.25179e+010
+108 109 7.23985e+010
+530 364 7.23359e+010
+196 343 7.22945e+010
+94 198 7.22694e+010
+385 450 7.21421e+010
+592 107 7.21207e+010
+281 394 7.2114e+010
+243 167 7.20284e+010
+360 242 7.19895e+010
+571 269 7.19883e+010
+303 443 7.19748e+010
+217 165 7.19404e+010
+109 358 7.19242e+010
+145 255 7.18153e+010
+305 148 7.17604e+010
+201 317 7.16925e+010
+530 24 7.16807e+010
+154 57 7.16429e+010
+525 121 7.16137e+010
+113 204 7.15739e+010
+485 236 7.15558e+010
+131 149 7.15027e+010
+191 130 7.14912e+010
+591 103 7.14592e+010
+495 141 7.14512e+010
+108 427 7.13649e+010
+168 242 7.13543e+010
+475 239 7.13001e+010
+484 161 7.12609e+010
+329 102 7.12524e+010
+542 216 7.12523e+010
+327 341 7.11634e+010
+412 220 7.11343e+010
+126 251 7.10654e+010
+200 111 7.10476e+010
+83 404 7.09183e+010
+230 148 7.0886e+010
+320 30 7.0872e+010
+344 341 7.08448e+010
+510 102 7.07892e+010
+216 172 7.06949e+010
+448 64 7.06319e+010
+571 422 7.06264e+010
+367 2 7.05983e+010
+201 166 7.05925e+010
+191 314 7.05841e+010
+574 39 7.05131e+010
+105 430 7.04841e+010
+381 47 7.04649e+010
+470 202 7.04164e+010
+531 240 7.04005e+010
+85 180 7.03697e+010
+311 298 7.03321e+010
+259 228 7.03046e+010
+211 33 7.02394e+010
+286 158 7.0197e+010
+252 422 7.01632e+010
+274 76 7.00926e+010
+88 230 7.00668e+010
+528 161 6.9985e+010
+383 89 6.99696e+010
+461 221 6.99306e+010
+367 106 6.9908e+010
+398 142 6.99065e+010
+366 95 6.98747e+010
+501 21 6.98292e+010
+224 154 6.97935e+010
+245 88 6.97839e+010
+80 39 6.97406e+010
+245 385 6.97102e+010
+42 97 6.96706e+010
+163 249 6.9642e+010
+347 297 6.96285e+010
+136 93 6.96224e+010
+227 258 6.95708e+010
+301 188 6.95227e+010
+45 131 6.95175e+010
+263 250 6.95053e+010
+90 377 6.94728e+010
+343 351 6.94269e+010
+44 476 6.92221e+010
+279 194 6.91793e+010
+270 91 6.90934e+010
+527 425 6.90741e+010
+383 325 6.9038e+010
+170 199 6.89832e+010
+282 135 6.89614e+010
+488 181 6.8952e+010
+153 231 6.89073e+010
+438 42 6.88249e+010
+422 328 6.87687e+010
+107 220 6.87374e+010
+146 452 6.87314e+010
+207 159 6.86712e+010
+562 17 6.86035e+010
+143 395 6.85908e+010
+299 262 6.84413e+010
+343 7 6.84161e+010
+64 27 6.83708e+010
+469 142 6.83553e+010
+273 353 6.83154e+010
+192 326 6.82777e+010
+292 348 6.82312e+010
+158 164 6.81897e+010
+510 253 6.81323e+010
+375 225 6.81312e+010
+328 66 6.81147e+010
+76 268 6.80908e+010
+502 62 6.79646e+010
+282 351 6.78754e+010
+298 332 6.78536e+010
+18 118 6.7839e+010
+133 376 6.78341e+010
+435 279 6.78011e+010
+222 214 6.77973e+010
+406 142 6.77864e+010
+491 470 6.77476e+010
+120 220 6.77192e+010
+505 382 6.76882e+010
+64 276 6.75823e+010
+535 182 6.7514e+010
+45 136 6.74507e+010
+63 230 6.74393e+010
+577 15 6.74123e+010
+182 239 6.73334e+010
+288 87 6.72341e+010
+350 86 6.72085e+010
+182 381 6.71926e+010
+434 381 6.71243e+010
+173 20 6.70794e+010
+355 334 6.70766e+010
+232 399 6.70502e+010
+562 158 6.70345e+010
+237 149 6.70223e+010
+409 281 6.70084e+010
+196 310 6.67825e+010
+522 141 6.66605e+010
+38 182 6.66474e+010
+34 97 6.66326e+010
+301 136 6.6603e+010
+220 210 6.65808e+010
+392 243 6.65723e+010
+437 303 6.65623e+010
+324 370 6.65334e+010
+329 254 6.65296e+010
+383 181 6.65097e+010
+263 13 6.64684e+010
+451 91 6.64498e+010
+219 387 6.64466e+010
+301 107 6.64426e+010
+188 104 6.64215e+010
+110 168 6.62084e+010
+241 68 6.61912e+010
+186 374 6.61833e+010
+85 59 6.61658e+010
+471 123 6.61017e+010
+575 54 6.60678e+010
+191 364 6.60555e+010
+79 271 6.60308e+010
+447 245 6.60306e+010
+260 383 6.6021e+010
+107 96 6.60139e+010
+301 86 6.60001e+010
+63 439 6.59957e+010
+540 99 6.59682e+010
+520 362 6.59534e+010
+282 200 6.59464e+010
+326 180 6.57814e+010
+425 124 6.56309e+010
+527 398 6.55959e+010
+468 423 6.55746e+010
+270 64 6.55056e+010
+30 134 6.5503e+010
+248 165 6.5477e+010
+151 196 6.54741e+010
+267 146 6.54587e+010
+58 5 6.54564e+010
+361 101 6.54349e+010
+199 328 6.54214e+010
+272 133 6.54127e+010
+416 470 6.53779e+010
+259 224 6.53666e+010
+560 81 6.53176e+010
+124 184 6.53077e+010
+103 223 6.50779e+010
+83 183 6.50635e+010
+507 14 6.50257e+010
+399 66 6.50225e+010
+11 72 6.49236e+010
+112 165 6.49138e+010
+575 141 6.48934e+010
+109 27 6.48219e+010
+307 448 6.48117e+010
+248 403 6.48102e+010
+95 59 6.47978e+010
+373 103 6.47141e+010
+520 77 6.46823e+010
+588 18 6.46577e+010
+174 418 6.4616e+010
+13 202 6.45117e+010
+532 20 6.4456e+010
+251 184 6.44348e+010
+92 112 6.44023e+010
+51 377 6.43602e+010
+344 262 6.43209e+010
+71 47 6.42549e+010
+513 180 6.41169e+010
+282 206 6.4101e+010
+51 257 6.39669e+010
+54 358 6.39322e+010
+383 123 6.38052e+010
+175 342 6.36765e+010
+38 167 6.36469e+010
+203 397 6.35807e+010
+358 393 6.35567e+010
+451 139 6.35537e+010
+297 126 6.35527e+010
+341 108 6.34281e+010
+82 104 6.34171e+010
+216 176 6.3339e+010
+308 8 6.33137e+010
+185 171 6.32477e+010
+277 164 6.32259e+010
+57 364 6.3215e+010
+320 96 6.31811e+010
+303 170 6.31452e+010
+95 284 6.30472e+010
+13 236 6.30382e+010
+586 141 6.30327e+010
+497 283 6.29909e+010
+483 327 6.29736e+010
+347 144 6.29554e+010
+101 361 6.2918e+010
+427 63 6.29155e+010
+544 14 6.29075e+010
+527 219 6.2902e+010
+15 215 6.28515e+010
+388 83 6.28489e+010
+278 363 6.28465e+010
+393 66 6.28422e+010
+398 94 6.27667e+010
+577 90 6.27549e+010
+443 120 6.27239e+010
+158 169 6.26538e+010
+450 23 6.2623e+010
+180 136 6.25813e+010
+229 347 6.25551e+010
+215 248 6.23776e+010
+113 347 6.2369e+010
+205 435 6.23537e+010
+374 394 6.235e+010
+345 306 6.23045e+010
+480 171 6.22893e+010
+107 78 6.21291e+010
+408 44 6.21051e+010
+172 111 6.20425e+010
+546 261 6.20375e+010
+278 417 6.20319e+010
+151 133 6.20287e+010
+308 183 6.20212e+010
+86 356 6.19536e+010
+32 112 6.18688e+010
+422 63 6.1836e+010
+89 22 6.18323e+010
+58 68 6.18135e+010
+376 164 6.179e+010
+224 51 6.16274e+010
+420 81 6.1612e+010
+40 148 6.15521e+010
+424 164 6.14851e+010
+533 122 6.14496e+010
+228 198 6.14371e+010
+479 241 6.14214e+010
+33 30 6.14055e+010
+39 241 6.13667e+010
+539 220 6.13381e+010
+54 220 6.12752e+010
+154 113 6.12286e+010
+104 219 6.11517e+010
+60 204 6.11198e+010
+145 220 6.11127e+010
+562 264 6.11059e+010
+358 52 6.10994e+010
+525 79 6.10245e+010
+245 213 6.10107e+010
+393 217 6.09764e+010
+450 418 6.09485e+010
+310 259 6.08874e+010
+157 201 6.08559e+010
+333 140 6.08487e+010
+122 187 6.07683e+010
+424 102 6.06611e+010
+506 198 6.06094e+010
+190 184 6.05738e+010
+330 62 6.05352e+010
+545 438 6.05137e+010
+295 164 6.03099e+010
+139 319 6.0257e+010
+526 193 6.02164e+010
+400 146 6.01413e+010
+166 126 6.01182e+010
+59 98 6.00835e+010
+32 103 6.00693e+010
+37 288 6.00117e+010
+483 123 6.0007e+010
+90 339 5.99861e+010
+164 36 5.99742e+010
+132 255 5.98895e+010
+374 353 5.98471e+010
+175 121 5.97858e+010
+420 89 5.96079e+010
+369 140 5.94497e+010
+165 131 5.94322e+010
+394 335 5.94153e+010
+328 325 5.92519e+010
+179 94 5.92141e+010
+275 363 5.91657e+010
+51 64 5.90978e+010
+417 259 5.90956e+010
+297 99 5.90865e+010
+528 357 5.90532e+010
+161 430 5.89803e+010
+48 458 5.8933e+010
+119 54 5.89075e+010
+589 162 5.86945e+010
+328 288 5.86917e+010
+572 328 5.86783e+010
+518 59 5.86686e+010
+36 64 5.86136e+010
+334 435 5.86115e+010
+180 123 5.85495e+010
+411 339 5.84354e+010
+289 110 5.84219e+010
+198 126 5.83513e+010
+500 223 5.83407e+010
+2 166 5.82498e+010
+46 420 5.82476e+010
+172 38 5.82325e+010
+550 121 5.81755e+010
+472 82 5.81322e+010
+125 413 5.80982e+010
+433 63 5.8084e+010
+362 449 5.80418e+010
+296 89 5.8015e+010
+440 468 5.79308e+010
+534 393 5.78151e+010
+576 164 5.77862e+010
+559 462 5.77636e+010
+509 114 5.76845e+010
+388 91 5.75414e+010
+441 240 5.75302e+010
+44 153 5.74704e+010
+212 164 5.74528e+010
+95 95 5.73485e+010
+240 194 5.73219e+010
+563 40 5.72358e+010
+464 82 5.72289e+010
+216 235 5.72159e+010
+311 265 5.71799e+010
+162 74 5.70914e+010
+119 423 5.70464e+010
+134 134 5.70441e+010
+317 370 5.70343e+010
+41 116 5.70053e+010
+501 102 5.69957e+010
+457 340 5.69147e+010
+89 288 5.68977e+010
+54 449 5.688e+010
+68 304 5.68612e+010
+465 235 5.68329e+010
+209 203 5.68311e+010
+426 470 5.68257e+010
+358 10 5.67805e+010
+377 453 5.66726e+010
+481 166 5.65754e+010
+361 394 5.64869e+010
+261 108 5.64551e+010
+289 397 5.64513e+010
+161 121 5.64044e+010
+579 42 5.63696e+010
+275 142 5.63343e+010
+243 419 5.6298e+010
+528 181 5.62806e+010
+414 299 5.61052e+010
+391 51 5.60856e+010
+211 94 5.60261e+010
+313 132 5.59967e+010
+542 2 5.59619e+010
+140 315 5.59601e+010
+315 238 5.5955e+010
+401 429 5.59395e+010
+146 86 5.59153e+010
+247 419 5.58763e+010
+114 428 5.58663e+010
+150 2 5.58146e+010
+597 58 5.5662e+010
+469 22 5.56613e+010
+580 215 5.56159e+010
+266 118 5.56073e+010
+416 377 5.55699e+010
+367 247 5.55622e+010
+117 428 5.55237e+010
+580 138 5.54929e+010
+94 422 5.5389e+010
+191 17 5.53438e+010
+130 396 5.5329e+010
+565 462 5.53182e+010
+513 402 5.52793e+010
+420 132 5.52521e+010
+59 372 5.52209e+010
+215 427 5.52095e+010
+484 174 5.51663e+010
+176 180 5.51564e+010
+154 221 5.51191e+010
+498 155 5.51189e+010
+202 7 5.51059e+010
+77 475 5.50918e+010
+289 441 5.50683e+010
+317 125 5.50145e+010
+405 84 5.49432e+010
+410 413 5.49371e+010
+537 103 5.49355e+010
+154 1 5.49078e+010
+472 42 5.48764e+010
+597 272 5.48273e+010
+430 222 5.47741e+010
+189 137 5.47496e+010
+578 123 5.47035e+010
+561 201 5.46677e+010
+167 180 5.46544e+010
+458 241 5.45582e+010
+476 248 5.45469e+010
+407 262 5.45437e+010
+121 239 5.44904e+010
+450 324 5.44699e+010
+294 271 5.44527e+010
+275 296 5.41847e+010
+187 257 5.41783e+010
+247 172 5.41584e+010
+90 277 5.41515e+010
+124 82 5.41302e+010
+347 370 5.41161e+010
+69 417 5.41073e+010
+87 342 5.40781e+010
+131 94 5.4013e+010
+378 261 5.39991e+010
+177 331 5.39982e+010
+346 337 5.3895e+010
+463 123 5.37693e+010
+55 294 5.37497e+010
+274 146 5.36678e+010
+554 80 5.36328e+010
+487 261 5.35108e+010
+368 299 5.34435e+010
+351 353 5.34308e+010
+161 91 5.3376e+010
+474 143 5.33727e+010
+64 218 5.33328e+010
+128 130 5.33171e+010
+250 425 5.32348e+010
+155 396 5.31987e+010
+129 113 5.31162e+010
+166 309 5.30324e+010
+333 415 5.30095e+010
+152 370 5.29938e+010
+106 2 5.29131e+010
+117 360 5.28921e+010
+405 221 5.28189e+010
+394 165 5.2764e+010
+185 310 5.27425e+010
+173 274 5.26838e+010
+485 221 5.26505e+010
+41 136 5.26492e+010
+230 178 5.26423e+010
+158 55 5.26352e+010
+309 221 5.26283e+010
+515 381 5.25895e+010
+198 167 5.25437e+010
+407 106 5.25284e+010
+403 189 5.25137e+010
+28 271 5.24863e+010
+509 137 5.24845e+010
+541 141 5.24345e+010
+407 431 5.24213e+010
+393 184 5.23559e+010
+103 392 5.23492e+010
+180 56 5.23323e+010
+391 324 5.23063e+010
+201 74 5.22725e+010
+465 356 5.22553e+010
+420 362 5.22483e+010
+186 200 5.22423e+010
+72 4 5.2225e+010
+276 130 5.22049e+010
+549 283 5.22028e+010
+290 249 5.21878e+010
+83 65 5.21692e+010
+450 166 5.21494e+010
+108 260 5.21324e+010
+449 5 5.20912e+010
+540 263 5.20391e+010
+271 183 5.20351e+010
+327 13 5.20251e+010
+251 257 5.20224e+010
+381 4 5.19302e+010
+200 293 5.19095e+010
+58 79 5.17823e+010
+554 18 5.17252e+010
+513 376 5.17118e+010
+354 17 5.16873e+010
+384 242 5.16796e+010
+512 109 5.16753e+010
+483 286 5.16738e+010
+164 190 5.16677e+010
+515 184 5.1577e+010
+119 116 5.15488e+010
+154 21 5.15443e+010
+304 298 5.14905e+010
+187 363 5.14716e+010
+524 289 5.14437e+010
+108 148 5.14396e+010
+40 79 5.14206e+010
+266 286 5.13785e+010
+208 308 5.13705e+010
+389 15 5.13061e+010
+438 242 5.12879e+010
+152 401 5.12789e+010
+354 238 5.12652e+010
+296 410 5.12366e+010
+250 85 5.12167e+010
+96 8 5.12004e+010
+66 272 5.11974e+010
+555 264 5.11913e+010
+213 141 5.11483e+010
+420 116 5.11394e+010
+87 367 5.11323e+010
+208 185 5.11165e+010
+164 379 5.10794e+010
+83 101 5.10641e+010
+81 219 5.10072e+010
+572 364 5.10049e+010
+341 257 5.09946e+010
+340 89 5.0931e+010
+262 319 5.08621e+010
+24 185 5.08236e+010
+432 268 5.07882e+010
+547 180 5.0787e+010
+118 224 5.07715e+010
+568 383 5.07474e+010
+335 418 5.07058e+010
+296 442 5.07024e+010
+264 128 5.06924e+010
+133 411 5.06915e+010
+419 92 5.06361e+010
+517 81 5.05799e+010
+499 362 5.05412e+010
+47 11 5.05313e+010
+212 219 5.05167e+010
+52 132 5.04955e+010
+323 123 5.04344e+010
+206 220 5.04333e+010
+234 158 5.03785e+010
+157 103 5.03582e+010
+406 78 5.03308e+010
+525 278 5.02944e+010
+91 147 5.02821e+010
+198 10 5.02597e+010
+329 57 5.02089e+010
+11 114 5.01897e+010
+304 292 5.0171e+010
+227 38 5.0083e+010
+391 448 5.00657e+010
+41 395 5.00496e+010
+257 250 5.004e+010
+486 42 5.00175e+010
+284 392 5.00121e+010
+3 109 4.99908e+010
+569 183 4.99846e+010
+259 159 4.99694e+010
+349 164 4.99632e+010
+402 375 4.99611e+010
+416 282 4.99476e+010
+162 137 4.99237e+010
+280 186 4.99219e+010
+135 101 4.98873e+010
+11 45 4.97515e+010
+375 126 4.97345e+010
+533 346 4.97045e+010
+530 98 4.96998e+010
+179 103 4.9682e+010
+88 183 4.96381e+010
+539 382 4.96068e+010
+475 255 4.95995e+010
+149 138 4.95773e+010
+324 139 4.95754e+010
+497 223 4.95159e+010
+34 108 4.95137e+010
+499 261 4.95082e+010
+402 217 4.94627e+010
+392 296 4.94297e+010
+221 84 4.94142e+010
+538 392 4.94067e+010
+255 80 4.93758e+010
+248 262 4.93658e+010
+79 77 4.9341e+010
+458 140 4.93334e+010
+108 100 4.92298e+010
+194 201 4.91689e+010
+424 197 4.91669e+010
+458 358 4.91378e+010
+374 366 4.91259e+010
+19 318 4.91026e+010
+316 101 4.90959e+010
+391 166 4.90799e+010
+161 397 4.90769e+010
+570 408 4.90171e+010
+465 4 4.90053e+010
+142 238 4.89827e+010
+464 140 4.89473e+010
+496 462 4.89297e+010
+274 313 4.88306e+010
+102 308 4.88205e+010
+401 169 4.88116e+010
+433 25 4.87795e+010
+252 193 4.86916e+010
+533 93 4.86478e+010
+461 199 4.86003e+010
+366 29 4.85842e+010
+114 374 4.85322e+010
+382 260 4.84946e+010
+486 242 4.84289e+010
+232 91 4.83911e+010
+369 162 4.82764e+010
+530 134 4.82756e+010
+42 24 4.82688e+010
+347 119 4.82e+010
+219 315 4.8188e+010
+327 25 4.81497e+010
+209 315 4.81387e+010
+119 265 4.80935e+010
+39 82 4.8088e+010
+417 450 4.80852e+010
+450 117 4.80544e+010
+454 418 4.80315e+010
+173 162 4.80054e+010
+545 160 4.79999e+010
+274 64 4.79947e+010
+480 135 4.79796e+010
+297 257 4.79671e+010
+344 329 4.78889e+010
+33 39 4.78649e+010
+25 133 4.7808e+010
+81 197 4.78077e+010
+301 215 4.78024e+010
+54 44 4.77899e+010
+588 345 4.77739e+010
+297 182 4.77173e+010
+308 107 4.76938e+010
+181 130 4.76745e+010
+214 132 4.76427e+010
+414 143 4.76417e+010
+526 190 4.76328e+010
+144 432 4.74619e+010
+258 327 4.74091e+010
+545 141 4.72949e+010
+344 186 4.72589e+010
+329 390 4.72108e+010
+154 345 4.72097e+010
+408 14 4.71918e+010
+78 59 4.71773e+010
+530 430 4.71283e+010
+152 184 4.71265e+010
+416 23 4.70723e+010
+462 45 4.70263e+010
+194 212 4.70108e+010
+215 149 4.70036e+010
+503 180 4.70005e+010
+63 201 4.69926e+010
+481 369 4.69851e+010
+499 475 4.69818e+010
+284 46 4.69334e+010
+343 392 4.69123e+010
+148 130 4.68858e+010
+281 132 4.6863e+010
+325 17 4.68492e+010
+6 151 4.6848e+010
+240 383 4.68433e+010
+313 107 4.68428e+010
+147 344 4.67935e+010
+426 24 4.67906e+010
+371 190 4.6758e+010
+529 29 4.67407e+010
+410 104 4.67399e+010
+356 447 4.67164e+010
+546 164 4.66827e+010
+332 397 4.66759e+010
+251 247 4.66745e+010
+70 255 4.66483e+010
+101 112 4.66424e+010
+392 24 4.66035e+010
+412 245 4.66027e+010
+247 180 4.65947e+010
+353 297 4.65836e+010
+333 28 4.65791e+010
+565 226 4.65766e+010
+207 74 4.65585e+010
+521 426 4.6537e+010
+544 339 4.65099e+010
+132 477 4.65099e+010
+163 105 4.65048e+010
+36 233 4.64977e+010
+369 464 4.64927e+010
+342 162 4.6488e+010
+361 157 4.64474e+010
+137 19 4.6444e+010
+571 384 4.64335e+010
+306 161 4.63476e+010
+472 453 4.63193e+010
+543 137 4.62848e+010
+54 389 4.62728e+010
+577 403 4.62232e+010
+465 379 4.61987e+010
+386 64 4.61837e+010
+41 337 4.6054e+010
+331 133 4.60135e+010
+509 346 4.60101e+010
+469 139 4.60055e+010
+467 118 4.59992e+010
+274 318 4.59556e+010
+450 129 4.59452e+010
+384 111 4.58875e+010
+584 345 4.58737e+010
+189 171 4.58611e+010
+91 79 4.57918e+010
+189 303 4.57711e+010
+29 114 4.57524e+010
+519 423 4.57503e+010
+176 200 4.55683e+010
+420 52 4.55646e+010
+301 254 4.55434e+010
+358 319 4.55034e+010
+31 233 4.54768e+010
+340 28 4.54172e+010
+376 119 4.54087e+010
+427 433 4.54022e+010
+464 226 4.53967e+010
+411 29 4.53852e+010
+289 162 4.53712e+010
+85 310 4.53499e+010
+300 276 4.53365e+010
+468 162 4.52986e+010
+97 197 4.52388e+010
+263 31 4.52333e+010
+133 392 4.5227e+010
+281 311 4.52166e+010
+14 434 4.51996e+010
+224 129 4.51926e+010
+480 290 4.5192e+010
+325 260 4.51845e+010
+405 164 4.5184e+010
+543 82 4.51661e+010
+104 255 4.51655e+010
+41 120 4.51454e+010
+344 344 4.51423e+010
+132 65 4.51298e+010
+374 144 4.51278e+010
+77 29 4.51201e+010
+437 126 4.50669e+010
+411 83 4.50573e+010
+302 141 4.5e+010
+300 326 4.49116e+010
+144 179 4.48735e+010
+289 136 4.48538e+010
+123 343 4.48423e+010
+72 165 4.4821e+010
+280 440 4.48049e+010
+88 261 4.47362e+010
+232 183 4.46626e+010
+22 285 4.46605e+010
+292 12 4.46414e+010
+22 477 4.46346e+010
+258 240 4.46119e+010
+222 146 4.45969e+010
+292 124 4.45792e+010
+480 142 4.45574e+010
+84 289 4.45302e+010
+315 28 4.44514e+010
+447 120 4.44216e+010
+179 153 4.43975e+010
+73 60 4.43662e+010
+402 166 4.43633e+010
+559 422 4.43582e+010
+204 53 4.43579e+010
+325 315 4.4357e+010
+490 83 4.43465e+010
+148 256 4.4338e+010
+332 336 4.43071e+010
+191 167 4.42818e+010
+534 303 4.42484e+010
+519 43 4.42422e+010
+193 145 4.42323e+010
+333 463 4.42212e+010
+461 260 4.41844e+010
+449 283 4.41576e+010
+36 112 4.41392e+010
+240 295 4.41219e+010
+396 264 4.412e+010
+95 359 4.41021e+010
+104 183 4.40867e+010
+420 138 4.40851e+010
+193 255 4.40423e+010
+215 402 4.40395e+010
+53 41 4.4004e+010
+355 475 4.39274e+010
+304 174 4.39047e+010
+495 476 4.39004e+010
+583 80 4.38999e+010
+187 263 4.38939e+010
+252 238 4.38382e+010
+411 183 4.37936e+010
+266 404 4.37923e+010
+539 206 4.37855e+010
+398 169 4.37748e+010
+137 324 4.37409e+010
+258 349 4.37325e+010
+503 166 4.37047e+010
+433 376 4.36805e+010
+418 290 4.36628e+010
+351 140 4.36278e+010
+449 349 4.36144e+010
+327 90 4.36076e+010
+542 457 4.3561e+010
+356 252 4.35376e+010
+420 283 4.34807e+010
+136 123 4.34706e+010
+43 473 4.34192e+010
+507 281 4.3391e+010
+19 351 4.33766e+010
+464 263 4.33707e+010
+511 80 4.33209e+010
+141 113 4.33159e+010
+243 255 4.32274e+010
+170 131 4.3215e+010
+498 162 4.31786e+010
+76 127 4.3138e+010
+312 8 4.30075e+010
+188 324 4.30069e+010
+370 29 4.29412e+010
+63 304 4.2921e+010
+498 60 4.29043e+010
+561 144 4.28824e+010
+31 81 4.28513e+010
+447 183 4.28331e+010
+434 224 4.28193e+010
+470 181 4.27883e+010
+132 309 4.27542e+010
+141 116 4.26988e+010
+479 85 4.25218e+010
+399 131 4.25073e+010
+265 78 4.24998e+010
+7 201 4.24928e+010
+259 370 4.24763e+010
+51 373 4.24373e+010
+236 295 4.2386e+010
+326 353 4.23437e+010
+515 54 4.23431e+010
+63 182 4.23011e+010
+331 333 4.22888e+010
+573 6 4.22801e+010
+331 88 4.22242e+010
+459 161 4.22079e+010
+404 117 4.21893e+010
+329 142 4.2162e+010
+244 430 4.21587e+010
+218 284 4.2118e+010
+362 365 4.21086e+010
+583 141 4.20975e+010
+53 148 4.2083e+010
+570 375 4.20693e+010
+45 407 4.20451e+010
+363 86 4.20428e+010
+472 104 4.20425e+010
+469 302 4.20367e+010
+271 414 4.20097e+010
+243 17 4.19891e+010
+184 347 4.19778e+010
+173 54 4.19759e+010
+551 141 4.19651e+010
+238 190 4.19615e+010
+490 77 4.19191e+010
+398 298 4.18993e+010
+346 200 4.18726e+010
+202 219 4.18668e+010
+430 116 4.18607e+010
+433 47 4.17324e+010
+127 374 4.17291e+010
+32 65 4.16687e+010
+146 15 4.16653e+010
+143 56 4.16622e+010
+492 58 4.15919e+010
+392 405 4.15892e+010
+500 340 4.15691e+010
+490 301 4.15431e+010
+217 20 4.14908e+010
+299 323 4.14576e+010
+175 139 4.14575e+010
+82 97 4.14568e+010
+589 350 4.14386e+010
+50 169 4.14365e+010
+277 238 4.14347e+010
+23 254 4.14181e+010
+221 432 4.13741e+010
+467 420 4.1304e+010
+33 337 4.12989e+010
+514 364 4.12933e+010
+515 118 4.12891e+010
+146 80 4.12782e+010
+167 414 4.12487e+010
+211 376 4.11892e+010
+479 458 4.11625e+010
+569 325 4.11361e+010
+404 113 4.1123e+010
+590 141 4.11217e+010
+584 37 4.10615e+010
+271 313 4.1056e+010
+185 238 4.10279e+010
+486 141 4.10062e+010
+73 130 4.09917e+010
+123 179 4.09891e+010
+248 15 4.09668e+010
+544 175 4.0942e+010
+449 259 4.0937e+010
+183 95 4.09264e+010
+316 260 4.08626e+010
+462 378 4.08318e+010
+436 105 4.08244e+010
+570 59 4.07702e+010
+409 259 4.07417e+010
+337 60 4.07157e+010
+457 375 4.06823e+010
+316 460 4.06661e+010
+99 96 4.06433e+010
+310 138 4.06231e+010
+144 165 4.06139e+010
+567 223 4.06072e+010
+176 273 4.05868e+010
+409 452 4.05445e+010
+421 96 4.05182e+010
+513 50 4.04983e+010
+177 162 4.04777e+010
+70 390 4.04502e+010
+300 346 4.03975e+010
+66 378 4.03821e+010
+42 305 4.0339e+010
+288 221 4.03345e+010
+391 475 4.03108e+010
+29 258 4.0303e+010
+210 258 4.02659e+010
+549 79 4.01676e+010
+270 119 4.00785e+010
+399 17 4.00746e+010
+361 332 4.00696e+010
+158 252 4.003e+010
+59 41 4.00184e+010
+35 172 3.99938e+010
+149 89 3.99697e+010
+113 130 3.9953e+010
+108 131 3.99423e+010
+431 43 3.99407e+010
+477 221 3.99351e+010
+211 21 3.99215e+010
+214 161 3.99214e+010
+286 397 3.99097e+010
+12 30 3.98981e+010
+235 436 3.9851e+010
+602 274 3.98443e+010
+458 180 3.98418e+010
+371 147 3.98405e+010
+410 417 3.98179e+010
+266 368 3.98002e+010
+302 145 3.9797e+010
+394 17 3.97809e+010
+512 83 3.97621e+010
+481 48 3.97456e+010
+575 98 3.97316e+010
+437 456 3.97223e+010
+514 61 3.97072e+010
+574 180 3.96991e+010
+554 221 3.96634e+010
+62 164 3.96541e+010
+342 297 3.96453e+010
+14 118 3.96353e+010
+90 252 3.96068e+010
+62 422 3.95954e+010
+64 283 3.95799e+010
+554 303 3.95731e+010
+195 217 3.9523e+010
+257 136 3.95172e+010
+325 118 3.95e+010
+164 324 3.94799e+010
+267 250 3.94641e+010
+324 31 3.94393e+010
+432 163 3.94373e+010
+282 92 3.94259e+010
+125 149 3.94169e+010
+232 101 3.9388e+010
+456 285 3.93817e+010
+25 61 3.93794e+010
+198 28 3.93593e+010
+541 255 3.93414e+010
+4 266 3.93369e+010
+183 315 3.93133e+010
+152 77 3.93101e+010
+36 470 3.93051e+010
+112 181 3.92914e+010
+260 367 3.92582e+010
+579 324 3.92071e+010
+112 218 3.91329e+010
+305 167 3.91232e+010
+316 453 3.90896e+010
+561 325 3.90646e+010
+244 14 3.90527e+010
+85 145 3.90444e+010
+22 7 3.90379e+010
+386 336 3.90284e+010
+48 320 3.9021e+010
+479 206 3.89586e+010
+155 129 3.89374e+010
+446 241 3.89338e+010
+234 137 3.89309e+010
+460 302 3.89191e+010
+172 147 3.89182e+010
+164 312 3.89134e+010
+253 110 3.89072e+010
+56 235 3.88996e+010
+116 181 3.88691e+010
+479 475 3.88335e+010
+333 282 3.88303e+010
+174 87 3.88271e+010
+157 316 3.88165e+010
+423 82 3.87594e+010
+123 59 3.86972e+010
+90 399 3.86799e+010
+505 418 3.86728e+010
+379 131 3.86457e+010
+487 199 3.86177e+010
+156 88 3.85945e+010
+10 219 3.85834e+010
+16 151 3.85692e+010
+289 123 3.85345e+010
+335 260 3.8481e+010
+379 419 3.84684e+010
+224 123 3.84672e+010
+487 52 3.84124e+010
+495 60 3.83714e+010
+140 428 3.83569e+010
+522 81 3.83321e+010
+53 60 3.82979e+010
+472 211 3.82852e+010
+326 49 3.82835e+010
+150 202 3.82359e+010
+572 99 3.82323e+010
+377 461 3.81462e+010
+230 189 3.81382e+010
+163 327 3.80654e+010
+350 412 3.80559e+010
+71 337 3.79619e+010
+87 395 3.79578e+010
+232 272 3.79311e+010
+94 261 3.79288e+010
+287 422 3.78818e+010
+212 422 3.7867e+010
+542 275 3.78465e+010
+243 210 3.78309e+010
+206 93 3.78192e+010
+450 445 3.77594e+010
+260 457 3.77484e+010
+465 190 3.77477e+010
+56 147 3.77312e+010
+406 181 3.77166e+010
+190 280 3.77079e+010
+526 174 3.77021e+010
+2 201 3.77016e+010
+264 123 3.76835e+010
+419 143 3.76722e+010
+149 231 3.76098e+010
+230 112 3.75836e+010
+20 201 3.75507e+010
+305 411 3.75439e+010
+297 144 3.75341e+010
+502 59 3.75102e+010
+38 254 3.75042e+010
+243 368 3.74617e+010
+119 88 3.74451e+010
+496 101 3.73499e+010
+501 82 3.73455e+010
+187 291 3.73356e+010
+579 83 3.73335e+010
+382 86 3.72937e+010
+181 220 3.72928e+010
+542 134 3.7287e+010
+32 17 3.72828e+010
+180 328 3.7244e+010
+112 308 3.72126e+010
+527 395 3.71663e+010
+120 149 3.71639e+010
+266 111 3.71606e+010
+65 58 3.71528e+010
+208 20 3.71151e+010
+360 177 3.71111e+010
+362 124 3.71098e+010
+8 116 3.70952e+010
+79 406 3.70944e+010
+27 118 3.70717e+010
+66 474 3.70713e+010
+196 239 3.70349e+010
+5 231 3.70328e+010
+274 210 3.69936e+010
+537 159 3.69903e+010
+210 395 3.69678e+010
+139 394 3.69362e+010
+292 90 3.6928e+010
+340 199 3.6925e+010
+373 152 3.69142e+010
+125 220 3.6914e+010
+576 169 3.69051e+010
+565 178 3.69008e+010
+515 360 3.6898e+010
+375 282 3.68974e+010
+376 390 3.68818e+010
+432 297 3.68763e+010
+61 256 3.68753e+010
+88 244 3.68582e+010
+172 292 3.68569e+010
+71 261 3.68335e+010
+509 440 3.67983e+010
+268 205 3.67615e+010
+290 202 3.66782e+010
+578 340 3.66732e+010
+49 237 3.66035e+010
+181 291 3.65873e+010
+169 359 3.6584e+010
+215 99 3.65633e+010
+65 151 3.65611e+010
+159 197 3.6558e+010
+186 303 3.654e+010
+400 221 3.65174e+010
+344 119 3.65113e+010
+498 430 3.64446e+010
+207 148 3.63815e+010
+244 182 3.63802e+010
+484 290 3.63554e+010
+122 446 3.63544e+010
+157 154 3.63478e+010
+400 199 3.62676e+010
+190 262 3.62342e+010
+362 164 3.62325e+010
+119 109 3.62196e+010
+49 286 3.62015e+010
+323 298 3.61718e+010
+253 273 3.61572e+010
+469 42 3.61566e+010
+194 75 3.61016e+010
+543 245 3.60888e+010
+521 97 3.6086e+010
+529 119 3.60714e+010
+263 224 3.60037e+010
+337 65 3.60035e+010
+349 373 3.60029e+010
+274 329 3.59732e+010
+415 28 3.59234e+010
+24 129 3.59202e+010
+539 225 3.58905e+010
+551 216 3.58841e+010
+596 141 3.58556e+010
+280 420 3.5845e+010
+194 165 3.58162e+010
+174 152 3.5781e+010
+105 408 3.57735e+010
+86 94 3.57599e+010
+454 116 3.57577e+010
+364 116 3.57409e+010
+171 87 3.57346e+010
+116 275 3.57313e+010
+465 220 3.57231e+010
+512 323 3.5717e+010
+211 293 3.56961e+010
+258 389 3.56441e+010
+576 311 3.56232e+010
+5 236 3.56131e+010
+520 239 3.56116e+010
+117 164 3.55806e+010
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_3_5.txt b/test_data/harriscorners/hc_msc_3.00_0.04_3_5.txt
new file mode 100644
index 0000000..211d2b5
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_3_5.txt
@@ -0,0 +1,1939 @@
+1938
+244 94 3.10864e+012
+273 366 2.99939e+012
+122 43 2.38424e+012
+330 127 2.00645e+012
+298 52 1.99983e+012
+422 181 1.93221e+012
+84 78 1.83694e+012
+200 17 1.81141e+012
+237 19 1.78538e+012
+214 72 1.76632e+012
+448 297 1.75554e+012
+134 214 1.72973e+012
+362 400 1.61958e+012
+485 59 1.59539e+012
+420 177 1.58521e+012
+484 23 1.57647e+012
+395 318 1.54446e+012
+124 198 1.54106e+012
+553 40 1.53717e+012
+210 55 1.53346e+012
+286 297 1.5281e+012
+423 178 1.48638e+012
+272 290 1.48372e+012
+47 27 1.47111e+012
+436 67 1.46911e+012
+317 335 1.43848e+012
+401 262 1.4377e+012
+447 397 1.42966e+012
+35 138 1.41639e+012
+175 94 1.40562e+012
+160 143 1.40173e+012
+128 2 1.39903e+012
+303 183 1.37005e+012
+92 214 1.36373e+012
+507 122 1.36282e+012
+243 203 1.35305e+012
+544 168 1.34444e+012
+387 177 1.33373e+012
+82 28 1.33187e+012
+425 321 1.32295e+012
+343 9 1.31682e+012
+340 9 1.31449e+012
+184 36 1.31314e+012
+124 254 1.31092e+012
+542 59 1.30942e+012
+125 364 1.30847e+012
+302 176 1.30532e+012
+277 368 1.29523e+012
+535 241 1.29169e+012
+407 65 1.28854e+012
+195 125 1.28548e+012
+110 240 1.27177e+012
+253 139 1.26585e+012
+470 239 1.25814e+012
+418 8 1.25337e+012
+76 256 1.24239e+012
+2 46 1.24145e+012
+240 91 1.23899e+012
+104 62 1.23442e+012
+116 44 1.2334e+012
+508 17 1.23301e+012
+466 197 1.22631e+012
+65 235 1.22072e+012
+54 29 1.21998e+012
+154 236 1.21883e+012
+360 295 1.21782e+012
+90 198 1.21376e+012
+222 38 1.21253e+012
+45 218 1.19727e+012
+456 282 1.19213e+012
+48 98 1.1854e+012
+393 143 1.17965e+012
+252 13 1.17883e+012
+262 440 1.1716e+012
+137 209 1.16767e+012
+320 224 1.15885e+012
+282 114 1.15073e+012
+257 385 1.14991e+012
+294 15 1.149e+012
+235 72 1.14296e+012
+174 312 1.12774e+012
+341 337 1.12667e+012
+480 297 1.12655e+012
+447 263 1.12635e+012
+386 221 1.12138e+012
+363 297 1.12029e+012
+138 203 1.11842e+012
+78 2 1.11577e+012
+411 163 1.11011e+012
+65 319 1.10893e+012
+65 343 1.09816e+012
+262 201 1.09685e+012
+509 164 1.09e+012
+207 224 1.08992e+012
+515 76 1.08472e+012
+325 88 1.08147e+012
+423 45 1.08037e+012
+543 216 1.06605e+012
+465 240 1.0628e+012
+110 135 1.06043e+012
+240 202 1.05514e+012
+235 162 1.05206e+012
+202 313 1.04445e+012
+442 24 1.0363e+012
+346 10 1.03368e+012
+301 165 1.03304e+012
+207 435 1.02984e+012
+456 4 1.0296e+012
+427 119 1.02783e+012
+210 436 1.0276e+012
+523 264 1.02705e+012
+70 27 1.02489e+012
+543 365 1.02014e+012
+461 267 1.01522e+012
+131 36 1.00987e+012
+280 370 1.00688e+012
+145 310 1.00359e+012
+543 15 1.00128e+012
+308 371 1.00087e+012
+412 256 9.95905e+011
+100 79 9.95742e+011
+82 135 9.95473e+011
+276 180 9.95207e+011
+313 76 9.94299e+011
+76 237 9.9302e+011
+196 57 9.92436e+011
+449 218 9.91408e+011
+390 58 9.88456e+011
+459 263 9.85384e+011
+281 110 9.84366e+011
+36 145 9.82922e+011
+320 315 9.81877e+011
+344 338 9.81449e+011
+101 222 9.79527e+011
+224 182 9.76695e+011
+372 81 9.7043e+011
+171 18 9.64019e+011
+462 278 9.62498e+011
+334 106 9.62459e+011
+174 238 9.59076e+011
+220 16 9.58172e+011
+30 8 9.56507e+011
+498 159 9.55625e+011
+138 173 9.55318e+011
+382 6 9.51401e+011
+166 241 9.46903e+011
+172 95 9.45458e+011
+401 276 9.45027e+011
+512 98 9.42574e+011
+361 335 9.39762e+011
+418 164 9.38584e+011
+562 224 9.37132e+011
+379 68 9.33379e+011
+59 75 9.3309e+011
+127 164 9.32304e+011
+35 9 9.29349e+011
+325 164 9.28054e+011
+246 206 9.21531e+011
+287 210 9.21012e+011
+221 180 9.20193e+011
+477 5 9.19881e+011
+377 318 9.14376e+011
+545 41 9.13811e+011
+383 162 9.12803e+011
+78 28 9.12544e+011
+244 165 9.12302e+011
+175 112 9.10187e+011
+512 343 9.0782e+011
+564 61 9.07663e+011
+130 26 9.07503e+011
+29 237 9.07136e+011
+60 184 9.06301e+011
+152 222 9.04782e+011
+542 209 9.02677e+011
+41 63 9.00652e+011
+124 185 9.00207e+011
+465 393 8.99974e+011
+282 297 8.90645e+011
+86 255 8.89477e+011
+10 101 8.89154e+011
+88 148 8.85947e+011
+380 354 8.85267e+011
+68 45 8.81568e+011
+311 150 8.78523e+011
+261 297 8.7767e+011
+519 60 8.76779e+011
+141 183 8.76659e+011
+525 20 8.76428e+011
+510 173 8.71523e+011
+230 36 8.69769e+011
+510 124 8.65275e+011
+186 217 8.6421e+011
+354 126 8.62589e+011
+334 90 8.62397e+011
+59 218 8.60358e+011
+486 358 8.55373e+011
+545 58 8.54774e+011
+390 48 8.54445e+011
+287 165 8.53283e+011
+62 60 8.52742e+011
+571 161 8.4817e+011
+167 96 8.44933e+011
+366 7 8.44894e+011
+359 167 8.44843e+011
+363 251 8.43257e+011
+245 143 8.43208e+011
+551 382 8.41652e+011
+389 140 8.41632e+011
+453 203 8.41051e+011
+531 61 8.38714e+011
+78 80 8.38135e+011
+509 1 8.36274e+011
+163 216 8.35048e+011
+71 147 8.31426e+011
+528 102 8.30641e+011
+284 403 8.2932e+011
+268 53 8.28012e+011
+388 294 8.23508e+011
+209 20 8.20419e+011
+347 178 8.18555e+011
+260 237 8.18497e+011
+433 147 8.17273e+011
+528 193 8.14334e+011
+271 242 8.1215e+011
+177 165 8.10396e+011
+35 175 8.06646e+011
+260 222 8.0579e+011
+242 71 8.0485e+011
+314 85 8.04229e+011
+484 338 8.03648e+011
+404 121 7.99939e+011
+233 200 7.99144e+011
+33 99 7.95473e+011
+41 217 7.93954e+011
+228 292 7.92834e+011
+96 446 7.91173e+011
+113 345 7.91125e+011
+39 296 7.90945e+011
+211 185 7.90389e+011
+313 147 7.87705e+011
+301 103 7.85846e+011
+410 353 7.84769e+011
+529 24 7.83878e+011
+102 360 7.83495e+011
+38 63 7.82926e+011
+445 23 7.82207e+011
+207 450 7.81773e+011
+138 110 7.80869e+011
+48 133 7.77534e+011
+528 39 7.7703e+011
+250 365 7.7697e+011
+488 264 7.76166e+011
+160 113 7.7427e+011
+573 141 7.74005e+011
+478 181 7.72726e+011
+113 3 7.72336e+011
+451 339 7.64617e+011
+31 270 7.62602e+011
+529 183 7.61122e+011
+369 106 7.60955e+011
+495 119 7.60535e+011
+414 6 7.60077e+011
+366 144 7.59171e+011
+458 278 7.57244e+011
+293 25 7.57146e+011
+482 82 7.56125e+011
+185 20 7.52237e+011
+139 57 7.50325e+011
+142 324 7.47812e+011
+423 398 7.45937e+011
+418 440 7.45097e+011
+163 277 7.44883e+011
+264 299 7.4479e+011
+364 200 7.44387e+011
+135 173 7.42802e+011
+113 392 7.42416e+011
+272 279 7.41694e+011
+35 268 7.41368e+011
+511 222 7.39639e+011
+579 19 7.36972e+011
+524 346 7.36449e+011
+109 43 7.35532e+011
+364 258 7.35479e+011
+569 39 7.34418e+011
+501 143 7.33381e+011
+548 182 7.33341e+011
+498 81 7.31929e+011
+423 335 7.31367e+011
+509 83 7.31315e+011
+374 117 7.3108e+011
+297 275 7.29944e+011
+555 181 7.28321e+011
+156 198 7.2697e+011
+125 260 7.26961e+011
+559 18 7.25191e+011
+48 151 7.24214e+011
+474 240 7.23452e+011
+222 419 7.23236e+011
+106 39 7.22101e+011
+271 166 7.21237e+011
+262 165 7.19781e+011
+190 216 7.15654e+011
+130 217 7.15027e+011
+287 343 7.1458e+011
+164 20 7.14221e+011
+437 339 7.14066e+011
+407 338 7.14049e+011
+480 19 7.13805e+011
+130 76 7.13431e+011
+354 320 7.12562e+011
+358 128 7.12411e+011
+396 261 7.11977e+011
+525 199 7.10441e+011
+121 3 7.09581e+011
+156 94 7.0939e+011
+36 299 7.06982e+011
+280 50 7.05087e+011
+233 16 7.04224e+011
+473 63 7.03312e+011
+468 124 7.02888e+011
+387 10 7.02791e+011
+140 22 7.02444e+011
+363 8 7.01462e+011
+266 295 7.00933e+011
+416 44 7.00765e+011
+422 324 7.00675e+011
+177 106 6.9803e+011
+529 142 6.97904e+011
+112 213 6.97804e+011
+318 385 6.97271e+011
+512 202 6.96855e+011
+63 133 6.93984e+011
+361 316 6.92814e+011
+456 84 6.92703e+011
+523 123 6.92522e+011
+473 4 6.91607e+011
+346 350 6.90276e+011
+509 455 6.8936e+011
+225 221 6.89223e+011
+541 19 6.88495e+011
+5 11 6.87874e+011
+305 106 6.86836e+011
+217 208 6.85101e+011
+362 397 6.85039e+011
+412 45 6.84659e+011
+361 130 6.84294e+011
+67 26 6.81623e+011
+476 262 6.81058e+011
+44 62 6.80369e+011
+348 338 6.78575e+011
+538 61 6.77858e+011
+380 337 6.76306e+011
+159 183 6.76196e+011
+175 40 6.75153e+011
+273 71 6.72844e+011
+221 150 6.70805e+011
+491 23 6.69765e+011
+385 125 6.69642e+011
+225 420 6.68958e+011
+274 53 6.67886e+011
+230 265 6.66698e+011
+537 393 6.64874e+011
+331 164 6.64858e+011
+323 223 6.63879e+011
+168 20 6.63489e+011
+560 228 6.63378e+011
+109 59 6.6287e+011
+294 297 6.62631e+011
+414 252 6.62025e+011
+527 360 6.58536e+011
+446 7 6.57777e+011
+102 4 6.54879e+011
+264 444 6.52792e+011
+172 57 6.52687e+011
+520 182 6.52266e+011
+273 131 6.51679e+011
+582 18 6.5052e+011
+485 180 6.49471e+011
+508 5 6.48855e+011
+177 261 6.48776e+011
+527 222 6.47993e+011
+363 254 6.47076e+011
+24 62 6.46729e+011
+407 353 6.45834e+011
+325 142 6.45649e+011
+283 72 6.44056e+011
+317 165 6.43805e+011
+276 221 6.4328e+011
+305 193 6.43076e+011
+381 26 6.42145e+011
+352 145 6.41895e+011
+480 178 6.4129e+011
+482 366 6.39752e+011
+417 84 6.38788e+011
+306 440 6.3843e+011
+191 277 6.37791e+011
+405 375 6.36915e+011
+525 172 6.35181e+011
+424 261 6.35172e+011
+21 61 6.34949e+011
+278 144 6.34268e+011
+228 185 6.3299e+011
+183 401 6.32131e+011
+192 124 6.31735e+011
+79 474 6.30142e+011
+382 411 6.29796e+011
+36 141 6.29653e+011
+163 96 6.2845e+011
+302 208 6.28141e+011
+253 75 6.25502e+011
+479 16 6.2523e+011
+277 138 6.24852e+011
+283 221 6.23927e+011
+442 239 6.238e+011
+371 162 6.23136e+011
+151 307 6.2134e+011
+562 149 6.21327e+011
+502 361 6.21193e+011
+276 352 6.20875e+011
+479 262 6.19289e+011
+510 79 6.17539e+011
+511 139 6.16806e+011
+540 13 6.1654e+011
+278 392 6.16308e+011
+270 70 6.16201e+011
+271 67 6.15204e+011
+75 6 6.13977e+011
+183 138 6.13539e+011
+256 148 6.13444e+011
+96 79 6.12825e+011
+537 139 6.11577e+011
+425 376 6.11406e+011
+478 402 6.10644e+011
+452 375 6.09901e+011
+306 363 6.09715e+011
+302 180 6.08953e+011
+436 182 6.085e+011
+449 139 6.08128e+011
+544 3 6.07441e+011
+455 264 6.0707e+011
+162 134 6.06695e+011
+314 164 6.04753e+011
+363 181 6.04479e+011
+504 61 6.04268e+011
+432 111 6.03939e+011
+376 85 6.03897e+011
+342 38 6.03511e+011
+125 188 6.03249e+011
+250 34 6.02431e+011
+22 219 6.0229e+011
+127 76 6.02222e+011
+325 425 6.01513e+011
+290 165 6.00489e+011
+303 215 5.9955e+011
+516 17 5.96525e+011
+357 334 5.96491e+011
+33 236 5.96239e+011
+354 25 5.95523e+011
+379 106 5.95159e+011
+102 235 5.94216e+011
+242 57 5.94125e+011
+437 391 5.93742e+011
+157 73 5.9267e+011
+429 1 5.91455e+011
+393 66 5.90953e+011
+565 160 5.9088e+011
+176 76 5.90032e+011
+418 258 5.89037e+011
+219 146 5.88755e+011
+449 402 5.88449e+011
+57 4 5.86828e+011
+450 82 5.86721e+011
+120 51 5.8594e+011
+532 241 5.8587e+011
+566 41 5.83689e+011
+297 420 5.82811e+011
+221 177 5.82254e+011
+376 353 5.81441e+011
+222 115 5.8134e+011
+534 267 5.80026e+011
+562 146 5.79042e+011
+109 95 5.78151e+011
+300 106 5.78109e+011
+249 219 5.78107e+011
+453 44 5.77958e+011
+488 3 5.77616e+011
+343 122 5.77277e+011
+351 321 5.75347e+011
+167 325 5.7533e+011
+225 295 5.74384e+011
+62 371 5.69804e+011
+216 145 5.69796e+011
+478 82 5.68874e+011
+192 172 5.68785e+011
+188 181 5.67987e+011
+161 238 5.67977e+011
+338 473 5.67163e+011
+133 72 5.67022e+011
+578 50 5.6548e+011
+283 52 5.63875e+011
+541 41 5.63517e+011
+183 110 5.6256e+011
+160 126 5.6204e+011
+78 25 5.6128e+011
+511 128 5.611e+011
+89 255 5.60345e+011
+313 80 5.59771e+011
+240 366 5.59323e+011
+498 65 5.58007e+011
+28 29 5.57815e+011
+362 369 5.57522e+011
+47 147 5.57441e+011
+292 121 5.56945e+011
+356 220 5.56263e+011
+267 15 5.55886e+011
+1 156 5.55162e+011
+489 140 5.53195e+011
+544 7 5.52162e+011
+79 270 5.51869e+011
+470 420 5.51799e+011
+234 346 5.5165e+011
+252 423 5.51627e+011
+395 162 5.51062e+011
+576 177 5.50365e+011
+198 83 5.50204e+011
+152 448 5.50055e+011
+55 291 5.49982e+011
+259 35 5.49344e+011
+345 275 5.49108e+011
+462 395 5.48869e+011
+332 295 5.48851e+011
+360 259 5.47739e+011
+527 60 5.47567e+011
+483 374 5.47422e+011
+575 126 5.47306e+011
+492 140 5.47164e+011
+147 397 5.45605e+011
+309 32 5.45516e+011
+95 148 5.43788e+011
+151 113 5.42615e+011
+500 22 5.42594e+011
+401 183 5.42483e+011
+427 182 5.42347e+011
+330 9 5.42103e+011
+51 289 5.41545e+011
+258 89 5.4069e+011
+386 243 5.40687e+011
+126 95 5.40512e+011
+373 68 5.4036e+011
+424 4 5.40079e+011
+173 115 5.39979e+011
+229 128 5.39813e+011
+325 297 5.39196e+011
+164 208 5.39025e+011
+489 342 5.38446e+011
+366 106 5.38236e+011
+45 151 5.38211e+011
+57 67 5.38131e+011
+374 240 5.37524e+011
+463 27 5.3588e+011
+134 237 5.34696e+011
+324 315 5.34619e+011
+355 268 5.34615e+011
+301 263 5.34501e+011
+146 160 5.33857e+011
+344 165 5.33654e+011
+209 154 5.32366e+011
+57 254 5.32026e+011
+483 176 5.31932e+011
+216 279 5.31709e+011
+260 250 5.31086e+011
+276 217 5.30828e+011
+387 326 5.29773e+011
+481 173 5.28334e+011
+476 22 5.28263e+011
+526 423 5.28144e+011
+324 148 5.27935e+011
+93 6 5.27637e+011
+430 320 5.25069e+011
+24 200 5.24521e+011
+260 71 5.24063e+011
+490 59 5.23794e+011
+186 98 5.23188e+011
+161 168 5.23115e+011
+518 202 5.2231e+011
+180 107 5.22154e+011
+255 151 5.22058e+011
+169 115 5.21372e+011
+237 130 5.20376e+011
+92 290 5.20337e+011
+386 319 5.20173e+011
+431 85 5.20091e+011
+205 160 5.19847e+011
+167 288 5.19394e+011
+266 30 5.18744e+011
+433 318 5.17737e+011
+434 397 5.17284e+011
+192 330 5.17199e+011
+548 222 5.15994e+011
+571 121 5.15967e+011
+123 162 5.15421e+011
+554 201 5.14732e+011
+20 64 5.14273e+011
+445 352 5.14049e+011
+401 122 5.13965e+011
+298 69 5.13593e+011
+171 110 5.13589e+011
+341 109 5.12189e+011
+174 165 5.12056e+011
+427 5 5.1181e+011
+287 52 5.11214e+011
+37 218 5.09971e+011
+292 30 5.08634e+011
+542 132 5.08397e+011
+269 61 5.08331e+011
+525 196 5.08203e+011
+317 147 5.08009e+011
+84 2 5.07847e+011
+191 146 5.06646e+011
+85 181 5.0583e+011
+390 326 5.05375e+011
+192 55 5.03319e+011
+184 344 5.02659e+011
+4 65 5.02489e+011
+436 304 5.02299e+011
+31 135 5.02272e+011
+152 225 5.01542e+011
+434 340 5.01337e+011
+538 96 5.00658e+011
+547 161 4.99413e+011
+75 96 4.99336e+011
+121 47 4.99258e+011
+541 123 4.9897e+011
+542 253 4.98625e+011
+267 130 4.96065e+011
+181 394 4.95494e+011
+233 262 4.95473e+011
+512 92 4.94878e+011
+382 123 4.94373e+011
+435 90 4.92907e+011
+495 456 4.92323e+011
+528 190 4.92319e+011
+189 109 4.92106e+011
+178 39 4.91551e+011
+372 393 4.9154e+011
+329 255 4.90912e+011
+66 213 4.90552e+011
+186 108 4.90149e+011
+390 161 4.89614e+011
+539 458 4.89128e+011
+58 71 4.8912e+011
+476 341 4.88804e+011
+327 182 4.88647e+011
+239 349 4.88499e+011
+84 477 4.88444e+011
+130 428 4.8808e+011
+197 131 4.87571e+011
+174 18 4.87569e+011
+478 13 4.87005e+011
+32 29 4.85672e+011
+164 358 4.84803e+011
+279 129 4.83793e+011
+153 218 4.83768e+011
+474 243 4.83686e+011
+488 43 4.83227e+011
+79 195 4.82723e+011
+580 80 4.82353e+011
+249 313 4.82284e+011
+216 106 4.82188e+011
+516 347 4.81962e+011
+108 183 4.81851e+011
+464 355 4.81661e+011
+344 110 4.79815e+011
+339 391 4.79297e+011
+500 264 4.79172e+011
+324 341 4.78903e+011
+278 333 4.78896e+011
+72 96 4.78725e+011
+405 199 4.78557e+011
+298 137 4.78202e+011
+438 162 4.77457e+011
+393 354 4.77456e+011
+74 24 4.77336e+011
+49 255 4.77116e+011
+176 186 4.75964e+011
+410 24 4.75648e+011
+169 200 4.75578e+011
+246 403 4.75432e+011
+30 219 4.7504e+011
+535 18 4.74197e+011
+358 161 4.74e+011
+557 246 4.73864e+011
+444 355 4.73549e+011
+561 321 4.71529e+011
+246 216 4.71205e+011
+298 398 4.71122e+011
+314 161 4.70944e+011
+412 65 4.7035e+011
+448 24 4.70164e+011
+229 198 4.69448e+011
+332 202 4.69206e+011
+36 201 4.68746e+011
+226 72 4.68003e+011
+108 27 4.67365e+011
+318 202 4.6695e+011
+538 185 4.66322e+011
+287 396 4.66274e+011
+76 375 4.65844e+011
+163 74 4.65451e+011
+516 182 4.64871e+011
+57 7 4.64809e+011
+575 129 4.64753e+011
+525 183 4.64264e+011
+161 255 4.6354e+011
+266 71 4.62706e+011
+430 88 4.61812e+011
+130 148 4.61674e+011
+397 265 4.61594e+011
+190 205 4.60748e+011
+272 181 4.60565e+011
+572 39 4.60407e+011
+468 141 4.5989e+011
+307 89 4.59758e+011
+383 146 4.59645e+011
+447 340 4.59267e+011
+205 203 4.58759e+011
+279 196 4.58723e+011
+109 325 4.58477e+011
+397 356 4.57835e+011
+413 99 4.5769e+011
+358 241 4.57057e+011
+395 22 4.56351e+011
+343 463 4.55183e+011
+138 98 4.5503e+011
+247 202 4.54531e+011
+257 250 4.5444e+011
+58 289 4.54144e+011
+129 128 4.51758e+011
+441 98 4.51742e+011
+489 182 4.51556e+011
+135 129 4.50792e+011
+534 160 4.5038e+011
+513 120 4.50013e+011
+460 339 4.48641e+011
+560 272 4.48263e+011
+475 203 4.48251e+011
+152 1 4.47967e+011
+214 124 4.47826e+011
+363 332 4.47824e+011
+562 71 4.47139e+011
+354 106 4.47078e+011
+116 76 4.46785e+011
+258 161 4.46106e+011
+219 107 4.4609e+011
+162 148 4.45835e+011
+387 167 4.45552e+011
+282 393 4.45386e+011
+341 163 4.45232e+011
+104 221 4.45032e+011
+376 6 4.44973e+011
+380 181 4.44961e+011
+400 272 4.447e+011
+72 45 4.44501e+011
+44 474 4.44416e+011
+178 19 4.44208e+011
+55 302 4.4368e+011
+211 16 4.43482e+011
+161 129 4.43308e+011
+502 160 4.43203e+011
+246 293 4.42587e+011
+352 163 4.42531e+011
+513 43 4.42406e+011
+531 161 4.42304e+011
+191 140 4.42109e+011
+418 283 4.41752e+011
+210 451 4.41602e+011
+461 357 4.41305e+011
+43 82 4.40934e+011
+444 452 4.40651e+011
+482 328 4.40508e+011
+49 12 4.40488e+011
+136 176 4.40022e+011
+374 299 4.39773e+011
+96 256 4.3967e+011
+538 121 4.39507e+011
+117 392 4.39263e+011
+406 81 4.39086e+011
+162 107 4.38614e+011
+347 240 4.38165e+011
+200 87 4.37712e+011
+293 147 4.37482e+011
+186 170 4.37168e+011
+359 143 4.36822e+011
+408 182 4.36661e+011
+504 263 4.36586e+011
+163 211 4.34999e+011
+501 60 4.34964e+011
+364 354 4.34674e+011
+161 20 4.34598e+011
+533 183 4.34281e+011
+480 165 4.34196e+011
+263 402 4.3155e+011
+542 129 4.3084e+011
+262 392 4.3053e+011
+572 332 4.30448e+011
+451 264 4.3036e+011
+148 21 4.30242e+011
+119 95 4.29772e+011
+278 190 4.29275e+011
+26 219 4.29217e+011
+107 99 4.29178e+011
+69 131 4.28585e+011
+485 83 4.28215e+011
+297 14 4.27999e+011
+336 391 4.27983e+011
+249 192 4.27962e+011
+293 312 4.27125e+011
+279 199 4.2707e+011
+502 164 4.26776e+011
+488 83 4.26408e+011
+187 341 4.25486e+011
+244 190 4.25384e+011
+507 142 4.24595e+011
+111 168 4.24472e+011
+138 146 4.24355e+011
+35 134 4.2422e+011
+533 21 4.23512e+011
+163 313 4.23289e+011
+150 150 4.2319e+011
+414 21 4.22938e+011
+203 294 4.22895e+011
+193 16 4.22775e+011
+542 100 4.22229e+011
+129 167 4.21614e+011
+131 131 4.21562e+011
+446 377 4.20538e+011
+269 93 4.20474e+011
+403 187 4.19866e+011
+95 477 4.19746e+011
+329 65 4.18234e+011
+130 95 4.18067e+011
+49 159 4.18008e+011
+80 40 4.17907e+011
+162 202 4.17498e+011
+243 199 4.17248e+011
+462 162 4.16569e+011
+236 220 4.16489e+011
+168 197 4.16461e+011
+109 147 4.16457e+011
+47 9 4.16076e+011
+204 128 4.15873e+011
+349 87 4.15651e+011
+373 75 4.15452e+011
+61 111 4.14215e+011
+59 40 4.13703e+011
+260 329 4.13246e+011
+363 407 4.13146e+011
+498 227 4.131e+011
+101 198 4.12887e+011
+304 53 4.12217e+011
+206 294 4.12125e+011
+241 165 4.11954e+011
+478 451 4.11677e+011
+290 348 4.11559e+011
+222 111 4.11532e+011
+162 165 4.11316e+011
+136 139 4.11246e+011
+219 126 4.1087e+011
+110 264 4.10718e+011
+184 341 4.10333e+011
+43 9 4.1025e+011
+430 122 4.10145e+011
+284 241 4.09189e+011
+358 10 4.0907e+011
+106 77 4.0906e+011
+256 34 4.08689e+011
+264 250 4.08675e+011
+53 357 4.08634e+011
+430 181 4.07961e+011
+183 184 4.07897e+011
+148 2 4.07868e+011
+510 362 4.06978e+011
+260 141 4.06602e+011
+304 157 4.06582e+011
+38 168 4.06534e+011
+387 97 4.06467e+011
+186 101 4.06366e+011
+88 209 4.06333e+011
+182 133 4.06029e+011
+437 388 4.0577e+011
+462 101 4.05315e+011
+110 341 4.04925e+011
+276 131 4.04513e+011
+537 80 4.04288e+011
+248 316 4.04106e+011
+220 290 4.0408e+011
+297 331 4.04068e+011
+392 295 4.03298e+011
+141 394 4.03128e+011
+314 222 4.03007e+011
+294 333 4.0299e+011
+346 48 4.02892e+011
+230 149 4.01519e+011
+238 422 4.01061e+011
+440 181 4.00942e+011
+64 7 4.00631e+011
+181 202 4.00568e+011
+126 219 4.00495e+011
+467 41 4.00193e+011
+194 110 3.99485e+011
+549 58 3.99354e+011
+209 420 3.99199e+011
+104 198 3.98982e+011
+165 108 3.98868e+011
+265 140 3.9855e+011
+168 149 3.98497e+011
+541 164 3.98241e+011
+434 225 3.98067e+011
+251 153 3.98056e+011
+434 156 3.9785e+011
+185 201 3.97747e+011
+424 203 3.97589e+011
+122 127 3.96619e+011
+445 126 3.95247e+011
+123 272 3.95082e+011
+142 2 3.94092e+011
+338 164 3.94059e+011
+393 216 3.94018e+011
+56 221 3.9385e+011
+163 114 3.93831e+011
+62 203 3.93817e+011
+334 240 3.93656e+011
+225 51 3.93214e+011
+494 163 3.92793e+011
+119 60 3.92512e+011
+200 110 3.92363e+011
+13 81 3.92241e+011
+160 92 3.92129e+011
+285 262 3.91997e+011
+594 18 3.91428e+011
+578 43 3.91255e+011
+162 205 3.90957e+011
+222 239 3.90678e+011
+460 44 3.90651e+011
+484 86 3.90209e+011
+498 224 3.90165e+011
+421 81 3.8975e+011
+217 36 3.89415e+011
+270 104 3.89406e+011
+246 400 3.88978e+011
+149 222 3.8881e+011
+66 252 3.88494e+011
+217 55 3.88379e+011
+337 426 3.87901e+011
+62 253 3.87793e+011
+150 232 3.87168e+011
+387 283 3.87054e+011
+270 131 3.86406e+011
+362 102 3.86268e+011
+557 303 3.85532e+011
+387 15 3.85316e+011
+483 332 3.85054e+011
+144 16 3.84555e+011
+559 80 3.84212e+011
+153 300 3.84154e+011
+115 219 3.83147e+011
+432 303 3.83067e+011
+38 239 3.82269e+011
+519 79 3.82079e+011
+411 470 3.81516e+011
+346 298 3.81188e+011
+401 119 3.80743e+011
+316 238 3.79681e+011
+289 183 3.79481e+011
+344 263 3.79392e+011
+16 216 3.7919e+011
+528 161 3.7892e+011
+41 355 3.78825e+011
+520 345 3.78467e+011
+266 145 3.78215e+011
+200 167 3.78209e+011
+193 219 3.78201e+011
+39 309 3.77546e+011
+506 177 3.77389e+011
+440 122 3.77212e+011
+191 358 3.77042e+011
+156 56 3.76854e+011
+180 274 3.76635e+011
+221 101 3.76562e+011
+259 274 3.76514e+011
+365 66 3.76434e+011
+144 395 3.7643e+011
+450 5 3.75723e+011
+493 181 3.74904e+011
+191 361 3.74738e+011
+423 62 3.74619e+011
+510 347 3.74285e+011
+334 369 3.74257e+011
+452 102 3.74036e+011
+101 162 3.73828e+011
+18 343 3.73719e+011
+539 405 3.7362e+011
+410 260 3.73414e+011
+178 122 3.72551e+011
+196 76 3.72168e+011
+365 85 3.72041e+011
+515 202 3.71681e+011
+44 97 3.70959e+011
+461 123 3.70552e+011
+162 123 3.70248e+011
+223 153 3.70184e+011
+281 35 3.70166e+011
+437 124 3.70148e+011
+90 78 3.69873e+011
+413 299 3.69769e+011
+90 376 3.69075e+011
+247 326 3.68923e+011
+129 238 3.68857e+011
+436 280 3.68038e+011
+130 254 3.68019e+011
+94 94 3.67852e+011
+194 311 3.66461e+011
+93 255 3.66407e+011
+479 405 3.66073e+011
+571 450 3.66069e+011
+368 1 3.66052e+011
+113 175 3.65925e+011
+129 113 3.65834e+011
+50 62 3.65825e+011
+53 43 3.65623e+011
+14 203 3.64866e+011
+465 4 3.64476e+011
+360 217 3.64415e+011
+422 315 3.63977e+011
+32 66 3.6345e+011
+321 29 3.63327e+011
+517 43 3.62337e+011
+529 365 3.62268e+011
+99 360 3.61574e+011
+263 13 3.6128e+011
+357 282 3.60659e+011
+280 386 3.60578e+011
+509 301 3.60388e+011
+368 337 3.60185e+011
+417 80 3.59964e+011
+402 167 3.5972e+011
+138 1 3.59384e+011
+53 221 3.59173e+011
+455 375 3.58797e+011
+274 144 3.57772e+011
+334 127 3.57413e+011
+56 78 3.57289e+011
+203 257 3.57255e+011
+223 147 3.56689e+011
+310 7 3.56322e+011
+307 448 3.55959e+011
+57 146 3.55656e+011
+526 120 3.54954e+011
+398 143 3.5489e+011
+33 111 3.54329e+011
+118 110 3.54306e+011
+478 240 3.54278e+011
+147 89 3.53715e+011
+389 243 3.53652e+011
+330 89 3.53536e+011
+104 27 3.53304e+011
+431 115 3.53166e+011
+65 275 3.53134e+011
+289 88 3.53072e+011
+49 80 3.52767e+011
+135 144 3.52749e+011
+449 445 3.52554e+011
+494 63 3.5122e+011
+452 162 3.50792e+011
+182 380 3.50637e+011
+420 143 3.49499e+011
+437 149 3.49249e+011
+384 325 3.47491e+011
+57 364 3.46959e+011
+513 262 3.46883e+011
+548 245 3.46784e+011
+186 309 3.46731e+011
+63 26 3.46343e+011
+435 163 3.46276e+011
+245 385 3.46248e+011
+479 293 3.46247e+011
+3 382 3.46241e+011
+68 336 3.45702e+011
+99 256 3.4526e+011
+270 90 3.45086e+011
+91 23 3.44755e+011
+498 59 3.4435e+011
+565 18 3.43843e+011
+199 127 3.43501e+011
+277 53 3.43237e+011
+199 293 3.42898e+011
+210 137 3.42515e+011
+389 420 3.42376e+011
+430 223 3.41524e+011
+72 409 3.41125e+011
+371 90 3.40683e+011
+307 354 3.39923e+011
+376 181 3.39898e+011
+30 255 3.39408e+011
+423 140 3.39116e+011
+288 263 3.3896e+011
+499 458 3.3894e+011
+148 39 3.38696e+011
+286 34 3.38187e+011
+141 391 3.38123e+011
+350 298 3.37788e+011
+535 93 3.37763e+011
+226 91 3.376e+011
+107 109 3.37439e+011
+540 206 3.37106e+011
+197 193 3.37089e+011
+544 91 3.37067e+011
+331 141 3.3699e+011
+165 201 3.36585e+011
+85 60 3.36518e+011
+183 238 3.36171e+011
+526 382 3.35901e+011
+469 201 3.35599e+011
+510 180 3.35586e+011
+288 123 3.35333e+011
+125 113 3.35146e+011
+96 197 3.35065e+011
+260 106 3.35032e+011
+599 364 3.35011e+011
+26 132 3.34746e+011
+446 123 3.34738e+011
+467 25 3.34276e+011
+573 405 3.33955e+011
+265 260 3.3389e+011
+443 320 3.33881e+011
+352 10 3.33852e+011
+95 422 3.33468e+011
+190 325 3.33126e+011
+537 261 3.33098e+011
+211 163 3.32988e+011
+390 203 3.32963e+011
+483 122 3.32884e+011
+116 428 3.32712e+011
+104 224 3.32574e+011
+384 87 3.32079e+011
+408 430 3.3194e+011
+534 340 3.31265e+011
+87 369 3.31144e+011
+279 193 3.31009e+011
+390 134 3.30834e+011
+419 89 3.29967e+011
+399 104 3.29957e+011
+126 329 3.29714e+011
+529 31 3.2968e+011
+133 93 3.29648e+011
+92 148 3.29374e+011
+585 18 3.29007e+011
+328 320 3.28927e+011
+322 119 3.28838e+011
+107 428 3.28785e+011
+449 167 3.28748e+011
+484 155 3.28694e+011
+494 59 3.28436e+011
+455 359 3.28308e+011
+498 70 3.28203e+011
+471 83 3.27773e+011
+410 82 3.27771e+011
+249 422 3.27717e+011
+362 448 3.27618e+011
+275 319 3.27602e+011
+294 138 3.27498e+011
+12 218 3.27398e+011
+73 186 3.26911e+011
+433 241 3.26817e+011
+346 392 3.26721e+011
+521 202 3.26494e+011
+116 129 3.26263e+011
+118 425 3.2611e+011
+104 304 3.25799e+011
+392 19 3.25688e+011
+408 14 3.25104e+011
+176 272 3.25001e+011
+58 99 3.24976e+011
+120 446 3.24812e+011
+154 113 3.24771e+011
+498 140 3.24086e+011
+569 382 3.23523e+011
+448 63 3.22719e+011
+462 221 3.21939e+011
+362 361 3.21882e+011
+358 393 3.21666e+011
+499 42 3.21561e+011
+191 312 3.21436e+011
+506 381 3.21432e+011
+95 59 3.21011e+011
+380 119 3.20953e+011
+247 347 3.20125e+011
+280 136 3.19826e+011
+354 16 3.19749e+011
+87 340 3.19701e+011
+149 131 3.19495e+011
+538 102 3.19367e+011
+95 9 3.19307e+011
+334 28 3.19232e+011
+317 106 3.18777e+011
+523 79 3.18583e+011
+584 38 3.18422e+011
+532 121 3.17707e+011
+444 119 3.17689e+011
+390 165 3.17626e+011
+146 79 3.17568e+011
+254 181 3.17224e+011
+332 415 3.17121e+011
+385 258 3.1705e+011
+573 422 3.16928e+011
+497 341 3.16788e+011
+261 383 3.16673e+011
+512 297 3.16459e+011
+213 149 3.16258e+011
+449 177 3.16238e+011
+60 180 3.16188e+011
+303 444 3.16036e+011
+86 365 3.16004e+011
+152 228 3.15173e+011
+260 229 3.15126e+011
+27 66 3.14996e+011
+415 261 3.14951e+011
+343 198 3.14648e+011
+108 180 3.14269e+011
+562 143 3.14243e+011
+333 356 3.14237e+011
+73 129 3.14151e+011
+240 134 3.14097e+011
+546 17 3.1395e+011
+92 59 3.13914e+011
+424 103 3.13891e+011
+278 165 3.13858e+011
+203 346 3.13785e+011
+570 182 3.13359e+011
+303 212 3.13203e+011
+438 241 3.12925e+011
+280 439 3.12799e+011
+513 363 3.11931e+011
+92 20 3.11691e+011
+320 104 3.11492e+011
+215 174 3.10829e+011
+522 425 3.1082e+011
+264 310 3.10437e+011
+382 3 3.10359e+011
+174 201 3.09119e+011
+274 205 3.09016e+011
+129 309 3.08963e+011
+373 72 3.08951e+011
+478 203 3.08935e+011
+391 221 3.089e+011
+401 319 3.08814e+011
+85 214 3.08746e+011
+359 52 3.08323e+011
+253 10 3.08272e+011
+270 144 3.08236e+011
+223 88 3.08199e+011
+66 477 3.07866e+011
+538 268 3.07806e+011
+331 212 3.07805e+011
+86 310 3.07573e+011
+163 37 3.07523e+011
+123 219 3.07288e+011
+373 354 3.06998e+011
+395 105 3.06951e+011
+166 315 3.06923e+011
+39 10 3.06762e+011
+275 329 3.06537e+011
+36 99 3.06211e+011
+157 306 3.06079e+011
+293 89 3.05889e+011
+355 12 3.05743e+011
+218 351 3.05323e+011
+242 419 3.05321e+011
+415 471 3.05205e+011
+558 462 3.0482e+011
+58 372 3.04417e+011
+411 415 3.04408e+011
+299 190 3.0405e+011
+227 259 3.03967e+011
+188 304 3.03836e+011
+58 103 3.03832e+011
+57 331 3.03782e+011
+299 180 3.03623e+011
+488 119 3.03374e+011
+69 476 3.0327e+011
+525 278 3.03192e+011
+496 101 3.02902e+011
+126 128 3.02528e+011
+300 246 3.01877e+011
+392 241 3.01739e+011
+519 164 3.01699e+011
+229 91 3.01441e+011
+285 158 3.01182e+011
+171 448 3.0106e+011
+407 142 3.00951e+011
+332 392 3.00811e+011
+10 476 2.99369e+011
+87 372 2.98852e+011
+340 88 2.98831e+011
+395 221 2.98679e+011
+244 212 2.97907e+011
+501 102 2.97702e+011
+184 118 2.97239e+011
+401 145 2.96646e+011
+9 44 2.96129e+011
+364 125 2.95765e+011
+515 60 2.95738e+011
+380 87 2.95508e+011
+366 95 2.95455e+011
+222 434 2.95446e+011
+356 254 2.95105e+011
+84 63 2.94874e+011
+430 45 2.94802e+011
+238 418 2.94793e+011
+117 4 2.94671e+011
+117 223 2.94538e+011
+210 445 2.94475e+011
+49 166 2.94378e+011
+253 249 2.94346e+011
+261 368 2.94014e+011
+78 60 2.93863e+011
+330 103 2.93857e+011
+249 387 2.93814e+011
+253 194 2.93694e+011
+205 416 2.93662e+011
+167 130 2.93295e+011
+217 97 2.93201e+011
+592 104 2.93024e+011
+281 419 2.92977e+011
+44 407 2.92967e+011
+334 436 2.92836e+011
+386 91 2.92363e+011
+444 243 2.92327e+011
+169 179 2.9232e+011
+370 466 2.91889e+011
+199 29 2.91747e+011
+240 194 2.91512e+011
+223 124 2.91131e+011
+497 283 2.91102e+011
+354 424 2.90957e+011
+430 339 2.90873e+011
+119 219 2.908e+011
+302 134 2.90758e+011
+102 295 2.90287e+011
+69 304 2.9027e+011
+43 122 2.90029e+011
+246 181 2.89789e+011
+45 90 2.89337e+011
+90 388 2.89128e+011
+402 220 2.89047e+011
+195 134 2.88682e+011
+188 264 2.88546e+011
+483 288 2.87897e+011
+45 355 2.87818e+011
+56 171 2.87813e+011
+184 142 2.87729e+011
+436 320 2.86867e+011
+470 43 2.86756e+011
+272 353 2.85984e+011
+375 125 2.85702e+011
+229 16 2.85666e+011
+570 420 2.85513e+011
+110 358 2.85455e+011
+482 46 2.85395e+011
+191 364 2.85277e+011
+104 162 2.85013e+011
+225 434 2.84468e+011
+196 342 2.84326e+011
+388 334 2.8423e+011
+510 135 2.84076e+011
+236 150 2.8399e+011
+114 357 2.83882e+011
+413 84 2.83688e+011
+73 166 2.83459e+011
+372 146 2.83365e+011
+49 235 2.83285e+011
+464 140 2.83181e+011
+434 63 2.82718e+011
+13 433 2.82567e+011
+341 314 2.82503e+011
+286 443 2.82108e+011
+433 381 2.81631e+011
+448 285 2.81395e+011
+276 296 2.80775e+011
+528 397 2.80709e+011
+296 125 2.80586e+011
+514 381 2.80582e+011
+543 457 2.80352e+011
+247 106 2.80245e+011
+496 475 2.80061e+011
+81 236 2.79933e+011
+553 79 2.79923e+011
+88 230 2.79821e+011
+513 181 2.79471e+011
+588 161 2.79098e+011
+212 32 2.7901e+011
+563 40 2.78874e+011
+191 254 2.78827e+011
+151 400 2.78645e+011
+502 420 2.78502e+011
+302 142 2.78495e+011
+514 377 2.78311e+011
+370 87 2.78084e+011
+396 46 2.78026e+011
+548 283 2.77901e+011
+310 260 2.77702e+011
+377 121 2.77437e+011
+463 23 2.77289e+011
+75 59 2.76564e+011
+329 62 2.76458e+011
+579 214 2.76216e+011
+39 81 2.76057e+011
+282 199 2.75763e+011
+359 448 2.75642e+011
+525 189 2.75489e+011
+542 140 2.75096e+011
+302 405 2.74902e+011
+287 111 2.74449e+011
+378 125 2.74434e+011
+274 209 2.74383e+011
+325 14 2.74145e+011
+391 322 2.73732e+011
+16 117 2.73725e+011
+246 172 2.7312e+011
+91 320 2.73049e+011
+194 164 2.73003e+011
+481 169 2.7296e+011
+449 324 2.72725e+011
+72 373 2.72337e+011
+332 334 2.72303e+011
+367 30 2.7213e+011
+245 15 2.72103e+011
+118 117 2.7195e+011
+485 140 2.71575e+011
+510 114 2.71389e+011
+91 276 2.71251e+011
+348 143 2.70897e+011
+251 163 2.70883e+011
+401 430 2.70642e+011
+511 211 2.70506e+011
+417 23 2.70356e+011
+372 143 2.70333e+011
+139 318 2.70235e+011
+156 317 2.69939e+011
+4 235 2.69851e+011
+571 454 2.69648e+011
+347 371 2.69582e+011
+115 180 2.69558e+011
+294 163 2.69548e+011
+95 124 2.69455e+011
+302 189 2.69384e+011
+471 212 2.69216e+011
+188 136 2.69064e+011
+575 39 2.69036e+011
+250 183 2.69006e+011
+402 6 2.68688e+011
+124 269 2.6865e+011
+339 221 2.68643e+011
+303 441 2.68584e+011
+583 140 2.68411e+011
+513 347 2.6821e+011
+159 151 2.67947e+011
+454 118 2.67731e+011
+393 183 2.67697e+011
+136 323 2.6765e+011
+52 12 2.67476e+011
+106 431 2.67189e+011
+84 236 2.66893e+011
+420 290 2.66714e+011
+143 237 2.66712e+011
+41 339 2.66549e+011
+411 220 2.66447e+011
+152 132 2.66378e+011
+214 162 2.6617e+011
+387 94 2.65926e+011
+202 393 2.65737e+011
+417 414 2.65562e+011
+171 148 2.64837e+011
+412 28 2.64653e+011
+160 98 2.64389e+011
+382 46 2.64374e+011
+283 135 2.6421e+011
+350 128 2.63663e+011
+3 165 2.63557e+011
+367 303 2.63552e+011
+107 220 2.6346e+011
+466 100 2.63266e+011
+200 327 2.63225e+011
+143 113 2.63115e+011
+275 360 2.63099e+011
+151 57 2.63021e+011
+96 453 2.62921e+011
+375 281 2.62553e+011
+546 140 2.62318e+011
+335 48 2.61883e+011
+210 36 2.61734e+011
+405 165 2.617e+011
+39 24 2.61628e+011
+310 299 2.61139e+011
+561 244 2.60919e+011
+448 119 2.6089e+011
+64 153 2.60716e+011
+315 28 2.60692e+011
+123 83 2.60556e+011
+179 57 2.60406e+011
+351 364 2.60142e+011
+247 259 2.59958e+011
+451 417 2.5995e+011
+118 181 2.59449e+011
+354 296 2.59303e+011
+119 114 2.58914e+011
+190 349 2.58905e+011
+565 463 2.58897e+011
+197 148 2.5876e+011
+5 151 2.58719e+011
+42 135 2.58588e+011
+157 170 2.58489e+011
+384 355 2.58355e+011
+89 252 2.58233e+011
+277 134 2.5767e+011
+416 298 2.57641e+011
+122 123 2.57401e+011
+463 40 2.57356e+011
+221 215 2.5732e+011
+401 200 2.57205e+011
+395 241 2.57147e+011
+165 379 2.5697e+011
+274 75 2.56952e+011
+227 122 2.56852e+011
+343 296 2.56819e+011
+166 309 2.56783e+011
+67 255 2.56595e+011
+82 198 2.5648e+011
+378 452 2.56419e+011
+359 177 2.56271e+011
+451 86 2.55826e+011
+43 119 2.55738e+011
+437 43 2.55736e+011
+246 419 2.55347e+011
+162 31 2.55205e+011
+255 405 2.55168e+011
+37 288 2.54938e+011
+470 23 2.54933e+011
+236 197 2.54622e+011
+136 94 2.54266e+011
+391 334 2.53971e+011
+391 125 2.53851e+011
+65 362 2.5379e+011
+459 41 2.53673e+011
+84 145 2.53646e+011
+187 325 2.53483e+011
+485 235 2.53448e+011
+481 128 2.53336e+011
+412 263 2.53179e+011
+141 116 2.53063e+011
+251 87 2.52799e+011
+53 450 2.52025e+011
+451 442 2.5199e+011
+177 329 2.51588e+011
+221 431 2.51327e+011
+176 341 2.5111e+011
+262 396 2.50959e+011
+160 431 2.50939e+011
+446 144 2.50871e+011
+572 59 2.50556e+011
+134 411 2.50491e+011
+326 179 2.50484e+011
+509 252 2.50406e+011
+433 45 2.50351e+011
+233 90 2.50315e+011
+162 138 2.49998e+011
+310 335 2.49984e+011
+99 425 2.49902e+011
+381 126 2.49827e+011
+323 126 2.49732e+011
+428 64 2.49226e+011
+183 316 2.49223e+011
+12 113 2.49115e+011
+211 95 2.48947e+011
+385 66 2.48366e+011
+89 9 2.48303e+011
+465 162 2.48231e+011
+157 163 2.48181e+011
+50 376 2.48161e+011
+18 236 2.48026e+011
+546 438 2.47679e+011
+398 66 2.47532e+011
+20 317 2.47415e+011
+446 246 2.47372e+011
+83 102 2.47282e+011
+201 416 2.46842e+011
+327 26 2.46659e+011
+401 66 2.4642e+011
+88 214 2.46132e+011
+192 168 2.46114e+011
+308 53 2.46076e+011
+302 87 2.4588e+011
+458 140 2.45808e+011
+375 224 2.45643e+011
+532 343 2.45604e+011
+174 121 2.45359e+011
+32 38 2.4526e+011
+529 135 2.45047e+011
+540 221 2.44858e+011
+362 64 2.44607e+011
+326 221 2.43981e+011
+255 80 2.43889e+011
+430 162 2.43223e+011
+589 309 2.43211e+011
+335 444 2.42803e+011
+324 259 2.42621e+011
+511 350 2.42566e+011
+102 39 2.42385e+011
+41 98 2.42367e+011
+95 290 2.42306e+011
+327 139 2.41823e+011
+569 203 2.41758e+011
+479 439 2.41652e+011
+51 252 2.41541e+011
+11 73 2.41291e+011
+420 363 2.40955e+011
+487 204 2.40909e+011
+497 462 2.40771e+011
+63 423 2.40331e+011
+433 26 2.40317e+011
+301 253 2.40228e+011
+250 259 2.39833e+011
+360 220 2.39657e+011
+76 111 2.39415e+011
+525 399 2.39051e+011
+16 434 2.38941e+011
+201 144 2.3892e+011
+450 197 2.3864e+011
+408 107 2.38639e+011
+556 265 2.38163e+011
+214 425 2.38129e+011
+438 455 2.37815e+011
+386 450 2.3744e+011
+182 310 2.37412e+011
+141 163 2.37206e+011
+113 205 2.37158e+011
+334 281 2.37044e+011
+320 95 2.37008e+011
+63 440 2.36171e+011
+121 148 2.36056e+011
+394 336 2.35512e+011
+511 366 2.35492e+011
+450 437 2.35082e+011
+63 149 2.34668e+011
+204 398 2.34566e+011
+54 61 2.34553e+011
+351 354 2.34345e+011
+85 110 2.34335e+011
+374 151 2.34207e+011
+131 393 2.33754e+011
+234 32 2.33718e+011
+126 307 2.3339e+011
+436 384 2.33344e+011
+328 353 2.33236e+011
+450 90 2.33224e+011
+254 108 2.33142e+011
+90 113 2.3309e+011
+574 56 2.32789e+011
+83 106 2.32734e+011
+605 121 2.32699e+011
+314 260 2.32693e+011
+576 165 2.32313e+011
+135 102 2.32292e+011
+582 344 2.32034e+011
+508 13 2.31853e+011
+114 164 2.3167e+011
+544 81 2.3152e+011
+218 315 2.31435e+011
+416 26 2.30824e+011
+529 18 2.30572e+011
+521 362 2.30352e+011
+465 115 2.30314e+011
+402 163 2.303e+011
+443 378 2.30266e+011
+161 326 2.30248e+011
+87 355 2.29929e+011
+190 131 2.29929e+011
+207 183 2.29892e+011
+163 349 2.29824e+011
+484 222 2.29688e+011
+556 80 2.29627e+011
+540 262 2.29538e+011
+387 21 2.29196e+011
+499 474 2.28999e+011
+98 95 2.28884e+011
+544 249 2.28747e+011
+432 269 2.28603e+011
+147 326 2.28508e+011
+265 286 2.28346e+011
+296 146 2.28293e+011
+388 83 2.28044e+011
+483 143 2.28007e+011
+39 78 2.27906e+011
+289 441 2.27818e+011
+119 162 2.27643e+011
+303 295 2.27519e+011
+574 7 2.27489e+011
+460 165 2.2726e+011
+319 186 2.2693e+011
+406 77 2.26709e+011
+107 259 2.26554e+011
+294 269 2.26532e+011
+414 245 2.26439e+011
+131 476 2.26423e+011
+530 221 2.26224e+011
+275 109 2.26207e+011
+63 315 2.26205e+011
+463 143 2.26158e+011
+69 419 2.26061e+011
+356 251 2.26042e+011
+173 417 2.25925e+011
+122 24 2.25825e+011
+323 134 2.25813e+011
+391 449 2.25202e+011
+197 311 2.24913e+011
+560 265 2.24795e+011
+166 127 2.24413e+011
+514 334 2.24386e+011
+414 144 2.24089e+011
+82 218 2.24079e+011
+333 181 2.23853e+011
+113 307 2.23485e+011
+425 25 2.23387e+011
+524 162 2.23368e+011
+507 41 2.23066e+011
+356 448 2.22789e+011
+358 63 2.22729e+011
+85 177 2.22579e+011
+362 177 2.22542e+011
+157 166 2.22218e+011
+576 90 2.22004e+011
+56 142 2.21865e+011
+348 277 2.21835e+011
+146 451 2.2172e+011
+298 129 2.21182e+011
+420 123 2.21115e+011
+188 20 2.21104e+011
+177 201 2.21039e+011
+146 255 2.20521e+011
+533 346 2.20484e+011
+347 120 2.20465e+011
+342 391 2.20408e+011
+50 452 2.2021e+011
+233 295 2.20032e+011
+566 143 2.19569e+011
+420 96 2.19281e+011
+42 441 2.19216e+011
+404 104 2.19103e+011
+347 201 2.19076e+011
+291 11 2.18925e+011
+124 148 2.18601e+011
+335 143 2.18449e+011
+392 122 2.18406e+011
+532 173 2.18257e+011
+295 258 2.18128e+011
+370 139 2.17911e+011
+297 261 2.17885e+011
+307 196 2.1779e+011
+423 117 2.17751e+011
+468 262 2.17684e+011
+385 337 2.17587e+011
+75 147 2.17586e+011
+618 181 2.17402e+011
+148 137 2.17158e+011
+285 393 2.16843e+011
+323 137 2.16703e+011
+207 315 2.16449e+011
+352 270 2.16204e+011
+150 195 2.16198e+011
+40 183 2.16116e+011
+245 102 2.1602e+011
+226 88 2.1599e+011
+36 470 2.15774e+011
+473 103 2.15713e+011
+126 412 2.1569e+011
+188 312 2.15471e+011
+396 119 2.15303e+011
+444 204 2.1503e+011
+181 292 2.1502e+011
+455 59 2.1483e+011
+596 59 2.14823e+011
+531 36 2.1464e+011
+351 448 2.14538e+011
+111 217 2.14446e+011
+167 358 2.14391e+011
+170 131 2.14277e+011
+412 339 2.14268e+011
+291 50 2.13912e+011
+122 181 2.13674e+011
+577 135 2.13654e+011
+547 261 2.13413e+011
+321 11 2.13351e+011
+287 370 2.13351e+011
+407 104 2.13156e+011
+188 300 2.13126e+011
+166 38 2.13029e+011
+132 376 2.13004e+011
+197 91 2.1275e+011
+426 125 2.12694e+011
+161 61 2.12589e+011
+438 397 2.12534e+011
+158 101 2.1223e+011
+473 356 2.11899e+011
+573 19 2.11577e+011
+523 141 2.11547e+011
+54 150 2.11516e+011
+8 234 2.11434e+011
+185 373 2.11424e+011
+334 9 2.11414e+011
+13 237 2.11407e+011
+570 269 2.11209e+011
+262 31 2.1118e+011
+421 298 2.10994e+011
+261 456 2.10708e+011
+214 450 2.10639e+011
+102 339 2.10504e+011
+188 256 2.10489e+011
+454 121 2.10428e+011
+529 119 2.10389e+011
+65 307 2.10369e+011
+90 365 2.1031e+011
+143 143 2.10207e+011
+516 82 2.10189e+011
+275 316 2.10165e+011
+375 144 2.1e+011
+419 53 2.09816e+011
+530 176 2.09607e+011
+440 468 2.09449e+011
+243 31 2.09301e+011
+328 14 2.09262e+011
+149 201 2.09195e+011
+231 177 2.08802e+011
+128 375 2.0841e+011
+553 303 2.08395e+011
+91 339 2.08075e+011
+147 125 2.07855e+011
+513 324 2.07761e+011
+312 264 2.07361e+011
+107 162 2.07288e+011
+414 222 2.07172e+011
+540 443 2.07097e+011
+58 168 2.0704e+011
+422 327 2.06953e+011
+88 95 2.06923e+011
+86 288 2.06905e+011
+529 27 2.06903e+011
+51 336 2.06761e+011
+44 251 2.06719e+011
+270 414 2.06701e+011
+345 140 2.06674e+011
+68 57 2.06602e+011
+187 290 2.06543e+011
+130 171 2.06488e+011
+183 95 2.06455e+011
+303 331 2.06302e+011
+482 455 2.06265e+011
+266 19 2.06258e+011
+404 99 2.06257e+011
+299 87 2.06233e+011
+412 183 2.06129e+011
+551 120 2.0604e+011
+473 453 2.05805e+011
+309 266 2.05613e+011
+276 426 2.05607e+011
+538 162 2.05437e+011
+272 109 2.05398e+011
+173 291 2.05383e+011
+368 162 2.05333e+011
+541 380 2.05296e+011
+106 359 2.05113e+011
+514 401 2.04883e+011
+411 144 2.04811e+011
+282 81 2.04789e+011
+469 163 2.04787e+011
+243 273 2.04499e+011
+330 217 2.04111e+011
+59 171 2.03986e+011
+208 144 2.03701e+011
+297 410 2.03661e+011
+323 370 2.03603e+011
+288 159 2.03596e+011
+133 66 2.03569e+011
+95 285 2.03553e+011
+165 364 2.03435e+011
+478 221 2.03251e+011
+208 73 2.03077e+011
+549 80 2.02767e+011
+49 458 2.02704e+011
+29 259 2.02462e+011
+290 137 2.02424e+011
+85 96 2.02393e+011
+268 417 2.02001e+011
+171 87 2.01877e+011
+330 412 2.01811e+011
+553 18 2.01748e+011
+342 137 2.01604e+011
+453 437 2.01577e+011
+580 202 2.01552e+011
+28 119 2.01466e+011
+163 190 2.01384e+011
+399 92 2.01374e+011
+420 132 2.01266e+011
+118 263 2.0105e+011
+386 246 2.00908e+011
+334 219 2.00752e+011
+418 93 2.00559e+011
+220 84 2.00534e+011
+159 154 2.0035e+011
+232 273 2.00087e+011
+45 340 1.99932e+011
+191 188 1.99806e+011
+390 119 1.99664e+011
+139 311 1.99591e+011
+498 154 1.99387e+011
+316 100 1.9914e+011
+56 234 1.98956e+011
+336 182 1.9879e+011
+258 158 1.98662e+011
+314 448 1.98648e+011
+78 218 1.98612e+011
+123 412 1.98523e+011
+398 298 1.98439e+011
+528 80 1.98377e+011
+337 331 1.98232e+011
+227 262 1.97942e+011
+180 221 1.97659e+011
+124 58 1.97649e+011
+27 45 1.97435e+011
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_3_7.txt b/test_data/harriscorners/hc_msc_3.00_0.04_3_7.txt
new file mode 100644
index 0000000..539f2cc
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_3_7.txt
@@ -0,0 +1,2599 @@
+2598
+244 94 7.52428e+012
+498 1 7.16173e+012
+121 44 7.06738e+012
+274 367 6.72401e+012
+421 180 5.97555e+012
+277 367 5.69686e+012
+331 128 5.59613e+012
+83 77 5.49709e+012
+299 53 5.1256e+012
+401 263 5.00272e+012
+135 214 4.85851e+012
+238 20 4.68279e+012
+80 28 4.50504e+012
+271 291 4.38534e+012
+424 322 4.35505e+012
+129 26 4.26936e+012
+202 18 4.21799e+012
+467 238 4.18864e+012
+342 8 4.0838e+012
+199 18 4.07721e+012
+282 113 4.0347e+012
+240 92 3.97414e+012
+238 17 3.95027e+012
+75 257 3.83362e+012
+542 14 3.80761e+012
+460 264 3.80225e+012
+438 68 3.79286e+012
+424 177 3.71703e+012
+165 240 3.64222e+012
+458 279 3.63846e+012
+510 166 3.56818e+012
+55 30 3.52485e+012
+301 105 3.52344e+012
+151 223 3.52252e+012
+137 204 3.51914e+012
+80 4 3.50895e+012
+543 167 3.49089e+012
+510 124 3.48188e+012
+103 61 3.47697e+012
+361 294 3.4587e+012
+394 142 3.41918e+012
+413 255 3.40136e+012
+155 235 3.39326e+012
+394 317 3.39077e+012
+129 1 3.35154e+012
+210 436 3.33879e+012
+213 57 3.33636e+012
+183 35 3.32129e+012
+302 184 3.31753e+012
+243 203 3.25817e+012
+196 126 3.25617e+012
+280 368 3.24946e+012
+390 143 3.2417e+012
+486 58 3.21708e+012
+160 144 3.19407e+012
+483 178 3.18965e+012
+81 1 3.18661e+012
+126 255 3.13634e+012
+363 400 3.12808e+012
+513 78 3.09592e+012
+83 134 3.09292e+012
+209 56 3.09051e+012
+302 181 3.07907e+012
+175 95 3.06776e+012
+486 22 3.06083e+012
+416 8 3.05636e+012
+138 210 3.05338e+012
+541 59 3.03744e+012
+79 79 3.00039e+012
+562 225 2.97595e+012
+175 111 2.95307e+012
+554 39 2.95207e+012
+202 313 2.94425e+012
+287 298 2.9424e+012
+506 17 2.93799e+012
+221 36 2.92393e+012
+485 338 2.92333e+012
+482 22 2.9074e+012
+361 395 2.90425e+012
+34 138 2.90041e+012
+345 339 2.89994e+012
+528 102 2.89881e+012
+209 20 2.88699e+012
+342 338 2.86677e+012
+46 26 2.86609e+012
+208 221 2.86547e+012
+137 174 2.84981e+012
+164 215 2.83243e+012
+222 181 2.82964e+012
+293 16 2.82323e+012
+319 314 2.82133e+012
+339 10 2.82086e+012
+102 222 2.81186e+012
+261 202 2.80287e+012
+171 95 2.78781e+012
+125 186 2.78238e+012
+115 43 2.78101e+012
+36 145 2.77764e+012
+528 23 2.77185e+012
+215 71 2.76648e+012
+424 45 2.75164e+012
+511 16 2.7421e+012
+544 58 2.73466e+012
+260 297 2.73407e+012
+34 8 2.73096e+012
+419 8 2.71792e+012
+31 8 2.71701e+012
+359 129 2.71319e+012
+497 160 2.70355e+012
+348 339 2.69908e+012
+258 384 2.68848e+012
+244 166 2.68078e+012
+34 267 2.66058e+012
+66 235 2.65514e+012
+126 164 2.65333e+012
+41 217 2.64485e+012
+158 74 2.6446e+012
+302 176 2.64299e+012
+92 214 2.62896e+012
+46 219 2.62528e+012
+263 441 2.61718e+012
+189 218 2.61297e+012
+421 165 2.61235e+012
+326 165 2.61199e+012
+77 3 2.60595e+012
+126 26 2.59455e+012
+542 217 2.59449e+012
+211 439 2.5893e+012
+234 161 2.58677e+012
+130 37 2.585e+012
+253 12 2.5782e+012
+378 67 2.57218e+012
+283 117 2.55362e+012
+480 19 2.55265e+012
+367 143 2.54951e+012
+90 197 2.54835e+012
+383 5 2.54663e+012
+413 45 2.54467e+012
+255 139 2.54046e+012
+442 24 2.53679e+012
+420 45 2.52904e+012
+48 98 2.52796e+012
+4 46 2.5196e+012
+286 209 2.51395e+012
+454 204 2.51109e+012
+124 197 2.50237e+012
+126 364 2.50103e+012
+511 2 2.50079e+012
+448 399 2.49276e+012
+485 358 2.49095e+012
+276 182 2.48829e+012
+552 381 2.47733e+012
+477 5 2.47022e+012
+111 240 2.4669e+012
+299 165 2.45866e+012
+533 241 2.45809e+012
+236 72 2.44535e+012
+195 56 2.43921e+012
+449 299 2.43853e+012
+64 319 2.43784e+012
+447 296 2.43543e+012
+477 22 2.43285e+012
+512 221 2.42582e+012
+247 206 2.42091e+012
+319 225 2.42042e+012
+71 26 2.41211e+012
+473 243 2.41046e+012
+390 59 2.41039e+012
+384 10 2.40669e+012
+465 196 2.40538e+012
+252 139 2.4035e+012
+87 197 2.403e+012
+387 220 2.39955e+012
+477 19 2.39568e+012
+359 166 2.39344e+012
+512 342 2.38838e+012
+359 334 2.38367e+012
+302 166 2.38279e+012
+326 89 2.38184e+012
+313 148 2.37917e+012
+428 2 2.37256e+012
+206 436 2.3647e+012
+129 75 2.36051e+012
+174 311 2.35509e+012
+333 105 2.35457e+012
+355 127 2.35421e+012
+542 365 2.35337e+012
+125 259 2.35185e+012
+112 344 2.35142e+012
+518 59 2.34554e+012
+132 75 2.34421e+012
+365 300 2.34219e+012
+476 261 2.34134e+012
+157 1 2.33671e+012
+450 338 2.33354e+012
+448 261 2.33027e+012
+418 165 2.32952e+012
+223 420 2.32533e+012
+269 53 2.32396e+012
+508 2 2.31917e+012
+101 79 2.31727e+012
+364 142 2.31655e+012
+551 41 2.31219e+012
+528 20 2.30962e+012
+281 49 2.30491e+012
+317 336 2.30226e+012
+241 70 2.30128e+012
+373 82 2.30021e+012
+272 68 2.2991e+012
+523 61 2.29701e+012
+386 178 2.29101e+012
+408 64 2.28614e+012
+109 42 2.28581e+012
+64 344 2.28267e+012
+261 238 2.27879e+012
+428 118 2.26566e+012
+31 235 2.26007e+012
+563 62 2.259e+012
+166 96 2.25354e+012
+410 162 2.25074e+012
+335 90 2.24493e+012
+37 298 2.24257e+012
+391 296 2.24065e+012
+238 201 2.2406e+012
+383 163 2.23997e+012
+162 110 2.23339e+012
+224 39 2.23026e+012
+362 258 2.23023e+012
+575 16 2.22989e+012
+358 319 2.2231e+012
+298 274 2.2205e+012
+516 75 2.22009e+012
+175 165 2.2142e+012
+364 253 2.21272e+012
+206 449 2.20575e+012
+481 83 2.20499e+012
+55 290 2.2045e+012
+525 20 2.19863e+012
+403 120 2.19461e+012
+352 321 2.19085e+012
+47 151 2.18484e+012
+173 237 2.18377e+012
+227 293 2.18243e+012
+474 5 2.17734e+012
+310 148 2.17656e+012
+111 169 2.17598e+012
+326 141 2.17112e+012
+536 244 2.16562e+012
+464 394 2.1597e+012
+208 225 2.15376e+012
+110 134 2.15304e+012
+170 240 2.1488e+012
+220 148 2.14767e+012
+38 63 2.14043e+012
+362 333 2.13205e+012
+294 27 2.13189e+012
+217 145 2.12916e+012
+547 162 2.1267e+012
+265 296 2.12603e+012
+527 195 2.12482e+012
+432 147 2.12351e+012
+169 19 2.12256e+012
+364 250 2.12245e+012
+87 254 2.11864e+012
+274 132 2.11487e+012
+512 100 2.11373e+012
+174 41 2.10054e+012
+144 311 2.0971e+012
+260 222 2.09666e+012
+143 324 2.09616e+012
+542 214 2.09554e+012
+580 17 2.09072e+012
+512 97 2.08277e+012
+36 135 2.07592e+012
+60 184 2.07585e+012
+546 41 2.0747e+012
+404 183 2.07213e+012
+7 10 2.0711e+012
+314 84 2.06202e+012
+4 10 2.061e+012
+469 123 2.0588e+012
+107 39 2.0538e+012
+365 6 2.05304e+012
+283 402 2.05301e+012
+312 77 2.05104e+012
+272 280 2.04828e+012
+56 7 2.04795e+012
+403 277 2.03967e+012
+525 23 2.03748e+012
+288 164 2.03713e+012
+112 392 2.03673e+012
+232 199 2.03226e+012
+389 11 2.02826e+012
+381 353 2.02815e+012
+423 336 2.02561e+012
+490 1 2.01317e+012
+523 346 2.01168e+012
+58 218 2.00442e+012
+384 124 1.99777e+012
+425 5 1.99613e+012
+411 65 1.9955e+012
+211 184 1.99487e+012
+280 365 1.98866e+012
+528 183 1.98773e+012
+251 364 1.98359e+012
+61 217 1.97992e+012
+232 263 1.97856e+012
+329 258 1.97581e+012
+446 24 1.97193e+012
+36 174 1.97166e+012
+490 139 1.97138e+012
+34 100 1.96841e+012
+309 370 1.96569e+012
+269 68 1.9631e+012
+529 39 1.96197e+012
+152 307 1.95885e+012
+131 216 1.95868e+012
+247 219 1.95481e+012
+66 26 1.94763e+012
+379 5 1.94761e+012
+391 48 1.93969e+012
+528 61 1.93789e+012
+484 363 1.93385e+012
+34 235 1.92972e+012
+480 296 1.92938e+012
+10 101 1.92885e+012
+139 21 1.92422e+012
+89 149 1.92275e+012
+514 203 1.9216e+012
+249 143 1.91728e+012
+411 259 1.91665e+012
+278 220 1.9165e+012
+172 56 1.91124e+012
+209 450 1.90901e+012
+394 65 1.90792e+012
+140 325 1.90533e+012
+394 161 1.9047e+012
+246 144 1.90442e+012
+153 197 1.90407e+012
+437 339 1.90271e+012
+141 182 1.90144e+012
+132 71 1.89829e+012
+220 17 1.89618e+012
+142 185 1.8946e+012
+328 296 1.8945e+012
+256 152 1.8907e+012
+436 396 1.88651e+012
+323 165 1.88519e+012
+305 439 1.88412e+012
+361 142 1.88343e+012
+229 37 1.88317e+012
+58 75 1.87718e+012
+509 203 1.87609e+012
+495 118 1.87222e+012
+42 63 1.8712e+012
+131 132 1.86534e+012
+250 220 1.85938e+012
+317 165 1.8583e+012
+46 134 1.85012e+012
+365 258 1.84906e+012
+381 124 1.84446e+012
+24 62 1.84292e+012
+68 45 1.83819e+012
+265 445 1.83692e+012
+482 173 1.83613e+012
+110 58 1.83394e+012
+22 65 1.83314e+012
+276 179 1.82853e+012
+514 346 1.8257e+012
+128 187 1.82414e+012
+323 315 1.82337e+012
+175 168 1.82233e+012
+115 392 1.82095e+012
+521 183 1.82008e+012
+409 354 1.81559e+012
+343 108 1.81157e+012
+547 219 1.81095e+012
+253 74 1.80994e+012
+390 140 1.80853e+012
+456 44 1.80844e+012
+522 264 1.80594e+012
+236 347 1.80581e+012
+340 108 1.80577e+012
+431 318 1.80381e+012
+273 220 1.80206e+012
+562 478 1.79848e+012
+294 122 1.7982e+012
+501 361 1.79395e+012
+467 140 1.79389e+012
+366 105 1.79e+012
+302 215 1.78191e+012
+388 164 1.77924e+012
+314 163 1.77482e+012
+469 421 1.77468e+012
+172 19 1.77455e+012
+12 217 1.77105e+012
+176 239 1.76949e+012
+512 140 1.76621e+012
+50 288 1.76238e+012
+26 9 1.76211e+012
+277 143 1.76159e+012
+162 127 1.7596e+012
+274 129 1.75679e+012
+168 115 1.75678e+012
+548 182 1.7564e+012
+168 326 1.75611e+012
+452 374 1.75172e+012
+361 251 1.75139e+012
+508 454 1.74826e+012
+330 165 1.74431e+012
+526 186 1.74171e+012
+569 161 1.73783e+012
+376 316 1.73523e+012
+385 295 1.73489e+012
+158 96 1.73088e+012
+462 43 1.73074e+012
+455 85 1.72888e+012
+75 7 1.72839e+012
+457 3 1.72661e+012
+454 5 1.72628e+012
+568 40 1.72572e+012
+543 211 1.72242e+012
+190 108 1.72059e+012
+442 239 1.71828e+012
+145 161 1.71785e+012
+380 162 1.70863e+012
+197 84 1.70722e+012
+541 208 1.7071e+012
+275 52 1.70494e+012
+277 129 1.70357e+012
+544 2 1.6977e+012
+222 218 1.69063e+012
+534 20 1.68866e+012
+238 75 1.68752e+012
+56 4 1.67886e+012
+379 338 1.67762e+012
+501 143 1.67548e+012
+477 204 1.67498e+012
+450 217 1.67414e+012
+487 263 1.67352e+012
+101 360 1.67332e+012
+94 6 1.67321e+012
+405 82 1.67307e+012
+97 448 1.67181e+012
+538 457 1.6709e+012
+29 30 1.66703e+012
+107 28 1.66464e+012
+192 143 1.66225e+012
+493 139 1.65955e+012
+535 266 1.65495e+012
+230 127 1.65419e+012
+510 84 1.65285e+012
+69 149 1.65253e+012
+291 122 1.65208e+012
+389 65 1.65207e+012
+499 62 1.6515e+012
+61 134 1.64939e+012
+276 353 1.64907e+012
+432 112 1.64595e+012
+163 131 1.64342e+012
+392 218 1.64232e+012
+191 278 1.63402e+012
+139 111 1.63277e+012
+422 141 1.63127e+012
+102 164 1.63036e+012
+251 423 1.62706e+012
+263 402 1.62532e+012
+222 112 1.62528e+012
+566 160 1.62185e+012
+433 86 1.62103e+012
+162 114 1.61528e+012
+574 140 1.61255e+012
+324 146 1.61202e+012
+346 349 1.60711e+012
+414 23 1.60681e+012
+157 199 1.60607e+012
+160 166 1.60523e+012
+498 66 1.60443e+012
+77 236 1.60102e+012
+408 183 1.60068e+012
+571 40 1.59947e+012
+49 155 1.5969e+012
+33 30 1.59572e+012
+530 141 1.59561e+012
+162 96 1.59366e+012
+182 137 1.5914e+012
+375 117 1.59051e+012
+572 162 1.59007e+012
+578 53 1.58979e+012
+418 85 1.58952e+012
+558 19 1.58825e+012
+503 61 1.58655e+012
+16 217 1.58608e+012
+509 174 1.58335e+012
+387 124 1.58249e+012
+528 360 1.58217e+012
+222 151 1.58174e+012
+389 323 1.58049e+012
+220 14 1.57919e+012
+190 171 1.57871e+012
+228 263 1.57482e+012
+303 169 1.56986e+012
+434 89 1.5695e+012
+485 84 1.56925e+012
+531 360 1.5686e+012
+466 123 1.5663e+012
+90 258 1.56455e+012
+250 194 1.56332e+012
+174 187 1.56284e+012
+271 166 1.56102e+012
+526 221 1.56076e+012
+232 347 1.5605e+012
+393 21 1.5578e+012
+61 204 1.55699e+012
+509 142 1.55642e+012
+155 94 1.55504e+012
+385 324 1.55228e+012
+405 339 1.55219e+012
+417 438 1.5495e+012
+385 321 1.54408e+012
+435 182 1.54189e+012
+438 391 1.53953e+012
+520 201 1.53798e+012
+261 234 1.53793e+012
+277 390 1.53679e+012
+538 138 1.53479e+012
+105 222 1.53142e+012
+462 27 1.52969e+012
+363 180 1.52897e+012
+523 122 1.52726e+012
+340 163 1.5272e+012
+272 64 1.52658e+012
+227 186 1.5262e+012
+406 198 1.52487e+012
+369 86 1.52463e+012
+485 44 1.52433e+012
+498 225 1.52302e+012
+256 147 1.51866e+012
+344 125 1.51851e+012
+162 277 1.51791e+012
+430 85 1.51754e+012
+226 421 1.51741e+012
+479 15 1.51568e+012
+184 110 1.51491e+012
+166 20 1.51442e+012
+380 107 1.51346e+012
+164 206 1.51253e+012
+186 19 1.51053e+012
+575 178 1.50833e+012
+330 141 1.50787e+012
+358 219 1.50737e+012
+541 41 1.50664e+012
+160 137 1.50526e+012
+183 399 1.50447e+012
+97 445 1.50445e+012
+145 392 1.50261e+012
+275 137 1.50034e+012
+83 476 1.49994e+012
+343 122 1.499e+012
+337 107 1.4977e+012
+218 106 1.49758e+012
+492 21 1.4968e+012
+388 16 1.49641e+012
+282 220 1.4963e+012
+371 105 1.49542e+012
+260 165 1.49299e+012
+446 8 1.49203e+012
+452 45 1.49192e+012
+108 98 1.49076e+012
+134 97 1.48974e+012
+159 239 1.48821e+012
+261 141 1.48752e+012
+506 61 1.48733e+012
+185 107 1.48649e+012
+68 476 1.48455e+012
+211 144 1.48398e+012
+114 169 1.48309e+012
+63 59 1.48072e+012
+445 123 1.4801e+012
+371 161 1.47962e+012
+509 343 1.47962e+012
+102 236 1.4796e+012
+25 221 1.47801e+012
+175 260 1.47665e+012
+157 91 1.47547e+012
+528 363 1.47293e+012
+437 305 1.46935e+012
+185 136 1.4643e+012
+408 338 1.46401e+012
+357 259 1.46145e+012
+509 6 1.45946e+012
+445 354 1.45851e+012
+498 459 1.45845e+012
+36 219 1.45665e+012
+91 23 1.45466e+012
+190 360 1.45355e+012
+332 294 1.44906e+012
+218 207 1.44853e+012
+188 182 1.44731e+012
+215 125 1.44408e+012
+540 98 1.4426e+012
+114 216 1.44192e+012
+388 21 1.43945e+012
+178 168 1.43565e+012
+72 146 1.43547e+012
+186 202 1.43125e+012
+208 15 1.42986e+012
+372 69 1.4298e+012
+170 200 1.42774e+012
+579 81 1.42562e+012
+342 166 1.42541e+012
+349 144 1.42509e+012
+280 195 1.42473e+012
+403 186 1.42323e+012
+536 394 1.42297e+012
+166 107 1.42262e+012
+42 81 1.42175e+012
+404 376 1.41887e+012
+482 375 1.41857e+012
+534 184 1.41407e+012
+438 160 1.41337e+012
+289 345 1.41258e+012
+346 276 1.41185e+012
+266 14 1.40748e+012
+175 19 1.40737e+012
+353 337 1.40718e+012
+299 138 1.40643e+012
+59 253 1.40487e+012
+164 210 1.40415e+012
+378 121 1.4029e+012
+540 124 1.40113e+012
+104 3 1.40101e+012
+142 393 1.39605e+012
+346 179 1.3948e+012
+160 181 1.39389e+012
+268 242 1.39389e+012
+66 216 1.39285e+012
+301 205 1.39228e+012
+77 269 1.39159e+012
+210 153 1.39056e+012
+483 329 1.38925e+012
+543 8 1.38671e+012
+145 6 1.38671e+012
+223 433 1.38602e+012
+205 163 1.38395e+012
+265 30 1.3789e+012
+114 1 1.37748e+012
+78 475 1.3765e+012
+112 179 1.37624e+012
+365 336 1.37513e+012
+310 9 1.3732e+012
+162 73 1.37111e+012
+165 277 1.37087e+012
+185 344 1.37033e+012
+123 263 1.36964e+012
+228 288 1.36767e+012
+377 85 1.36553e+012
+85 1 1.36492e+012
+282 72 1.36481e+012
+57 70 1.36458e+012
+276 331 1.36451e+012
+345 166 1.36405e+012
+191 204 1.36363e+012
+480 165 1.36171e+012
+375 162 1.36164e+012
+181 108 1.36042e+012
+355 26 1.36027e+012
+448 124 1.36014e+012
+21 218 1.3599e+012
+533 61 1.35934e+012
+164 313 1.35873e+012
+72 259 1.35516e+012
+449 138 1.35491e+012
+238 134 1.35478e+012
+105 77 1.3546e+012
+561 18 1.35401e+012
+296 421 1.35169e+012
+411 21 1.35079e+012
+175 75 1.35029e+012
+517 182 1.35027e+012
+293 297 1.35027e+012
+31 66 1.35016e+012
+50 254 1.34907e+012
+503 164 1.34629e+012
+423 332 1.34563e+012
+536 17 1.34516e+012
+493 81 1.34463e+012
+95 149 1.34458e+012
+329 10 1.34453e+012
+100 198 1.34449e+012
+206 295 1.3433e+012
+436 124 1.34178e+012
+134 130 1.34071e+012
+150 112 1.33855e+012
+95 257 1.33815e+012
+48 10 1.33595e+012
+205 159 1.33472e+012
+134 127 1.3347e+012
+373 392 1.33116e+012
+501 263 1.33042e+012
+364 201 1.33013e+012
+544 457 1.32984e+012
+147 397 1.32967e+012
+277 187 1.32933e+012
+109 94 1.32775e+012
+165 357 1.32686e+012
+340 264 1.32506e+012
+79 40 1.32341e+012
+181 20 1.32313e+012
+85 61 1.32292e+012
+537 96 1.32183e+012
+541 139 1.32181e+012
+306 364 1.32117e+012
+195 132 1.31799e+012
+248 314 1.31706e+012
+502 21 1.31644e+012
+527 189 1.31416e+012
+41 26 1.31232e+012
+283 394 1.30996e+012
+54 222 1.30921e+012
+218 125 1.30913e+012
+368 109 1.3083e+012
+85 148 1.30535e+012
+190 139 1.30155e+012
+466 26 1.30052e+012
+492 120 1.29854e+012
+151 229 1.29747e+012
+506 143 1.29724e+012
+512 363 1.29559e+012
+241 57 1.29304e+012
+135 147 1.29233e+012
+100 5 1.28907e+012
+269 132 1.28825e+012
+247 402 1.28811e+012
+340 122 1.28796e+012
+126 95 1.28763e+012
+385 244 1.28752e+012
+120 115 1.28613e+012
+514 119 1.28561e+012
+255 89 1.28548e+012
+279 353 1.28528e+012
+483 163 1.28325e+012
+517 346 1.28302e+012
+396 21 1.28047e+012
+46 81 1.28039e+012
+300 264 1.27992e+012
+388 161 1.27987e+012
+247 386 1.27953e+012
+168 289 1.27778e+012
+463 101 1.27655e+012
+118 5 1.27433e+012
+52 358 1.27423e+012
+138 58 1.2724e+012
+91 290 1.27204e+012
+296 331 1.27086e+012
+514 42 1.2701e+012
+286 342 1.26983e+012
+357 11 1.26927e+012
+136 143 1.26905e+012
+499 80 1.26886e+012
+461 162 1.26838e+012
+445 243 1.26834e+012
+397 163 1.2669e+012
+119 128 1.26673e+012
+130 128 1.26664e+012
+124 2 1.26589e+012
+37 239 1.2652e+012
+561 146 1.26348e+012
+382 26 1.2622e+012
+302 209 1.2616e+012
+474 204 1.26004e+012
+434 159 1.25764e+012
+86 181 1.25558e+012
+513 298 1.2544e+012
+325 426 1.25311e+012
+280 198 1.25289e+012
+209 447 1.25264e+012
+209 419 1.25253e+012
+513 46 1.25182e+012
+449 166 1.24997e+012
+121 52 1.24989e+012
+436 301 1.24974e+012
+278 132 1.2495e+012
+56 66 1.24708e+012
+304 189 1.24692e+012
+122 6 1.24626e+012
+242 192 1.24444e+012
+527 424 1.24303e+012
+423 261 1.24226e+012
+33 110 1.24195e+012
+279 135 1.24177e+012
+556 181 1.23763e+012
+118 1 1.2369e+012
+424 62 1.23519e+012
+474 62 1.23432e+012
+197 87 1.23409e+012
+106 182 1.23245e+012
+563 323 1.22984e+012
+464 356 1.22928e+012
+138 178 1.22795e+012
+426 375 1.22678e+012
+250 35 1.22566e+012
+162 252 1.22556e+012
+103 196 1.22407e+012
+5 64 1.22292e+012
+320 105 1.22199e+012
+482 367 1.22031e+012
+61 370 1.21968e+012
+281 438 1.21911e+012
+487 81 1.2191e+012
+542 254 1.21831e+012
+394 355 1.2182e+012
+287 396 1.21746e+012
+493 60 1.21712e+012
+354 144 1.21698e+012
+261 249 1.2165e+012
+287 262 1.2165e+012
+258 249 1.21636e+012
+537 183 1.216e+012
+145 17 1.21489e+012
+190 328 1.21386e+012
+72 130 1.21311e+012
+218 98 1.21252e+012
+283 198 1.21067e+012
+360 368 1.20924e+012
+345 47 1.20921e+012
+292 88 1.2083e+012
+145 1 1.20704e+012
+418 284 1.20612e+012
+363 368 1.20602e+012
+258 161 1.20571e+012
+412 98 1.20549e+012
+560 323 1.20478e+012
+351 11 1.20474e+012
+530 160 1.20401e+012
+147 78 1.20277e+012
+56 145 1.20261e+012
+562 149 1.20229e+012
+306 90 1.20142e+012
+280 192 1.20037e+012
+524 171 1.19844e+012
+494 458 1.19826e+012
+272 145 1.19818e+012
+496 21 1.19704e+012
+140 114 1.1958e+012
+440 123 1.1954e+012
+397 356 1.19492e+012
+354 11 1.19444e+012
+570 121 1.19441e+012
+42 10 1.19371e+012
+67 253 1.18951e+012
+293 31 1.18877e+012
+126 77 1.18813e+012
+305 146 1.18677e+012
+541 133 1.18629e+012
+266 130 1.18439e+012
+576 127 1.1839e+012
+118 222 1.18365e+012
+331 202 1.18268e+012
+178 272 1.18236e+012
+37 169 1.18198e+012
+94 9 1.18154e+012
+297 69 1.18144e+012
+218 128 1.18106e+012
+385 88 1.17863e+012
+168 196 1.17851e+012
+435 319 1.1782e+012
+277 295 1.17737e+012
+423 398 1.17646e+012
+82 61 1.17479e+012
+212 150 1.17403e+012
+539 265 1.17402e+012
+390 242 1.17361e+012
+137 99 1.17273e+012
+199 167 1.17094e+012
+42 118 1.17008e+012
+88 369 1.16897e+012
+412 470 1.16716e+012
+357 162 1.16715e+012
+264 141 1.16705e+012
+327 105 1.16697e+012
+186 97 1.16629e+012
+40 355 1.16594e+012
+186 100 1.16536e+012
+228 260 1.16521e+012
+471 202 1.16389e+012
+360 170 1.16301e+012
+180 395 1.16286e+012
+389 168 1.16278e+012
+30 218 1.1625e+012
+510 129 1.15981e+012
+264 71 1.15871e+012
+308 31 1.1586e+012
+363 357 1.15758e+012
+358 241 1.15621e+012
+11 204 1.15514e+012
+406 164 1.1551e+012
+496 80 1.1549e+012
+148 449 1.15479e+012
+190 167 1.1543e+012
+60 40 1.15339e+012
+253 249 1.15256e+012
+207 203 1.1516e+012
+374 240 1.1515e+012
+259 34 1.15142e+012
+165 286 1.1514e+012
+411 102 1.15085e+012
+516 16 1.15074e+012
+130 96 1.15065e+012
+148 88 1.15044e+012
+347 239 1.14986e+012
+56 253 1.14865e+012
+310 6 1.14833e+012
+117 426 1.14771e+012
+561 475 1.14686e+012
+125 270 1.14553e+012
+193 312 1.14389e+012
+328 181 1.14229e+012
+148 130 1.14194e+012
+201 163 1.14076e+012
+212 15 1.13991e+012
+101 28 1.13961e+012
+191 350 1.13952e+012
+468 202 1.13871e+012
+388 96 1.13838e+012
+272 170 1.13775e+012
+305 53 1.13733e+012
+110 2 1.1373e+012
+166 150 1.13701e+012
+132 237 1.13404e+012
+267 144 1.13373e+012
+354 269 1.13372e+012
+155 57 1.13007e+012
+195 167 1.13007e+012
+381 181 1.12999e+012
+199 132 1.12886e+012
+299 332 1.12841e+012
+49 62 1.12832e+012
+534 160 1.12829e+012
+472 23 1.12677e+012
+248 293 1.12673e+012
+26 131 1.12406e+012
+527 344 1.12322e+012
+306 192 1.12314e+012
+478 403 1.12306e+012
+341 39 1.12246e+012
+349 125 1.12006e+012
+123 126 1.11835e+012
+299 296 1.1178e+012
+1 383 1.11675e+012
+126 219 1.11624e+012
+509 179 1.11538e+012
+448 127 1.1153e+012
+449 24 1.11474e+012
+537 122 1.11472e+012
+277 198 1.11433e+012
+115 131 1.11147e+012
+201 88 1.11102e+012
+23 201 1.11099e+012
+193 218 1.11038e+012
+261 71 1.11037e+012
+298 398 1.10968e+012
+237 130 1.10856e+012
+538 406 1.10795e+012
+153 131 1.10713e+012
+355 254 1.1062e+012
+264 389 1.10559e+012
+53 62 1.10429e+012
+534 79 1.10261e+012
+302 160 1.10209e+012
+573 124 1.10158e+012
+486 139 1.10106e+012
+539 101 1.09969e+012
+325 341 1.09892e+012
+12 81 1.09832e+012
+178 262 1.09772e+012
+257 202 1.09711e+012
+189 2 1.09684e+012
+319 386 1.09606e+012
+392 17 1.09587e+012
+210 35 1.09581e+012
+408 26 1.09379e+012
+269 58 1.09188e+012
+398 143 1.09014e+012
+297 72 1.08825e+012
+446 351 1.08651e+012
+33 219 1.08631e+012
+163 201 1.08227e+012
+196 111 1.082e+012
+163 150 1.08193e+012
+265 74 1.08159e+012
+524 190 1.08158e+012
+429 44 1.08065e+012
+381 88 1.07946e+012
+542 95 1.07848e+012
+345 297 1.07835e+012
+374 76 1.07822e+012
+118 77 1.0776e+012
+270 91 1.07718e+012
+261 391 1.0761e+012
+572 405 1.07498e+012
+477 341 1.07419e+012
+322 426 1.0739e+012
+130 428 1.07279e+012
+219 110 1.07249e+012
+223 87 1.07246e+012
+96 423 1.07184e+012
+271 108 1.07177e+012
+4 154 1.0705e+012
+277 110 1.06999e+012
+258 88 1.06985e+012
+178 20 1.06847e+012
+220 212 1.06821e+012
+185 308 1.06762e+012
+286 220 1.0674e+012
+353 334 1.06537e+012
+80 195 1.06497e+012
+523 79 1.06441e+012
+370 300 1.0632e+012
+506 361 1.06268e+012
+445 118 1.06138e+012
+362 407 1.05895e+012
+415 98 1.05872e+012
+107 429 1.05857e+012
+38 270 1.0575e+012
+540 182 1.05559e+012
+317 103 1.0551e+012
+335 369 1.05425e+012
+573 330 1.05269e+012
+113 211 1.05219e+012
+451 6 1.05105e+012
+242 367 1.05048e+012
+408 102 1.04992e+012
+60 109 1.04992e+012
+44 98 1.04955e+012
+401 166 1.04951e+012
+451 3 1.04813e+012
+490 183 1.04769e+012
+452 103 1.04638e+012
+437 240 1.04597e+012
+545 248 1.04417e+012
+95 197 1.04378e+012
+310 446 1.04287e+012
+130 168 1.04251e+012
+449 84 1.04241e+012
+118 95 1.04191e+012
+402 144 1.0412e+012
+136 182 1.04117e+012
+321 121 1.04052e+012
+217 280 1.03846e+012
+273 316 1.03804e+012
+468 42 1.03787e+012
+57 365 1.03623e+012
+416 298 1.03547e+012
+129 112 1.03457e+012
+73 96 1.03444e+012
+592 19 1.03399e+012
+90 376 1.0324e+012
+352 163 1.03189e+012
+227 123 1.03101e+012
+237 417 1.03088e+012
+277 204 1.03077e+012
+431 89 1.02905e+012
+328 64 1.02801e+012
+557 463 1.02763e+012
+448 376 1.02701e+012
+407 430 1.02657e+012
+360 160 1.02628e+012
+259 107 1.02624e+012
+66 372 1.02568e+012
+552 78 1.02537e+012
+131 147 1.02385e+012
+307 367 1.02384e+012
+196 90 1.02344e+012
+550 57 1.02331e+012
+542 101 1.02298e+012
+185 340 1.02223e+012
+189 324 1.02201e+012
+66 276 1.02196e+012
+432 225 1.02051e+012
+449 118 1.01993e+012
+217 277 1.01939e+012
+451 438 1.01909e+012
+241 420 1.01689e+012
+578 43 1.01667e+012
+108 146 1.01645e+012
+291 262 1.01431e+012
+308 353 1.01387e+012
+13 114 1.01324e+012
+474 246 1.01237e+012
+541 127 1.01205e+012
+421 61 1.00809e+012
+586 17 1.00751e+012
+191 211 1.00694e+012
+238 366 1.00683e+012
+462 142 1.00682e+012
+399 182 1.00587e+012
+296 260 1.00541e+012
+514 262 1.00318e+012
+542 262 1.00288e+012
+449 87 1.00233e+012
+363 65 1.00199e+012
+301 133 1.00157e+012
+434 92 1.00059e+012
+340 392 1.00047e+012
+245 190 9.99561e+011
+178 57 9.98715e+011
+192 17 9.98218e+011
+386 92 9.97925e+011
+575 13 9.96573e+011
+325 15 9.95686e+011
+386 5 9.9304e+011
+186 1 9.92666e+011
+294 146 9.90898e+011
+244 293 9.89236e+011
+179 37 9.89023e+011
+72 373 9.88743e+011
+480 451 9.88459e+011
+213 163 9.88275e+011
+110 326 9.87584e+011
+150 151 9.87571e+011
+52 42 9.87519e+011
+182 201 9.87019e+011
+374 72 9.86994e+011
+57 100 9.86553e+011
+506 178 9.85495e+011
+529 35 9.85484e+011
+165 178 9.85257e+011
+459 340 9.83743e+011
+392 215 9.8369e+011
+531 120 9.83326e+011
+151 91 9.83238e+011
+229 14 9.82995e+011
+46 355 9.82591e+011
+333 241 9.81458e+011
+334 391 9.8142e+011
+413 82 9.80195e+011
+151 448 9.79969e+011
+184 132 9.7794e+011
+206 419 9.76469e+011
+483 288 9.75967e+011
+337 390 9.7589e+011
+265 249 9.74608e+011
+484 121 9.74275e+011
+343 463 9.73684e+011
+480 168 9.73166e+011
+9 46 9.71138e+011
+196 190 9.69982e+011
+136 238 9.68982e+011
+339 473 9.68675e+011
+197 194 9.67603e+011
+562 272 9.6409e+011
+199 111 9.63963e+011
+402 104 9.63476e+011
+434 379 9.62618e+011
+88 23 9.61459e+011
+348 164 9.61324e+011
+174 201 9.61315e+011
+437 280 9.60483e+011
+390 135 9.60398e+011
+333 335 9.59896e+011
+455 162 9.59391e+011
+204 127 9.57697e+011
+111 263 9.56816e+011
+373 299 9.56787e+011
+189 312 9.56556e+011
+291 335 9.55522e+011
+371 89 9.55435e+011
+210 162 9.53789e+011
+58 204 9.52588e+011
+463 224 9.50922e+011
+58 149 9.50314e+011
+360 448 9.49746e+011
+451 163 9.48501e+011
+249 260 9.48393e+011
+100 257 9.46487e+011
+174 183 9.46267e+011
+538 40 9.43065e+011
+156 305 9.42784e+011
+434 45 9.42447e+011
+382 146 9.40345e+011
+121 57 9.40223e+011
+239 219 9.40211e+011
+375 5 9.39626e+011
+345 391 9.38971e+011
+381 413 9.36354e+011
+65 211 9.36252e+011
+480 440 9.36023e+011
+91 79 9.35607e+011
+338 427 9.35238e+011
+91 60 9.34929e+011
+139 147 9.34838e+011
+273 94 9.34833e+011
+559 243 9.3475e+011
+306 447 9.34473e+011
+250 164 9.3381e+011
+145 20 9.3349e+011
+482 125 9.33184e+011
+62 148 9.32934e+011
+448 444 9.32413e+011
+371 338 9.32253e+011
+182 121 9.31931e+011
+58 170 9.30539e+011
+148 21 9.29594e+011
+295 126 9.29024e+011
+217 352 9.28568e+011
+226 91 9.28448e+011
+122 95 9.27852e+011
+54 170 9.27735e+011
+556 243 9.27296e+011
+93 93 9.26889e+011
+42 308 9.26681e+011
+253 182 9.26236e+011
+245 195 9.26232e+011
+481 292 9.25827e+011
+293 164 9.24918e+011
+38 81 9.24496e+011
+502 43 9.24356e+011
+113 94 9.22032e+011
+216 174 9.21305e+011
+63 26 9.19652e+011
+179 122 9.19621e+011
+182 96 9.19527e+011
+283 124 9.1898e+011
+547 139 9.15958e+011
+455 58 9.15051e+011
+118 218 9.13639e+011
+52 4 9.13321e+011
+218 102 9.09618e+011
+374 105 9.07076e+011
+136 136 9.0665e+011
+96 93 9.06e+011
+219 153 9.05873e+011
+43 473 9.04293e+011
+130 306 9.03378e+011
+330 213 9.03351e+011
+218 290 9.03279e+011
+55 360 9.03279e+011
+86 364 9.03118e+011
+514 380 9.02377e+011
+332 355 9.01988e+011
+138 311 9.00924e+011
+188 307 9.00076e+011
+315 238 8.99511e+011
+10 32 8.99502e+011
+531 266 8.99417e+011
+434 382 8.99321e+011
+573 421 8.99131e+011
+306 359 8.9823e+011
+529 177 8.98003e+011
+170 149 8.97926e+011
+190 132 8.96583e+011
+232 150 8.95981e+011
+97 363 8.95573e+011
+399 106 8.95312e+011
+284 240 8.94297e+011
+211 135 8.93794e+011
+488 340 8.9365e+011
+201 345 8.92512e+011
+526 383 8.92233e+011
+72 166 8.92186e+011
+211 138 8.92166e+011
+450 198 8.91228e+011
+277 201 8.9105e+011
+555 303 8.91016e+011
+195 75 8.90795e+011
+270 103 8.90595e+011
+279 387 8.88771e+011
+302 243 8.87982e+011
+105 360 8.87813e+011
+65 6 8.86464e+011
+173 119 8.86354e+011
+235 220 8.86131e+011
+413 298 8.85304e+011
+578 56 8.84484e+011
+360 362 8.84177e+011
+87 311 8.83799e+011
+222 125 8.83769e+011
+408 143 8.82829e+011
+281 204 8.81473e+011
+227 72 8.81266e+011
+406 99 8.79503e+011
+110 110 8.79489e+011
+534 96 8.78198e+011
+377 128 8.78058e+011
+390 204 8.77923e+011
+112 174 8.77873e+011
+358 244 8.76631e+011
+377 182 8.76405e+011
+400 199 8.76134e+011
+91 276 8.76022e+011
+30 256 8.7555e+011
+281 33 8.75058e+011
+245 213 8.74855e+011
+11 78 8.74208e+011
+433 280 8.73989e+011
+390 335 8.73758e+011
+196 146 8.73545e+011
+87 288 8.73319e+011
+433 277 8.72554e+011
+569 422 8.72078e+011
+391 118 8.692e+011
+169 182 8.69169e+011
+290 311 8.68704e+011
+402 220 8.68135e+011
+107 109 8.6806e+011
+214 451 8.67715e+011
+258 368 8.6746e+011
+88 372 8.6676e+011
+259 328 8.66575e+011
+333 415 8.66057e+011
+41 182 8.6556e+011
+237 420 8.65339e+011
+302 442 8.63386e+011
+386 282 8.6314e+011
+77 129 8.62934e+011
+133 136 8.62487e+011
+294 311 8.62141e+011
+569 382 8.61697e+011
+303 294 8.61562e+011
+178 183 8.59661e+011
+450 416 8.58991e+011
+75 374 8.57745e+011
+37 202 8.57651e+011
+123 114 8.57526e+011
+229 150 8.57524e+011
+224 51 8.55069e+011
+120 447 8.53083e+011
+84 215 8.52086e+011
+295 335 8.51983e+011
+47 162 8.51876e+011
+452 62 8.51812e+011
+479 11 8.51399e+011
+184 311 8.51223e+011
+290 183 8.50612e+011
+442 97 8.50447e+011
+269 416 8.50237e+011
+310 265 8.48894e+011
+222 102 8.48657e+011
+492 180 8.48406e+011
+217 204 8.48331e+011
+335 218 8.47922e+011
+57 368 8.47269e+011
+97 28 8.4661e+011
+280 124 8.46274e+011
+412 416 8.4591e+011
+484 142 8.456e+011
+323 29 8.45388e+011
+89 340 8.45131e+011
+44 339 8.41545e+011
+522 426 8.41542e+011
+444 452 8.41237e+011
+545 244 8.40632e+011
+453 119 8.39488e+011
+295 140 8.38535e+011
+365 86 8.38407e+011
+489 118 8.38325e+011
+57 39 8.38231e+011
+165 361 8.38082e+011
+200 30 8.37771e+011
+284 121 8.35493e+011
+495 100 8.34601e+011
+104 306 8.34265e+011
+495 474 8.33173e+011
+188 301 8.33083e+011
+445 204 8.32292e+011
+218 423 8.32239e+011
+181 312 8.30077e+011
+463 341 8.29407e+011
+545 252 8.29055e+011
+72 187 8.2849e+011
+345 140 8.28035e+011
+461 121 8.27796e+011
+500 102 8.27158e+011
+179 344 8.26442e+011
+434 82 8.26094e+011
+96 22 8.25945e+011
+405 104 8.25331e+011
+536 260 8.23957e+011
+561 142 8.23835e+011
+354 15 8.23414e+011
+256 107 8.22424e+011
+390 130 8.21202e+011
+532 344 8.20519e+011
+524 399 8.19817e+011
+250 154 8.19614e+011
+119 110 8.19233e+011
+464 115 8.19028e+011
+155 299 8.18212e+011
+314 446 8.17921e+011
+157 171 8.16739e+011
+370 465 8.16502e+011
+63 152 8.16397e+011
+301 145 8.15974e+011
+242 219 8.14992e+011
+264 309 8.14549e+011
+416 244 8.14019e+011
+425 201 8.13829e+011
+361 244 8.13411e+011
+104 257 8.12755e+011
+188 304 8.12067e+011
+529 270 8.11675e+011
+355 105 8.11249e+011
+407 14 8.11185e+011
+151 94 8.09772e+011
+559 271 8.09372e+011
+147 196 8.08814e+011
+580 343 8.08338e+011
+457 121 8.08119e+011
+563 71 8.07455e+011
+558 79 8.06784e+011
+560 464 8.0675e+011
+385 258 8.06502e+011
+396 138 8.06338e+011
+334 10 8.06055e+011
+318 30 8.05552e+011
+60 43 8.05488e+011
+566 145 8.05333e+011
+489 121 8.05293e+011
+158 310 8.05022e+011
+413 247 8.04838e+011
+88 207 8.04597e+011
+359 50 8.04321e+011
+483 371 8.04228e+011
+359 53 8.03693e+011
+91 20 8.03436e+011
+336 443 8.02654e+011
+411 263 8.02392e+011
+359 178 8.01935e+011
+291 146 7.99906e+011
+516 162 7.99823e+011
+326 138 7.97533e+011
+375 463 7.9748e+011
+235 150 7.97388e+011
+111 358 7.97027e+011
+125 306 7.96944e+011
+398 220 7.96519e+011
+301 130 7.96298e+011
+572 451 7.96241e+011
+204 394 7.96037e+011
+119 161 7.95829e+011
+378 342 7.95664e+011
+337 334 7.9565e+011
+357 282 7.95397e+011
+352 426 7.95246e+011
+493 340 7.95121e+011
+576 134 7.94946e+011
+111 338 7.94814e+011
+348 87 7.93797e+011
+349 297 7.93346e+011
+48 236 7.93139e+011
+483 47 7.91572e+011
+393 10 7.90909e+011
+386 335 7.90802e+011
+110 323 7.90582e+011
+509 58 7.88677e+011
+149 199 7.88341e+011
+93 387 7.88296e+011
+121 180 7.87606e+011
+174 122 7.87307e+011
+555 201 7.87216e+011
+437 45 7.86351e+011
+107 304 7.8598e+011
+388 419 7.85637e+011
+535 342 7.85322e+011
+160 61 7.85037e+011
+421 290 7.82787e+011
+85 38 7.82627e+011
+69 338 7.82345e+011
+468 208 7.81719e+011
+386 24 7.81521e+011
+245 180 7.80928e+011
+56 303 7.80846e+011
+247 107 7.80379e+011
+185 167 7.80077e+011
+50 167 7.79827e+011
+434 240 7.79756e+011
+86 339 7.79616e+011
+80 234 7.79039e+011
+299 256 7.78799e+011
+213 94 7.78561e+011
+72 408 7.78136e+011
+115 359 7.77796e+011
+470 117 7.7733e+011
+183 381 7.75872e+011
+357 66 7.75581e+011
+158 258 7.75503e+011
+527 399 7.75266e+011
+330 216 7.74647e+011
+479 44 7.73369e+011
+178 329 7.72524e+011
+397 46 7.72317e+011
+106 166 7.72044e+011
+163 118 7.71212e+011
+592 105 7.71092e+011
+149 40 7.70991e+011
+279 164 7.70369e+011
+566 18 7.68188e+011
+445 166 7.68183e+011
+342 466 7.66772e+011
+150 134 7.66296e+011
+436 277 7.66051e+011
+345 200 7.64697e+011
+298 88 7.64197e+011
+526 79 7.63892e+011
+435 62 7.63298e+011
+291 139 7.62616e+011
+543 440 7.62509e+011
+248 326 7.62397e+011
+401 271 7.62361e+011
+282 418 7.61567e+011
+174 291 7.61193e+011
+268 219 7.61163e+011
+426 103 7.60733e+011
+327 102 7.60585e+011
+210 423 7.59668e+011
+163 34 7.5845e+011
+172 416 7.58106e+011
+455 360 7.57999e+011
+247 418 7.57736e+011
+511 134 7.57313e+011
+329 322 7.57283e+011
+515 376 7.56366e+011
+285 32 7.56053e+011
+164 350 7.55651e+011
+219 314 7.5475e+011
+311 221 7.54572e+011
+354 265 7.54136e+011
+329 25 7.53971e+011
+135 322 7.53844e+011
+369 92 7.53549e+011
+454 438 7.52909e+011
+84 110 7.51289e+011
+353 297 7.51172e+011
+152 303 7.50322e+011
+343 260 7.50061e+011
+253 9 7.49199e+011
+584 140 7.48737e+011
+248 346 7.48518e+011
+58 371 7.48502e+011
+284 399 7.48283e+011
+8 114 7.48058e+011
+380 128 7.47754e+011
+90 95 7.47671e+011
+318 187 7.47427e+011
+64 424 7.46445e+011
+123 110 7.46121e+011
+160 57 7.4487e+011
+332 29 7.43873e+011
+346 372 7.43665e+011
+281 36 7.42761e+011
+451 123 7.42752e+011
+105 201 7.42601e+011
+528 30 7.42138e+011
+18 342 7.4175e+011
+3 234 7.41686e+011
+223 239 7.41493e+011
+189 290 7.40751e+011
+391 53 7.40733e+011
+168 179 7.3953e+011
+107 338 7.35357e+011
+153 192 7.34121e+011
+366 245 7.34078e+011
+41 339 7.34077e+011
+277 210 7.33183e+011
+81 101 7.32775e+011
+386 65 7.32679e+011
+363 449 7.32517e+011
+357 63 7.3211e+011
+74 61 7.32008e+011
+132 394 7.31592e+011
+120 118 7.3101e+011
+69 335 7.30462e+011
+173 148 7.30408e+011
+186 376 7.2934e+011
+16 116 7.2863e+011
+325 133 7.2804e+011
+573 57 7.27747e+011
+405 10 7.27553e+011
+416 470 7.26563e+011
+116 58 7.26112e+011
+345 333 7.25944e+011
+84 100 7.25498e+011
+43 408 7.24471e+011
+583 39 7.24076e+011
+400 427 7.2376e+011
+91 285 7.23065e+011
+282 442 7.22815e+011
+47 288 7.22811e+011
+389 201 7.22713e+011
+312 261 7.21395e+011
+76 110 7.20989e+011
+287 442 7.20558e+011
+22 48 7.2051e+011
+376 224 7.20378e+011
+526 177 7.18995e+011
+78 199 7.18846e+011
+117 61 7.18786e+011
+579 140 7.18158e+011
+215 289 7.18005e+011
+332 180 7.17718e+011
+519 162 7.17618e+011
+229 147 7.17441e+011
+479 286 7.16354e+011
+52 451 7.15572e+011
+165 308 7.15399e+011
+465 162 7.12915e+011
+505 380 7.12884e+011
+497 282 7.12101e+011
+7 16 7.11726e+011
+289 118 7.1171e+011
+296 200 7.11182e+011
+427 142 7.09743e+011
+12 421 7.09176e+011
+389 88 7.08942e+011
+200 145 7.08368e+011
+66 306 7.06967e+011
+520 165 7.06181e+011
+343 312 7.06104e+011
+143 177 7.0521e+011
+335 437 7.05097e+011
+199 76 7.04593e+011
+342 196 7.04332e+011
+450 324 7.04252e+011
+541 381 7.03656e+011
+86 377 7.03588e+011
+342 316 7.03197e+011
+162 38 7.02867e+011
+341 297 7.02624e+011
+327 319 7.02478e+011
+122 82 7.0171e+011
+318 99 7.01256e+011
+38 26 7.01051e+011
+420 363 6.99772e+011
+566 180 6.98935e+011
+183 237 6.98532e+011
+508 254 6.97155e+011
+562 243 6.96974e+011
+190 357 6.96883e+011
+122 169 6.96345e+011
+525 277 6.95941e+011
+403 430 6.9582e+011
+430 81 6.95658e+011
+95 39 6.94379e+011
+59 166 6.9332e+011
+260 274 6.93288e+011
+260 457 6.92431e+011
+158 101 6.91984e+011
+490 458 6.90766e+011
+581 56 6.90722e+011
+394 242 6.90532e+011
+326 28 6.9025e+011
+105 161 6.88671e+011
+27 118 6.88585e+011
+479 283 6.88479e+011
+204 256 6.88366e+011
+518 142 6.86956e+011
+593 101 6.86696e+011
+249 256 6.86596e+011
+110 76 6.86535e+011
+542 443 6.8634e+011
+340 442 6.85789e+011
+6 234 6.85247e+011
+69 257 6.8501e+011
+507 42 6.84607e+011
+55 333 6.84427e+011
+248 182 6.83263e+011
+125 216 6.83177e+011
+272 207 6.82804e+011
+360 444 6.82526e+011
+118 180 6.82519e+011
+84 95 6.818e+011
+42 122 6.814e+011
+455 141 6.80495e+011
+114 182 6.79529e+011
+92 340 6.78092e+011
+272 204 6.77975e+011
+449 285 6.7675e+011
+65 11 6.76736e+011
+276 320 6.76234e+011
+278 73 6.7582e+011
+424 174 6.7537e+011
+580 216 6.75259e+011
+44 253 6.74063e+011
+502 122 6.73839e+011
+421 297 6.73474e+011
+144 142 6.73392e+011
+292 51 6.73322e+011
+451 359 6.72685e+011
+59 105 6.7266e+011
+9 233 6.72321e+011
+117 290 6.71782e+011
+440 379 6.70796e+011
+173 343 6.7072e+011
+356 50 6.70456e+011
+532 173 6.70233e+011
+379 453 6.69455e+011
+264 259 6.69305e+011
+509 300 6.68747e+011
+186 290 6.68518e+011
+155 316 6.67773e+011
+38 113 6.67726e+011
+322 11 6.67674e+011
+245 257 6.67463e+011
+478 125 6.66918e+011
+192 186 6.6563e+011
+146 139 6.65063e+011
+302 408 6.64831e+011
+545 82 6.64234e+011
+233 31 6.63532e+011
+4 164 6.6329e+011
+471 212 6.63288e+011
+17 434 6.6293e+011
+466 5 6.6242e+011
+323 186 6.61277e+011
+409 108 6.60145e+011
+555 79 6.59623e+011
+569 181 6.59257e+011
+520 97 6.59083e+011
+115 277 6.59082e+011
+346 117 6.58809e+011
+385 356 6.57936e+011
+125 327 6.57469e+011
+44 138 6.57367e+011
+501 420 6.57193e+011
+244 103 6.56916e+011
+546 439 6.56239e+011
+438 469 6.55835e+011
+94 19 6.55312e+011
+538 222 6.55294e+011
+498 342 6.55253e+011
+394 104 6.54193e+011
+361 139 6.53727e+011
+405 108 6.53701e+011
+355 449 6.52333e+011
+433 155 6.52135e+011
+336 144 6.51524e+011
+188 265 6.51287e+011
+330 136 6.5034e+011
+276 124 6.50204e+011
+430 62 6.50129e+011
+600 365 6.49877e+011
+140 239 6.49751e+011
+401 126 6.49116e+011
+296 269 6.48798e+011
+463 3 6.48005e+011
+68 419 6.47763e+011
+99 96 6.47734e+011
+560 266 6.47203e+011
+66 203 6.46724e+011
+449 176 6.46541e+011
+263 284 6.45479e+011
+126 132 6.4544e+011
+197 344 6.45136e+011
+121 147 6.44445e+011
+572 446 6.43828e+011
+152 57 6.42939e+011
+243 134 6.42738e+011
+44 88 6.42682e+011
+232 133 6.4257e+011
+262 397 6.42027e+011
+252 86 6.41914e+011
+154 445 6.41703e+011
+52 146 6.41073e+011
+178 201 6.40404e+011
+455 61 6.4036e+011
+547 281 6.39215e+011
+208 405 6.39195e+011
+292 200 6.39174e+011
+121 216 6.38846e+011
+544 259 6.38437e+011
+147 136 6.38279e+011
+163 431 6.37963e+011
+214 400 6.37703e+011
+160 33 6.37578e+011
+125 341 6.3706e+011
+512 113 6.37055e+011
+318 202 6.36391e+011
+400 27 6.36332e+011
+533 339 6.36259e+011
+315 9 6.35942e+011
+418 448 6.35889e+011
+576 166 6.35758e+011
+158 313 6.35011e+011
+71 251 6.33564e+011
+419 412 6.33502e+011
+191 239 6.31775e+011
+206 415 6.31733e+011
+522 361 6.31534e+011
+342 43 6.31207e+011
+402 44 6.30888e+011
+184 116 6.3011e+011
+205 403 6.30105e+011
+419 95 6.29356e+011
+83 170 6.28493e+011
+266 418 6.28089e+011
+497 359 6.27805e+011
+468 100 6.27374e+011
+329 99 6.26943e+011
+323 136 6.26233e+011
+51 229 6.25718e+011
+264 304 6.24659e+011
+194 239 6.24654e+011
+514 259 6.23554e+011
+26 44 6.23398e+011
+497 362 6.23005e+011
+64 313 6.21569e+011
+546 340 6.21091e+011
+101 296 6.20832e+011
+231 364 6.20643e+011
+352 448 6.20441e+011
+181 240 6.19773e+011
+277 33 6.19616e+011
+48 407 6.19532e+011
+50 375 6.19291e+011
+375 156 6.18712e+011
+170 124 6.18541e+011
+154 295 6.18288e+011
+242 281 6.18269e+011
+105 432 6.17738e+011
+209 125 6.16495e+011
+405 41 6.15621e+011
+130 411 6.1444e+011
+200 391 6.14308e+011
+88 389 6.13262e+011
+278 88 6.12629e+011
+85 239 6.12271e+011
+433 295 6.12134e+011
+377 145 6.11743e+011
+414 222 6.11701e+011
+183 316 6.11643e+011
+266 20 6.10636e+011
+130 477 6.10457e+011
+402 6 6.10275e+011
+240 147 6.09918e+011
+92 367 6.0957e+011
+32 45 6.09421e+011
+117 306 6.09384e+011
+498 462 6.08247e+011
+337 29 6.07232e+011
+311 299 6.06395e+011
+508 441 6.0628e+011
+448 62 6.05939e+011
+309 54 6.05551e+011
+114 163 6.052e+011
+85 234 6.05078e+011
+349 448 6.04947e+011
+190 255 6.04703e+011
+170 451 6.0419e+011
+26 49 6.03971e+011
+481 456 6.03738e+011
+20 286 6.03682e+011
+483 241 6.02539e+011
+515 325 6.02486e+011
+423 204 6.02473e+011
+88 232 6.02138e+011
+159 431 6.02134e+011
+242 108 6.01689e+011
+20 317 6.00533e+011
+315 127 6.00014e+011
+336 49 5.99934e+011
+389 450 5.99908e+011
+373 101 5.99873e+011
+349 333 5.99829e+011
+199 327 5.98548e+011
+529 137 5.98328e+011
+130 374 5.98163e+011
+281 261 5.98151e+011
+166 380 5.97985e+011
+81 406 5.9776e+011
+406 96 5.97642e+011
+198 198 5.9755e+011
+413 144 5.97243e+011
+41 287 5.96885e+011
+254 191 5.96778e+011
+368 30 5.96704e+011
+13 434 5.96075e+011
+377 101 5.95937e+011
+195 199 5.95403e+011
+139 136 5.95308e+011
+124 412 5.9516e+011
+438 466 5.95064e+011
+337 259 5.94721e+011
+478 143 5.94545e+011
+142 429 5.94445e+011
+207 133 5.93417e+011
+186 238 5.93366e+011
+210 94 5.91703e+011
+510 376 5.91282e+011
+256 157 5.91175e+011
+586 346 5.91088e+011
+364 443 5.90286e+011
+63 287 5.89857e+011
+373 150 5.89344e+011
+473 102 5.89152e+011
+428 163 5.88866e+011
+186 349 5.88442e+011
+131 187 5.88139e+011
+117 263 5.88075e+011
+68 303 5.8784e+011
+258 133 5.87799e+011
+195 212 5.87788e+011
+95 285 5.87609e+011
+124 148 5.86454e+011
+542 80 5.8622e+011
+205 399 5.85725e+011
+440 83 5.85218e+011
+239 243 5.84767e+011
+114 252 5.84553e+011
+485 238 5.84258e+011
+47 203 5.84116e+011
+579 245 5.84085e+011
+103 428 5.83976e+011
+575 459 5.83865e+011
+102 338 5.83437e+011
+168 416 5.83141e+011
+441 454 5.82595e+011
+277 426 5.8179e+011
+207 91 5.81295e+011
+53 375 5.80934e+011
+232 155 5.80536e+011
+282 215 5.80053e+011
+137 124 5.79765e+011
+81 375 5.79675e+011
+579 309 5.79674e+011
+181 155 5.79629e+011
+302 404 5.7939e+011
+104 232 5.78696e+011
+112 307 5.78574e+011
+141 117 5.78296e+011
+519 361 5.7819e+011
+571 327 5.77208e+011
+157 225 5.77135e+011
+213 204 5.76443e+011
+34 164 5.76336e+011
+523 165 5.75859e+011
+189 316 5.75691e+011
+337 64 5.75397e+011
+333 433 5.75223e+011
+174 130 5.75212e+011
+114 262 5.75186e+011
+535 173 5.74715e+011
+72 184 5.73794e+011
+185 72 5.73761e+011
+426 106 5.73697e+011
+35 45 5.73652e+011
+194 292 5.73513e+011
+382 47 5.72885e+011
+552 19 5.72476e+011
+585 309 5.72427e+011
+389 85 5.72033e+011
+193 307 5.71866e+011
+25 255 5.7144e+011
+319 96 5.71103e+011
+17 237 5.70701e+011
+195 254 5.70214e+011
+1 10 5.68308e+011
+304 332 5.67801e+011
+317 184 5.67768e+011
+410 221 5.67509e+011
+374 451 5.66772e+011
+415 412 5.65281e+011
+164 434 5.64344e+011
+518 83 5.64265e+011
+217 169 5.63759e+011
+154 188 5.63602e+011
+416 415 5.6348e+011
+442 320 5.63307e+011
+397 120 5.63294e+011
+75 408 5.63177e+011
+283 84 5.62557e+011
+100 426 5.62344e+011
+509 12 5.62304e+011
+11 478 5.62084e+011
+434 25 5.61926e+011
+512 210 5.60228e+011
+218 237 5.59823e+011
+181 74 5.5934e+011
+289 199 5.59263e+011
+413 284 5.58592e+011
+567 201 5.58061e+011
+94 124 5.57719e+011
+472 82 5.57486e+011
+62 441 5.57365e+011
+349 121 5.56876e+011
+245 184 5.56568e+011
+217 400 5.56475e+011
+414 219 5.56361e+011
+330 286 5.56e+011
+447 180 5.55223e+011
+447 132 5.55207e+011
+226 202 5.55133e+011
+133 411 5.54855e+011
+38 23 5.54325e+011
+330 61 5.5391e+011
+357 249 5.53574e+011
+448 448 5.53222e+011
+92 320 5.52935e+011
+63 365 5.52813e+011
+389 2 5.52338e+011
+475 451 5.5224e+011
+407 77 5.51566e+011
+462 183 5.51368e+011
+84 107 5.51352e+011
+150 137 5.51301e+011
+394 182 5.50266e+011
+142 284 5.50209e+011
+9 475 5.48956e+011
+485 202 5.48842e+011
+218 94 5.48726e+011
+509 283 5.48645e+011
+512 50 5.48245e+011
+185 119 5.47261e+011
+35 337 5.46865e+011
+37 292 5.46476e+011
+175 142 5.46379e+011
+190 71 5.4521e+011
+297 130 5.45099e+011
+326 345 5.44744e+011
+545 86 5.44734e+011
+54 234 5.44598e+011
+9 69 5.44573e+011
+89 354 5.44515e+011
+562 39 5.44214e+011
+331 282 5.4407e+011
+4 32 5.43681e+011
+172 326 5.43479e+011
+385 247 5.43376e+011
+552 303 5.43242e+011
+365 165 5.43118e+011
+469 103 5.43042e+011
+70 61 5.42786e+011
+313 130 5.42317e+011
+220 286 5.41567e+011
+142 99 5.4131e+011
+299 406 5.41169e+011
+243 130 5.41095e+011
+49 335 5.41065e+011
+587 161 5.40655e+011
+419 415 5.40464e+011
+548 265 5.40234e+011
+204 148 5.3929e+011
+509 380 5.38472e+011
+205 33 5.38327e+011
+92 280 5.38225e+011
+347 128 5.38128e+011
+267 261 5.37913e+011
+338 220 5.37885e+011
+138 319 5.37807e+011
+202 366 5.37681e+011
+306 259 5.37489e+011
+283 332 5.37488e+011
+328 51 5.36961e+011
+127 412 5.36318e+011
+159 176 5.36097e+011
+206 38 5.36024e+011
+527 437 5.34945e+011
+202 404 5.34853e+011
+256 458 5.34545e+011
+378 158 5.34296e+011
+187 256 5.33787e+011
+185 161 5.33413e+011
+301 66 5.33265e+011
+568 324 5.32144e+011
+519 242 5.32042e+011
+266 399 5.31633e+011
+563 154 5.31051e+011
+176 151 5.30602e+011
+147 191 5.30532e+011
+497 242 5.3034e+011
+461 304 5.29541e+011
+515 400 5.2884e+011
+1 378 5.27146e+011
+285 81 5.27052e+011
+192 344 5.26391e+011
+48 338 5.26038e+011
+33 37 5.25563e+011
+209 317 5.25438e+011
+266 186 5.24756e+011
+376 281 5.24491e+011
+383 451 5.24373e+011
+541 244 5.24079e+011
+180 292 5.23719e+011
+477 280 5.23639e+011
+114 205 5.22784e+011
+295 150 5.22441e+011
+531 112 5.22405e+011
+352 365 5.22067e+011
+57 233 5.21934e+011
+565 464 5.21665e+011
+226 162 5.21597e+011
+64 207 5.21231e+011
+77 165 5.205e+011
+264 89 5.19542e+011
+478 377 5.19301e+011
+571 459 5.18669e+011
+207 236 5.18614e+011
+48 422 5.17061e+011
+268 119 5.16543e+011
+63 44 5.1651e+011
+458 115 5.1605e+011
+49 225 5.15673e+011
+469 163 5.15371e+011
+445 247 5.14862e+011
+286 246 5.14148e+011
+488 301 5.1401e+011
+191 420 5.13626e+011
+470 433 5.13426e+011
+475 380 5.13059e+011
+101 185 5.13021e+011
+46 92 5.12927e+011
+95 42 5.12816e+011
+152 215 5.12772e+011
+181 259 5.12488e+011
+147 255 5.1238e+011
+576 327 5.12305e+011
+135 61 5.11957e+011
+269 413 5.113e+011
+5 198 5.11144e+011
+239 215 5.10908e+011
+18 274 5.10364e+011
+263 453 5.10088e+011
+94 371 5.09869e+011
+199 96 5.09863e+011
+31 40 5.09799e+011
+571 239 5.09636e+011
+273 176 5.09355e+011
+292 110 5.09228e+011
+538 178 5.08367e+011
+308 164 5.07683e+011
+272 253 5.07588e+011
+29 37 5.07552e+011
+144 145 5.07525e+011
+159 434 5.07512e+011
+432 270 5.06105e+011
+43 250 5.06097e+011
+319 125 5.0562e+011
+444 341 5.05143e+011
+136 187 5.05131e+011
+279 237 5.03778e+011
+315 234 5.03259e+011
+97 366 5.03121e+011
+567 271 5.03012e+011
+133 64 5.01691e+011
+437 228 5.01602e+011
+105 227 5.01484e+011
+258 130 5.0048e+011
+324 351 5.00332e+011
+544 265 4.99794e+011
+230 332 4.99793e+011
+449 90 4.99613e+011
+155 229 4.98263e+011
+469 5 4.97806e+011
+30 79 4.97518e+011
+488 135 4.97312e+011
+223 384 4.96719e+011
+567 248 4.96653e+011
+451 181 4.95874e+011
+291 439 4.9585e+011
+89 113 4.95845e+011
+255 406 4.9546e+011
+439 319 4.9487e+011
+253 435 4.94853e+011
+214 404 4.94553e+011
+120 304 4.94519e+011
+100 232 4.94438e+011
+223 162 4.94422e+011
+493 469 4.94323e+011
+126 237 4.94313e+011
+541 177 4.9422e+011
+39 314 4.9411e+011
+467 109 4.94071e+011
+488 54 4.93754e+011
+354 64 4.9347e+011
+27 188 4.93341e+011
+463 84 4.93203e+011
+29 169 4.92833e+011
+474 162 4.92803e+011
+589 309 4.92738e+011
+163 104 4.92722e+011
+489 469 4.92545e+011
+327 352 4.92513e+011
+20 119 4.91807e+011
+122 341 4.91587e+011
+144 41 4.91496e+011
+148 96 4.91185e+011
+296 256 4.90662e+011
+485 235 4.90402e+011
+274 121 4.90093e+011
+281 78 4.89196e+011
+198 466 4.89001e+011
+84 357 4.88921e+011
+242 245 4.88586e+011
+69 377 4.88566e+011
+148 326 4.88565e+011
+67 208 4.88343e+011
+250 246 4.88147e+011
+400 130 4.8805e+011
+349 367 4.88041e+011
+108 161 4.87901e+011
+343 29 4.87386e+011
+398 269 4.87369e+011
+112 427 4.87292e+011
+215 316 4.87272e+011
+75 199 4.86737e+011
+200 8 4.86439e+011
+298 91 4.86183e+011
+399 93 4.8595e+011
+51 39 4.85897e+011
+178 154 4.85659e+011
+307 129 4.85601e+011
+226 364 4.85376e+011
+442 87 4.84785e+011
+134 311 4.84365e+011
+188 260 4.83482e+011
+313 423 4.8277e+011
+552 119 4.82647e+011
+403 115 4.82646e+011
+281 312 4.82088e+011
+54 352 4.8156e+011
+296 439 4.8078e+011
+512 294 4.80663e+011
+355 19 4.79859e+011
+44 287 4.79045e+011
+245 176 4.7898e+011
+349 106 4.7818e+011
+146 235 4.78171e+011
+580 327 4.77975e+011
+82 239 4.77835e+011
+157 23 4.77749e+011
+399 297 4.77737e+011
+344 87 4.77705e+011
+221 165 4.77489e+011
+264 109 4.7734e+011
+483 221 4.7732e+011
+89 320 4.77206e+011
+292 373 4.76935e+011
+159 104 4.76911e+011
+178 220 4.76806e+011
+71 389 4.76599e+011
+213 326 4.76556e+011
+574 8 4.76403e+011
+238 294 4.7568e+011
+98 457 4.75037e+011
+469 2 4.74956e+011
+468 301 4.7406e+011
+590 347 4.73631e+011
+27 438 4.73575e+011
+446 437 4.73381e+011
+464 106 4.73144e+011
+210 326 4.72932e+011
+232 270 4.72626e+011
+67 313 4.72491e+011
+174 378 4.72469e+011
+486 224 4.72278e+011
+475 455 4.72195e+011
+268 137 4.72081e+011
+14 236 4.71966e+011
+95 282 4.71818e+011
+335 280 4.71738e+011
+186 321 4.70899e+011
+33 79 4.70643e+011
+471 269 4.70581e+011
+146 343 4.70523e+011
+154 161 4.70518e+011
+205 28 4.70341e+011
+509 244 4.7007e+011
+138 120 4.70011e+011
+268 192 4.69705e+011
+427 145 4.69637e+011
+565 239 4.69254e+011
+343 307 4.69253e+011
+524 95 4.68656e+011
+303 252 4.68255e+011
+403 15 4.6815e+011
+396 95 4.68002e+011
+65 283 4.67988e+011
+385 118 4.67776e+011
+582 203 4.67535e+011
+276 78 4.67142e+011
+258 347 4.66501e+011
+284 312 4.66449e+011
+135 165 4.66137e+011
+41 440 4.66087e+011
+285 78 4.6595e+011
+484 155 4.65307e+011
+36 76 4.65043e+011
+300 247 4.64965e+011
+89 29 4.64642e+011
+119 167 4.63856e+011
+394 118 4.62834e+011
+200 5 4.62813e+011
+284 184 4.62616e+011
+318 426 4.61258e+011
+493 225 4.61249e+011
+206 75 4.60987e+011
+505 403 4.60267e+011
+350 275 4.59997e+011
+114 248 4.59905e+011
+86 244 4.59448e+011
+221 326 4.58848e+011
+169 3 4.58529e+011
+373 414 4.57867e+011
+231 193 4.57804e+011
+142 253 4.57543e+011
+40 253 4.57462e+011
+431 374 4.57258e+011
+235 403 4.56607e+011
+363 48 4.56006e+011
+409 279 4.55313e+011
+298 97 4.55227e+011
+248 392 4.55118e+011
+535 178 4.54989e+011
+377 468 4.53957e+011
+167 187 4.53869e+011
+104 262 4.53349e+011
+477 221 4.53143e+011
+318 461 4.52902e+011
+424 25 4.52829e+011
+211 201 4.52529e+011
+207 257 4.52453e+011
+72 413 4.52261e+011
+260 453 4.52154e+011
+384 114 4.51299e+011
+547 301 4.51111e+011
+293 398 4.50433e+011
+233 275 4.504e+011
+464 210 4.50114e+011
+327 58 4.49999e+011
+256 274 4.49791e+011
+22 26 4.49654e+011
+426 112 4.49592e+011
+565 176 4.48734e+011
+244 277 4.4835e+011
+512 370 4.48164e+011
+463 301 4.47583e+011
+395 201 4.47565e+011
+132 390 4.46932e+011
+152 255 4.46898e+011
+466 377 4.46701e+011
+142 280 4.46292e+011
+16 150 4.4612e+011
+511 323 4.45134e+011
+426 472 4.44518e+011
+400 96 4.43736e+011
+563 79 4.42647e+011
+506 242 4.42467e+011
+521 142 4.4236e+011
+196 29 4.42314e+011
+217 357 4.4228e+011
+404 26 4.4173e+011
+431 25 4.41707e+011
+241 179 4.41043e+011
+574 100 4.40965e+011
+179 266 4.40613e+011
+480 130 4.40526e+011
+94 113 4.40483e+011
+373 46 4.40246e+011
+105 391 4.40028e+011
+549 82 4.39963e+011
+213 396 4.39889e+011
+500 181 4.39886e+011
+233 406 4.39301e+011
+183 56 4.38885e+011
+154 165 4.38039e+011
+294 369 4.37738e+011
+456 182 4.37387e+011
+98 123 4.37219e+011
+524 241 4.37089e+011
+266 455 4.37083e+011
+305 298 4.36976e+011
+243 433 4.36774e+011
+344 321 4.3634e+011
+516 303 4.36162e+011
+556 366 4.35248e+011
+123 175 4.35109e+011
+144 378 4.34947e+011
+202 38 4.34717e+011
+305 256 4.34704e+011
+184 157 4.33726e+011
+68 389 4.33551e+011
+165 413 4.33171e+011
+210 443 4.33039e+011
+117 90 4.32687e+011
+202 370 4.32679e+011
+68 358 4.32656e+011
+207 260 4.3253e+011
+253 253 4.31938e+011
+68 404 4.31132e+011
+284 90 4.31013e+011
+50 203 4.30546e+011
+469 356 4.29917e+011
+41 291 4.29482e+011
+492 303 4.2891e+011
+597 59 4.28657e+011
+34 401 4.28602e+011
+98 187 4.28577e+011
+155 258 4.28349e+011
+442 44 4.28315e+011
+234 296 4.28055e+011
+458 64 4.27711e+011
+550 139 4.27438e+011
+101 292 4.26641e+011
+319 234 4.26406e+011
+97 338 4.26248e+011
+468 318 4.26232e+011
+78 99 4.26167e+011
+437 140 4.25202e+011
+132 121 4.24499e+011
+377 416 4.24473e+011
+462 187 4.24239e+011
+263 244 4.23883e+011
+247 434 4.23699e+011
+154 431 4.23421e+011
+425 411 4.23284e+011
+466 84 4.23165e+011
+37 470 4.23047e+011
+218 326 4.22956e+011
+23 236 4.213e+011
+17 246 4.21198e+011
+314 462 4.21153e+011
+71 405 4.21055e+011
+428 280 4.20741e+011
+134 67 4.20234e+011
+470 452 4.20106e+011
+463 227 4.18814e+011
+179 287 4.18612e+011
+35 389 4.18546e+011
+295 373 4.18353e+011
+564 200 4.18313e+011
+395 130 4.18083e+011
+373 94 4.17885e+011
+42 275 4.17609e+011
+214 237 4.17399e+011
+343 303 4.17029e+011
+83 115 4.15792e+011
+334 162 4.15636e+011
+574 5 4.15621e+011
+182 287 4.15536e+011
+361 89 4.15499e+011
+243 430 4.15485e+011
+334 465 4.14892e+011
+407 6 4.14796e+011
+457 240 4.14591e+011
+129 121 4.14548e+011
+310 183 4.14311e+011
+480 473 4.14231e+011
+481 101 4.13905e+011
+327 55 4.13606e+011
+247 428 4.13504e+011
+577 90 4.13421e+011
+232 113 4.13236e+011
+50 456 4.12808e+011
+505 419 4.12428e+011
+420 201 4.12413e+011
+506 156 4.12348e+011
+73 154 4.12214e+011
+160 354 4.12198e+011
+116 258 4.11687e+011
+246 149 4.11487e+011
+474 280 4.11464e+011
+122 23 4.11422e+011
+396 87 4.10826e+011
+157 39 4.09917e+011
+45 234 4.09883e+011
+299 282 4.09568e+011
+243 30 4.08237e+011
+198 363 4.07891e+011
+227 119 4.07722e+011
+14 46 4.07679e+011
+60 176 4.07355e+011
+95 408 4.06772e+011
+352 254 4.06691e+011
+247 53 4.06536e+011
+265 192 4.06227e+011
+61 453 4.06171e+011
+574 363 4.0617e+011
+439 108 4.05918e+011
+553 276 4.05407e+011
+437 295 4.05152e+011
+82 164 4.04595e+011
+142 257 4.04539e+011
+566 358 4.04404e+011
+155 153 4.03103e+011
+332 208 4.03037e+011
+199 240 4.02996e+011
+296 444 4.02786e+011
+311 136 4.02763e+011
+513 106 4.02727e+011
+238 33 4.02644e+011
+306 94 4.02342e+011
+89 38 4.0199e+011
+68 6 4.01646e+011
+354 87 4.01644e+011
+211 260 4.01379e+011
+595 33 4.01327e+011
+38 275 4.01327e+011
+148 145 4.01039e+011
+68 355 4.00921e+011
+501 242 4.00444e+011
+23 439 4.00192e+011
+511 288 4.00161e+011
+139 253 4.00032e+011
+498 320 3.99814e+011
+403 112 3.99777e+011
+128 135 3.99454e+011
+188 285 3.99266e+011
+19 26 3.99073e+011
+467 183 3.99053e+011
+602 276 3.98583e+011
+531 384 3.9834e+011
+323 96 3.9828e+011
+134 253 3.97888e+011
+77 115 3.97567e+011
+94 363 3.97043e+011
+313 441 3.97029e+011
+5 134 3.96853e+011
+589 102 3.96848e+011
+186 373 3.96672e+011
+223 399 3.96607e+011
+196 431 3.96453e+011
+206 370 3.96413e+011
+212 217 3.96346e+011
+305 238 3.95567e+011
+574 97 3.95378e+011
+113 245 3.95223e+011
+129 398 3.95188e+011
+95 357 3.95141e+011
+391 408 3.94989e+011
+415 448 3.9472e+011
+367 449 3.93822e+011
+413 433 3.93607e+011
+341 241 3.9351e+011
+230 50 3.93468e+011
+307 431 3.9295e+011
+429 411 3.92907e+011
+606 122 3.92434e+011
+544 275 3.91626e+011
+255 206 3.9159e+011
+462 64 3.91414e+011
+328 96 3.91388e+011
+377 227 3.91075e+011
+401 424 3.90998e+011
+311 101 3.90929e+011
+220 389 3.90722e+011
+285 257 3.906e+011
+552 265 3.90439e+011
+395 126 3.89709e+011
+119 240 3.89693e+011
+446 186 3.89489e+011
+499 317 3.89287e+011
+184 272 3.88955e+011
+344 187 3.88756e+011
+564 118 3.88621e+011
+378 260 3.88541e+011
+373 201 3.87936e+011
+243 357 3.87756e+011
+61 339 3.87733e+011
+142 426 3.87565e+011
+374 227 3.87472e+011
+447 289 3.87431e+011
+140 355 3.87402e+011
+553 140 3.87375e+011
+466 213 3.8735e+011
+146 415 3.86677e+011
+497 305 3.85766e+011
+11 138 3.85293e+011
+127 407 3.85195e+011
+370 316 3.85114e+011
+588 141 3.84916e+011
+27 40 3.84356e+011
+144 120 3.84235e+011
+219 396 3.83565e+011
+169 433 3.83546e+011
+70 199 3.82956e+011
+452 93 3.82814e+011
+521 92 3.82457e+011
+436 458 3.82339e+011
+36 255 3.82333e+011
+293 401 3.82291e+011
+505 104 3.81649e+011
+418 376 3.81594e+011
+305 66 3.81573e+011
+64 453 3.80737e+011
+330 329 3.80737e+011
+472 357 3.80375e+011
+6 300 3.80264e+011
+247 277 3.79725e+011
+471 216 3.79096e+011
+120 90 3.79069e+011
+365 118 3.7895e+011
+548 121 3.78711e+011
+358 89 3.78204e+011
+228 155 3.77751e+011
+558 160 3.77636e+011
+455 177 3.76616e+011
+285 338 3.76408e+011
+23 184 3.76259e+011
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_5_3.txt b/test_data/harriscorners/hc_msc_3.00_0.04_5_3.txt
new file mode 100644
index 0000000..4fa9ae7
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_5_3.txt
@@ -0,0 +1,1637 @@
+1636
+499 1 8.85626e+015
+245 94 7.79632e+015
+274 366 7.4044e+015
+363 401 6.2812e+015
+449 298 5.84133e+015
+282 115 5.33863e+015
+122 44 5.01352e+015
+553 41 4.97071e+015
+421 182 4.9305e+015
+388 178 4.57141e+015
+240 90 4.55083e+015
+507 122 4.49498e+015
+456 281 4.45432e+015
+426 320 4.41292e+015
+251 13 4.34456e+015
+447 397 4.34141e+015
+200 18 4.25439e+015
+34 138 4.25086e+015
+237 19 4.22823e+015
+535 242 4.21206e+015
+213 72 3.98506e+015
+2 47 3.96422e+015
+543 364 3.95454e+015
+423 179 3.95412e+015
+448 263 3.91894e+015
+221 16 3.85601e+015
+82 27 3.8559e+015
+321 313 3.80093e+015
+65 343 3.76516e+015
+435 68 3.72402e+015
+256 386 3.66951e+015
+135 215 3.64225e+015
+223 38 3.64116e+015
+299 52 3.63192e+015
+196 57 3.63102e+015
+344 10 3.52405e+015
+480 298 3.49708e+015
+131 36 3.48345e+015
+110 238 3.48133e+015
+45 27 3.37399e+015
+420 178 3.34079e+015
+144 309 3.32802e+015
+520 61 3.28465e+015
+320 223 3.25035e+015
+124 198 3.2467e+015
+303 183 3.20581e+015
+385 221 3.20356e+015
+471 240 3.17227e+015
+183 401 3.14552e+015
+484 23 3.08465e+015
+412 256 3.08445e+015
+412 162 3.0289e+015
+79 2 3.01929e+015
+348 179 3.01849e+015
+28 8 3.01516e+015
+173 312 2.99728e+015
+242 94 2.95178e+015
+242 203 2.9477e+015
+92 214 2.93427e+015
+407 64 2.92892e+015
+159 143 2.88926e+015
+329 127 2.86907e+015
+246 143 2.86032e+015
+271 166 2.85994e+015
+508 18 2.84962e+015
+111 241 2.81641e+015
+525 60 2.80629e+015
+130 2 2.79342e+015
+77 256 2.78079e+015
+364 297 2.75834e+015
+465 394 2.73603e+015
+184 35 2.72846e+015
+91 198 2.71993e+015
+264 440 2.68626e+015
+125 255 2.68051e+015
+37 61 2.6707e+015
+390 58 2.66331e+015
+59 219 2.64803e+015
+515 77 2.61714e+015
+361 131 2.61004e+015
+286 296 2.59294e+015
+116 43 2.59176e+015
+64 235 2.58552e+015
+387 294 2.57846e+015
+282 112 2.57616e+015
+102 4 2.57318e+015
+312 149 2.55286e+015
+361 296 2.4862e+015
+174 238 2.47139e+015
+261 297 2.45723e+015
+510 172 2.45154e+015
+482 365 2.44817e+015
+308 372 2.43899e+015
+483 339 2.42585e+015
+360 336 2.42068e+015
+253 138 2.40141e+015
+101 78 2.39868e+015
+340 9 2.38518e+015
+387 10 2.37175e+015
+125 363 2.36895e+015
+474 262 2.33713e+015
+127 76 2.33553e+015
+101 59 2.32711e+015
+426 119 2.32414e+015
+66 320 2.31873e+015
+225 221 2.31005e+015
+224 419 2.30238e+015
+228 292 2.29973e+015
+417 7 2.28259e+015
+449 219 2.28178e+015
+239 349 2.2748e+015
+355 220 2.27038e+015
+419 440 2.24988e+015
+170 19 2.23752e+015
+209 223 2.23404e+015
+425 376 2.22293e+015
+562 478 2.21442e+015
+382 8 2.21328e+015
+392 144 2.19059e+015
+250 363 2.18439e+015
+49 99 2.18376e+015
+411 355 2.1683e+015
+262 165 2.13943e+015
+378 354 2.13842e+015
+271 278 2.131e+015
+545 168 2.13006e+015
+282 403 2.11864e+015
+513 340 2.11819e+015
+212 183 2.11106e+015
+137 208 2.10896e+015
+432 146 2.09921e+015
+271 71 2.09638e+015
+112 393 2.09605e+015
+177 106 2.09252e+015
+59 185 2.084e+015
+377 7 2.0813e+015
+462 279 2.08053e+015
+510 121 2.04278e+015
+243 72 2.03376e+015
+402 122 2.03097e+015
+233 15 2.01573e+015
+72 24 2.00665e+015
+214 57 2.00418e+015
+166 96 1.99505e+015
+105 62 1.99468e+015
+498 82 1.99341e+015
+275 181 1.99334e+015
+140 203 1.98134e+015
+542 18 1.97989e+015
+233 162 1.97635e+015
+192 331 1.95503e+015
+365 7 1.95376e+015
+108 45 1.95083e+015
+88 148 1.93985e+015
+31 8 1.93809e+015
+36 269 1.93257e+015
+36 174 1.92889e+015
+211 56 1.92682e+015
+140 184 1.9251e+015
+234 72 1.91916e+015
+4 66 1.91676e+015
+216 279 1.91453e+015
+300 177 1.90891e+015
+562 147 1.90276e+015
+300 265 1.90244e+015
+69 27 1.899e+015
+294 15 1.89172e+015
+283 71 1.8865e+015
+264 298 1.88206e+015
+456 83 1.87935e+015
+35 10 1.87677e+015
+192 124 1.87474e+015
+95 446 1.87419e+015
+340 12 1.8724e+015
+158 1 1.86834e+015
+203 310 1.86756e+015
+366 144 1.86433e+015
+75 236 1.86401e+015
+138 111 1.8601e+015
+245 205 1.85787e+015
+432 112 1.85735e+015
+355 320 1.8427e+015
+545 217 1.83712e+015
+234 346 1.83684e+015
+167 287 1.83654e+015
+132 26 1.83428e+015
+71 148 1.83057e+015
+359 168 1.82777e+015
+182 111 1.82613e+015
+438 339 1.82312e+015
+296 420 1.81876e+015
+524 21 1.81758e+015
+28 236 1.81694e+015
+176 39 1.81687e+015
+406 375 1.81464e+015
+362 251 1.81331e+015
+402 261 1.80651e+015
+120 51 1.8056e+015
+526 223 1.80474e+015
+307 439 1.80472e+015
+372 163 1.80009e+015
+479 20 1.79601e+015
+38 296 1.79073e+015
+512 168 1.79007e+015
+55 31 1.78776e+015
+230 36 1.78762e+015
+527 40 1.78681e+015
+410 65 1.7842e+015
+177 260 1.77692e+015
+220 37 1.77573e+015
+343 337 1.77271e+015
+151 307 1.77123e+015
+302 206 1.77076e+015
+195 126 1.76738e+015
+141 325 1.76465e+015
+35 146 1.76166e+015
+430 1 1.75939e+015
+490 342 1.75657e+015
+41 297 1.75065e+015
+165 217 1.74772e+015
+323 223 1.74442e+015
+326 426 1.74169e+015
+100 221 1.74036e+015
+210 445 1.7341e+015
+528 361 1.7312e+015
+455 3 1.72977e+015
+273 130 1.71505e+015
+163 276 1.70678e+015
+11 101 1.7065e+015
+177 93 1.705e+015
+33 98 1.70403e+015
+54 6 1.7017e+015
+512 165 1.69963e+015
+477 12 1.69808e+015
+278 352 1.69525e+015
+113 213 1.69048e+015
+304 216 1.68633e+015
+250 33 1.68506e+015
+291 16 1.68466e+015
+434 398 1.67786e+015
+136 202 1.67746e+015
+464 241 1.67422e+015
+452 337 1.67292e+015
+416 44 1.66374e+015
+503 360 1.6624e+015
+236 163 1.66004e+015
+359 260 1.65991e+015
+510 455 1.65489e+015
+46 219 1.65454e+015
+550 379 1.65447e+015
+219 291 1.65391e+015
+475 4 1.65196e+015
+489 264 1.64834e+015
+64 371 1.64763e+015
+346 392 1.64296e+015
+55 66 1.64119e+015
+239 421 1.63408e+015
+458 3 1.63237e+015
+465 197 1.62451e+015
+230 266 1.62311e+015
+86 77 1.6209e+015
+522 122 1.61501e+015
+513 223 1.61344e+015
+293 25 1.6108e+015
+422 44 1.60734e+015
+395 260 1.6063e+015
+567 161 1.60101e+015
+527 99 1.59517e+015
+263 202 1.59454e+015
+141 22 1.59006e+015
+472 63 1.58234e+015
+579 18 1.57777e+015
+65 213 1.57713e+015
+452 376 1.57031e+015
+520 183 1.56825e+015
+421 334 1.56712e+015
+443 23 1.56374e+015
+228 289 1.56146e+015
+242 97 1.56009e+015
+452 205 1.55947e+015
+204 17 1.55564e+015
+128 164 1.55427e+015
+164 243 1.55349e+015
+114 344 1.55315e+015
+281 51 1.55299e+015
+538 95 1.55263e+015
+112 4 1.54811e+015
+365 200 1.54637e+015
+339 164 1.54621e+015
+387 242 1.54548e+015
+355 267 1.54361e+015
+130 77 1.54123e+015
+317 385 1.53762e+015
+422 323 1.53485e+015
+530 184 1.53383e+015
+286 166 1.52795e+015
+329 253 1.52246e+015
+546 41 1.52025e+015
+525 345 1.51771e+015
+542 210 1.51143e+015
+388 221 1.51041e+015
+256 149 1.50782e+015
+382 411 1.50172e+015
+491 1 1.49978e+015
+224 183 1.49544e+015
+208 451 1.49411e+015
+338 391 1.49388e+015
+285 211 1.48982e+015
+59 74 1.48867e+015
+276 222 1.4854e+015
+516 17 1.48473e+015
+390 61 1.48433e+015
+485 179 1.48312e+015
+338 473 1.482e+015
+484 59 1.47761e+015
+362 398 1.47473e+015
+244 164 1.47435e+015
+522 263 1.47027e+015
+288 212 1.46508e+015
+220 178 1.45902e+015
+162 213 1.4547e+015
+379 68 1.45224e+015
+169 55 1.44969e+015
+91 291 1.44798e+015
+22 61 1.44687e+015
+120 4 1.44574e+015
+37 138 1.44334e+015
+271 365 1.4424e+015
+512 99 1.44119e+015
+82 77 1.43944e+015
+318 312 1.43593e+015
+513 296 1.433e+015
+421 6 1.42684e+015
+378 317 1.42609e+015
+180 394 1.42059e+015
+187 99 1.41992e+015
+352 147 1.41982e+015
+236 92 1.41808e+015
+301 165 1.4156e+015
+511 128 1.41075e+015
+345 109 1.41019e+015
+449 403 1.40831e+015
+422 47 1.40092e+015
+220 100 1.39821e+015
+327 341 1.39723e+015
+110 96 1.39315e+015
+212 437 1.39279e+015
+49 153 1.39222e+015
+33 269 1.38668e+015
+453 340 1.38578e+015
+124 272 1.38423e+015
+380 26 1.37729e+015
+541 13 1.37711e+015
+370 107 1.36835e+015
+348 240 1.36431e+015
+110 136 1.36284e+015
+316 336 1.35988e+015
+546 57 1.35566e+015
+46 147 1.35321e+015
+530 62 1.35167e+015
+507 165 1.3506e+015
+543 130 1.34706e+015
+383 354 1.34683e+015
+479 294 1.34653e+015
+74 6 1.34475e+015
+402 276 1.34457e+015
+345 241 1.34078e+015
+173 94 1.33865e+015
+497 228 1.33568e+015
+264 445 1.33362e+015
+228 184 1.33285e+015
+72 97 1.33278e+015
+566 43 1.33277e+015
+197 82 1.33148e+015
+221 182 1.33011e+015
+78 196 1.32119e+015
+324 341 1.31904e+015
+128 95 1.31612e+015
+255 182 1.31433e+015
+167 325 1.31317e+015
+510 344 1.31076e+015
+32 218 1.30979e+015
+97 79 1.30845e+015
+252 10 1.30759e+015
+474 23 1.30504e+015
+470 418 1.29904e+015
+87 209 1.2975e+015
+232 200 1.29613e+015
+192 359 1.29444e+015
+582 17 1.29396e+015
+487 22 1.29354e+015
+537 459 1.29323e+015
+177 166 1.29218e+015
+325 88 1.28912e+015
+248 403 1.28663e+015
+139 173 1.28413e+015
+482 331 1.2822e+015
+147 21 1.28109e+015
+363 181 1.28082e+015
+153 1 1.28e+015
+444 452 1.27854e+015
+278 145 1.27818e+015
+365 251 1.27657e+015
+527 422 1.27532e+015
+324 164 1.27456e+015
+498 158 1.27138e+015
+162 168 1.27037e+015
+577 15 1.26917e+015
+55 28 1.26894e+015
+259 202 1.26871e+015
+259 221 1.26719e+015
+63 60 1.26524e+015
+44 81 1.26446e+015
+479 263 1.26227e+015
+92 7 1.26106e+015
+88 256 1.26099e+015
+136 176 1.25959e+015
+571 161 1.25641e+015
+18 342 1.25641e+015
+40 217 1.255e+015
+329 66 1.25288e+015
+401 184 1.25253e+015
+424 334 1.2521e+015
+57 364 1.25172e+015
+507 14 1.25041e+015
+137 98 1.24787e+015
+357 126 1.24054e+015
+179 113 1.23875e+015
+576 178 1.2359e+015
+162 216 1.2354e+015
+260 273 1.23183e+015
+329 9 1.23071e+015
+125 261 1.22951e+015
+386 126 1.22739e+015
+560 229 1.22372e+015
+408 352 1.21939e+015
+36 201 1.21894e+015
+179 18 1.21856e+015
+49 11 1.21809e+015
+362 370 1.21772e+015
+436 91 1.21769e+015
+243 190 1.21743e+015
+342 123 1.21616e+015
+541 62 1.21458e+015
+406 199 1.21418e+015
+543 57 1.21308e+015
+302 103 1.21244e+015
+84 3 1.21036e+015
+342 464 1.21026e+015
+492 140 1.20488e+015
+198 130 1.20188e+015
+332 130 1.1988e+015
+572 142 1.19689e+015
+191 56 1.19589e+015
+371 82 1.19547e+015
+102 358 1.19461e+015
+149 39 1.19416e+015
+41 63 1.19399e+015
+419 163 1.19363e+015
+131 148 1.18848e+015
+299 70 1.18777e+015
+274 281 1.18682e+015
+207 436 1.18474e+015
+449 178 1.18172e+015
+163 207 1.18068e+015
+539 40 1.17895e+015
+6 9 1.17359e+015
+289 166 1.16924e+015
+575 126 1.16906e+015
+371 393 1.16803e+015
+117 96 1.16751e+015
+513 122 1.16698e+015
+183 19 1.16306e+015
+422 397 1.16089e+015
+324 142 1.16035e+015
+183 133 1.15749e+015
+228 129 1.15587e+015
+246 294 1.15552e+015
+512 125 1.15533e+015
+108 183 1.15518e+015
+432 83 1.15483e+015
+313 83 1.15138e+015
+287 342 1.15096e+015
+124 162 1.14937e+015
+483 83 1.14846e+015
+240 366 1.14764e+015
+153 222 1.14674e+015
+80 474 1.14279e+015
+527 23 1.14147e+015
+236 130 1.14093e+015
+290 264 1.14057e+015
+277 370 1.13856e+015
+483 327 1.13775e+015
+347 350 1.1373e+015
+199 86 1.1372e+015
+545 5 1.13705e+015
+468 238 1.13636e+015
+167 238 1.13418e+015
+107 40 1.13088e+015
+387 167 1.12986e+015
+270 62 1.12843e+015
+388 97 1.12838e+015
+138 57 1.12656e+015
+478 16 1.12568e+015
+334 435 1.12461e+015
+39 406 1.12285e+015
+365 259 1.12165e+015
+507 455 1.12036e+015
+146 160 1.11846e+015
+23 219 1.11827e+015
+481 179 1.11697e+015
+260 142 1.11605e+015
+144 187 1.11536e+015
+508 7 1.1151e+015
+487 4 1.11449e+015
+270 67 1.11144e+015
+433 319 1.11039e+015
+495 141 1.10931e+015
+164 359 1.10876e+015
+37 288 1.10661e+015
+561 60 1.10446e+015
+108 324 1.10045e+015
+64 218 1.09996e+015
+358 143 1.09746e+015
+331 107 1.0971e+015
+109 340 1.096e+015
+332 255 1.09599e+015
+55 294 1.09502e+015
+100 162 1.09496e+015
+132 130 1.0942e+015
+271 289 1.0933e+015
+572 449 1.09216e+015
+205 162 1.09171e+015
+297 296 1.09069e+015
+482 336 1.09052e+015
+82 136 1.08976e+015
+360 216 1.08746e+015
+513 220 1.08634e+015
+174 57 1.0862e+015
+441 98 1.08404e+015
+331 295 1.08305e+015
+344 263 1.08218e+015
+273 297 1.08142e+015
+257 250 1.0808e+015
+127 252 1.08073e+015
+569 40 1.08002e+015
+516 348 1.07989e+015
+136 128 1.07713e+015
+53 43 1.07541e+015
+282 200 1.07197e+015
+358 10 1.07014e+015
+391 47 1.07004e+015
+259 71 1.06456e+015
+271 52 1.06367e+015
+561 320 1.06225e+015
+333 89 1.06125e+015
+533 183 1.05854e+015
+115 76 1.05515e+015
+448 138 1.05377e+015
+283 207 1.05335e+015
+242 100 1.05317e+015
+129 168 1.05273e+015
+105 199 1.05104e+015
+241 68 1.04823e+015
+91 389 1.04779e+015
+531 22 1.04547e+015
+540 99 1.04475e+015
+436 390 1.04331e+015
+358 393 1.04013e+015
+507 59 1.03938e+015
+556 182 1.03912e+015
+513 261 1.03869e+015
+528 142 1.0372e+015
+306 192 1.03668e+015
+254 422 1.03582e+015
+112 165 1.03433e+015
+245 402 1.03422e+015
+344 197 1.03279e+015
+84 476 1.0326e+015
+351 323 1.02964e+015
+440 64 1.02899e+015
+29 28 1.02755e+015
+226 180 1.02575e+015
+256 35 1.02101e+015
+528 104 1.02094e+015
+307 448 1.01719e+015
+259 236 1.01685e+015
+468 423 1.01623e+015
+280 128 1.01552e+015
+217 126 1.01502e+015
+219 108 1.01464e+015
+189 214 1.01462e+015
+403 6 1.01275e+015
+217 55 1.01145e+015
+153 217 1.00856e+015
+182 381 1.00854e+015
+417 24 1.00839e+015
+390 161 1.00575e+015
+389 139 1.00548e+015
+169 198 1.0047e+015
+267 296 1.0038e+015
+153 226 1.00282e+015
+378 339 1.00071e+015
+196 192 1.00029e+015
+48 257 9.99994e+014
+202 314 9.96733e+014
+195 17 9.9673e+014
+267 30 9.96625e+014
+262 391 9.95691e+014
+310 33 9.93723e+014
+407 162 9.9311e+014
+109 27 9.92268e+014
+479 176 9.89501e+014
+203 257 9.87867e+014
+162 74 9.87844e+014
+429 88 9.87379e+014
+480 403 9.86716e+014
+248 219 9.83226e+014
+137 21 9.7981e+014
+240 73 9.78205e+014
+260 251 9.74314e+014
+108 109 9.73644e+014
+20 219 9.73257e+014
+220 149 9.72691e+014
+435 88 9.71762e+014
+537 186 9.70764e+014
+5 13 9.70123e+014
+479 81 9.66477e+014
+351 320 9.65804e+014
+292 311 9.65007e+014
+143 2 9.6469e+014
+353 127 9.63188e+014
+428 181 9.61661e+014
+556 244 9.61065e+014
+49 159 9.59047e+014
+253 74 9.58426e+014
+413 4 9.58343e+014
+172 449 9.56514e+014
+524 99 9.55639e+014
+67 337 9.55049e+014
+414 299 9.53218e+014
+502 142 9.51728e+014
+137 138 9.51438e+014
+412 23 9.49494e+014
+282 221 9.48902e+014
+150 222 9.47476e+014
+58 372 9.46826e+014
+153 447 9.46503e+014
+161 256 9.4642e+014
+34 236 9.45444e+014
+436 385 9.44655e+014
+210 153 9.44324e+014
+94 477 9.42838e+014
+396 161 9.42329e+014
+390 19 9.39809e+014
+114 428 9.39744e+014
+160 112 9.38437e+014
+509 361 9.37808e+014
+374 241 9.37531e+014
+167 180 9.3614e+014
+386 162 9.35856e+014
+323 425 9.35487e+014
+221 114 9.35183e+014
+308 8 9.34414e+014
+393 217 9.34182e+014
+250 313 9.34047e+014
+544 91 9.33221e+014
+261 439 9.31587e+014
+93 254 9.3062e+014
+337 8 9.28915e+014
+358 282 9.28724e+014
+325 295 9.27924e+014
+67 47 9.2784e+014
+111 40 9.27736e+014
+506 203 9.27257e+014
+328 142 9.27227e+014
+151 114 9.27107e+014
+248 205 9.26398e+014
+406 122 9.25451e+014
+435 281 9.23283e+014
+101 197 9.2252e+014
+265 53 9.18655e+014
+44 10 9.18446e+014
+56 220 9.18172e+014
+466 40 9.16199e+014
+189 205 9.15912e+014
+538 121 9.1528e+014
+261 34 9.10469e+014
+376 119 9.08994e+014
+63 8 9.0828e+014
+211 33 9.07468e+014
+9 476 9.06089e+014
+301 215 9.04876e+014
+236 221 9.04759e+014
+510 102 9.0424e+014
+366 66 9.04191e+014
+80 39 9.03462e+014
+54 289 9.02821e+014
+474 202 9.02539e+014
+44 121 9.02411e+014
+275 319 9.02034e+014
+474 245 9.00938e+014
+423 203 9.00218e+014
+206 159 8.99519e+014
+191 217 8.9878e+014
+376 84 8.96735e+014
+535 393 8.96395e+014
+103 392 8.96237e+014
+393 66 8.96047e+014
+313 75 8.9525e+014
+403 188 8.94705e+014
+160 183 8.93393e+014
+317 148 8.91201e+014
+458 265 8.91124e+014
+278 189 8.88606e+014
+73 185 8.88013e+014
+263 311 8.87974e+014
+461 221 8.86318e+014
+134 238 8.83015e+014
+365 104 8.82664e+014
+275 216 8.81347e+014
+201 317 8.80738e+014
+85 59 8.79619e+014
+403 265 8.79525e+014
+213 123 8.79223e+014
+392 296 8.76696e+014
+190 146 8.75671e+014
+158 56 8.73402e+014
+477 401 8.72779e+014
+141 394 8.72706e+014
+367 247 8.71118e+014
+126 189 8.70965e+014
+120 54 8.70367e+014
+457 375 8.70229e+014
+245 88 8.67405e+014
+549 59 8.6644e+014
+342 107 8.66238e+014
+110 265 8.6572e+014
+512 44 8.64914e+014
+346 297 8.63393e+014
+489 42 8.62483e+014
+312 7 8.6239e+014
+272 241 8.61643e+014
+503 265 8.60769e+014
+282 135 8.59943e+014
+104 163 8.59432e+014
+486 83 8.59042e+014
+335 105 8.57609e+014
+161 238 8.5728e+014
+241 59 8.56945e+014
+420 81 8.56249e+014
+45 132 8.55073e+014
+542 42 8.53976e+014
+163 20 8.53826e+014
+407 337 8.53553e+014
+212 17 8.52294e+014
+29 220 8.5147e+014
+265 260 8.50623e+014
+154 114 8.49797e+014
+336 426 8.49475e+014
+11 80 8.48627e+014
+546 182 8.48223e+014
+362 360 8.46515e+014
+494 455 8.44594e+014
+307 362 8.44163e+014
+364 256 8.44104e+014
+343 37 8.43569e+014
+445 7 8.43551e+014
+207 417 8.4242e+014
+42 339 8.41827e+014
+541 165 8.41816e+014
+274 206 8.4072e+014
+58 253 8.40438e+014
+329 212 8.40342e+014
+69 478 8.39856e+014
+65 252 8.3886e+014
+3 382 8.38772e+014
+125 40 8.38085e+014
+390 420 8.37761e+014
+420 167 8.36993e+014
+487 182 8.3644e+014
+279 362 8.36293e+014
+108 60 8.35958e+014
+61 133 8.35388e+014
+153 233 8.34627e+014
+580 52 8.337e+014
+285 404 8.33611e+014
+179 274 8.32731e+014
+287 34 8.30421e+014
+406 142 8.29118e+014
+492 182 8.29093e+014
+429 223 8.28661e+014
+434 156 8.28633e+014
+44 62 8.26269e+014
+156 93 8.25755e+014
+96 125 8.24943e+014
+436 43 8.22462e+014
+528 160 8.22226e+014
+305 106 8.22119e+014
+193 171 8.20124e+014
+77 81 8.19828e+014
+526 398 8.19817e+014
+187 263 8.19779e+014
+565 462 8.18647e+014
+19 65 8.18341e+014
+127 186 8.18286e+014
+216 176 8.18167e+014
+548 44 8.17588e+014
+531 103 8.17478e+014
+274 76 8.17038e+014
+533 341 8.1692e+014
+105 4 8.16269e+014
+292 28 8.15609e+014
+39 143 8.14628e+014
+528 188 8.13528e+014
+574 39 8.12884e+014
+57 331 8.12357e+014
+133 78 8.12096e+014
+500 21 8.11905e+014
+130 239 8.11823e+014
+383 146 8.1094e+014
+561 71 8.10545e+014
+298 332 8.10145e+014
+86 214 8.09804e+014
+128 40 8.09232e+014
+59 28 8.09058e+014
+433 240 8.09026e+014
+579 42 8.08558e+014
+22 58 8.07295e+014
+445 353 8.07035e+014
+85 197 8.05988e+014
+432 268 8.05975e+014
+398 358 8.05768e+014
+560 81 8.04664e+014
+113 356 8.04379e+014
+451 101 8.04169e+014
+507 2 8.04122e+014
+514 382 8.0087e+014
+117 428 8.00788e+014
+59 41 7.98714e+014
+437 303 7.9861e+014
+471 82 7.97751e+014
+419 52 7.96538e+014
+558 19 7.95832e+014
+3 155 7.9578e+014
+598 364 7.94613e+014
+553 383 7.93489e+014
+64 276 7.92846e+014
+156 307 7.92135e+014
+446 340 7.91997e+014
+525 381 7.91926e+014
+396 104 7.91725e+014
+288 396 7.9046e+014
+175 109 7.90216e+014
+250 422 7.88099e+014
+41 10 7.87999e+014
+317 107 7.87927e+014
+597 272 7.87207e+014
+398 169 7.86994e+014
+573 423 7.86973e+014
+42 24 7.86302e+014
+144 327 7.8615e+014
+564 40 7.85182e+014
+133 427 7.83753e+014
+277 137 7.83736e+014
+324 260 7.83489e+014
+113 176 7.82925e+014
+150 151 7.82729e+014
+41 136 7.82473e+014
+328 288 7.81918e+014
+313 222 7.81848e+014
+173 18 7.79755e+014
+344 340 7.7973e+014
+425 43 7.78629e+014
+429 121 7.78139e+014
+572 328 7.77887e+014
+541 123 7.77026e+014
+281 394 7.76883e+014
+116 391 7.76782e+014
+408 44 7.76755e+014
+391 448 7.76619e+014
+433 339 7.76399e+014
+71 410 7.7623e+014
+279 296 7.75716e+014
+464 161 7.75584e+014
+163 108 7.75171e+014
+164 324 7.75101e+014
+245 14 7.72713e+014
+172 108 7.72309e+014
+174 115 7.71609e+014
+481 182 7.71119e+014
+45 407 7.70234e+014
+467 125 7.69463e+014
+24 65 7.69398e+014
+226 15 7.69236e+014
+151 196 7.69181e+014
+184 137 7.68712e+014
+476 182 7.6847e+014
+484 375 7.68379e+014
+281 132 7.68304e+014
+508 82 7.68298e+014
+158 138 7.67624e+014
+366 2 7.6758e+014
+299 399 7.67534e+014
+57 289 7.67501e+014
+131 255 7.65432e+014
+39 83 7.65377e+014
+15 219 7.64969e+014
+129 429 7.63545e+014
+303 180 7.63116e+014
+107 96 7.63037e+014
+374 394 7.6213e+014
+505 381 7.60676e+014
+500 42 7.60398e+014
+415 251 7.60045e+014
+289 136 7.59813e+014
+266 14 7.56772e+014
+369 162 7.5644e+014
+48 133 7.55383e+014
+380 122 7.55095e+014
+516 202 7.54849e+014
+129 309 7.53223e+014
+131 73 7.53216e+014
+65 363 7.53136e+014
+394 222 7.52975e+014
+354 26 7.51422e+014
+460 40 7.5012e+014
+293 334 7.49805e+014
+70 130 7.49024e+014
+173 112 7.48951e+014
+445 126 7.48493e+014
+360 315 7.47047e+014
+387 327 7.46803e+014
+282 351 7.4637e+014
+92 20 7.45966e+014
+62 205 7.45684e+014
+218 145 7.44898e+014
+160 98 7.44785e+014
+33 172 7.44732e+014
+101 236 7.43641e+014
+416 163 7.43001e+014
+479 451 7.41852e+014
+440 468 7.41737e+014
+535 121 7.41409e+014
+568 383 7.41371e+014
+379 125 7.412e+014
+187 109 7.3904e+014
+168 242 7.37897e+014
+181 398 7.36243e+014
+49 80 7.35747e+014
+394 317 7.34824e+014
+112 56 7.33327e+014
+46 90 7.33227e+014
+173 40 7.31044e+014
+157 200 7.31025e+014
+373 116 7.30677e+014
+136 93 7.29223e+014
+199 111 7.28546e+014
+190 322 7.28353e+014
+38 167 7.27892e+014
+297 410 7.27338e+014
+5 63 7.27326e+014
+368 337 7.27135e+014
+560 272 7.22789e+014
+155 197 7.22543e+014
+166 20 7.22328e+014
+219 316 7.22139e+014
+425 262 7.21872e+014
+321 119 7.21826e+014
+110 168 7.2155e+014
+412 220 7.20915e+014
+433 303 7.1974e+014
+158 74 7.19104e+014
+95 452 7.18585e+014
+104 430 7.18267e+014
+278 418 7.18075e+014
+382 162 7.17596e+014
+451 91 7.15835e+014
+229 347 7.15713e+014
+442 355 7.1435e+014
+220 210 7.14165e+014
+382 336 7.13728e+014
+343 392 7.12512e+014
+269 105 7.11299e+014
+341 88 7.11213e+014
+327 320 7.10895e+014
+157 318 7.10796e+014
+279 222 7.09292e+014
+306 355 7.09129e+014
+463 100 7.08942e+014
+121 239 7.08909e+014
+561 223 7.08248e+014
+177 75 7.06684e+014
+168 309 7.05977e+014
+246 106 7.04682e+014
+221 432 7.04667e+014
+61 181 7.04072e+014
+257 88 7.03306e+014
+49 164 7.01762e+014
+252 152 7.01092e+014
+148 3 7.01063e+014
+524 172 7.00815e+014
+330 202 7.00552e+014
+365 85 7.00247e+014
+472 42 6.99815e+014
+549 183 6.99359e+014
+45 97 6.99322e+014
+418 68 6.9881e+014
+190 276 6.98163e+014
+45 136 6.9811e+014
+449 23 6.96816e+014
+177 331 6.96811e+014
+262 217 6.9676e+014
+529 32 6.95275e+014
+391 324 6.94276e+014
+164 202 6.94175e+014
+86 365 6.93889e+014
+263 13 6.92557e+014
+205 202 6.91496e+014
+51 61 6.91476e+014
+391 52 6.91244e+014
+215 144 6.90795e+014
+191 17 6.89994e+014
+417 450 6.89663e+014
+168 150 6.89289e+014
+471 4 6.88999e+014
+326 180 6.87574e+014
+371 89 6.85637e+014
+116 219 6.85286e+014
+303 209 6.85186e+014
+83 404 6.8473e+014
+30 134 6.84702e+014
+535 18 6.84512e+014
+315 159 6.83301e+014
+16 215 6.81734e+014
+393 165 6.81464e+014
+546 261 6.7959e+014
+353 424 6.79364e+014
+246 327 6.79142e+014
+513 401 6.78729e+014
+41 121 6.78412e+014
+361 222 6.78213e+014
+132 94 6.78085e+014
+86 371 6.77748e+014
+450 442 6.774e+014
+40 355 6.76424e+014
+257 140 6.76423e+014
+148 396 6.75892e+014
+540 141 6.75881e+014
+293 120 6.75406e+014
+359 161 6.75338e+014
+128 25 6.75065e+014
+121 187 6.74411e+014
+464 24 6.7432e+014
+97 147 6.74182e+014
+271 183 6.74121e+014
+327 13 6.73881e+014
+132 216 6.73679e+014
+408 182 6.72773e+014
+34 298 6.72397e+014
+364 357 6.71772e+014
+537 103 6.70566e+014
+411 46 6.70132e+014
+158 237 6.69911e+014
+573 17 6.6956e+014
+166 114 6.68345e+014
+475 342 6.68284e+014
+412 245 6.67761e+014
+564 17 6.6664e+014
+68 304 6.65563e+014
+208 421 6.65561e+014
+318 201 6.64895e+014
+179 103 6.64878e+014
+472 119 6.64479e+014
+559 462 6.64337e+014
+309 147 6.64244e+014
+471 122 6.63355e+014
+105 37 6.62694e+014
+263 403 6.61857e+014
+358 52 6.61196e+014
+290 49 6.60744e+014
+462 45 6.59706e+014
+167 290 6.58423e+014
+117 184 6.57959e+014
+421 315 6.57787e+014
+173 37 6.57572e+014
+227 38 6.57391e+014
+32 142 6.57158e+014
+449 83 6.56989e+014
+473 211 6.56882e+014
+565 60 6.55833e+014
+222 214 6.55495e+014
+104 219 6.55372e+014
+133 65 6.54533e+014
+243 419 6.5434e+014
+222 239 6.5422e+014
+496 120 6.53481e+014
+156 234 6.52996e+014
+415 21 6.52389e+014
+550 222 6.52047e+014
+224 72 6.51972e+014
+584 38 6.5196e+014
+385 450 6.51661e+014
+440 24 6.51559e+014
+78 271 6.51318e+014
+449 168 6.51318e+014
+407 81 6.51003e+014
+513 93 6.50954e+014
+350 86 6.50476e+014
+146 452 6.50457e+014
+128 128 6.49431e+014
+38 10 6.48751e+014
+89 376 6.48558e+014
+52 11 6.48097e+014
+330 62 6.47848e+014
+530 366 6.47455e+014
+163 327 6.46746e+014
+441 321 6.46568e+014
+261 329 6.4655e+014
+451 263 6.46432e+014
+180 292 6.46369e+014
+269 169 6.45312e+014
+173 21 6.42125e+014
+510 223 6.42045e+014
+113 262 6.41923e+014
+160 430 6.41768e+014
+13 206 6.41369e+014
+542 457 6.40821e+014
+388 282 6.40607e+014
+446 376 6.40419e+014
+530 193 6.40159e+014
+85 178 6.38917e+014
+496 462 6.3709e+014
+260 382 6.36581e+014
+569 203 6.36569e+014
+333 415 6.34184e+014
+296 89 6.33843e+014
+266 139 6.32948e+014
+300 246 6.32457e+014
+247 346 6.29975e+014
+410 99 6.29711e+014
+38 170 6.28124e+014
+547 162 6.2798e+014
+352 161 6.27811e+014
+84 310 6.27547e+014
+297 99 6.25261e+014
+315 165 6.24555e+014
+101 362 6.23888e+014
+358 64 6.23835e+014
+109 358 6.23792e+014
+121 128 6.22982e+014
+278 367 6.21431e+014
+262 319 6.2124e+014
+412 469 6.20915e+014
+131 477 6.2025e+014
+487 261 6.19849e+014
+332 333 6.19597e+014
+275 329 6.19512e+014
+583 345 6.19134e+014
+362 101 6.18092e+014
+545 438 6.17411e+014
+187 182 6.17016e+014
+433 25 6.16763e+014
+524 199 6.15607e+014
+354 18 6.14699e+014
+187 291 6.14017e+014
+286 53 6.13949e+014
+33 65 6.12948e+014
+532 161 6.12169e+014
+124 184 6.11792e+014
+149 231 6.11129e+014
+500 224 6.10939e+014
+211 94 6.10834e+014
+404 13 6.10764e+014
+361 331 6.10354e+014
+328 165 6.09589e+014
+189 202 6.09541e+014
+363 143 6.09112e+014
+415 83 6.08914e+014
+259 163 6.08424e+014
+394 158 6.08349e+014
+524 185 6.07314e+014
+91 79 6.06896e+014
+272 133 6.06224e+014
+277 333 6.05523e+014
+351 271 6.05186e+014
+418 300 6.04933e+014
+571 333 6.0459e+014
+447 145 6.03586e+014
+279 86 6.031e+014
+94 197 6.01897e+014
+267 132 6.01555e+014
+424 163 6.01462e+014
+70 255 6.0116e+014
+383 260 6.01e+014
+618 181 6.00806e+014
+523 39 6.00792e+014
+289 349 6.00512e+014
+58 79 6.00197e+014
+68 96 6.00005e+014
+126 3 5.99538e+014
+485 236 5.9839e+014
+116 181 5.98131e+014
+537 140 5.97299e+014
+102 294 5.97033e+014
+176 180 5.96347e+014
+379 107 5.9612e+014
+222 153 5.96101e+014
+400 266 5.95624e+014
+310 259 5.95583e+014
+522 141 5.95545e+014
+210 395 5.95016e+014
+139 2 5.94554e+014
+498 68 5.93928e+014
+215 426 5.93117e+014
+180 166 5.93097e+014
+234 261 5.91968e+014
+209 36 5.90761e+014
+63 201 5.90649e+014
+72 165 5.89881e+014
+439 149 5.89687e+014
+117 360 5.88781e+014
+384 26 5.88708e+014
+182 201 5.88644e+014
+349 337 5.88061e+014
+297 182 5.87533e+014
+247 317 5.87523e+014
+44 476 5.87279e+014
+159 197 5.86695e+014
+381 128 5.85425e+014
+400 319 5.85045e+014
+545 141 5.84704e+014
+45 153 5.8469e+014
+203 396 5.84627e+014
+211 21 5.84458e+014
+53 221 5.84023e+014
+376 4 5.83956e+014
+52 292 5.82468e+014
+69 417 5.82031e+014
+387 16 5.81524e+014
+117 132 5.81406e+014
+153 301 5.81138e+014
+433 278 5.80919e+014
+122 446 5.80806e+014
+191 130 5.80116e+014
+570 408 5.79873e+014
+119 25 5.79028e+014
+303 52 5.78981e+014
+157 112 5.78411e+014
+536 81 5.78132e+014
+175 2 5.76527e+014
+162 128 5.763e+014
+83 101 5.76256e+014
+327 25 5.7524e+014
+496 224 5.75053e+014
+499 475 5.74836e+014
+399 67 5.74264e+014
+110 112 5.7344e+014
+419 85 5.72561e+014
+84 289 5.72463e+014
+470 202 5.72298e+014
+256 405 5.7199e+014
+18 236 5.71855e+014
+462 396 5.71848e+014
+380 180 5.71246e+014
+243 210 5.70915e+014
+447 244 5.7085e+014
+184 184 5.70234e+014
+36 98 5.70049e+014
+316 427 5.69075e+014
+412 43 5.69012e+014
+272 91 5.6893e+014
+100 95 5.68928e+014
+126 329 5.68224e+014
+14 30 5.67994e+014
+575 141 5.67831e+014
+210 187 5.67793e+014
+84 145 5.67504e+014
+518 164 5.66777e+014
+272 414 5.65592e+014
+511 211 5.65154e+014
+439 455 5.64713e+014
+333 240 5.64699e+014
+9 76 5.6462e+014
+570 421 5.64351e+014
+321 10 5.6352e+014
+76 259 5.63419e+014
+88 354 5.62832e+014
+126 113 5.62826e+014
+260 231 5.61942e+014
+357 240 5.61606e+014
+477 240 5.61517e+014
+281 35 5.60839e+014
+341 257 5.59862e+014
+146 97 5.59799e+014
+58 103 5.59536e+014
+497 64 5.59483e+014
+173 75 5.59196e+014
+571 383 5.58125e+014
+310 334 5.57476e+014
+124 94 5.57403e+014
+469 141 5.57059e+014
+203 293 5.56579e+014
+520 362 5.56467e+014
+503 179 5.55956e+014
+475 255 5.55436e+014
+13 202 5.54205e+014
+173 166 5.54135e+014
+579 79 5.53754e+014
+435 181 5.53125e+014
+209 136 5.52711e+014
+193 290 5.5234e+014
+50 452 5.5081e+014
+197 148 5.50679e+014
+243 32 5.50086e+014
+94 95 5.49313e+014
+591 103 5.49094e+014
+124 82 5.48863e+014
+311 298 5.48714e+014
+106 77 5.48184e+014
+240 194 5.47964e+014
+33 30 5.47818e+014
+317 125 5.47786e+014
+434 381 5.45792e+014
+465 281 5.45342e+014
+469 198 5.44884e+014
+259 370 5.44553e+014
+333 412 5.43886e+014
+283 80 5.43825e+014
+413 100 5.43233e+014
+401 429 5.42719e+014
+187 288 5.42258e+014
+259 228 5.42054e+014
+32 103 5.41895e+014
+331 133 5.41813e+014
+484 154 5.4125e+014
+500 318 5.4088e+014
+540 405 5.40799e+014
+569 183 5.40204e+014
+500 420 5.40092e+014
+175 189 5.39971e+014
+80 132 5.39848e+014
+503 161 5.38919e+014
+281 418 5.38014e+014
+496 22 5.37566e+014
+279 198 5.37253e+014
+336 89 5.36765e+014
+326 353 5.36452e+014
+310 90 5.35035e+014
+154 57 5.34939e+014
+198 75 5.34171e+014
+48 458 5.34139e+014
+163 316 5.33833e+014
+203 347 5.33301e+014
+213 62 5.33261e+014
+512 349 5.33243e+014
+181 33 5.32299e+014
+379 335 5.31997e+014
+344 274 5.31321e+014
+88 261 5.312e+014
+388 202 5.30879e+014
+475 161 5.30701e+014
+364 333 5.30118e+014
+63 315 5.29863e+014
+275 197 5.29785e+014
+111 324 5.29449e+014
+109 77 5.2943e+014
+196 60 5.29349e+014
+282 369 5.29319e+014
+360 242 5.29145e+014
+575 98 5.27115e+014
+387 319 5.27104e+014
+231 126 5.25608e+014
+554 380 5.25499e+014
+289 89 5.25479e+014
+527 395 5.25366e+014
+142 238 5.25134e+014
+482 360 5.25082e+014
+532 268 5.24911e+014
+418 282 5.24813e+014
+135 134 5.23177e+014
+450 446 5.23004e+014
+510 203 5.22672e+014
+164 190 5.22602e+014
+108 427 5.22179e+014
+57 168 5.22176e+014
+191 314 5.22038e+014
+458 180 5.19605e+014
+521 344 5.1951e+014
+283 296 5.18771e+014
+12 214 5.18354e+014
+165 378 5.17858e+014
+494 164 5.17082e+014
+383 325 5.16743e+014
+66 474 5.16638e+014
+51 257 5.15878e+014
+148 131 5.15717e+014
+88 183 5.15387e+014
+210 13 5.14832e+014
+298 274 5.14737e+014
+182 341 5.14275e+014
+495 476 5.13811e+014
+245 385 5.1357e+014
+269 91 5.13304e+014
+441 240 5.12951e+014
+456 201 5.12483e+014
+191 189 5.12247e+014
+221 84 5.11258e+014
+517 142 5.10999e+014
+493 102 5.10831e+014
+429 116 5.10179e+014
+513 376 5.10176e+014
+517 59 5.10108e+014
+169 183 5.09584e+014
+179 153 5.09387e+014
+516 120 5.09244e+014
+187 326 5.08547e+014
+180 328 5.08376e+014
+490 82 5.08355e+014
+38 182 5.0782e+014
+90 321 5.07743e+014
+422 116 5.0747e+014
+143 141 5.07461e+014
+140 98 5.07348e+014
+573 6 5.07293e+014
+364 407 5.06944e+014
+386 63 5.06597e+014
+293 86 5.06323e+014
+180 56 5.06128e+014
+414 262 5.05503e+014
+193 111 5.05436e+014
+465 355 5.04886e+014
+258 131 5.04837e+014
+527 80 5.04817e+014
+351 363 5.04753e+014
+192 326 5.04492e+014
+464 139 5.03341e+014
+421 89 5.0308e+014
+188 104 5.02736e+014
+161 133 5.02263e+014
+572 121 5.01735e+014
+473 355 5.01566e+014
+32 112 5.01476e+014
+487 205 5.00893e+014
+243 273 5.00835e+014
+492 59 5.0033e+014
+231 344 5.00098e+014
+296 165 4.99895e+014
+461 269 4.99671e+014
+116 3 4.99398e+014
+502 145 4.9932e+014
+372 74 4.98948e+014
+18 320 4.98843e+014
+292 182 4.98379e+014
+126 308 4.9656e+014
+377 64 4.9594e+014
+151 236 4.95903e+014
+549 282 4.95729e+014
+339 427 4.95258e+014
+422 63 4.94412e+014
+212 219 4.93858e+014
+408 14 4.93586e+014
+120 220 4.93537e+014
+155 432 4.93179e+014
+555 264 4.9308e+014
+161 31 4.92758e+014
+299 262 4.92647e+014
+512 83 4.92605e+014
+163 105 4.92444e+014
+400 273 4.92402e+014
+247 258 4.91928e+014
+336 317 4.91785e+014
+146 15 4.9133e+014
+335 418 4.90955e+014
+338 221 4.90643e+014
+422 328 4.90545e+014
+341 314 4.8992e+014
+300 253 4.89588e+014
+263 31 4.89518e+014
+200 293 4.8902e+014
+356 251 4.87656e+014
+482 164 4.87527e+014
+298 57 4.87345e+014
+93 112 4.86706e+014
+427 1 4.86569e+014
+570 324 4.8606e+014
+16 118 4.85868e+014
+399 298 4.8532e+014
+392 243 4.85188e+014
+351 352 4.85106e+014
+75 132 4.85088e+014
+144 432 4.84846e+014
+551 80 4.84418e+014
+325 92 4.83878e+014
+63 27 4.83859e+014
+375 341 4.83649e+014
+443 121 4.83101e+014
+488 140 4.83012e+014
+375 282 4.82795e+014
+39 241 4.82526e+014
+515 184 4.82373e+014
+159 90 4.81433e+014
+333 216 4.81251e+014
+512 109 4.80861e+014
+251 163 4.8073e+014
+476 248 4.80705e+014
+564 158 4.80237e+014
+146 221 4.79603e+014
+377 461 4.79158e+014
+438 123 4.78375e+014
+472 453 4.7808e+014
+329 390 4.77256e+014
+405 44 4.77111e+014
+148 163 4.76537e+014
+223 312 4.76462e+014
+475 339 4.76426e+014
+171 180 4.75669e+014
+594 19 4.75518e+014
+13 236 4.75489e+014
+286 422 4.75388e+014
+115 306 4.75105e+014
+265 72 4.7463e+014
+460 303 4.73799e+014
+366 107 4.7346e+014
+531 398 4.73073e+014
+500 461 4.72959e+014
+184 318 4.72247e+014
+407 262 4.71785e+014
+271 293 4.71705e+014
+540 263 4.71311e+014
+266 118 4.71045e+014
+293 12 4.7093e+014
+449 64 4.70145e+014
+132 410 4.70133e+014
+416 377 4.69245e+014
+152 400 4.69033e+014
+398 95 4.68769e+014
+322 29 4.68379e+014
+238 190 4.68078e+014
+469 24 4.67932e+014
+346 47 4.67842e+014
+411 183 4.67437e+014
+186 144 4.67208e+014
+129 217 4.67051e+014
+355 107 4.67026e+014
+103 304 4.66716e+014
+186 342 4.66126e+014
+557 302 4.66043e+014
+87 342 4.65837e+014
+215 149 4.65486e+014
+534 92 4.64866e+014
+522 78 4.64758e+014
+273 146 4.6472e+014
+416 86 4.64613e+014
+95 374 4.64464e+014
+216 106 4.64312e+014
+94 219 4.64302e+014
+430 44 4.64078e+014
+582 79 4.63908e+014
+233 296 4.63739e+014
+331 219 4.63626e+014
+576 311 4.63548e+014
+184 94 4.63517e+014
+392 293 4.63152e+014
+143 179 4.62161e+014
+183 315 4.6214e+014
+200 415 4.61867e+014
+357 255 4.61367e+014
+479 173 4.6131e+014
+60 110 4.61214e+014
+196 343 4.60832e+014
+427 63 4.60514e+014
+335 445 4.60383e+014
+420 362 4.60174e+014
+301 86 4.5996e+014
+217 164 4.59804e+014
+214 450 4.59378e+014
+45 342 4.59277e+014
+341 126 4.58763e+014
+153 319 4.58337e+014
+456 418 4.58001e+014
+347 120 4.57392e+014
+554 201 4.57206e+014
+16 435 4.57206e+014
+248 190 4.566e+014
+329 103 4.55817e+014
+366 304 4.55606e+014
+579 83 4.55574e+014
+452 161 4.55556e+014
+381 357 4.55489e+014
+589 350 4.55372e+014
+503 167 4.5507e+014
+51 373 4.54975e+014
+281 386 4.5461e+014
+497 340 4.54541e+014
+131 30 4.54492e+014
+395 47 4.54378e+014
+95 59 4.54218e+014
+216 208 4.53328e+014
+59 60 4.52873e+014
+52 359 4.52774e+014
+497 283 4.52576e+014
+28 12 4.52544e+014
+154 76 4.52394e+014
+136 74 4.52187e+014
+266 287 4.52087e+014
+115 26 4.51483e+014
+510 142 4.51307e+014
+395 23 4.5088e+014
+108 260 4.49638e+014
+223 177 4.49546e+014
+289 440 4.49511e+014
+250 425 4.48689e+014
+410 414 4.48676e+014
+260 367 4.48283e+014
+170 117 4.48088e+014
+373 103 4.47774e+014
+514 335 4.47697e+014
+462 378 4.47297e+014
+514 2 4.4726e+014
+332 336 4.4725e+014
+432 296 4.47245e+014
+539 220 4.47194e+014
+202 7 4.46536e+014
+177 200 4.45998e+014
+3 166 4.45765e+014
+457 43 4.45538e+014
+130 134 4.45146e+014
+343 297 4.44935e+014
+11 83 4.44819e+014
+224 50 4.44601e+014
+334 143 4.43901e+014
+249 262 4.43847e+014
+202 393 4.43746e+014
+228 198 4.43524e+014
+232 274 4.42824e+014
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_5_5.txt b/test_data/harriscorners/hc_msc_3.00_0.04_5_5.txt
new file mode 100644
index 0000000..0a572cf
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_5_5.txt
@@ -0,0 +1,1106 @@
+1105
+244 94 7.0718e+016
+273 365 4.19588e+016
+237 19 3.36442e+016
+362 400 3.12716e+016
+423 178 3.00271e+016
+423 181 2.67318e+016
+82 28 2.53341e+016
+76 257 2.44932e+016
+420 181 2.38378e+016
+200 17 2.3797e+016
+122 43 2.37448e+016
+281 113 2.37446e+016
+240 91 2.28796e+016
+448 297 2.28076e+016
+543 365 2.26334e+016
+320 224 2.26184e+016
+261 297 2.24358e+016
+299 52 2.24339e+016
+214 72 2.19388e+016
+65 343 2.19239e+016
+420 177 2.18193e+016
+343 9 2.16203e+016
+252 13 2.14356e+016
+427 320 2.12805e+016
+447 397 2.08519e+016
+35 138 2.072e+016
+465 393 2.06931e+016
+128 2 2.05662e+016
+553 40 2.05077e+016
+130 26 2.02247e+016
+360 295 2.00814e+016
+131 36 1.99837e+016
+124 198 1.98774e+016
+59 218 1.88757e+016
+134 214 1.86289e+016
+27 9 1.85968e+016
+30 8 1.85477e+016
+507 122 1.83679e+016
+116 44 1.83327e+016
+38 63 1.8258e+016
+195 57 1.82277e+016
+484 23 1.76262e+016
+387 178 1.75983e+016
+138 203 1.74043e+016
+81 2 1.73436e+016
+78 2 1.71906e+016
+294 15 1.71674e+016
+480 297 1.7e+016
+222 38 1.69346e+016
+256 386 1.66813e+016
+243 202 1.65612e+016
+102 59 1.65365e+016
+303 183 1.65272e+016
+456 281 1.6518e+016
+46 27 1.64923e+016
+448 262 1.64732e+016
+510 124 1.63451e+016
+519 61 1.63025e+016
+127 164 1.62931e+016
+340 9 1.62678e+016
+125 364 1.61276e+016
+386 10 1.60423e+016
+92 214 1.59941e+016
+435 69 1.58275e+016
+263 441 1.58061e+016
+2 47 1.57747e+016
+36 145 1.57663e+016
+308 371 1.57158e+016
+33 99 1.56448e+016
+152 222 1.54905e+016
+84 78 1.54859e+016
+556 40 1.53309e+016
+484 338 1.50463e+016
+78 28 1.49813e+016
+470 239 1.48046e+016
+508 17 1.4791e+016
+544 168 1.47875e+016
+320 313 1.47586e+016
+242 71 1.4677e+016
+101 222 1.45143e+016
+329 127 1.45128e+016
+426 119 1.44942e+016
+110 239 1.42893e+016
+11 101 1.41452e+016
+125 254 1.4051e+016
+70 25 1.39816e+016
+418 440 1.39622e+016
+195 125 1.39122e+016
+214 58 1.38889e+016
+511 167 1.38492e+016
+220 16 1.38343e+016
+390 58 1.36823e+016
+452 339 1.36672e+016
+513 341 1.36458e+016
+528 24 1.36308e+016
+225 420 1.35091e+016
+535 243 1.35072e+016
+485 59 1.34419e+016
+476 262 1.34202e+016
+412 162 1.32075e+016
+407 64 1.31774e+016
+462 279 1.31759e+016
+233 15 1.30885e+016
+145 310 1.30646e+016
+41 63 1.30375e+016
+363 251 1.30202e+016
+412 256 1.30182e+016
+343 338 1.30044e+016
+48 99 1.29908e+016
+54 29 1.2989e+016
+337 9 1.29444e+016
+410 64 1.29396e+016
+524 21 1.28414e+016
+253 139 1.28398e+016
+142 324 1.27097e+016
+160 143 1.27002e+016
+171 18 1.26948e+016
+360 131 1.24699e+016
+138 110 1.23532e+016
+264 299 1.23182e+016
+210 55 1.22075e+016
+433 112 1.21616e+016
+96 446 1.21616e+016
+183 400 1.21299e+016
+88 148 1.20424e+016
+515 76 1.19951e+016
+216 279 1.19035e+016
+510 173 1.17493e+016
+340 12 1.17276e+016
+64 236 1.1722e+016
+163 216 1.17035e+016
+73 24 1.16559e+016
+365 143 1.16492e+016
+302 215 1.1627e+016
+35 9 1.15878e+016
+92 198 1.15797e+016
+545 41 1.15786e+016
+404 121 1.1545e+016
+210 435 1.15356e+016
+184 36 1.15124e+016
+386 221 1.14656e+016
+246 206 1.1396e+016
+410 353 1.136e+016
+480 19 1.13343e+016
+120 51 1.13323e+016
+360 335 1.13138e+016
+417 8 1.12757e+016
+422 335 1.12699e+016
+177 106 1.1269e+016
+387 294 1.12284e+016
+260 222 1.12243e+016
+301 165 1.11756e+016
+234 346 1.11488e+016
+40 296 1.11484e+016
+325 341 1.11127e+016
+65 319 1.11009e+016
+41 217 1.10835e+016
+484 179 1.10743e+016
+363 298 1.10453e+016
+74 6 1.1019e+016
+286 297 1.10121e+016
+124 185 1.09998e+016
+112 392 1.0934e+016
+528 102 1.09183e+016
+181 111 1.09159e+016
+368 144 1.08702e+016
+431 147 1.08503e+016
+391 144 1.08178e+016
+234 162 1.08081e+016
+543 15 1.07407e+016
+497 81 1.07406e+016
+167 287 1.07297e+016
+371 162 1.07049e+016
+359 260 1.06811e+016
+270 70 1.06782e+016
+230 36 1.0675e+016
+250 365 1.06675e+016
+154 236 1.06632e+016
+100 78 1.0604e+016
+390 295 1.05786e+016
+542 209 1.0529e+016
+57 4 1.05262e+016
+71 147 1.05262e+016
+207 450 1.05094e+016
+283 403 1.04837e+016
+348 178 1.04718e+016
+245 143 1.04384e+016
+86 255 1.04243e+016
+383 7 1.0391e+016
+482 366 1.0347e+016
+498 159 1.03431e+016
+4 66 1.03228e+016
+466 196 1.03105e+016
+476 22 1.02801e+016
+102 4 1.02706e+016
+108 45 1.02602e+016
+224 182 1.02061e+016
+35 173 1.01971e+016
+425 376 1.0195e+016
+65 215 1.01942e+016
+138 173 1.0183e+016
+169 57 1.01752e+016
+243 165 1.01669e+016
+283 72 1.01493e+016
+163 277 1.01364e+016
+356 220 1.01186e+016
+579 16 1.01181e+016
+202 314 1.01138e+016
+228 292 1.01014e+016
+479 262 1.00905e+016
+151 307 1.00257e+016
+527 99 1.0019e+016
+6 11 1.00015e+016
+545 59 9.95922e+015
+55 290 9.94618e+015
+176 109 9.94343e+015
+211 184 9.93412e+015
+271 279 9.92656e+015
+424 44 9.91612e+015
+509 455 9.91383e+015
+311 150 9.87674e+015
+470 421 9.87021e+015
+480 178 9.86793e+015
+476 5 9.81353e+015
+209 20 9.7676e+015
+78 25 9.71732e+015
+527 39 9.70782e+015
+62 60 9.61963e+015
+221 180 9.609e+015
+137 206 9.58667e+015
+175 40 9.56947e+015
+174 312 9.53498e+015
+252 423 9.50792e+015
+204 16 9.49848e+015
+51 98 9.47235e+015
+533 184 9.46371e+015
+358 128 9.45531e+015
+325 164 9.41696e+015
+286 210 9.35477e+015
+207 224 9.34972e+015
+78 79 9.31658e+015
+48 151 9.29069e+015
+271 166 9.28476e+015
+351 321 9.25118e+015
+526 60 9.24917e+015
+354 321 9.23042e+015
+36 176 9.22632e+015
+226 221 9.20281e+015
+429 3 9.18754e+015
+68 149 9.1664e+015
+60 183 9.07532e+015
+511 128 9.06137e+015
+210 451 9.01629e+015
+82 135 9.01579e+015
+327 142 9.01015e+015
+166 97 8.97277e+015
+31 270 8.96816e+015
+325 425 8.94868e+015
+261 165 8.93187e+015
+276 180 8.91826e+015
+314 84 8.91304e+015
+540 13 8.89703e+015
+355 268 8.89495e+015
+439 339 8.88422e+015
+512 99 8.85785e+015
+492 140 8.83673e+015
+59 40 8.82952e+015
+174 238 8.81201e+015
+399 262 8.79155e+015
+347 241 8.78793e+015
+277 221 8.78722e+015
+386 243 8.77027e+015
+401 122 8.68125e+015
+50 12 8.66741e+015
+56 32 8.6562e+015
+542 18 8.62653e+015
+127 76 8.61633e+015
+489 342 8.61296e+015
+379 354 8.61118e+015
+203 311 8.59791e+015
+473 4 8.59723e+015
+108 27 8.58218e+015
+287 166 8.57377e+015
+293 26 8.54783e+015
+137 209 8.5403e+015
+175 112 8.48058e+015
+393 66 8.46401e+015
+516 17 8.44652e+015
+526 423 8.43952e+015
+482 328 8.42806e+015
+55 66 8.39593e+015
+95 477 8.37936e+015
+422 48 8.3778e+015
+453 204 8.35911e+015
+396 261 8.335e+015
+329 254 8.33015e+015
+177 260 8.32993e+015
+104 198 8.32581e+015
+346 350 8.32521e+015
+250 33 8.30035e+015
+378 7 8.2752e+015
+579 19 8.26011e+015
+47 147 8.25287e+015
+332 127 8.24607e+015
+235 72 8.24102e+015
+512 222 8.23405e+015
+220 290 8.22792e+015
+363 8 8.22569e+015
+110 135 8.21488e+015
+106 39 8.21067e+015
+264 446 8.19249e+015
+332 295 8.17528e+015
+276 352 8.15905e+015
+256 149 8.14539e+015
+434 398 8.12296e+015
+37 218 8.11744e+015
+449 218 8.11708e+015
+530 185 8.10229e+015
+306 440 8.07003e+015
+175 94 8.06365e+015
+101 198 8.06134e+015
+237 130 8.0546e+015
+344 107 8.04675e+015
+537 393 8.04374e+015
+442 23 8.0359e+015
+515 347 8.0338e+015
+207 435 8.03006e+015
+140 22 8.01936e+015
+365 105 8.01446e+015
+102 360 8.01018e+015
+331 131 7.99351e+015
+488 263 7.99266e+015
+59 75 7.9906e+015
+456 84 7.96724e+015
+423 398 7.946e+015
+262 201 7.94534e+015
+323 224 7.94287e+015
+278 144 7.93663e+015
+45 218 7.89239e+015
+167 325 7.88951e+015
+582 18 7.86731e+015
+62 203 7.81198e+015
+565 160 7.80163e+015
+522 264 7.7958e+015
+325 88 7.79418e+015
+324 315 7.7909e+015
+300 265 7.7726e+015
+47 11 7.76577e+015
+566 43 7.74521e+015
+527 361 7.7377e+015
+266 296 7.70675e+015
+470 418 7.70471e+015
+32 66 7.70396e+015
+452 376 7.6769e+015
+163 74 7.65421e+015
+330 9 7.63873e+015
+92 292 7.63393e+015
+246 400 7.6177e+015
+13 218 7.60296e+015
+393 295 7.59792e+015
+302 206 7.58601e+015
+309 7 7.58462e+015
+16 216 7.58275e+015
+273 131 7.56398e+015
+233 200 7.53704e+015
+192 124 7.53068e+015
+523 123 7.51076e+015
+520 182 7.50468e+015
+576 177 7.50458e+015
+334 90 7.49014e+015
+446 7 7.48859e+015
+508 5 7.46617e+015
+247 403 7.45673e+015
+344 110 7.45592e+015
+313 147 7.43164e+015
+152 225 7.43059e+015
+406 198 7.43031e+015
+29 236 7.41311e+015
+366 7 7.41169e+015
+84 2 7.40233e+015
+164 327 7.38835e+015
+238 349 7.38122e+015
+123 272 7.38085e+015
+403 262 7.36915e+015
+271 290 7.36239e+015
+541 123 7.34415e+015
+270 367 7.34224e+015
+502 361 7.32541e+015
+92 7 7.3178e+015
+168 197 7.27528e+015
+562 146 7.27069e+015
+405 375 7.26305e+015
+156 198 7.26114e+015
+344 263 7.26079e+015
+404 187 7.25748e+015
+113 345 7.25447e+015
+58 29 7.25187e+015
+228 185 7.25012e+015
+61 133 7.24968e+015
+530 144 7.24904e+015
+551 381 7.22638e+015
+126 95 7.20708e+015
+408 182 7.20262e+015
+177 165 7.19881e+015
+66 477 7.18186e+015
+141 394 7.17901e+015
+95 6 7.16624e+015
+197 83 7.16249e+015
+157 73 7.15838e+015
+317 335 7.15393e+015
+21 61 7.13564e+015
+44 62 7.12224e+015
+501 143 7.09696e+015
+381 26 7.09215e+015
+141 183 7.07937e+015
+192 330 7.06205e+015
+474 240 7.02526e+015
+362 397 7.02364e+015
+265 31 7.02271e+015
+544 4 7.0155e+015
+178 94 7.01231e+015
+416 23 7.00714e+015
+363 254 6.98722e+015
+55 293 6.98699e+015
+165 243 6.98045e+015
+358 10 6.97405e+015
+18 343 6.97317e+015
+30 219 6.95379e+015
+180 394 6.93195e+015
+313 76 6.93002e+015
+362 370 6.91764e+015
+46 82 6.91371e+015
+28 29 6.90223e+015
+551 378 6.89406e+015
+53 43 6.85262e+015
+403 265 6.85097e+015
+478 402 6.85014e+015
+69 476 6.84843e+015
+205 160 6.84798e+015
+178 39 6.84125e+015
+378 67 6.83189e+015
+401 276 6.83032e+015
+334 436 6.82218e+015
+109 95 6.81072e+015
+279 128 6.80967e+015
+390 48 6.80366e+015
+479 16 6.78296e+015
+527 222 6.76881e+015
+524 346 6.76175e+015
+228 128 6.75881e+015
+58 364 6.74251e+015
+542 129 6.72518e+015
+460 267 6.71662e+015
+161 168 6.7138e+015
+220 150 6.71198e+015
+130 78 6.71139e+015
+238 421 6.71057e+015
+159 138 6.68562e+015
+171 109 6.68378e+015
+542 132 6.66438e+015
+174 19 6.66395e+015
+259 237 6.62416e+015
+164 358 6.59556e+015
+190 216 6.58479e+015
+41 10 6.5832e+015
+221 177 6.57832e+015
+382 412 6.56915e+015
+426 182 6.56884e+015
+444 452 6.56483e+015
+210 445 6.56294e+015
+272 53 6.55319e+015
+363 181 6.53898e+015
+338 165 6.53454e+015
+64 371 6.52289e+015
+473 63 6.52213e+015
+245 293 6.52043e+015
+44 97 6.51913e+015
+90 255 6.50182e+015
+275 329 6.48812e+015
+280 50 6.47718e+015
+279 368 6.47635e+015
+133 93 6.4702e+015
+489 43 6.45933e+015
+436 304 6.43255e+015
+422 324 6.4303e+015
+458 4 6.4293e+015
+135 129 6.42034e+015
+413 299 6.40755e+015
+269 67 6.39429e+015
+338 473 6.38928e+015
+509 8 6.38913e+015
+338 391 6.38703e+015
+68 337 6.37664e+015
+127 187 6.3715e+015
+138 98 6.36342e+015
+36 201 6.36182e+015
+253 10 6.35349e+015
+231 126 6.34911e+015
+113 3 6.32761e+015
+513 262 6.31281e+015
+350 145 6.31023e+015
+371 90 6.29832e+015
+329 65 6.2959e+015
+219 107 6.2933e+015
+42 339 6.27533e+015
+417 84 6.27266e+015
+448 168 6.26449e+015
+192 219 6.25424e+015
+490 59 6.25085e+015
+561 224 6.24544e+015
+393 216 6.23818e+015
+71 96 6.23753e+015
+182 380 6.21679e+015
+544 218 6.21292e+015
+393 164 6.20797e+015
+47 133 6.1957e+015
+341 109 6.19143e+015
+359 167 6.18128e+015
+63 218 6.17756e+015
+435 90 6.16489e+015
+346 298 6.16154e+015
+297 331 6.16008e+015
+268 52 6.15889e+015
+131 148 6.1465e+015
+408 45 6.14412e+015
+328 297 6.12901e+015
+346 392 6.12251e+015
+416 44 6.10369e+015
+420 7 6.09985e+015
+528 189 6.09957e+015
+513 296 6.09857e+015
+156 94 6.08745e+015
+301 103 6.07663e+015
+306 363 6.06247e+015
+456 375 6.05553e+015
+249 219 6.05549e+015
+117 76 6.05387e+015
+357 282 6.05355e+015
+273 296 6.05265e+015
+34 268 6.02432e+015
+190 205 6.01907e+015
+517 58 6.01128e+015
+418 164 6.01113e+015
+302 178 6.00465e+015
+479 293 6.00458e+015
+191 55 6.00276e+015
+325 295 5.99925e+015
+191 358 5.99175e+015
+389 140 5.99028e+015
+290 165 5.9868e+015
+414 5 5.98628e+015
+457 43 5.98365e+015
+341 123 5.9793e+015
+305 193 5.9665e+015
+85 214 5.96454e+015
+478 13 5.96428e+015
+142 2 5.95342e+015
+397 265 5.9529e+015
+539 405 5.93841e+015
+42 24 5.9381e+015
+298 275 5.92106e+015
+547 163 5.90955e+015
+248 316 5.90017e+015
+387 15 5.90005e+015
+389 97 5.89798e+015
+129 95 5.89617e+015
+375 4 5.89089e+015
+31 135 5.88467e+015
+249 423 5.87827e+015
+418 80 5.87699e+015
+132 132 5.86349e+015
+183 19 5.86146e+015
+111 42 5.8614e+015
+125 262 5.85544e+015
+373 393 5.83351e+015
+129 128 5.83093e+015
+79 197 5.82602e+015
+460 44 5.81601e+015
+263 403 5.81356e+015
+360 217 5.77111e+015
+576 14 5.76805e+015
+209 16 5.76221e+015
+510 83 5.76006e+015
+542 100 5.75559e+015
+198 131 5.75434e+015
+298 69 5.75226e+015
+359 143 5.7363e+015
+223 218 5.73542e+015
+476 341 5.73275e+015
+56 221 5.73123e+015
+558 462 5.72339e+015
+573 141 5.71706e+015
+259 35 5.71149e+015
+571 161 5.70557e+015
+129 168 5.70097e+015
+160 183 5.69684e+015
+101 164 5.69603e+015
+88 209 5.69244e+015
+424 203 5.68892e+015
+380 122 5.68586e+015
+46 355 5.68177e+015
+578 42 5.68138e+015
+113 212 5.67606e+015
+84 476 5.67335e+015
+275 319 5.66558e+015
+116 428 5.6478e+015
+538 96 5.64663e+015
+449 445 5.64507e+015
+549 58 5.64012e+015
+281 222 5.62712e+015
+480 82 5.6126e+015
+38 168 5.59914e+015
+80 40 5.59095e+015
+543 457 5.59089e+015
+260 71 5.589e+015
+372 81 5.58575e+015
+434 225 5.57885e+015
+217 36 5.57726e+015
+172 94 5.5766e+015
+102 235 5.55404e+015
+221 432 5.54533e+015
+519 263 5.54405e+015
+59 78 5.53995e+015
+138 57 5.53708e+015
+282 394 5.53631e+015
+367 300 5.517e+015
+146 160 5.48477e+015
+471 83 5.47617e+015
+432 303 5.47162e+015
+573 422 5.46666e+015
+166 239 5.46229e+015
+299 178 5.45874e+015
+483 176 5.45336e+015
+257 250 5.44888e+015
+436 320 5.44139e+015
+376 119 5.44022e+015
+500 22 5.42999e+015
+571 450 5.4219e+015
+370 106 5.41682e+015
+364 258 5.41628e+015
+513 120 5.41486e+015
+39 355 5.40966e+015
+256 35 5.4096e+015
+444 355 5.40698e+015
+193 16 5.40257e+015
+325 91 5.39677e+015
+363 102 5.39306e+015
+186 98 5.37598e+015
+160 111 5.37256e+015
+157 236 5.37085e+015
+387 126 5.37051e+015
+475 246 5.36724e+015
+441 239 5.36025e+015
+191 146 5.34973e+015
+498 225 5.33038e+015
+430 45 5.32981e+015
+471 212 5.32974e+015
+156 317 5.32359e+015
+330 89 5.31551e+015
+53 221 5.31099e+015
+58 290 5.30956e+015
+151 114 5.30477e+015
+354 25 5.3026e+015
+96 79 5.30208e+015
+30 97 5.29583e+015
+146 21 5.29538e+015
+178 18 5.28748e+015
+329 12 5.27487e+015
+292 30 5.25825e+015
+525 172 5.25773e+015
+154 114 5.25525e+015
+301 106 5.25038e+015
+386 326 5.24971e+015
+502 160 5.23989e+015
+163 96 5.22703e+015
+33 236 5.22129e+015
+214 124 5.21589e+015
+429 223 5.21311e+015
+433 241 5.1937e+015
+327 182 5.18875e+015
+79 474 5.18486e+015
+307 449 5.18123e+015
+106 77 5.17986e+015
+317 147 5.17931e+015
+358 291 5.17904e+015
+57 372 5.17685e+015
+297 420 5.16073e+015
+385 162 5.16036e+015
+374 240 5.15436e+015
+120 446 5.14988e+015
+332 106 5.14968e+015
+328 294 5.14392e+015
+470 122 5.14324e+015
+561 320 5.13931e+015
+584 38 5.13735e+015
+525 185 5.13697e+015
+121 48 5.13558e+015
+268 289 5.1354e+015
+379 106 5.12489e+015
+130 255 5.12209e+015
+110 168 5.11238e+015
+258 161 5.11014e+015
+163 208 5.09154e+015
+66 45 5.07835e+015
+569 39 5.07768e+015
+509 1 5.07074e+015
+538 186 5.0686e+015
+144 17 5.06712e+015
+413 44 5.05142e+015
+57 254 5.04528e+015
+401 184 5.04247e+015
+435 281 5.03255e+015
+220 100 5.02315e+015
+123 188 5.02168e+015
+287 396 5.01839e+015
+486 43 5.01453e+015
+430 89 5.00812e+015
+291 50 5.00633e+015
+360 220 5.00528e+015
+482 332 5.00196e+015
+379 337 4.9959e+015
+380 180 4.99174e+015
+108 109 4.98623e+015
+37 288 4.9826e+015
+345 274 4.97399e+015
+248 313 4.97233e+015
+84 145 4.97173e+015
+358 63 4.96779e+015
+418 283 4.96108e+015
+486 4 4.9595e+015
+349 87 4.95681e+015
+39 83 4.95104e+015
+217 146 4.94985e+015
+453 102 4.94813e+015
+104 221 4.94412e+015
+120 4 4.94183e+015
+107 183 4.93778e+015
+395 318 4.92616e+015
+157 56 4.92119e+015
+132 129 4.92027e+015
+565 463 4.91784e+015
+90 376 4.91163e+015
+536 459 4.90909e+015
+377 318 4.90793e+015
+547 182 4.90434e+015
+161 20 4.90167e+015
+49 255 4.89205e+015
+542 59 4.88265e+015
+87 369 4.88128e+015
+349 298 4.86501e+015
+561 227 4.84635e+015
+168 180 4.84553e+015
+188 264 4.8446e+015
+123 162 4.84361e+015
+533 61 4.84303e+015
+538 121 4.83638e+015
+76 237 4.82309e+015
+569 383 4.81473e+015
+213 436 4.81438e+015
+559 80 4.81234e+015
+539 458 4.79117e+015
+70 131 4.78943e+015
+462 221 4.77701e+015
+144 6 4.7746e+015
+196 193 4.7592e+015
+305 104 4.75394e+015
+83 73 4.75284e+015
+244 168 4.75028e+015
+130 72 4.74945e+015
+133 237 4.7469e+015
+449 178 4.74683e+015
+164 20 4.73789e+015
+118 425 4.73387e+015
+210 36 4.73307e+015
+356 255 4.7194e+015
+431 85 4.71007e+015
+173 116 4.69812e+015
+263 392 4.69693e+015
+378 340 4.69021e+015
+384 258 4.68125e+015
+500 265 4.67802e+015
+217 208 4.66874e+015
+50 62 4.66769e+015
+493 181 4.66751e+015
+394 161 4.65813e+015
+149 2 4.65687e+015
+469 141 4.63497e+015
+517 202 4.6339e+015
+390 326 4.6269e+015
+222 114 4.61319e+015
+69 420 4.60856e+015
+107 428 4.60577e+015
+291 265 4.60234e+015
+149 40 4.59826e+015
+78 270 4.5979e+015
+560 272 4.59559e+015
+402 6 4.59179e+015
+364 200 4.58259e+015
+299 398 4.58251e+015
+448 339 4.58027e+015
+87 364 4.57646e+015
+404 181 4.57527e+015
+424 4 4.57359e+015
+113 95 4.57002e+015
+271 182 4.56689e+015
+214 449 4.56067e+015
+229 265 4.55456e+015
+73 164 4.55434e+015
+363 358 4.55024e+015
+473 202 4.54792e+015
+110 264 4.54171e+015
+44 474 4.53142e+015
+472 42 4.52815e+015
+309 441 4.51498e+015
+104 27 4.51343e+015
+32 29 4.51016e+015
+129 238 4.49901e+015
+412 470 4.49605e+015
+210 33 4.48423e+015
+444 352 4.47354e+015
+599 364 4.46812e+015
+480 451 4.4648e+015
+166 115 4.46455e+015
+274 215 4.46325e+015
+444 119 4.45967e+015
+152 196 4.4595e+015
+332 202 4.45758e+015
+66 252 4.45557e+015
+166 110 4.44405e+015
+187 289 4.43242e+015
+431 82 4.42878e+015
+242 419 4.41175e+015
+433 277 4.41065e+015
+261 218 4.4088e+015
+277 140 4.40486e+015
+44 407 4.40257e+015
+346 48 4.39113e+015
+552 384 4.39018e+015
+437 391 4.38905e+015
+64 8 4.38783e+015
+449 139 4.38568e+015
+573 405 4.38024e+015
+191 312 4.37099e+015
+290 137 4.37072e+015
+242 190 4.36532e+015
+474 243 4.36493e+015
+168 149 4.36381e+015
+578 51 4.35895e+015
+289 349 4.35708e+015
+20 217 4.35392e+015
+182 131 4.3451e+015
+296 297 4.33779e+015
+376 181 4.3256e+015
+484 82 4.32224e+015
+264 311 4.31475e+015
+279 364 4.31386e+015
+217 176 4.31055e+015
+309 32 4.30811e+015
+163 315 4.30804e+015
+109 59 4.30643e+015
+188 145 4.3062e+015
+390 162 4.2862e+015
+254 75 4.28613e+015
+297 14 4.2818e+015
+198 111 4.28164e+015
+246 106 4.27638e+015
+259 368 4.27209e+015
+130 428 4.26443e+015
+56 78 4.2634e+015
+95 94 4.26128e+015
+104 304 4.25942e+015
+406 80 4.25875e+015
+270 185 4.25808e+015
+245 14 4.25631e+015
+260 142 4.25441e+015
+85 60 4.25421e+015
+436 388 4.24917e+015
+20 317 4.24759e+015
+131 476 4.24436e+015
+455 59 4.24205e+015
+384 354 4.238e+015
+71 409 4.23305e+015
+282 199 4.23039e+015
+239 74 4.22794e+015
+372 116 4.22738e+015
+170 112 4.22703e+015
+277 137 4.22119e+015
+259 272 4.21187e+015
+432 269 4.21096e+015
+287 343 4.204e+015
+318 385 4.20327e+015
+399 168 4.20089e+015
+260 250 4.19986e+015
+85 310 4.19876e+015
+203 257 4.19417e+015
+463 40 4.19056e+015
+20 64 4.18952e+015
+530 38 4.18618e+015
+570 182 4.18582e+015
+463 23 4.1766e+015
+514 381 4.17366e+015
+459 303 4.16811e+015
+432 318 4.16696e+015
+265 15 4.16037e+015
+153 218 4.15397e+015
+106 98 4.14133e+015
+359 53 4.14111e+015
+9 476 4.13796e+015
+505 381 4.13414e+015
+405 42 4.13335e+015
+486 140 4.13003e+015
+35 134 4.12657e+015
+92 59 4.12632e+015
+354 295 4.1169e+015
+281 419 4.11332e+015
+535 18 4.10601e+015
+297 182 4.09889e+015
+86 197 4.09466e+015
+41 136 4.08723e+015
+504 263 4.07897e+015
+522 425 4.07422e+015
+486 376 4.06893e+015
+441 98 4.06203e+015
+293 312 4.0577e+015
+109 325 4.05554e+015
+342 463 4.05547e+015
+395 105 4.05134e+015
+503 164 4.05043e+015
+449 437 4.04709e+015
+174 166 4.04692e+015
+376 83 4.04326e+015
+186 108 4.03917e+015
+297 410 4.03555e+015
+483 143 4.03531e+015
+280 132 4.03357e+015
+435 163 4.03156e+015
+495 455 4.0307e+015
+391 449 4.02968e+015
+528 192 4.02541e+015
+278 392 4.02326e+015
+104 164 4.01855e+015
+444 122 4.0104e+015
+148 397 4.00963e+015
+465 356 4.0096e+015
+163 114 4.00859e+015
+237 418 4.00768e+015
+452 83 4.00762e+015
+85 180 4.00711e+015
+151 111 3.99865e+015
+328 353 3.99723e+015
+294 269 3.99324e+015
+419 53 3.99244e+015
+467 24 3.99174e+015
+528 161 3.99004e+015
+179 274 3.9878e+015
+180 292 3.98684e+015
+279 197 3.98631e+015
+429 122 3.98424e+015
+10 79 3.98272e+015
+378 125 3.97584e+015
+160 96 3.97397e+015
+118 115 3.97042e+015
+398 357 3.97004e+015
+358 241 3.96829e+015
+192 189 3.96651e+015
+480 173 3.96641e+015
+592 18 3.96441e+015
+282 135 3.96149e+015
+550 223 3.95919e+015
+294 333 3.94325e+015
+194 311 3.93585e+015
+507 60 3.93419e+015
+541 41 3.93399e+015
+49 80 3.92492e+015
+39 24 3.92491e+015
+451 86 3.92468e+015
+217 128 3.92416e+015
+110 341 3.92171e+015
+275 197 3.91879e+015
+271 241 3.91473e+015
+425 48 3.9118e+015
+418 258 3.91123e+015
+43 122 3.90873e+015
+294 88 3.90442e+015
+338 263 3.90108e+015
+512 202 3.89934e+015
+275 360 3.88728e+015
+166 312 3.88389e+015
+367 1 3.87684e+015
+414 252 3.86786e+015
+562 71 3.86665e+015
+249 192 3.86653e+015
+18 236 3.86207e+015
+351 270 3.85803e+015
+168 291 3.8575e+015
+49 159 3.84962e+015
+417 300 3.84794e+015
+383 146 3.84417e+015
+122 127 3.84045e+015
+471 268 3.83809e+015
+150 231 3.83476e+015
+464 101 3.83354e+015
+145 187 3.82291e+015
+113 176 3.82272e+015
+546 140 3.81958e+015
+36 299 3.81833e+015
+332 334 3.81537e+015
+95 20 3.81157e+015
+381 162 3.81091e+015
+507 203 3.81019e+015
+544 91 3.80651e+015
+57 331 3.8016e+015
+265 260 3.80116e+015
+448 401 3.79827e+015
+332 415 3.79506e+015
+2 156 3.79171e+015
+358 161 3.79009e+015
+532 243 3.78247e+015
+367 337 3.78073e+015
+58 71 3.78047e+015
+512 43 3.77729e+015
+229 16 3.77537e+015
+343 198 3.77449e+015
+438 163 3.77417e+015
+531 161 3.77351e+015
+512 95 3.76697e+015
+211 153 3.76534e+015
+342 37 3.76389e+015
+192 172 3.76122e+015
+247 34 3.76002e+015
+225 50 3.75795e+015
+436 182 3.75688e+015
+45 136 3.75248e+015
+433 381 3.74897e+015
+447 350 3.73552e+015
+217 97 3.7334e+015
+178 329 3.73149e+015
+197 148 3.72702e+015
+362 361 3.72668e+015
+324 259 3.72636e+015
+190 349 3.72474e+015
+25 132 3.72371e+015
+538 39 3.72128e+015
+16 434 3.7152e+015
+182 344 3.71512e+015
+528 396 3.71222e+015
+575 39 3.71201e+015
+157 306 3.70505e+015
+488 83 3.70464e+015
+500 474 3.70042e+015
+406 163 3.69373e+015
+97 148 3.69277e+015
+266 71 3.69274e+015
+204 435 3.69175e+015
+530 221 3.68182e+015
+251 153 3.67974e+015
+440 121 3.67953e+015
+187 308 3.67608e+015
+571 454 3.67545e+015
+330 259 3.67331e+015
+575 126 3.67169e+015
+161 238 3.67081e+015
+334 218 3.66822e+015
+287 52 3.66684e+015
+73 186 3.66551e+015
+387 167 3.66515e+015
+450 22 3.66317e+015
+90 275 3.6563e+015
+331 142 3.65548e+015
+561 463 3.65501e+015
+390 18 3.65273e+015
+53 357 3.65066e+015
+564 224 3.64663e+015
+163 165 3.64503e+015
+269 61 3.64082e+015
+50 452 3.63631e+015
+148 112 3.63212e+015
+256 181 3.63148e+015
+162 134 3.62862e+015
+532 398 3.62787e+015
+570 422 3.61837e+015
+469 203 3.61784e+015
+129 310 3.61234e+015
+329 213 3.61062e+015
+190 277 3.60986e+015
+286 443 3.60292e+015
+367 303 3.59959e+015
+236 222 3.59431e+015
+434 156 3.59112e+015
+401 181 3.58915e+015
+302 189 3.58734e+015
+333 258 3.58615e+015
+344 165 3.58331e+015
+190 324 3.58292e+015
+39 239 3.57791e+015
+88 252 3.55664e+015
+316 166 3.55357e+015
+326 14 3.55326e+015
+118 96 3.54883e+015
+274 77 3.54561e+015
+561 61 3.54523e+015
+56 145 3.54484e+015
+87 372 3.544e+015
+533 341 3.54206e+015
+118 181 3.53874e+015
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_5_7.txt b/test_data/harriscorners/hc_msc_3.00_0.04_5_7.txt
new file mode 100644
index 0000000..8d67336
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_5_7.txt
@@ -0,0 +1,1297 @@
+1296
+244 94 1.71634e+017
+498 1 1.18825e+017
+421 180 9.36654e+016
+81 29 9.24614e+016
+237 20 8.97759e+016
+130 26 8.90595e+016
+272 366 8.39073e+016
+240 92 7.67237e+016
+424 177 7.16344e+016
+121 44 7.12838e+016
+75 257 6.60503e+016
+282 113 6.31336e+016
+80 4 6.1301e+016
+342 9 6.01663e+016
+261 298 5.99472e+016
+299 53 5.97594e+016
+509 124 5.92795e+016
+152 223 5.69227e+016
+363 400 5.67849e+016
+30 8 5.58886e+016
+424 322 5.57206e+016
+130 37 5.54974e+016
+83 77 5.46018e+016
+199 18 5.44919e+016
+542 14 5.25799e+016
+129 1 5.22786e+016
+330 128 5.13478e+016
+485 338 4.97401e+016
+138 204 4.95481e+016
+213 57 4.94543e+016
+253 12 4.93647e+016
+26 9 4.92854e+016
+195 58 4.92834e+016
+34 139 4.91835e+016
+483 178 4.87234e+016
+528 24 4.85752e+016
+37 63 4.80184e+016
+361 294 4.77804e+016
+543 365 4.74466e+016
+525 24 4.67589e+016
+102 222 4.66399e+016
+458 279 4.63903e+016
+482 22 4.62271e+016
+385 10 4.58272e+016
+476 261 4.571e+016
+302 184 4.56179e+016
+34 8 4.52126e+016
+156 1 4.5114e+016
+103 60 4.50344e+016
+320 314 4.44035e+016
+175 110 4.43659e+016
+477 22 4.41942e+016
+65 344 4.37888e+016
+77 3 4.37814e+016
+55 30 4.3383e+016
+321 225 4.33318e+016
+361 395 4.31306e+016
+295 15 4.289e+016
+58 218 4.25782e+016
+135 213 4.23628e+016
+339 10 4.23472e+016
+428 2 4.23333e+016
+126 164 4.22744e+016
+36 145 4.21654e+016
+196 127 4.17182e+016
+389 10 4.14452e+016
+554 41 4.14181e+016
+464 393 4.09885e+016
+243 201 4.0947e+016
+510 16 4.08494e+016
+400 263 4.05493e+016
+221 37 4.02878e+016
+258 385 3.99684e+016
+61 217 3.9964e+016
+302 181 3.9771e+016
+519 60 3.96577e+016
+359 129 3.95288e+016
+528 20 3.94321e+016
+115 43 3.89012e+016
+164 215 3.88334e+016
+391 294 3.86609e+016
+71 26 3.85257e+016
+523 62 3.85228e+016
+241 70 3.81524e+016
+436 68 3.76907e+016
+43 26 3.74828e+016
+477 19 3.72443e+016
+469 239 3.71014e+016
+528 102 3.70197e+016
+211 436 3.69193e+016
+576 16 3.68946e+016
+209 20 3.67787e+016
+123 186 3.66369e+016
+126 254 3.6476e+016
+451 338 3.59772e+016
+215 71 3.59507e+016
+539 14 3.57183e+016
+449 299 3.57175e+016
+224 37 3.56694e+016
+33 100 3.56392e+016
+506 16 3.56333e+016
+512 342 3.55679e+016
+359 334 3.55184e+016
+427 118 3.54997e+016
+447 261 3.54803e+016
+413 255 3.53797e+016
+12 217 3.5344e+016
+223 420 3.52862e+016
+262 441 3.5013e+016
+364 250 3.49004e+016
+543 167 3.48545e+016
+416 8 3.48447e+016
+210 450 3.46286e+016
+389 60 3.43815e+016
+47 26 3.40937e+016
+433 112 3.39469e+016
+178 110 3.38575e+016
+55 290 3.38504e+016
+64 319 3.37751e+016
+367 144 3.37161e+016
+511 166 3.35903e+016
+364 142 3.34516e+016
+403 120 3.34483e+016
+447 296 3.33621e+016
+511 169 3.32016e+016
+345 339 3.3138e+016
+470 421 3.31276e+016
+107 44 3.30835e+016
+480 19 3.28975e+016
+383 6 3.27401e+016
+58 6 3.2684e+016
+41 217 3.24344e+016
+328 296 3.23828e+016
+123 197 3.22981e+016
+92 213 3.2222e+016
+390 143 3.21241e+016
+490 1 3.21222e+016
+107 27 3.19632e+016
+111 240 3.19401e+016
+342 338 3.1807e+016
+79 79 3.17152e+016
+490 139 3.15514e+016
+7 10 3.15054e+016
+126 364 3.14261e+016
+129 75 3.14175e+016
+4 46 3.14103e+016
+47 98 3.13656e+016
+424 45 3.13304e+016
+4 10 3.12738e+016
+143 324 3.12371e+016
+357 259 3.11228e+016
+60 40 3.10946e+016
+417 438 3.10606e+016
+272 280 3.10118e+016
+480 296 3.09729e+016
+225 181 3.09665e+016
+247 206 3.09459e+016
+545 59 3.08993e+016
+409 65 3.08974e+016
+448 398 3.08935e+016
+309 370 3.08468e+016
+486 58 3.06577e+016
+182 398 3.0646e+016
+386 178 3.05527e+016
+453 204 3.02726e+016
+183 36 3.01533e+016
+175 113 3.01167e+016
+361 251 3.01157e+016
+419 8 3.00019e+016
+196 124 2.99932e+016
+158 74 2.99296e+016
+352 321 2.99017e+016
+313 148 2.97286e+016
+226 421 2.97265e+016
+302 215 2.97131e+016
+557 39 2.96054e+016
+387 220 2.9532e+016
+155 235 2.94357e+016
+48 151 2.94025e+016
+222 181 2.93351e+016
+61 203 2.90127e+016
+145 6 2.8815e+016
+562 478 2.87192e+016
+255 139 2.86797e+016
+404 183 2.86475e+016
+16 217 2.85126e+016
+211 185 2.84488e+016
+208 222 2.84078e+016
+137 174 2.83235e+016
+174 40 2.81666e+016
+32 270 2.81484e+016
+326 141 2.80129e+016
+68 476 2.80056e+016
+546 41 2.79654e+016
+302 165 2.79533e+016
+301 105 2.78838e+016
+87 254 2.78628e+016
+74 25 2.77758e+016
+88 148 2.77346e+016
+394 65 2.77062e+016
+36 173 2.76491e+016
+423 332 2.73868e+016
+413 163 2.73228e+016
+410 353 2.72843e+016
+160 142 2.72624e+016
+293 26 2.7193e+016
+329 258 2.71442e+016
+359 220 2.71329e+016
+408 183 2.70744e+016
+499 159 2.70501e+016
+534 185 2.70369e+016
+10 101 2.7031e+016
+73 6 2.69288e+016
+165 240 2.6876e+016
+206 449 2.68339e+016
+66 216 2.68057e+016
+139 109 2.67925e+016
+265 445 2.66818e+016
+449 204 2.66376e+016
+150 306 2.66371e+016
+101 198 2.64915e+016
+220 17 2.64828e+016
+120 185 2.64603e+016
+223 433 2.63973e+016
+112 392 2.63582e+016
+278 220 2.63258e+016
+132 75 2.63235e+016
+420 45 2.63203e+016
+100 79 2.62509e+016
+514 346 2.62078e+016
+512 221 2.6177e+016
+310 6 2.61487e+016
+365 300 2.61377e+016
+269 70 2.61294e+016
+343 108 2.6126e+016
+243 166 2.61097e+016
+284 402 2.61065e+016
+260 223 2.60678e+016
+246 144 2.60219e+016
+379 5 2.59923e+016
+229 37 2.59373e+016
+361 259 2.57661e+016
+103 77 2.57067e+016
+85 148 2.56117e+016
+143 311 2.55785e+016
+508 454 2.54188e+016
+260 220 2.53934e+016
+305 439 2.52446e+016
+107 39 2.523e+016
+286 209 2.51697e+016
+528 186 2.51386e+016
+83 134 2.51373e+016
+361 142 2.51286e+016
+236 348 2.50892e+016
+457 43 2.49552e+016
+477 5 2.49123e+016
+169 56 2.49071e+016
+40 296 2.48844e+016
+549 41 2.48777e+016
+65 235 2.48577e+016
+202 313 2.48486e+016
+128 187 2.48477e+016
+473 5 2.48298e+016
+160 139 2.4802e+016
+94 6 2.47917e+016
+452 374 2.47874e+016
+252 423 2.47841e+016
+430 147 2.47473e+016
+234 161 2.47292e+016
+228 291 2.47278e+016
+233 345 2.47205e+016
+232 127 2.47157e+016
+3 65 2.46991e+016
+261 202 2.46181e+016
+325 341 2.45956e+016
+392 218 2.45073e+016
+516 75 2.44791e+016
+168 288 2.44609e+016
+343 264 2.44452e+016
+60 184 2.443e+016
+314 84 2.44165e+016
+565 42 2.44007e+016
+256 151 2.43883e+016
+91 197 2.43748e+016
+389 164 2.43361e+016
+280 368 2.42916e+016
+220 14 2.42591e+016
+415 22 2.42204e+016
+365 105 2.42112e+016
+526 38 2.41777e+016
+172 19 2.41458e+016
+301 205 2.40926e+016
+168 326 2.40008e+016
+163 110 2.39532e+016
+248 399 2.39517e+016
+165 327 2.39516e+016
+104 3 2.39046e+016
+191 127 2.37754e+016
+131 132 2.37698e+016
+410 163 2.3758e+016
+406 198 2.37033e+016
+34 267 2.366e+016
+371 161 2.35793e+016
+251 365 2.3522e+016
+436 397 2.34992e+016
+534 242 2.34408e+016
+263 402 2.3318e+016
+462 43 2.32763e+016
+493 139 2.32457e+016
+48 10 2.31471e+016
+544 457 2.30159e+016
+153 196 2.29993e+016
+388 16 2.29852e+016
+441 24 2.29773e+016
+332 294 2.28146e+016
+402 266 2.28057e+016
+552 381 2.26706e+016
+460 267 2.25876e+016
+521 184 2.25332e+016
+97 448 2.2531e+016
+133 96 2.24876e+016
+355 127 2.24021e+016
+437 304 2.23814e+016
+548 162 2.23455e+016
+166 110 2.23286e+016
+111 169 2.23085e+016
+29 30 2.22542e+016
+169 19 2.2237e+016
+385 295 2.21533e+016
+326 165 2.21496e+016
+208 225 2.20467e+016
+483 329 2.20441e+016
+326 89 2.2035e+016
+512 100 2.1995e+016
+389 21 2.19226e+016
+529 38 2.18912e+016
+24 62 2.18904e+016
+380 354 2.18655e+016
+172 56 2.18426e+016
+139 21 2.18058e+016
+112 344 2.175e+016
+125 259 2.17331e+016
+174 311 2.17123e+016
+259 165 2.16716e+016
+189 218 2.16509e+016
+453 207 2.16414e+016
+498 225 2.15378e+016
+45 339 2.14903e+016
+389 65 2.1475e+016
+420 48 2.14733e+016
+541 124 2.14655e+016
+340 108 2.144e+016
+459 264 2.14121e+016
+528 61 2.14058e+016
+218 106 2.13802e+016
+566 160 2.13609e+016
+287 297 2.13369e+016
+513 78 2.13299e+016
+423 48 2.13253e+016
+545 2 2.12953e+016
+513 262 2.12913e+016
+102 360 2.12747e+016
+399 266 2.12232e+016
+524 186 2.11523e+016
+362 7 2.11446e+016
+346 350 2.11073e+016
+247 402 2.10884e+016
+206 436 2.10771e+016
+162 277 2.10543e+016
+85 1 2.10295e+016
+273 181 2.10209e+016
+176 260 2.10199e+016
+448 166 2.09708e+016
+329 10 2.09543e+016
+157 198 2.09353e+016
+479 15 2.09319e+016
+404 186 2.09179e+016
+217 147 2.08788e+016
+466 197 2.08769e+016
+140 182 2.0865e+016
+270 291 2.08503e+016
+208 15 2.08433e+016
+215 280 2.08121e+016
+168 196 2.08042e+016
+166 98 2.07818e+016
+121 52 2.07054e+016
+197 84 2.06407e+016
+412 45 2.06379e+016
+69 149 2.05741e+016
+205 16 2.05298e+016
+54 222 2.04989e+016
+377 120 2.04919e+016
+205 19 2.04718e+016
+365 6 2.04505e+016
+220 148 2.04437e+016
+330 141 2.03915e+016
+431 318 2.03836e+016
+63 60 2.0321e+016
+346 240 2.02645e+016
+561 225 2.01985e+016
+533 20 2.01194e+016
+557 463 2.00953e+016
+436 301 2.00951e+016
+280 365 2.00903e+016
+60 134 2.00737e+016
+426 376 2.00504e+016
+164 73 2.00364e+016
+525 424 2.00218e+016
+446 7 2.0015e+016
+508 6 2.00017e+016
+210 35 1.99768e+016
+355 254 1.99522e+016
+282 72 1.99478e+016
+425 4 1.99013e+016
+378 67 1.98432e+016
+110 135 1.98027e+016
+298 274 1.97979e+016
+166 107 1.97074e+016
+134 130 1.97008e+016
+260 236 1.96882e+016
+488 44 1.96409e+016
+79 40 1.96377e+016
+279 129 1.95775e+016
+165 179 1.95276e+016
+276 353 1.94523e+016
+102 164 1.9429e+016
+105 222 1.94136e+016
+165 182 1.94026e+016
+343 122 1.93986e+016
+100 5 1.93877e+016
+48 155 1.93376e+016
+274 132 1.92764e+016
+121 49 1.92569e+016
+485 44 1.92541e+016
+455 58 1.9223e+016
+455 85 1.92031e+016
+354 269 1.91978e+016
+265 30 1.91888e+016
+42 81 1.91343e+016
+481 84 1.91264e+016
+112 43 1.91097e+016
+444 118 1.90852e+016
+165 357 1.9078e+016
+329 90 1.90456e+016
+483 363 1.90434e+016
+283 198 1.90378e+016
+438 339 1.9012e+016
+432 276 1.89442e+016
+56 66 1.8937e+016
+377 354 1.8916e+016
+52 42 1.89119e+016
+417 165 1.88779e+016
+288 165 1.88114e+016
+145 16 1.88004e+016
+385 244 1.87804e+016
+562 461 1.8746e+016
+357 166 1.86962e+016
+46 81 1.86938e+016
+575 178 1.86807e+016
+552 378 1.86479e+016
+334 90 1.85883e+016
+414 65 1.85872e+016
+530 144 1.85824e+016
+394 163 1.85693e+016
+324 145 1.8531e+016
+21 62 1.84711e+016
+191 215 1.84566e+016
+236 72 1.84437e+016
+325 426 1.84202e+016
+269 53 1.83866e+016
+193 218 1.83742e+016
+268 295 1.83653e+016
+190 360 1.83248e+016
+215 277 1.83023e+016
+134 127 1.82999e+016
+176 165 1.828e+016
+300 264 1.82069e+016
+91 254 1.81795e+016
+45 218 1.81596e+016
+340 163 1.81169e+016
+418 82 1.80527e+016
+175 20 1.80502e+016
+164 313 1.80441e+016
+222 112 1.80104e+016
+346 179 1.79974e+016
+429 44 1.79745e+016
+85 73 1.79721e+016
+168 181 1.7917e+016
+539 457 1.79121e+016
+256 147 1.79051e+016
+392 48 1.78906e+016
+223 218 1.78899e+016
+434 89 1.78546e+016
+248 316 1.78498e+016
+544 7 1.78338e+016
+516 17 1.78332e+016
+498 80 1.78193e+016
+88 368 1.78092e+016
+296 332 1.77847e+016
+561 475 1.77761e+016
+283 395 1.77257e+016
+46 355 1.77091e+016
+331 131 1.77063e+016
+569 161 1.76901e+016
+57 365 1.76875e+016
+111 110 1.76873e+016
+493 81 1.76737e+016
+204 310 1.76517e+016
+50 288 1.76515e+016
+467 140 1.76111e+016
+437 319 1.76061e+016
+271 167 1.75869e+016
+329 13 1.755e+016
+273 316 1.75306e+016
+110 94 1.75228e+016
+171 311 1.74951e+016
+283 51 1.74207e+016
+173 239 1.74139e+016
+138 178 1.74085e+016
+292 88 1.74043e+016
+482 367 1.74021e+016
+126 95 1.7385e+016
+482 174 1.73806e+016
+324 294 1.73289e+016
+31 235 1.73257e+016
+44 98 1.72257e+016
+174 95 1.72214e+016
+279 51 1.72146e+016
+322 427 1.7206e+016
+501 361 1.71597e+016
+298 179 1.71565e+016
+66 26 1.71261e+016
+110 179 1.7109e+016
+379 337 1.70979e+016
+273 220 1.70834e+016
+539 98 1.70758e+016
+232 199 1.70405e+016
+575 13 1.70277e+016
+421 165 1.70138e+016
+304 190 1.7005e+016
+247 219 1.6952e+016
+511 174 1.69498e+016
+541 128 1.69357e+016
+379 123 1.69126e+016
+375 5 1.68637e+016
+442 239 1.68589e+016
+162 169 1.68414e+016
+227 186 1.68394e+016
+142 393 1.68305e+016
+132 71 1.68286e+016
+578 43 1.67912e+016
+486 139 1.67757e+016
+179 165 1.6756e+016
+58 75 1.67392e+016
+538 405 1.6699e+016
+37 169 1.66832e+016
+487 263 1.66694e+016
+562 464 1.66398e+016
+162 96 1.66379e+016
+335 437 1.6625e+016
+55 42 1.66066e+016
+237 417 1.66031e+016
+145 161 1.65982e+016
+445 123 1.65916e+016
+528 222 1.65913e+016
+281 221 1.65908e+016
+276 331 1.65812e+016
+124 271 1.657e+016
+297 69 1.65615e+016
+88 365 1.65423e+016
+218 98 1.65398e+016
+448 218 1.65375e+016
+430 85 1.65375e+016
+196 190 1.65284e+016
+412 298 1.65283e+016
+541 209 1.65214e+016
+220 290 1.65028e+016
+403 277 1.64936e+016
+241 420 1.64657e+016
+521 264 1.6461e+016
+109 98 1.64549e+016
+190 350 1.64482e+016
+87 197 1.64074e+016
+283 391 1.63337e+016
+278 143 1.62476e+016
+118 115 1.62196e+016
+276 179 1.62139e+016
+378 107 1.62103e+016
+346 297 1.62041e+016
+392 160 1.6202e+016
+373 83 1.61985e+016
+508 2 1.61906e+016
+46 133 1.61905e+016
+86 61 1.61751e+016
+407 45 1.6162e+016
+541 133 1.60945e+016
+117 426 1.60651e+016
+276 328 1.60425e+016
+523 346 1.6024e+016
+87 144 1.59936e+016
+469 121 1.59926e+016
+221 151 1.5989e+016
+448 444 1.59656e+016
+339 166 1.59619e+016
+541 59 1.59518e+016
+53 63 1.59481e+016
+250 34 1.59415e+016
+42 10 1.59387e+016
+346 276 1.59331e+016
+523 122 1.59157e+016
+250 220 1.58922e+016
+171 95 1.58893e+016
+170 240 1.58661e+016
+35 30 1.58405e+016
+452 62 1.583e+016
+433 158 1.58225e+016
+167 313 1.58194e+016
+463 27 1.58018e+016
+157 91 1.57998e+016
+313 77 1.57587e+016
+159 182 1.56871e+016
+273 295 1.56429e+016
+91 290 1.56116e+016
+61 370 1.55923e+016
+503 164 1.55324e+016
+451 438 1.55213e+016
+449 118 1.55148e+016
+373 392 1.55002e+016
+385 324 1.54962e+016
+158 96 1.54837e+016
+229 288 1.54794e+016
+389 326 1.54772e+016
+83 476 1.54637e+016
+437 89 1.53822e+016
+543 164 1.53779e+016
+363 180 1.53654e+016
+295 421 1.53433e+016
+107 429 1.53162e+016
+49 62 1.53159e+016
+237 130 1.53125e+016
+153 112 1.53019e+016
+528 362 1.52948e+016
+38 82 1.52784e+016
+276 198 1.523e+016
+405 376 1.52214e+016
+514 203 1.52146e+016
+514 119 1.51797e+016
+340 122 1.51324e+016
+181 20 1.50587e+016
+186 20 1.50584e+016
+139 99 1.50444e+016
+510 82 1.50365e+016
+196 132 1.50283e+016
+416 298 1.50268e+016
+436 379 1.50123e+016
+328 64 1.50075e+016
+360 164 1.50051e+016
+190 206 1.50019e+016
+531 362 1.49389e+016
+537 394 1.49274e+016
+501 143 1.48941e+016
+258 161 1.48791e+016
+287 396 1.48752e+016
+373 86 1.487e+016
+244 293 1.48695e+016
+192 145 1.48667e+016
+254 9 1.48667e+016
+164 115 1.48566e+016
+484 142 1.48362e+016
+189 144 1.48339e+016
+345 391 1.48272e+016
+114 1 1.48211e+016
+357 66 1.48066e+016
+474 247 1.47973e+016
+88 207 1.47863e+016
+527 347 1.47809e+016
+30 218 1.47804e+016
+387 124 1.47787e+016
+547 218 1.47618e+016
+357 11 1.47501e+016
+432 45 1.47266e+016
+192 312 1.47081e+016
+158 112 1.47026e+016
+164 209 1.46854e+016
+386 127 1.4681e+016
+110 2 1.46723e+016
+357 63 1.46625e+016
+405 82 1.46438e+016
+302 176 1.46276e+016
+238 420 1.46269e+016
+424 398 1.46201e+016
+450 87 1.46048e+016
+215 124 1.45955e+016
+120 128 1.45901e+016
+485 84 1.45866e+016
+513 298 1.45853e+016
+179 168 1.45842e+016
+483 81 1.45719e+016
+387 5 1.45603e+016
+396 317 1.45409e+016
+150 112 1.44992e+016
+248 293 1.44688e+016
+574 421 1.44261e+016
+118 76 1.44226e+016
+575 459 1.44067e+016
+443 354 1.44006e+016
+102 236 1.43757e+016
+186 289 1.43678e+016
+164 206 1.43111e+016
+33 219 1.43086e+016
+502 22 1.4293e+016
+242 192 1.42795e+016
+168 115 1.42644e+016
+280 198 1.42568e+016
+155 56 1.42468e+016
+218 110 1.42422e+016
+242 195 1.42244e+016
+473 203 1.41971e+016
+518 263 1.41727e+016
+204 160 1.41706e+016
+281 438 1.41559e+016
+418 284 1.4141e+016
+72 165 1.41274e+016
+340 391 1.41139e+016
+131 168 1.40835e+016
+384 124 1.40742e+016
+543 217 1.40638e+016
+41 355 1.40431e+016
+538 101 1.40391e+016
+547 139 1.40389e+016
+218 35 1.40153e+016
+307 367 1.39709e+016
+102 28 1.39659e+016
+272 170 1.39615e+016
+192 16 1.39587e+016
+94 257 1.39308e+016
+131 147 1.39014e+016
+264 16 1.38929e+016
+259 34 1.38924e+016
+119 447 1.38655e+016
+354 265 1.38441e+016
+53 150 1.38329e+016
+197 194 1.38165e+016
+124 2 1.37914e+016
+264 389 1.37788e+016
+376 82 1.37624e+016
+498 459 1.37571e+016
+272 285 1.37302e+016
+79 474 1.37221e+016
+128 127 1.37214e+016
+457 3 1.37177e+016
+562 146 1.37049e+016
+280 390 1.37047e+016
+437 240 1.36858e+016
+59 254 1.36856e+016
+175 168 1.36611e+016
+67 254 1.36566e+016
+471 200 1.36495e+016
+191 329 1.36377e+016
+34 235 1.36365e+016
+388 96 1.3625e+016
+94 22 1.36089e+016
+550 58 1.35976e+016
+527 195 1.35835e+016
+489 341 1.35673e+016
+333 105 1.35615e+016
+125 127 1.35546e+016
+478 403 1.35529e+016
+499 22 1.35515e+016
+114 95 1.35449e+016
+402 44 1.35429e+016
+529 400 1.35195e+016
+191 210 1.35137e+016
+155 316 1.3509e+016
+22 65 1.34765e+016
+145 20 1.34764e+016
+478 243 1.34733e+016
+487 2 1.34672e+016
+306 364 1.34369e+016
+514 259 1.3389e+016
+433 225 1.33795e+016
+279 136 1.33709e+016
+433 280 1.33637e+016
+227 123 1.3361e+016
+527 344 1.33595e+016
+437 280 1.33379e+016
+182 343 1.33338e+016
+351 146 1.3333e+016
+333 66 1.3316e+016
+363 369 1.33099e+016
+357 282 1.33036e+016
+185 132 1.33025e+016
+58 204 1.33e+016
+390 242 1.3298e+016
+238 75 1.32883e+016
+446 24 1.32883e+016
+57 70 1.32821e+016
+269 186 1.32739e+016
+335 218 1.32608e+016
+178 273 1.32488e+016
+330 213 1.32076e+016
+317 335 1.31948e+016
+342 260 1.31791e+016
+86 311 1.3161e+016
+275 52 1.31607e+016
+178 20 1.3155e+016
+471 212 1.31381e+016
+313 8 1.3138e+016
+174 291 1.31082e+016
+55 145 1.30908e+016
+288 51 1.30409e+016
+305 194 1.30327e+016
+295 269 1.30295e+016
+279 132 1.30074e+016
+569 382 1.29942e+016
+328 181 1.29918e+016
+52 358 1.29574e+016
+563 323 1.295e+016
+577 39 1.29483e+016
+476 341 1.29206e+016
+26 131 1.29186e+016
+456 61 1.29162e+016
+70 96 1.29155e+016
+431 81 1.29042e+016
+570 451 1.28999e+016
+290 139 1.28876e+016
+443 451 1.28848e+016
+454 102 1.28687e+016
+291 264 1.28611e+016
+392 21 1.28509e+016
+77 269 1.28001e+016
+405 41 1.27589e+016
+11 78 1.27504e+016
+542 139 1.27475e+016
+68 46 1.27463e+016
+68 419 1.27148e+016
+572 405 1.27024e+016
+190 278 1.26977e+016
+276 320 1.26765e+016
+346 47 1.26723e+016
+413 246 1.26719e+016
+355 24 1.265e+016
+333 202 1.26449e+016
+325 15 1.26296e+016
+190 109 1.26256e+016
+50 254 1.26062e+016
+421 298 1.258e+016
+335 390 1.25747e+016
+132 237 1.25595e+016
+332 413 1.25362e+016
+383 162 1.25113e+016
+430 224 1.24983e+016
+440 379 1.24966e+016
+333 334 1.24964e+016
+186 96 1.24827e+016
+497 66 1.24756e+016
+33 110 1.24727e+016
+365 336 1.24701e+016
+187 108 1.24625e+016
+181 131 1.24511e+016
+450 140 1.24319e+016
+259 391 1.24221e+016
+210 32 1.24105e+016
+494 60 1.24104e+016
+292 50 1.24095e+016
+412 470 1.24035e+016
+480 440 1.2394e+016
+572 161 1.23928e+016
+466 25 1.23834e+016
+487 81 1.23814e+016
+571 40 1.23801e+016
+207 160 1.23504e+016
+468 203 1.23422e+016
+78 199 1.23329e+016
+276 360 1.2315e+016
+506 361 1.23147e+016
+379 181 1.2314e+016
+452 45 1.22952e+016
+281 204 1.22908e+016
+261 141 1.22903e+016
+561 228 1.2286e+016
+262 392 1.22829e+016
+325 258 1.22507e+016
+84 215 1.22153e+016
+91 60 1.22134e+016
+529 35 1.21983e+016
+46 221 1.21901e+016
+503 262 1.21794e+016
+185 135 1.21518e+016
+421 141 1.21462e+016
+516 42 1.2137e+016
+91 376 1.21272e+016
+256 200 1.21256e+016
+481 451 1.21088e+016
+425 201 1.21061e+016
+385 260 1.2106e+016
+345 273 1.20745e+016
+162 127 1.20603e+016
+371 89 1.20483e+016
+353 294 1.2047e+016
+394 215 1.2046e+016
+298 421 1.20381e+016
+543 440 1.2024e+016
+434 161 1.20052e+016
+418 87 1.1989e+016
+437 391 1.19871e+016
+248 194 1.19848e+016
+537 93 1.19818e+016
+191 291 1.19281e+016
+529 397 1.19259e+016
+91 276 1.19086e+016
+174 187 1.18974e+016
+183 381 1.1881e+016
+472 63 1.18468e+016
+502 19 1.184e+016
+524 399 1.18385e+016
+508 202 1.18071e+016
+572 446 1.18016e+016
+204 163 1.17941e+016
+123 263 1.17847e+016
+525 173 1.17616e+016
+11 81 1.17568e+016
+278 204 1.17518e+016
+91 22 1.175e+016
+189 324 1.17169e+016
+70 130 1.17105e+016
+448 123 1.17082e+016
+371 105 1.17075e+016
+583 38 1.17062e+016
+432 381 1.16885e+016
+111 262 1.16858e+016
+363 357 1.16741e+016
+104 306 1.16555e+016
+391 53 1.16511e+016
+18 343 1.16253e+016
+19 65 1.15973e+016
+578 81 1.1589e+016
+445 204 1.15612e+016
+382 26 1.15523e+016
+319 165 1.15096e+016
+337 367 1.15067e+016
+161 61 1.15029e+016
+513 380 1.15e+016
+58 372 1.14997e+016
+342 47 1.1477e+016
+486 375 1.14765e+016
+349 88 1.14708e+016
+98 257 1.1451e+016
+277 201 1.14359e+016
+501 459 1.14276e+016
+222 116 1.13829e+016
+85 38 1.13744e+016
+339 473 1.13742e+016
+574 140 1.13733e+016
+540 41 1.13713e+016
+216 175 1.13629e+016
+464 101 1.13447e+016
+67 251 1.13273e+016
+466 124 1.13245e+016
+186 100 1.12991e+016
+118 2 1.12855e+016
+529 160 1.12812e+016
+75 474 1.12735e+016
+163 131 1.12472e+016
+438 162 1.12469e+016
+136 136 1.12386e+016
+580 345 1.12374e+016
+258 250 1.12316e+016
+454 117 1.12264e+016
+199 111 1.12142e+016
+48 162 1.11961e+016
+578 52 1.11942e+016
+110 58 1.11929e+016
+222 87 1.11551e+016
+138 58 1.11157e+016
+106 182 1.11041e+016
+55 170 1.10797e+016
+298 398 1.10725e+016
+88 372 1.10655e+016
+232 263 1.10544e+016
+258 107 1.1047e+016
+438 468 1.10372e+016
+160 21 1.10334e+016
+591 18 1.10295e+016
+340 446 1.10137e+016
+147 449 1.10038e+016
+182 95 1.09946e+016
+536 17 1.09909e+016
+369 86 1.09904e+016
+574 330 1.09826e+016
+48 234 1.0958e+016
+77 234 1.09545e+016
+214 94 1.0946e+016
+37 200 1.09404e+016
+359 53 1.09376e+016
+358 241 1.09278e+016
+280 124 1.09245e+016
+97 28 1.09144e+016
+524 190 1.0898e+016
+569 422 1.08933e+016
+577 245 1.08792e+016
+400 168 1.08602e+016
+299 296 1.08584e+016
+190 357 1.08443e+016
+534 79 1.08413e+016
+114 167 1.08328e+016
+130 306 1.08078e+016
+328 105 1.08064e+016
+449 24 1.07935e+016
+149 40 1.07893e+016
+38 238 1.07757e+016
+258 368 1.07563e+016
+337 264 1.0745e+016
+209 419 1.07395e+016
+548 182 1.07222e+016
+473 42 1.07209e+016
+264 310 1.07124e+016
+446 351 1.07074e+016
+215 128 1.07027e+016
+468 208 1.06964e+016
+506 61 1.06911e+016
+416 245 1.06875e+016
+175 272 1.06832e+016
+105 165 1.06778e+016
+319 187 1.06633e+016
+110 326 1.06579e+016
+306 449 1.06524e+016
+419 258 1.0637e+016
+293 31 1.06357e+016
+121 6 1.06268e+016
+253 74 1.06212e+016
+424 63 1.06075e+016
+455 162 1.05992e+016
+186 142 1.05942e+016
+289 348 1.05831e+016
+562 149 1.05815e+016
+20 286 1.05772e+016
+354 11 1.05603e+016
+379 127 1.0552e+016
+189 307 1.05418e+016
+292 335 1.0533e+016
+310 446 1.05329e+016
+332 410 1.04972e+016
+236 134 1.04947e+016
+380 319 1.04915e+016
+566 180 1.04721e+016
+159 239 1.04625e+016
+163 252 1.04616e+016
+124 218 1.04595e+016
+353 338 1.0449e+016
+120 218 1.04404e+016
+160 57 1.04347e+016
+130 428 1.04274e+016
+345 342 1.04236e+016
+282 419 1.04149e+016
+493 340 1.04127e+016
+362 65 1.04098e+016
+533 342 1.04063e+016
+195 255 1.03992e+016
+581 81 1.03981e+016
+220 212 1.03891e+016
+38 287 1.03802e+016
+130 478 1.03737e+016
+266 20 1.03667e+016
+335 415 1.03569e+016
+212 150 1.03529e+016
+538 186 1.03413e+016
+178 330 1.03317e+016
+419 66 1.03166e+016
+434 241 1.03141e+016
+218 208 1.03103e+016
+213 32 1.0285e+016
+538 138 1.02842e+016
+17 434 1.02767e+016
+86 181 1.02732e+016
+255 36 1.02628e+016
+245 195 1.02533e+016
+22 48 1.02494e+016
+118 95 1.02443e+016
+462 224 1.02372e+016
+484 5 1.02325e+016
+483 204 1.02302e+016
+372 117 1.02241e+016
+362 244 1.02206e+016
+9 233 1.02166e+016
+20 317 1.02041e+016
+477 204 1.01891e+016
+275 204 1.0185e+016
+337 446 1.01734e+016
+459 304 1.01676e+016
+279 393 1.01465e+016
+261 249 1.01428e+016
+484 359 1.01396e+016
+114 216 1.01356e+016
+512 363 1.01201e+016
+385 321 1.00966e+016
+28 66 1.00948e+016
+7 15 1.0088e+016
+1 383 1.0074e+016
+385 166 1.00166e+016
+167 150 1.0008e+016
+353 297 9.99958e+015
+83 171 9.98799e+015
+376 316 9.97966e+015
+43 406 9.97672e+015
+586 17 9.95991e+015
+149 303 9.95863e+015
+306 259 9.95204e+015
+91 79 9.93994e+015
+494 458 9.92528e+015
+150 398 9.92229e+015
+435 182 9.91894e+015
+217 425 9.89298e+015
+325 131 9.88565e+015
+333 62 9.88055e+015
+183 139 9.87307e+015
+532 61 9.86688e+015
+383 413 9.8607e+015
+386 92 9.83477e+015
+364 201 9.83388e+015
+471 269 9.82222e+015
+439 122 9.80215e+015
+402 143 9.79817e+015
+534 394 9.78956e+015
+207 163 9.76618e+015
+110 182 9.76313e+015
+33 164 9.75871e+015
+432 270 9.74861e+015
+147 397 9.74846e+015
+161 152 9.74792e+015
+302 330 9.74539e+015
+186 202 9.7435e+015
+169 105 9.73832e+015
+464 356 9.72644e+015
+445 243 9.72457e+015
+103 257 9.71634e+015
+533 161 9.69325e+015
+201 88 9.68337e+015
+218 128 9.67362e+015
+380 162 9.67158e+015
+370 109 9.65451e+015
+329 216 9.64754e+015
+438 182 9.64732e+015
+117 306 9.63725e+015
+172 272 9.63147e+015
+187 265 9.6132e+015
+220 315 9.61193e+015
+542 443 9.60911e+015
+480 165 9.60704e+015
+85 35 9.60213e+015
+9 32 9.59701e+015
+321 121 9.59123e+015
+405 10 9.58241e+015
+190 132 9.56313e+015
+242 281 9.55708e+015
+247 107 9.55463e+015
+563 61 9.549e+015
+498 61 9.54766e+015
+277 187 9.54437e+015
+371 338 9.53928e+015
+180 292 9.52544e+015
+343 463 9.52533e+015
+528 79 9.52483e+015
+154 295 9.49742e+015
+25 221 9.48946e+015
+407 14 9.4807e+015
+136 239 9.47882e+015
+72 408 9.47775e+015
+340 443 9.46776e+015
+536 265 9.46159e+015
+454 5 9.45559e+015
+109 146 9.44403e+015
+276 214 9.43642e+015
+478 11 9.42407e+015
+228 264 9.40916e+015
+219 115 9.39674e+015
+343 200 9.3955e+015
+38 270 9.38897e+015
+523 78 9.37541e+015
+450 177 9.37236e+015
+189 18 9.36784e+015
+527 429 9.36777e+015
+74 477 9.36255e+015
+373 241 9.35479e+015
+261 71 9.32272e+015
+77 165 9.32182e+015
+374 105 9.31723e+015
+314 446 9.30625e+015
+268 242 9.30336e+015
+438 45 9.29372e+015
+488 84 9.28557e+015
+479 286 9.2819e+015
+394 107 9.27468e+015
+533 397 9.27092e+015
+503 61 9.24422e+015
+163 118 9.23354e+015
+396 104 9.23065e+015
+561 142 9.22566e+015
+12 204 9.22523e+015
+289 32 9.22345e+015
+447 339 9.2233e+015
+421 291 9.21042e+015
+509 61 9.19335e+015
+235 220 9.18694e+015
+499 463 9.17354e+015
+89 181 9.17205e+015
+115 359 9.17031e+015
+277 190 9.1702e+015
+447 376 9.16225e+015
+96 93 9.16066e+015
+28 136 9.15711e+015
+181 155 9.14541e+015
+329 25 9.14522e+015
+471 84 9.13127e+015
+534 97 9.12946e+015
+269 89 9.11953e+015
+461 162 9.11099e+015
+272 90 9.11071e+015
+178 57 9.10686e+015
+55 360 9.104e+015
+309 32 9.09837e+015
+361 139 9.08799e+015
+64 11 9.06259e+015
+345 166 9.04819e+015
+329 354 9.04305e+015
+463 219 9.0348e+015
+298 88 9.02812e+015
+336 443 9.0277e+015
+542 262 9.02566e+015
+272 145 9.0242e+015
+375 463 9.02056e+015
+42 122 9.01542e+015
+262 284 9.0154e+015
+402 7 9.00575e+015
+294 141 8.99765e+015
+534 121 8.98054e+015
+187 313 8.97814e+015
+242 58 8.97512e+015
+573 327 8.9686e+015
+509 58 8.96578e+015
+535 460 8.96452e+015
+336 62 8.95726e+015
+52 39 8.95338e+015
+455 48 8.9521e+015
+166 379 8.93831e+015
+309 54 8.93031e+015
+270 108 8.90916e+015
+306 359 8.90687e+015
+258 133 8.90565e+015
+382 102 8.89639e+015
+154 447 8.89588e+015
+511 348 8.87586e+015
+481 373 8.86409e+015
+34 114 8.84994e+015
+388 2 8.84215e+015
+558 80 8.81929e+015
+552 78 8.79271e+015
+142 449 8.7807e+015
+204 294 8.77985e+015
+484 163 8.77505e+015
+321 11 8.77425e+015
+407 430 8.77181e+015
+502 156 8.76968e+015
+549 223 8.75715e+015
+450 198 8.75281e+015
+455 141 8.7496e+015
+42 119 8.74549e+015
+226 112 8.74476e+015
+542 253 8.74436e+015
+196 147 8.73757e+015
+94 19 8.73348e+015
+119 161 8.73111e+015
+147 78 8.71789e+015
+51 453 8.71461e+015
+97 39 8.71109e+015
+408 140 8.704e+015
+262 397 8.70005e+015
+243 33 8.69318e+015
+158 310 8.69294e+015
+504 459 8.69231e+015
+495 474 8.692e+015
+562 18 8.69134e+015
+498 474 8.68856e+015
+566 144 8.68755e+015
+74 131 8.67546e+015
+401 164 8.66846e+015
+118 221 8.65786e+015
+458 115 8.64688e+015
+66 306 8.64616e+015
+506 380 8.64613e+015
+245 190 8.63746e+015
+264 141 8.63467e+015
+291 311 8.62874e+015
+338 427 8.61482e+015
+214 439 8.59635e+015
+111 338 8.58692e+015
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_7_3.txt b/test_data/harriscorners/hc_msc_3.00_0.04_7_3.txt
new file mode 100644
index 0000000..e3e00c2
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_7_3.txt
@@ -0,0 +1,1328 @@
+1327
+245 94 1.94856e+020
+499 1 1.81721e+020
+273 366 1.51415e+020
+363 401 1.3623e+020
+282 115 1.03145e+020
+240 90 1.01341e+020
+251 13 9.90773e+019
+423 179 9.71754e+019
+242 94 9.69466e+019
+65 343 9.09641e+019
+543 364 8.86213e+019
+449 298 8.73777e+019
+237 19 8.63556e+019
+507 122 8.40362e+019
+131 36 8.35743e+019
+122 44 8.19365e+019
+553 41 7.95278e+019
+426 320 7.85005e+019
+420 178 7.78361e+019
+421 182 7.7811e+019
+261 297 7.71658e+019
+520 61 7.62246e+019
+28 8 7.58288e+019
+196 57 7.50088e+019
+320 224 7.26692e+019
+465 394 7.24963e+019
+446 396 7.15217e+019
+37 61 7.10939e+019
+448 263 7.10212e+019
+200 17 7.06644e+019
+456 281 6.94799e+019
+82 27 6.91503e+019
+388 178 6.78018e+019
+233 15 6.74224e+019
+387 10 6.72745e+019
+344 10 6.69744e+019
+130 2 6.68939e+019
+223 38 6.47611e+019
+480 298 6.45288e+019
+2 47 6.38296e+019
+45 27 6.35654e+019
+34 138 6.3416e+019
+77 256 6.30893e+019
+418 440 6.29304e+019
+321 313 6.26197e+019
+526 60 6.201e+019
+183 401 6.15912e+019
+221 16 6.13466e+019
+59 219 6.12306e+019
+213 72 6.09042e+019
+72 24 6.07674e+019
+435 68 6.06794e+019
+299 52 6.02479e+019
+102 59 5.97668e+019
+483 24 5.92922e+019
+256 386 5.91818e+019
+390 58 5.89087e+019
+110 238 5.832e+019
+124 199 5.71215e+019
+264 440 5.64331e+019
+116 43 5.60986e+019
+510 122 5.55331e+019
+281 112 5.55046e+019
+361 131 5.46241e+019
+303 183 5.41839e+019
+144 309 5.38532e+019
+271 166 5.32864e+019
+242 203 5.31421e+019
+135 215 5.30437e+019
+132 26 5.29583e+019
+348 179 5.23431e+019
+462 279 5.19375e+019
+79 2 5.19137e+019
+4 66 5.19039e+019
+474 262 5.13483e+019
+483 339 5.13205e+019
+128 164 5.1119e+019
+92 198 5.09284e+019
+482 365 5.04977e+019
+479 19 5.032e+019
+412 256 5.00988e+019
+513 340 4.99645e+019
+412 162 4.96772e+019
+512 167 4.95884e+019
+359 260 4.95375e+019
+271 71 4.94348e+019
+425 376 4.90856e+019
+224 419 4.88734e+019
+340 9 4.86269e+019
+385 221 4.84534e+019
+355 220 4.84436e+019
+102 4 4.82063e+019
+33 98 4.81932e+019
+411 355 4.80242e+019
+359 294 4.76875e+019
+535 242 4.76597e+019
+439 339 4.75628e+019
+378 354 4.74598e+019
+562 478 4.70332e+019
+136 202 4.68335e+019
+430 1 4.6789e+019
+360 336 4.65881e+019
+515 76 4.63677e+019
+545 168 4.6296e+019
+177 107 4.58436e+019
+228 292 4.57375e+019
+426 119 4.55122e+019
+390 61 4.54055e+019
+167 287 4.52392e+019
+216 279 4.5157e+019
+524 20 4.51441e+019
+402 122 4.48561e+019
+127 76 4.45495e+019
+432 146 4.43269e+019
+140 203 4.42498e+019
+250 363 4.4197e+019
+471 240 4.40441e+019
+509 18 4.40344e+019
+243 72 4.39746e+019
+182 111 4.34892e+019
+421 334 4.34852e+019
+407 64 4.33433e+019
+510 173 4.32916e+019
+111 241 4.32334e+019
+310 371 4.30741e+019
+283 403 4.29906e+019
+214 56 4.24149e+019
+246 143 4.22138e+019
+340 12 4.19689e+019
+92 214 4.19097e+019
+210 445 4.18543e+019
+498 82 4.173e+019
+58 183 4.1658e+019
+165 217 4.13433e+019
+392 144 4.13077e+019
+74 6 4.12429e+019
+184 35 4.12403e+019
+329 253 4.11889e+019
+35 146 4.11134e+019
+261 165 4.10435e+019
+432 112 4.10214e+019
+111 393 4.09173e+019
+151 307 4.08932e+019
+302 186 4.05197e+019
+264 298 4.03041e+019
+239 349 4.02648e+019
+41 297 3.95847e+019
+362 251 3.95439e+019
+100 221 3.95414e+019
+387 294 3.94515e+019
+556 40 3.94235e+019
+31 8 3.94142e+019
+101 78 3.93848e+019
+234 346 3.93784e+019
+225 221 3.92992e+019
+11 101 3.92351e+019
+293 15 3.91739e+019
+158 1 3.9056e+019
+138 111 3.90553e+019
+300 265 3.87624e+019
+366 144 3.81587e+019
+304 216 3.81405e+019
+271 279 3.8071e+019
+125 255 3.80255e+019
+452 337 3.80105e+019
+567 161 3.7836e+019
+87 148 3.7831e+019
+212 183 3.77927e+019
+64 235 3.77708e+019
+377 7 3.76633e+019
+453 340 3.76245e+019
+434 398 3.75503e+019
+283 71 3.75226e+019
+382 8 3.73602e+019
+125 364 3.73587e+019
+566 43 3.72565e+019
+108 45 3.70119e+019
+65 214 3.67647e+019
+36 174 3.67405e+019
+510 455 3.67131e+019
+153 1 3.65993e+019
+528 98 3.63548e+019
+120 51 3.633e+019
+254 139 3.63272e+019
+327 341 3.63006e+019
+550 379 3.62741e+019
+527 24 3.61749e+019
+95 446 3.6086e+019
+542 18 3.60311e+019
+355 267 3.58569e+019
+452 376 3.58568e+019
+516 17 3.5847e+019
+346 392 3.58179e+019
+388 221 3.57933e+019
+410 65 3.57351e+019
+94 217 3.57042e+019
+343 337 3.56667e+019
+312 149 3.54501e+019
+383 354 3.54127e+019
+158 143 3.53851e+019
+562 147 3.51238e+019
+326 426 3.50744e+019
+372 163 3.49535e+019
+417 7 3.48222e+019
+55 66 3.44946e+019
+179 113 3.44777e+019
+474 23 3.42676e+019
+302 206 3.41174e+019
+170 19 3.40191e+019
+492 140 3.39903e+019
+287 296 3.39593e+019
+141 324 3.39078e+019
+475 4 3.37393e+019
+209 223 3.36698e+019
+364 297 3.3592e+019
+328 127 3.3553e+019
+324 341 3.33836e+019
+422 44 3.32769e+019
+345 109 3.32229e+019
+208 451 3.31291e+019
+55 31 3.30921e+019
+250 33 3.30853e+019
+513 296 3.30266e+019
+153 222 3.29652e+019
+170 57 3.29221e+019
+176 39 3.28429e+019
+150 222 3.26641e+019
+533 184 3.26476e+019
+395 260 3.26243e+019
+48 26 3.25347e+019
+37 138 3.25032e+019
+192 331 3.24127e+019
+348 241 3.22015e+019
+456 83 3.2199e+019
+357 335 3.21872e+019
+219 291 3.21634e+019
+546 41 3.19852e+019
+236 130 3.19408e+019
+355 320 3.19379e+019
+513 223 3.17903e+019
+481 179 3.17394e+019
+465 197 3.16184e+019
+520 183 3.15075e+019
+485 179 3.14797e+019
+239 421 3.14357e+019
+64 60 3.14165e+019
+38 296 3.13585e+019
+166 96 3.1335e+019
+48 99 3.11993e+019
+338 164 3.11623e+019
+489 342 3.10851e+019
+127 252 3.10704e+019
+66 321 3.1061e+019
+478 263 3.10245e+019
+334 436 3.08483e+019
+242 97 3.08478e+019
+173 312 3.07952e+019
+109 27 3.07937e+019
+318 312 3.07597e+019
+524 23 3.07379e+019
+503 360 3.06181e+019
+211 57 3.03033e+019
+452 205 3.01259e+019
+248 403 3.00755e+019
+203 310 3.00152e+019
+472 63 3.00053e+019
+139 173 2.99438e+019
+417 24 2.99407e+019
+379 66 2.99317e+019
+512 125 2.99237e+019
+128 95 2.98739e+019
+70 147 2.9873e+019
+233 162 2.98399e+019
+57 364 2.97784e+019
+123 272 2.96202e+019
+530 21 2.94916e+019
+577 15 2.949e+019
+329 66 2.94363e+019
+87 209 2.94337e+019
+449 219 2.93262e+019
+491 1 2.92892e+019
+482 327 2.92135e+019
+230 36 2.92039e+019
+277 352 2.91873e+019
+327 142 2.91603e+019
+41 63 2.91497e+019
+56 5 2.91494e+019
+86 255 2.91236e+019
+162 214 2.91058e+019
+540 13 2.89598e+019
+53 43 2.89096e+019
+49 153 2.88444e+019
+256 149 2.87722e+019
+546 57 2.86797e+019
+522 122 2.86614e+019
+47 10 2.8492e+019
+105 62 2.84158e+019
+136 175 2.83473e+019
+54 289 2.82999e+019
+527 39 2.82739e+019
+153 225 2.82306e+019
+275 181 2.81526e+019
+219 35 2.81396e+019
+31 219 2.81289e+019
+406 375 2.80994e+019
+187 99 2.78989e+019
+147 21 2.78944e+019
+167 325 2.78555e+019
+345 241 2.77219e+019
+344 263 2.77161e+019
+273 130 2.77005e+019
+477 12 2.76961e+019
+542 210 2.76792e+019
+86 77 2.76759e+019
+511 128 2.76338e+019
+55 294 2.74568e+019
+163 276 2.725e+019
+479 294 2.71805e+019
+22 61 2.71153e+019
+306 439 2.71022e+019
+264 445 2.69666e+019
+169 198 2.68987e+019
+545 4 2.68813e+019
+436 91 2.67232e+019
+174 238 2.67e+019
+387 243 2.66492e+019
+359 393 2.66404e+019
+177 260 2.63712e+019
+64 371 2.629e+019
+508 7 2.62729e+019
+279 222 2.62591e+019
+91 292 2.62086e+019
+131 148 2.61995e+019
+294 25 2.61785e+019
+192 124 2.60632e+019
+46 147 2.60513e+019
+252 10 2.59939e+019
+358 10 2.58769e+019
+158 56 2.57538e+019
+210 437 2.57076e+019
+362 398 2.56527e+019
+582 17 2.56182e+019
+274 281 2.56028e+019
+527 422 2.55542e+019
+195 126 2.55416e+019
+403 188 2.54734e+019
+245 205 2.53495e+019
+338 391 2.53063e+019
+424 333 2.53019e+019
+64 218 2.52238e+019
+191 359 2.51581e+019
+528 361 2.51344e+019
+37 288 2.50941e+019
+482 331 2.50436e+019
+276 221 2.50404e+019
+298 70 2.4992e+019
+331 295 2.49215e+019
+220 178 2.48895e+019
+192 219 2.48715e+019
+312 7 2.48706e+019
+50 12 2.48254e+019
+69 478 2.48119e+019
+107 40 2.48005e+019
+497 228 2.47954e+019
+72 97 2.47663e+019
+197 82 2.4758e+019
+236 92 2.47347e+019
+325 145 2.47025e+019
+108 183 2.46777e+019
+105 199 2.464e+019
+512 98 2.45975e+019
+68 337 2.4439e+019
+365 7 2.44304e+019
+44 81 2.44074e+019
+42 339 2.43885e+019
+114 345 2.43358e+019
+286 209 2.43163e+019
+15 219 2.43011e+019
+220 100 2.42503e+019
+141 22 2.42496e+019
+360 217 2.41891e+019
+470 418 2.41609e+019
+376 119 2.40172e+019
+86 214 2.39753e+019
+259 201 2.39432e+019
+435 281 2.3935e+019
+164 242 2.39254e+019
+408 352 2.39172e+019
+342 107 2.39008e+019
+275 319 2.39004e+019
+36 269 2.37691e+019
+516 347 2.3719e+019
+314 82 2.36977e+019
+255 182 2.36956e+019
+356 128 2.36612e+019
+35 10 2.36284e+019
+28 236 2.35583e+019
+443 23 2.35481e+019
+239 201 2.35428e+019
+158 138 2.35376e+019
+112 165 2.34711e+019
+228 289 2.34135e+019
+18 342 2.33975e+019
+246 294 2.33834e+019
+526 101 2.33724e+019
+301 166 2.3359e+019
+36 200 2.32994e+019
+351 320 2.32464e+019
+525 345 2.32328e+019
+162 168 2.32036e+019
+256 35 2.31871e+019
+280 128 2.30157e+019
+224 183 2.2965e+019
+181 398 2.2962e+019
+286 166 2.2952e+019
+244 164 2.29233e+019
+95 476 2.29222e+019
+140 184 2.2899e+019
+232 200 2.28944e+019
+114 392 2.28757e+019
+39 406 2.28748e+019
+513 261 2.28718e+019
+576 178 2.27851e+019
+510 343 2.27756e+019
+324 314 2.27666e+019
+7 11 2.27115e+019
+136 206 2.26752e+019
+259 221 2.26606e+019
+93 6 2.26516e+019
+345 351 2.26182e+019
+458 3 2.26119e+019
+263 202 2.25908e+019
+254 422 2.25486e+019
+301 215 2.25421e+019
+84 3 2.25239e+019
+488 263 2.25106e+019
+180 394 2.24831e+019
+541 99 2.24686e+019
+78 196 2.24327e+019
+513 220 2.23768e+019
+537 186 2.23629e+019
+103 359 2.23296e+019
+204 16 2.23021e+019
+448 168 2.22667e+019
+358 143 2.22217e+019
+234 72 2.22217e+019
+422 397 2.22128e+019
+457 375 2.22113e+019
+389 97 2.21958e+019
+40 217 2.21407e+019
+41 10 2.21367e+019
+90 255 2.21165e+019
+421 47 2.20435e+019
+444 452 2.20384e+019
+478 16 2.19921e+019
+278 145 2.19785e+019
+59 41 2.19572e+019
+367 247 2.18738e+019
+402 6 2.18221e+019
+486 182 2.18081e+019
+406 199 2.1804e+019
+308 8 2.17564e+019
+290 264 2.17428e+019
+141 2 2.1739e+019
+495 141 2.16481e+019
+542 130 2.15406e+019
+530 183 2.1519e+019
+413 299 2.14876e+019
+526 223 2.14717e+019
+282 200 2.14365e+019
+221 182 2.14253e+019
+382 411 2.14248e+019
+351 323 2.13942e+019
+128 25 2.13902e+019
+317 148 2.13345e+019
+449 178 2.12753e+019
+84 476 2.12232e+019
+541 123 2.12197e+019
+59 76 2.11898e+019
+390 296 2.11492e+019
+352 147 2.11396e+019
+296 420 2.10393e+019
+100 199 2.10357e+019
+283 207 2.10112e+019
+432 83 2.09874e+019
+178 164 2.09789e+019
+245 14 2.09522e+019
+113 213 2.09235e+019
+156 318 2.09144e+019
+157 73 2.08859e+019
+177 93 2.08395e+019
+57 290 2.08276e+019
+528 142 2.08147e+019
+281 51 2.08037e+019
+300 177 2.07855e+019
+272 53 2.07025e+019
+270 367 2.06849e+019
+323 224 2.0649e+019
+528 188 2.06338e+019
+6 45 2.05752e+019
+129 168 2.05718e+019
+110 96 2.05597e+019
+285 212 2.05344e+019
+105 4 2.05318e+019
+346 297 2.0503e+019
+273 297 2.04768e+019
+101 163 2.04655e+019
+146 160 2.04533e+019
+45 97 2.04501e+019
+228 184 2.04076e+019
+365 105 2.0401e+019
+183 19 2.03968e+019
+163 358 2.03648e+019
+429 223 2.03223e+019
+55 28 2.0301e+019
+358 64 2.02666e+019
+289 137 2.01827e+019
+421 6 2.01463e+019
+538 95 2.01378e+019
+136 128 2.01376e+019
+392 66 2.01336e+019
+162 74 2.00755e+019
+422 323 2.00717e+019
+46 219 2.00576e+019
+16 215 2.00348e+019
+288 212 2.00305e+019
+236 163 2.00143e+019
+511 101 2.00129e+019
+379 69 2.0012e+019
+325 165 1.99911e+019
+408 182 1.99654e+019
+399 261 1.99495e+019
+81 77 1.99359e+019
+181 380 1.99164e+019
+136 21 1.99086e+019
+173 40 1.98869e+019
+130 78 1.98758e+019
+544 171 1.9871e+019
+137 98 1.98352e+019
+513 122 1.9807e+019
+564 40 1.98035e+019
+114 428 1.97669e+019
+481 182 1.96915e+019
+141 394 1.96775e+019
+164 325 1.96486e+019
+230 266 1.96409e+019
+307 448 1.95651e+019
+44 10 1.95216e+019
+484 59 1.95152e+019
+363 182 1.94975e+019
+82 136 1.94678e+019
+365 251 1.9445e+019
+507 165 1.94388e+019
+57 372 1.93897e+019
+257 250 1.93449e+019
+198 130 1.9344e+019
+529 102 1.92873e+019
+33 65 1.9285e+019
+378 339 1.9256e+019
+205 162 1.92014e+019
+402 184 1.9193e+019
+548 44 1.91409e+019
+371 393 1.91203e+019
+221 432 1.91012e+019
+209 54 1.90748e+019
+173 18 1.9072e+019
+267 30 1.90658e+019
+103 392 1.90461e+019
+306 192 1.89845e+019
+393 217 1.89574e+019
+331 131 1.8954e+019
+275 329 1.89447e+019
+520 263 1.89097e+019
+536 393 1.89076e+019
+389 140 1.89075e+019
+537 459 1.88861e+019
+187 263 1.88801e+019
+219 108 1.88509e+019
+428 181 1.88325e+019
+325 295 1.878e+019
+416 44 1.87574e+019
+507 455 1.87295e+019
+260 142 1.87226e+019
+297 410 1.871e+019
+339 473 1.86776e+019
+191 56 1.86004e+019
+269 67 1.85849e+019
+429 88 1.84915e+019
+124 252 1.84854e+019
+259 71 1.84842e+019
+471 82 1.84435e+019
+413 4 1.83948e+019
+363 143 1.83404e+019
+243 190 1.83398e+019
+362 370 1.8305e+019
+403 265 1.83027e+019
+187 34 1.82981e+019
+381 26 1.82792e+019
+267 296 1.82741e+019
+167 180 1.82606e+019
+361 222 1.82564e+019
+59 4 1.82481e+019
+584 38 1.8207e+019
+190 205 1.81692e+019
+149 39 1.81466e+019
+127 186 1.81457e+019
+303 103 1.81299e+019
+358 168 1.81266e+019
+290 49 1.81252e+019
+547 163 1.81172e+019
+116 184 1.81145e+019
+48 257 1.8095e+019
+329 9 1.80918e+019
+163 328 1.80849e+019
+344 197 1.80778e+019
+480 403 1.80437e+019
+571 448 1.80292e+019
+419 52 1.80241e+019
+568 382 1.80132e+019
+4 63 1.79238e+019
+479 176 1.79028e+019
+277 370 1.78965e+019
+82 74 1.78898e+019
+80 38 1.78784e+019
+324 260 1.78652e+019
+351 271 1.78496e+019
+42 24 1.78493e+019
+328 289 1.78269e+019
+163 207 1.77986e+019
+93 254 1.77939e+019
+306 362 1.77688e+019
+33 268 1.77604e+019
+212 33 1.77529e+019
+248 205 1.77519e+019
+358 282 1.77516e+019
+109 136 1.77504e+019
+190 322 1.76647e+019
+131 476 1.7656e+019
+362 360 1.76275e+019
+180 18 1.7479e+019
+97 79 1.74789e+019
+418 68 1.74706e+019
+195 16 1.74668e+019
+342 123 1.74411e+019
+180 292 1.74382e+019
+39 83 1.74001e+019
+333 89 1.7373e+019
+117 76 1.73663e+019
+169 183 1.7364e+019
+117 96 1.73331e+019
+597 272 1.73316e+019
+112 4 1.73061e+019
+565 463 1.72969e+019
+245 402 1.72881e+019
+62 204 1.72512e+019
+506 203 1.71985e+019
+406 122 1.71561e+019
+472 42 1.70951e+019
+514 382 1.70875e+019
+76 259 1.70849e+019
+187 291 1.70767e+019
+341 88 1.70754e+019
+561 320 1.70338e+019
+402 261 1.70209e+019
+369 162 1.69994e+019
+332 9 1.69776e+019
+281 132 1.69533e+019
+336 8 1.69471e+019
+571 161 1.69162e+019
+432 268 1.69131e+019
+371 89 1.68395e+019
+122 185 1.67004e+019
+436 390 1.66537e+019
+472 211 1.66327e+019
+475 342 1.66318e+019
+191 216 1.66115e+019
+187 288 1.65951e+019
+75 236 1.6553e+019
+110 264 1.65277e+019
+78 79 1.65272e+019
+553 378 1.64862e+019
+502 143 1.64805e+019
+343 392 1.64759e+019
+391 448 1.64686e+019
+332 255 1.64685e+019
+282 135 1.6466e+019
+408 45 1.64658e+019
+153 233 1.64612e+019
+155 196 1.64562e+019
+524 185 1.64432e+019
+366 2 1.64322e+019
+398 169 1.64183e+019
+498 158 1.63803e+019
+438 303 1.63614e+019
+120 239 1.63364e+019
+560 81 1.63211e+019
+126 3 1.63035e+019
+526 104 1.63033e+019
+124 190 1.62594e+019
+186 401 1.6251e+019
+28 12 1.62486e+019
+488 4 1.61969e+019
+500 224 1.61916e+019
+246 88 1.61895e+019
+45 407 1.61704e+019
+391 324 1.61583e+019
+390 19 1.61372e+019
+393 46 1.61363e+019
+420 81 1.61331e+019
+154 114 1.61078e+019
+349 299 1.60906e+019
+374 241 1.60894e+019
+132 130 1.60836e+019
+41 136 1.60836e+019
+374 394 1.60814e+019
+62 133 1.60764e+019
+260 301 1.6069e+019
+384 259 1.60656e+019
+51 61 1.6055e+019
+163 315 1.60167e+019
+289 167 1.60109e+019
+120 4 1.59884e+019
+85 59 1.59864e+019
+292 311 1.59834e+019
+271 184 1.59796e+019
+483 83 1.5959e+019
+144 187 1.59407e+019
+28 28 1.59312e+019
+314 85 1.59285e+019
+183 133 1.59056e+019
+573 423 1.58994e+019
+492 181 1.58969e+019
+279 362 1.58856e+019
+268 288 1.58586e+019
+33 172 1.58388e+019
+538 121 1.58377e+019
+529 145 1.5831e+019
+461 221 1.5816e+019
+263 311 1.58151e+019
+427 1 1.58037e+019
+275 197 1.57991e+019
+413 21 1.57903e+019
+216 175 1.57832e+019
+392 165 1.57732e+019
+117 428 1.57637e+019
+489 42 1.57605e+019
+196 192 1.56958e+019
+262 391 1.56904e+019
+419 300 1.56714e+019
+424 203 1.56546e+019
+138 57 1.56031e+019
+487 83 1.55931e+019
+179 329 1.55457e+019
+131 255 1.55388e+019
+84 146 1.55257e+019
+560 229 1.55257e+019
+236 221 1.54992e+019
+458 266 1.54957e+019
+376 4 1.54778e+019
+297 331 1.54772e+019
+404 13 1.54721e+019
+260 273 1.54654e+019
+177 18 1.54568e+019
+579 41 1.54461e+019
+449 445 1.5444e+019
+470 4 1.54411e+019
+248 218 1.54298e+019
+507 59 1.54073e+019
+469 140 1.54038e+019
+430 44 1.53615e+019
+540 405 1.53531e+019
+316 428 1.53151e+019
+598 364 1.52957e+019
+247 317 1.52841e+019
+433 240 1.52337e+019
+342 464 1.52209e+019
+157 200 1.52181e+019
+101 62 1.52141e+019
+9 76 1.52036e+019
+203 257 1.51942e+019
+108 109 1.5189e+019
+137 138 1.51601e+019
+468 423 1.5158e+019
+387 17 1.51152e+019
+156 93 1.51151e+019
+265 260 1.51033e+019
+172 112 1.50964e+019
+171 109 1.5058e+019
+549 59 1.50422e+019
+45 62 1.50065e+019
+266 403 1.49938e+019
+187 19 1.49896e+019
+124 261 1.49439e+019
+416 450 1.49138e+019
+539 40 1.48876e+019
+288 395 1.48859e+019
+333 412 1.48141e+019
+445 7 1.4803e+019
+370 107 1.47955e+019
+324 90 1.47324e+019
+172 449 1.47293e+019
+528 160 1.4729e+019
+56 220 1.47263e+019
+287 33 1.47215e+019
+9 476 1.47021e+019
+436 87 1.46962e+019
+545 217 1.46827e+019
+344 340 1.46824e+019
+210 395 1.46525e+019
+542 457 1.46484e+019
+278 418 1.46466e+019
+68 475 1.46358e+019
+68 96 1.45828e+019
+119 25 1.45441e+019
+379 125 1.45383e+019
+364 357 1.45369e+019
+209 36 1.45341e+019
+207 436 1.44851e+019
+219 316 1.44759e+019
+206 159 1.44306e+019
+329 212 1.44256e+019
+261 34 1.43917e+019
+242 199 1.43602e+019
+475 245 1.43394e+019
+78 28 1.43366e+019
+66 317 1.43351e+019
+475 161 1.43347e+019
+270 169 1.43218e+019
+513 18 1.429e+019
+490 82 1.42849e+019
+91 389 1.42714e+019
+561 71 1.42649e+019
+441 98 1.42537e+019
+282 393 1.42287e+019
+450 91 1.421e+019
+464 24 1.41821e+019
+436 385 1.4166e+019
+116 181 1.41393e+019
+204 435 1.41367e+019
+386 162 1.41155e+019
+104 163 1.40982e+019
+210 16 1.40813e+019
+160 183 1.40779e+019
+471 268 1.40725e+019
+332 333 1.40448e+019
+583 345 1.40434e+019
+573 17 1.40407e+019
+530 366 1.40071e+019
+439 455 1.40008e+019
+250 422 1.39991e+019
+415 164 1.39952e+019
+45 131 1.39916e+019
+505 381 1.3991e+019
+3 382 1.39825e+019
+511 43 1.39644e+019
+289 349 1.39559e+019
+446 340 1.39232e+019
+386 327 1.39025e+019
+39 355 1.38983e+019
+12 214 1.38982e+019
+44 121 1.38976e+019
+326 181 1.3856e+019
+440 64 1.38472e+019
+341 126 1.38466e+019
+472 421 1.38288e+019
+475 202 1.38082e+019
+336 317 1.37981e+019
+133 93 1.3786e+019
+408 185 1.37806e+019
+168 309 1.37716e+019
+151 196 1.37689e+019
+341 263 1.37671e+019
+173 37 1.37649e+019
+436 43 1.37584e+019
+330 89 1.37559e+019
+526 398 1.37552e+019
+516 202 1.3724e+019
+219 279 1.36885e+019
+107 96 1.36801e+019
+190 146 1.36768e+019
+577 18 1.36693e+019
+84 310 1.36676e+019
+270 62 1.36613e+019
+394 162 1.3651e+019
+81 474 1.36498e+019
+134 238 1.36324e+019
+260 368 1.36237e+019
+331 107 1.36158e+019
+468 237 1.36132e+019
+11 80 1.36011e+019
+213 123 1.35874e+019
+248 314 1.3583e+019
+86 365 1.35812e+019
+217 126 1.35732e+019
+115 26 1.35681e+019
+227 129 1.35432e+019
+191 17 1.35274e+019
+407 162 1.35167e+019
+174 115 1.35166e+019
+572 328 1.35156e+019
+567 40 1.34998e+019
+130 239 1.34988e+019
+406 142 1.34825e+019
+68 304 1.34819e+019
+173 94 1.34694e+019
+75 132 1.34504e+019
+24 65 1.34291e+019
+390 49 1.34272e+019
+463 39 1.33977e+019
+574 39 1.33903e+019
+99 195 1.33669e+019
+496 462 1.33632e+019
+161 144 1.33596e+019
+243 210 1.33341e+019
+450 22 1.33271e+019
+231 126 1.33025e+019
+46 354 1.32764e+019
+299 398 1.32726e+019
+513 402 1.32579e+019
+111 40 1.32545e+019
+202 316 1.32541e+019
+365 200 1.32493e+019
+108 324 1.32328e+019
+210 154 1.32126e+019
+500 420 1.32111e+019
+464 161 1.32106e+019
+199 110 1.32053e+019
+103 305 1.3202e+019
+475 255 1.3192e+019
+391 52 1.3191e+019
+412 24 1.31763e+019
+492 59 1.31658e+019
+321 10 1.31643e+019
+443 355 1.31615e+019
+533 61 1.31535e+019
+381 128 1.31302e+019
+448 165 1.3121e+019
+316 107 1.31206e+019
+240 15 1.31174e+019
+500 23 1.31123e+019
+14 30 1.31119e+019
+398 358 1.31072e+019
+218 146 1.31013e+019
+133 78 1.30886e+019
+445 127 1.30629e+019
+51 291 1.30608e+019
+382 336 1.3044e+019
+537 103 1.30411e+019
+30 135 1.30209e+019
+257 140 1.30162e+019
+189 107 1.30056e+019
+73 164 1.30039e+019
+412 245 1.30027e+019
+3 155 1.29917e+019
+101 236 1.29669e+019
+326 13 1.29535e+019
+38 167 1.294e+019
+484 336 1.2936e+019
+146 97 1.2929e+019
+70 255 1.2907e+019
+253 74 1.28803e+019
+497 224 1.28682e+019
+287 342 1.28156e+019
+440 468 1.28148e+019
+61 181 1.2813e+019
+129 309 1.27783e+019
+89 197 1.27639e+019
+53 221 1.27492e+019
+274 76 1.27462e+019
+191 189 1.27461e+019
+159 197 1.27459e+019
+396 104 1.27296e+019
+45 342 1.27238e+019
+168 243 1.27129e+019
+39 143 1.27085e+019
+106 77 1.26768e+019
+221 114 1.26652e+019
+115 306 1.26544e+019
+58 253 1.26431e+019
+100 95 1.26411e+019
+485 4 1.26394e+019
+441 321 1.26192e+019
+558 462 1.26037e+019
+309 33 1.25994e+019
+492 456 1.2597e+019
+74 186 1.25956e+019
+144 326 1.25946e+019
+10 218 1.25893e+019
+572 451 1.25892e+019
+220 149 1.25885e+019
+500 264 1.25884e+019
+288 439 1.25671e+019
+148 131 1.25605e+019
+65 252 1.25593e+019
+398 265 1.25485e+019
+291 30 1.25413e+019
+479 451 1.2538e+019
+304 162 1.25333e+019
+465 281 1.25332e+019
+371 82 1.25329e+019
+43 474 1.25303e+019
+52 152 1.25267e+019
+281 418 1.2514e+019
+274 216 1.24983e+019
+127 41 1.24839e+019
+356 251 1.24685e+019
+22 58 1.24641e+019
+407 196 1.24551e+019
+296 89 1.24488e+019
+282 351 1.24364e+019
+433 278 1.24345e+019
+124 161 1.24269e+019
+89 376 1.24214e+019
+168 150 1.24038e+019
+274 206 1.2391e+019
+472 201 1.23594e+019
+358 53 1.23484e+019
+45 137 1.23477e+019
+575 98 1.23216e+019
+223 177 1.23123e+019
+246 106 1.23123e+019
+500 318 1.22942e+019
+279 86 1.22876e+019
+122 216 1.2272e+019
+193 290 1.22622e+019
+378 316 1.22579e+019
+571 383 1.22464e+019
+247 394 1.22272e+019
+240 196 1.22257e+019
+286 72 1.22158e+019
+364 256 1.22102e+019
+110 112 1.22025e+019
+18 236 1.21946e+019
+368 337 1.21625e+019
+439 24 1.21582e+019
+48 79 1.21479e+019
+465 139 1.21396e+019
+166 117 1.2137e+019
+280 219 1.21366e+019
+485 327 1.21218e+019
+79 24 1.20966e+019
+85 197 1.2088e+019
+121 446 1.20835e+019
+157 76 1.20775e+019
+65 363 1.20689e+019
+35 236 1.20405e+019
+136 93 1.20396e+019
+211 187 1.2036e+019
+184 318 1.20353e+019
+214 450 1.20326e+019
+110 168 1.20253e+019
+109 428 1.20221e+019
+57 168 1.20218e+019
+197 148 1.20046e+019
+335 445 1.20038e+019
+488 140 1.19973e+019
+525 381 1.19939e+019
+435 303 1.19832e+019
+88 369 1.19817e+019
+184 94 1.19781e+019
+160 430 1.1963e+019
+258 131 1.19484e+019
+272 289 1.19395e+019
+167 290 1.19393e+019
+424 48 1.1937e+019
+466 40 1.19175e+019
+350 86 1.19174e+019
+390 161 1.19147e+019
+531 398 1.19083e+019
+541 62 1.19053e+019
+429 4 1.18788e+019
+284 406 1.18743e+019
+251 152 1.18651e+019
+533 340 1.18519e+019
+437 466 1.18431e+019
+462 45 1.1842e+019
+64 276 1.18399e+019
+267 52 1.18311e+019
+20 219 1.18142e+019
+380 180 1.1813e+019
+317 385 1.18054e+019
+179 103 1.18047e+019
+133 65 1.1789e+019
+390 420 1.17656e+019
+362 101 1.17617e+019
+479 81 1.17486e+019
+289 164 1.1748e+019
+575 126 1.17474e+019
+327 90 1.17321e+019
+162 211 1.1724e+019
+498 20 1.17187e+019
+412 220 1.17184e+019
+320 119 1.1706e+019
+59 60 1.17022e+019
+459 44 1.16594e+019
+88 354 1.16575e+019
+128 128 1.16566e+019
+104 430 1.16467e+019
+70 130 1.16366e+019
+546 261 1.16322e+019
+78 41 1.16267e+019
+386 126 1.1614e+019
+507 3 1.15997e+019
+559 271 1.15983e+019
+423 116 1.15882e+019
+113 356 1.15833e+019
+359 291 1.15799e+019
+109 340 1.15689e+019
+402 276 1.1565e+019
+23 219 1.15648e+019
+256 405 1.15631e+019
+193 171 1.1537e+019
+49 453 1.15251e+019
+516 120 1.15216e+019
+378 63 1.15053e+019
+375 1 1.14978e+019
+533 122 1.14958e+019
+157 40 1.14825e+019
+30 66 1.14631e+019
+384 146 1.14512e+019
+449 403 1.14476e+019
+90 289 1.14467e+019
+41 121 1.14285e+019
+272 241 1.14269e+019
+434 156 1.14248e+019
+293 334 1.14244e+019
+387 167 1.14183e+019
+259 161 1.14164e+019
+148 3 1.13924e+019
+159 112 1.13913e+019
+261 287 1.13881e+019
+142 179 1.138e+019
+297 181 1.13773e+019
+399 298 1.13731e+019
+551 385 1.1357e+019
+243 32 1.13337e+019
+210 13 1.12968e+019
+241 59 1.1274e+019
+101 362 1.12726e+019
+140 98 1.12672e+019
+544 91 1.12612e+019
+95 20 1.12445e+019
+117 360 1.12293e+019
+540 140 1.12137e+019
+366 259 1.12127e+019
+167 19 1.1188e+019
+203 293 1.11798e+019
+83 404 1.11756e+019
+263 404 1.11291e+019
+314 75 1.11265e+019
+156 307 1.11196e+019
+561 60 1.1113e+019
+201 21 1.11097e+019
+386 63 1.10985e+019
+303 180 1.1084e+019
+543 57 1.10804e+019
+57 332 1.10643e+019
+447 351 1.10594e+019
+333 216 1.10524e+019
+59 79 1.10434e+019
+333 415 1.10421e+019
+67 47 1.10421e+019
+539 126 1.10373e+019
+361 331 1.10349e+019
+440 121 1.10267e+019
+131 73 1.1021e+019
+63 318 1.10151e+019
+21 132 1.10101e+019
+39 24 1.1006e+019
+260 231 1.09988e+019
+429 121 1.09869e+019
+71 410 1.09823e+019
+180 106 1.09699e+019
+316 167 1.09607e+019
+226 180 1.09601e+019
+429 340 1.09507e+019
+113 175 1.09414e+019
+232 177 1.09245e+019
+339 447 1.09119e+019
+571 456 1.09065e+019
+94 94 1.08954e+019
+527 80 1.08925e+019
+16 435 1.08902e+019
+49 159 1.0887e+019
+220 210 1.08846e+019
+232 274 1.08846e+019
+569 420 1.08817e+019
+211 21 1.088e+019
+126 308 1.08783e+019
+356 256 1.08683e+019
+449 437 1.08555e+019
+95 374 1.08547e+019
+527 395 1.08508e+019
+85 178 1.08499e+019
+207 417 1.08315e+019
+394 222 1.08264e+019
+347 120 1.08254e+019
+84 289 1.08175e+019
+448 138 1.08145e+019
+153 217 1.07972e+019
+179 274 1.07796e+019
+572 142 1.07606e+019
+217 98 1.07589e+019
+447 244 1.07449e+019
+229 347 1.0741e+019
+512 95 1.07409e+019
+297 296 1.07108e+019
+215 426 1.0706e+019
+223 312 1.07034e+019
+224 398 1.06999e+019
+538 263 1.06981e+019
+400 319 1.06798e+019
+438 239 1.06779e+019
+48 131 1.06611e+019
+530 426 1.06572e+019
+18 319 1.06497e+019
+222 239 1.06472e+019
+342 334 1.06337e+019
+211 94 1.06322e+019
+258 237 1.06241e+019
+247 346 1.0606e+019
+416 86 1.06023e+019
+399 67 1.05783e+019
+375 340 1.05361e+019
+268 19 1.0519e+019
+403 180 1.05059e+019
+262 216 1.04933e+019
+450 440 1.04769e+019
+160 98 1.0473e+019
+433 319 1.04534e+019
+164 202 1.04526e+019
+2 435 1.04478e+019
+564 16 1.04431e+019
+356 341 1.04375e+019
+92 20 1.04321e+019
+546 140 1.04276e+019
+433 43 1.0426e+019
+212 53 1.04218e+019
+509 361 1.04182e+019
+345 48 1.04075e+019
+157 182 1.04048e+019
+326 353 1.03989e+019
+400 431 1.03916e+019
+191 208 1.03821e+019
+164 18 1.03792e+019
+148 398 1.03762e+019
+550 222 1.03655e+019
+510 223 1.03579e+019
+364 301 1.03576e+019
+570 408 1.03411e+019
+464 241 1.03321e+019
+233 296 1.03235e+019
+272 414 1.0315e+019
+540 165 1.02956e+019
+444 121 1.0283e+019
+379 122 1.02674e+019
+503 179 1.02453e+019
+164 380 1.02086e+019
+404 45 1.01973e+019
+23 322 1.01964e+019
+579 52 1.01912e+019
+78 271 1.01711e+019
+63 8 1.01669e+019
+122 127 1.0166e+019
+88 183 1.01576e+019
+138 2 1.01562e+019
+43 86 1.01465e+019
+272 91 1.01372e+019
+143 141 1.01357e+019
+336 298 1.01331e+019
+545 438 1.01311e+019
+454 115 1.01199e+019
+455 179 1.01191e+019
+405 337 1.01136e+019
+146 452 1.01125e+019
+503 167 1.01059e+019
+113 262 1.009e+019
+240 366 1.00891e+019
+569 183 1.00864e+019
+309 356 1.00845e+019
+168 422 1.00843e+019
+90 79 1.00799e+019
+263 31 1.00789e+019
+278 263 1.00773e+019
+262 319 1.00746e+019
+165 213 1.00648e+019
+487 22 1.00636e+019
+328 295 1.00565e+019
+96 125 1.00562e+019
+34 112 1.00455e+019
+305 106 1.00374e+019
+546 182 1.00354e+019
+500 42 1.00317e+019
+365 85 1.00193e+019
+213 62 1.00167e+019
+446 376 1.00131e+019
+179 153 1.00094e+019
+355 10 1.0008e+019
+431 275 1.00065e+019
+182 130 1.00007e+019
+553 382 9.98114e+018
+275 457 9.97808e+018
+117 115 9.96382e+018
+436 320 9.95783e+018
+524 172 9.94956e+018
+472 453 9.93632e+018
+561 223 9.93205e+018
+221 339 9.92774e+018
+102 42 9.92394e+018
+231 344 9.91682e+018
+149 231 9.90822e+018
+500 461 9.90357e+018
+316 336 9.89568e+018
+512 350 9.86554e+018
+318 460 9.84364e+018
+167 431 9.84012e+018
+377 461 9.83817e+018
+420 283 9.83576e+018
+445 297 9.82725e+018
+208 421 9.82599e+018
+243 273 9.80973e+018
+562 144 9.80679e+018
+566 177 9.80345e+018
+336 426 9.79207e+018
+516 141 9.77562e+018
+576 175 9.75403e+018
+285 443 9.74608e+018
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_7_5.txt b/test_data/harriscorners/hc_msc_3.00_0.04_7_5.txt
new file mode 100644
index 0000000..137a596
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_7_5.txt
@@ -0,0 +1,824 @@
+823
+244 94 1.87775e+021
+273 365 9.26061e+020
+423 178 8.16558e+020
+237 19 8.14972e+020
+362 400 7.87473e+020
+261 297 7.0927e+020
+82 28 7.01247e+020
+543 365 6.52354e+020
+27 9 6.35072e+020
+65 343 6.26293e+020
+76 257 6.17333e+020
+131 26 6.16091e+020
+281 113 6.12302e+020
+195 58 5.65501e+020
+465 393 5.63954e+020
+252 13 5.61907e+020
+320 224 5.55213e+020
+420 181 5.34624e+020
+37 62 5.28994e+020
+420 177 5.2893e+020
+240 91 5.28307e+020
+343 9 5.24211e+020
+58 218 5.18074e+020
+386 10 4.89463e+020
+131 36 4.86489e+020
+448 297 4.81101e+020
+127 164 4.80108e+020
+526 24 4.75043e+020
+360 295 4.67175e+020
+81 2 4.54872e+020
+200 17 4.50611e+020
+138 203 4.5036e+020
+427 320 4.50185e+020
+33 99 4.42955e+020
+447 397 4.30616e+020
+519 61 4.29201e+020
+483 23 4.27497e+020
+510 124 4.22015e+020
+233 15 4.16205e+020
+128 2 4.14804e+020
+102 59 4.11714e+020
+418 439 4.097e+020
+78 2 4.04749e+020
+553 40 4.01707e+020
+214 72 3.98799e+020
+35 138 3.97414e+020
+299 52 3.95271e+020
+320 313 3.94701e+020
+448 262 3.94052e+020
+257 386 3.93401e+020
+294 15 3.91516e+020
+124 198 3.89216e+020
+152 222 3.88953e+020
+484 339 3.87805e+020
+243 202 3.84311e+020
+116 44 3.84127e+020
+452 339 3.83953e+020
+424 321 3.83939e+020
+480 297 3.83135e+020
+524 21 3.78402e+020
+511 167 3.75663e+020
+387 178 3.74741e+020
+358 260 3.73301e+020
+263 441 3.72788e+020
+475 262 3.69975e+020
+242 71 3.68716e+020
+302 185 3.68508e+020
+433 112 3.66965e+020
+73 24 3.6321e+020
+225 420 3.62557e+020
+456 280 3.61553e+020
+122 43 3.61075e+020
+45 27 3.60049e+020
+338 12 3.58776e+020
+340 9 3.55087e+020
+507 122 3.52427e+020
+35 145 3.50525e+020
+390 61 3.49165e+020
+302 182 3.45682e+020
+513 341 3.43054e+020
+101 222 3.40617e+020
+214 56 3.37947e+020
+477 20 3.37136e+020
+222 38 3.3454e+020
+216 279 3.30839e+020
+181 111 3.30427e+020
+390 57 3.24893e+020
+462 279 3.21975e+020
+308 371 3.21167e+020
+426 119 3.20455e+020
+544 168 3.199e+020
+74 6 3.18851e+020
+435 69 3.18818e+020
+325 341 3.18272e+020
+138 110 3.16442e+020
+167 287 3.13054e+020
+556 40 3.11947e+020
+134 214 3.10894e+020
+483 178 3.10019e+020
+183 400 3.09493e+020
+4 66 3.06705e+020
+360 131 3.05749e+020
+508 16 3.04589e+020
+175 109 3.04268e+020
+55 290 3.0272e+020
+10 101 3.00663e+020
+2 47 2.99572e+020
+356 220 2.98396e+020
+65 215 2.98135e+020
+41 63 2.97441e+020
+125 364 2.93716e+020
+60 41 2.90969e+020
+302 215 2.88616e+020
+343 338 2.87605e+020
+411 354 2.86548e+020
+421 335 2.82097e+020
+177 106 2.81447e+020
+142 324 2.81051e+020
+413 162 2.79227e+020
+362 251 2.78542e+020
+456 283 2.78097e+020
+390 295 2.77918e+020
+365 144 2.77091e+020
+112 392 2.75828e+020
+55 29 2.74843e+020
+283 403 2.74176e+020
+92 214 2.7408e+020
+88 148 2.7379e+020
+533 184 2.73678e+020
+163 216 2.70517e+020
+270 70 2.70009e+020
+104 198 2.70008e+020
+283 72 2.67898e+020
+409 64 2.67764e+020
+111 239 2.67515e+020
+145 310 2.66802e+020
+108 27 2.66545e+020
+234 346 2.66455e+020
+169 57 2.66067e+020
+225 38 2.64591e+020
+425 377 2.64496e+020
+526 60 2.644e+020
+220 16 2.63235e+020
+120 51 2.62955e+020
+566 43 2.61637e+020
+57 4 2.61375e+020
+40 296 2.60985e+020
+92 198 2.6009e+020
+327 142 2.59315e+020
+471 240 2.5894e+020
+337 9 2.57982e+020
+96 446 2.57589e+020
+100 198 2.57327e+020
+429 3 2.57093e+020
+13 218 2.56938e+020
+371 162 2.55962e+020
+440 339 2.55881e+020
+383 9 2.55721e+020
+404 121 2.54989e+020
+515 76 2.54865e+020
+387 220 2.5433e+020
+329 128 2.52802e+020
+545 41 2.52213e+020
+431 147 2.51533e+020
+150 307 2.51108e+020
+86 255 2.50307e+020
+195 127 2.49685e+020
+509 455 2.48187e+020
+123 185 2.47869e+020
+480 178 2.47594e+020
+309 7 2.46744e+020
+479 262 2.46586e+020
+412 256 2.4653e+020
+125 254 2.46169e+020
+84 77 2.45632e+020
+490 140 2.45429e+020
+329 253 2.45231e+020
+360 337 2.44291e+020
+62 203 2.44068e+020
+272 280 2.43139e+020
+171 18 2.42654e+020
+391 144 2.42545e+020
+579 16 2.42533e+020
+482 366 2.41869e+020
+210 451 2.41467e+020
+516 17 2.40996e+020
+261 165 2.40817e+020
+36 173 2.39987e+020
+95 477 2.39628e+020
+404 187 2.39013e+020
+220 290 2.37926e+020
+347 241 2.36741e+020
+139 173 2.3469e+020
+401 122 2.34654e+020
+207 450 2.32678e+020
+434 398 2.31864e+020
+64 60 2.31209e+020
+351 321 2.30767e+020
+497 81 2.29722e+020
+32 66 2.29428e+020
+6 11 2.29319e+020
+50 12 2.28923e+020
+260 222 2.28869e+020
+470 421 2.27353e+020
+174 40 2.27316e+020
+108 46 2.2729e+020
+355 268 2.26267e+020
+510 173 2.25745e+020
+250 364 2.25133e+020
+511 128 2.2441e+020
+378 7 2.23868e+020
+55 66 2.23431e+020
+41 217 2.23147e+020
+65 319 2.22501e+020
+528 98 2.22445e+020
+68 149 2.22321e+020
+94 217 2.22101e+020
+230 36 2.21814e+020
+387 294 2.20561e+020
+417 23 2.20529e+020
+476 5 2.20518e+020
+334 436 2.20251e+020
+542 210 2.20241e+020
+527 39 2.19224e+020
+302 165 2.19095e+020
+163 277 2.18942e+020
+417 8 2.18857e+020
+368 144 2.18625e+020
+348 179 2.17365e+020
+422 48 2.16983e+020
+64 236 2.16906e+020
+393 295 2.16551e+020
+528 102 2.16083e+020
+482 328 2.15054e+020
+545 4 2.14951e+020
+102 4 2.14854e+020
+159 138 2.14561e+020
+535 243 2.14515e+020
+35 9 2.13521e+020
+210 435 2.13136e+020
+16 216 2.12271e+020
+48 99 2.12119e+020
+358 334 2.11486e+020
+264 445 2.10683e+020
+246 399 2.10678e+020
+494 140 2.10013e+020
+252 423 2.10005e+020
+71 147 2.08734e+020
+168 197 2.08509e+020
+408 182 2.08118e+020
+210 446 2.07542e+020
+177 260 2.07155e+020
+344 107 2.06943e+020
+543 15 2.06508e+020
+545 59 2.06326e+020
+489 342 2.06288e+020
+354 321 2.06281e+020
+302 205 2.06005e+020
+270 166 2.0597e+020
+278 222 2.05907e+020
+246 206 2.05743e+020
+58 364 2.04678e+020
+344 263 2.04474e+020
+515 347 2.0434e+020
+378 354 2.0419e+020
+57 183 2.0329e+020
+254 138 2.02706e+020
+42 339 2.02449e+020
+448 168 2.0228e+020
+66 477 2.01332e+020
+365 105 2.01101e+020
+211 185 2.00583e+020
+540 15 1.98498e+020
+393 66 1.97855e+020
+250 33 1.97465e+020
+164 327 1.96984e+020
+228 292 1.96838e+020
+526 423 1.9647e+020
+326 425 1.95502e+020
+78 79 1.95493e+020
+300 265 1.94309e+020
+48 151 1.93804e+020
+212 182 1.92588e+020
+473 4 1.92143e+020
+395 261 1.92061e+020
+345 350 1.9201e+020
+386 243 1.89624e+020
+204 16 1.89166e+020
+453 206 1.88936e+020
+520 184 1.88769e+020
+127 76 1.88422e+020
+238 349 1.88349e+020
+100 78 1.88201e+020
+344 110 1.88158e+020
+231 125 1.88151e+020
+184 35 1.86509e+020
+68 337 1.86447e+020
+69 476 1.86443e+020
+530 186 1.85906e+020
+466 196 1.85878e+020
+192 219 1.85554e+020
+236 130 1.85495e+020
+406 198 1.84754e+020
+209 20 1.84609e+020
+248 403 1.84521e+020
+276 352 1.84179e+020
+226 221 1.83707e+020
+541 124 1.83186e+020
+245 143 1.81777e+020
+160 143 1.812e+020
+513 296 1.81007e+020
+219 107 1.80024e+020
+137 206 1.78097e+020
+332 295 1.78061e+020
+157 196 1.77829e+020
+324 315 1.77816e+020
+95 6 1.77319e+020
+346 392 1.77187e+020
+424 44 1.76832e+020
+53 43 1.76783e+020
+163 74 1.76695e+020
+485 59 1.76638e+020
+221 432 1.76414e+020
+55 293 1.76287e+020
+512 262 1.76027e+020
+375 4 1.76021e+020
+36 176 1.75967e+020
+541 18 1.75374e+020
+133 93 1.74567e+020
+314 83 1.74423e+020
+413 299 1.73132e+020
+51 98 1.73101e+020
+452 376 1.72838e+020
+286 210 1.72687e+020
+47 11 1.7249e+020
+44 97 1.724e+020
+123 272 1.7189e+020
+234 162 1.71338e+020
+509 8 1.70924e+020
+46 355 1.70684e+020
+328 297 1.7067e+020
+156 317 1.70629e+020
+363 7 1.70338e+020
+31 270 1.70071e+020
+479 16 1.69703e+020
+311 150 1.69621e+020
+167 325 1.69588e+020
+136 173 1.6874e+020
+562 146 1.68545e+020
+243 165 1.68073e+020
+47 147 1.67782e+020
+498 159 1.67314e+020
+358 10 1.67093e+020
+224 182 1.66195e+020
+551 381 1.66178e+020
+328 65 1.65681e+020
+221 180 1.65659e+020
+37 218 1.65501e+020
+275 329 1.65327e+020
+399 261 1.64822e+020
+46 82 1.64542e+020
+576 14 1.64539e+020
+166 97 1.6434e+020
+512 99 1.64139e+020
+449 445 1.64069e+020
+102 359 1.63616e+020
+18 343 1.63479e+020
+85 214 1.63289e+020
+488 263 1.63051e+020
+379 66 1.62928e+020
+517 57 1.62793e+020
+360 143 1.62776e+020
+141 394 1.61996e+020
+509 343 1.61864e+020
+325 164 1.61655e+020
+154 236 1.61582e+020
+530 144 1.61551e+020
+140 23 1.61435e+020
+158 56 1.60626e+020
+457 43 1.60623e+020
+272 53 1.60096e+020
+423 398 1.60083e+020
+470 418 1.59768e+020
+90 255 1.59417e+020
+239 421 1.59334e+020
+377 119 1.59331e+020
+219 35 1.59072e+020
+61 134 1.58752e+020
+127 95 1.58747e+020
+512 222 1.58598e+020
+256 149 1.58408e+020
+361 221 1.58148e+020
+358 64 1.58097e+020
+528 189 1.58064e+020
+175 112 1.58048e+020
+547 164 1.57836e+020
+108 39 1.5776e+020
+360 394 1.57615e+020
+41 10 1.57606e+020
+265 31 1.57318e+020
+529 183 1.56896e+020
+45 62 1.56582e+020
+565 160 1.5565e+020
+489 43 1.55609e+020
+293 26 1.55428e+020
+531 102 1.55362e+020
+446 7 1.55254e+020
+527 361 1.54661e+020
+553 378 1.54524e+020
+508 5 1.54485e+020
+543 457 1.54447e+020
+30 219 1.54426e+020
+476 341 1.54298e+020
+279 128 1.53925e+020
+191 124 1.53747e+020
+366 247 1.53419e+020
+558 462 1.53346e+020
+253 10 1.52916e+020
+330 9 1.52843e+020
+87 209 1.52645e+020
+79 197 1.51776e+020
+275 319 1.51759e+020
+360 217 1.5174e+020
+92 292 1.51453e+020
+456 375 1.51294e+020
+141 1 1.50727e+020
+164 358 1.50168e+020
+436 304 1.49982e+020
+192 330 1.49769e+020
+113 345 1.49671e+020
+537 393 1.49286e+020
+328 294 1.4927e+020
+471 212 1.49212e+020
+57 373 1.47561e+020
+456 84 1.47271e+020
+523 123 1.47244e+020
+502 361 1.47199e+020
+287 166 1.46949e+020
+157 73 1.4672e+020
+58 29 1.46613e+020
+77 41 1.46344e+020
+350 145 1.46221e+020
+374 393 1.46005e+020
+325 294 1.45689e+020
+249 423 1.45535e+020
+449 219 1.45356e+020
+187 289 1.45341e+020
+324 223 1.45303e+020
+338 165 1.45193e+020
+384 260 1.45043e+020
+371 90 1.44957e+020
+286 296 1.44953e+020
+245 294 1.4494e+020
+207 224 1.44885e+020
+36 201 1.44878e+020
+166 244 1.44802e+020
+542 129 1.44601e+020
+364 297 1.44567e+020
+539 405 1.44525e+020
+291 50 1.44394e+020
+135 129 1.44188e+020
+498 225 1.44154e+020
+191 358 1.44104e+020
+71 96 1.43934e+020
+405 375 1.43842e+020
+42 24 1.43334e+020
+63 218 1.43317e+020
+278 144 1.43187e+020
+202 314 1.43164e+020
+298 69 1.42962e+020
+329 12 1.4277e+020
+28 29 1.42468e+020
+196 83 1.42277e+020
+203 311 1.42189e+020
+356 255 1.42149e+020
+346 298 1.42142e+020
+64 371 1.41902e+020
+444 119 1.41895e+020
+331 131 1.4153e+020
+524 185 1.41477e+020
+182 380 1.40929e+020
+247 316 1.40787e+020
+30 97 1.4037e+020
+576 177 1.40333e+020
+306 440 1.40295e+020
+84 145 1.40202e+020
+144 6 1.40134e+020
+430 45 1.40018e+020
+129 168 1.39443e+020
+358 282 1.39416e+020
+475 246 1.39241e+020
+471 63 1.39226e+020
+429 223 1.3889e+020
+270 367 1.38791e+020
+127 187 1.38328e+020
+220 100 1.37499e+020
+478 402 1.37346e+020
+584 38 1.37307e+020
+471 83 1.37246e+020
+449 204 1.3713e+020
+469 140 1.37061e+020
+425 324 1.3706e+020
+519 264 1.36667e+020
+224 218 1.36609e+020
+34 268 1.3657e+020
+362 369 1.36495e+020
+393 164 1.36108e+020
+180 394 1.35529e+020
+161 168 1.35365e+020
+387 16 1.35307e+020
+363 254 1.35238e+020
+472 42 1.35229e+020
+444 452 1.34998e+020
+177 39 1.3492e+020
+209 16 1.34842e+020
+436 320 1.34542e+020
+84 476 1.34527e+020
+363 102 1.34501e+020
+255 423 1.34495e+020
+333 91 1.3408e+020
+435 281 1.33818e+020
+427 182 1.33668e+020
+228 128 1.33523e+020
+273 131 1.33378e+020
+116 428 1.33301e+020
+449 437 1.33037e+020
+290 137 1.32669e+020
+193 216 1.32241e+020
+403 265 1.32117e+020
+21 61 1.32112e+020
+228 185 1.319e+020
+542 132 1.31804e+020
+501 143 1.31796e+020
+214 449 1.3173e+020
+397 265 1.3171e+020
+393 216 1.31368e+020
+263 403 1.31294e+020
+138 98 1.31067e+020
+351 270 1.30481e+020
+59 78 1.30336e+020
+262 201 1.30032e+020
+140 182 1.2978e+020
+174 238 1.29755e+020
+479 293 1.29659e+020
+332 127 1.29433e+020
+408 45 1.29145e+020
+109 96 1.29097e+020
+418 80 1.29021e+020
+291 265 1.28846e+020
+460 44 1.2883e+020
+471 268 1.28679e+020
+132 132 1.28594e+020
+244 14 1.28556e+020
+59 75 1.28454e+020
+131 148 1.28439e+020
+118 75 1.2838e+020
+146 21 1.28273e+020
+37 287 1.28205e+020
+168 180 1.28134e+020
+366 5 1.28007e+020
+121 48 1.27875e+020
+541 100 1.27718e+020
+414 4 1.27702e+020
+339 391 1.27688e+020
+578 42 1.27264e+020
+573 422 1.27187e+020
+297 331 1.27111e+020
+383 354 1.26871e+020
+273 296 1.26356e+020
+221 177 1.26316e+020
+389 97 1.26086e+020
+276 180 1.25934e+020
+530 362 1.25539e+020
+166 277 1.25425e+020
+82 135 1.25352e+020
+571 450 1.25237e+020
+463 23 1.2503e+020
+349 298 1.24917e+020
+435 90 1.246e+020
+101 164 1.24425e+020
+38 168 1.24261e+020
+432 276 1.24243e+020
+193 17 1.2417e+020
+390 325 1.241e+020
+256 35 1.23399e+020
+402 6 1.23293e+020
+163 315 1.23289e+020
+502 160 1.23165e+020
+349 87 1.23077e+020
+258 161 1.23072e+020
+191 55 1.22957e+020
+80 40 1.22884e+020
+190 216 1.2276e+020
+455 59 1.22747e+020
+205 160 1.22659e+020
+160 183 1.22137e+020
+69 420 1.2211e+020
+561 463 1.22057e+020
+120 447 1.21927e+020
+478 13 1.21908e+020
+334 218 1.21894e+020
+109 137 1.21386e+020
+442 23 1.2131e+020
+270 185 1.21279e+020
+405 42 1.21126e+020
+432 303 1.20923e+020
+39 83 1.20884e+020
+434 225 1.20829e+020
+195 190 1.20471e+020
+187 264 1.20458e+020
+297 410 1.20349e+020
+491 59 1.20289e+020
+506 455 1.20244e+020
+425 203 1.20114e+020
+306 363 1.20103e+020
+258 201 1.20016e+020
+459 303 1.19952e+020
+330 89 1.19859e+020
+307 449 1.19734e+020
+233 200 1.19525e+020
+283 395 1.19446e+020
+113 95 1.19446e+020
+569 383 1.19195e+020
+314 147 1.19048e+020
+111 111 1.18958e+020
+571 447 1.1884e+020
+322 425 1.1869e+020
+210 36 1.1829e+020
+191 205 1.18213e+020
+549 59 1.1819e+020
+463 40 1.18165e+020
+144 17 1.17982e+020
+173 312 1.17781e+020
+88 368 1.17776e+020
+174 19 1.1745e+020
+364 181 1.16774e+020
+565 463 1.16612e+020
+417 84 1.16578e+020
+526 346 1.16361e+020
+336 391 1.16323e+020
+108 183 1.16158e+020
+433 241 1.1589e+020
+44 9 1.15873e+020
+488 83 1.15653e+020
+73 164 1.15482e+020
+363 358 1.15111e+020
+51 61 1.15033e+020
+269 67 1.146e+020
+163 242 1.14519e+020
+107 428 1.14345e+020
+180 292 1.14278e+020
+224 178 1.14229e+020
+514 382 1.14205e+020
+381 26 1.1381e+020
+386 327 1.1369e+020
+538 97 1.13223e+020
+431 82 1.12859e+020
+162 111 1.12812e+020
+264 311 1.12673e+020
+537 186 1.12554e+020
+130 78 1.12299e+020
+228 289 1.12042e+020
+338 263 1.11735e+020
+548 44 1.11588e+020
+154 114 1.11411e+020
+215 175 1.1139e+020
+259 35 1.11311e+020
+483 143 1.11274e+020
+259 368 1.1108e+020
+196 193 1.11013e+020
+187 99 1.10997e+020
+177 164 1.10992e+020
+247 395 1.10898e+020
+432 269 1.10851e+020
+326 181 1.10802e+020
+500 265 1.10619e+020
+53 221 1.10618e+020
+83 72 1.10523e+020
+130 255 1.09897e+020
+199 131 1.0969e+020
+419 53 1.09624e+020
+118 115 1.09506e+020
+486 140 1.09446e+020
+183 19 1.09099e+020
+173 116 1.08798e+020
+382 412 1.08746e+020
+389 140 1.08583e+020
+9 77 1.08401e+020
+90 376 1.08391e+020
+163 208 1.08319e+020
+41 136 1.08277e+020
+192 189 1.08211e+020
+449 178 1.08091e+020
+20 317 1.08034e+020
+39 355 1.07918e+020
+130 476 1.07872e+020
+220 150 1.0774e+020
+390 49 1.07595e+020
+527 222 1.07548e+020
+354 295 1.07508e+020
+212 33 1.07116e+020
+294 269 1.07084e+020
+559 80 1.0698e+020
+118 425 1.06906e+020
+514 121 1.06766e+020
+338 473 1.06656e+020
+284 199 1.06603e+020
+328 214 1.06495e+020
+501 22 1.06398e+020
+485 4 1.06253e+020
+179 329 1.06219e+020
+31 135 1.06128e+020
+166 312 1.05887e+020
+341 123 1.05795e+020
+458 3 1.05503e+020
+46 218 1.05261e+020
+110 263 1.05234e+020
+391 449 1.04973e+020
+482 332 1.04971e+020
+170 310 1.04902e+020
+209 395 1.04827e+020
+275 197 1.04228e+020
+152 196 1.0411e+020
+302 189 1.04077e+020
+109 169 1.04017e+020
+435 163 1.03991e+020
+402 45 1.03938e+020
+106 77 1.03617e+020
+462 221 1.03593e+020
+576 39 1.03421e+020
+190 312 1.03337e+020
+111 165 1.02872e+020
+452 60 1.02657e+020
+271 182 1.0252e+020
+493 181 1.02479e+020
+280 132 1.02402e+020
+576 19 1.02386e+020
+130 72 1.02227e+020
+460 267 1.02165e+020
+268 289 1.01798e+020
+481 451 1.01648e+020
+561 320 1.01603e+020
+191 146 1.01572e+020
+358 291 1.01524e+020
+417 300 1.01492e+020
+164 183 1.01417e+020
+376 181 1.01416e+020
+34 31 1.01185e+020
+536 459 1.01168e+020
+12 215 1.01151e+020
+268 52 1.00893e+020
+87 364 1.0089e+020
+393 48 1.00707e+020
+206 435 1.00649e+020
+344 48 1.00634e+020
+29 236 1.00611e+020
+359 53 1.00477e+020
+451 86 1.00476e+020
+166 110 9.98523e+019
+88 252 9.98364e+019
+578 52 9.95951e+019
+116 307 9.94855e+019
+325 88 9.9214e+019
+380 180 9.91653e+019
+168 291 9.91447e+019
+418 68 9.90585e+019
+114 3 9.90364e+019
+340 447 9.89313e+019
+473 202 9.88504e+019
+221 183 9.88455e+019
+213 124 9.86933e+019
+448 339 9.8637e+019
+281 419 9.85627e+019
+362 397 9.84532e+019
+71 409 9.84037e+019
+85 310 9.83687e+019
+333 258 9.82796e+019
+430 89 9.82122e+019
+56 78 9.81808e+019
+301 106 9.79705e+019
+104 304 9.78196e+019
+257 251 9.77537e+019
+259 71 9.77009e+019
+599 364 9.76464e+019
+48 255 9.74672e+019
+332 201 9.73598e+019
+166 117 9.73123e+019
+345 277 9.73043e+019
+178 18 9.72006e+019
+301 103 9.71281e+019
+437 466 9.71082e+019
+328 353 9.68988e+019
+324 260 9.6885e+019
+305 193 9.677e+019
+249 219 9.67238e+019
+313 76 9.64016e+019
+575 99 9.63529e+019
+452 371 9.63101e+019
+309 441 9.58386e+019
+441 239 9.57739e+019
+573 405 9.57133e+019
+451 22 9.55647e+019
+248 313 9.54226e+019
+289 349 9.53549e+019
+157 40 9.51313e+019
+522 425 9.51126e+019
+156 94 9.50761e+019
+445 114 9.49831e+019
+259 237 9.49509e+019
+398 168 9.49159e+019
+178 94 9.48855e+019
+474 240 9.47787e+019
+500 474 9.46539e+019
+191 350 9.46499e+019
+374 240 9.46146e+019
+467 424 9.44518e+019
+570 422 9.44175e+019
+186 19 9.43234e+019
+418 283 9.42762e+019
+317 315 9.40579e+019
+317 149 9.40097e+019
+256 182 9.39571e+019
+546 139 9.39552e+019
diff --git a/test_data/harriscorners/hc_msc_3.00_0.04_7_7.txt b/test_data/harriscorners/hc_msc_3.00_0.04_7_7.txt
new file mode 100644
index 0000000..b259726
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.04_7_7.txt
@@ -0,0 +1,994 @@
+993
+244 94 4.54756e+021
+498 1 2.89128e+021
+81 29 2.84968e+021
+130 26 2.73927e+021
+237 20 2.43927e+021
+421 180 2.2856e+021
+424 180 1.97444e+021
+261 298 1.9493e+021
+424 177 1.91973e+021
+240 92 1.8959e+021
+272 364 1.76478e+021
+26 9 1.76208e+021
+30 8 1.6834e+021
+195 58 1.65648e+021
+525 24 1.63081e+021
+76 257 1.63042e+021
+81 4 1.56351e+021
+543 365 1.50648e+021
+342 9 1.48334e+021
+37 63 1.45628e+021
+528 24 1.4543e+021
+152 223 1.45345e+021
+362 400 1.43983e+021
+130 37 1.43465e+021
+65 344 1.39373e+021
+510 124 1.38737e+021
+283 113 1.38112e+021
+385 10 1.36192e+021
+253 12 1.33117e+021
+477 22 1.33081e+021
+482 23 1.31428e+021
+476 262 1.2874e+021
+127 165 1.223e+021
+528 20 1.21495e+021
+77 4 1.21477e+021
+483 178 1.21407e+021
+388 10 1.2107e+021
+121 46 1.18742e+021
+485 338 1.18265e+021
+424 322 1.16909e+021
+58 218 1.16673e+021
+34 140 1.16469e+021
+429 2 1.15137e+021
+138 204 1.14927e+021
+214 57 1.149e+021
+129 1 1.14641e+021
+542 14 1.13027e+021
+175 110 1.12882e+021
+320 314 1.11767e+021
+60 40 1.10931e+021
+102 222 1.09821e+021
+302 185 1.09755e+021
+321 225 1.09392e+021
+357 259 1.07415e+021
+295 15 1.07279e+021
+257 386 1.06952e+021
+339 10 1.0694e+021
+464 393 1.0691e+021
+361 395 1.06009e+021
+361 294 1.05276e+021
+12 218 1.05156e+021
+61 217 1.0495e+021
+33 100 1.03453e+021
+519 60 1.0332e+021
+299 53 1.03287e+021
+510 16 1.03232e+021
+199 18 1.02227e+021
+55 30 1.02e+021
+433 112 1.01855e+021
+123 43 1.01265e+021
+451 339 1.00977e+021
+243 201 1.00009e+021
+179 110 9.96839e+020
+458 279 9.75992e+020
+163 215 9.69482e+020
+418 438 9.6816e+020
+107 28 9.63064e+020
+391 294 9.62312e+020
+523 62 9.45783e+020
+226 36 9.45392e+020
+71 25 9.43406e+020
+447 261 9.3921e+020
+103 60 9.39121e+020
+330 128 9.37211e+020
+241 70 9.33707e+020
+539 14 9.27109e+020
+83 77 9.16729e+020
+211 450 9.12746e+020
+35 145 9.08713e+020
+554 41 9.01196e+020
+512 342 8.96249e+020
+55 290 8.87608e+020
+389 61 8.79589e+020
+43 26 8.76716e+020
+224 39 8.75956e+020
+196 127 8.72051e+020
+490 139 8.71945e+020
+302 182 8.65335e+020
+359 334 8.56678e+020
+359 130 8.56206e+020
+262 441 8.5423e+020
+223 420 8.52762e+020
+576 16 8.45762e+020
+145 6 8.43435e+020
+403 121 8.35747e+020
+74 25 8.35e+020
+405 183 8.3492e+020
+310 6 8.34181e+020
+328 296 8.33394e+020
+221 36 8.3308e+020
+364 143 8.33057e+020
+101 198 8.32824e+020
+62 203 8.28543e+020
+448 299 8.27916e+020
+427 118 8.2653e+020
+182 398 8.24371e+020
+104 198 8.23013e+020
+470 421 8.228e+020
+115 43 8.2197e+020
+226 421 8.21069e+020
+534 185 8.12589e+020
+123 186 8.10272e+020
+359 220 8.07957e+020
+511 169 8.00805e+020
+511 166 7.97305e+020
+272 280 7.97215e+020
+64 318 7.95832e+020
+16 217 7.92734e+020
+3 65 7.82525e+020
+248 399 7.73503e+020
+423 332 7.70461e+020
+580 16 7.67163e+020
+408 183 7.66811e+020
+364 250 7.6541e+020
+506 16 7.59182e+020
+209 20 7.57468e+020
+528 102 7.56864e+020
+47 26 7.54249e+020
+447 296 7.53825e+020
+66 216 7.51699e+020
+69 476 7.51168e+020
+223 433 7.50969e+020
+302 215 7.46549e+020
+58 6 7.44708e+020
+325 341 7.39262e+020
+107 44 7.39013e+020
+480 296 7.37737e+020
+85 148 7.37646e+020
+232 125 7.3668e+020
+139 109 7.35081e+020
+126 254 7.31429e+020
+168 287 7.30664e+020
+342 264 7.30123e+020
+410 353 7.26433e+020
+544 168 7.25517e+020
+360 251 7.24341e+020
+416 9 7.22901e+020
+449 204 7.19829e+020
+73 6 7.17726e+020
+88 254 7.17307e+020
+215 71 7.13381e+020
+400 263 7.11932e+020
+284 402 7.1176e+020
+386 178 7.11483e+020
+45 339 7.06868e+020
+88 148 7.03196e+020
+327 141 6.97788e+020
+265 446 6.94396e+020
+565 42 6.94047e+020
+7 10 6.93743e+020
+436 397 6.93616e+020
+390 143 6.93473e+020
+367 144 6.93203e+020
+150 306 6.91946e+020
+436 68 6.90917e+020
+66 476 6.90377e+020
+453 204 6.88959e+020
+36 173 6.86713e+020
+528 186 6.86083e+020
+352 321 6.85767e+020
+174 40 6.83237e+020
+387 220 6.83215e+020
+447 397 6.82882e+020
+413 256 6.81531e+020
+379 5 6.73078e+020
+143 324 6.72291e+020
+112 392 6.70019e+020
+302 205 6.68286e+020
+165 182 6.65937e+020
+513 262 6.65676e+020
+124 197 6.65273e+020
+309 370 6.63096e+020
+457 43 6.63081e+020
+211 436 6.60232e+020
+526 38 6.58841e+020
+545 59 6.58753e+020
+211 185 6.58228e+020
+89 213 6.56349e+020
+135 213 6.54918e+020
+169 56 6.54037e+020
+514 346 6.53625e+020
+129 75 6.53551e+020
+329 258 6.53101e+020
+470 239 6.51121e+020
+48 151 6.47537e+020
+4 46 6.46773e+020
+546 41 6.44853e+020
+345 339 6.43981e+020
+444 118 6.41155e+020
+393 65 6.40615e+020
+136 173 6.38682e+020
+219 106 6.38373e+020
+165 327 6.3836e+020
+229 36 6.35818e+020
+159 75 6.34314e+020
+404 186 6.34049e+020
+345 264 6.33883e+020
+41 217 6.32339e+020
+448 166 6.31448e+020
+545 2 6.31158e+020
+344 108 6.30853e+020
+101 201 6.3059e+020
+424 45 6.29797e+020
+432 276 6.27531e+020
+259 165 6.26683e+020
+303 164 6.212e+020
+389 21 6.21177e+020
+196 124 6.20869e+020
+215 280 6.20304e+020
+175 113 6.17559e+020
+360 142 6.17429e+020
+40 296 6.1725e+020
+160 139 6.1647e+020
+430 147 6.15677e+020
+110 240 6.1357e+020
+355 254 6.13503e+020
+120 185 6.12524e+020
+416 23 6.10862e+020
+269 70 6.07298e+020
+47 98 6.02498e+020
+126 364 5.99519e+020
+455 58 5.99199e+020
+473 5 5.98803e+020
+508 454 5.97576e+020
+247 206 5.95941e+020
+409 65 5.95391e+020
+544 457 5.93751e+020
+413 162 5.93545e+020
+104 3 5.93356e+020
+10 101 5.92916e+020
+549 41 5.92226e+020
+364 104 5.89494e+020
+389 164 5.89282e+020
+32 270 5.89043e+020
+278 220 5.88782e+020
+561 461 5.88732e+020
+479 15 5.85903e+020
+452 374 5.83396e+020
+168 196 5.81425e+020
+92 213 5.78552e+020
+128 187 5.78397e+020
+158 72 5.77888e+020
+328 255 5.77768e+020
+252 423 5.7747e+020
+407 198 5.71798e+020
+79 79 5.71755e+020
+76 40 5.71283e+020
+93 216 5.70207e+020
+256 151 5.68603e+020
+516 17 5.67685e+020
+153 196 5.65445e+020
+62 60 5.65119e+020
+557 39 5.65089e+020
+524 186 5.64805e+020
+346 241 5.63106e+020
+453 207 5.62679e+020
+521 184 5.61816e+020
+396 262 5.61614e+020
+423 49 5.60473e+020
+371 161 5.59299e+020
+493 139 5.58844e+020
+165 179 5.58249e+020
+437 304 5.58195e+020
+143 311 5.5693e+020
+477 5 5.56613e+020
+103 77 5.56062e+020
+557 463 5.53252e+020
+236 348 5.52356e+020
+225 181 5.50209e+020
+500 159 5.50179e+020
+335 436 5.49779e+020
+394 294 5.49524e+020
+65 60 5.4824e+020
+541 124 5.47705e+020
+233 345 5.47688e+020
+421 46 5.47501e+020
+282 72 5.46019e+020
+346 350 5.45595e+020
+191 126 5.443e+020
+426 377 5.44234e+020
+134 96 5.42972e+020
+498 225 5.41548e+020
+313 148 5.41095e+020
+48 10 5.40995e+020
+388 17 5.40458e+020
+293 26 5.4007e+020
+131 95 5.37314e+020
+389 65 5.3643e+020
+380 354 5.36066e+020
+260 223 5.34469e+020
+132 74 5.32209e+020
+272 316 5.32115e+020
+440 340 5.2983e+020
+176 260 5.29731e+020
+354 269 5.2832e+020
+516 75 5.27219e+020
+185 36 5.26738e+020
+210 35 5.26609e+020
+483 329 5.25844e+020
+246 144 5.25309e+020
+96 446 5.24552e+020
+54 66 5.23734e+020
+462 43 5.21569e+020
+111 110 5.21339e+020
+94 6 5.20403e+020
+222 180 5.19373e+020
+488 44 5.18717e+020
+250 365 5.17562e+020
+446 8 5.175e+020
+285 209 5.15537e+020
+263 402 5.15396e+020
+220 14 5.13605e+020
+544 7 5.10977e+020
+168 326 5.10364e+020
+332 294 5.08213e+020
+548 162 5.06591e+020
+59 184 5.05102e+020
+91 199 5.04706e+020
+57 365 5.0468e+020
+512 221 5.0381e+020
+220 17 5.03028e+020
+329 13 5.02967e+020
+107 39 5.02011e+020
+377 120 5.0185e+020
+391 218 5.00675e+020
+218 98 4.99852e+020
+208 15 4.99534e+020
+52 42 4.99344e+020
+157 198 4.99064e+020
+163 277 4.98315e+020
+121 50 4.97943e+020
+412 298 4.97814e+020
+166 110 4.97361e+020
+329 10 4.96989e+020
+193 218 4.96988e+020
+508 6 4.96634e+020
+100 79 4.96305e+020
+436 301 4.95908e+020
+467 238 4.95425e+020
+364 101 4.94913e+020
+528 60 4.94887e+020
+333 258 4.94575e+020
+208 222 4.93642e+020
+552 380 4.93079e+020
+186 289 4.92061e+020
+140 20 4.916e+020
+168 182 4.91057e+020
+255 139 4.87758e+020
+305 439 4.87631e+020
+79 40 4.87124e+020
+313 84 4.85879e+020
+448 444 4.85666e+020
+24 62 4.85362e+020
+228 291 4.85145e+020
+137 178 4.84841e+020
+57 43 4.83522e+020
+220 290 4.82792e+020
+169 18 4.82567e+020
+452 62 4.82188e+020
+344 111 4.81694e+020
+46 355 4.809e+020
+260 220 4.80701e+020
+60 134 4.78523e+020
+102 360 4.76535e+020
+172 19 4.75938e+020
+164 73 4.74309e+020
+526 423 4.73472e+020
+165 357 4.70944e+020
+205 16 4.70737e+020
+283 198 4.6987e+020
+69 148 4.69461e+020
+144 16 4.68613e+020
+163 110 4.66741e+020
+265 30 4.65518e+020
+347 181 4.61854e+020
+35 267 4.59533e+020
+300 264 4.59116e+020
+482 364 4.58498e+020
+429 44 4.58348e+020
+29 30 4.55092e+020
+261 202 4.54036e+020
+156 75 4.54011e+020
+131 132 4.53476e+020
+512 100 4.5328e+020
+88 368 4.53228e+020
+486 58 4.51724e+020
+56 183 4.51486e+020
+155 235 4.50347e+020
+63 236 4.50069e+020
+134 130 4.49996e+020
+362 7 4.49577e+020
+88 208 4.49432e+020
+530 144 4.48064e+020
+358 66 4.47558e+020
+164 313 4.47002e+020
+367 300 4.46649e+020
+301 105 4.44835e+020
+325 426 4.41933e+020
+485 44 4.41932e+020
+534 243 4.41737e+020
+88 365 4.40247e+020
+276 353 4.39894e+020
+84 144 4.39893e+020
+159 142 4.39757e+020
+333 66 4.39386e+020
+448 438 4.3927e+020
+119 115 4.39165e+020
+140 181 4.37627e+020
+85 73 4.3508e+020
+100 5 4.34563e+020
+279 129 4.34197e+020
+566 160 4.33717e+020
+297 69 4.33171e+020
+402 44 4.31968e+020
+482 367 4.31296e+020
+248 316 4.30278e+020
+155 317 4.29975e+020
+322 427 4.29762e+020
+213 20 4.29754e+020
+91 254 4.28738e+020
+196 190 4.2873e+020
+449 118 4.28568e+020
+436 379 4.28225e+020
+402 266 4.27477e+020
+374 3 4.27453e+020
+467 139 4.26815e+020
+437 319 4.26777e+020
+357 63 4.26011e+020
+54 222 4.24565e+020
+575 459 4.24315e+020
+514 259 4.24306e+020
+304 190 4.23836e+020
+575 13 4.23111e+020
+456 61 4.22525e+020
+386 244 4.2231e+020
+193 215 4.22275e+020
+44 98 4.22115e+020
+52 99 4.20764e+020
+466 196 4.19983e+020
+47 81 4.19196e+020
+329 64 4.17267e+020
+484 142 4.16296e+020
+243 166 4.16289e+020
+578 43 4.15088e+020
+283 395 4.14789e+020
+41 81 4.14416e+020
+313 8 4.1435e+020
+276 328 4.14067e+020
+324 294 4.12601e+020
+538 405 4.11895e+020
+498 81 4.11755e+020
+525 426 4.09947e+020
+8 46 4.0863e+020
+474 247 4.08018e+020
+541 128 4.07965e+020
+156 56 4.07293e+020
+112 344 4.05206e+020
+406 44 4.04778e+020
+48 155 4.0369e+020
+241 420 4.01932e+020
+292 88 4.00976e+020
+414 65 4.0056e+020
+346 298 4.00516e+020
+273 181 3.99615e+020
+258 161 3.99554e+020
+166 98 3.98767e+020
+45 12 3.9842e+020
+196 84 3.98414e+020
+295 269 3.95546e+020
+298 179 3.9501e+020
+330 144 3.94957e+020
+190 360 3.94798e+020
+324 221 3.93673e+020
+110 169 3.93255e+020
+463 27 3.92533e+020
+467 241 3.92485e+020
+482 174 3.9248e+020
+345 392 3.91497e+020
+190 350 3.91143e+020
+445 123 3.90484e+020
+399 266 3.89552e+020
+225 219 3.89465e+020
+254 9 3.89408e+020
+513 297 3.89012e+020
+329 90 3.88954e+020
+577 39 3.88421e+020
+421 298 3.87637e+020
+190 312 3.85645e+020
+21 62 3.85174e+020
+335 218 3.85004e+020
+474 244 3.84768e+020
+165 242 3.84606e+020
+394 164 3.84311e+020
+61 369 3.81655e+020
+33 29 3.81482e+020
+127 96 3.81137e+020
+384 261 3.81006e+020
+237 417 3.80773e+020
+432 45 3.80269e+020
+441 24 3.79856e+020
+250 34 3.7953e+020
+332 90 3.78873e+020
+354 265 3.78413e+020
+53 12 3.76982e+020
+162 169 3.76474e+020
+378 67 3.76321e+020
+343 122 3.74713e+020
+107 429 3.74707e+020
+270 53 3.74206e+020
+542 209 3.73596e+020
+38 82 3.73302e+020
+241 195 3.72875e+020
+418 82 3.72721e+020
+271 167 3.72335e+020
+389 326 3.71143e+020
+107 76 3.71023e+020
+476 341 3.71021e+020
+203 313 3.70196e+020
+405 41 3.70074e+020
+571 446 3.70006e+020
+234 161 3.69638e+020
+102 164 3.6906e+020
+472 266 3.68817e+020
+276 331 3.68715e+020
+489 341 3.6862e+020
+117 426 3.68256e+020
+493 81 3.68236e+020
+471 212 3.67912e+020
+309 440 3.67599e+020
+518 263 3.66751e+020
+105 222 3.6582e+020
+489 58 3.65748e+020
+539 98 3.65743e+020
+450 87 3.64915e+020
+276 320 3.64804e+020
+574 421 3.64665e+020
+125 271 3.64548e+020
+290 139 3.64446e+020
+78 199 3.636e+020
+412 44 3.62679e+020
+460 267 3.62607e+020
+167 277 3.61419e+020
+110 95 3.60382e+020
+373 392 3.59987e+020
+83 134 3.59879e+020
+575 178 3.59816e+020
+120 128 3.5796e+020
+191 291 3.57849e+020
+110 179 3.5756e+020
+257 147 3.57475e+020
+237 130 3.57399e+020
+510 9 3.57252e+020
+42 10 3.56924e+020
+448 218 3.56765e+020
+168 179 3.56245e+020
+434 89 3.55817e+020
+296 332 3.5547e+020
+50 62 3.55326e+020
+455 85 3.55074e+020
+244 294 3.54613e+020
+114 95 3.54006e+020
+86 311 3.53903e+020
+489 263 3.53842e+020
+125 259 3.53349e+020
+159 56 3.53192e+020
+238 420 3.5289e+020
+292 50 3.52515e+020
+431 319 3.49874e+020
+431 81 3.49186e+020
+326 164 3.48818e+020
+503 164 3.48419e+020
+193 16 3.47365e+020
+109 2 3.46449e+020
+269 186 3.46222e+020
+222 112 3.45462e+020
+175 20 3.45291e+020
+170 310 3.45066e+020
+510 174 3.44318e+020
+547 139 3.44155e+020
+339 164 3.43742e+020
+342 47 3.42773e+020
+433 158 3.42419e+020
+340 446 3.42409e+020
+433 280 3.4154e+020
+378 337 3.39883e+020
+70 96 3.39726e+020
+56 78 3.38952e+020
+326 89 3.38948e+020
+72 165 3.3871e+020
+110 166 3.38461e+020
+217 147 3.37295e+020
+131 168 3.37062e+020
+433 86 3.37033e+020
+499 460 3.3696e+020
+274 132 3.36516e+020
+466 424 3.35899e+020
+501 361 3.35859e+020
+83 476 3.35471e+020
+124 127 3.34395e+020
+538 101 3.34258e+020
+69 420 3.33721e+020
+119 447 3.33581e+020
+141 394 3.32743e+020
+562 145 3.3271e+020
+440 379 3.31867e+020
+280 365 3.31373e+020
+159 182 3.29302e+020
+583 38 3.29163e+020
+430 222 3.28338e+020
+357 11 3.28121e+020
+437 89 3.27796e+020
+276 198 3.27741e+020
+330 213 3.27354e+020
+529 400 3.26916e+020
+386 327 3.26209e+020
+218 110 3.26107e+020
+218 35 3.26097e+020
+162 61 3.25698e+020
+527 190 3.2563e+020
+162 97 3.25096e+020
+40 135 3.24634e+020
+473 42 3.24386e+020
+454 117 3.23597e+020
+86 61 3.23529e+020
+57 373 3.23321e+020
+471 269 3.23044e+020
+206 436 3.22547e+020
+273 220 3.22357e+020
+392 49 3.22163e+020
+473 203 3.2202e+020
+333 62 3.21333e+020
+196 194 3.20697e+020
+292 265 3.20692e+020
+268 295 3.20675e+020
+174 291 3.20674e+020
+10 78 3.20575e+020
+570 451 3.19671e+020
+357 282 3.19603e+020
+424 398 3.18207e+020
+528 222 3.18126e+020
+164 209 3.18069e+020
+283 391 3.17766e+020
+227 186 3.16735e+020
+569 382 3.16643e+020
+541 133 3.16461e+020
+569 161 3.15765e+020
+138 95 3.15097e+020
+488 81 3.14669e+020
+340 391 3.14656e+020
+260 236 3.14614e+020
+501 22 3.14552e+020
+377 182 3.14421e+020
+287 165 3.14386e+020
+220 148 3.14355e+020
+132 71 3.14199e+020
+190 206 3.13667e+020
+528 362 3.13622e+020
+486 3 3.13435e+020
+472 200 3.13393e+020
+523 123 3.13243e+020
+353 294 3.1295e+020
+30 218 3.12925e+020
+345 276 3.11752e+020
+333 202 3.11635e+020
+325 258 3.11071e+020
+53 150 3.10581e+020
+259 34 3.10328e+020
+419 66 3.09824e+020
+295 421 3.09473e+020
+349 146 3.09352e+020
+210 32 3.08597e+020
+139 99 3.08528e+020
+531 363 3.08524e+020
+118 76 3.07704e+020
+179 165 3.06971e+020
+185 131 3.06495e+020
+192 189 3.06026e+020
+436 280 3.059e+020
+33 219 3.05798e+020
+516 42 3.0576e+020
+298 274 3.05399e+020
+286 297 3.05068e+020
+174 311 3.05053e+020
+217 425 3.04959e+020
+442 240 3.04411e+020
+107 108 3.03993e+020
+514 381 3.03814e+020
+205 309 3.0368e+020
+153 112 3.03635e+020
+287 397 3.02962e+020
+229 288 3.02909e+020
+503 261 3.0248e+020
+405 376 3.01992e+020
+434 162 3.01233e+020
+122 271 3.01222e+020
+436 240 3.00944e+020
+110 136 3.00898e+020
+91 290 3.00576e+020
+191 210 3.00335e+020
+349 88 2.99564e+020
+213 32 2.99422e+020
+577 245 2.99365e+020
+501 143 2.99092e+020
+309 367 2.99066e+020
+96 22 2.98977e+020
+481 83 2.98925e+020
+182 343 2.98833e+020
+50 288 2.98659e+020
+543 163 2.9859e+020
+145 161 2.98586e+020
+58 255 2.98256e+020
+131 147 2.98209e+020
+196 255 2.98018e+020
+111 262 2.97622e+020
+85 35 2.96355e+020
+79 474 2.95955e+020
+104 306 2.95791e+020
+332 413 2.93767e+020
+113 2 2.9366e+020
+248 293 2.93591e+020
+392 21 2.93042e+020
+340 122 2.92098e+020
+279 132 2.91467e+020
+337 264 2.91132e+020
+270 290 2.9063e+020
+479 403 2.90556e+020
+378 107 2.89825e+020
+544 440 2.89373e+020
+20 286 2.88901e+020
+413 247 2.8887e+020
+182 20 2.88715e+020
+443 451 2.88693e+020
+482 451 2.87934e+020
+435 225 2.87693e+020
+161 185 2.8741e+020
+437 468 2.86864e+020
+191 329 2.86574e+020
+20 317 2.8627e+020
+488 84 2.8619e+020
+324 15 2.85781e+020
+18 343 2.8514e+020
+424 201 2.84301e+020
+280 204 2.84138e+020
+158 112 2.836e+020
+186 20 2.83381e+020
+176 165 2.82957e+020
+247 219 2.82775e+020
+459 304 2.82665e+020
+432 381 2.82618e+020
+345 47 2.82091e+020
+580 345 2.81357e+020
+381 123 2.81241e+020
+192 145 2.81059e+020
+178 329 2.80873e+020
+265 311 2.80844e+020
+364 180 2.80305e+020
+221 151 2.79982e+020
+432 270 2.7981e+020
+306 259 2.79447e+020
+392 160 2.78916e+020
+149 302 2.78842e+020
+154 295 2.78757e+020
+41 355 2.78669e+020
+468 204 2.78662e+020
+278 144 2.7811e+020
+273 295 2.77785e+020
+190 357 2.7769e+020
+468 208 2.77652e+020
+572 405 2.77634e+020
+214 94 2.77621e+020
+91 60 2.77291e+020
+419 284 2.77119e+020
+276 360 2.771e+020
+563 323 2.76511e+020
+587 17 2.76314e+020
+485 84 2.75206e+020
+174 92 2.75168e+020
+470 121 2.74246e+020
+164 206 2.74108e+020
+77 165 2.73968e+020
+173 239 2.73626e+020
+459 264 2.73581e+020
+281 438 2.7351e+020
+494 60 2.72982e+020
+493 340 2.72833e+020
+196 132 2.72786e+020
+164 115 2.7276e+020
+186 95 2.72118e+020
+231 199 2.71623e+020
+444 114 2.71494e+020
+362 369 2.71367e+020
+157 91 2.71054e+020
+272 170 2.70936e+020
+280 198 2.70473e+020
+470 63 2.70265e+020
+327 181 2.69993e+020
+319 187 2.69582e+020
+44 134 2.69504e+020
+537 394 2.68607e+020
+74 475 2.68573e+020
+569 422 2.68154e+020
+167 116 2.67853e+020
+264 389 2.67292e+020
+363 357 2.6729e+020
+166 20 2.66588e+020
+458 115 2.66462e+020
+332 409 2.66321e+020
+337 62 2.66311e+020
+265 16 2.65869e+020
+572 178 2.65544e+020
+90 375 2.65532e+020
+258 368 2.64981e+020
+389 53 2.64721e+020
+261 368 2.6468e+020
+234 199 2.64582e+020
+182 290 2.64445e+020
+500 263 2.64285e+020
+272 285 2.64232e+020
+33 110 2.64056e+020
+85 38 2.63917e+020
+527 347 2.63848e+020
+359 53 2.63838e+020
+547 218 2.63678e+020
+388 97 2.63674e+020
+406 14 2.63615e+020
+266 20 2.63406e+020
+462 22 2.63367e+020
+333 334 2.62008e+020
+335 390 2.61729e+020
+120 218 2.61152e+020
+454 102 2.60947e+020
+110 133 2.60943e+020
+279 52 2.60248e+020
+355 342 2.59925e+020
+67 254 2.59835e+020
+372 86 2.5973e+020
+371 90 2.59622e+020
+242 192 2.59604e+020
+329 353 2.59246e+020
+482 440 2.59087e+020
+280 136 2.58996e+020
+9 233 2.58981e+020
+566 180 2.58747e+020
+218 115 2.58151e+020
+38 287 2.57818e+020
+156 95 2.5772e+020
+102 28 2.57653e+020
+48 234 2.57193e+020
+499 463 2.56962e+020
+282 419 2.5661e+020
+342 141 2.56475e+020
+478 243 2.56347e+020
+103 237 2.56197e+020
+305 194 2.56032e+020
+357 166 2.55847e+020
+183 380 2.55675e+020
+417 165 2.55491e+020
+37 200 2.55402e+020
+242 30 2.5535e+020
+183 95 2.55112e+020
+318 459 2.54896e+020
+220 184 2.5489e+020
+261 233 2.54781e+020
+49 255 2.54179e+020
+262 285 2.53965e+020
+256 200 2.53924e+020
+70 130 2.53819e+020
+313 77 2.5372e+020
+336 446 2.53614e+020
+353 297 2.53577e+020
+524 399 2.5335e+020
+471 83 2.53269e+020
+591 18 2.5307e+020
+130 478 2.52892e+020
+179 168 2.52529e+020
+216 175 2.52335e+020
+405 11 2.52127e+020
+22 48 2.51966e+020
+451 24 2.51508e+020
+88 372 2.51123e+020
+229 282 2.50534e+020
+45 218 2.50532e+020
+405 82 2.50347e+020
+529 397 2.50312e+020
+394 215 2.50147e+020
+442 356 2.501e+020
+150 112 2.49133e+020
+21 320 2.48922e+020
+189 144 2.48566e+020
+181 131 2.48267e+020
+510 83 2.4796e+020
+204 161 2.47702e+020
+91 276 2.47172e+020
+306 364 2.46973e+020
+387 124 2.46541e+020
+345 342 2.46095e+020
+277 201 2.4595e+020
+105 165 2.45841e+020
+404 277 2.45769e+020
+242 281 2.45512e+020
+215 124 2.45108e+020
+456 177 2.45032e+020
+283 52 2.44726e+020
+301 332 2.44519e+020
+222 116 2.44366e+020
+575 100 2.44264e+020
+387 127 2.44212e+020
+503 156 2.43962e+020
+389 330 2.43759e+020
+578 53 2.43605e+020
+242 33 2.43338e+020
+83 171 2.43282e+020
+117 306 2.43109e+020
+255 36 2.43027e+020
+160 21 2.42846e+020
+528 429 2.42771e+020
+306 449 2.42766e+020
+55 145 2.42268e+020
+110 182 2.42176e+020
+17 434 2.41976e+020
+527 344 2.41935e+020
+562 225 2.41712e+020
+188 308 2.41394e+020
+147 449 2.41271e+020
+178 273 2.40821e+020
+51 39 2.40612e+020
+107 182 2.40494e+020
+494 158 2.4012e+020
+500 266 2.40015e+020
+337 367 2.40014e+020
+87 198 2.39849e+020
+298 410 2.39687e+020
+189 18 2.39346e+020
+440 456 2.39295e+020
+401 275 2.38778e+020
+511 351 2.37841e+020
+538 186 2.37827e+020
+53 358 2.37346e+020
+33 164 2.36844e+020
+188 108 2.36844e+020
+420 53 2.36798e+020
+561 142 2.36755e+020
+335 415 2.36193e+020
+187 265 2.36052e+020
+56 170 2.36008e+020
+209 395 2.35644e+020
+238 34 2.35601e+020
+137 136 2.35201e+020
+180 154 2.34878e+020
+537 93 2.34734e+020
+379 127 2.34598e+020
+505 454 2.34444e+020
+570 455 2.34215e+020
+483 79 2.33759e+020
+374 338 2.32307e+020
+128 127 2.32176e+020
+537 262 2.32119e+020
+97 28 2.31927e+020
+362 244 2.31692e+020
+282 268 2.31013e+020
+468 28 2.30723e+020
+437 391 2.3049e+020
+250 220 2.30482e+020
+57 70 2.30244e+020
+7 15 2.30056e+020
+294 141 2.29493e+020
+455 162 2.29083e+020
+48 162 2.28822e+020
+402 6 2.28729e+020
+563 320 2.28627e+020
+351 255 2.2841e+020
+506 361 2.28175e+020
+450 177 2.27726e+020
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_3_3.txt b/test_data/harriscorners/hc_msc_3.00_0.10_3_3.txt
new file mode 100644
index 0000000..76a0d32
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_3_3.txt
@@ -0,0 +1,1884 @@
+1883
+449 298 5.04554e+011
+499 1 4.07727e+011
+329 127 3.75398e+011
+388 178 3.36537e+011
+421 183 3.36519e+011
+401 261 3.35327e+011
+535 242 2.99733e+011
+213 72 2.99069e+011
+321 313 2.89276e+011
+75 236 2.88936e+011
+66 320 2.85654e+011
+553 41 2.83848e+011
+121 44 2.78038e+011
+544 170 2.76288e+011
+363 401 2.6411e+011
+385 221 2.63728e+011
+135 215 2.63626e+011
+89 197 2.61697e+011
+447 397 2.60936e+011
+436 68 2.60855e+011
+274 366 2.56453e+011
+200 18 2.55751e+011
+159 143 2.52659e+011
+365 200 2.51092e+011
+449 219 2.49467e+011
+45 26 2.4622e+011
+173 312 2.41696e+011
+456 281 2.31812e+011
+286 296 2.2879e+011
+545 217 2.28483e+011
+137 208 2.28324e+011
+515 77 2.26533e+011
+273 289 2.1845e+011
+245 94 2.15661e+011
+412 256 2.15568e+011
+144 309 2.14854e+011
+256 386 2.14098e+011
+296 420 2.13989e+011
+223 38 2.13416e+011
+34 138 2.13301e+011
+282 115 2.1232e+011
+449 403 2.12179e+011
+301 175 2.1172e+011
+312 149 2.10551e+011
+125 255 2.0665e+011
+299 54 2.06455e+011
+448 263 2.06246e+011
+396 319 2.04666e+011
+364 298 2.03605e+011
+3 47 2.02005e+011
+59 185 2.01928e+011
+508 18 2.01265e+011
+221 16 2.01168e+011
+344 10 1.99666e+011
+471 240 1.97349e+011
+174 238 1.94781e+011
+455 3 1.94671e+011
+175 94 1.9415e+011
+317 385 1.93239e+011
+524 263 1.92542e+011
+126 162 1.9193e+011
+242 203 1.90807e+011
+378 317 1.89262e+011
+246 143 1.877e+011
+82 27 1.86709e+011
+59 74 1.86456e+011
+486 22 1.86418e+011
+184 35 1.85665e+011
+426 320 1.84888e+011
+124 362 1.83778e+011
+177 260 1.82987e+011
+293 120 1.82413e+011
+417 7 1.82238e+011
+480 298 1.80386e+011
+253 138 1.79716e+011
+113 213 1.794e+011
+211 56 1.78294e+011
+197 57 1.77996e+011
+317 336 1.7759e+011
+66 344 1.77078e+011
+140 184 1.74181e+011
+64 235 1.73301e+011
+489 264 1.73174e+011
+207 223 1.72592e+011
+348 179 1.71986e+011
+380 68 1.70339e+011
+508 122 1.68457e+011
+419 163 1.68133e+011
+507 165 1.6638e+011
+110 238 1.65494e+011
+36 269 1.63233e+011
+120 4 1.61874e+011
+236 163 1.61539e+011
+303 184 1.60471e+011
+382 8 1.60454e+011
+112 4 1.57348e+011
+359 168 1.56531e+011
+71 148 1.56429e+011
+425 262 1.54722e+011
+240 90 1.54675e+011
+287 342 1.54341e+011
+556 182 1.53976e+011
+48 219 1.52688e+011
+423 180 1.52471e+011
+464 241 1.51706e+011
+484 59 1.50804e+011
+360 315 1.50169e+011
+308 372 1.49754e+011
+251 13 1.4912e+011
+270 241 1.49046e+011
+277 181 1.48482e+011
+282 403 1.48461e+011
+412 162 1.46711e+011
+301 164 1.4665e+011
+92 214 1.46278e+011
+407 64 1.46022e+011
+569 40 1.4558e+011
+303 207 1.45061e+011
+124 199 1.43843e+011
+263 202 1.43568e+011
+406 375 1.43247e+011
+183 401 1.4181e+011
+524 199 1.41612e+011
+455 83 1.39631e+011
+279 370 1.37936e+011
+370 107 1.37705e+011
+270 60 1.37567e+011
+313 75 1.37535e+011
+511 342 1.37393e+011
+371 82 1.36872e+011
+205 202 1.35859e+011
+114 344 1.35729e+011
+543 364 1.34488e+011
+543 58 1.34444e+011
+230 266 1.33725e+011
+170 19 1.33638e+011
+236 19 1.33425e+011
+530 184 1.33383e+011
+224 221 1.33269e+011
+373 116 1.33078e+011
+279 296 1.32396e+011
+79 3 1.32053e+011
+473 63 1.32025e+011
+467 123 1.32002e+011
+272 166 1.31814e+011
+105 62 1.31267e+011
+572 142 1.31246e+011
+360 335 1.31026e+011
+10 102 1.30292e+011
+381 164 1.30093e+011
+325 88 1.30076e+011
+49 99 1.29854e+011
+261 165 1.29412e+011
+365 7 1.29405e+011
+102 5 1.28847e+011
+391 47 1.28716e+011
+208 434 1.28658e+011
+340 9 1.28475e+011
+526 101 1.27849e+011
+203 17 1.27659e+011
+359 294 1.27282e+011
+236 74 1.26918e+011
+415 251 1.26633e+011
+192 276 1.25578e+011
+87 78 1.25374e+011
+28 236 1.25329e+011
+185 19 1.25198e+011
+390 58 1.2442e+011
+510 172 1.24365e+011
+401 184 1.24207e+011
+386 126 1.2418e+011
+125 261 1.23794e+011
+278 352 1.23569e+011
+496 119 1.23082e+011
+407 337 1.22377e+011
+392 144 1.21695e+011
+575 126 1.20226e+011
+338 473 1.20214e+011
+478 16 1.19172e+011
+365 259 1.19104e+011
+538 95 1.18726e+011
+64 371 1.18653e+011
+192 331 1.18434e+011
+560 229 1.1773e+011
+282 111 1.17631e+011
+240 349 1.17625e+011
+433 146 1.1742e+011
+341 337 1.17374e+011
+463 198 1.17028e+011
+445 23 1.16965e+011
+124 365 1.16715e+011
+220 37 1.16572e+011
+161 238 1.15373e+011
+525 346 1.15339e+011
+525 223 1.15194e+011
+352 146 1.15046e+011
+131 36 1.15034e+011
+57 29 1.14347e+011
+424 376 1.1432e+011
+257 89 1.14213e+011
+88 256 1.14198e+011
+355 320 1.14108e+011
+82 77 1.14077e+011
+387 319 1.13897e+011
+518 183 1.13671e+011
+264 440 1.13441e+011
+380 26 1.13403e+011
+266 53 1.13105e+011
+387 295 1.1294e+011
+163 208 1.12815e+011
+38 296 1.12419e+011
+203 310 1.12287e+011
+271 278 1.12226e+011
+513 93 1.12135e+011
+558 19 1.12114e+011
+313 222 1.1201e+011
+487 3 1.11917e+011
+507 60 1.11859e+011
+307 439 1.11766e+011
+562 149 1.11477e+011
+562 478 1.11323e+011
+28 8 1.10708e+011
+461 279 1.10699e+011
+530 62 1.10382e+011
+479 81 1.1029e+011
+35 300 1.1018e+011
+128 1 1.10153e+011
+384 162 1.09931e+011
+275 216 1.09854e+011
+80 474 1.09848e+011
+224 183 1.09497e+011
+512 99 1.0926e+011
+363 250 1.08312e+011
+556 244 1.0816e+011
+97 79 1.07589e+011
+411 355 1.06727e+011
+260 273 1.06431e+011
+166 20 1.06156e+011
+433 319 1.05924e+011
+22 219 1.05915e+011
+512 165 1.05699e+011
+192 124 1.05642e+011
+411 5 1.05595e+011
+392 353 1.05571e+011
+376 84 1.05496e+011
+361 131 1.05445e+011
+353 127 1.0531e+011
+461 340 1.05299e+011
+342 123 1.04859e+011
+299 70 1.04827e+011
+153 217 1.04714e+011
+330 164 1.04399e+011
+220 100 1.04266e+011
+326 427 1.04233e+011
+140 173 1.04032e+011
+273 130 1.03921e+011
+282 221 1.03593e+011
+553 384 1.03565e+011
+324 166 1.03551e+011
+32 269 1.03177e+011
+319 202 1.03133e+011
+448 138 1.02919e+011
+244 72 1.02366e+011
+404 120 1.02097e+011
+477 182 1.01998e+011
+68 27 1.01955e+011
+46 90 1.01845e+011
+62 60 1.01583e+011
+297 296 1.01534e+011
+381 411 1.01161e+011
+376 7 1.01151e+011
+259 236 1.00896e+011
+387 167 1.00826e+011
+36 174 1.00826e+011
+212 183 1.00529e+011
+139 58 1.00081e+011
+342 464 1.00046e+011
+221 181 9.97512e+010
+420 178 9.97491e+010
+160 112 9.96391e+010
+31 8 9.89387e+010
+164 241 9.87254e+010
+202 313 9.85097e+010
+364 255 9.83731e+010
+110 96 9.82522e+010
+382 338 9.81072e+010
+229 292 9.80636e+010
+277 332 9.79954e+010
+160 183 9.78336e+010
+579 18 9.78298e+010
+283 71 9.77182e+010
+512 201 9.74478e+010
+77 81 9.74338e+010
+332 130 9.70376e+010
+560 60 9.70221e+010
+36 147 9.70119e+010
+276 222 9.69285e+010
+497 64 9.66032e+010
+528 361 9.62036e+010
+287 165 9.61592e+010
+169 238 9.61476e+010
+163 276 9.60221e+010
+244 164 9.56671e+010
+422 323 9.55472e+010
+300 265 9.55346e+010
+108 325 9.53743e+010
+224 419 9.51685e+010
+177 106 9.47605e+010
+352 161 9.46332e+010
+276 393 9.45802e+010
+530 193 9.45619e+010
+521 122 9.43579e+010
+240 366 9.42899e+010
+331 107 9.4275e+010
+550 380 9.41821e+010
+88 148 9.41802e+010
+412 23 9.41042e+010
+127 76 9.33655e+010
+260 250 9.31593e+010
+174 114 9.3115e+010
+112 393 9.31024e+010
+532 268 9.28613e+010
+374 163 9.28157e+010
+13 206 9.27915e+010
+27 220 9.27087e+010
+77 256 9.26955e+010
+389 139 9.26014e+010
+451 101 9.232e+010
+162 213 9.22491e+010
+155 235 9.21113e+010
+111 241 9.19553e+010
+509 455 9.19396e+010
+580 52 9.1805e+010
+148 396 9.17862e+010
+312 81 9.17072e+010
+535 267 9.16188e+010
+282 119 9.12799e+010
+483 339 9.11678e+010
+413 100 9.11027e+010
+96 447 9.08206e+010
+54 6 9.08138e+010
+215 144 9.07712e+010
+293 25 9.0728e+010
+509 361 9.03524e+010
+313 86 9.03318e+010
+355 220 9.02845e+010
+565 60 9.01922e+010
+408 352 9.00006e+010
+112 56 8.99509e+010
+100 78 8.96467e+010
+250 313 8.9639e+010
+141 22 8.9472e+010
+223 114 8.92316e+010
+351 339 8.91511e+010
+225 180 8.87353e+010
+230 36 8.87162e+010
+192 359 8.87122e+010
+554 201 8.86025e+010
+396 161 8.8586e+010
+422 44 8.85123e+010
+542 18 8.84926e+010
+212 437 8.83993e+010
+266 14 8.83091e+010
+59 219 8.82592e+010
+315 165 8.8166e+010
+264 298 8.79603e+010
+400 273 8.7912e+010
+49 159 8.78764e+010
+136 202 8.75052e+010
+484 375 8.70552e+010
+226 295 8.68654e+010
+315 160 8.67997e+010
+67 47 8.64642e+010
+465 394 8.62799e+010
+285 240 8.61948e+010
+169 55 8.61301e+010
+394 158 8.60607e+010
+561 321 8.59867e+010
+228 184 8.59493e+010
+22 60 8.57392e+010
+395 260 8.55888e+010
+174 57 8.54862e+010
+571 161 8.52825e+010
+402 276 8.51305e+010
+387 242 8.50049e+010
+55 66 8.50009e+010
+304 193 8.49231e+010
+184 138 8.48222e+010
+161 256 8.48144e+010
+243 189 8.46568e+010
+478 12 8.4643e+010
+303 156 8.46414e+010
+529 104 8.45622e+010
+426 119 8.45539e+010
+225 72 8.44585e+010
+166 96 8.44234e+010
+524 21 8.44043e+010
+189 214 8.40048e+010
+111 134 8.3873e+010
+186 342 8.36244e+010
+300 245 8.36105e+010
+329 9 8.35398e+010
+359 162 8.34257e+010
+239 18 8.29594e+010
+529 32 8.29122e+010
+371 393 8.28726e+010
+469 237 8.28026e+010
+338 391 8.27688e+010
+333 89 8.27327e+010
+118 61 8.27253e+010
+389 327 8.25928e+010
+362 370 8.2567e+010
+494 456 8.25262e+010
+441 98 8.22929e+010
+76 7 8.22224e+010
+342 37 8.21299e+010
+177 166 8.19247e+010
+462 267 8.18806e+010
+136 212 8.17277e+010
+219 291 8.17063e+010
+108 44 8.1705e+010
+49 152 8.1529e+010
+527 40 8.13949e+010
+512 168 8.11655e+010
+285 404 8.11491e+010
+482 365 8.10454e+010
+162 20 8.10169e+010
+170 117 8.08452e+010
+572 121 8.05502e+010
+131 217 8.05018e+010
+490 342 8.04952e+010
+424 47 8.04859e+010
+44 219 8.03739e+010
+508 82 8.03353e+010
+320 224 7.99513e+010
+451 82 7.99017e+010
+290 183 7.98767e+010
+383 146 7.98738e+010
+474 262 7.9848e+010
+199 86 7.97764e+010
+292 15 7.96816e+010
+546 42 7.96231e+010
+371 67 7.9222e+010
+503 265 7.91745e+010
+404 338 7.91158e+010
+281 49 7.91141e+010
+542 210 7.91099e+010
+118 96 7.89898e+010
+150 114 7.89292e+010
+264 445 7.87252e+010
+271 51 7.86321e+010
+115 76 7.84417e+010
+85 476 7.823e+010
+355 106 7.82064e+010
+109 340 7.80292e+010
+43 62 7.78603e+010
+540 40 7.78369e+010
+73 185 7.7823e+010
+234 261 7.77446e+010
+435 182 7.75998e+010
+91 291 7.75289e+010
+189 180 7.75145e+010
+92 21 7.71643e+010
+487 357 7.7109e+010
+419 441 7.7079e+010
+496 80 7.70524e+010
+180 394 7.70036e+010
+419 167 7.68721e+010
+96 125 7.67389e+010
+466 40 7.67234e+010
+234 346 7.65967e+010
+356 267 7.65349e+010
+500 42 7.6507e+010
+265 72 7.62756e+010
+434 398 7.62461e+010
+330 202 7.61434e+010
+436 339 7.61109e+010
+508 5 7.60091e+010
+116 43 7.58578e+010
+153 446 7.57023e+010
+101 58 7.55788e+010
+130 77 7.55293e+010
+137 98 7.55263e+010
+474 202 7.53947e+010
+217 279 7.5356e+010
+421 6 7.51661e+010
+541 13 7.51263e+010
+387 10 7.50733e+010
+150 151 7.49936e+010
+439 149 7.4875e+010
+478 21 7.48076e+010
+232 200 7.47637e+010
+508 141 7.47561e+010
+71 410 7.46217e+010
+292 28 7.45966e+010
+184 184 7.45321e+010
+172 449 7.45079e+010
+286 209 7.44518e+010
+507 204 7.4444e+010
+109 60 7.44351e+010
+511 128 7.44285e+010
+241 58 7.43289e+010
+102 358 7.42632e+010
+546 182 7.41347e+010
+347 350 7.41241e+010
+458 265 7.3929e+010
+339 164 7.39288e+010
+182 111 7.38933e+010
+277 137 7.38723e+010
+398 357 7.3856e+010
+446 352 7.37987e+010
+132 130 7.3581e+010
+379 107 7.35189e+010
+157 93 7.34533e+010
+29 28 7.33232e+010
+78 196 7.32732e+010
+267 131 7.32229e+010
+134 72 7.3165e+010
+100 221 7.31232e+010
+336 426 7.30698e+010
+526 171 7.30032e+010
+358 127 7.27265e+010
+163 108 7.26795e+010
+498 158 7.26449e+010
+537 140 7.259e+010
+507 178 7.22742e+010
+58 254 7.22225e+010
+223 239 7.21714e+010
+163 168 7.21315e+010
+133 427 7.21085e+010
+266 259 7.2022e+010
+32 218 7.19739e+010
+210 154 7.19288e+010
+57 331 7.19019e+010
+273 71 7.18713e+010
+72 97 7.18155e+010
+363 182 7.17458e+010
+388 282 7.17005e+010
+350 323 7.1616e+010
+439 181 7.15619e+010
+304 363 7.12441e+010
+25 200 7.12138e+010
+258 34 7.11732e+010
+478 4 7.09366e+010
+116 391 7.08565e+010
+550 183 7.07057e+010
+52 290 7.05075e+010
+113 356 7.03794e+010
+545 5 7.01509e+010
+438 123 7.01192e+010
+110 265 7.00213e+010
+236 92 7.00083e+010
+191 217 7.00029e+010
+162 128 6.99705e+010
+214 57 6.99568e+010
+537 459 6.99478e+010
+367 144 6.99167e+010
+474 23 6.97336e+010
+139 204 6.9595e+010
+510 300 6.95891e+010
+96 148 6.95685e+010
+467 196 6.94538e+010
+324 143 6.94239e+010
+236 221 6.94108e+010
+269 105 6.92813e+010
+479 451 6.92599e+010
+474 245 6.92075e+010
+187 109 6.90696e+010
+129 429 6.90055e+010
+390 161 6.89598e+010
+137 128 6.89377e+010
+217 208 6.89148e+010
+594 19 6.88737e+010
+140 325 6.87943e+010
+306 88 6.86741e+010
+143 187 6.86502e+010
+161 124 6.85829e+010
+24 65 6.85044e+010
+63 8 6.84224e+010
+484 361 6.80761e+010
+411 46 6.80585e+010
+479 179 6.77973e+010
+262 393 6.77717e+010
+164 359 6.77019e+010
+18 342 6.76148e+010
+197 130 6.75564e+010
+82 135 6.74757e+010
+327 320 6.74068e+010
+445 126 6.73134e+010
+37 61 6.72848e+010
+59 289 6.72722e+010
+240 73 6.7247e+010
+267 31 6.72099e+010
+432 112 6.71839e+010
+454 340 6.69924e+010
+430 1 6.69291e+010
+41 297 6.69278e+010
+162 216 6.66485e+010
+35 144 6.66079e+010
+172 202 6.65807e+010
+249 33 6.65598e+010
+217 55 6.63041e+010
+543 130 6.62648e+010
+418 85 6.62402e+010
+272 296 6.61627e+010
+363 355 6.60954e+010
+153 299 6.60467e+010
+486 84 6.60145e+010
+111 41 6.58936e+010
+445 453 6.58109e+010
+274 206 6.58043e+010
+39 310 6.57864e+010
+335 240 6.57771e+010
+451 375 6.55314e+010
+196 192 6.53771e+010
+369 338 6.53081e+010
+217 126 6.5216e+010
+85 196 6.50856e+010
+182 201 6.50443e+010
+449 178 6.49821e+010
+347 392 6.48937e+010
+179 18 6.48208e+010
+512 221 6.48139e+010
+515 2 6.48094e+010
+436 387 6.47798e+010
+292 311 6.47645e+010
+287 34 6.4761e+010
+390 19 6.47541e+010
+521 61 6.47157e+010
+152 308 6.45746e+010
+540 165 6.43752e+010
+135 237 6.43375e+010
+139 2 6.42833e+010
+443 320 6.41949e+010
+209 136 6.40992e+010
+543 252 6.39948e+010
+250 364 6.39832e+010
+246 294 6.3981e+010
+550 383 6.38347e+010
+138 111 6.36604e+010
+569 203 6.36576e+010
+513 122 6.36116e+010
+502 143 6.35844e+010
+577 178 6.35279e+010
+2 155 6.35214e+010
+452 161 6.33621e+010
+158 1 6.31293e+010
+58 103 6.31041e+010
+166 114 6.30844e+010
+259 142 6.3038e+010
+492 182 6.30233e+010
+293 333 6.29949e+010
+375 299 6.29832e+010
+166 287 6.29146e+010
+165 202 6.27668e+010
+175 2 6.2739e+010
+292 147 6.27251e+010
+6 9 6.27169e+010
+76 96 6.25514e+010
+83 3 6.24984e+010
+270 55 6.2459e+010
+462 394 6.24137e+010
+5 66 6.23652e+010
+497 342 6.22781e+010
+446 145 6.22278e+010
+432 83 6.20653e+010
+396 104 6.20615e+010
+188 146 6.20355e+010
+604 121 6.20124e+010
+259 221 6.19953e+010
+452 205 6.19166e+010
+278 189 6.19141e+010
+544 91 6.17918e+010
+228 289 6.17888e+010
+261 329 6.17741e+010
+261 297 6.1735e+010
+484 180 6.17198e+010
+429 181 6.16834e+010
+40 217 6.15611e+010
+194 110 6.14888e+010
+358 143 6.14019e+010
+344 166 6.13622e+010
+573 333 6.13081e+010
+179 274 6.12469e+010
+355 13 6.12033e+010
+317 107 6.12025e+010
+404 261 6.11655e+010
+360 260 6.11645e+010
+345 241 6.10605e+010
+497 229 6.07819e+010
+504 360 6.07497e+010
+511 205 6.06684e+010
+213 123 6.05501e+010
+203 347 6.05142e+010
+161 133 6.03611e+010
+202 392 6.03208e+010
+270 66 6.02802e+010
+220 151 6.02187e+010
+124 272 6.0204e+010
+498 68 6.01724e+010
+518 163 6.00892e+010
+244 217 6.0073e+010
+254 74 5.9905e+010
+208 421 5.98129e+010
+513 44 5.9765e+010
+395 354 5.97634e+010
+561 225 5.96538e+010
+480 128 5.96397e+010
+340 12 5.95599e+010
+274 281 5.95573e+010
+360 216 5.9555e+010
+479 263 5.95456e+010
+515 18 5.94393e+010
+565 18 5.94356e+010
+183 133 5.94315e+010
+93 255 5.93843e+010
+281 386 5.91587e+010
+67 337 5.90473e+010
+518 203 5.89984e+010
+129 168 5.89959e+010
+136 172 5.89385e+010
+335 105 5.8876e+010
+432 122 5.88012e+010
+579 79 5.87909e+010
+310 33 5.87879e+010
+367 85 5.87855e+010
+361 9 5.87133e+010
+105 39 5.87092e+010
+308 147 5.86972e+010
+398 412 5.86479e+010
+374 241 5.86408e+010
+362 397 5.86317e+010
+491 1 5.85695e+010
+335 93 5.85297e+010
+464 26 5.84466e+010
+131 73 5.84318e+010
+208 449 5.83331e+010
+435 88 5.81603e+010
+252 153 5.81466e+010
+167 150 5.81416e+010
+277 145 5.81193e+010
+345 109 5.80256e+010
+218 145 5.80025e+010
+423 336 5.79065e+010
+203 258 5.77781e+010
+252 10 5.77241e+010
+173 74 5.76982e+010
+154 93 5.76576e+010
+205 127 5.76363e+010
+541 122 5.76362e+010
+494 164 5.76123e+010
+379 352 5.75526e+010
+589 309 5.75001e+010
+471 262 5.74572e+010
+378 338 5.74304e+010
+486 205 5.73921e+010
+228 129 5.72122e+010
+207 417 5.69289e+010
+515 142 5.69125e+010
+132 26 5.6905e+010
+146 160 5.68642e+010
+259 71 5.68561e+010
+355 24 5.66656e+010
+363 407 5.66004e+010
+191 171 5.65978e+010
+418 414 5.65302e+010
+148 21 5.65097e+010
+475 340 5.64477e+010
+285 263 5.64319e+010
+247 258 5.63786e+010
+33 235 5.63179e+010
+48 133 5.62369e+010
+48 256 5.62214e+010
+167 325 5.6028e+010
+453 358 5.59338e+010
+194 17 5.58882e+010
+60 148 5.5886e+010
+305 107 5.58855e+010
+138 146 5.57961e+010
+410 99 5.57909e+010
+422 398 5.57764e+010
+454 264 5.57285e+010
+95 452 5.5689e+010
+226 15 5.56484e+010
+313 71 5.56168e+010
+163 147 5.55788e+010
+187 99 5.55658e+010
+321 103 5.53458e+010
+577 50 5.52512e+010
+512 349 5.51852e+010
+192 139 5.5148e+010
+311 334 5.50784e+010
+450 442 5.50529e+010
+64 448 5.50243e+010
+281 35 5.48435e+010
+237 132 5.48396e+010
+549 59 5.47618e+010
+65 363 5.47616e+010
+505 159 5.46823e+010
+12 80 5.46111e+010
+263 311 5.44898e+010
+413 65 5.44614e+010
+44 10 5.44559e+010
+318 147 5.44182e+010
+535 18 5.43091e+010
+37 138 5.42935e+010
+315 145 5.42413e+010
+484 154 5.41932e+010
+344 197 5.4177e+010
+334 368 5.41586e+010
+271 365 5.40772e+010
+400 104 5.39595e+010
+425 43 5.38883e+010
+184 117 5.38671e+010
+303 180 5.38514e+010
+70 130 5.3846e+010
+101 197 5.38377e+010
+126 189 5.37857e+010
+108 183 5.3735e+010
+550 222 5.37144e+010
+567 423 5.37137e+010
+389 420 5.3685e+010
+47 79 5.36714e+010
+281 142 5.36446e+010
+525 381 5.35661e+010
+198 75 5.3542e+010
+357 240 5.35317e+010
+480 402 5.35101e+010
+153 197 5.34274e+010
+298 191 5.33905e+010
+221 125 5.3294e+010
+181 33 5.31533e+010
+242 100 5.30902e+010
+297 274 5.30744e+010
+144 327 5.30618e+010
+148 163 5.30477e+010
+38 170 5.29819e+010
+123 41 5.2908e+010
+407 81 5.28861e+010
+254 404 5.28804e+010
+319 167 5.28054e+010
+598 363 5.27946e+010
+535 121 5.27167e+010
+44 121 5.27032e+010
+489 23 5.26853e+010
+84 237 5.2652e+010
+483 82 5.26422e+010
+559 271 5.26344e+010
+90 321 5.26275e+010
+65 252 5.2506e+010
+473 355 5.24944e+010
+243 55 5.2475e+010
+9 476 5.24613e+010
+397 25 5.24083e+010
+516 348 5.24044e+010
+421 315 5.23801e+010
+240 421 5.23044e+010
+286 52 5.22338e+010
+246 106 5.22293e+010
+91 390 5.22168e+010
+141 391 5.2193e+010
+36 201 5.21445e+010
+46 147 5.21402e+010
+158 237 5.2055e+010
+403 6 5.20532e+010
+304 216 5.20175e+010
+325 149 5.19766e+010
+439 64 5.19221e+010
+538 79 5.17986e+010
+256 150 5.17221e+010
+446 376 5.17136e+010
+459 123 5.16661e+010
+44 81 5.16429e+010
+49 164 5.1573e+010
+350 240 5.15718e+010
+262 219 5.15464e+010
+29 254 5.15042e+010
+86 370 5.13624e+010
+445 7 5.13493e+010
+194 135 5.13295e+010
+565 161 5.13269e+010
+618 181 5.12548e+010
+448 340 5.12174e+010
+39 144 5.12133e+010
+179 359 5.12101e+010
+318 312 5.10474e+010
+129 309 5.10269e+010
+525 60 5.09924e+010
+415 83 5.09773e+010
+165 154 5.09479e+010
+206 293 5.09106e+010
+128 238 5.08845e+010
+189 202 5.07876e+010
+109 358 5.07238e+010
+3 381 5.07232e+010
+353 424 5.06914e+010
+373 87 5.04191e+010
+473 120 5.03912e+010
+512 125 5.02665e+010
+266 139 5.02203e+010
+94 5 5.01763e+010
+514 335 5.01693e+010
+252 422 5.01024e+010
+493 102 5.00648e+010
+530 364 5.00637e+010
+509 168 4.99549e+010
+376 66 4.99382e+010
+191 56 4.98299e+010
+332 295 4.97972e+010
+175 189 4.97566e+010
+172 166 4.96928e+010
+521 344 4.9665e+010
+168 242 4.96314e+010
+402 265 4.94752e+010
+396 21 4.94698e+010
+572 449 4.94193e+010
+211 33 4.91903e+010
+45 131 4.91671e+010
+227 258 4.91636e+010
+366 95 4.91129e+010
+274 76 4.91036e+010
+297 137 4.90784e+010
+383 89 4.90602e+010
+114 220 4.90305e+010
+121 128 4.90022e+010
+143 395 4.89413e+010
+366 66 4.89191e+010
+321 119 4.87847e+010
+335 49 4.87484e+010
+191 314 4.87464e+010
+592 107 4.86595e+010
+569 122 4.8563e+010
+303 52 4.85052e+010
+113 204 4.84974e+010
+530 24 4.84793e+010
+526 422 4.84226e+010
+384 26 4.83679e+010
+389 333 4.8362e+010
+136 177 4.83556e+010
+282 351 4.83339e+010
+205 162 4.82904e+010
+344 276 4.82233e+010
+343 351 4.82079e+010
+326 296 4.82062e+010
+133 78 4.81512e+010
+216 172 4.80789e+010
+247 346 4.79722e+010
+505 382 4.79666e+010
+135 139 4.79592e+010
+539 62 4.7944e+010
+323 223 4.78372e+010
+64 276 4.78054e+010
+298 332 4.77815e+010
+484 357 4.77567e+010
+533 161 4.7723e+010
+562 17 4.77189e+010
+170 199 4.76932e+010
+329 103 4.7689e+010
+381 47 4.7674e+010
+485 236 4.75579e+010
+201 166 4.75552e+010
+311 298 4.75367e+010
+207 159 4.75202e+010
+511 210 4.75178e+010
+273 353 4.74722e+010
+245 402 4.74596e+010
+20 67 4.74073e+010
+127 40 4.73606e+010
+528 161 4.73604e+010
+289 212 4.73496e+010
+248 219 4.73455e+010
+180 106 4.73342e+010
+259 228 4.73205e+010
+375 225 4.73104e+010
+406 142 4.72753e+010
+470 418 4.72528e+010
+105 430 4.72391e+010
+248 191 4.72349e+010
+522 140 4.71781e+010
+136 57 4.71317e+010
+125 112 4.71077e+010
+412 220 4.70877e+010
+343 7 4.70407e+010
+528 142 4.70175e+010
+136 93 4.69685e+010
+261 440 4.69452e+010
+484 161 4.69197e+010
+64 27 4.69188e+010
+224 154 4.68488e+010
+310 90 4.6763e+010
+161 31 4.67321e+010
+270 91 4.67181e+010
+415 262 4.66833e+010
+44 476 4.66647e+010
+447 245 4.65073e+010
+163 249 4.64962e+010
+437 303 4.6456e+010
+542 216 4.63792e+010
+360 242 4.6356e+010
+90 377 4.63473e+010
+110 168 4.63114e+010
+272 133 4.6191e+010
+407 162 4.61776e+010
+235 198 4.60367e+010
+495 141 4.60207e+010
+383 181 4.59775e+010
+513 261 4.59714e+010
+330 212 4.59334e+010
+220 210 4.58668e+010
+270 221 4.57257e+010
+326 180 4.57111e+010
+196 343 4.56861e+010
+179 75 4.56828e+010
+385 450 4.55955e+010
+199 328 4.55717e+010
+176 185 4.55304e+010
+462 161 4.54771e+010
+252 222 4.54354e+010
+83 404 4.54315e+010
+301 86 4.53074e+010
+491 470 4.52757e+010
+367 2 4.52617e+010
+188 104 4.52614e+010
+267 296 4.52056e+010
+219 387 4.5111e+010
+83 183 4.50702e+010
+241 68 4.50352e+010
+389 222 4.50285e+010
+92 112 4.49915e+010
+303 406 4.49889e+010
+51 377 4.48991e+010
+497 283 4.48926e+010
+303 170 4.48661e+010
+509 102 4.48321e+010
+574 39 4.48199e+010
+332 255 4.47975e+010
+328 66 4.47761e+010
+174 418 4.46909e+010
+55 303 4.46814e+010
+171 96 4.46662e+010
+54 358 4.44978e+010
+345 306 4.44643e+010
+388 97 4.44411e+010
+267 146 4.44047e+010
+175 40 4.43093e+010
+591 103 4.43068e+010
+374 394 4.4288e+010
+246 327 4.42266e+010
+196 82 4.4176e+010
+308 8 4.41497e+010
+180 136 4.41488e+010
+94 198 4.41228e+010
+127 26 4.41154e+010
+65 213 4.40957e+010
+156 307 4.40921e+010
+373 76 4.40247e+010
+172 107 4.40063e+010
+245 385 4.4005e+010
+72 24 4.39873e+010
+562 158 4.39504e+010
+203 397 4.38836e+010
+57 364 4.37464e+010
+512 139 4.37268e+010
+96 257 4.36954e+010
+406 199 4.36949e+010
+113 347 4.36913e+010
+323 425 4.36272e+010
+103 223 4.35664e+010
+102 234 4.35415e+010
+278 417 4.34909e+010
+133 376 4.34855e+010
+383 325 4.34367e+010
+347 297 4.33851e+010
+557 302 4.33822e+010
+129 94 4.33248e+010
+230 150 4.32992e+010
+160 98 4.3297e+010
+251 184 4.32695e+010
+575 54 4.31543e+010
+230 263 4.31442e+010
+282 54 4.31365e+010
+539 220 4.30843e+010
+95 284 4.30735e+010
+422 63 4.30592e+010
+308 448 4.30459e+010
+38 10 4.30421e+010
+390 133 4.30261e+010
+560 81 4.28946e+010
+456 201 4.28621e+010
+190 184 4.28194e+010
+409 281 4.28033e+010
+84 59 4.26616e+010
+125 329 4.26294e+010
+344 341 4.26099e+010
+470 202 4.25596e+010
+32 112 4.25214e+010
+358 282 4.25049e+010
+282 135 4.25004e+010
+228 198 4.24982e+010
+81 131 4.24753e+010
+463 100 4.24518e+010
+117 132 4.24352e+010
+362 360 4.24183e+010
+245 213 4.24146e+010
+538 185 4.23886e+010
+220 419 4.23695e+010
+102 294 4.23586e+010
+63 230 4.2353e+010
+290 89 4.23026e+010
+342 136 4.22878e+010
+279 194 4.22839e+010
+151 133 4.21973e+010
+185 170 4.21564e+010
+201 317 4.21194e+010
+279 111 4.21074e+010
+477 401 4.20525e+010
+533 341 4.20454e+010
+222 214 4.19853e+010
+479 241 4.19623e+010
+153 57 4.19584e+010
+308 183 4.19302e+010
+145 255 4.18727e+010
+540 99 4.18319e+010
+127 186 4.18058e+010
+79 273 4.1774e+010
+449 23 4.17356e+010
+175 121 4.17247e+010
+494 23 4.17192e+010
+369 140 4.171e+010
+545 438 4.16325e+010
+104 163 4.16323e+010
+302 102 4.15263e+010
+2 166 4.15102e+010
+277 164 4.14697e+010
+113 176 4.14639e+010
+189 205 4.14535e+010
+39 242 4.1453e+010
+51 257 4.13539e+010
+62 133 4.13483e+010
+571 269 4.13059e+010
+89 22 4.12615e+010
+143 3 4.12585e+010
+192 326 4.1251e+010
+480 171 4.12404e+010
+11 72 4.11881e+010
+217 106 4.11728e+010
+87 230 4.11431e+010
+526 122 4.11163e+010
+290 264 4.11045e+010
+38 167 4.10935e+010
+560 274 4.10888e+010
+310 259 4.10753e+010
+342 314 4.10616e+010
+550 121 4.10082e+010
+36 64 4.0995e+010
+71 47 4.09822e+010
+513 180 4.09793e+010
+525 79 4.09757e+010
+500 223 4.09667e+010
+324 370 4.08727e+010
+577 15 4.08629e+010
+175 342 4.08502e+010
+265 249 4.08032e+010
+434 381 4.08026e+010
+441 23 4.07959e+010
+394 222 4.07814e+010
+330 167 4.06959e+010
+433 240 4.06909e+010
+301 188 4.06692e+010
+186 374 4.06626e+010
+378 182 4.0606e+010
+531 41 4.05642e+010
+576 164 4.05546e+010
+95 59 4.04946e+010
+501 102 4.04484e+010
+347 144 4.04427e+010
+572 328 4.0432e+010
+131 148 4.04177e+010
+237 149 4.04037e+010
+232 15 4.03693e+010
+482 333 4.03618e+010
+532 21 4.02851e+010
+329 255 4.02747e+010
+54 449 4.02545e+010
+187 219 4.02196e+010
+350 86 4.02176e+010
+260 201 4.02138e+010
+451 138 4.01946e+010
+461 221 4.01561e+010
+448 64 4.01545e+010
+67 24 4.01388e+010
+48 458 4.01122e+010
+93 477 3.99942e+010
+327 341 3.99786e+010
+289 397 3.99633e+010
+531 239 3.99271e+010
+13 236 3.99191e+010
+527 398 3.99185e+010
+279 362 3.99062e+010
+154 113 3.98492e+010
+200 415 3.98343e+010
+471 144 3.98116e+010
+518 1 3.97397e+010
+46 420 3.97354e+010
+320 30 3.97192e+010
+461 357 3.97095e+010
+37 288 3.96965e+010
+13 202 3.96201e+010
+366 107 3.96049e+010
+140 317 3.95709e+010
+32 103 3.95437e+010
+279 126 3.95147e+010
+395 45 3.94659e+010
+196 310 3.94644e+010
+301 107 3.94237e+010
+423 164 3.93841e+010
+351 363 3.93837e+010
+398 142 3.92968e+010
+94 422 3.92674e+010
+410 66 3.92242e+010
+132 255 3.92137e+010
+76 270 3.91756e+010
+534 393 3.91617e+010
+54 221 3.91386e+010
+576 91 3.90779e+010
+367 247 3.90466e+010
+578 123 3.90285e+010
+513 402 3.90183e+010
+40 148 3.90067e+010
+209 203 3.89992e+010
+150 38 3.89863e+010
+573 139 3.89586e+010
+189 137 3.89491e+010
+51 64 3.893e+010
+266 118 3.88778e+010
+163 97 3.8755e+010
+240 194 3.87459e+010
+44 152 3.87386e+010
+32 100 3.87247e+010
+361 449 3.87107e+010
+124 94 3.87072e+010
+433 63 3.86952e+010
+86 356 3.86609e+010
+351 320 3.8636e+010
+34 97 3.86142e+010
+120 220 3.86083e+010
+597 272 3.86057e+010
+431 340 3.85635e+010
+243 419 3.85605e+010
+344 262 3.85017e+010
+241 166 3.84213e+010
+281 394 3.83735e+010
+561 201 3.83703e+010
+177 331 3.83398e+010
+215 427 3.83003e+010
+566 43 3.8292e+010
+276 53 3.82867e+010
+202 7 3.82203e+010
+472 42 3.82113e+010
+248 164 3.82024e+010
+187 257 3.81903e+010
+365 104 3.81519e+010
+69 417 3.80923e+010
+424 102 3.8066e+010
+292 348 3.80595e+010
+180 123 3.79994e+010
+228 92 3.79967e+010
+155 396 3.79394e+010
+536 40 3.79185e+010
+146 452 3.78738e+010
+311 265 3.78489e+010
+59 372 3.78394e+010
+588 18 3.78196e+010
+474 143 3.77574e+010
+506 198 3.77463e+010
+248 404 3.77421e+010
+468 423 3.76896e+010
+399 67 3.7579e+010
+425 124 3.74598e+010
+117 360 3.74533e+010
+180 56 3.73769e+010
+358 9 3.73713e+010
+42 353 3.73605e+010
+485 221 3.73394e+010
+134 134 3.73054e+010
+509 137 3.72621e+010
+298 108 3.72546e+010
+107 220 3.72496e+010
+420 362 3.72259e+010
+388 203 3.72111e+010
+261 34 3.721e+010
+228 347 3.7188e+010
+201 74 3.7186e+010
+282 206 3.71678e+010
+540 263 3.71672e+010
+380 122 3.71351e+010
+315 238 3.71122e+010
+205 435 3.70933e+010
+482 123 3.70868e+010
+392 243 3.7064e+010
+260 383 3.70531e+010
+215 248 3.70145e+010
+79 269 3.69738e+010
+216 235 3.69536e+010
+347 370 3.69394e+010
+373 103 3.69319e+010
+324 341 3.69163e+010
+166 126 3.69161e+010
+158 169 3.69142e+010
+200 293 3.6914e+010
+427 63 3.6885e+010
+515 381 3.67938e+010
+393 217 3.67713e+010
+106 2 3.67461e+010
+483 327 3.66288e+010
+176 180 3.66173e+010
+463 123 3.65889e+010
+119 54 3.65831e+010
+460 40 3.65809e+010
+562 70 3.65314e+010
+232 399 3.65078e+010
+30 134 3.6472e+010
+83 101 3.64714e+010
+420 81 3.64491e+010
+81 219 3.64015e+010
+394 335 3.63559e+010
+515 184 3.62167e+010
+133 411 3.62046e+010
+198 167 3.61813e+010
+398 94 3.61801e+010
+303 443 3.61648e+010
+479 294 3.61596e+010
+299 399 3.61394e+010
+379 335 3.60566e+010
+436 91 3.60367e+010
+153 75 3.60263e+010
+58 5 3.60115e+010
+426 470 3.60008e+010
+440 468 3.59877e+010
+124 184 3.59758e+010
+528 357 3.59285e+010
+63 439 3.59265e+010
+326 13 3.59186e+010
+416 377 3.58622e+010
+507 14 3.58581e+010
+358 52 3.58455e+010
+579 42 3.58104e+010
+482 164 3.58019e+010
+58 79 3.5801e+010
+108 109 3.57217e+010
+273 146 3.57047e+010
+512 295 3.57044e+010
+158 74 3.56778e+010
+512 109 3.56606e+010
+304 292 3.56252e+010
+263 403 3.56245e+010
+118 224 3.56158e+010
+416 282 3.55955e+010
+450 324 3.55674e+010
+60 204 3.5562e+010
+290 249 3.55601e+010
+568 383 3.55355e+010
+33 30 3.55179e+010
+451 91 3.55133e+010
+251 257 3.55132e+010
+199 111 3.5448e+010
+391 324 3.54056e+010
+383 123 3.53035e+010
+296 410 3.53008e+010
+161 430 3.5292e+010
+186 200 3.52335e+010
+407 262 3.51982e+010
+11 114 3.51579e+010
+452 43 3.51561e+010
+81 39 3.51526e+010
+68 304 3.51286e+010
+570 422 3.50869e+010
+266 286 3.50569e+010
+589 162 3.50547e+010
+259 159 3.50422e+010
+510 253 3.50396e+010
+391 166 3.50325e+010
+465 354 3.4986e+010
+99 426 3.49468e+010
+572 364 3.49417e+010
+206 220 3.49275e+010
+306 354 3.49271e+010
+161 397 3.48406e+010
+432 268 3.47975e+010
+234 158 3.47822e+010
+271 183 3.47702e+010
+465 236 3.47321e+010
+157 103 3.47265e+010
+164 379 3.47063e+010
+483 286 3.4677e+010
+216 176 3.46703e+010
+561 153 3.46665e+010
+64 218 3.46374e+010
+283 80 3.46323e+010
+158 164 3.4615e+010
+185 311 3.45974e+010
+109 27 3.45722e+010
+155 200 3.45667e+010
+194 201 3.45451e+010
+304 213 3.45285e+010
+418 44 3.4524e+010
+457 340 3.44969e+010
+179 103 3.44874e+010
+153 222 3.44563e+010
+212 94 3.44123e+010
+88 183 3.43887e+010
+381 4 3.43409e+010
+280 186 3.43175e+010
+250 425 3.43095e+010
+244 91 3.42744e+010
+93 95 3.42197e+010
+533 346 3.4197e+010
+497 223 3.41599e+010
+146 86 3.412e+010
+588 345 3.41179e+010
+229 178 3.41099e+010
+280 166 3.41066e+010
+582 19 3.40849e+010
+313 132 3.40837e+010
+401 169 3.40819e+010
+108 260 3.40652e+010
+402 217 3.40438e+010
+125 413 3.4014e+010
+527 219 3.40038e+010
+175 19 3.39828e+010
+316 101 3.39619e+010
+354 238 3.39232e+010
+105 198 3.39229e+010
+103 392 3.39198e+010
+524 289 3.38997e+010
+320 96 3.38785e+010
+117 428 3.38694e+010
+90 339 3.38596e+010
+154 21 3.38489e+010
+215 62 3.38376e+010
+172 38 3.38086e+010
+198 10 3.3806e+010
+129 113 3.37844e+010
+248 262 3.36977e+010
+391 449 3.36784e+010
+407 106 3.36585e+010
+219 109 3.36304e+010
+78 59 3.35671e+010
+420 89 3.35552e+010
+496 462 3.35527e+010
+258 327 3.35165e+010
+545 160 3.35027e+010
+414 143 3.34629e+010
+452 337 3.34089e+010
+107 96 3.33885e+010
+498 72 3.33837e+010
+95 340 3.338e+010
+109 99 3.33663e+010
+162 150 3.33533e+010
+416 23 3.33235e+010
+406 78 3.3303e+010
+224 51 3.32874e+010
+438 242 3.32699e+010
+3 109 3.32661e+010
+503 180 3.32418e+010
+259 107 3.32208e+010
+47 11 3.31232e+010
+393 184 3.3117e+010
+54 44 3.31089e+010
+250 72 3.31007e+010
+144 432 3.3078e+010
+114 374 3.30458e+010
+246 172 3.30422e+010
+384 242 3.30222e+010
+529 136 3.30149e+010
+151 400 3.29761e+010
+297 182 3.29591e+010
+245 88 3.29369e+010
+305 148 3.29127e+010
+281 132 3.29048e+010
+154 345 3.29026e+010
+298 262 3.2838e+010
+368 162 3.28323e+010
+41 395 3.2737e+010
+164 310 3.27343e+010
+161 121 3.27246e+010
+219 315 3.26367e+010
+208 308 3.26338e+010
+332 397 3.26169e+010
+90 277 3.26092e+010
+297 257 3.25909e+010
+569 183 3.25841e+010
+468 199 3.25682e+010
+328 326 3.25467e+010
+309 221 3.25207e+010
+521 426 3.25179e+010
+429 88 3.25133e+010
+263 142 3.25072e+010
+132 477 3.24983e+010
+338 221 3.24863e+010
+333 28 3.24777e+010
+227 38 3.24716e+010
+346 47 3.24276e+010
+458 140 3.24173e+010
+77 375 3.24128e+010
+24 185 3.24e+010
+36 233 3.23766e+010
+374 366 3.2339e+010
+577 403 3.22949e+010
+251 247 3.22404e+010
+33 39 3.21792e+010
+87 341 3.2127e+010
+6 151 3.21268e+010
+214 148 3.20968e+010
+454 46 3.20557e+010
+405 221 3.2048e+010
+297 125 3.2047e+010
+133 392 3.20317e+010
+541 141 3.20182e+010
+426 6 3.20052e+010
+123 343 3.1969e+010
+59 70 3.19632e+010
+247 180 3.19511e+010
+520 77 3.18907e+010
+187 363 3.18392e+010
+476 248 3.18391e+010
+549 281 3.18373e+010
+344 187 3.18327e+010
+208 315 3.18266e+010
+384 111 3.1804e+010
+344 329 3.17987e+010
+534 182 3.1775e+010
+41 337 3.17522e+010
+163 137 3.1697e+010
+294 271 3.16466e+010
+7 46 3.16268e+010
+136 21 3.16139e+010
+538 103 3.15847e+010
+11 45 3.15805e+010
+124 82 3.15682e+010
+28 271 3.15576e+010
+50 11 3.15428e+010
+221 84 3.1529e+010
+374 126 3.15195e+010
+464 226 3.15074e+010
+469 22 3.15062e+010
+89 288 3.15027e+010
+128 257 3.15002e+010
+400 146 3.1479e+010
+437 126 3.1462e+010
+290 112 3.14465e+010
+274 313 3.14332e+010
+214 132 3.1424e+010
+347 119 3.1409e+010
+88 261 3.14026e+010
+402 166 3.13988e+010
+586 141 3.13515e+010
+555 264 3.13205e+010
+486 242 3.1319e+010
+161 91 3.13091e+010
+77 475 3.1307e+010
+39 82 3.12651e+010
+162 165 3.12014e+010
+137 324 3.11883e+010
+519 348 3.11791e+010
+302 141 3.11393e+010
+275 318 3.11273e+010
+101 112 3.11016e+010
+77 29 3.10937e+010
+391 52 3.10937e+010
+371 190 3.10534e+010
+263 31 3.10529e+010
+454 418 3.10485e+010
+374 355 3.10466e+010
+417 259 3.10315e+010
+398 169 3.09695e+010
+368 31 3.0914e+010
+565 463 3.08506e+010
+224 130 3.08374e+010
+59 110 3.08179e+010
+252 238 3.07669e+010
+82 106 3.07561e+010
+54 389 3.07413e+010
+119 423 3.074e+010
+325 315 3.07127e+010
+487 119 3.06858e+010
+215 402 3.0685e+010
+420 283 3.06677e+010
+545 141 3.06463e+010
+394 165 3.0632e+010
+144 179 3.06145e+010
+389 15 3.0614e+010
+520 362 3.06065e+010
+150 2 3.06018e+010
+559 422 3.05462e+010
+361 157 3.05386e+010
+355 296 3.05333e+010
+274 64 3.05162e+010
+176 200 3.0505e+010
+252 193 3.04362e+010
+364 333 3.04335e+010
+97 197 3.04092e+010
+277 130 3.04052e+010
+109 77 3.03859e+010
+170 131 3.03735e+010
+173 274 3.03427e+010
+59 98 3.03249e+010
+546 262 3.02916e+010
+327 25 3.027e+010
+424 197 3.02592e+010
+108 148 3.02225e+010
+449 284 3.02163e+010
+561 144 3.02124e+010
+333 415 3.02022e+010
+31 81 3.01951e+010
+450 117 3.01937e+010
+42 24 3.01832e+010
+281 311 3.01822e+010
+210 163 3.01386e+010
+432 87 3.01124e+010
+236 295 3.00963e+010
+464 139 2.99997e+010
+426 24 2.99766e+010
+374 144 2.99607e+010
+312 7 2.99358e+010
+250 85 2.99324e+010
+449 349 2.99257e+010
+335 418 2.99188e+010
+42 97 2.99153e+010
+410 104 2.98608e+010
+411 183 2.98414e+010
+102 308 2.9836e+010
+18 320 2.98055e+010
+382 260 2.97826e+010
+410 414 2.97498e+010
+510 114 2.97336e+010
+217 164 2.97335e+010
+45 407 2.97095e+010
+275 296 2.97007e+010
+340 28 2.96963e+010
+247 419 2.96637e+010
+562 264 2.96544e+010
+146 15 2.9622e+010
+459 161 2.95805e+010
+108 427 2.9572e+010
+399 131 2.95569e+010
+164 190 2.95498e+010
+423 204 2.9493e+010
+23 254 2.94707e+010
+258 349 2.94479e+010
+458 358 2.93996e+010
+263 109 2.93823e+010
+255 181 2.93786e+010
+222 176 2.93411e+010
+272 414 2.92845e+010
+146 221 2.92757e+010
+342 162 2.92548e+010
+244 430 2.92407e+010
+218 284 2.92384e+010
+391 296 2.91805e+010
+95 359 2.91648e+010
+244 255 2.91336e+010
+469 302 2.91067e+010
+589 350 2.90375e+010
+142 239 2.90192e+010
+346 200 2.89841e+010
+310 138 2.898e+010
+200 126 2.89645e+010
+534 303 2.8949e+010
+292 124 2.89475e+010
+182 381 2.89384e+010
+91 79 2.8927e+010
+14 434 2.89163e+010
+479 458 2.88576e+010
+465 4 2.88197e+010
+354 17 2.87906e+010
+87 367 2.87631e+010
+533 93 2.87537e+010
+464 263 2.87285e+010
+152 184 2.87195e+010
+501 140 2.8718e+010
+569 325 2.86977e+010
+70 390 2.86936e+010
+436 105 2.86594e+010
+191 53 2.86519e+010
+301 215 2.86241e+010
+25 133 2.85635e+010
+515 118 2.85587e+010
+240 295 2.85387e+010
+233 37 2.85312e+010
+240 383 2.84977e+010
+412 245 2.84601e+010
+459 3 2.8435e+010
+275 142 2.84126e+010
+55 294 2.83376e+010
+470 139 2.83334e+010
+575 98 2.83319e+010
+477 221 2.83129e+010
+277 238 2.82426e+010
+209 187 2.824e+010
+410 417 2.82344e+010
+187 263 2.82111e+010
+325 118 2.82043e+010
+544 175 2.81635e+010
+512 83 2.81397e+010
+465 379 2.81108e+010
+297 165 2.81094e+010
+207 74 2.80771e+010
+420 138 2.80744e+010
+553 18 2.80658e+010
+543 82 2.80612e+010
+262 319 2.80605e+010
+100 160 2.80572e+010
+232 183 2.80508e+010
+438 454 2.80388e+010
+501 21 2.80242e+010
+99 361 2.8021e+010
+472 82 2.80193e+010
+584 37 2.79893e+010
+449 168 2.79878e+010
+214 161 2.79762e+010
+570 59 2.79401e+010
+342 297 2.79395e+010
+509 346 2.79263e+010
+62 164 2.79185e+010
+351 140 2.79017e+010
+53 148 2.78947e+010
+248 15 2.78767e+010
+179 113 2.78655e+010
+308 107 2.78291e+010
+492 58 2.78101e+010
+65 272 2.78066e+010
+514 364 2.77433e+010
+355 475 2.77028e+010
+126 251 2.76722e+010
+7 201 2.76499e+010
+40 79 2.7644e+010
+147 344 2.7621e+010
+572 405 2.75849e+010
+42 305 2.75842e+010
+210 21 2.75787e+010
+542 457 2.75554e+010
+435 279 2.75505e+010
+289 136 2.7546e+010
+388 83 2.75304e+010
+425 397 2.7514e+010
+121 187 2.7501e+010
+450 129 2.74913e+010
+232 101 2.749e+010
+544 339 2.74762e+010
+526 193 2.74559e+010
+63 182 2.73997e+010
+198 28 2.73554e+010
+341 109 2.73423e+010
+232 70 2.72973e+010
+331 333 2.72972e+010
+430 116 2.72152e+010
+140 428 2.71958e+010
+602 274 2.71428e+010
+259 370 2.71214e+010
+288 221 2.71058e+010
+324 31 2.70809e+010
+576 182 2.70686e+010
+158 252 2.70542e+010
+584 345 2.70486e+010
+413 414 2.70376e+010
+149 138 2.70135e+010
+120 116 2.69608e+010
+341 40 2.69528e+010
+238 190 2.69523e+010
+419 52 2.69422e+010
+456 285 2.69369e+010
+496 476 2.69334e+010
+260 457 2.69309e+010
+132 65 2.69207e+010
+90 399 2.68978e+010
+87 395 2.68438e+010
+532 143 2.6841e+010
+517 82 2.68371e+010
+438 41 2.67951e+010
+321 147 2.67684e+010
+440 394 2.67585e+010
+419 92 2.67578e+010
+583 80 2.67535e+010
+144 165 2.67294e+010
+384 65 2.66859e+010
+570 375 2.6674e+010
+595 58 2.66562e+010
+528 188 2.66391e+010
+433 376 2.66289e+010
+550 141 2.66063e+010
+102 255 2.66014e+010
+230 112 2.65864e+010
+472 211 2.6582e+010
+25 61 2.65748e+010
+329 142 2.65642e+010
+447 183 2.65628e+010
+255 81 2.65583e+010
+159 56 2.65499e+010
+294 89 2.65382e+010
+378 261 2.65378e+010
+212 151 2.65002e+010
+477 204 2.64948e+010
+99 96 2.64419e+010
+38 254 2.64371e+010
+104 183 2.64311e+010
+211 376 2.63959e+010
+191 255 2.63912e+010
+195 217 2.63879e+010
+579 324 2.63806e+010
+287 158 2.63691e+010
+112 181 2.63375e+010
+305 411 2.63079e+010
+212 422 2.62847e+010
+226 121 2.62837e+010
+139 394 2.62269e+010
+266 111 2.61959e+010
+414 300 2.61837e+010
+411 81 2.61726e+010
+334 435 2.61659e+010
+149 231 2.61302e+010
+15 215 2.6121e+010
+573 423 2.60898e+010
+271 313 2.60774e+010
+96 8 2.6059e+010
+527 196 2.60549e+010
+289 123 2.60373e+010
+497 59 2.60154e+010
+270 119 2.60088e+010
+232 91 2.59897e+010
+187 326 2.59796e+010
+179 40 2.59702e+010
+253 147 2.59656e+010
+283 200 2.59641e+010
+402 375 2.59634e+010
+375 282 2.59252e+010
+141 116 2.58685e+010
+2 201 2.58619e+010
+300 346 2.5846e+010
+565 227 2.58374e+010
+84 310 2.5829e+010
+206 93 2.58285e+010
+371 147 2.58109e+010
+37 182 2.58108e+010
+400 199 2.58055e+010
+164 36 2.57959e+010
+501 82 2.57893e+010
+72 4 2.57694e+010
+404 113 2.57525e+010
+88 244 2.57446e+010
+184 347 2.57369e+010
+150 202 2.57237e+010
+499 475 2.57049e+010
+244 182 2.56449e+010
+169 359 2.56171e+010
+253 110 2.55761e+010
+258 136 2.55598e+010
+323 260 2.55417e+010
+401 429 2.55375e+010
+385 355 2.55357e+010
+429 223 2.55201e+010
+335 260 2.55109e+010
+373 152 2.54889e+010
+419 95 2.54874e+010
+215 99 2.54714e+010
+175 139 2.54679e+010
+87 309 2.5416e+010
+63 201 2.5391e+010
+181 220 2.53852e+010
+554 303 2.53726e+010
+389 90 2.53668e+010
+79 406 2.53652e+010
+192 364 2.53626e+010
+162 74 2.53619e+010
+280 420 2.53477e+010
+418 470 2.53438e+010
+469 42 2.53428e+010
+167 414 2.5313e+010
+487 52 2.53024e+010
+122 446 2.52947e+010
+479 85 2.52836e+010
+25 270 2.52288e+010
+27 118 2.52279e+010
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_3_5.txt b/test_data/harriscorners/hc_msc_3.00_0.10_3_5.txt
new file mode 100644
index 0000000..ec148a0
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_3_5.txt
@@ -0,0 +1,2017 @@
+2016
+273 366 1.92986e+012
+122 43 1.59863e+012
+244 94 1.43017e+012
+330 128 1.29686e+012
+422 181 1.28873e+012
+84 78 1.23897e+012
+298 53 1.21622e+012
+448 297 1.19804e+012
+237 19 1.18589e+012
+214 72 1.18216e+012
+200 17 1.17126e+012
+134 214 1.15214e+012
+485 59 1.07957e+012
+553 40 1.05189e+012
+395 318 1.0339e+012
+272 291 1.03228e+012
+436 67 1.02144e+012
+124 198 1.00469e+012
+175 94 9.89973e+011
+447 397 9.77159e+011
+401 262 9.74749e+011
+423 178 9.61909e+011
+507 122 9.54085e+011
+387 178 9.46806e+011
+47 27 9.45205e+011
+544 168 9.42298e+011
+35 138 9.38376e+011
+303 183 9.36694e+011
+363 401 9.34352e+011
+125 364 9.30786e+011
+425 321 9.22566e+011
+160 143 9.19384e+011
+124 254 9.18721e+011
+209 55 8.96429e+011
+286 297 8.95126e+011
+317 335 8.94043e+011
+277 368 8.86404e+011
+302 176 8.82282e+011
+253 139 8.79908e+011
+243 202 8.78556e+011
+184 36 8.72212e+011
+82 28 8.66168e+011
+65 235 8.55138e+011
+76 256 8.42783e+011
+222 38 8.36167e+011
+90 198 8.31147e+011
+418 8 8.29339e+011
+262 441 8.25298e+011
+343 9 8.24831e+011
+54 29 8.23194e+011
+137 209 8.19056e+011
+360 295 8.17085e+011
+393 143 8.12788e+011
+257 385 8.084e+011
+104 62 8.04932e+011
+456 282 7.97721e+011
+294 15 7.93264e+011
+420 177 7.86926e+011
+48 98 7.74279e+011
+239 91 7.73496e+011
+207 224 7.70283e+011
+341 337 7.61037e+011
+92 214 7.60219e+011
+116 44 7.57847e+011
+325 88 7.56989e+011
+447 263 7.53726e+011
+514 76 7.47079e+011
+78 2 7.46902e+011
+174 312 7.42521e+011
+65 319 7.41009e+011
+508 17 7.39035e+011
+470 239 7.37189e+011
+281 112 7.36766e+011
+543 365 7.25604e+011
+207 435 7.24415e+011
+301 165 7.23962e+011
+65 343 7.21947e+011
+523 264 7.21332e+011
+466 197 7.17966e+011
+346 10 7.17456e+011
+239 202 7.17031e+011
+543 15 7.15152e+011
+131 36 7.10127e+011
+210 435 7.07583e+011
+412 256 7.06983e+011
+509 164 7.05627e+011
+449 218 7.00289e+011
+344 338 6.99741e+011
+390 58 6.97112e+011
+282 117 6.95616e+011
+154 236 6.95477e+011
+2 46 6.89764e+011
+543 216 6.86997e+011
+320 224 6.84964e+011
+427 119 6.83895e+011
+386 221 6.83529e+011
+101 222 6.83512e+011
+225 182 6.82813e+011
+196 57 6.79614e+011
+30 8 6.79284e+011
+110 240 6.77352e+011
+407 65 6.724e+011
+423 45 6.69099e+011
+36 145 6.68942e+011
+166 241 6.65958e+011
+128 2 6.64604e+011
+172 95 6.61107e+011
+139 203 6.60608e+011
+498 159 6.57058e+011
+360 335 6.55112e+011
+202 313 6.53721e+011
+487 23 6.52978e+011
+363 297 6.51693e+011
+313 76 6.48583e+011
+110 135 6.48018e+011
+511 167 6.47464e+011
+100 79 6.46208e+011
+418 164 6.44522e+011
+459 263 6.43083e+011
+325 164 6.40245e+011
+562 224 6.37081e+011
+145 310 6.37002e+011
+383 162 6.36809e+011
+484 23 6.36392e+011
+465 393 6.34188e+011
+535 242 6.33042e+011
+308 371 6.32813e+011
+124 185 6.31477e+011
+276 182 6.31381e+011
+82 135 6.30648e+011
+379 69 6.30242e+011
+141 183 6.25156e+011
+311 150 6.24325e+011
+244 165 6.22229e+011
+542 209 6.22127e+011
+261 297 6.21112e+011
+221 180 6.17628e+011
+512 98 6.17071e+011
+510 124 6.12843e+011
+127 164 6.12311e+011
+60 184 6.10259e+011
+45 218 6.09983e+011
+545 58 6.07881e+011
+512 342 6.06258e+011
+58 74 6.04885e+011
+76 237 6.04431e+011
+86 255 6.02846e+011
+377 318 6.0115e+011
+252 13 6.00786e+011
+510 173 5.99221e+011
+235 162 5.97608e+011
+359 167 5.97381e+011
+211 438 5.95814e+011
+245 143 5.94071e+011
+545 41 5.86981e+011
+389 140 5.85981e+011
+138 173 5.85212e+011
+433 147 5.82715e+011
+213 56 5.80913e+011
+382 6 5.80636e+011
+131 26 5.8032e+011
+268 53 5.78802e+011
+453 204 5.7795e+011
+366 7 5.77309e+011
+78 80 5.73303e+011
+264 201 5.7232e+011
+136 203 5.67851e+011
+320 313 5.67297e+011
+59 218 5.65857e+011
+390 48 5.64601e+011
+542 59 5.63915e+011
+372 81 5.63486e+011
+29 237 5.63218e+011
+404 121 5.63126e+011
+235 73 5.62391e+011
+509 1 5.61893e+011
+51 98 5.61776e+011
+484 338 5.60231e+011
+41 63 5.60107e+011
+171 18 5.59544e+011
+33 99 5.59238e+011
+71 147 5.57635e+011
+261 222 5.56954e+011
+364 251 5.56052e+011
+174 238 5.55153e+011
+461 279 5.54228e+011
+480 297 5.53492e+011
+529 24 5.53049e+011
+478 181 5.51115e+011
+347 178 5.51071e+011
+230 36 5.50376e+011
+131 1 5.48854e+011
+313 147 5.48811e+011
+113 345 5.48792e+011
+88 148 5.48524e+011
+152 222 5.47607e+011
+477 5 5.47488e+011
+528 102 5.46847e+011
+10 101 5.45253e+011
+442 23 5.44526e+011
+451 339 5.41897e+011
+529 183 5.41557e+011
+242 71 5.41518e+011
+195 125 5.40678e+011
+486 358 5.39897e+011
+524 20 5.39763e+011
+102 360 5.39007e+011
+175 112 5.38988e+011
+62 60 5.37944e+011
+37 63 5.37921e+011
+552 384 5.34183e+011
+314 85 5.30702e+011
+138 110 5.2939e+011
+36 176 5.28314e+011
+364 200 5.25526e+011
+411 163 5.25007e+011
+495 119 5.23546e+011
+31 270 5.21195e+011
+506 164 5.19435e+011
+163 277 5.19202e+011
+233 199 5.17617e+011
+211 185 5.17545e+011
+284 403 5.17435e+011
+480 82 5.16122e+011
+573 141 5.14659e+011
+106 39 5.12445e+011
+221 16 5.10794e+011
+113 3 5.05466e+011
+260 237 5.04727e+011
+166 96 5.03821e+011
+488 264 5.02923e+011
+207 450 5.01335e+011
+363 8 5.00489e+011
+525 199 5.00383e+011
+264 299 4.98624e+011
+354 320 4.98479e+011
+511 220 4.98269e+011
+142 324 4.97098e+011
+164 20 4.97084e+011
+113 392 4.96565e+011
+364 258 4.96077e+011
+209 20 4.95621e+011
+112 213 4.95048e+011
+246 206 4.94647e+011
+266 295 4.94623e+011
+555 181 4.93741e+011
+41 217 4.89657e+011
+332 106 4.89105e+011
+36 299 4.89054e+011
+509 455 4.88517e+011
+527 99 4.88162e+011
+160 111 4.86011e+011
+262 165 4.8502e+011
+569 39 4.83482e+011
+217 208 4.83414e+011
+177 106 4.82489e+011
+68 45 4.82249e+011
+468 124 4.81658e+011
+163 216 4.79722e+011
+156 94 4.79502e+011
+412 45 4.78962e+011
+186 217 4.78434e+011
+159 183 4.76075e+011
+125 260 4.75915e+011
+271 278 4.75202e+011
+293 27 4.74169e+011
+130 217 4.73849e+011
+387 10 4.73282e+011
+48 133 4.71947e+011
+483 359 4.71795e+011
+410 353 4.71542e+011
+524 346 4.70857e+011
+559 18 4.70798e+011
+225 420 4.70254e+011
+395 261 4.70183e+011
+286 165 4.68568e+011
+423 398 4.67931e+011
+318 385 4.67742e+011
+566 61 4.6631e+011
+168 19 4.6314e+011
+502 143 4.60856e+011
+96 446 4.60293e+011
+229 292 4.59932e+011
+221 150 4.58714e+011
+334 90 4.57819e+011
+271 242 4.57473e+011
+317 165 4.56826e+011
+527 360 4.56078e+011
+354 126 4.55995e+011
+418 440 4.54542e+011
+484 179 4.53776e+011
+475 261 4.52588e+011
+410 65 4.52517e+011
+228 185 4.51975e+011
+364 254 4.51941e+011
+283 72 4.50438e+011
+348 338 4.49488e+011
+523 123 4.48736e+011
+560 228 4.48089e+011
+305 193 4.4739e+011
+358 128 4.47207e+011
+571 161 4.46627e+011
+424 261 4.459e+011
+185 20 4.45354e+011
+537 393 4.43363e+011
+548 182 4.43175e+011
+163 96 4.42807e+011
+525 172 4.42556e+011
+272 167 4.42547e+011
+63 133 4.421e+011
+276 352 4.40707e+011
+407 353 4.39351e+011
+479 15 4.38862e+011
+372 117 4.38723e+011
+151 307 4.37482e+011
+508 5 4.37171e+011
+273 71 4.3699e+011
+183 138 4.36352e+011
+346 350 4.34636e+011
+325 141 4.33477e+011
+380 337 4.32763e+011
+368 144 4.31463e+011
+48 151 4.31342e+011
+39 296 4.31107e+011
+412 5 4.30404e+011
+24 62 4.29742e+011
+253 75 4.29542e+011
+78 28 4.29137e+011
+223 220 4.29041e+011
+537 139 4.28777e+011
+373 162 4.28079e+011
+509 83 4.27228e+011
+35 173 4.27116e+011
+96 79 4.26699e+011
+579 17 4.25966e+011
+357 334 4.25671e+011
+109 59 4.25613e+011
+337 9 4.25606e+011
+544 3 4.25295e+011
+44 62 4.25277e+011
+183 401 4.25159e+011
+445 23 4.23896e+011
+277 138 4.23694e+011
+273 131 4.23271e+011
+362 130 4.23183e+011
+317 312 4.23115e+011
+422 335 4.22727e+011
+70 27 4.22453e+011
+417 84 4.22161e+011
+21 61 4.20993e+011
+473 63 4.19953e+011
+510 79 4.19794e+011
+449 402 4.19729e+011
+387 126 4.18887e+011
+306 363 4.18074e+011
+401 276 4.13794e+011
+191 277 4.13719e+011
+287 343 4.13669e+011
+274 53 4.13606e+011
+361 316 4.12406e+011
+362 395 4.10444e+011
+455 264 4.10419e+011
+351 321 4.10181e+011
+226 221 4.10158e+011
+297 420 4.09226e+011
+190 216 4.09095e+011
+381 26 4.0871e+011
+76 8 4.08459e+011
+273 296 4.07808e+011
+520 182 4.07754e+011
+278 144 4.07012e+011
+272 281 4.06908e+011
+343 122 4.05444e+011
+177 261 4.03698e+011
+188 181 4.03405e+011
+192 172 4.01978e+011
+352 145 4.01811e+011
+376 85 4.01603e+011
+282 297 4.01177e+011
+314 164 4.01045e+011
+222 115 4.00172e+011
+437 339 3.99902e+011
+436 182 3.99606e+011
+449 139 3.99499e+011
+386 294 3.99049e+011
+479 18 3.98277e+011
+512 202 3.96444e+011
+62 371 3.9565e+011
+157 73 3.95642e+011
+264 444 3.95032e+011
+102 5 3.94907e+011
+278 392 3.94326e+011
+287 210 3.93408e+011
+326 426 3.92902e+011
+541 41 3.92786e+011
+292 121 3.92366e+011
+534 267 3.91888e+011
+301 102 3.91361e+011
+79 474 3.9035e+011
+578 50 3.88763e+011
+544 7 3.88734e+011
+302 180 3.88253e+011
+79 270 3.88226e+011
+252 423 3.88147e+011
+454 83 3.88029e+011
+511 139 3.87902e+011
+102 235 3.87819e+011
+256 148 3.87571e+011
+456 3 3.86374e+011
+498 65 3.86181e+011
+409 45 3.86003e+011
+267 15 3.85942e+011
+446 7 3.85712e+011
+225 295 3.85627e+011
+425 376 3.84898e+011
+302 215 3.84809e+011
+364 181 3.84549e+011
+461 267 3.83693e+011
+404 338 3.83438e+011
+450 82 3.83399e+011
+167 326 3.83115e+011
+216 145 3.82783e+011
+51 289 3.81911e+011
+173 115 3.80995e+011
+242 57 3.80704e+011
+282 50 3.80231e+011
+511 128 3.79757e+011
+345 275 3.79057e+011
+154 198 3.78856e+011
+463 27 3.7877e+011
+297 275 3.77705e+011
+133 72 3.76278e+011
+146 160 3.76245e+011
+405 376 3.76141e+011
+505 61 3.76111e+011
+108 45 3.75997e+011
+374 240 3.75791e+011
+498 81 3.75435e+011
+575 126 3.75372e+011
+111 42 3.75171e+011
+401 183 3.75163e+011
+531 142 3.75105e+011
+164 208 3.74975e+011
+131 75 3.72936e+011
+324 315 3.72667e+011
+276 217 3.7212e+011
+386 243 3.71952e+011
+57 5 3.71376e+011
+209 154 3.71217e+011
+430 320 3.71141e+011
+387 326 3.70888e+011
+441 240 3.70604e+011
+182 111 3.70345e+011
+429 1 3.70063e+011
+332 295 3.69671e+011
+161 238 3.68908e+011
+258 89 3.68597e+011
+338 473 3.68418e+011
+221 177 3.67974e+011
+260 71 3.67103e+011
+373 68 3.67068e+011
+324 148 3.66951e+011
+235 346 3.66848e+011
+479 262 3.6641e+011
+174 40 3.6554e+011
+330 10 3.65142e+011
+434 397 3.64883e+011
+28 30 3.64622e+011
+382 411 3.64023e+011
+47 147 3.63349e+011
+462 395 3.63086e+011
+230 265 3.6281e+011
+296 297 3.62746e+011
+562 149 3.62666e+011
+340 12 3.6249e+011
+576 179 3.62386e+011
+37 218 3.62206e+011
+344 165 3.62071e+011
+298 69 3.6094e+011
+148 397 3.60778e+011
+395 162 3.60152e+011
+266 30 3.60116e+011
+283 222 3.60108e+011
+518 202 3.59556e+011
+96 449 3.58971e+011
+191 145 3.58913e+011
+135 172 3.58397e+011
+216 279 3.58153e+011
+360 260 3.58109e+011
+542 132 3.58104e+011
+432 111 3.56382e+011
+151 114 3.55893e+011
+31 135 3.55892e+011
+92 292 3.55646e+011
+35 11 3.55297e+011
+255 151 3.54907e+011
+541 123 3.54864e+011
+354 25 3.54514e+011
+228 130 3.52025e+011
+525 196 3.51332e+011
+418 258 3.51319e+011
+357 220 3.5083e+011
+355 268 3.50447e+011
+109 95 3.50303e+011
+474 240 3.50137e+011
+512 94 3.49955e+011
+267 130 3.47728e+011
+547 161 3.47204e+011
+36 268 3.47121e+011
+367 300 3.46665e+011
+24 200 3.46195e+011
+306 440 3.45372e+011
+25 66 3.45302e+011
+539 96 3.45274e+011
+134 237 3.4363e+011
+75 96 3.4225e+011
+249 219 3.42115e+011
+95 148 3.4169e+011
+539 458 3.41672e+011
+84 2 3.40406e+011
+565 160 3.40326e+011
+164 358 3.39214e+011
+528 40 3.39154e+011
+451 375 3.38945e+011
+329 166 3.38899e+011
+1 156 3.38595e+011
+161 126 3.38226e+011
+170 57 3.38042e+011
+376 353 3.37631e+011
+186 108 3.37366e+011
+271 66 3.37333e+011
+327 182 3.37101e+011
+519 60 3.36468e+011
+516 347 3.36213e+011
+189 109 3.36194e+011
+269 61 3.3613e+011
+276 221 3.35889e+011
+55 66 3.35572e+011
+79 195 3.35282e+011
+84 477 3.34665e+011
+249 313 3.34003e+011
+446 352 3.33923e+011
+138 57 3.33635e+011
+72 96 3.33617e+011
+566 41 3.33377e+011
+259 35 3.3309e+011
+181 394 3.32654e+011
+85 181 3.32597e+011
+300 264 3.32345e+011
+582 18 3.31965e+011
+184 344 3.3171e+011
+379 106 3.31671e+011
+239 73 3.30642e+011
+528 194 3.30206e+011
+176 186 3.29911e+011
+22 219 3.29784e+011
+488 3 3.29509e+011
+332 202 3.28767e+011
+177 165 3.28695e+011
+141 22 3.28614e+011
+55 291 3.28542e+011
+191 330 3.2778e+011
+287 52 3.2719e+011
+414 252 3.26931e+011
+492 140 3.26842e+011
+229 198 3.26187e+011
+57 254 3.25774e+011
+557 246 3.25473e+011
+171 201 3.25275e+011
+571 121 3.25e+011
+370 106 3.23951e+011
+197 131 3.23684e+011
+580 80 3.23056e+011
+554 201 3.22866e+011
+250 365 3.22859e+011
+476 341 3.22267e+011
+561 321 3.22245e+011
+138 98 3.22025e+011
+358 241 3.21549e+011
+174 19 3.2125e+011
+233 262 3.20598e+011
+206 158 3.19826e+011
+135 129 3.19752e+011
+116 76 3.19058e+011
+476 22 3.19045e+011
+191 124 3.18809e+011
+298 137 3.1817e+011
+483 176 3.17498e+011
+130 428 3.17161e+011
+407 338 3.1703e+011
+572 39 3.16938e+011
+413 99 3.16881e+011
+264 72 3.16872e+011
+441 98 3.16782e+011
+324 341 3.16561e+011
+434 340 3.16492e+011
+338 391 3.15772e+011
+163 74 3.15268e+011
+314 161 3.15014e+011
+329 202 3.14648e+011
+161 168 3.14577e+011
+307 89 3.14402e+011
+410 24 3.14321e+011
+483 376 3.13981e+011
+489 182 3.13899e+011
+214 124 3.12997e+011
+393 65 3.12983e+011
+516 182 3.12353e+011
+406 81 3.12175e+011
+342 37 3.12058e+011
+372 393 3.11665e+011
+405 199 3.11567e+011
+186 170 3.11509e+011
+47 11 3.11383e+011
+239 349 3.11311e+011
+397 265 3.10905e+011
+36 201 3.10901e+011
+563 18 3.10834e+011
+260 250 3.10831e+011
+273 221 3.10675e+011
+366 106 3.105e+011
+398 356 3.10336e+011
+163 211 3.10306e+011
+58 289 3.10227e+011
+300 106 3.09888e+011
+418 283 3.09851e+011
+161 20 3.09173e+011
+343 463 3.09132e+011
+444 452 3.08719e+011
+533 183 3.08558e+011
+32 29 3.08053e+011
+480 165 3.07455e+011
+489 140 3.07429e+011
+495 456 3.06636e+011
+478 402 3.05848e+011
+58 71 3.05844e+011
+436 304 3.05789e+011
+470 421 3.05359e+011
+481 173 3.05305e+011
+422 323 3.04852e+011
+67 27 3.04785e+011
+377 6 3.04349e+011
+204 203 3.04143e+011
+510 143 3.03881e+011
+451 264 3.03865e+011
+393 354 3.0343e+011
+162 134 3.03313e+011
+562 146 3.02645e+011
+117 392 3.02598e+011
+362 370 3.02518e+011
+533 21 3.02278e+011
+272 181 3.02063e+011
+302 206 3.0167e+011
+502 160 3.01653e+011
+318 202 3.00682e+011
+33 235 3.00494e+011
+390 326 3.00493e+011
+190 205 2.98988e+011
+203 294 2.98683e+011
+341 163 2.98411e+011
+538 121 2.98117e+011
+45 82 2.97882e+011
+278 333 2.97845e+011
+364 354 2.9667e+011
+193 16 2.96243e+011
+395 22 2.96214e+011
+414 21 2.96052e+011
+44 474 2.95905e+011
+341 109 2.958e+011
+525 224 2.95333e+011
+169 116 2.95178e+011
+502 164 2.94292e+011
+460 339 2.93871e+011
+531 62 2.93746e+011
+464 355 2.93075e+011
+352 163 2.92917e+011
+551 182 2.9279e+011
+49 159 2.9242e+011
+119 95 2.92343e+011
+95 6 2.91908e+011
+358 10 2.91501e+011
+5 10 2.91368e+011
+279 129 2.9129e+011
+560 272 2.91251e+011
+282 393 2.91124e+011
+245 293 2.91091e+011
+166 115 2.90638e+011
+269 93 2.90604e+011
+6 65 2.90399e+011
+20 64 2.90387e+011
+575 129 2.89864e+011
+354 106 2.89694e+011
+43 9 2.89451e+011
+344 110 2.89357e+011
+210 451 2.89183e+011
+278 191 2.88778e+011
+95 477 2.88334e+011
+478 451 2.88304e+011
+534 160 2.88175e+011
+473 203 2.87646e+011
+42 24 2.87192e+011
+226 72 2.86841e+011
+187 341 2.86596e+011
+284 241 2.86451e+011
+572 332 2.86435e+011
+304 157 2.86134e+011
+140 394 2.85968e+011
+178 19 2.857e+011
+66 213 2.84963e+011
+152 448 2.84598e+011
+387 167 2.84549e+011
+185 201 2.8406e+011
+248 316 2.83647e+011
+390 297 2.83226e+011
+262 392 2.82993e+011
+110 264 2.82291e+011
+89 255 2.82135e+011
+414 259 2.82059e+011
+314 222 2.82015e+011
+297 331 2.81968e+011
+181 202 2.81874e+011
+309 32 2.81811e+011
+549 223 2.8175e+011
+363 407 2.81256e+011
+119 4 2.81131e+011
+59 77 2.81082e+011
+292 30 2.80626e+011
+516 18 2.8038e+011
+109 325 2.8027e+011
+123 272 2.8025e+011
+260 329 2.80178e+011
+249 192 2.80037e+011
+35 134 2.79822e+011
+287 396 2.79457e+011
+123 162 2.79015e+011
+151 152 2.7899e+011
+467 41 2.78748e+011
+49 255 2.78421e+011
+502 362 2.7826e+011
+38 168 2.77937e+011
+541 164 2.77564e+011
+129 167 2.77492e+011
+126 219 2.77187e+011
+285 262 2.76638e+011
+151 111 2.76474e+011
+383 146 2.75822e+011
+62 253 2.75503e+011
+489 43 2.74839e+011
+225 51 2.74466e+011
+510 362 2.74427e+011
+119 60 2.74196e+011
+220 290 2.73912e+011
+142 2 2.73672e+011
+127 77 2.73568e+011
+500 264 2.73557e+011
+258 161 2.73389e+011
+30 219 2.73345e+011
+387 283 2.73273e+011
+216 106 2.73221e+011
+498 224 2.72626e+011
+386 321 2.72546e+011
+159 91 2.72438e+011
+191 140 2.72265e+011
+66 252 2.72001e+011
+468 141 2.71639e+011
+162 148 2.71518e+011
+80 40 2.71246e+011
+209 420 2.71116e+011
+390 161 2.71016e+011
+278 297 2.70534e+011
+293 312 2.70228e+011
+513 43 2.70098e+011
+440 181 2.69946e+011
+184 341 2.69798e+011
+432 123 2.695e+011
+186 101 2.69404e+011
+246 216 2.69236e+011
+168 197 2.69092e+011
+264 250 2.68974e+011
+344 263 2.68849e+011
+131 132 2.68482e+011
+403 187 2.6847e+011
+230 149 2.68251e+011
+531 161 2.68103e+011
+219 126 2.67757e+011
+262 402 2.67727e+011
+358 161 2.67623e+011
+537 80 2.67598e+011
+193 218 2.67047e+011
+560 61 2.66482e+011
+408 182 2.66335e+011
+326 295 2.66093e+011
+559 80 2.66022e+011
+462 101 2.65546e+011
+482 366 2.65271e+011
+138 146 2.65135e+011
+165 286 2.65077e+011
+161 254 2.64847e+011
+257 249 2.64821e+011
+452 102 2.64575e+011
+148 21 2.64436e+011
+388 97 2.63771e+011
+217 55 2.63402e+011
+196 76 2.62877e+011
+236 220 2.62814e+011
+289 183 2.62688e+011
+251 153 2.62649e+011
+290 348 2.62579e+011
+100 198 2.62229e+011
+90 289 2.62104e+011
+38 239 2.62028e+011
+90 376 2.6198e+011
+526 423 2.61212e+011
+39 309 2.61037e+011
+453 44 2.5953e+011
+474 245 2.59383e+011
+183 184 2.59346e+011
+549 58 2.58531e+011
+179 273 2.58449e+011
+14 203 2.58356e+011
+393 216 2.58176e+011
+374 300 2.58095e+011
+109 147 2.57562e+011
+144 16 2.57252e+011
+149 2 2.57223e+011
+162 123 2.57136e+011
+204 164 2.57042e+011
+304 53 2.57031e+011
+595 18 2.56966e+011
+107 99 2.56922e+011
+162 205 2.56735e+011
+430 89 2.56725e+011
+178 122 2.56618e+011
+94 94 2.56547e+011
+517 43 2.56012e+011
+330 257 2.55752e+011
+200 166 2.5567e+011
+578 43 2.55635e+011
+461 123 2.55633e+011
+96 256 2.55549e+011
+166 149 2.55072e+011
+424 4 2.54981e+011
+279 187 2.54918e+011
+53 221 2.54884e+011
+427 182 2.54678e+011
+294 334 2.54622e+011
+529 365 2.54476e+011
+509 301 2.54253e+011
+321 29 2.5411e+011
+72 45 2.53799e+011
+571 450 2.53796e+011
+402 167 2.53534e+011
+306 106 2.53446e+011
+368 337 2.53443e+011
+460 162 2.53176e+011
+380 121 2.52904e+011
+129 238 2.52726e+011
+551 378 2.52497e+011
+316 238 2.52319e+011
+222 239 2.52238e+011
+162 202 2.52126e+011
+413 298 2.5196e+011
+445 128 2.51372e+011
+368 1 2.51358e+011
+241 166 2.51158e+011
+13 81 2.51109e+011
+513 143 2.5104e+011
+219 107 2.5087e+011
+280 385 2.50771e+011
+538 241 2.50734e+011
+57 146 2.50719e+011
+424 62 2.50623e+011
+539 405 2.50571e+011
+508 179 2.50512e+011
+54 302 2.50192e+011
+56 78 2.50185e+011
+439 124 2.49623e+011
+448 24 2.49322e+011
+293 147 2.49189e+011
+507 203 2.48755e+011
+59 40 2.48686e+011
+44 151 2.48582e+011
+191 360 2.48576e+011
+225 129 2.48436e+011
+181 135 2.48288e+011
+118 110 2.48228e+011
+406 163 2.48199e+011
+265 140 2.48161e+011
+309 7 2.47929e+011
+452 162 2.47878e+011
+44 97 2.47824e+011
+93 255 2.47669e+011
+220 100 2.47573e+011
+380 181 2.46957e+011
+346 298 2.46956e+011
+542 100 2.46769e+011
+525 183 2.46391e+011
+389 243 2.46359e+011
+163 313 2.46314e+011
+449 445 2.46284e+011
+270 104 2.46255e+011
+537 40 2.45972e+011
+223 153 2.45931e+011
+307 448 2.45489e+011
+270 70 2.45469e+011
+281 35 2.45075e+011
+162 165 2.44965e+011
+131 148 2.44908e+011
+504 263 2.44889e+011
+460 357 2.44539e+011
+53 42 2.4449e+011
+148 112 2.4439e+011
+99 360 2.44211e+011
+411 471 2.44074e+011
+520 345 2.44002e+011
+165 108 2.43993e+011
+160 95 2.43926e+011
+111 168 2.43172e+011
+259 274 2.43136e+011
+60 203 2.43008e+011
+371 90 2.42936e+011
+32 66 2.42381e+011
+125 95 2.42327e+011
+109 183 2.4227e+011
+388 15 2.42215e+011
+514 120 2.4159e+011
+132 128 2.4148e+011
+332 241 2.41024e+011
+349 87 2.41e+011
+422 315 2.40875e+011
+120 51 2.40836e+011
+446 377 2.40747e+011
+65 275 2.40583e+011
+288 263 2.40529e+011
+281 207 2.40512e+011
+50 62 2.40508e+011
+528 161 2.40403e+011
+18 343 2.404e+011
+69 130 2.40278e+011
+485 162 2.40103e+011
+330 89 2.40025e+011
+373 75 2.39694e+011
+410 260 2.39629e+011
+130 254 2.38727e+011
+57 364 2.38655e+011
+39 355 2.38326e+011
+538 186 2.38017e+011
+210 136 2.37907e+011
+96 197 2.36812e+011
+289 88 2.36725e+011
+454 47 2.36528e+011
+129 113 2.36442e+011
+470 418 2.36434e+011
+408 430 2.36419e+011
+298 398 2.36136e+011
+513 262 2.35943e+011
+537 261 2.35424e+011
+68 337 2.35267e+011
+180 165 2.35095e+011
+573 405 2.34751e+011
+529 31 2.34437e+011
+346 240 2.34292e+011
+260 141 2.34226e+011
+526 382 2.33992e+011
+106 77 2.33847e+011
+26 132 2.3352e+011
+410 82 2.33454e+011
+150 231 2.33248e+011
+349 324 2.33033e+011
+243 189 2.32997e+011
+478 241 2.32643e+011
+337 426 2.32253e+011
+392 19 2.3063e+011
+490 59 2.30485e+011
+104 224 2.30327e+011
+329 65 2.30267e+011
+118 425 2.30223e+011
+95 422 2.30067e+011
+399 104 2.29991e+011
+3 382 2.29858e+011
+186 309 2.2978e+011
+430 182 2.2943e+011
+116 129 2.29397e+011
+249 34 2.28888e+011
+416 46 2.28358e+011
+446 123 2.28203e+011
+493 181 2.28186e+011
+266 145 2.2816e+011
+33 111 2.2794e+011
+286 34 2.27304e+011
+199 293 2.26654e+011
+352 10 2.26591e+011
+389 420 2.26565e+011
+435 89 2.26128e+011
+542 253 2.25893e+011
+333 369 2.2584e+011
+331 142 2.25586e+011
+247 326 2.25505e+011
+120 128 2.2524e+011
+484 86 2.25183e+011
+87 369 2.24826e+011
+281 53 2.24523e+011
+360 218 2.24481e+011
+599 364 2.2435e+011
+95 59 2.24264e+011
+357 282 2.24136e+011
+297 14 2.24057e+011
+136 139 2.24032e+011
+72 409 2.24019e+011
+501 42 2.23977e+011
+73 186 2.23523e+011
+245 385 2.23427e+011
+154 113 2.23272e+011
+53 359 2.23239e+011
+557 303 2.23139e+011
+546 17 2.23057e+011
+146 79 2.22998e+011
+322 119 2.22889e+011
+30 256 2.22659e+011
+461 43 2.22632e+011
+233 16 2.22307e+011
+437 149 2.22194e+011
+176 57 2.2181e+011
+469 201 2.21528e+011
+443 320 2.21492e+011
+343 198 2.21412e+011
+521 202 2.21e+011
+366 85 2.20589e+011
+535 93 2.20256e+011
+270 144 2.20032e+011
+506 381 2.19241e+011
+346 46 2.19184e+011
+421 81 2.19125e+011
+514 363 2.19014e+011
+434 225 2.18303e+011
+334 28 2.18215e+011
+321 104 2.17987e+011
+395 105 2.17956e+011
+323 224 2.17708e+011
+247 347 2.17703e+011
+471 83 2.17569e+011
+174 201 2.17547e+011
+467 25 2.17449e+011
+63 218 2.17421e+011
+522 62 2.17302e+011
+358 143 2.17133e+011
+355 12 2.17003e+011
+92 59 2.16534e+011
+299 190 2.16469e+011
+239 94 2.16198e+011
+194 110 2.16192e+011
+354 16 2.15761e+011
+376 182 2.15749e+011
+87 340 2.15699e+011
+113 176 2.15354e+011
+227 259 2.15116e+011
+107 428 2.15042e+011
+521 79 2.14601e+011
+526 120 2.14231e+011
+328 320 2.14176e+011
+191 312 2.1417e+011
+85 214 2.14105e+011
+407 142 2.13886e+011
+120 446 2.13849e+011
+584 38 2.13757e+011
+382 3 2.13359e+011
+265 260 2.13308e+011
+119 54 2.13301e+011
+290 166 2.12996e+011
+92 20 2.12982e+011
+107 108 2.1251e+011
+544 91 2.12175e+011
+484 155 2.12171e+011
+104 221 2.12132e+011
+280 136 2.12077e+011
+385 258 2.11997e+011
+540 206 2.11994e+011
+171 165 2.11726e+011
+538 268 2.11063e+011
+483 328 2.11044e+011
+570 182 2.10951e+011
+249 422 2.10896e+011
+363 332 2.10839e+011
+332 415 2.10838e+011
+448 63 2.10657e+011
+147 89 2.10471e+011
+145 326 2.10337e+011
+26 221 2.10291e+011
+438 241 2.10264e+011
+494 163 2.10096e+011
+85 60 2.0994e+011
+242 420 2.09839e+011
+215 174 2.09712e+011
+253 194 2.0963e+011
+454 359 2.09436e+011
+171 448 2.09415e+011
+137 21 2.0927e+011
+191 55 2.09055e+011
+157 308 2.08915e+011
+152 1 2.08875e+011
+420 143 2.08698e+011
+87 372 2.08628e+011
+203 128 2.08338e+011
+58 102 2.08325e+011
+384 87 2.08297e+011
+498 227 2.08158e+011
+176 272 2.08138e+011
+78 60 2.08071e+011
+162 107 2.08056e+011
+333 356 2.07972e+011
+281 419 2.07928e+011
+288 123 2.07817e+011
+532 121 2.07381e+011
+390 165 2.06783e+011
+389 133 2.06633e+011
+479 405 2.06555e+011
+211 163 2.06517e+011
+308 354 2.05998e+011
+219 36 2.05194e+011
+154 56 2.0486e+011
+497 283 2.04572e+011
+431 115 2.04222e+011
+253 10 2.03849e+011
+421 140 2.03819e+011
+373 120 2.03618e+011
+184 142 2.03467e+011
+11 218 2.03338e+011
+359 52 2.03195e+011
+126 330 2.03038e+011
+138 1 2.02982e+011
+432 303 2.02924e+011
+272 353 2.02697e+011
+176 76 2.02688e+011
+391 221 2.02483e+011
+236 150 2.0242e+011
+297 182 2.02239e+011
+49 235 2.02108e+011
+482 46 2.02056e+011
+538 182 2.01766e+011
+274 205 2.0173e+011
+198 111 2.0166e+011
+510 135 2.01577e+011
+522 425 2.01457e+011
+569 382 2.01339e+011
+203 346 2.01311e+011
+182 380 2.00994e+011
+260 106 2.00839e+011
+217 97 2.00537e+011
+223 124 2.00389e+011
+199 29 2.00305e+011
+366 95 2.00299e+011
+249 387 2.00226e+011
+246 400 2.00193e+011
+498 341 2.00121e+011
+498 59 2.00026e+011
+163 114 2e+011
+129 128 1.99882e+011
+63 8 1.99841e+011
+110 358 1.9982e+011
+501 102 1.99605e+011
+282 371 1.99585e+011
+513 181 1.99572e+011
+167 315 1.99395e+011
+149 129 1.99154e+011
+188 264 1.9904e+011
+135 144 1.99034e+011
+436 387 1.98856e+011
+390 66 1.98846e+011
+198 194 1.98684e+011
+448 285 1.98677e+011
+229 91 1.98619e+011
+246 181 1.9855e+011
+212 32 1.98544e+011
+483 288 1.98323e+011
+370 87 1.98228e+011
+252 183 1.97812e+011
+58 372 1.97713e+011
+243 218 1.97617e+011
+449 167 1.97114e+011
+494 59 1.96988e+011
+184 118 1.96906e+011
+436 320 1.96706e+011
+49 166 1.96674e+011
+129 309 1.96535e+011
+362 101 1.96335e+011
+377 121 1.96179e+011
+514 381 1.95941e+011
+588 161 1.95716e+011
+194 312 1.95595e+011
+247 106 1.9538e+011
+104 198 1.95263e+011
+229 346 1.95219e+011
+194 135 1.95107e+011
+281 193 1.9508e+011
+561 324 1.95042e+011
+280 439 1.94933e+011
+149 163 1.94933e+011
+274 209 1.94434e+011
+301 244 1.94295e+011
+280 132 1.94258e+011
+562 143 1.94231e+011
+250 91 1.94211e+011
+444 119 1.94108e+011
+303 108 1.93842e+011
+216 148 1.93712e+011
+438 161 1.93692e+011
+264 310 1.93598e+011
+519 164 1.93526e+011
+115 218 1.93425e+011
+125 114 1.93347e+011
+92 79 1.93063e+011
+388 334 1.92726e+011
+408 15 1.9271e+011
+411 415 1.92703e+011
+208 202 1.92488e+011
+246 404 1.92382e+011
+446 243 1.92111e+011
+471 212 1.92106e+011
+287 111 1.92002e+011
+499 459 1.91937e+011
+515 202 1.91928e+011
+424 103 1.91853e+011
+240 194 1.9174e+011
+401 319 1.91682e+011
+391 322 1.91483e+011
+354 424 1.91422e+011
+330 103 1.91192e+011
+69 304 1.91135e+011
+498 70 1.9107e+011
+16 216 1.90739e+011
+480 176 1.90688e+011
+174 106 1.90621e+011
+196 342 1.90558e+011
+464 23 1.90318e+011
+251 222 1.90238e+011
+433 381 1.90089e+011
+325 13 1.90087e+011
+59 109 1.89793e+011
+240 134 1.89594e+011
+573 422 1.89531e+011
+274 146 1.89507e+011
+436 280 1.8923e+011
+380 87 1.89179e+011
+110 341 1.8916e+011
+91 276 1.89032e+011
+88 230 1.89009e+011
+141 391 1.88973e+011
+95 124 1.88869e+011
+478 205 1.88683e+011
+57 331 1.88511e+011
+93 445 1.88439e+011
+433 85 1.88384e+011
+433 239 1.88321e+011
+382 46 1.88199e+011
+494 63 1.88041e+011
+88 182 1.87913e+011
+213 149 1.87437e+011
+133 93 1.87215e+011
+244 212 1.86916e+011
+538 102 1.86894e+011
+336 241 1.86704e+011
+449 324 1.86672e+011
+43 122 1.86576e+011
+263 239 1.86192e+011
+10 475 1.86142e+011
+188 136 1.85994e+011
+9 44 1.85767e+011
+294 138 1.85391e+011
+260 229 1.85366e+011
+151 400 1.85188e+011
+485 140 1.8515e+011
+251 163 1.85125e+011
+86 310 1.84936e+011
+543 457 1.84919e+011
+200 327 1.84798e+011
+122 188 1.84672e+011
+367 30 1.84527e+011
+237 131 1.84231e+011
+302 189 1.84166e+011
+106 431 1.84143e+011
+510 347 1.841e+011
+70 476 1.83978e+011
+13 433 1.83941e+011
+195 164 1.83816e+011
+278 110 1.83566e+011
+435 162 1.83488e+011
+152 130 1.83319e+011
+417 80 1.83256e+011
+283 135 1.83175e+011
+540 219 1.82818e+011
+99 256 1.82611e+011
+188 304 1.82563e+011
+451 86 1.82533e+011
+218 351 1.822e+011
+310 298 1.82159e+011
+201 393 1.8215e+011
+274 75 1.81961e+011
+396 46 1.81836e+011
+252 249 1.81604e+011
+413 84 1.81532e+011
+75 59 1.81507e+011
+401 144 1.81385e+011
+101 165 1.81314e+011
+349 240 1.81294e+011
+46 90 1.81268e+011
+3 165 1.81184e+011
+236 197 1.80896e+011
+375 125 1.80873e+011
+354 296 1.80578e+011
+205 416 1.80457e+011
+302 210 1.80329e+011
+448 119 1.8017e+011
+122 123 1.80169e+011
+548 245 1.80088e+011
+418 414 1.80084e+011
+510 114 1.8007e+011
+394 183 1.79825e+011
+360 182 1.79697e+011
+486 44 1.79629e+011
+261 383 1.79612e+011
+238 422 1.79612e+011
+136 323 1.79591e+011
+442 64 1.79325e+011
+402 219 1.79221e+011
+64 27 1.79215e+011
+449 178 1.79035e+011
+341 314 1.78246e+011
+528 397 1.78149e+011
+108 28 1.781e+011
+585 18 1.78028e+011
+179 57 1.77912e+011
+12 113 1.77893e+011
+170 112 1.77853e+011
+350 128 1.77811e+011
+53 450 1.77773e+011
+133 428 1.7772e+011
+463 40 1.77633e+011
+401 200 1.77624e+011
+572 59 1.77532e+011
+82 197 1.77503e+011
+525 189 1.77065e+011
+44 407 1.77059e+011
+322 425 1.77043e+011
+4 235 1.76883e+011
+56 171 1.76758e+011
+338 92 1.76751e+011
+367 303 1.76709e+011
+558 462 1.76458e+011
+246 257 1.76382e+011
+99 58 1.76109e+011
+187 325 1.76072e+011
+255 405 1.75988e+011
+446 144 1.75433e+011
+229 16 1.75424e+011
+339 221 1.75325e+011
+166 152 1.75217e+011
+162 31 1.75114e+011
+96 453 1.75098e+011
+533 340 1.74934e+011
+126 128 1.74816e+011
+359 448 1.74675e+011
+246 419 1.74099e+011
+174 121 1.73946e+011
+430 45 1.73945e+011
+326 179 1.73684e+011
+165 379 1.7368e+011
+134 411 1.73646e+011
+446 246 1.73544e+011
+18 236 1.73351e+011
+163 37 1.73336e+011
+485 235 1.73183e+011
+114 357 1.72858e+011
+534 40 1.72592e+011
+569 421 1.72533e+011
+328 26 1.72327e+011
+84 236 1.72273e+011
+375 224 1.72205e+011
+565 463 1.72173e+011
+569 203 1.72115e+011
+434 63 1.72113e+011
+362 64 1.72036e+011
+123 83 1.72035e+011
+390 203 1.71685e+011
+513 117 1.7153e+011
+178 40 1.71305e+011
+261 368 1.71183e+011
+417 23 1.71081e+011
+455 201 1.70945e+011
+548 283 1.70489e+011
+302 405 1.70485e+011
+185 312 1.70483e+011
+242 384 1.70463e+011
+310 335 1.70256e+011
+481 440 1.70208e+011
+311 260 1.70118e+011
+347 370 1.7011e+011
+11 72 1.69908e+011
+434 277 1.69866e+011
+45 355 1.69854e+011
+277 134 1.698e+011
+102 39 1.6978e+011
+562 71 1.6973e+011
+361 214 1.69652e+011
+119 223 1.6962e+011
+157 170 1.69465e+011
+162 138 1.69453e+011
+75 128 1.69317e+011
+278 165 1.69304e+011
+302 142 1.69276e+011
+151 57 1.69266e+011
+168 130 1.69138e+011
+126 111 1.69022e+011
+491 341 1.6901e+011
+249 403 1.6895e+011
+113 205 1.68873e+011
+487 204 1.6886e+011
+5 151 1.68706e+011
+334 281 1.68524e+011
+330 212 1.68483e+011
+197 134 1.68299e+011
+161 257 1.68288e+011
+335 49 1.68028e+011
+327 10 1.67713e+011
+515 164 1.67435e+011
+454 118 1.67395e+011
+343 296 1.67219e+011
+137 178 1.67168e+011
+589 309 1.66993e+011
+470 23 1.6677e+011
+141 116 1.66763e+011
+234 32 1.66667e+011
+182 310 1.66521e+011
+546 438 1.66323e+011
+438 455 1.66253e+011
+231 159 1.66207e+011
+482 122 1.66199e+011
+576 165 1.65647e+011
+529 135 1.65629e+011
+65 362 1.65597e+011
+293 89 1.65475e+011
+190 349 1.65007e+011
+262 396 1.6487e+011
+162 131 1.64601e+011
+583 141 1.64587e+011
+372 146 1.64453e+011
+362 449 1.64257e+011
+434 45 1.64151e+011
+252 148 1.64038e+011
+451 417 1.64009e+011
+118 116 1.63729e+011
+157 163 1.63683e+011
+163 349 1.63567e+011
+64 153 1.63369e+011
+86 364 1.63043e+011
+153 217 1.63009e+011
+144 6 1.6291e+011
+302 132 1.62825e+011
+156 317 1.62565e+011
+591 104 1.62526e+011
+143 237 1.62479e+011
+540 262 1.62394e+011
+245 172 1.62362e+011
+351 364 1.62322e+011
+471 138 1.62258e+011
+214 162 1.62253e+011
+92 148 1.62032e+011
+109 180 1.62012e+011
+123 219 1.61913e+011
+574 56 1.61816e+011
+16 434 1.61738e+011
+496 475 1.61674e+011
+136 94 1.61587e+011
+104 162 1.61552e+011
+240 365 1.61526e+011
+294 269 1.61381e+011
+265 286 1.61299e+011
+319 186 1.6128e+011
+214 425 1.61216e+011
+223 87 1.61119e+011
+320 95 1.61089e+011
+432 269 1.60823e+011
+237 365 1.60811e+011
+131 393 1.60632e+011
+38 287 1.60623e+011
+406 77 1.60511e+011
+42 339 1.60337e+011
+605 121 1.60162e+011
+124 269 1.60161e+011
+556 265 1.60139e+011
+50 376 1.60082e+011
+154 298 1.60022e+011
+579 214 1.59862e+011
+39 83 1.59831e+011
+414 144 1.5952e+011
+388 291 1.59501e+011
+255 80 1.59295e+011
+139 316 1.59229e+011
+372 143 1.58913e+011
+374 151 1.58884e+011
+102 295 1.58866e+011
+76 111 1.58861e+011
+561 245 1.58769e+011
+254 108 1.58743e+011
+434 26 1.5868e+011
+69 419 1.58592e+011
+428 64 1.58588e+011
+103 27 1.58495e+011
+395 241 1.58149e+011
+87 376 1.57598e+011
+81 236 1.57344e+011
+484 222 1.57165e+011
+386 91 1.56991e+011
+419 363 1.56923e+011
+562 152 1.56686e+011
+250 259 1.56568e+011
+394 336 1.56513e+011
+275 109 1.56436e+011
+417 471 1.56403e+011
+126 307 1.56364e+011
+204 398 1.56335e+011
+151 76 1.5614e+011
+350 298 1.55717e+011
+386 450 1.55498e+011
+542 142 1.55465e+011
+512 297 1.5543e+011
+466 101 1.55354e+011
+311 89 1.55286e+011
+513 350 1.54988e+011
+391 125 1.54891e+011
+173 417 1.54878e+011
+73 164 1.54799e+011
+87 355 1.5477e+011
+450 197 1.54735e+011
+323 134 1.54734e+011
+362 361 1.54698e+011
+183 316 1.54559e+011
+501 22 1.54553e+011
+462 140 1.54373e+011
+332 392 1.54326e+011
+107 259 1.54015e+011
+334 436 1.53971e+011
+191 254 1.53696e+011
+566 143 1.53603e+011
+10 75 1.53518e+011
+397 142 1.53465e+011
+618 181 1.53329e+011
+121 114 1.53276e+011
+85 110 1.5321e+011
+218 315 1.53111e+011
+231 126 1.52941e+011
+412 263 1.52915e+011
+177 330 1.52571e+011
+256 105 1.52414e+011
+104 182 1.52331e+011
+497 462 1.52153e+011
+90 113 1.52095e+011
+404 104 1.52038e+011
+227 122 1.51922e+011
+450 441 1.51509e+011
+465 115 1.5132e+011
+307 196 1.51299e+011
+302 87 1.51262e+011
+450 437 1.51189e+011
+370 464 1.51126e+011
+479 293 1.51078e+011
+544 247 1.509e+011
+430 86 1.50866e+011
+207 309 1.50851e+011
+167 358 1.50808e+011
+131 476 1.50719e+011
+391 335 1.5061e+011
+39 78 1.50544e+011
+502 420 1.50475e+011
+424 202 1.50358e+011
+437 43 1.50349e+011
+88 252 1.5033e+011
+412 28 1.50224e+011
+391 449 1.50215e+011
+501 59 1.50185e+011
+83 146 1.50161e+011
+514 60 1.5011e+011
+234 295 1.50075e+011
+402 163 1.5001e+011
+221 431 1.50008e+011
+274 143 1.49981e+011
+121 148 1.49972e+011
+261 456 1.49603e+011
+177 201 1.49526e+011
+399 272 1.49503e+011
+532 241 1.49475e+011
+408 107 1.49383e+011
+429 223 1.49139e+011
+49 452 1.49094e+011
+191 327 1.48953e+011
+203 256 1.4891e+011
+58 106 1.48883e+011
+419 97 1.48619e+011
+52 12 1.4835e+011
+507 41 1.48295e+011
+448 340 1.48294e+011
+513 324 1.48113e+011
+296 146 1.48085e+011
+375 144 1.48023e+011
+82 100 1.47999e+011
+161 326 1.47787e+011
+197 148 1.47718e+011
+335 143 1.47706e+011
+524 162 1.47521e+011
+72 373 1.47368e+011
+302 444 1.47367e+011
+197 91 1.47349e+011
+113 307 1.47075e+011
+159 152 1.4701e+011
+546 140 1.46937e+011
+275 316 1.46726e+011
+541 380 1.46551e+011
+276 426 1.46475e+011
+523 141 1.46414e+011
+533 346 1.46389e+011
+221 215 1.46226e+011
+244 196 1.46122e+011
+143 143 1.46052e+011
+147 125 1.45911e+011
+272 109 1.45557e+011
+148 137 1.45532e+011
+148 193 1.455e+011
+281 165 1.45443e+011
+95 285 1.45157e+011
+36 470 1.45077e+011
+494 472 1.45013e+011
+538 62 1.45003e+011
+434 159 1.4499e+011
+481 126 1.44855e+011
+188 300 1.44734e+011
+538 162 1.44709e+011
+309 266 1.44663e+011
+392 241 1.4463e+011
+456 375 1.44536e+011
+132 376 1.44487e+011
+435 92 1.44066e+011
+328 14 1.44057e+011
+76 376 1.43911e+011
+462 222 1.43878e+011
+412 183 1.43752e+011
+331 334 1.43567e+011
+511 209 1.43345e+011
+348 392 1.43234e+011
+20 317 1.43206e+011
+192 365 1.43206e+011
+344 342 1.43125e+011
+478 221 1.42706e+011
+330 412 1.42582e+011
+416 298 1.42575e+011
+206 20 1.41974e+011
+284 199 1.41916e+011
+316 100 1.41895e+011
+161 61 1.41835e+011
+188 256 1.4182e+011
+197 311 1.41617e+011
+530 190 1.41573e+011
+334 127 1.4156e+011
+565 44 1.41534e+011
+473 356 1.41353e+011
+532 173 1.41336e+011
+451 125 1.41246e+011
+99 151 1.40962e+011
+266 19 1.40934e+011
+501 357 1.40878e+011
+460 165 1.40874e+011
+299 254 1.40852e+011
+431 82 1.40835e+011
+498 139 1.40765e+011
+245 102 1.4055e+011
+149 201 1.40491e+011
+88 286 1.40455e+011
+438 397 1.40451e+011
+135 135 1.4037e+011
+211 93 1.40314e+011
+88 208 1.40089e+011
+158 101 1.39828e+011
+385 337 1.39749e+011
+40 183 1.39654e+011
+444 204 1.39527e+011
+166 309 1.3923e+011
+27 117 1.39166e+011
+44 251 1.38993e+011
+510 59 1.38962e+011
+285 158 1.38871e+011
+314 448 1.38812e+011
+413 245 1.38776e+011
+576 91 1.38689e+011
+13 237 1.38682e+011
+95 290 1.3865e+011
+291 50 1.38558e+011
+185 304 1.38468e+011
+124 148 1.38185e+011
+106 359 1.3815e+011
+297 410 1.38027e+011
+116 289 1.37955e+011
+242 281 1.37782e+011
+49 458 1.37584e+011
+440 468 1.37564e+011
+222 107 1.37502e+011
+303 293 1.37164e+011
+539 128 1.37159e+011
+446 165 1.37116e+011
+532 396 1.37045e+011
+199 126 1.36812e+011
+231 177 1.3679e+011
+399 28 1.36771e+011
+411 144 1.36761e+011
+576 311 1.36746e+011
+63 440 1.36669e+011
+232 273 1.3664e+011
+227 262 1.36442e+011
+191 187 1.36428e+011
+123 412 1.36134e+011
+156 78 1.36094e+011
+128 375 1.36035e+011
+162 431 1.3603e+011
+505 199 1.35884e+011
+270 414 1.35836e+011
+403 7 1.35778e+011
+27 45 1.35738e+011
+91 320 1.35647e+011
+469 207 1.35626e+011
+8 234 1.35551e+011
+421 298 1.35486e+011
+545 263 1.35254e+011
+425 25 1.35237e+011
+317 460 1.35046e+011
+147 451 1.34909e+011
+487 119 1.34776e+011
+323 370 1.34763e+011
+346 201 1.34755e+011
+262 33 1.34729e+011
+56 234 1.34653e+011
+323 137 1.34604e+011
+348 277 1.34372e+011
+51 336 1.34337e+011
+267 417 1.34296e+011
+447 133 1.3429e+011
+531 41 1.34181e+011
+399 92 1.34176e+011
+208 143 1.34159e+011
+465 161 1.34152e+011
+214 450 1.34067e+011
+362 241 1.34065e+011
+378 452 1.34063e+011
+65 307 1.34008e+011
+201 143 1.33993e+011
+258 158 1.33959e+011
+99 425 1.33952e+011
+321 11 1.33927e+011
+556 80 1.33429e+011
+486 242 1.33376e+011
+385 64 1.33342e+011
+579 202 1.33181e+011
+421 291 1.32775e+011
+220 84 1.32753e+011
+122 342 1.32699e+011
+161 120 1.32481e+011
+570 269 1.32287e+011
+466 144 1.32286e+011
+243 182 1.32231e+011
+195 83 1.32084e+011
+577 135 1.31968e+011
+345 140 1.31875e+011
+23 130 1.31817e+011
+491 24 1.31786e+011
+352 270 1.31715e+011
+216 165 1.31682e+011
+400 132 1.31575e+011
+59 171 1.31559e+011
+482 332 1.31556e+011
+160 310 1.31402e+011
+159 148 1.31382e+011
+416 301 1.31329e+011
+200 89 1.31314e+011
+366 67 1.31283e+011
+368 162 1.31262e+011
+570 325 1.31183e+011
+458 140 1.30908e+011
+155 201 1.3089e+011
+169 123 1.30884e+011
+81 218 1.30687e+011
+176 343 1.30562e+011
+208 315 1.3043e+011
+255 191 1.30404e+011
+214 93 1.3036e+011
+288 160 1.30341e+011
+430 339 1.30299e+011
+213 131 1.30187e+011
+375 281 1.30173e+011
+280 87 1.30107e+011
+246 15 1.30073e+011
+66 57 1.29978e+011
+55 142 1.29946e+011
+145 343 1.29858e+011
+263 145 1.29812e+011
+275 196 1.29668e+011
+84 63 1.29597e+011
+560 265 1.29422e+011
+484 81 1.29316e+011
+126 412 1.29286e+011
+266 191 1.29239e+011
+411 220 1.29211e+011
+514 401 1.29132e+011
+29 259 1.29061e+011
+499 474 1.29006e+011
+399 412 1.2879e+011
+354 326 1.28654e+011
+579 57 1.2862e+011
+182 95 1.28552e+011
+147 222 1.2849e+011
+359 28 1.28403e+011
+116 429 1.28179e+011
+63 423 1.28057e+011
+80 406 1.27901e+011
+530 176 1.27885e+011
+291 11 1.27866e+011
+468 262 1.27848e+011
+54 61 1.27847e+011
+75 147 1.2779e+011
+335 219 1.27669e+011
+488 84 1.27606e+011
+454 121 1.27605e+011
+62 229 1.27454e+011
+302 408 1.2729e+011
+262 109 1.272e+011
+542 62 1.27145e+011
+387 21 1.26991e+011
+504 179 1.26949e+011
+26 271 1.26875e+011
+166 127 1.26645e+011
+139 311 1.26513e+011
+338 63 1.26473e+011
+216 403 1.26424e+011
+197 466 1.26392e+011
+401 43 1.26377e+011
+370 139 1.26371e+011
+266 75 1.26197e+011
+541 80 1.26176e+011
+194 326 1.2607e+011
+168 291 1.25994e+011
+553 18 1.25865e+011
+257 201 1.25802e+011
+585 345 1.25768e+011
+165 219 1.25715e+011
+312 131 1.25714e+011
+523 362 1.25693e+011
+347 120 1.25604e+011
+490 469 1.25602e+011
+78 218 1.25526e+011
+429 162 1.25432e+011
+196 197 1.25289e+011
+201 7 1.25139e+011
+225 147 1.25109e+011
+183 56 1.2503e+011
+149 39 1.24937e+011
+169 179 1.2492e+011
+330 217 1.24731e+011
+512 287 1.24698e+011
+116 276 1.24599e+011
+540 443 1.24538e+011
+39 115 1.24388e+011
+188 312 1.24317e+011
+586 309 1.24294e+011
+324 125 1.2421e+011
+528 356 1.24102e+011
+118 181 1.24078e+011
+405 42 1.23938e+011
+571 454 1.23897e+011
+95 260 1.23897e+011
+206 234 1.23833e+011
+103 258 1.23801e+011
+146 98 1.23756e+011
+125 342 1.23688e+011
+104 306 1.23652e+011
+243 31 1.23579e+011
+176 140 1.23434e+011
+312 264 1.23382e+011
+400 17 1.23326e+011
+107 162 1.23283e+011
+164 248 1.23028e+011
+167 39 1.22857e+011
+130 95 1.22847e+011
+212 396 1.22788e+011
+314 126 1.22751e+011
+162 91 1.22697e+011
+386 355 1.22627e+011
+70 259 1.2257e+011
+120 85 1.22525e+011
+250 85 1.2252e+011
+381 261 1.2249e+011
+186 94 1.22467e+011
+511 368 1.22215e+011
+103 261 1.22151e+011
+66 477 1.22054e+011
+143 99 1.22045e+011
+575 99 1.21994e+011
+382 104 1.21969e+011
+180 360 1.21787e+011
+408 473 1.21689e+011
+562 200 1.21495e+011
+299 87 1.21456e+011
+488 52 1.21401e+011
+344 187 1.21093e+011
+195 201 1.20954e+011
+236 136 1.20936e+011
+163 190 1.20931e+011
+45 340 1.20907e+011
+63 448 1.20892e+011
+186 375 1.20871e+011
+91 338 1.20709e+011
+568 222 1.20631e+011
+356 254 1.20549e+011
+287 198 1.20426e+011
+135 102 1.20329e+011
+528 438 1.20135e+011
+326 101 1.20029e+011
+418 94 1.20015e+011
+448 288 1.19992e+011
+129 125 1.19988e+011
+47 421 1.19958e+011
+24 254 1.19834e+011
+103 98 1.1981e+011
+133 63 1.1969e+011
+50 147 1.19624e+011
+336 182 1.19601e+011
+441 340 1.19597e+011
+510 245 1.19574e+011
+500 19 1.1955e+011
+69 389 1.19472e+011
+519 141 1.19249e+011
+442 128 1.19203e+011
+512 110 1.18903e+011
+195 211 1.1883e+011
+34 336 1.18777e+011
+473 453 1.18743e+011
+89 398 1.18443e+011
+480 457 1.18386e+011
+176 325 1.18332e+011
+193 238 1.1824e+011
+257 458 1.18173e+011
+401 425 1.17961e+011
+222 434 1.17894e+011
+578 84 1.17805e+011
+543 276 1.17675e+011
+69 370 1.17588e+011
+514 334 1.17526e+011
+455 437 1.17516e+011
+48 336 1.17478e+011
+137 122 1.17424e+011
+54 150 1.17406e+011
+118 263 1.17303e+011
+63 314 1.17162e+011
+324 259 1.17113e+011
+25 49 1.16991e+011
+518 361 1.16962e+011
+289 308 1.16942e+011
+225 201 1.1688e+011
+272 315 1.16795e+011
+83 106 1.1661e+011
+290 140 1.16575e+011
+286 443 1.16489e+011
+357 63 1.16483e+011
+445 445 1.16431e+011
+603 365 1.16421e+011
+266 79 1.16242e+011
+51 252 1.16179e+011
+523 429 1.1616e+011
+523 186 1.15947e+011
+386 246 1.15935e+011
+398 95 1.1589e+011
+360 140 1.15868e+011
+422 331 1.15821e+011
+578 326 1.15782e+011
+187 291 1.15764e+011
+242 357 1.15725e+011
+62 200 1.15646e+011
+58 303 1.15642e+011
+223 103 1.15566e+011
+209 394 1.15514e+011
+493 103 1.15441e+011
+32 40 1.15345e+011
+9 31 1.153e+011
+521 323 1.15187e+011
+521 91 1.15183e+011
+217 171 1.1517e+011
+473 102 1.15099e+011
+229 365 1.15087e+011
+334 444 1.15012e+011
+400 129 1.15009e+011
+166 202 1.14999e+011
+214 290 1.14886e+011
+333 181 1.1482e+011
+469 434 1.14746e+011
+165 364 1.14724e+011
+180 221 1.14708e+011
+284 125 1.14697e+011
+524 278 1.14688e+011
+410 282 1.14666e+011
+347 124 1.14371e+011
+282 79 1.14254e+011
+529 18 1.14253e+011
+208 76 1.14231e+011
+401 67 1.14225e+011
+332 395 1.14203e+011
+135 125 1.14201e+011
+148 197 1.14033e+011
+388 3 1.14007e+011
+115 180 1.13916e+011
+181 292 1.13866e+011
+455 418 1.13717e+011
+298 257 1.13591e+011
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_3_7.txt b/test_data/harriscorners/hc_msc_3.00_0.10_3_7.txt
new file mode 100644
index 0000000..e9fee86
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_3_7.txt
@@ -0,0 +1,2547 @@
+2546
+121 44 4.84941e+012
+274 367 4.55096e+012
+245 94 4.32557e+012
+421 180 4.09909e+012
+277 367 3.94883e+012
+331 128 3.79009e+012
+83 77 3.57588e+012
+499 1 3.54332e+012
+401 263 3.53735e+012
+299 53 3.44537e+012
+135 214 3.38247e+012
+238 20 3.18512e+012
+424 322 3.04337e+012
+271 291 3.041e+012
+81 29 3.00702e+012
+199 18 2.81087e+012
+282 113 2.75319e+012
+202 18 2.73449e+012
+130 26 2.6925e+012
+75 257 2.68024e+012
+437 68 2.66398e+012
+542 14 2.66063e+012
+458 279 2.59066e+012
+342 8 2.54577e+012
+165 240 2.52535e+012
+238 17 2.51763e+012
+55 30 2.51705e+012
+460 264 2.49125e+012
+80 4 2.48443e+012
+424 177 2.48342e+012
+510 124 2.44225e+012
+467 238 2.43419e+012
+361 294 2.40389e+012
+151 223 2.38609e+012
+210 436 2.35956e+012
+510 166 2.34537e+012
+394 142 2.31198e+012
+138 204 2.31087e+012
+543 167 2.30272e+012
+302 184 2.29592e+012
+394 317 2.26998e+012
+482 178 2.25352e+012
+213 58 2.2456e+012
+390 142 2.22816e+012
+413 255 2.19724e+012
+160 144 2.19052e+012
+486 58 2.18352e+012
+512 78 2.1797e+012
+183 35 2.17467e+012
+302 181 2.17451e+012
+104 61 2.13494e+012
+125 255 2.12015e+012
+175 95 2.11358e+012
+562 225 2.08809e+012
+155 235 2.07443e+012
+345 339 2.06081e+012
+243 203 2.05053e+012
+416 8 2.03043e+012
+34 138 2.02214e+012
+81 1 2.01925e+012
+554 39 2.01575e+012
+293 16 2.00419e+012
+361 395 2.00337e+012
+342 338 1.9992e+012
+208 221 1.99842e+012
+224 181 1.98325e+012
+102 222 1.9817e+012
+528 102 1.9771e+012
+485 338 1.95887e+012
+260 297 1.95155e+012
+83 134 1.93867e+012
+115 43 1.92184e+012
+258 384 1.91941e+012
+79 80 1.91742e+012
+36 145 1.91548e+012
+348 339 1.91241e+012
+301 105 1.90955e+012
+175 111 1.89602e+012
+202 313 1.89014e+012
+419 8 1.88747e+012
+240 92 1.87419e+012
+544 58 1.87306e+012
+209 56 1.87138e+012
+125 186 1.86873e+012
+506 17 1.86781e+012
+244 166 1.86693e+012
+215 71 1.86136e+012
+138 208 1.8608e+012
+497 160 1.85503e+012
+158 74 1.84504e+012
+130 37 1.84411e+012
+421 165 1.8432e+012
+319 314 1.83258e+012
+528 24 1.83121e+012
+302 176 1.82144e+012
+66 235 1.81926e+012
+263 442 1.81517e+012
+44 26 1.8113e+012
+221 37 1.80843e+012
+127 164 1.80823e+012
+31 8 1.80453e+012
+77 3 1.78852e+012
+34 267 1.7835e+012
+363 400 1.78098e+012
+359 129 1.78061e+012
+326 165 1.77938e+012
+171 96 1.77603e+012
+90 197 1.77061e+012
+209 20 1.768e+012
+126 364 1.75161e+012
+424 45 1.74767e+012
+4 46 1.74517e+012
+196 126 1.74388e+012
+448 399 1.73624e+012
+255 139 1.72906e+012
+164 215 1.72889e+012
+48 98 1.71694e+012
+383 5 1.70794e+012
+299 165 1.69833e+012
+359 166 1.69422e+012
+511 2 1.69332e+012
+378 67 1.69035e+012
+454 204 1.68774e+012
+302 166 1.68658e+012
+313 148 1.68372e+012
+276 182 1.67955e+012
+390 59 1.67921e+012
+252 139 1.67486e+012
+189 218 1.67475e+012
+41 217 1.6724e+012
+319 225 1.66902e+012
+47 28 1.66704e+012
+447 296 1.66424e+012
+326 89 1.65978e+012
+449 299 1.65637e+012
+359 334 1.65441e+012
+87 197 1.65289e+012
+509 163 1.64924e+012
+450 338 1.64766e+012
+112 344 1.64591e+012
+542 365 1.63822e+012
+552 383 1.63668e+012
+127 1 1.63539e+012
+386 178 1.63192e+012
+241 70 1.62946e+012
+234 161 1.6191e+012
+34 8 1.61641e+012
+418 165 1.61108e+012
+223 420 1.60955e+012
+282 49 1.60766e+012
+387 220 1.59888e+012
+448 261 1.59269e+012
+206 436 1.59169e+012
+513 342 1.59035e+012
+64 319 1.58994e+012
+485 358 1.58928e+012
+224 39 1.5871e+012
+269 53 1.58253e+012
+413 45 1.57323e+012
+123 197 1.57009e+012
+125 259 1.56963e+012
+383 163 1.56954e+012
+283 117 1.5673e+012
+132 75 1.56606e+012
+420 46 1.56512e+012
+238 201 1.5641e+012
+391 296 1.56321e+012
+373 84 1.55277e+012
+261 202 1.55259e+012
+111 169 1.54882e+012
+358 319 1.54727e+012
+384 10 1.54364e+012
+362 258 1.53897e+012
+208 225 1.53786e+012
+428 118 1.537e+012
+403 120 1.53594e+012
+352 321 1.53459e+012
+310 148 1.5297e+012
+367 143 1.52964e+012
+174 311 1.5207e+012
+365 300 1.52033e+012
+481 84 1.51839e+012
+55 290 1.5166e+012
+206 449 1.51516e+012
+547 162 1.5111e+012
+465 196 1.51037e+012
+464 395 1.50762e+012
+364 253 1.50712e+012
+162 110 1.50575e+012
+138 174 1.50491e+012
+157 1 1.50381e+012
+64 344 1.50329e+012
+46 221 1.50102e+012
+508 2 1.49915e+012
+475 261 1.49733e+012
+512 221 1.49536e+012
+477 19 1.49484e+012
+326 141 1.49466e+012
+166 98 1.49087e+012
+432 147 1.48701e+012
+542 217 1.48597e+012
+317 336 1.4824e+012
+265 296 1.48237e+012
+542 214 1.4727e+012
+87 254 1.47026e+012
+195 56 1.46823e+012
+144 311 1.46671e+012
+245 207 1.4665e+012
+31 235 1.46607e+012
+516 75 1.46499e+012
+253 12 1.46353e+012
+404 183 1.46255e+012
+274 132 1.45984e+012
+93 214 1.44909e+012
+129 75 1.44649e+012
+107 39 1.44451e+012
+37 298 1.44249e+012
+313 84 1.44021e+012
+174 41 1.43992e+012
+101 79 1.43879e+012
+260 222 1.43847e+012
+294 27 1.43839e+012
+36 135 1.43786e+012
+143 324 1.43781e+012
+469 123 1.43734e+012
+364 250 1.43603e+012
+283 402 1.43581e+012
+365 6 1.43421e+012
+355 127 1.43209e+012
+60 184 1.42955e+012
+111 136 1.4236e+012
+546 41 1.41682e+012
+170 240 1.41474e+012
+477 5 1.41422e+012
+217 145 1.41341e+012
+287 298 1.40678e+012
+389 11 1.40586e+012
+232 199 1.40324e+012
+284 298 1.40077e+012
+164 95 1.39765e+012
+250 12 1.39627e+012
+227 293 1.39331e+012
+61 217 1.38675e+012
+34 100 1.38625e+012
+112 392 1.38466e+012
+528 183 1.38305e+012
+272 280 1.38163e+012
+280 365 1.38132e+012
+152 307 1.37994e+012
+298 274 1.3789e+012
+512 97 1.37706e+012
+38 63 1.37705e+012
+169 19 1.37538e+012
+413 6 1.36219e+012
+411 258 1.35853e+012
+272 68 1.35124e+012
+511 19 1.34977e+012
+486 180 1.34374e+012
+423 336 1.3437e+012
+328 296 1.34367e+012
+525 24 1.34287e+012
+249 143 1.3409e+012
+261 236 1.34087e+012
+441 24 1.34032e+012
+142 185 1.33957e+012
+141 182 1.3382e+012
+47 150 1.33531e+012
+380 5 1.33521e+012
+256 152 1.33441e+012
+329 258 1.33299e+012
+518 59 1.32974e+012
+523 346 1.32959e+012
+36 174 1.3236e+012
+211 184 1.31781e+012
+246 144 1.31718e+012
+209 450 1.31676e+012
+510 81 1.31639e+012
+312 75 1.31625e+012
+527 195 1.30966e+012
+126 26 1.30808e+012
+317 165 1.3034e+012
+247 219 1.30294e+012
+335 90 1.30115e+012
+58 218 1.30107e+012
+58 6 1.29816e+012
+563 62 1.29588e+012
+495 118 1.29454e+012
+580 17 1.29337e+012
+524 20 1.29175e+012
+229 37 1.28911e+012
+490 139 1.28868e+012
+436 396 1.28702e+012
+132 71 1.28279e+012
+484 363 1.28179e+012
+514 203 1.28175e+012
+153 197 1.28084e+012
+391 47 1.28045e+012
+562 478 1.27733e+012
+285 295 1.27441e+012
+128 187 1.27429e+012
+109 43 1.27086e+012
+365 258 1.27041e+012
+140 325 1.26585e+012
+204 310 1.26415e+012
+431 318 1.26083e+012
+173 239 1.25522e+012
+108 60 1.25461e+012
+236 347 1.25411e+012
+12 217 1.25262e+012
+314 163 1.25115e+012
+57 75 1.25102e+012
+24 62 1.24881e+012
+508 454 1.24848e+012
+294 122 1.24291e+012
+89 149 1.24223e+012
+265 445 1.24196e+012
+522 264 1.24175e+012
+232 263 1.23967e+012
+331 105 1.23707e+012
+115 392 1.23646e+012
+480 18 1.22882e+012
+50 288 1.22875e+012
+145 161 1.22223e+012
+388 164 1.22212e+012
+131 132 1.22102e+012
+409 354 1.21975e+012
+509 203 1.21622e+012
+25 65 1.21466e+012
+273 219 1.21229e+012
+473 243 1.21154e+012
+168 326 1.20744e+012
+487 22 1.2063e+012
+302 215 1.20395e+012
+158 96 1.20332e+012
+575 16 1.20268e+012
+514 346 1.20224e+012
+253 74 1.19981e+012
+236 72 1.1997e+012
+323 315 1.19739e+012
+309 370 1.19627e+012
+220 149 1.19604e+012
+362 7 1.19308e+012
+380 162 1.1895e+012
+538 457 1.18929e+012
+394 163 1.18899e+012
+476 22 1.18636e+012
+548 182 1.18409e+012
+101 360 1.18377e+012
+343 108 1.18376e+012
+526 186 1.18113e+012
+543 211 1.18084e+012
+192 143 1.17996e+012
+411 65 1.17628e+012
+109 240 1.17441e+012
+376 317 1.17038e+012
+448 218 1.16991e+012
+190 108 1.16755e+012
+22 65 1.16691e+012
+379 338 1.16658e+012
+222 218 1.16622e+012
+276 353 1.16597e+012
+489 1 1.16378e+012
+34 235 1.15933e+012
+392 218 1.15813e+012
+544 2 1.15705e+012
+29 30 1.15678e+012
+7 10 1.15644e+012
+291 122 1.15496e+012
+442 239 1.15448e+012
+250 220 1.15334e+012
+305 439 1.1468e+012
+251 423 1.14557e+012
+275 141 1.14246e+012
+191 278 1.1402e+012
+339 8 1.14004e+012
+26 9 1.13877e+012
+498 66 1.13851e+012
+392 160 1.13662e+012
+66 26 1.13253e+012
+278 219 1.13032e+012
+385 295 1.12861e+012
+182 137 1.1279e+012
+408 183 1.12508e+012
+428 2 1.12446e+012
+535 266 1.12326e+012
+240 95 1.12229e+012
+568 41 1.12046e+012
+132 1 1.11981e+012
+286 209 1.11928e+012
+190 171 1.11901e+012
+410 162 1.11851e+012
+389 323 1.11826e+012
+528 360 1.11808e+012
+469 421 1.1174e+012
+303 169 1.11722e+012
+487 263 1.11684e+012
+510 140 1.11574e+012
+477 204 1.11085e+012
+269 68 1.10978e+012
+405 82 1.10418e+012
+168 115 1.1036e+012
+541 208 1.10315e+012
+131 216 1.10185e+012
+385 324 1.10162e+012
+172 55 1.10158e+012
+467 140 1.10153e+012
+222 112 1.09734e+012
+510 84 1.09653e+012
+521 183 1.09643e+012
+174 187 1.09581e+012
+534 20 1.09461e+012
+538 138 1.09376e+012
+462 43 1.09356e+012
+493 139 1.09107e+012
+227 186 1.08983e+012
+160 139 1.08838e+012
+90 258 1.08755e+012
+205 20 1.08747e+012
+455 85 1.08702e+012
+466 123 1.08652e+012
+520 201 1.08397e+012
+558 19 1.08131e+012
+61 134 1.08033e+012
+566 61 1.07969e+012
+462 27 1.07882e+012
+287 164 1.07822e+012
+263 402 1.076e+012
+276 179 1.07129e+012
+479 15 1.07048e+012
+536 244 1.06987e+012
+162 115 1.0697e+012
+172 19 1.06719e+012
+166 20 1.06667e+012
+33 30 1.06538e+012
+155 94 1.06538e+012
+414 23 1.06475e+012
+541 41 1.06434e+012
+145 392 1.06355e+012
+42 63 1.06249e+012
+97 448 1.0623e+012
+112 42 1.0592e+012
+571 40 1.05732e+012
+322 146 1.05523e+012
+211 144 1.05486e+012
+359 219 1.05449e+012
+275 137 1.05448e+012
+574 140 1.05376e+012
+437 338 1.05364e+012
+418 87 1.05259e+012
+509 174 1.05152e+012
+139 111 1.05121e+012
+343 122 1.05112e+012
+266 203 1.04752e+012
+175 260 1.04642e+012
+176 239 1.04598e+012
+415 164 1.04513e+012
+531 360 1.04389e+012
+61 203 1.04325e+012
+269 277 1.04303e+012
+366 105 1.04222e+012
+435 182 1.04001e+012
+114 169 1.03935e+012
+380 107 1.03918e+012
+4 10 1.03744e+012
+330 141 1.03501e+012
+134 97 1.03482e+012
+97 80 1.03408e+012
+279 143 1.0333e+012
+256 147 1.03289e+012
+188 182 1.03212e+012
+10 101 1.03198e+012
+278 390 1.03143e+012
+446 23 1.03126e+012
+272 64 1.03097e+012
+360 142 1.03084e+012
+375 117 1.03078e+012
+578 53 1.03028e+012
+164 206 1.03025e+012
+36 219 1.0302e+012
+232 347 1.02972e+012
+139 20 1.02823e+012
+184 110 1.02599e+012
+226 421 1.02379e+012
+69 149 1.02194e+012
+108 98 1.02142e+012
+218 208 1.02071e+012
+452 374 1.01837e+012
+162 126 1.0183e+012
+533 240 1.01778e+012
+157 91 1.01398e+012
+102 236 1.0138e+012
+372 161 1.01276e+012
+261 141 1.01235e+012
+222 16 1.01145e+012
+387 126 1.00918e+012
+186 202 1.00863e+012
+342 166 1.00794e+012
+394 65 1.00747e+012
+501 142 1.0067e+012
+528 363 1.00582e+012
+417 438 1.00542e+012
+215 125 1.00368e+012
+372 69 1.00334e+012
+190 360 1.00266e+012
+346 349 1.00186e+012
+48 133 1.00146e+012
+346 276 1.00104e+012
+102 164 9.99339e+011
+523 122 9.96339e+011
+183 399 9.96094e+011
+142 393 9.95737e+011
+75 8 9.95669e+011
+164 210 9.95237e+011
+575 178 9.94842e+011
+340 109 9.93824e+011
+530 141 9.93295e+011
+485 44 9.93162e+011
+437 305 9.92782e+011
+432 112 9.90392e+011
+393 21 9.90238e+011
+541 124 9.90203e+011
+498 225 9.89478e+011
+162 277 9.87048e+011
+356 259 9.86396e+011
+105 222 9.8595e+011
+534 184 9.85628e+011
+540 98 9.84231e+011
+332 294 9.83051e+011
+159 181 9.82015e+011
+405 339 9.81269e+011
+104 3 9.799e+011
+59 253 9.78754e+011
+259 165 9.76499e+011
+579 81 9.76275e+011
+273 166 9.76052e+011
+279 129 9.75983e+011
+421 141 9.75373e+011
+446 8 9.75015e+011
+250 194 9.72965e+011
+114 216 9.72954e+011
+170 200 9.7238e+011
+218 106 9.71234e+011
+91 254 9.69827e+011
+377 120 9.68157e+011
+403 277 9.68156e+011
+482 173 9.68019e+011
+445 123 9.67355e+011
+161 166 9.67194e+011
+363 180 9.66306e+011
+499 62 9.6611e+011
+266 16 9.63942e+011
+63 59 9.63644e+011
+346 179 9.63624e+011
+238 75 9.62802e+011
+49 155 9.61578e+011
+509 343 9.60774e+011
+388 21 9.60767e+011
+564 160 9.60665e+011
+83 476 9.60395e+011
+274 72 9.59796e+011
+265 30 9.59789e+011
+191 204 9.5971e+011
+356 219 9.58988e+011
+68 46 9.58945e+011
+268 242 9.57113e+011
+175 164 9.57008e+011
+175 19 9.55985e+011
+78 271 9.55559e+011
+527 347 9.54544e+011
+69 25 9.51868e+011
+503 164 9.51627e+011
+228 263 9.49389e+011
+34 64 9.48434e+011
+411 21 9.46793e+011
+547 217 9.4441e+011
+107 28 9.4387e+011
+516 182 9.43288e+011
+345 166 9.43015e+011
+296 421 9.42171e+011
+42 81 9.41373e+011
+480 299 9.41236e+011
+480 165 9.39604e+011
+85 1 9.37699e+011
+404 376 9.37487e+011
+448 124 9.37114e+011
+77 236 9.37104e+011
+72 259 9.36801e+011
+536 394 9.36378e+011
+248 314 9.35664e+011
+373 392 9.34615e+011
+100 198 9.34577e+011
+134 127 9.33931e+011
+110 179 9.31995e+011
+436 124 9.28068e+011
+54 222 9.27804e+011
+572 162 9.27279e+011
+16 217 9.25485e+011
+493 81 9.25454e+011
+66 216 9.25141e+011
+359 315 9.25e+011
+72 146 9.24057e+011
+537 96 9.23874e+011
+329 11 9.23841e+011
+277 187 9.23522e+011
+165 277 9.23051e+011
+506 61 9.22641e+011
+251 366 9.22515e+011
+205 295 9.22458e+011
+298 138 9.22358e+011
+544 457 9.21955e+011
+438 160 9.20615e+011
+200 129 9.18237e+011
+340 122 9.18213e+011
+479 296 9.18065e+011
+205 163 9.18027e+011
+301 205 9.17451e+011
+269 132 9.16906e+011
+449 138 9.16248e+011
+210 153 9.15711e+011
+385 244 9.15381e+011
+466 26 9.13591e+011
+48 10 9.13457e+011
+94 257 9.12781e+011
+276 331 9.12645e+011
+185 343 9.12425e+011
+191 127 9.12389e+011
+166 107 9.12261e+011
+279 353 9.11378e+011
+78 475 9.11006e+011
+228 129 9.09291e+011
+353 337 9.08417e+011
+406 64 9.08373e+011
+406 198 9.0809e+011
+375 162 9.07603e+011
+403 186 9.06308e+011
+159 239 9.06272e+011
+388 16 9.05736e+011
+296 331 9.04573e+011
+330 166 9.04205e+011
+357 11 9.04186e+011
+165 357 9.04038e+011
+85 61 9.03753e+011
+543 8 9.02094e+011
+425 4 9.01095e+011
+506 143 9.00812e+011
+282 72 9.00529e+011
+452 45 8.98103e+011
+147 398 8.97906e+011
+78 40 8.94336e+011
+195 132 8.94316e+011
+517 346 8.94203e+011
+483 164 8.92468e+011
+364 201 8.92397e+011
+120 115 8.92216e+011
+562 18 8.92202e+011
+68 476 8.9059e+011
+150 112 8.90161e+011
+97 445 8.89818e+011
+145 6 8.8698e+011
+287 51 8.86234e+011
+206 157 8.8437e+011
+349 144 8.83573e+011
+247 386 8.8343e+011
+114 1 8.83192e+011
+456 44 8.83177e+011
+126 38 8.80899e+011
+526 38 8.8017e+011
+241 57 8.78907e+011
+400 277 8.7878e+011
+377 85 8.74634e+011
+484 375 8.73749e+011
+445 354 8.73635e+011
+474 204 8.73439e+011
+509 6 8.72433e+011
+119 128 8.70111e+011
+209 419 8.69797e+011
+165 313 8.69538e+011
+109 94 8.69392e+011
+397 163 8.68813e+011
+423 261 8.68097e+011
+515 42 8.67494e+011
+223 433 8.66666e+011
+340 264 8.66458e+011
+162 252 8.65104e+011
+218 125 8.65014e+011
+289 346 8.61939e+011
+46 81 8.60611e+011
+501 361 8.60145e+011
+376 353 8.58425e+011
+548 220 8.57326e+011
+449 166 8.56854e+011
+38 240 8.56374e+011
+554 181 8.55823e+011
+287 262 8.54396e+011
+31 66 8.54241e+011
+396 21 8.53941e+011
+424 63 8.5383e+011
+304 189 8.53666e+011
+56 145 8.51954e+011
+306 364 8.50302e+011
+340 163 8.49253e+011
+218 98 8.48366e+011
+86 181 8.47307e+011
+524 171 8.47177e+011
+306 105 8.46787e+011
+91 290 8.45422e+011
+331 202 8.44149e+011
+389 65 8.43949e+011
+419 259 8.43386e+011
+56 66 8.42483e+011
+232 34 8.42106e+011
+238 164 8.41293e+011
+237 134 8.40717e+011
+503 61 8.40703e+011
+412 98 8.40489e+011
+93 149 8.40379e+011
+563 323 8.39093e+011
+541 139 8.37882e+011
+178 273 8.37454e+011
+135 147 8.35965e+011
+434 159 8.35389e+011
+354 11 8.33668e+011
+325 426 8.33356e+011
+385 88 8.33355e+011
+368 109 8.31706e+011
+57 70 8.30989e+011
+164 73 8.29561e+011
+327 105 8.29392e+011
+190 139 8.26753e+011
+343 264 8.26715e+011
+228 260 8.25313e+011
+525 222 8.22857e+011
+512 363 8.22757e+011
+374 240 8.22393e+011
+278 132 8.22307e+011
+61 370 8.2228e+011
+147 78 8.2182e+011
+67 253 8.21768e+011
+510 129 8.21264e+011
+11 204 8.20997e+011
+33 110 8.20821e+011
+272 145 8.20402e+011
+224 149 8.19493e+011
+6 64 8.18242e+011
+463 101 8.17533e+011
+365 337 8.16844e+011
+529 39 8.1629e+011
+52 358 8.15844e+011
+513 46 8.15825e+011
+358 241 8.1465e+011
+320 105 8.14634e+011
+397 356 8.1418e+011
+300 264 8.13759e+011
+266 130 8.13607e+011
+471 202 8.13209e+011
+363 357 8.12394e+011
+191 350 8.12305e+011
+85 148 8.11548e+011
+461 162 8.08733e+011
+255 89 8.08415e+011
+272 170 8.08293e+011
+105 76 8.08181e+011
+382 26 8.07794e+011
+435 319 8.07738e+011
+541 133 8.07585e+011
+42 10 8.06828e+011
+560 323 8.06769e+011
+310 6 8.06604e+011
+82 61 8.06082e+011
+193 215 8.05799e+011
+498 459 8.04643e+011
+561 475 8.02508e+011
+576 127 8.02302e+011
+280 192 8.01644e+011
+288 397 8.0152e+011
+168 196 8.01514e+011
+199 167 8.01512e+011
+280 195 8.00006e+011
+137 99 7.9915e+011
+258 161 7.99019e+011
+309 440 7.96443e+011
+145 16 7.95046e+011
+526 189 7.94653e+011
+180 395 7.94171e+011
+281 438 7.9387e+011
+264 71 7.93639e+011
+282 220 7.93133e+011
+64 316 7.9257e+011
+527 344 7.9187e+011
+277 190 7.91794e+011
+520 79 7.91766e+011
+355 24 7.91698e+011
+190 136 7.91634e+011
+228 288 7.90848e+011
+394 355 7.90285e+011
+292 88 7.90147e+011
+418 284 7.90016e+011
+539 265 7.88739e+011
+306 90 7.86704e+011
+261 71 7.85912e+011
+328 181 7.85812e+011
+148 449 7.84455e+011
+537 122 7.83644e+011
+440 123 7.83163e+011
+509 179 7.81255e+011
+306 192 7.80786e+011
+97 149 7.79286e+011
+40 355 7.78975e+011
+25 221 7.77775e+011
+207 203 7.77703e+011
+423 399 7.76835e+011
+60 40 7.76392e+011
+468 202 7.76182e+011
+351 11 7.75808e+011
+297 69 7.75526e+011
+494 458 7.74304e+011
+149 130 7.73463e+011
+538 406 7.73043e+011
+218 128 7.72701e+011
+26 131 7.69417e+011
+193 218 7.69353e+011
+261 249 7.68924e+011
+181 20 7.68802e+011
+125 270 7.68661e+011
+530 160 7.67581e+011
+392 17 7.67379e+011
+258 248 7.65966e+011
+434 89 7.65004e+011
+242 192 7.6445e+011
+499 80 7.6437e+011
+542 95 7.63965e+011
+11 81 7.63616e+011
+463 355 7.63234e+011
+445 243 7.62507e+011
+314 79 7.62413e+011
+222 116 7.61956e+011
+319 386 7.61825e+011
+123 263 7.6173e+011
+163 130 7.61051e+011
+561 146 7.60774e+011
+388 161 7.60765e+011
+110 2 7.60637e+011
+88 369 7.60319e+011
+283 394 7.59075e+011
+570 121 7.58173e+011
+381 122 7.57359e+011
+115 131 7.56481e+011
+457 3 7.56348e+011
+80 195 7.547e+011
+1 383 7.54231e+011
+136 143 7.54166e+011
+346 45 7.541e+011
+572 405 7.54063e+011
+201 163 7.5378e+011
+486 139 7.53712e+011
+264 141 7.52632e+011
+84 73 7.52321e+011
+354 144 7.51768e+011
+94 7 7.51657e+011
+475 62 7.51463e+011
+269 58 7.51218e+011
+117 426 7.50954e+011
+573 124 7.50903e+011
+406 164 7.50459e+011
+130 128 7.50362e+011
+100 5 7.49856e+011
+271 108 7.49789e+011
+512 298 7.48506e+011
+362 407 7.48412e+011
+401 166 7.48376e+011
+534 160 7.47978e+011
+190 329 7.47958e+011
+50 254 7.47942e+011
+488 183 7.47248e+011
+31 219 7.46997e+011
+390 242 7.46625e+011
+220 212 7.46597e+011
+472 23 7.46412e+011
+25 201 7.45548e+011
+415 98 7.45209e+011
+299 296 7.44701e+011
+116 76 7.44545e+011
+196 167 7.44255e+011
+347 239 7.43994e+011
+504 361 7.43894e+011
+523 60 7.42847e+011
+179 168 7.41292e+011
+96 423 7.41281e+011
+232 125 7.41211e+011
+126 219 7.40922e+011
+445 118 7.39724e+011
+134 237 7.39371e+011
+166 150 7.3928e+011
+408 26 7.39249e+011
+199 132 7.39164e+011
+103 196 7.38909e+011
+447 351 7.38001e+011
+427 182 7.37959e+011
+270 93 7.37955e+011
+264 13 7.37806e+011
+277 295 7.37652e+011
+114 212 7.36964e+011
+4 154 7.36524e+011
+282 210 7.36206e+011
+90 376 7.3597e+011
+91 22 7.34691e+011
+433 86 7.34649e+011
+345 297 7.34035e+011
+107 429 7.33789e+011
+452 102 7.33005e+011
+325 341 7.32625e+011
+87 144 7.31774e+011
+448 376 7.31226e+011
+302 160 7.30584e+011
+217 280 7.30454e+011
+277 110 7.28916e+011
+273 316 7.2888e+011
+95 197 7.28245e+011
+72 129 7.27846e+011
+376 124 7.27465e+011
+305 53 7.27338e+011
+402 143 7.26481e+011
+501 263 7.26453e+011
+265 74 7.26277e+011
+423 332 7.26185e+011
+138 59 7.258e+011
+153 131 7.25499e+011
+381 88 7.24966e+011
+66 276 7.24659e+011
+468 42 7.22471e+011
+436 301 7.21953e+011
+258 89 7.21774e+011
+367 86 7.21554e+011
+411 26 7.20454e+011
+514 119 7.20328e+011
+310 446 7.20254e+011
+186 21 7.19748e+011
+148 88 7.19506e+011
+253 249 7.18309e+011
+437 240 7.17167e+011
+261 391 7.17123e+011
+430 85 7.16711e+011
+573 330 7.15968e+011
+185 308 7.15538e+011
+130 428 7.14223e+011
+44 98 7.13618e+011
+92 445 7.12315e+011
+196 111 7.12167e+011
+74 96 7.1209e+011
+424 375 7.09544e+011
+449 87 7.07955e+011
+195 329 7.07772e+011
+523 79 7.07465e+011
+540 101 7.07134e+011
+165 286 7.06356e+011
+138 178 7.05748e+011
+87 213 7.05722e+011
+189 167 7.05213e+011
+480 451 7.05076e+011
+449 84 7.04744e+011
+389 168 7.04494e+011
+224 128 7.03201e+011
+178 20 7.02617e+011
+550 57 7.02446e+011
+474 246 7.02267e+011
+354 269 7.02054e+011
+126 78 7.01506e+011
+53 63 7.00414e+011
+381 181 7.00363e+011
+248 293 6.99171e+011
+360 368 6.99014e+011
+66 372 6.98318e+011
+205 15 6.98e+011
+308 353 6.97254e+011
+349 125 6.97201e+011
+185 340 6.96574e+011
+186 101 6.95659e+011
+182 201 6.95591e+011
+399 182 6.93997e+011
+514 262 6.93573e+011
+264 390 6.92181e+011
+484 329 6.91101e+011
+267 144 6.9079e+011
+20 218 6.90132e+011
+449 118 6.89805e+011
+34 12 6.89494e+011
+579 43 6.89352e+011
+175 272 6.89279e+011
+265 249 6.88975e+011
+517 20 6.88961e+011
+52 42 6.88306e+011
+540 182 6.8808e+011
+123 126 6.87938e+011
+196 90 6.87867e+011
+407 429 6.87861e+011
+322 426 6.87432e+011
+321 121 6.86981e+011
+106 182 6.86642e+011
+118 95 6.86499e+011
+493 60 6.86304e+011
+448 127 6.85414e+011
+562 149 6.85119e+011
+57 365 6.84916e+011
+56 253 6.84732e+011
+247 402 6.84696e+011
+537 183 6.84178e+011
+477 340 6.82961e+011
+174 201 6.82881e+011
+371 105 6.82498e+011
+371 89 6.82061e+011
+317 103 6.80805e+011
+409 102 6.80525e+011
+193 312 6.79971e+011
+58 204 6.79952e+011
+455 162 6.79784e+011
+592 19 6.79399e+011
+539 241 6.77933e+011
+222 153 6.76635e+011
+557 463 6.7649e+011
+502 21 6.76433e+011
+118 222 6.75968e+011
+12 114 6.7544e+011
+470 142 6.75048e+011
+541 127 6.74911e+011
+145 1 6.74284e+011
+279 332 6.73068e+011
+506 178 6.71804e+011
+297 72 6.7102e+011
+163 135 6.70624e+011
+155 57 6.69738e+011
+118 5 6.68597e+011
+362 65 6.68359e+011
+178 57 6.68269e+011
+259 107 6.68023e+011
+291 335 6.67895e+011
+483 21 6.67384e+011
+306 146 6.67356e+011
+434 379 6.65367e+011
+496 80 6.64653e+011
+239 219 6.63055e+011
+189 313 6.62176e+011
+46 355 6.61923e+011
+524 424 6.61279e+011
+483 288 6.60344e+011
+451 438 6.6021e+011
+165 178 6.59564e+011
+138 56 6.59346e+011
+186 97 6.59207e+011
+149 151 6.58523e+011
+110 326 6.58361e+011
+451 163 6.57978e+011
+459 340 6.57533e+011
+223 87 6.57441e+011
+232 72 6.57347e+011
+249 260 6.56839e+011
+229 14 6.56626e+011
+301 133 6.56449e+011
+413 82 6.56362e+011
+285 343 6.56279e+011
+84 213 6.56219e+011
+244 293 6.55705e+011
+575 13 6.55279e+011
+303 88 6.55098e+011
+250 164 6.54987e+011
+343 463 6.54777e+011
+559 243 6.53844e+011
+542 262 6.53769e+011
+93 93 6.53285e+011
+333 241 6.53011e+011
+482 125 6.52244e+011
+545 248 6.52215e+011
+210 162 6.52171e+011
+124 95 6.49932e+011
+42 118 6.49286e+011
+402 104 6.48766e+011
+261 226 6.48699e+011
+355 254 6.48577e+011
+163 152 6.48306e+011
+122 161 6.48195e+011
+480 168 6.47851e+011
+388 96 6.47596e+011
+248 399 6.47264e+011
+448 444 6.46805e+011
+42 308 6.46408e+011
+556 245 6.46264e+011
+178 262 6.45625e+011
+129 112 6.45056e+011
+332 355 6.4423e+011
+412 471 6.43764e+011
+480 440 6.43466e+011
+283 124 6.43073e+011
+492 118 6.42796e+011
+120 58 6.42062e+011
+360 160 6.41433e+011
+536 79 6.40785e+011
+421 63 6.40184e+011
+49 62 6.39588e+011
+118 2 6.39395e+011
+213 163 6.39269e+011
+273 94 6.39175e+011
+55 360 6.3869e+011
+219 153 6.3807e+011
+57 100 6.36761e+011
+192 15 6.36518e+011
+52 4 6.36073e+011
+140 4 6.36028e+011
+334 391 6.35459e+011
+96 93 6.35098e+011
+562 271 6.34095e+011
+93 60 6.33803e+011
+210 35 6.33708e+011
+572 179 6.33275e+011
+9 46 6.32951e+011
+502 43 6.32803e+011
+399 106 6.32386e+011
+206 419 6.31494e+011
+248 35 6.31367e+011
+186 1 6.29818e+011
+259 34 6.29768e+011
+302 157 6.29612e+011
+528 221 6.29514e+011
+177 122 6.28503e+011
+408 143 6.26838e+011
+136 182 6.26668e+011
+97 363 6.26386e+011
+562 274 6.26121e+011
+338 427 6.25829e+011
+315 238 6.25434e+011
+136 136 6.24771e+011
+475 239 6.24704e+011
+340 391 6.24458e+011
+348 164 6.23588e+011
+371 338 6.23138e+011
+151 91 6.22764e+011
+302 243 6.22139e+011
+325 15 6.21813e+011
+416 298 6.21595e+011
+303 108 6.21091e+011
+191 122 6.20737e+011
+211 135 6.20178e+011
+514 19 6.19861e+011
+135 179 6.19703e+011
+175 168 6.18441e+011
+218 102 6.1771e+011
+204 204 6.17136e+011
+241 421 6.17035e+011
+531 120 6.16546e+011
+337 390 6.16243e+011
+340 473 6.16119e+011
+400 199 6.15476e+011
+375 5 6.15196e+011
+526 383 6.14697e+011
+105 360 6.13952e+011
+41 182 6.13472e+011
+170 110 6.13225e+011
+529 177 6.12885e+011
+285 241 6.12806e+011
+538 40 6.1205e+011
+232 150 6.12005e+011
+479 404 6.11661e+011
+59 64 6.1148e+011
+111 263 6.10887e+011
+11 78 6.10826e+011
+549 223 6.09516e+011
+157 198 6.09177e+011
+173 119 6.08836e+011
+87 288 6.08586e+011
+91 276 6.08468e+011
+10 32 6.07949e+011
+413 298 6.07931e+011
+417 251 6.07561e+011
+218 290 6.0755e+011
+586 17 6.07528e+011
+386 282 6.07135e+011
+45 475 6.06821e+011
+429 44 6.06326e+011
+30 256 6.06324e+011
+195 77 6.05971e+011
+298 398 6.05873e+011
+391 118 6.04917e+011
+130 168 6.04792e+011
+531 266 6.04598e+011
+224 51 6.04156e+011
+433 277 6.0399e+011
+286 219 6.03559e+011
+120 447 6.02609e+011
+478 401 6.02597e+011
+110 110 6.02546e+011
+47 162 6.01473e+011
+113 94 6.01137e+011
+442 97 6.01024e+011
+335 370 6.00671e+011
+542 252 5.99589e+011
+121 53 5.99084e+011
+285 346 5.98687e+011
+290 311 5.98621e+011
+272 142 5.98585e+011
+259 328 5.98286e+011
+444 452 5.96801e+011
+138 311 5.96645e+011
+390 135 5.96582e+011
+283 197 5.96568e+011
+172 166 5.9652e+011
+306 359 5.95915e+011
+131 147 5.95523e+011
+351 163 5.95061e+011
+293 146 5.95005e+011
+251 182 5.94644e+011
+62 148 5.93395e+011
+281 33 5.9307e+011
+182 96 5.92678e+011
+382 147 5.92494e+011
+198 194 5.91494e+011
+189 326 5.91278e+011
+214 174 5.90743e+011
+578 56 5.89483e+011
+222 125 5.88765e+011
+200 30 5.88656e+011
+101 28 5.87365e+011
+72 187 5.87129e+011
+209 138 5.86719e+011
+390 130 5.84158e+011
+100 257 5.82294e+011
+227 123 5.81903e+011
+294 311 5.81756e+011
+109 146 5.81368e+011
+437 280 5.81126e+011
+181 312 5.80762e+011
+269 416 5.80574e+011
+323 29 5.80181e+011
+168 289 5.79243e+011
+37 202 5.79086e+011
+479 11 5.79081e+011
+412 416 5.78746e+011
+361 244 5.78634e+011
+227 72 5.782e+011
+279 387 5.77938e+011
+184 311 5.77708e+011
+86 372 5.77102e+011
+139 147 5.76819e+011
+484 121 5.76447e+011
+536 260 5.7601e+011
+462 141 5.74347e+011
+182 121 5.74122e+011
+483 204 5.74108e+011
+514 380 5.74031e+011
+208 15 5.73701e+011
+290 184 5.7176e+011
+119 110 5.7158e+011
+243 215 5.71501e+011
+333 415 5.71448e+011
+139 142 5.71351e+011
+72 372 5.71048e+011
+235 150 5.69355e+011
+314 446 5.67633e+011
+216 163 5.67566e+011
+359 53 5.6751e+011
+561 142 5.67191e+011
+87 311 5.67184e+011
+396 138 5.668e+011
+229 150 5.66372e+011
+61 26 5.66276e+011
+569 382 5.66247e+011
+307 448 5.65527e+011
+390 335 5.65267e+011
+378 342 5.65207e+011
+130 306 5.6412e+011
+330 213 5.63785e+011
+77 128 5.63543e+011
+199 111 5.62836e+011
+463 224 5.62664e+011
+38 82 5.62449e+011
+320 30 5.61981e+011
+547 139 5.61062e+011
+60 109 5.61021e+011
+276 204 5.60928e+011
+91 79 5.60854e+011
+529 270 5.60563e+011
+483 47 5.60258e+011
+375 299 5.59979e+011
+381 413 5.59823e+011
+201 345 5.59025e+011
+335 218 5.58338e+011
+86 364 5.57588e+011
+545 244 5.56984e+011
+508 221 5.56645e+011
+48 235 5.56597e+011
+452 62 5.56448e+011
+468 208 5.56153e+011
+437 89 5.55983e+011
+250 154 5.55921e+011
+174 122 5.55793e+011
+370 300 5.55773e+011
+463 341 5.55699e+011
+464 115 5.55192e+011
+495 473 5.54928e+011
+569 422 5.54878e+011
+185 167 5.5471e+011
+310 265 5.54493e+011
+461 121 5.54021e+011
+308 31 5.5395e+011
+237 417 5.53609e+011
+222 102 5.53383e+011
+203 127 5.53041e+011
+355 105 5.52858e+011
+509 58 5.52719e+011
+386 335 5.51933e+011
+131 135 5.51911e+011
+341 38 5.5187e+011
+242 219 5.51781e+011
+521 426 5.51608e+011
+411 263 5.51484e+011
+558 79 5.5091e+011
+287 215 5.50647e+011
+149 196 5.49614e+011
+573 421 5.49482e+011
+201 88 5.48979e+011
+151 229 5.4896e+011
+533 39 5.48878e+011
+333 66 5.48346e+011
+157 171 5.48077e+011
+434 82 5.47182e+011
+342 466 5.46499e+011
+149 199 5.4599e+011
+158 310 5.45022e+011
+196 190 5.4489e+011
+188 301 5.44677e+011
+566 145 5.43892e+011
+88 339 5.43827e+011
+156 305 5.43802e+011
+402 220 5.43713e+011
+256 106 5.43078e+011
+457 121 5.43078e+011
+540 186 5.42659e+011
+450 416 5.42658e+011
+204 394 5.42042e+011
+44 339 5.4067e+011
+268 219 5.40559e+011
+354 15 5.40271e+011
+384 258 5.40226e+011
+357 66 5.39599e+011
+111 358 5.39596e+011
+295 298 5.39e+011
+388 419 5.38422e+011
+247 107 5.3838e+011
+115 359 5.37815e+011
+282 418 5.37612e+011
+328 64 5.37381e+011
+235 220 5.3709e+011
+511 134 5.36942e+011
+248 362 5.36047e+011
+397 46 5.35884e+011
+343 200 5.35877e+011
+163 118 5.35648e+011
+562 461 5.35461e+011
+390 204 5.34907e+011
+329 25 5.33127e+011
+185 132 5.32761e+011
+168 129 5.32476e+011
+219 111 5.32326e+011
+445 166 5.32169e+011
+245 180 5.31459e+011
+434 92 5.31303e+011
+369 92 5.30619e+011
+215 94 5.30483e+011
+541 249 5.30331e+011
+149 22 5.28904e+011
+191 211 5.28425e+011
+357 282 5.27742e+011
+152 448 5.27393e+011
+352 426 5.27113e+011
+69 338 5.2709e+011
+479 44 5.26667e+011
+228 91 5.25978e+011
+433 45 5.25333e+011
+110 323 5.24136e+011
+217 352 5.23795e+011
+576 134 5.23792e+011
+18 342 5.23577e+011
+360 362 5.23437e+011
+270 103 5.23147e+011
+135 322 5.2301e+011
+280 124 5.22961e+011
+164 350 5.22881e+011
+160 61 5.21812e+011
+436 277 5.21561e+011
+363 368 5.21122e+011
+327 102 5.21047e+011
+84 110 5.20746e+011
+219 314 5.20446e+011
+303 294 5.2038e+011
+534 96 5.20293e+011
+8 114 5.20043e+011
+360 448 5.1988e+011
+573 57 5.19738e+011
+433 280 5.19543e+011
+570 451 5.19303e+011
+172 416 5.18948e+011
+123 110 5.18811e+011
+85 38 5.18418e+011
+426 103 5.18295e+011
+330 216 5.178e+011
+382 103 5.17314e+011
+116 58 5.16383e+011
+277 210 5.16058e+011
+284 399 5.1583e+011
+346 372 5.15712e+011
+566 18 5.14928e+011
+516 162 5.14698e+011
+453 119 5.14262e+011
+529 35 5.13448e+011
+84 100 5.1328e+011
+367 245 5.13165e+011
+314 103 5.12557e+011
+90 95 5.12308e+011
+178 329 5.12168e+011
+178 183 5.11599e+011
+372 146 5.11516e+011
+219 204 5.11464e+011
+72 408 5.11386e+011
+248 346 5.11318e+011
+81 101 5.11244e+011
+285 32 5.10397e+011
+431 89 5.09696e+011
+117 61 5.09539e+011
+196 146 5.0905e+011
+445 204 5.08911e+011
+88 207 5.08653e+011
+76 110 5.0824e+011
+55 172 5.07817e+011
+106 257 5.07803e+011
+408 105 5.07391e+011
+299 256 5.07353e+011
+52 451 5.07181e+011
+153 192 5.07072e+011
+376 224 5.07022e+011
+214 450 5.06444e+011
+345 139 5.06396e+011
+318 187 5.0509e+011
+210 423 5.05011e+011
+335 105 5.04982e+011
+197 84 5.03646e+011
+325 133 5.03468e+011
+91 285 5.03293e+011
+56 303 5.03077e+011
+526 177 5.03053e+011
+510 348 5.02706e+011
+500 103 5.02671e+011
+342 196 5.02102e+011
+528 30 5.01822e+011
+3 234 5.01363e+011
+63 152 5.01145e+011
+169 107 5.00367e+011
+151 134 4.99898e+011
+555 303 4.99642e+011
+76 60 4.99192e+011
+529 399 4.98996e+011
+253 9 4.98849e+011
+199 76 4.98758e+011
+450 324 4.98675e+011
+455 58 4.98624e+011
+111 338 4.98242e+011
+389 88 4.97186e+011
+247 418 4.96116e+011
+386 24 4.96022e+011
+86 377 4.96002e+011
+311 221 4.95991e+011
+317 99 4.95384e+011
+122 82 4.95092e+011
+497 282 4.94951e+011
+454 438 4.94889e+011
+289 118 4.9483e+011
+391 53 4.93473e+011
+132 394 4.93374e+011
+67 211 4.93219e+011
+405 104 4.92864e+011
+72 165 4.92501e+011
+325 221 4.92015e+011
+539 244 4.91813e+011
+493 340 4.91625e+011
+104 307 4.90947e+011
+293 332 4.90928e+011
+27 118 4.90747e+011
+12 421 4.90688e+011
+435 62 4.90618e+011
+566 180 4.89196e+011
+281 36 4.88789e+011
+110 76 4.88451e+011
+158 152 4.87877e+011
+186 376 4.87708e+011
+455 360 4.87488e+011
+416 244 4.8744e+011
+301 209 4.87349e+011
+125 216 4.86615e+011
+555 201 4.86405e+011
+22 48 4.8605e+011
+479 286 4.85422e+011
+541 381 4.83643e+011
+215 289 4.83346e+011
+260 369 4.83273e+011
+162 34 4.81652e+011
+296 260 4.81581e+011
+188 304 4.81074e+011
+438 391 4.80701e+011
+449 285 4.80333e+011
+406 99 4.80314e+011
+279 164 4.79808e+011
+342 332 4.79443e+011
+593 101 4.79308e+011
+295 127 4.79106e+011
+264 309 4.78995e+011
+326 29 4.78674e+011
+260 457 4.7821e+011
+247 256 4.78151e+011
+143 177 4.78024e+011
+69 335 4.77988e+011
+248 182 4.77955e+011
+532 344 4.77748e+011
+433 226 4.77735e+011
+223 239 4.77556e+011
+173 343 4.77093e+011
+526 79 4.76873e+011
+57 371 4.76546e+011
+288 31 4.75691e+011
+327 319 4.75432e+011
+592 105 4.75283e+011
+245 187 4.75262e+011
+407 14 4.74926e+011
+470 117 4.7457e+011
+183 382 4.74426e+011
+301 130 4.74194e+011
+303 141 4.74133e+011
+142 115 4.73269e+011
+177 344 4.73173e+011
+228 147 4.72877e+011
+478 125 4.71939e+011
+482 367 4.71912e+011
+248 326 4.7184e+011
+509 300 4.7178e+011
+332 29 4.71701e+011
+192 186 4.71108e+011
+541 222 4.70497e+011
+9 234 4.7044e+011
+115 277 4.70258e+011
+343 312 4.68503e+011
+272 207 4.68287e+011
+357 63 4.67469e+011
+175 76 4.67293e+011
+524 399 4.66376e+011
+283 132 4.66192e+011
+471 212 4.65538e+011
+454 116 4.65052e+011
+502 156 4.64759e+011
+94 19 4.63998e+011
+150 303 4.63839e+011
+144 142 4.63502e+011
+169 148 4.62909e+011
+394 104 4.62678e+011
+356 265 4.62362e+011
+146 139 4.62292e+011
+38 270 4.62246e+011
+64 424 4.61744e+011
+205 345 4.61516e+011
+544 440 4.61452e+011
+366 94 4.61314e+011
+45 408 4.61046e+011
+340 260 4.60899e+011
+563 464 4.60796e+011
+188 265 4.60549e+011
+518 142 4.60188e+011
+336 144 4.60121e+011
+233 31 4.59996e+011
+158 258 4.59933e+011
+68 419 4.59713e+011
+125 306 4.59605e+011
+581 56 4.59548e+011
+263 284 4.57982e+011
+580 345 4.57793e+011
+66 306 4.57599e+011
+430 62 4.57158e+011
+296 269 4.5712e+011
+95 39 4.56879e+011
+158 101 4.56842e+011
+55 333 4.55771e+011
+218 423 4.55448e+011
+542 443 4.5478e+011
+323 11 4.54515e+011
+583 39 4.54348e+011
+81 73 4.54022e+011
+434 240 4.53258e+011
+418 448 4.5244e+011
+124 341 4.51827e+011
+186 290 4.51626e+011
+237 196 4.51585e+011
+547 439 4.51479e+011
+291 139 4.51309e+011
+453 5 4.50615e+011
+437 44 4.5039e+011
+584 140 4.50209e+011
+175 183 4.49664e+011
+107 304 4.49474e+011
+505 380 4.49173e+011
+214 400 4.49172e+011
+421 298 4.49115e+011
+42 122 4.4892e+011
+576 166 4.48487e+011
+413 246 4.48473e+011
+333 335 4.48405e+011
+330 334 4.47803e+011
+162 38 4.47774e+011
+17 434 4.47723e+011
+119 118 4.47042e+011
+163 62 4.46982e+011
+117 290 4.46937e+011
+433 2 4.46494e+011
+155 318 4.4636e+011
+370 465 4.46187e+011
+58 105 4.46085e+011
+6 234 4.45065e+011
+520 165 4.44939e+011
+298 87 4.44934e+011
+41 339 4.44255e+011
+450 198 4.44188e+011
+530 116 4.44045e+011
+351 333 4.43503e+011
+400 27 4.42956e+011
+44 253 4.42758e+011
+490 458 4.42235e+011
+343 142 4.42206e+011
+438 469 4.42178e+011
+272 204 4.41891e+011
+213 424 4.41599e+011
+419 412 4.41337e+011
+4 165 4.41319e+011
+147 136 4.40989e+011
+507 42 4.40884e+011
+449 23 4.40294e+011
+232 288 4.40079e+011
+420 363 4.40058e+011
+80 235 4.39586e+011
+400 427 4.39035e+011
+323 186 4.38905e+011
+417 255 4.38159e+011
+170 124 4.38055e+011
+333 180 4.37271e+011
+360 443 4.37093e+011
+361 451 4.36785e+011
+184 116 4.36547e+011
+569 181 4.36478e+011
+26 44 4.36473e+011
+105 432 4.36133e+011
+85 239 4.36048e+011
+401 126 4.35979e+011
+325 258 4.35619e+011
+409 108 4.35344e+011
+190 55 4.35154e+011
+451 360 4.35054e+011
+264 259 4.34919e+011
+405 108 4.34328e+011
+375 463 4.34264e+011
+83 170 4.3369e+011
+502 122 4.33248e+011
+341 297 4.33247e+011
+158 163 4.331e+011
+405 10 4.3244e+011
+151 76 4.32276e+011
+242 281 4.32028e+011
+209 125 4.31969e+011
+349 88 4.31957e+011
+520 162 4.31463e+011
+487 86 4.31449e+011
+305 209 4.30802e+011
+38 113 4.30512e+011
+515 325 4.30137e+011
+39 117 4.30137e+011
+135 59 4.28434e+011
+329 99 4.28161e+011
+163 431 4.27964e+011
+151 94 4.27665e+011
+32 45 4.27439e+011
+342 92 4.26996e+011
+296 200 4.26746e+011
+200 391 4.26096e+011
+57 368 4.25868e+011
+231 364 4.2564e+011
+170 451 4.24841e+011
+560 268 4.24752e+011
+254 191 4.24503e+011
+199 327 4.24251e+011
+198 198 4.23966e+011
+375 156 4.23783e+011
+10 73 4.23453e+011
+260 274 4.2311e+011
+498 473 4.22963e+011
+244 103 4.22884e+011
+419 95 4.22587e+011
+105 161 4.22276e+011
+205 403 4.21764e+011
+400 280 4.21309e+011
+195 199 4.21169e+011
+413 144 4.20711e+011
+191 292 4.20558e+011
+368 30 4.20227e+011
+529 137 4.20156e+011
+311 299 4.19763e+011
+558 60 4.19593e+011
+107 338 4.19143e+011
+478 143 4.18113e+011
+154 295 4.17947e+011
+142 429 4.17895e+011
+337 29 4.17529e+011
+165 38 4.17093e+011
+492 21 4.16828e+011
+377 145 4.16795e+011
+139 136 4.16714e+011
+498 342 4.16285e+011
+88 232 4.16131e+011
+293 294 4.15978e+011
+208 405 4.15717e+011
+85 234 4.15414e+011
+485 238 4.15397e+011
+600 365 4.15293e+011
+178 201 4.1513e+011
+121 149 4.15073e+011
+95 285 4.14426e+011
+217 433 4.1417e+011
+99 60 4.14156e+011
+197 343 4.13948e+011
+572 446 4.13569e+011
+448 62 4.13414e+011
+318 202 4.1326e+011
+387 101 4.13097e+011
+575 459 4.12574e+011
+538 223 4.12565e+011
+52 146 4.12257e+011
+579 245 4.11626e+011
+194 239 4.11456e+011
+94 367 4.11056e+011
+312 262 4.10859e+011
+424 100 4.10738e+011
+12 434 4.10314e+011
+266 20 4.1012e+011
+349 297 4.09853e+011
+50 375 4.09709e+011
+441 454 4.0947e+011
+212 96 4.09196e+011
+302 408 4.08492e+011
+381 352 4.08362e+011
+389 450 4.08196e+011
+402 44 4.07957e+011
+69 257 4.0784e+011
+155 447 4.07514e+011
+323 136 4.07097e+011
+434 108 4.0688e+011
+262 397 4.06686e+011
+547 281 4.06586e+011
+245 190 4.06029e+011
+291 264 4.05916e+011
+421 290 4.05845e+011
+382 47 4.05175e+011
+122 169 4.04723e+011
+277 426 4.04602e+011
+292 200 4.04532e+011
+374 105 4.04301e+011
+67 203 4.03991e+011
+158 313 4.03917e+011
+183 379 4.03722e+011
+510 113 4.03587e+011
+114 261 4.03459e+011
+501 420 4.03367e+011
+240 148 4.02009e+011
+90 372 4.01969e+011
+130 374 4.01744e+011
+426 106 4.01224e+011
+345 390 4.01059e+011
+25 255 4.00699e+011
+336 49 4.00425e+011
+168 416 4.00253e+011
+564 141 4.00229e+011
+232 155 3.99882e+011
+166 380 3.99632e+011
+165 308 3.99541e+011
+571 327 3.99537e+011
+50 167 3.99245e+011
+88 22 3.9881e+011
+101 96 3.98755e+011
+483 241 3.98675e+011
+58 171 3.98347e+011
+364 443 3.98298e+011
+300 444 3.98173e+011
+413 284 3.98167e+011
+94 124 3.98109e+011
+106 166 3.97836e+011
+358 178 3.97808e+011
+181 155 3.97348e+011
+567 201 3.96374e+011
+256 157 3.96358e+011
+292 51 3.96229e+011
+468 101 3.95984e+011
+282 215 3.95712e+011
+164 434 3.95603e+011
+498 462 3.95322e+011
+277 33 3.94924e+011
+579 309 3.94684e+011
+578 214 3.94624e+011
+522 361 3.94554e+011
+17 237 3.94514e+011
+302 404 3.94181e+011
+298 127 3.94026e+011
+579 140 3.92903e+011
+405 41 3.92026e+011
+349 392 3.91571e+011
+335 436 3.91466e+011
+532 173 3.91435e+011
+245 184 3.91392e+011
+94 388 3.91118e+011
+130 409 3.90723e+011
+520 97 3.90646e+011
+587 347 3.90081e+011
+64 313 3.89932e+011
+389 2 3.89649e+011
+545 86 3.89011e+011
+213 204 3.89009e+011
+446 416 3.88946e+011
+190 255 3.88358e+011
+343 315 3.88297e+011
+475 451 3.87637e+011
+345 331 3.87612e+011
+479 283 3.87557e+011
+186 349 3.87383e+011
+365 165 3.87259e+011
+283 84 3.87057e+011
+447 180 3.87046e+011
+124 412 3.86626e+011
+41 286 3.86474e+011
+137 124 3.86276e+011
+533 62 3.85973e+011
+166 133 3.85692e+011
+552 78 3.85519e+011
+125 328 3.84857e+011
+242 366 3.84835e+011
+374 451 3.84658e+011
+523 161 3.84449e+011
+587 161 3.84432e+011
+195 255 3.84189e+011
+339 63 3.83309e+011
+53 375 3.82911e+011
+142 99 3.82691e+011
+484 159 3.81934e+011
+205 397 3.81336e+011
+140 239 3.81147e+011
+416 415 3.81124e+011
+319 96 3.81071e+011
+266 418 3.80795e+011
+33 164 3.80741e+011
+331 282 3.80653e+011
+430 225 3.79898e+011
+448 258 3.7982e+011
+232 133 3.79542e+011
+509 380 3.79418e+011
+168 178 3.79389e+011
+518 83 3.78398e+011
+133 411 3.78313e+011
+406 96 3.77993e+011
+396 182 3.77571e+011
+150 137 3.7753e+011
+183 316 3.77278e+011
+191 306 3.76519e+011
+497 242 3.76384e+011
+258 133 3.76121e+011
+304 332 3.76102e+011
+217 400 3.75848e+011
+346 117 3.75176e+011
+117 263 3.75085e+011
+9 69 3.74938e+011
+431 81 3.74673e+011
+519 242 3.74385e+011
+152 57 3.74124e+011
+373 150 3.74044e+011
+4 33 3.73342e+011
+447 132 3.73188e+011
+414 219 3.72996e+011
+378 158 3.72606e+011
+563 71 3.72101e+011
+114 205 3.71094e+011
+393 182 3.70871e+011
+440 83 3.70808e+011
+552 19 3.7055e+011
+349 121 3.70149e+011
+571 459 3.70059e+011
+471 82 3.69911e+011
+206 415 3.69906e+011
+70 61 3.69668e+011
+524 141 3.68848e+011
+75 408 3.68679e+011
+434 25 3.68617e+011
+238 364 3.686e+011
+185 119 3.68303e+011
+130 477 3.68278e+011
+80 406 3.67481e+011
+45 203 3.67259e+011
+202 404 3.67002e+011
+286 246 3.6679e+011
+416 471 3.66601e+011
+205 33 3.66587e+011
+332 134 3.66388e+011
+62 285 3.66264e+011
+173 146 3.66218e+011
+445 247 3.66199e+011
+118 161 3.66126e+011
+124 148 3.66112e+011
+194 292 3.65752e+011
+256 458 3.65739e+011
+373 101 3.65601e+011
+87 355 3.65395e+011
+313 127 3.64878e+011
+175 142 3.64052e+011
+191 420 3.63667e+011
+419 415 3.63633e+011
+531 112 3.63601e+011
+239 243 3.63524e+011
+186 72 3.63507e+011
+106 262 3.63158e+011
+268 119 3.62498e+011
+326 345 3.62134e+011
+328 51 3.62104e+011
+510 376 3.62052e+011
+508 255 3.61931e+011
+35 45 3.61424e+011
+243 134 3.61275e+011
+414 222 3.61008e+011
+239 215 3.60931e+011
+535 342 3.60204e+011
+191 239 3.59887e+011
+185 161 3.59601e+011
+143 235 3.59248e+011
+523 165 3.59082e+011
+585 309 3.59054e+011
+345 343 3.59e+011
+470 433 3.58912e+011
+195 211 3.58833e+011
+220 286 3.58461e+011
+313 130 3.58434e+011
+159 277 3.5766e+011
+288 199 3.57627e+011
+112 307 3.57528e+011
+94 371 3.57416e+011
+264 240 3.57346e+011
+144 145 3.57288e+011
+262 271 3.57053e+011
+463 219 3.56992e+011
+402 98 3.55343e+011
+174 291 3.55022e+011
+181 259 3.54898e+011
+495 100 3.54293e+011
+283 332 3.53801e+011
+403 67 3.52791e+011
+209 317 3.52656e+011
+473 102 3.5258e+011
+458 115 3.52374e+011
+9 475 3.52264e+011
+424 172 3.51998e+011
+206 127 3.5176e+011
+379 451 3.51305e+011
+568 379 3.51272e+011
+20 317 3.50344e+011
+274 121 3.50021e+011
+563 154 3.4978e+011
+568 324 3.4976e+011
+546 340 3.49698e+011
+371 138 3.49648e+011
+437 228 3.49373e+011
+199 96 3.48943e+011
+461 304 3.48839e+011
+338 220 3.48621e+011
+383 451 3.4853e+011
+577 327 3.48489e+011
+489 469 3.48217e+011
+454 198 3.48096e+011
+217 169 3.47944e+011
+264 89 3.47925e+011
+302 440 3.47884e+011
+207 236 3.47598e+011
+92 282 3.47248e+011
+131 188 3.46886e+011
+174 129 3.46851e+011
+589 309 3.46834e+011
+250 246 3.46697e+011
+555 78 3.46211e+011
+46 92 3.46195e+011
+114 143 3.46088e+011
+278 88 3.45958e+011
+267 261 3.45875e+011
+433 295 3.45594e+011
+54 236 3.4559e+011
+147 191 3.45524e+011
+333 433 3.4523e+011
+400 130 3.45145e+011
+75 199 3.44724e+011
+376 128 3.44477e+011
+509 283 3.44476e+011
+493 469 3.44348e+011
+567 270 3.44196e+011
+64 11 3.4406e+011
+135 429 3.44027e+011
+156 299 3.43814e+011
+29 169 3.438e+011
+63 363 3.43583e+011
+485 235 3.43072e+011
+200 8 3.42454e+011
+571 203 3.42248e+011
+207 91 3.41711e+011
+55 330 3.4152e+011
+169 219 3.41394e+011
+122 222 3.41063e+011
+478 377 3.40751e+011
+171 170 3.40699e+011
+116 253 3.4049e+011
+133 477 3.40453e+011
+62 441 3.40374e+011
+44 88 3.40154e+011
+299 406 3.39051e+011
+451 181 3.39033e+011
+279 236 3.38839e+011
+432 270 3.38769e+011
+198 466 3.38308e+011
+206 38 3.38125e+011
+20 286 3.38064e+011
+538 178 3.37564e+011
+272 254 3.3741e+011
+447 323 3.37393e+011
+309 130 3.37217e+011
+487 118 3.37176e+011
+281 78 3.36797e+011
+255 406 3.36763e+011
+218 36 3.36748e+011
+509 442 3.36425e+011
+68 375 3.36405e+011
+440 87 3.35931e+011
+301 66 3.35889e+011
+71 389 3.35608e+011
+157 176 3.3519e+011
+397 92 3.35113e+011
+266 399 3.34982e+011
+213 326 3.34756e+011
+542 179 3.34256e+011
+79 217 3.34193e+011
+27 270 3.33943e+011
+308 164 3.33845e+011
+138 120 3.33661e+011
+483 221 3.33538e+011
+214 404 3.33526e+011
+519 361 3.33356e+011
+232 270 3.33208e+011
+118 218 3.32527e+011
+428 163 3.32472e+011
+57 234 3.32424e+011
+97 366 3.32024e+011
+580 327 3.3189e+011
+497 263 3.31615e+011
+36 76 3.31501e+011
+230 332 3.31489e+011
+276 78 3.31372e+011
+154 161 3.31101e+011
+187 256 3.311e+011
+349 107 3.30963e+011
+335 280 3.3087e+011
+202 366 3.30824e+011
+18 274 3.30558e+011
+51 230 3.30332e+011
+315 234 3.30203e+011
+268 192 3.30005e+011
+210 326 3.29986e+011
+487 202 3.2987e+011
+535 173 3.29706e+011
+51 39 3.29485e+011
+252 87 3.29471e+011
+590 347 3.29356e+011
+438 402 3.2893e+011
+343 307 3.28729e+011
+337 241 3.28573e+011
+268 137 3.28292e+011
+582 203 3.28266e+011
+336 446 3.27859e+011
+527 437 3.27446e+011
+489 162 3.27414e+011
+126 237 3.27056e+011
+200 5 3.26832e+011
+215 314 3.26786e+011
+1 378 3.26247e+011
+95 282 3.26187e+011
+97 456 3.26131e+011
+190 71 3.26098e+011
+102 295 3.25618e+011
+27 190 3.25546e+011
+269 413 3.25395e+011
+464 106 3.2534e+011
+49 227 3.25239e+011
+44 250 3.25208e+011
+442 320 3.25203e+011
+49 335 3.25112e+011
+525 280 3.24775e+011
+146 235 3.24609e+011
+542 82 3.24531e+011
+142 253 3.24368e+011
+355 449 3.23848e+011
+343 29 3.23709e+011
+489 54 3.23163e+011
+33 79 3.22894e+011
+39 314 3.22666e+011
+450 177 3.22266e+011
+477 220 3.22259e+011
+242 244 3.21996e+011
+411 338 3.21936e+011
+88 391 3.21474e+011
+352 365 3.21468e+011
+467 109 3.21333e+011
+304 355 3.21164e+011
+318 461 3.20343e+011
+455 141 3.20172e+011
+223 384 3.19838e+011
+372 78 3.19368e+011
+337 259 3.19241e+011
+157 23 3.19014e+011
+264 126 3.18913e+011
+135 165 3.18863e+011
+456 374 3.1854e+011
+262 453 3.18271e+011
+475 455 3.17949e+011
+557 265 3.1725e+011
+108 222 3.17048e+011
+527 431 3.1692e+011
+548 265 3.16885e+011
+7 162 3.16778e+011
+59 303 3.16345e+011
+296 256 3.162e+011
+159 104 3.16076e+011
+511 323 3.15995e+011
+92 320 3.15493e+011
+385 118 3.14592e+011
+563 79 3.14499e+011
+394 241 3.14394e+011
+442 380 3.14375e+011
+565 176 3.14296e+011
+306 259 3.14193e+011
+132 390 3.13985e+011
+59 335 3.13918e+011
+550 302 3.1368e+011
+547 301 3.13592e+011
+566 163 3.13185e+011
+264 109 3.1312e+011
+471 269 3.12698e+011
+14 236 3.1238e+011
+293 398 3.11667e+011
+60 164 3.1115e+011
+214 169 3.11148e+011
+485 224 3.11037e+011
+390 93 3.10857e+011
+75 377 3.10791e+011
+400 375 3.10596e+011
+514 400 3.10376e+011
+425 205 3.10248e+011
+211 201 3.10147e+011
+464 210 3.09954e+011
+402 15 3.09817e+011
+571 239 3.09495e+011
+403 27 3.0929e+011
+153 188 3.0928e+011
+446 437 3.09125e+011
+377 101 3.09021e+011
+285 78 3.08821e+011
+384 114 3.08235e+011
+35 335 3.07798e+011
+363 48 3.07794e+011
+344 321 3.07456e+011
+425 200 3.07172e+011
+92 338 3.07149e+011
+246 173 3.07143e+011
+349 367 3.07045e+011
+97 29 3.06803e+011
+492 25 3.06469e+011
+181 220 3.06278e+011
+373 414 3.05773e+011
+102 337 3.05741e+011
+208 314 3.05498e+011
+484 155 3.05413e+011
+574 100 3.04771e+011
+132 124 3.04762e+011
+439 319 3.04222e+011
+72 413 3.04208e+011
+407 279 3.04054e+011
+146 343 3.03741e+011
+120 341 3.03619e+011
+396 95 3.03428e+011
+182 57 3.03254e+011
+100 426 3.0299e+011
+68 389 3.0292e+011
+196 29 3.02368e+011
+437 140 3.02351e+011
+221 326 3.02167e+011
+410 222 3.02074e+011
+194 83 3.01883e+011
+248 392 3.01613e+011
+556 366 3.01542e+011
+206 75 3.01423e+011
+462 187 3.01313e+011
+298 130 3.01231e+011
+512 50 3.01137e+011
+41 204 3.0099e+011
+213 396 3.0015e+011
+176 326 2.99757e+011
+167 187 2.99576e+011
+238 294 2.99325e+011
+247 434 2.99257e+011
+332 62 2.99201e+011
+295 150 2.99088e+011
+350 275 2.99064e+011
+426 472 2.98604e+011
+431 25 2.98454e+011
+585 306 2.98403e+011
+395 130 2.98359e+011
+147 97 2.98333e+011
+309 53 2.98043e+011
+182 291 2.9798e+011
+535 178 2.97739e+011
+245 176 2.96916e+011
+469 356 2.96478e+011
+86 245 2.96416e+011
+255 403 2.9593e+011
+67 313 2.95638e+011
+541 370 2.95437e+011
+510 210 2.95428e+011
+117 304 2.95418e+011
+118 181 2.95272e+011
+334 465 2.94399e+011
+243 430 2.94216e+011
+400 140 2.94042e+011
+481 101 2.94038e+011
+234 296 2.9377e+011
+349 449 2.93619e+011
+72 377 2.9342e+011
+564 200 2.93287e+011
+73 154 2.9322e+011
+489 302 2.93041e+011
+524 95 2.92695e+011
+578 203 2.92572e+011
+52 171 2.92462e+011
+232 113 2.92259e+011
+54 352 2.92246e+011
+407 6 2.92144e+011
+510 246 2.91739e+011
+345 394 2.91503e+011
+427 140 2.91172e+011
+78 99 2.91151e+011
+233 406 2.91074e+011
+132 121 2.91046e+011
+364 98 2.91e+011
+490 136 2.90323e+011
+117 90 2.89808e+011
+152 37 2.89737e+011
+469 318 2.89723e+011
+455 61 2.8966e+011
+228 162 2.89633e+011
+48 422 2.89578e+011
+516 303 2.89526e+011
+182 287 2.89343e+011
+37 470 2.89307e+011
+210 395 2.88997e+011
+439 108 2.88962e+011
+292 373 2.88829e+011
+237 423 2.88284e+011
+555 223 2.8816e+011
+129 121 2.87918e+011
+524 241 2.87853e+011
+352 449 2.87853e+011
+425 25 2.8773e+011
+123 175 2.8769e+011
+27 439 2.87467e+011
+148 326 2.8728e+011
+157 39 2.87106e+011
+343 303 2.86387e+011
+552 119 2.86114e+011
+4 198 2.85992e+011
+273 198 2.85976e+011
+14 46 2.85597e+011
+513 106 2.85589e+011
+351 355 2.85402e+011
+361 89 2.85318e+011
+466 377 2.85237e+011
+284 312 2.85207e+011
+247 428 2.84893e+011
+132 63 2.84788e+011
+66 367 2.84474e+011
+148 145 2.84119e+011
+17 246 2.83992e+011
+493 225 2.83682e+011
+463 3 2.83612e+011
+517 99 2.83308e+011
+50 456 2.82863e+011
+449 90 2.82723e+011
+553 276 2.8247e+011
+550 139 2.81865e+011
+511 288 2.8135e+011
+505 403 2.81339e+011
+436 463 2.80734e+011
+83 115 2.80607e+011
+127 412 2.80574e+011
+40 253 2.80526e+011
+595 33 2.80522e+011
+574 97 2.8039e+011
+265 192 2.80199e+011
+134 253 2.79815e+011
+7 16 2.79811e+011
+230 50 2.79397e+011
+280 259 2.79261e+011
+287 444 2.79108e+011
+89 38 2.78999e+011
+298 91 2.78796e+011
+139 253 2.78791e+011
+188 260 2.78293e+011
+256 101 2.78172e+011
+91 113 2.7813e+011
+285 81 2.77746e+011
+35 389 2.775e+011
+58 330 2.77487e+011
+567 248 2.77297e+011
+231 192 2.77194e+011
+563 239 2.76889e+011
+101 292 2.76862e+011
+488 299 2.76558e+011
+94 113 2.76475e+011
+506 243 2.76122e+011
+328 96 2.75779e+011
+174 132 2.75504e+011
+298 411 2.75158e+011
+161 434 2.75142e+011
+606 122 2.74859e+011
+284 184 2.74789e+011
+251 321 2.74737e+011
+144 377 2.74567e+011
+95 357 2.74408e+011
+374 46 2.74306e+011
+116 258 2.74082e+011
+201 370 2.7361e+011
+68 404 2.73564e+011
+238 33 2.7352e+011
+142 257 2.73232e+011
+218 237 2.72759e+011
+108 161 2.7275e+011
+446 186 2.72322e+011
+602 276 2.72222e+011
+462 183 2.72145e+011
+68 358 2.72136e+011
+33 41 2.72066e+011
+466 213 2.7206e+011
+41 291 2.7195e+011
+438 387 2.71873e+011
+330 329 2.71751e+011
+566 358 2.71437e+011
+95 408 2.71339e+011
+574 363 2.70889e+011
+253 435 2.70698e+011
+61 437 2.70438e+011
+223 399 2.70369e+011
+344 187 2.69934e+011
+311 136 2.69909e+011
+295 130 2.6983e+011
+385 247 2.69706e+011
+61 453 2.69693e+011
+506 157 2.69252e+011
+354 64 2.6925e+011
+391 408 2.69182e+011
+272 413 2.68727e+011
+231 275 2.68725e+011
+455 177 2.68625e+011
+512 56 2.68435e+011
+513 442 2.68401e+011
+144 120 2.68058e+011
+306 94 2.67918e+011
+259 347 2.66747e+011
+373 94 2.66528e+011
+243 357 2.65994e+011
+234 333 2.65893e+011
+352 254 2.65533e+011
+311 101 2.6536e+011
+505 104 2.65336e+011
+501 242 2.65303e+011
+101 185 2.65237e+011
+497 359 2.65102e+011
+120 303 2.64998e+011
+38 275 2.6463e+011
+32 335 2.64441e+011
+589 102 2.64366e+011
+168 292 2.64353e+011
+231 189 2.64244e+011
+63 165 2.64126e+011
+463 227 2.63991e+011
+196 431 2.6385e+011
+340 442 2.63758e+011
+305 66 2.63552e+011
+181 237 2.63531e+011
+256 241 2.63291e+011
+450 293 2.63119e+011
+165 413 2.62786e+011
+552 265 2.62769e+011
+214 429 2.62758e+011
+543 277 2.62272e+011
+455 181 2.62167e+011
+189 270 2.61639e+011
+313 464 2.61579e+011
+155 153 2.6133e+011
+471 216 2.61177e+011
+299 282 2.61022e+011
+88 397 2.61004e+011
+36 255 2.60928e+011
+186 321 2.60916e+011
+346 327 2.60779e+011
+341 241 2.60721e+011
+62 446 2.60639e+011
+202 38 2.60472e+011
+418 376 2.60212e+011
+197 419 2.60034e+011
+59 424 2.59971e+011
+199 240 2.59719e+011
+281 312 2.59452e+011
+498 356 2.59398e+011
+94 363 2.59313e+011
+134 311 2.5901e+011
+127 407 2.58499e+011
+193 89 2.58085e+011
+182 412 2.58008e+011
+70 199 2.57855e+011
+138 316 2.5762e+011
+191 430 2.57536e+011
+504 459 2.57374e+011
+425 411 2.57259e+011
+376 281 2.57192e+011
+77 164 2.57143e+011
+498 320 2.57089e+011
+202 256 2.57063e+011
+120 90 2.56818e+011
+564 266 2.56803e+011
+513 403 2.56683e+011
+193 303 2.56386e+011
+413 432 2.56278e+011
+528 60 2.56184e+011
+394 118 2.55896e+011
+74 335 2.55846e+011
+228 155 2.55783e+011
+574 4 2.55724e+011
+282 442 2.55703e+011
+468 301 2.55642e+011
+577 90 2.5553e+011
+492 303 2.55517e+011
+332 407 2.55498e+011
+524 138 2.55217e+011
+141 316 2.55157e+011
+265 187 2.55131e+011
+130 398 2.54879e+011
+488 51 2.54738e+011
+378 95 2.54703e+011
+157 202 2.54637e+011
+290 423 2.54595e+011
+277 360 2.54488e+011
+214 237 2.54448e+011
+50 203 2.54345e+011
+68 355 2.54276e+011
+485 284 2.54269e+011
+210 218 2.54123e+011
+334 11 2.54046e+011
+276 254 2.53677e+011
+497 419 2.53583e+011
+247 53 2.5354e+011
+306 256 2.5282e+011
+323 96 2.5276e+011
+510 370 2.52749e+011
+11 138 2.5265e+011
+305 298 2.52634e+011
+308 429 2.52474e+011
+97 289 2.52398e+011
+423 106 2.52048e+011
+560 180 2.51947e+011
+221 457 2.51938e+011
+282 268 2.51691e+011
+60 176 2.51362e+011
+427 109 2.51233e+011
+91 345 2.51207e+011
+262 321 2.51197e+011
+478 291 2.51122e+011
+522 322 2.51074e+011
+336 443 2.51011e+011
+472 357 2.50989e+011
+265 303 2.50831e+011
+358 89 2.50781e+011
+497 363 2.50439e+011
+476 278 2.50024e+011
+89 321 2.49935e+011
+209 399 2.49326e+011
+152 318 2.49259e+011
+42 275 2.48862e+011
+19 322 2.48728e+011
+294 368 2.48589e+011
+184 270 2.48342e+011
+370 316 2.48237e+011
+488 132 2.47746e+011
+558 160 2.47614e+011
+317 404 2.47562e+011
+77 115 2.47393e+011
+10 163 2.47381e+011
+206 370 2.47302e+011
+553 279 2.47143e+011
+128 135 2.47097e+011
+420 205 2.47037e+011
+584 58 2.46984e+011
+442 359 2.46974e+011
+69 367 2.46906e+011
+105 390 2.46901e+011
+211 260 2.46881e+011
+154 165 2.46676e+011
+265 79 2.46493e+011
+136 187 2.46278e+011
+245 195 2.46065e+011
+154 215 2.45999e+011
+226 95 2.45823e+011
+324 350 2.45721e+011
+27 149 2.45627e+011
+375 235 2.45487e+011
+22 118 2.4537e+011
+439 357 2.45257e+011
+66 453 2.45238e+011
+500 181 2.45153e+011
+229 282 2.44939e+011
+160 223 2.44839e+011
+594 425 2.44808e+011
+217 396 2.44405e+011
+565 425 2.44401e+011
+7 138 2.44228e+011
+490 344 2.43941e+011
+79 150 2.43853e+011
+355 389 2.4378e+011
+171 76 2.4331e+011
+174 378 2.43201e+011
+397 118 2.43162e+011
+466 84 2.43159e+011
+55 137 2.42798e+011
+137 319 2.42591e+011
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_5_3.txt b/test_data/harriscorners/hc_msc_3.00_0.10_5_3.txt
new file mode 100644
index 0000000..c5c2d18
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_5_3.txt
@@ -0,0 +1,1438 @@
+1437
+499 1 5.56838e+015
+274 366 4.72135e+015
+245 95 4.51807e+015
+363 401 4.46607e+015
+449 298 4.09356e+015
+282 115 3.56796e+015
+122 44 3.44995e+015
+421 182 3.32527e+015
+507 122 3.18223e+015
+251 13 3.00727e+015
+426 320 2.98528e+015
+240 90 2.97706e+015
+387 178 2.96541e+015
+553 40 2.96376e+015
+447 397 2.84196e+015
+456 281 2.80019e+015
+213 72 2.72728e+015
+65 343 2.56846e+015
+200 18 2.52165e+015
+344 10 2.50168e+015
+435 68 2.49393e+015
+131 36 2.43764e+015
+321 313 2.43527e+015
+34 137 2.43461e+015
+223 38 2.42029e+015
+448 263 2.39266e+015
+480 298 2.39066e+015
+256 386 2.37685e+015
+135 215 2.3592e+015
+144 309 2.35294e+015
+221 16 2.2931e+015
+543 364 2.23627e+015
+110 238 2.21656e+015
+45 27 2.2156e+015
+303 183 2.15998e+015
+299 52 2.1546e+015
+183 401 2.13711e+015
+348 179 2.10095e+015
+412 256 2.06204e+015
+124 198 2.05709e+015
+385 221 2.0508e+015
+28 8 2.01656e+015
+535 242 1.96008e+015
+246 143 1.95346e+015
+125 255 1.87572e+015
+59 219 1.87452e+015
+465 394 1.87307e+015
+329 127 1.85485e+015
+271 166 1.85146e+015
+196 57 1.8383e+015
+390 58 1.82818e+015
+237 20 1.82689e+015
+64 235 1.80741e+015
+184 35 1.80624e+015
+130 2 1.80265e+015
+312 149 1.79093e+015
+102 4 1.74618e+015
+261 297 1.72225e+015
+173 312 1.71836e+015
+308 372 1.70106e+015
+420 178 1.66249e+015
+520 61 1.65454e+015
+2 47 1.65069e+015
+125 363 1.64638e+015
+242 203 1.62704e+015
+224 419 1.62185e+015
+510 173 1.61871e+015
+387 10 1.61622e+015
+37 62 1.61539e+015
+264 440 1.60141e+015
+449 219 1.59871e+015
+360 336 1.59803e+015
+320 224 1.59797e+015
+239 349 1.59583e+015
+418 440 1.58642e+015
+66 320 1.5835e+015
+508 18 1.58071e+015
+355 220 1.5772e+015
+159 143 1.56618e+015
+382 8 1.56351e+015
+417 7 1.55997e+015
+392 144 1.55118e+015
+412 162 1.53977e+015
+111 241 1.53321e+015
+361 131 1.52981e+015
+253 138 1.51425e+015
+411 355 1.51267e+015
+82 28 1.51047e+015
+262 165 1.50837e+015
+286 296 1.50208e+015
+483 339 1.50046e+015
+482 365 1.49697e+015
+359 294 1.49246e+015
+137 208 1.48624e+015
+91 198 1.48527e+015
+59 185 1.48357e+015
+432 146 1.47847e+015
+515 76 1.47064e+015
+282 403 1.46228e+015
+525 60 1.45816e+015
+77 256 1.4573e+015
+177 106 1.45526e+015
+225 221 1.44507e+015
+209 223 1.4411e+015
+247 92 1.43533e+015
+545 168 1.43519e+015
+387 295 1.43102e+015
+243 72 1.42775e+015
+462 279 1.42762e+015
+474 262 1.42698e+015
+425 376 1.39369e+015
+192 331 1.38536e+015
+271 71 1.3841e+015
+229 292 1.36253e+015
+513 340 1.359e+015
+402 122 1.35706e+015
+300 265 1.35575e+015
+562 478 1.35151e+015
+542 18 1.33794e+015
+127 76 1.32431e+015
+79 2 1.32157e+015
+112 393 1.32152e+015
+264 298 1.31208e+015
+498 82 1.30835e+015
+294 15 1.30224e+015
+140 184 1.29606e+015
+72 24 1.28176e+015
+71 148 1.27887e+015
+105 62 1.27839e+015
+545 217 1.27409e+015
+407 64 1.2729e+015
+101 58 1.26626e+015
+31 8 1.26245e+015
+355 320 1.25486e+015
+512 168 1.25345e+015
+203 310 1.24588e+015
+177 260 1.24434e+015
+35 146 1.24221e+015
+116 43 1.24145e+015
+132 26 1.23591e+015
+281 112 1.23511e+015
+372 163 1.23154e+015
+174 238 1.22905e+015
+233 162 1.22061e+015
+41 297 1.20772e+015
+113 213 1.20733e+015
+526 223 1.20592e+015
+364 298 1.20265e+015
+277 352 1.19515e+015
+296 420 1.19344e+015
+101 78 1.19209e+015
+271 278 1.18325e+015
+455 83 1.18236e+015
+275 181 1.18097e+015
+406 375 1.18083e+015
+291 16 1.1794e+015
+250 364 1.17831e+015
+283 71 1.17736e+015
+544 171 1.15974e+015
+550 379 1.15563e+015
+236 163 1.15314e+015
+177 93 1.15285e+015
+151 307 1.15271e+015
+48 99 1.15102e+015
+36 174 1.1495e+015
+4 66 1.14847e+015
+343 337 1.14829e+015
+326 426 1.14798e+015
+562 147 1.14622e+015
+100 221 1.14234e+015
+434 398 1.14117e+015
+304 216 1.13594e+015
+212 183 1.13524e+015
+46 219 1.13217e+015
+88 148 1.13056e+015
+359 260 1.13048e+015
+140 203 1.12949e+015
+11 101 1.12346e+015
+377 7 1.11966e+015
+426 119 1.11902e+015
+510 455 1.11815e+015
+216 279 1.11317e+015
+158 1 1.10749e+015
+524 20 1.10354e+015
+365 7 1.10299e+015
+300 177 1.0984e+015
+55 31 1.09777e+015
+114 344 1.09403e+015
+400 261 1.08867e+015
+421 334 1.0886e+015
+164 242 1.08238e+015
+395 260 1.08219e+015
+75 236 1.08094e+015
+477 12 1.07948e+015
+430 1 1.07809e+015
+542 210 1.07802e+015
+365 200 1.07452e+015
+471 240 1.07407e+015
+69 27 1.06905e+015
+95 446 1.06738e+015
+317 385 1.06304e+015
+525 345 1.06226e+015
+479 19 1.06212e+015
+273 130 1.0613e+015
+307 439 1.06088e+015
+281 51 1.05987e+015
+522 122 1.0587e+015
+48 26 1.0585e+015
+230 266 1.05706e+015
+182 111 1.0539e+015
+64 371 1.04856e+015
+522 263 1.0468e+015
+58 74 1.04451e+015
+166 96 1.0437e+015
+209 54 1.03919e+015
+367 144 1.03464e+015
+54 6 1.03302e+015
+484 59 1.0309e+015
+136 202 1.03049e+015
+233 15 1.02869e+015
+422 44 1.02763e+015
+224 183 1.02612e+015
+170 19 1.02552e+015
+87 78 1.02071e+015
+138 110 1.01929e+015
+38 296 1.01456e+015
+340 9 1.01193e+015
+339 164 1.00969e+015
+356 267 1.00662e+015
+302 206 1.00626e+015
+338 391 1.00501e+015
+92 214 1.00349e+015
+472 63 1.00089e+015
+526 101 1.00085e+015
+530 184 1.00003e+015
+162 213 9.93519e+014
+110 96 9.93004e+014
+387 242 9.92655e+014
+438 339 9.88284e+014
+338 473 9.88094e+014
+484 23 9.86236e+014
+453 340 9.85593e+014
+352 147 9.85141e+014
+28 236 9.81983e+014
+382 411 9.78013e+014
+449 403 9.76195e+014
+528 98 9.75657e+014
+345 109 9.7119e+014
+510 122 9.69157e+014
+301 164 9.69037e+014
+236 92 9.67759e+014
+538 95 9.65462e+014
+452 205 9.64741e+014
+91 291 9.62052e+014
+294 25 9.51766e+014
+173 94 9.50553e+014
+388 221 9.4678e+014
+528 361 9.44064e+014
+286 166 9.39409e+014
+72 97 9.39384e+014
+579 17 9.39068e+014
+451 376 9.38193e+014
+347 392 9.37303e+014
+46 147 9.37223e+014
+503 361 9.37064e+014
+514 223 9.35569e+014
+511 128 9.33918e+014
+345 241 9.30714e+014
+520 183 9.29056e+014
+219 291 9.27602e+014
+22 60 9.27353e+014
+324 341 9.2216e+014
+208 451 9.19936e+014
+74 6 9.18866e+014
+264 201 9.18741e+014
+230 36 9.17357e+014
+112 4 9.16355e+014
+421 6 9.10903e+014
+221 180 9.10118e+014
+139 173 9.08364e+014
+232 200 9.06017e+014
+55 66 9.05001e+014
+512 98 8.98034e+014
+169 55 8.9628e+014
+362 251 8.95191e+014
+244 165 8.94345e+014
+443 23 8.93422e+014
+124 272 8.92896e+014
+97 79 8.91606e+014
+32 218 8.91157e+014
+234 346 8.90652e+014
+358 168 8.90558e+014
+84 78 8.90108e+014
+78 196 8.86023e+014
+379 69 8.8261e+014
+187 99 8.80437e+014
+220 100 8.79688e+014
+94 217 8.76862e+014
+485 179 8.75185e+014
+37 138 8.73666e+014
+491 1 8.7328e+014
+370 107 8.72822e+014
+167 286 8.72496e+014
+191 359 8.72155e+014
+348 241 8.68819e+014
+380 26 8.68692e+014
+264 445 8.68482e+014
+44 81 8.64572e+014
+408 352 8.61888e+014
+357 335 8.61665e+014
+141 22 8.59754e+014
+128 164 8.59562e+014
+18 342 8.59223e+014
+276 221 8.58515e+014
+325 88 8.57478e+014
+507 164 8.55629e+014
+566 43 8.49293e+014
+365 251 8.46865e+014
+560 229 8.40927e+014
+299 70 8.4074e+014
+343 7 8.40377e+014
+137 98 8.39008e+014
+248 404 8.38357e+014
+57 364 8.37561e+014
+539 40 8.3737e+014
+176 39 8.3526e+014
+379 353 8.33296e+014
+329 9 8.32742e+014
+449 178 8.32148e+014
+228 184 8.28168e+014
+327 342 8.27097e+014
+167 325 8.26744e+014
+410 65 8.26621e+014
+210 445 8.23918e+014
+541 13 8.22283e+014
+246 294 8.19868e+014
+401 184 8.17146e+014
+59 216 8.1685e+014
+147 21 8.14177e+014
+32 100 8.12485e+014
+198 130 8.12158e+014
+63 60 8.11976e+014
+342 464 8.11894e+014
+545 57 8.10342e+014
+474 23 8.10268e+014
+512 125 8.08799e+014
+489 264 8.0679e+014
+180 394 8.06279e+014
+371 82 8.06064e+014
+55 28 8.04389e+014
+390 61 8.04348e+014
+163 276 8.03193e+014
+259 221 8.01976e+014
+49 153 8.01763e+014
+179 113 8.00717e+014
+270 62 8.00213e+014
+468 238 7.99174e+014
+452 337 7.98755e+014
+342 123 7.98503e+014
+163 207 7.97641e+014
+277 370 7.97151e+014
+274 281 7.9699e+014
+183 19 7.96927e+014
+478 16 7.95063e+014
+432 83 7.92601e+014
+131 148 7.91769e+014
+510 165 7.90432e+014
+527 39 7.87547e+014
+575 126 7.87363e+014
+278 145 7.85097e+014
+36 268 7.82071e+014
+481 179 7.81739e+014
+492 140 7.80903e+014
+140 325 7.79192e+014
+576 178 7.79178e+014
+316 336 7.79089e+014
+243 190 7.78825e+014
+214 56 7.783e+014
+329 66 7.78091e+014
+47 10 7.72714e+014
+146 160 7.69211e+014
+228 289 7.69177e+014
+108 45 7.65461e+014
+572 142 7.65418e+014
+273 297 7.64648e+014
+513 220 7.64604e+014
+144 187 7.63106e+014
+6 9 7.62711e+014
+136 128 7.5774e+014
+162 216 7.56773e+014
+333 89 7.56675e+014
+537 459 7.53941e+014
+441 98 7.53336e+014
+497 228 7.52685e+014
+329 254 7.52521e+014
+207 436 7.51649e+014
+546 41 7.50525e+014
+162 168 7.47331e+014
+391 47 7.47133e+014
+358 10 7.45804e+014
+482 327 7.4199e+014
+378 316 7.39319e+014
+334 435 7.39033e+014
+242 100 7.3893e+014
+37 288 7.38134e+014
+174 57 7.36093e+014
+259 71 7.33592e+014
+306 192 7.31362e+014
+465 197 7.301e+014
+448 138 7.30028e+014
+545 5 7.29725e+014
+344 197 7.27303e+014
+234 72 7.26946e+014
+108 324 7.26922e+014
+543 130 7.26518e+014
+365 259 7.25138e+014
+561 320 7.24038e+014
+36 201 7.23933e+014
+445 453 7.23332e+014
+82 136 7.21496e+014
+196 82 7.21387e+014
+363 182 7.20927e+014
+340 12 7.19618e+014
+490 342 7.18842e+014
+497 79 7.18242e+014
+389 139 7.17751e+014
+183 133 7.16431e+014
+103 359 7.15526e+014
+117 96 7.15375e+014
+479 294 7.1262e+014
+125 261 7.11905e+014
+416 23 7.11752e+014
+226 180 7.11167e+014
+371 393 7.10833e+014
+53 43 7.1031e+014
+360 217 7.0982e+014
+533 183 7.09102e+014
+324 164 7.09068e+014
+121 52 7.08336e+014
+313 85 7.06204e+014
+540 99 7.06135e+014
+419 163 7.05411e+014
+68 149 7.05404e+014
+422 398 7.04105e+014
+528 104 7.03537e+014
+254 422 7.03396e+014
+403 6 7.03042e+014
+358 143 7.02342e+014
+217 126 7.01674e+014
+164 359 6.99401e+014
+290 264 6.97372e+014
+531 22 6.94959e+014
+285 211 6.93219e+014
+262 391 6.90347e+014
+482 331 6.89981e+014
+512 295 6.88325e+014
+297 296 6.87029e+014
+260 273 6.85091e+014
+169 198 6.84484e+014
+292 311 6.84128e+014
+358 127 6.82317e+014
+481 82 6.80609e+014
+241 68 6.79381e+014
+307 448 6.78772e+014
+351 323 6.76762e+014
+516 348 6.73841e+014
+507 59 6.72349e+014
+351 320 6.72011e+014
+100 162 6.71511e+014
+270 66 6.69343e+014
+436 91 6.68664e+014
+117 76 6.68529e+014
+42 62 6.67878e+014
+331 107 6.67015e+014
+480 403 6.6693e+014
+259 236 6.65622e+014
+256 149 6.64066e+014
+49 159 6.64007e+014
+137 138 6.63451e+014
+87 209 6.62492e+014
+172 449 6.62328e+014
+165 217 6.62021e+014
+378 339 6.61983e+014
+271 289 6.61555e+014
+344 263 6.61148e+014
+40 217 6.60738e+014
+487 4 6.60434e+014
+569 39 6.58847e+014
+310 33 6.58053e+014
+353 127 6.57399e+014
+66 214 6.55058e+014
+508 5 6.54719e+014
+374 241 6.53932e+014
+516 17 6.53743e+014
+252 10 6.5361e+014
+153 222 6.52629e+014
+55 294 6.52368e+014
+260 142 6.51589e+014
+5 46 6.51057e+014
+253 74 6.49564e+014
+386 126 6.45942e+014
+210 154 6.44903e+014
+223 113 6.44225e+014
+80 474 6.43806e+014
+44 10 6.415e+014
+129 168 6.41108e+014
+506 203 6.40872e+014
+396 161 6.40088e+014
+108 183 6.395e+014
+84 476 6.39244e+014
+82 74 6.39233e+014
+86 255 6.39061e+014
+282 221 6.38845e+014
+509 361 6.38822e+014
+248 219 6.36946e+014
+255 182 6.35155e+014
+556 182 6.34929e+014
+236 221 6.33569e+014
+206 159 6.31697e+014
+64 218 6.29839e+014
+267 30 6.27034e+014
+211 33 6.26451e+014
+510 102 6.26191e+014
+537 186 6.25926e+014
+256 35 6.25321e+014
+141 2 6.24723e+014
+328 142 6.24693e+014
+240 421 6.2453e+014
+528 142 6.23682e+014
+367 247 6.21637e+014
+196 192 6.21379e+014
+107 40 6.21309e+014
+287 344 6.20711e+014
+103 392 6.14176e+014
+280 128 6.11732e+014
+151 114 6.11181e+014
+111 136 6.11011e+014
+458 265 6.09604e+014
+241 59 6.0957e+014
+479 263 6.0923e+014
+525 423 6.08629e+014
+289 212 6.07316e+014
+192 219 6.06778e+014
+141 394 6.05499e+014
+312 7 6.05123e+014
+513 121 6.02673e+014
+210 437 6.02332e+014
+544 91 6.01977e+014
+48 256 6.01554e+014
+190 146 6.01223e+014
+160 183 6.00166e+014
+267 296 5.99933e+014
+266 53 5.99547e+014
+110 265 5.99494e+014
+566 161 5.98555e+014
+111 40 5.98349e+014
+161 256 5.97145e+014
+412 23 5.96644e+014
+324 142 5.95855e+014
+406 122 5.94968e+014
+413 4 5.94706e+014
+93 254 5.92774e+014
+407 162 5.9178e+014
+386 162 5.89479e+014
+513 261 5.89213e+014
+159 112 5.88564e+014
+364 255 5.87749e+014
+205 162 5.87692e+014
+274 216 5.86871e+014
+390 19 5.859e+014
+317 148 5.85354e+014
+406 142 5.85352e+014
+42 339 5.81405e+014
+268 288 5.80948e+014
+274 76 5.80497e+014
+39 143 5.79951e+014
+216 176 5.78927e+014
+130 239 5.78688e+014
+474 202 5.78347e+014
+54 289 5.77182e+014
+213 123 5.77163e+014
+105 4 5.76787e+014
+498 160 5.74904e+014
+487 182 5.74412e+014
+65 252 5.73992e+014
+195 16 5.71706e+014
+422 323 5.71311e+014
+217 54 5.70915e+014
+357 282 5.70579e+014
+492 182 5.70576e+014
+528 188 5.69151e+014
+154 114 5.69078e+014
+250 313 5.68908e+014
+571 161 5.66865e+014
+29 29 5.66174e+014
+495 141 5.65975e+014
+561 60 5.64948e+014
+398 358 5.64675e+014
+3 382 5.64526e+014
+134 238 5.6331e+014
+546 182 5.63157e+014
+44 121 5.62764e+014
+597 272 5.61775e+014
+274 206 5.61544e+014
+436 386 5.61017e+014
+457 375 5.60005e+014
+362 360 5.59753e+014
+85 59 5.59127e+014
+403 265 5.59121e+014
+136 21 5.58909e+014
+406 199 5.58675e+014
+420 81 5.58415e+014
+113 356 5.58397e+014
+422 48 5.57313e+014
+502 143 5.57104e+014
+598 364 5.57017e+014
+271 241 5.56826e+014
+67 47 5.56797e+014
+398 169 5.56722e+014
+507 14 5.56321e+014
+42 24 5.56257e+014
+376 84 5.55385e+014
+572 328 5.55381e+014
+127 186 5.54993e+014
+189 205 5.54913e+014
+514 382 5.54372e+014
+96 125 5.5297e+014
+494 455 5.52933e+014
+259 201 5.52589e+014
+306 362 5.52497e+014
+220 149 5.52428e+014
+298 332 5.52158e+014
+179 274 5.5213e+014
+332 130 5.51304e+014
+275 319 5.51212e+014
+292 29 5.50891e+014
+128 95 5.4954e+014
+429 88 5.49432e+014
+308 8 5.49194e+014
+419 167 5.4914e+014
+549 59 5.48482e+014
+177 18 5.47392e+014
+58 253 5.4665e+014
+538 121 5.46341e+014
+542 42 5.46232e+014
+362 397 5.46011e+014
+403 188 5.45995e+014
+182 380 5.45943e+014
+366 2 5.45126e+014
+525 381 5.43521e+014
+281 132 5.43182e+014
+560 81 5.42541e+014
+313 222 5.42403e+014
+45 131 5.42012e+014
+86 214 5.41899e+014
+413 299 5.41608e+014
+125 40 5.41303e+014
+535 393 5.41193e+014
+266 14 5.39339e+014
+241 97 5.38935e+014
+526 398 5.38101e+014
+317 107 5.38039e+014
+85 197 5.38037e+014
+540 165 5.37829e+014
+64 276 5.37146e+014
+477 182 5.36888e+014
+425 334 5.36694e+014
+313 75 5.35523e+014
+362 370 5.35248e+014
+507 2 5.35053e+014
+437 303 5.34067e+014
+432 268 5.33778e+014
+287 33 5.33543e+014
+265 260 5.33127e+014
+9 476 5.3242e+014
+558 19 5.32081e+014
+120 4 5.32026e+014
+467 125 5.30285e+014
+556 244 5.28553e+014
+332 295 5.28255e+014
+374 394 5.27614e+014
+282 135 5.27515e+014
+3 155 5.27468e+014
+396 104 5.26868e+014
+245 206 5.26259e+014
+12 80 5.25383e+014
+129 309 5.24495e+014
+568 383 5.24277e+014
+184 137 5.24251e+014
+236 130 5.23814e+014
+389 97 5.23506e+014
+272 53 5.23483e+014
+282 206 5.23248e+014
+289 167 5.22424e+014
+289 136 5.21323e+014
+45 407 5.21159e+014
+187 263 5.20429e+014
+368 337 5.18692e+014
+361 9 5.18636e+014
+126 251 5.18595e+014
+282 351 5.17372e+014
+572 449 5.17165e+014
+535 121 5.17127e+014
+167 238 5.1692e+014
+390 420 5.16423e+014
+479 451 5.16076e+014
+168 242 5.15999e+014
+505 381 5.15906e+014
+131 255 5.1444e+014
+5 63 5.13973e+014
+155 1 5.13723e+014
+541 123 5.11781e+014
+293 334 5.11777e+014
+274 369 5.11223e+014
+516 202 5.10032e+014
+474 4 5.09617e+014
+192 123 5.08364e+014
+393 217 5.07837e+014
+117 428 5.06787e+014
+327 320 5.06619e+014
+207 417 5.06514e+014
+192 171 5.06418e+014
+91 389 5.06133e+014
+466 40 5.04374e+014
+57 331 5.03396e+014
+33 172 5.03308e+014
+445 7 5.02973e+014
+369 162 5.02826e+014
+158 138 5.02766e+014
+77 81 5.02617e+014
+218 145 5.0236e+014
+101 236 5.01771e+014
+425 262 5.01737e+014
+65 363 5.01626e+014
+149 39 5.01541e+014
+451 101 5.01253e+014
+220 210 5.00728e+014
+277 137 5.00242e+014
+279 363 5.00012e+014
+144 327 4.99217e+014
+524 172 4.991e+014
+301 215 4.98928e+014
+413 66 4.98917e+014
+173 40 4.98258e+014
+132 129 4.97348e+014
+297 410 4.97009e+014
+269 105 4.9688e+014
+201 317 4.96688e+014
+246 106 4.96591e+014
+433 110 4.96555e+014
+67 337 4.96077e+014
+346 297 4.95589e+014
+531 103 4.94557e+014
+528 160 4.94342e+014
+74 186 4.94111e+014
+435 281 4.93992e+014
+58 372 4.93544e+014
+95 452 4.93065e+014
+262 217 4.92762e+014
+512 44 4.91199e+014
+533 340 4.90432e+014
+93 6 4.9005e+014
+507 455 4.89887e+014
+391 52 4.89175e+014
+279 222 4.87006e+014
+279 296 4.86664e+014
+166 20 4.86411e+014
+559 271 4.85557e+014
+133 427 4.85272e+014
+158 74 4.84318e+014
+249 32 4.842e+014
+391 324 4.83554e+014
+278 418 4.83177e+014
+418 68 4.83058e+014
+29 220 4.82879e+014
+46 90 4.82427e+014
+95 476 4.81821e+014
+33 268 4.81324e+014
+325 295 4.81134e+014
+500 42 4.81086e+014
+15 219 4.80647e+014
+51 61 4.80599e+014
+57 290 4.8058e+014
+190 276 4.80392e+014
+245 14 4.80157e+014
+229 347 4.78551e+014
+540 140 4.7845e+014
+565 463 4.77861e+014
+137 57 4.77725e+014
+303 180 4.77347e+014
+445 127 4.77295e+014
+553 383 4.76979e+014
+175 115 4.76675e+014
+513 401 4.76556e+014
+365 105 4.75822e+014
+320 119 4.75259e+014
+83 404 4.74548e+014
+412 220 4.74497e+014
+371 90 4.74023e+014
+178 164 4.72963e+014
+464 240 4.7156e+014
+205 202 4.71103e+014
+386 167 4.70684e+014
+208 421 4.70308e+014
+574 39 4.69667e+014
+475 245 4.69529e+014
+70 130 4.69093e+014
+179 103 4.68731e+014
+358 393 4.68241e+014
+157 55 4.68027e+014
+34 298 4.6776e+014
+299 399 4.66909e+014
+189 214 4.66687e+014
+177 331 4.66123e+014
+450 91 4.66073e+014
+475 342 4.65854e+014
+150 151 4.65669e+014
+471 122 4.65661e+014
+584 38 4.65427e+014
+162 74 4.65228e+014
+148 396 4.65046e+014
+329 212 4.63677e+014
+377 119 4.62908e+014
+22 219 4.62809e+014
+463 161 4.62266e+014
+433 317 4.62001e+014
+92 20 4.6089e+014
+336 426 4.60867e+014
+359 161 4.59094e+014
+157 93 4.58982e+014
+345 351 4.58316e+014
+68 304 4.58284e+014
+243 419 4.57651e+014
+417 450 4.57645e+014
+56 221 4.57495e+014
+529 32 4.56767e+014
+318 201 4.56284e+014
+100 199 4.56062e+014
+219 316 4.56054e+014
+71 410 4.55699e+014
+24 65 4.55171e+014
+199 110 4.54822e+014
+62 133 4.53891e+014
+388 282 4.53596e+014
+326 13 4.53019e+014
+104 430 4.5276e+014
+508 81 4.52634e+014
+153 217 4.52521e+014
+146 452 4.52172e+014
+323 260 4.51696e+014
+163 20 4.51322e+014
+364 357 4.51233e+014
+407 81 4.50957e+014
+157 318 4.50399e+014
+208 57 4.5023e+014
+451 263 4.50218e+014
+290 49 4.50184e+014
+569 203 4.49648e+014
+408 182 4.48e+014
+214 146 4.47659e+014
+45 97 4.47197e+014
+496 462 4.47009e+014
+89 376 4.45568e+014
+429 223 4.45423e+014
+152 1 4.45409e+014
+202 314 4.45305e+014
+110 168 4.44818e+014
+382 337 4.4478e+014
+203 258 4.44779e+014
+473 211 4.44427e+014
+512 95 4.43008e+014
+160 98 4.42986e+014
+136 176 4.42848e+014
+344 340 4.42203e+014
+288 396 4.41869e+014
+177 96 4.41725e+014
+161 238 4.415e+014
+449 23 4.41079e+014
+436 389 4.41002e+014
+203 18 4.39996e+014
+391 449 4.39995e+014
+282 393 4.39892e+014
+434 339 4.39785e+014
+109 358 4.39485e+014
+246 327 4.39266e+014
+393 165 4.38009e+014
+415 164 4.37924e+014
+487 261 4.37452e+014
+245 402 4.36369e+014
+481 182 4.36311e+014
+419 52 4.35402e+014
+469 417 4.35155e+014
+31 96 4.35007e+014
+13 206 4.34325e+014
+133 78 4.34129e+014
+439 64 4.33354e+014
+149 231 4.33229e+014
+410 99 4.32476e+014
+261 329 4.32465e+014
+156 307 4.31322e+014
+342 106 4.31019e+014
+222 239 4.30198e+014
+351 271 4.2976e+014
+34 235 4.29312e+014
+472 42 4.29265e+014
+105 198 4.29136e+014
+564 16 4.29081e+014
+408 45 4.28408e+014
+84 310 4.28401e+014
+537 103 4.28149e+014
+412 245 4.28034e+014
+500 224 4.27069e+014
+153 446 4.26986e+014
+278 367 4.26825e+014
+262 319 4.26492e+014
+300 246 4.26024e+014
+618 181 4.252e+014
+418 300 4.24781e+014
+181 398 4.24696e+014
+411 46 4.24571e+014
+446 376 4.2402e+014
+302 102 4.24017e+014
+130 78 4.21345e+014
+360 315 4.21242e+014
+61 181 4.20983e+014
+132 477 4.20909e+014
+424 163 4.20647e+014
+436 43 4.20397e+014
+293 120 4.19796e+014
+48 79 4.1896e+014
+382 162 4.18775e+014
+330 202 4.18666e+014
+267 132 4.18659e+014
+331 333 4.17306e+014
+379 107 4.16739e+014
+151 196 4.16661e+014
+404 13 4.15584e+014
+461 221 4.1521e+014
+107 58 4.149e+014
+571 333 4.14522e+014
+226 15 4.14253e+014
+523 39 4.14122e+014
+447 351 4.13663e+014
+318 311 4.13395e+014
+271 183 4.12434e+014
+306 355 4.1231e+014
+315 160 4.12181e+014
+189 107 4.11431e+014
+226 129 4.11369e+014
+187 182 4.11279e+014
+583 345 4.11165e+014
+393 222 4.09876e+014
+279 86 4.09836e+014
+117 132 4.0952e+014
+386 327 4.09398e+014
+117 360 4.09124e+014
+445 262 4.08974e+014
+44 476 4.08518e+014
+384 146 4.07911e+014
+257 140 4.06536e+014
+269 169 4.06529e+014
+81 39 4.06527e+014
+396 319 4.06471e+014
+59 28 4.06366e+014
+112 56 4.06319e+014
+268 69 4.05044e+014
+537 140 4.04257e+014
+261 34 4.04243e+014
+266 139 4.03685e+014
+316 167 4.03525e+014
+361 222 4.03086e+014
+16 215 4.02931e+014
+182 201 4.02789e+014
+256 405 4.0248e+014
+131 73 4.0213e+014
+358 64 4.02087e+014
+439 24 4.02047e+014
+447 145 4.0177e+014
+441 321 4.01027e+014
+88 354 4.00742e+014
+394 158 4.00684e+014
+247 346 4.00491e+014
+439 455 4.00413e+014
+9 76 3.99997e+014
+133 65 3.99743e+014
+530 366 3.99415e+014
+272 133 3.99352e+014
+263 311 3.99341e+014
+547 162 3.99135e+014
+447 244 3.98776e+014
+53 221 3.98444e+014
+436 87 3.98264e+014
+451 82 3.98182e+014
+211 21 3.97952e+014
+380 121 3.97514e+014
+549 223 3.9723e+014
+278 189 3.96629e+014
+107 96 3.96102e+014
+83 101 3.9593e+014
+18 236 3.95692e+014
+559 224 3.95657e+014
+321 10 3.95331e+014
+283 200 3.95091e+014
+579 52 3.94279e+014
+30 135 3.94225e+014
+365 86 3.93674e+014
+91 79 3.93178e+014
+561 71 3.92866e+014
+433 25 3.92647e+014
+415 83 3.92428e+014
+158 237 3.92124e+014
+496 120 3.90952e+014
+357 240 3.90919e+014
+257 88 3.90756e+014
+209 36 3.89694e+014
+439 149 3.89354e+014
+579 42 3.89165e+014
+234 261 3.88788e+014
+166 113 3.88772e+014
+272 414 3.87872e+014
+69 417 3.87737e+014
+128 40 3.87712e+014
+50 452 3.87373e+014
+464 24 3.87362e+014
+261 440 3.87245e+014
+508 84 3.87132e+014
+90 255 3.87125e+014
+129 429 3.87011e+014
+96 148 3.86929e+014
+390 296 3.86653e+014
+310 259 3.86422e+014
+522 141 3.86164e+014
+117 184 3.85378e+014
+210 395 3.85239e+014
+39 406 3.85214e+014
+469 140 3.84695e+014
+328 288 3.83354e+014
+122 446 3.82178e+014
+326 181 3.8177e+014
+181 291 3.81682e+014
+472 119 3.80335e+014
+257 250 3.80292e+014
+440 468 3.80048e+014
+172 37 3.79963e+014
+297 182 3.7985e+014
+393 317 3.79667e+014
+485 236 3.79342e+014
+311 298 3.79218e+014
+404 260 3.78399e+014
+400 319 3.781e+014
+79 273 3.77914e+014
+240 73 3.77553e+014
+549 183 3.77474e+014
+20 67 3.77341e+014
+259 370 3.77202e+014
+524 199 3.76677e+014
+220 107 3.7528e+014
+353 424 3.75258e+014
+100 95 3.7522e+014
+215 426 3.74476e+014
+251 152 3.74368e+014
+203 293 3.74131e+014
+177 180 3.74068e+014
+418 282 3.73532e+014
+175 2 3.73292e+014
+462 396 3.72224e+014
+33 65 3.72171e+014
+62 204 3.71991e+014
+76 270 3.71351e+014
+565 61 3.71249e+014
+135 134 3.71046e+014
+281 418 3.70052e+014
+38 169 3.70048e+014
+260 251 3.6985e+014
+49 164 3.69498e+014
+384 354 3.69278e+014
+579 79 3.69243e+014
+126 161 3.68664e+014
+500 318 3.68582e+014
+286 53 3.68156e+014
+485 327 3.67951e+014
+435 156 3.67759e+014
+289 349 3.67666e+014
+58 103 3.67281e+014
+88 261 3.67023e+014
+68 96 3.6701e+014
+333 412 3.6696e+014
+88 183 3.66913e+014
+203 396 3.66533e+014
+198 75 3.6604e+014
+449 167 3.65331e+014
+114 428 3.65312e+014
+498 67 3.64908e+014
+168 309 3.64574e+014
+86 370 3.64083e+014
+213 62 3.63619e+014
+153 225 3.63393e+014
+191 57 3.62986e+014
+433 241 3.62803e+014
+222 214 3.6269e+014
+247 317 3.62176e+014
+184 184 3.61645e+014
+536 80 3.61541e+014
+140 98 3.61233e+014
+157 200 3.60869e+014
+465 281 3.60659e+014
+84 3 3.59896e+014
+421 89 3.59268e+014
+516 120 3.58921e+014
+172 112 3.58751e+014
+533 161 3.58293e+014
+167 150 3.57543e+014
+149 399 3.57188e+014
+160 430 3.56674e+014
+310 90 3.56457e+014
+266 403 3.56343e+014
+48 458 3.56254e+014
+121 239 3.55763e+014
+277 140 3.55404e+014
+465 355 3.54731e+014
+487 205 3.54679e+014
+221 84 3.54428e+014
+384 258 3.54232e+014
+303 52 3.54099e+014
+189 202 3.53315e+014
+545 438 3.52905e+014
+39 355 3.52801e+014
+511 205 3.52375e+014
+386 63 3.51745e+014
+495 476 3.51286e+014
+203 347 3.50597e+014
+166 117 3.4966e+014
+32 112 3.48985e+014
+109 27 3.48824e+014
+165 378 3.4818e+014
+385 450 3.48056e+014
+193 111 3.47697e+014
+409 23 3.47586e+014
+310 334 3.47283e+014
+163 328 3.47182e+014
+473 355 3.47004e+014
+121 187 3.46884e+014
+180 106 3.46825e+014
+517 142 3.46785e+014
+433 278 3.46015e+014
+317 125 3.45448e+014
+532 19 3.45024e+014
+503 179 3.44944e+014
+296 165 3.44593e+014
+540 405 3.44295e+014
+153 57 3.44185e+014
+180 329 3.44151e+014
+527 395 3.4389e+014
+99 195 3.43691e+014
+548 44 3.43028e+014
+260 231 3.42666e+014
+555 264 3.42039e+014
+281 35 3.41743e+014
+575 98 3.41514e+014
+277 333 3.41391e+014
+569 183 3.41127e+014
+430 116 3.40977e+014
+218 182 3.40453e+014
+124 82 3.40167e+014
+136 92 3.40079e+014
+107 107 3.39934e+014
+181 33 3.39926e+014
+298 274 3.38975e+014
+197 148 3.38966e+014
+515 184 3.38204e+014
+210 187 3.38185e+014
+512 109 3.38046e+014
+39 241 3.37851e+014
+407 337 3.37744e+014
+113 262 3.37289e+014
+339 427 3.37222e+014
+35 99 3.37213e+014
+527 80 3.36913e+014
+144 432 3.36582e+014
+180 56 3.36349e+014
+239 195 3.36222e+014
+187 326 3.36064e+014
+245 385 3.36053e+014
+115 306 3.35958e+014
+375 341 3.3589e+014
+102 294 3.35716e+014
+159 90 3.3561e+014
+325 92 3.35569e+014
+503 161 3.35491e+014
+200 293 3.35233e+014
+289 89 3.35171e+014
+413 100 3.3503e+014
+399 67 3.34278e+014
+188 104 3.34242e+014
+512 83 3.34059e+014
+251 163 3.33432e+014
+535 18 3.33292e+014
+146 97 3.32842e+014
+106 77 3.32702e+014
+127 26 3.32665e+014
+475 339 3.32491e+014
+211 136 3.32203e+014
+175 109 3.31878e+014
+352 161 3.31754e+014
+317 224 3.30682e+014
+570 324 3.30452e+014
+51 290 3.30317e+014
+414 262 3.30009e+014
+322 29 3.29838e+014
+190 322 3.298e+014
+343 37 3.29737e+014
+416 86 3.29647e+014
+164 381 3.29267e+014
+497 224 3.29094e+014
+378 63 3.28431e+014
+384 243 3.28294e+014
+524 24 3.28226e+014
+411 183 3.28131e+014
+184 94 3.27881e+014
+86 365 3.27439e+014
+224 73 3.27369e+014
+191 189 3.26784e+014
+572 121 3.2663e+014
+500 420 3.26136e+014
+492 59 3.25899e+014
+487 43 3.25564e+014
+272 92 3.25481e+014
+358 52 3.2548e+014
+127 218 3.24999e+014
+486 264 3.24955e+014
+75 132 3.24848e+014
+534 92 3.24627e+014
+464 139 3.24486e+014
+484 361 3.243e+014
+219 35 3.24152e+014
+161 133 3.23862e+014
+126 308 3.23772e+014
+148 131 3.22839e+014
+77 77 3.22802e+014
+456 418 3.22546e+014
+243 209 3.22472e+014
+275 197 3.2234e+014
+142 239 3.20989e+014
+418 44 3.20985e+014
+408 185 3.20877e+014
+143 141 3.20876e+014
+301 86 3.20874e+014
+18 319 3.20594e+014
+482 164 3.20506e+014
+489 23 3.20346e+014
+109 428 3.20333e+014
+95 374 3.20006e+014
+113 176 3.19956e+014
+458 2 3.196e+014
+493 102 3.19341e+014
+201 21 3.19167e+014
+146 15 3.18577e+014
+93 95 3.18381e+014
+39 83 3.17815e+014
+363 407 3.17722e+014
+275 289 3.17605e+014
+375 282 3.17216e+014
+319 336 3.17103e+014
+549 282 3.17001e+014
+510 142 3.16994e+014
+336 317 3.16808e+014
+417 79 3.1679e+014
+222 153 3.16643e+014
+151 236 3.16433e+014
+540 263 3.16377e+014
+452 161 3.16232e+014
+472 421 3.16165e+014
+93 112 3.1615e+014
+131 217 3.16082e+014
+297 99 3.15844e+014
+449 64 3.15739e+014
+273 146 3.15724e+014
+161 31 3.157e+014
+59 79 3.15397e+014
+497 283 3.15327e+014
+573 423 3.15165e+014
+70 478 3.15042e+014
+101 362 3.14779e+014
+202 7 3.14778e+014
+395 23 3.14495e+014
+13 202 3.13716e+014
+421 315 3.13608e+014
+259 161 3.13598e+014
+211 95 3.1351e+014
+576 311 3.12601e+014
+416 377 3.12422e+014
+111 324 3.12336e+014
+281 386 3.1231e+014
+450 446 3.11839e+014
+419 362 3.11775e+014
+392 293 3.11552e+014
+356 107 3.11325e+014
+354 25 3.11322e+014
+569 420 3.11255e+014
+31 271 3.10878e+014
+247 258 3.10495e+014
+85 178 3.10111e+014
+592 107 3.098e+014
+572 384 3.09791e+014
+219 279 3.09737e+014
+360 242 3.0933e+014
+11 83 3.0909e+014
+266 118 3.08552e+014
+479 241 3.08204e+014
+52 359 3.08117e+014
+265 72 3.07768e+014
+90 321 3.0759e+014
+589 350 3.07321e+014
+531 398 3.07041e+014
+381 180 3.06615e+014
+340 220 3.06289e+014
+500 461 3.06104e+014
+422 63 3.0606e+014
+169 359 3.05755e+014
+377 461 3.05733e+014
+285 263 3.05266e+014
+215 149 3.05257e+014
+191 314 3.04993e+014
+191 17 3.04949e+014
+484 376 3.04906e+014
+494 164 3.04748e+014
+234 295 3.04622e+014
+37 182 3.04419e+014
+89 151 3.04235e+014
+331 219 3.0298e+014
+471 83 3.02978e+014
+187 292 3.02544e+014
+52 12 3.02537e+014
+119 425 3.02361e+014
+321 168 3.017e+014
+143 179 3.01538e+014
+523 186 3.01224e+014
+186 144 3.00764e+014
+232 274 3.00492e+014
+124 184 3.00039e+014
+475 161 2.99889e+014
+45 137 2.99847e+014
+554 379 2.99825e+014
+84 146 2.99752e+014
+484 153 2.99537e+014
+102 42 2.99281e+014
+199 328 2.99242e+014
+32 103 2.99116e+014
+344 166 2.98558e+014
+95 58 2.98229e+014
+209 203 2.97978e+014
+335 445 2.9792e+014
+113 205 2.97656e+014
+15 30 2.97329e+014
+518 164 2.9699e+014
+210 13 2.96976e+014
+84 289 2.96535e+014
+68 24 2.96117e+014
+546 262 2.9596e+014
+194 135 2.95919e+014
+575 141 2.95631e+014
+112 165 2.94737e+014
+238 190 2.94547e+014
+260 382 2.93758e+014
+539 220 2.93725e+014
+337 60 2.93397e+014
+164 202 2.93061e+014
+389 327 2.9279e+014
+471 4 2.92493e+014
+148 163 2.92357e+014
+371 87 2.92127e+014
+594 19 2.91797e+014
+308 147 2.91683e+014
+135 74 2.91631e+014
+221 339 2.91489e+014
+128 128 2.91424e+014
+202 219 2.91179e+014
+3 166 2.91143e+014
+11 114 2.9068e+014
+354 18 2.90585e+014
+427 63 2.90585e+014
+177 200 2.90438e+014
+64 448 2.90273e+014
+377 183 2.9019e+014
+94 260 2.89897e+014
+341 263 2.89812e+014
+388 203 2.89675e+014
+183 315 2.88786e+014
+283 79 2.88437e+014
+25 200 2.88121e+014
+463 123 2.88078e+014
+542 457 2.87877e+014
+468 423 2.87766e+014
+12 214 2.87683e+014
+161 128 2.87534e+014
+118 61 2.87288e+014
+350 338 2.87147e+014
+372 73 2.87064e+014
+539 126 2.86718e+014
+499 264 2.86705e+014
+285 403 2.86703e+014
+364 301 2.8666e+014
+383 325 2.86657e+014
+300 253 2.86346e+014
+395 48 2.86073e+014
+477 221 2.86052e+014
+334 143 2.85937e+014
+454 116 2.85901e+014
+290 248 2.85784e+014
+249 262 2.85462e+014
+466 102 2.85199e+014
+28 12 2.85081e+014
+38 308 2.84779e+014
+503 167 2.84367e+014
+177 75 2.83854e+014
+168 422 2.83422e+014
+95 422 2.8333e+014
+521 344 2.83315e+014
+277 330 2.83248e+014
+143 376 2.82613e+014
+350 363 2.82472e+014
+336 183 2.82363e+014
+292 182 2.82362e+014
+480 171 2.82098e+014
+227 258 2.81477e+014
+127 189 2.81459e+014
+108 260 2.81314e+014
+183 157 2.80891e+014
+44 152 2.80695e+014
+229 131 2.8056e+014
+222 430 2.79942e+014
+562 435 2.79892e+014
+23 331 2.7974e+014
+258 131 2.79659e+014
+591 103 2.79637e+014
+126 339 2.78841e+014
+440 241 2.78523e+014
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_5_5.txt b/test_data/harriscorners/hc_msc_3.00_0.10_5_5.txt
new file mode 100644
index 0000000..11c46c7
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_5_5.txt
@@ -0,0 +1,1292 @@
+1291
+244 94 3.12284e+016
+273 365 2.67744e+016
+237 19 2.15604e+016
+423 178 1.91173e+016
+362 401 1.84978e+016
+76 257 1.69449e+016
+423 181 1.66611e+016
+122 43 1.6497e+016
+261 297 1.60001e+016
+281 113 1.5962e+016
+543 365 1.59453e+016
+200 17 1.56676e+016
+448 297 1.54245e+016
+82 28 1.53752e+016
+420 181 1.51417e+016
+427 320 1.50018e+016
+65 343 1.48337e+016
+465 393 1.44678e+016
+447 397 1.42031e+016
+320 224 1.37774e+016
+343 9 1.37771e+016
+553 40 1.36802e+016
+131 36 1.36751e+016
+300 52 1.35633e+016
+214 72 1.34989e+016
+239 91 1.33171e+016
+360 295 1.32124e+016
+35 138 1.31018e+016
+507 122 1.30704e+016
+131 26 1.30566e+016
+27 9 1.29558e+016
+30 8 1.29145e+016
+59 218 1.26822e+016
+128 2 1.26592e+016
+37 62 1.23452e+016
+134 214 1.22783e+016
+252 13 1.22626e+016
+124 198 1.22449e+016
+387 178 1.21713e+016
+294 15 1.1689e+016
+195 57 1.15459e+016
+510 124 1.15253e+016
+81 4 1.11847e+016
+303 182 1.11431e+016
+257 385 1.11202e+016
+456 280 1.10684e+016
+125 364 1.10597e+016
+36 145 1.09697e+016
+387 10 1.08676e+016
+448 262 1.08133e+016
+33 99 1.07904e+016
+78 2 1.07333e+016
+222 38 1.06718e+016
+84 78 1.05559e+016
+263 441 1.05487e+016
+484 338 1.05019e+016
+116 44 1.04299e+016
+435 67 1.02872e+016
+127 165 1.01312e+016
+242 71 1.01137e+016
+544 168 1.00891e+016
+243 202 1.00882e+016
+46 27 9.83315e+015
+124 254 9.82909e+015
+101 222 9.79359e+015
+390 58 9.66299e+015
+225 420 9.50941e+015
+138 203 9.49257e+015
+513 341 9.48392e+015
+452 339 9.42374e+015
+426 119 9.39205e+015
+329 128 9.33812e+015
+343 338 9.24954e+015
+152 223 9.21555e+015
+418 440 9.19639e+015
+412 256 9.09439e+015
+529 24 9.07899e+015
+511 167 8.94628e+015
+308 371 8.82072e+015
+55 29 8.78952e+015
+253 139 8.75676e+015
+485 59 8.72079e+015
+556 40 8.60403e+015
+138 110 8.51002e+015
+144 310 8.43191e+015
+183 400 8.34549e+015
+320 313 8.30478e+015
+142 324 8.28346e+015
+475 262 8.27e+015
+480 297 8.25996e+015
+404 121 8.21843e+015
+510 173 8.1994e+015
+519 61 8.17303e+015
+64 236 8.14732e+015
+214 58 8.13722e+015
+41 63 8.12907e+015
+363 251 8.07731e+015
+48 99 8.01496e+015
+92 198 7.9929e+015
+470 239 7.97608e+015
+110 240 7.96261e+015
+361 131 7.96147e+015
+360 335 7.89115e+015
+301 165 7.85331e+015
+177 106 7.83729e+015
+484 179 7.79783e+015
+2 47 7.78356e+015
+302 215 7.74286e+015
+545 41 7.65114e+015
+216 279 7.61522e+015
+543 15 7.61487e+015
+210 435 7.61377e+015
+184 36 7.59651e+015
+260 222 7.50801e+015
+461 279 7.47567e+015
+123 185 7.46356e+015
+57 5 7.42726e+015
+359 260 7.42492e+015
+181 111 7.41963e+015
+371 162 7.30738e+015
+391 144 7.2543e+015
+41 217 7.24849e+015
+104 62 7.2381e+015
+245 143 7.23307e+015
+207 450 7.22425e+015
+418 8 7.20432e+015
+431 147 7.20143e+015
+160 143 7.18947e+015
+386 220 7.17099e+015
+88 148 7.16867e+015
+221 16 7.12851e+015
+433 112 7.10053e+015
+10 101 7.09044e+015
+112 392 7.08718e+015
+225 182 7.08097e+015
+542 210 7.06042e+015
+348 179 6.99798e+015
+163 277 6.99664e+015
+545 59 6.99224e+015
+508 18 6.9895e+015
+311 150 6.98075e+015
+234 346 6.98009e+015
+283 72 6.97713e+015
+509 455 6.97439e+015
+102 59 6.96014e+015
+498 159 6.95511e+015
+100 78 6.94852e+015
+239 202 6.94098e+015
+410 65 6.92944e+015
+151 307 6.91044e+015
+71 147 6.88948e+015
+86 255 6.84398e+015
+283 403 6.83942e+015
+325 341 6.78802e+015
+252 423 6.78437e+015
+527 99 6.76557e+015
+246 90 6.75929e+015
+533 184 6.75511e+015
+70 25 6.75164e+015
+137 207 6.74857e+015
+230 36 6.73446e+015
+4 65 6.71585e+015
+515 76 6.71112e+015
+382 6 6.70983e+015
+244 165 6.69562e+015
+528 102 6.68506e+015
+480 179 6.68462e+015
+522 62 6.67948e+015
+356 220 6.67538e+015
+524 20 6.67365e+015
+579 16 6.67048e+015
+234 162 6.64545e+015
+96 446 6.62884e+015
+421 335 6.60663e+015
+351 321 6.57917e+015
+92 214 6.55702e+015
+410 353 6.55117e+015
+221 180 6.5489e+015
+65 319 6.53552e+015
+163 214 6.51513e+015
+169 57 6.49817e+015
+62 60 6.45268e+015
+60 183 6.43825e+015
+425 377 6.43498e+015
+407 64 6.42618e+015
+387 294 6.42215e+015
+207 224 6.40102e+015
+78 80 6.34539e+015
+55 290 6.33692e+015
+286 297 6.32815e+015
+325 164 6.29059e+015
+36 176 6.27629e+015
+365 143 6.27363e+015
+138 173 6.26644e+015
+211 185 6.26083e+015
+209 55 6.23447e+015
+36 173 6.22659e+015
+261 165 6.21033e+015
+354 321 6.20021e+015
+170 18 6.14503e+015
+174 40 6.1051e+015
+82 135 6.07199e+015
+368 144 6.07063e+015
+313 84 6.04247e+015
+271 279 6.0079e+015
+102 4 5.97459e+015
+383 9 5.95374e+015
+386 243 5.94366e+015
+51 98 5.94087e+015
+390 295 5.93483e+015
+78 28 5.92853e+015
+511 128 5.90705e+015
+229 292 5.89108e+015
+363 7 5.85248e+015
+106 39 5.84732e+015
+66 214 5.84243e+015
+453 204 5.82492e+015
+210 451 5.82333e+015
+358 128 5.81889e+015
+276 352 5.81691e+015
+211 438 5.81204e+015
+293 26 5.76727e+015
+479 262 5.76135e+015
+40 296 5.75248e+015
+175 94 5.74873e+015
+31 270 5.72702e+015
+37 218 5.69231e+015
+434 398 5.67552e+015
+174 312 5.66837e+015
+177 260 5.66762e+015
+530 185 5.66369e+015
+449 218 5.66297e+015
+476 21 5.63224e+015
+271 166 5.63045e+015
+49 151 5.62208e+015
+327 141 5.62081e+015
+497 81 5.61988e+015
+395 261 5.59833e+015
+55 66 5.58857e+015
+338 12 5.57577e+015
+399 262 5.55614e+015
+522 264 5.54508e+015
+540 13 5.52857e+015
+412 162 5.52691e+015
+75 6 5.51982e+015
+346 240 5.50859e+015
+212 182 5.49953e+015
+300 265 5.49744e+015
+95 477 5.48893e+015
+326 425 5.48215e+015
+466 196 5.47849e+015
+266 296 5.46651e+015
+515 347 5.46224e+015
+37 296 5.44544e+015
+511 220 5.41766e+015
+535 241 5.40878e+015
+325 88 5.3875e+015
+102 360 5.37628e+015
+355 268 5.37586e+015
+220 290 5.37274e+015
+332 295 5.37234e+015
+92 292 5.35542e+015
+246 206 5.34606e+015
+166 97 5.34457e+015
+512 99 5.33689e+015
+47 11 5.32542e+015
+276 180 5.30736e+015
+309 7 5.30553e+015
+209 20 5.30102e+015
+100 198 5.29855e+015
+154 236 5.29819e+015
+202 314 5.29148e+015
+471 421 5.29035e+015
+108 45 5.28056e+015
+167 326 5.27949e+015
+378 7 5.27461e+015
+494 140 5.26842e+015
+324 315 5.26576e+015
+537 393 5.24359e+015
+123 272 5.23541e+015
+527 361 5.23405e+015
+47 147 5.23331e+015
+59 75 5.19079e+015
+163 74 5.1905e+015
+541 123 5.17912e+015
+228 185 5.16576e+015
+250 365 5.16017e+015
+32 66 5.14594e+015
+271 290 5.14513e+015
+317 312 5.12746e+015
+264 446 5.12719e+015
+226 221 5.11374e+015
+113 345 5.07233e+015
+523 123 5.05569e+015
+141 394 5.04063e+015
+422 48 5.01349e+015
+207 435 5.00539e+015
+358 10 4.97917e+015
+508 5 4.97048e+015
+167 286 4.96279e+015
+363 297 4.94868e+015
+345 350 4.93264e+015
+265 31 4.9139e+015
+344 263 4.90335e+015
+256 149 4.90132e+015
+366 7 4.89945e+015
+278 144 4.89287e+015
+544 4 4.86873e+015
+238 349 4.86092e+015
+168 197 4.85856e+015
+345 108 4.83836e+015
+18 343 4.82591e+015
+110 135 4.82124e+015
+141 183 4.81119e+015
+306 440 4.8109e+015
+408 183 4.80359e+015
+333 90 4.7874e+015
+58 29 4.786e+015
+403 265 4.78066e+015
+165 243 4.75923e+015
+178 94 4.75858e+015
+423 398 4.75347e+015
+313 76 4.7502e+015
+332 127 4.73291e+015
+482 366 4.73216e+015
+110 95 4.72152e+015
+220 150 4.68263e+015
+6 10 4.67342e+015
+476 5 4.66944e+015
+157 73 4.66489e+015
+488 263 4.65369e+015
+416 23 4.64823e+015
+53 43 4.6413e+015
+406 198 4.63975e+015
+62 203 4.6383e+015
+542 132 4.6365e+015
+164 358 4.63509e+015
+21 61 4.62965e+015
+287 165 4.61015e+015
+180 394 4.60211e+015
+13 218 4.57959e+015
+444 452 4.57771e+015
+61 134 4.56429e+015
+273 131 4.55861e+015
+84 2 4.55773e+015
+390 48 4.55132e+015
+524 346 4.53135e+015
+259 237 4.52962e+015
+135 129 4.52556e+015
+484 23 4.52187e+015
+478 15 4.51677e+015
+44 97 4.5096e+015
+94 217 4.50103e+015
+371 90 4.49466e+015
+280 50 4.47556e+015
+59 40 4.47306e+015
+365 105 4.47303e+015
+567 43 4.47247e+015
+413 299 4.46969e+015
+330 9 4.46261e+015
+350 145 4.45595e+015
+456 84 4.45341e+015
+442 23 4.45045e+015
+381 26 4.44114e+015
+424 44 4.4403e+015
+403 187 4.4374e+015
+221 177 4.4346e+015
+192 330 4.43128e+015
+233 199 4.41398e+015
+57 364 4.41267e+015
+174 239 4.41214e+015
+520 184 4.40034e+015
+138 98 4.37325e+015
+46 82 4.37099e+015
+542 129 4.36947e+015
+362 395 4.36905e+015
+482 328 4.365e+015
+233 14 4.36155e+015
+68 337 4.35603e+015
+382 412 4.34545e+015
+44 62 4.34366e+015
+270 71 4.30133e+015
+117 76 4.28889e+015
+338 473 4.2814e+015
+490 139 4.2715e+015
+28 30 4.26158e+015
+141 22 4.2611e+015
+513 262 4.25399e+015
+159 138 4.25397e+015
+126 76 4.25304e+015
+436 303 4.24475e+015
+64 371 4.23811e+015
+438 339 4.23157e+015
+202 311 4.22878e+015
+195 125 4.21455e+015
+364 181 4.2125e+015
+305 193 4.21245e+015
+273 296 4.19526e+015
+408 45 4.19315e+015
+334 436 4.19005e+015
+364 254 4.1879e+015
+31 135 4.16883e+015
+245 293 4.16275e+015
+249 423 4.15006e+015
+248 316 4.14921e+015
+85 214 4.14445e+015
+328 89 4.13638e+015
+452 376 4.1312e+015
+32 218 4.12658e+015
+565 160 4.1221e+015
+448 166 4.11015e+015
+297 331 4.10369e+015
+298 69 4.10191e+015
+190 205 4.09628e+015
+268 53 4.0925e+015
+346 298 4.08671e+015
+42 339 4.08376e+015
+328 297 4.0832e+015
+338 391 4.08138e+015
+41 10 4.06881e+015
+272 53 4.06073e+015
+29 237 4.05677e+015
+393 216 4.04677e+015
+423 332 4.04458e+015
+417 84 4.04177e+015
+317 335 4.04015e+015
+393 66 4.0396e+015
+71 96 4.03686e+015
+325 294 4.03516e+015
+478 12 4.01652e+015
+36 201 4.00985e+015
+192 219 3.99364e+015
+190 216 3.98225e+015
+260 71 3.97637e+015
+277 222 3.9656e+015
+502 143 3.96454e+015
+332 131 3.96427e+015
+389 140 3.9606e+015
+525 39 3.96056e+015
+341 122 3.96052e+015
+174 19 3.95447e+015
+328 253 3.94975e+015
+357 282 3.94368e+015
+113 212 3.94142e+015
+306 363 3.94026e+015
+576 179 3.93781e+015
+259 35 3.92968e+015
+84 477 3.92511e+015
+127 187 3.92325e+015
+253 10 3.91867e+015
+374 393 3.91014e+015
+156 94 3.90733e+015
+223 218 3.89064e+015
+42 24 3.8853e+015
+302 205 3.8837e+015
+405 375 3.87612e+015
+418 164 3.87401e+015
+525 423 3.86885e+015
+205 160 3.86817e+015
+539 405 3.86235e+015
+191 360 3.86158e+015
+46 220 3.85898e+015
+562 146 3.85467e+015
+120 51 3.84922e+015
+359 167 3.84727e+015
+65 322 3.84394e+015
+79 197 3.84065e+015
+519 263 3.83737e+015
+193 16 3.83564e+015
+160 183 3.83561e+015
+538 97 3.81172e+015
+489 43 3.8101e+015
+449 445 3.79695e+015
+141 2 3.79638e+015
+471 212 3.78854e+015
+397 265 3.78655e+015
+132 132 3.78377e+015
+114 3 3.77946e+015
+96 79 3.77287e+015
+46 355 3.76477e+015
+377 119 3.75862e+015
+480 82 3.75433e+015
+198 131 3.74644e+015
+191 146 3.74472e+015
+329 12 3.74267e+015
+571 450 3.73902e+015
+301 178 3.73882e+015
+525 172 3.72826e+015
+360 217 3.72313e+015
+275 329 3.71808e+015
+550 378 3.71594e+015
+337 9 3.70648e+015
+364 258 3.70107e+015
+378 67 3.70069e+015
+386 326 3.69908e+015
+573 141 3.695e+015
+307 449 3.69414e+015
+561 224 3.68678e+015
+459 266 3.68136e+015
+146 160 3.67597e+015
+126 96 3.67451e+015
+420 44 3.67362e+015
+281 222 3.6727e+015
+511 83 3.67185e+015
+262 201 3.67066e+015
+249 403 3.66911e+015
+374 240 3.66486e+015
+154 114 3.65039e+015
+287 210 3.64645e+015
+411 44 3.64617e+015
+446 7 3.64108e+015
+185 20 3.63894e+015
+53 221 3.6321e+015
+527 222 3.62783e+015
+283 52 3.62644e+015
+279 128 3.62603e+015
+125 261 3.62056e+015
+436 320 3.61829e+015
+163 168 3.61052e+015
+407 353 3.60689e+015
+249 219 3.60647e+015
+342 107 3.60281e+015
+325 91 3.59401e+015
+502 160 3.59135e+015
+297 420 3.58787e+015
+517 58 3.5855e+015
+70 476 3.58443e+015
+166 239 3.58164e+015
+58 290 3.57707e+015
+160 111 3.57504e+015
+105 199 3.57171e+015
+360 220 3.56646e+015
+172 94 3.56561e+015
+475 246 3.56538e+015
+547 161 3.56434e+015
+269 67 3.55874e+015
+388 15 3.54757e+015
+340 165 3.53918e+015
+530 144 3.53245e+015
+175 113 3.53169e+015
+476 341 3.52625e+015
+471 83 3.51861e+015
+64 218 3.50578e+015
+248 313 3.50565e+015
+47 132 3.50539e+015
+214 124 3.50142e+015
+453 102 3.49293e+015
+90 376 3.48563e+015
+509 1 3.48143e+015
+549 59 3.47653e+015
+129 168 3.4729e+015
+490 59 3.46861e+015
+327 182 3.46578e+015
+470 122 3.46265e+015
+44 9 3.45712e+015
+102 235 3.45277e+015
+268 289 3.43137e+015
+403 261 3.43098e+015
+389 97 3.42959e+015
+541 100 3.42897e+015
+78 41 3.42637e+015
+543 457 3.42583e+015
+387 126 3.42331e+015
+246 399 3.42023e+015
+328 65 3.40896e+015
+578 43 3.40589e+015
+561 227 3.40178e+015
+188 264 3.39854e+015
+516 18 3.39805e+015
+163 208 3.39688e+015
+120 447 3.39648e+015
+39 355 3.39511e+015
+220 100 3.39477e+015
+182 380 3.39106e+015
+512 296 3.38459e+015
+163 96 3.38025e+015
+361 369 3.37581e+015
+228 128 3.37129e+015
+418 283 3.37097e+015
+161 20 3.36819e+015
+38 168 3.36526e+015
+539 458 3.36213e+015
+345 276 3.36037e+015
+393 164 3.35387e+015
+133 93 3.33954e+015
+559 80 3.33063e+015
+151 114 3.329e+015
+56 222 3.32763e+015
+502 362 3.32397e+015
+584 38 3.32335e+015
+385 162 3.32051e+015
+498 224 3.31559e+015
+473 63 3.31525e+015
+13 101 3.30842e+015
+366 300 3.28856e+015
+95 6 3.28678e+015
+108 28 3.28549e+015
+282 393 3.2823e+015
+441 240 3.28055e+015
+118 425 3.2767e+015
+130 255 3.27471e+015
+156 318 3.27345e+015
+113 95 3.25635e+015
+561 320 3.2557e+015
+152 1 3.25074e+015
+378 340 3.25018e+015
+217 208 3.24968e+015
+514 120 3.24837e+015
+473 202 3.2445e+015
+384 258 3.2438e+015
+258 161 3.24125e+015
+217 146 3.23758e+015
+401 184 3.22288e+015
+279 366 3.22202e+015
+173 116 3.21759e+015
+270 365 3.21488e+015
+69 420 3.20581e+015
+221 432 3.20405e+015
+263 402 3.19395e+015
+130 72 3.18487e+015
+363 358 3.18483e+015
+58 373 3.18351e+015
+78 270 3.18281e+015
+55 294 3.18216e+015
+79 474 3.1771e+015
+309 441 3.17356e+015
+480 451 3.15917e+015
+129 238 3.15762e+015
+274 215 3.15121e+015
+291 50 3.14881e+015
+180 165 3.14808e+015
+178 18 3.14218e+015
+364 200 3.14058e+015
+569 39 3.13791e+015
+204 16 3.13416e+015
+144 6 3.13008e+015
+377 318 3.1178e+015
+470 417 3.11058e+015
+110 264 3.09991e+015
+449 178 3.09417e+015
+573 405 3.09048e+015
+222 114 3.08033e+015
+210 33 3.07659e+015
+375 4 3.07586e+015
+395 318 3.0678e+015
+372 83 3.05328e+015
+439 25 3.04824e+015
+241 421 3.04807e+015
+16 216 3.04026e+015
+271 182 3.03636e+015
+565 463 3.03205e+015
+568 382 3.02802e+015
+44 474 3.01288e+015
+191 124 3.01052e+015
+558 462 3.00898e+015
+37 287 3.00853e+015
+254 75 3.00615e+015
+486 44 3.00288e+015
+257 250 2.99567e+015
+134 238 2.98783e+015
+354 25 2.98666e+015
+231 125 2.98653e+015
+298 275 2.98531e+015
+215 175 2.9816e+015
+188 145 2.97995e+015
+49 155 2.97787e+015
+25 64 2.97709e+015
+518 202 2.97327e+015
+109 169 2.97138e+015
+463 40 2.96488e+015
+404 181 2.96428e+015
+449 139 2.96233e+015
+131 476 2.9622e+015
+288 396 2.96141e+015
+406 80 2.96121e+015
+66 252 2.95899e+015
+120 54 2.95721e+015
+396 160 2.95717e+015
+169 243 2.95399e+015
+332 201 2.94982e+015
+52 12 2.94439e+015
+318 385 2.94426e+015
+250 32 2.93722e+015
+59 78 2.9363e+015
+358 64 2.93594e+015
+263 392 2.93365e+015
+246 106 2.9335e+015
+93 255 2.93279e+015
+57 254 2.92647e+015
+277 137 2.9131e+015
+132 148 2.91249e+015
+281 419 2.90305e+015
+107 428 2.90176e+015
+379 106 2.89808e+015
+164 19 2.89638e+015
+503 164 2.8908e+015
+132 75 2.88808e+015
+468 139 2.88215e+015
+573 422 2.88207e+015
+489 182 2.88079e+015
+460 44 2.88047e+015
+560 272 2.87883e+015
+165 110 2.87806e+015
+34 31 2.87553e+015
+432 269 2.87151e+015
+544 216 2.86895e+015
+395 105 2.86732e+015
+198 111 2.86573e+015
+35 134 2.86572e+015
+92 59 2.8651e+015
+280 132 2.86386e+015
+277 140 2.85996e+015
+87 369 2.85659e+015
+48 256 2.85634e+015
+479 402 2.85462e+015
+354 295 2.85327e+015
+379 337 2.85164e+015
+109 59 2.8506e+015
+95 94 2.8453e+015
+382 337 2.84298e+015
+101 164 2.84136e+015
+108 108 2.841e+015
+441 98 2.83703e+015
+265 15 2.8367e+015
+486 4 2.83414e+015
+359 143 2.83051e+015
+242 190 2.82936e+015
+514 382 2.82588e+015
+505 381 2.82384e+015
+506 164 2.82316e+015
+391 221 2.82214e+015
+398 168 2.81917e+015
+380 121 2.81416e+015
+294 269 2.80805e+015
+358 241 2.80506e+015
+144 17 2.80422e+015
+149 2 2.80235e+015
+398 357 2.8006e+015
+433 277 2.79525e+015
+39 83 2.79262e+015
+56 78 2.78977e+015
+289 349 2.78757e+015
+451 86 2.78052e+015
+243 168 2.77836e+015
+472 42 2.77662e+015
+463 23 2.77251e+015
+148 397 2.77083e+015
+73 23 2.76798e+015
+270 185 2.76652e+015
+106 98 2.76563e+015
+359 53 2.76548e+015
+152 196 2.76208e+015
+282 135 2.7596e+015
+297 182 2.7568e+015
+51 61 2.75228e+015
+570 182 2.75204e+015
+538 186 2.75038e+015
+290 166 2.74954e+015
+49 159 2.7484e+015
+160 96 2.74802e+015
+191 312 2.74203e+015
+166 312 2.74198e+015
+380 180 2.73469e+015
+256 35 2.73248e+015
+370 106 2.73124e+015
+467 124 2.7277e+015
+430 89 2.72705e+015
+599 364 2.72564e+015
+67 27 2.72262e+015
+261 218 2.72179e+015
+471 268 2.72107e+015
+552 384 2.71641e+015
+264 311 2.71263e+015
+145 187 2.71158e+015
+90 255 2.71101e+015
+284 199 2.70971e+015
+578 52 2.70684e+015
+18 236 2.70585e+015
+448 401 2.69862e+015
+84 145 2.69439e+015
+275 318 2.69083e+015
+367 337 2.68995e+015
+196 193 2.68537e+015
+507 60 2.68189e+015
+83 72 2.67987e+015
+343 198 2.67963e+015
+367 1 2.67729e+015
+433 240 2.67726e+015
+483 143 2.67701e+015
+73 164 2.67495e+015
+297 410 2.67348e+015
+500 265 2.66946e+015
+342 465 2.66746e+015
+166 117 2.66453e+015
+309 32 2.65715e+015
+85 310 2.65447e+015
+330 106 2.6542e+015
+71 409 2.65082e+015
+69 131 2.64968e+015
+418 80 2.64624e+015
+538 94 2.64491e+015
+214 449 2.6446e+015
+512 95 2.64278e+015
+192 172 2.64181e+015
+44 407 2.62993e+015
+436 280 2.62903e+015
+412 4 2.62474e+015
+525 186 2.62263e+015
+95 20 2.62242e+015
+522 425 2.62115e+015
+486 376 2.61418e+015
+36 299 2.61382e+015
+467 24 2.6132e+015
+550 223 2.61011e+015
+150 231 2.60927e+015
+85 180 2.60602e+015
+434 225 2.60285e+015
+3 155 2.59365e+015
+376 83 2.59086e+015
+300 106 2.58707e+015
+12 79 2.58693e+015
+177 164 2.58397e+015
+447 350 2.57965e+015
+85 60 2.57672e+015
+493 181 2.57487e+015
+259 272 2.57475e+015
+86 197 2.57237e+015
+151 111 2.57227e+015
+90 259 2.56693e+015
+93 445 2.5615e+015
+90 275 2.56071e+015
+541 41 2.56046e+015
+444 119 2.55672e+015
+527 189 2.55555e+015
+261 368 2.55345e+015
+35 11 2.55339e+015
+111 41 2.55128e+015
+344 165 2.55109e+015
+489 343 2.55074e+015
+456 376 2.54582e+015
+322 425 2.54557e+015
+269 61 2.54369e+015
+217 97 2.54211e+015
+130 428 2.53997e+015
+367 303 2.53737e+015
+479 293 2.53638e+015
+421 81 2.53568e+015
+202 318 2.53307e+015
+592 18 2.5324e+015
+229 265 2.53098e+015
+449 437 2.52768e+015
+391 449 2.52673e+015
+136 21 2.52549e+015
+379 352 2.5248e+015
+576 126 2.52262e+015
+148 21 2.51135e+015
+274 77 2.5112e+015
+190 349 2.51015e+015
+332 415 2.50922e+015
+432 303 2.50692e+015
+384 146 2.50464e+015
+331 258 2.50433e+015
+178 274 2.50411e+015
+217 127 2.50296e+015
+536 121 2.5026e+015
+16 434 2.50091e+015
+422 165 2.49869e+015
+532 398 2.49794e+015
+236 222 2.49386e+015
+9 476 2.49165e+015
+188 109 2.49049e+015
+299 398 2.48974e+015
+148 112 2.48881e+015
+188 181 2.48862e+015
+445 23 2.48847e+015
+186 289 2.48807e+015
+39 239 2.4878e+015
+118 115 2.48763e+015
+219 107 2.48492e+015
+117 428 2.47824e+015
+187 308 2.47245e+015
+346 48 2.47124e+015
+338 263 2.46993e+015
+130 78 2.46992e+015
+301 103 2.46961e+015
+433 381 2.46947e+015
+440 455 2.46711e+015
+406 163 2.46341e+015
+225 50 2.46316e+015
+87 372 2.46228e+015
+289 137 2.46181e+015
+170 311 2.45971e+015
+278 392 2.45946e+015
+316 166 2.45135e+015
+538 39 2.45113e+015
+528 159 2.4425e+015
+328 214 2.43758e+015
+157 40 2.43677e+015
+158 91 2.43483e+015
+432 318 2.43221e+015
+66 477 2.4315e+015
+211 153 2.42874e+015
+49 235 2.42423e+015
+106 431 2.4236e+015
+50 452 2.41876e+015
+349 298 2.4159e+015
+319 186 2.4152e+015
+469 203 2.41438e+015
+434 159 2.41349e+015
+129 309 2.40821e+015
+529 365 2.40694e+015
+498 67 2.40545e+015
+544 91 2.40244e+015
+493 59 2.39947e+015
+362 361 2.39624e+015
+512 43 2.39545e+015
+391 18 2.39461e+015
+390 165 2.39447e+015
+106 77 2.3939e+015
+436 182 2.38793e+015
+376 181 2.38747e+015
+146 98 2.382e+015
+183 136 2.38153e+015
+157 306 2.38056e+015
+157 236 2.37967e+015
+87 208 2.37714e+015
+351 270 2.37693e+015
+33 236 2.37139e+015
+275 196 2.36954e+015
+30 97 2.36716e+015
+251 152 2.36695e+015
+107 183 2.36625e+015
+517 42 2.36494e+015
+482 440 2.36466e+015
+56 171 2.36413e+015
+529 396 2.36293e+015
+271 241 2.36051e+015
+381 162 2.35932e+015
+506 203 2.35681e+015
+432 82 2.35301e+015
+314 222 2.35212e+015
+294 333 2.35036e+015
+76 474 2.34916e+015
+465 355 2.34718e+015
+182 344 2.3395e+015
+187 99 2.33879e+015
+444 352 2.33799e+015
+34 267 2.33269e+015
+363 101 2.33186e+015
+113 176 2.32629e+015
+338 63 2.32152e+015
+74 186 2.32009e+015
+178 40 2.31708e+015
+274 222 2.3155e+015
+62 253 2.30452e+015
+182 132 2.30096e+015
+58 71 2.29856e+015
+405 42 2.29839e+015
+245 102 2.29685e+015
+291 89 2.29545e+015
+293 312 2.29427e+015
+569 203 2.29287e+015
+3 382 2.29088e+015
+212 21 2.28904e+015
+204 435 2.28837e+015
+482 332 2.28809e+015
+498 228 2.28699e+015
+56 145 2.28002e+015
+429 223 2.27912e+015
+534 161 2.27893e+015
+203 293 2.27303e+015
+387 283 2.26913e+015
+318 460 2.26884e+015
+525 381 2.26815e+015
+569 422 2.26802e+015
+9 76 2.26736e+015
+209 395 2.26515e+015
+92 79 2.26507e+015
+9 8 2.2631e+015
+233 261 2.261e+015
+464 27 2.25758e+015
+290 263 2.25627e+015
+191 277 2.25609e+015
+20 317 2.25358e+015
+181 292 2.24803e+015
+183 316 2.24736e+015
+233 295 2.24612e+015
+449 63 2.24579e+015
+401 181 2.24556e+015
+332 412 2.23895e+015
+9 47 2.23582e+015
+321 10 2.23379e+015
+265 260 2.2326e+015
+501 42 2.23048e+015
+436 388 2.22887e+015
+563 17 2.22778e+015
+118 96 2.22433e+015
+240 194 2.22398e+015
+403 6 2.22384e+015
+402 167 2.22219e+015
+194 312 2.22127e+015
+562 71 2.21879e+015
+564 224 2.21797e+015
+325 13 2.21722e+015
+165 379 2.2171e+015
+417 300 2.21365e+015
+575 99 2.21196e+015
+483 176 2.20565e+015
+350 87 2.20459e+015
+157 182 2.20436e+015
+394 23 2.20381e+015
+358 161 2.20358e+015
+111 111 2.19911e+015
+430 45 2.19774e+015
+539 128 2.19615e+015
+274 205 2.19545e+015
+128 40 2.19425e+015
+390 325 2.19294e+015
+17 64 2.19212e+015
+22 219 2.1903e+015
+191 55 2.18992e+015
+229 14 2.18825e+015
+191 188 2.18545e+015
+454 47 2.18016e+015
+255 108 2.17636e+015
+572 327 2.17331e+015
+136 138 2.1732e+015
+33 111 2.17301e+015
+444 122 2.17186e+015
+208 420 2.17102e+015
+109 325 2.17048e+015
+559 18 2.16776e+015
+508 361 2.16752e+015
+255 405 2.16696e+015
+242 58 2.16653e+015
+450 82 2.16582e+015
+479 439 2.16483e+015
+307 354 2.16445e+015
+597 272 2.16014e+015
+26 132 2.15676e+015
+548 45 2.15513e+015
+172 450 2.15395e+015
+445 126 2.14611e+015
+302 189 2.14514e+015
+410 261 2.14278e+015
+163 253 2.14236e+015
+184 142 2.14041e+015
+330 92 2.13851e+015
+200 330 2.13505e+015
+332 334 2.13176e+015
+450 22 2.12904e+015
+456 161 2.12613e+015
+187 325 2.12607e+015
+138 58 2.12201e+015
+197 148 2.12188e+015
+407 142 2.12089e+015
+438 241 2.12079e+015
+103 259 2.11988e+015
+43 121 2.11903e+015
+278 190 2.1177e+015
+375 340 2.11553e+015
+484 20 2.11551e+015
+547 182 2.11524e+015
+223 87 2.11512e+015
+53 359 2.114e+015
+462 161 2.11378e+015
+540 141 2.1133e+015
+224 398 2.11241e+015
+525 399 2.1123e+015
+484 359 2.10928e+015
+513 402 2.10571e+015
+448 119 2.10272e+015
+480 165 2.10222e+015
+243 31 2.10137e+015
+290 140 2.09897e+015
+431 395 2.09853e+015
+541 163 2.09783e+015
+418 68 2.09532e+015
+149 39 2.09265e+015
+434 340 2.09264e+015
+555 181 2.09261e+015
+45 343 2.09244e+015
+219 211 2.09234e+015
+178 330 2.08872e+015
+278 417 2.08744e+015
+413 245 2.08536e+015
+86 363 2.08245e+015
+401 319 2.08203e+015
+560 60 2.08137e+015
+240 197 2.08077e+015
+532 121 2.08075e+015
+88 182 2.07856e+015
+199 293 2.07855e+015
+504 262 2.07802e+015
+497 78 2.07383e+015
+262 396 2.0721e+015
+267 19 2.0667e+015
+561 324 2.06621e+015
+347 393 2.0652e+015
+531 159 2.06363e+015
+104 224 2.06343e+015
+411 471 2.06325e+015
+266 71 2.06094e+015
+195 83 2.06023e+015
+161 127 2.05681e+015
+485 140 2.05546e+015
+75 235 2.05516e+015
+260 142 2.05007e+015
+167 149 2.04916e+015
+116 360 2.04895e+015
+203 257 2.04828e+015
+509 8 2.04618e+015
+279 86 2.04564e+015
+512 202 2.04284e+015
+575 38 2.03606e+015
+446 376 2.03583e+015
+427 183 2.03493e+015
+321 119 2.03097e+015
+237 131 2.03054e+015
+67 304 2.02697e+015
+324 223 2.02525e+015
+265 54 2.02521e+015
+129 127 2.02504e+015
+404 144 2.0244e+015
+562 461 2.02399e+015
+220 317 2.02263e+015
+111 45 2.02046e+015
+434 45 2.01991e+015
+156 195 2.01721e+015
+286 344 2.01294e+015
+495 456 2.01196e+015
+454 115 2.01137e+015
+93 276 2.01125e+015
+479 405 2.01091e+015
+388 420 2.00804e+015
+149 131 2.00679e+015
+524 198 2.00571e+015
+466 41 2.00325e+015
+248 395 2.00317e+015
+126 219 2.00208e+015
+462 221 2.00169e+015
+37 268 2.00137e+015
+169 116 2.00131e+015
+256 105 2.00079e+015
+372 116 1.99768e+015
+329 200 1.99353e+015
+154 56 1.9928e+015
+67 47 1.99161e+015
+130 217 1.9902e+015
+110 358 1.98811e+015
+183 95 1.98792e+015
+212 396 1.98692e+015
+515 202 1.98584e+015
+161 238 1.98523e+015
+126 308 1.98394e+015
+272 316 1.9815e+015
+249 192 1.9778e+015
+122 124 1.97759e+015
+144 1 1.97687e+015
+572 39 1.97558e+015
+272 92 1.97542e+015
+57 331 1.97251e+015
+282 207 1.97215e+015
+175 186 1.97174e+015
+133 79 1.97122e+015
+280 439 1.96893e+015
+173 273 1.96827e+015
+469 42 1.96716e+015
+328 320 1.96654e+015
+109 147 1.96183e+015
+288 88 1.95904e+015
+21 131 1.95352e+015
+414 264 1.95088e+015
+418 259 1.94725e+015
+455 264 1.94445e+015
+497 462 1.94422e+015
+55 142 1.94301e+015
+322 28 1.94291e+015
+537 263 1.94019e+015
+387 3 1.93674e+015
+524 78 1.93135e+015
+579 84 1.93082e+015
+572 332 1.92754e+015
+257 131 1.92693e+015
+314 448 1.92643e+015
+243 280 1.92471e+015
+336 427 1.92304e+015
+339 426 1.92117e+015
+537 103 1.92015e+015
+272 170 1.91695e+015
+334 218 1.9166e+015
+408 430 1.91543e+015
+119 129 1.91226e+015
+150 150 1.91181e+015
+245 14 1.90937e+015
+287 52 1.90853e+015
+354 424 1.90808e+015
+260 329 1.90764e+015
+342 296 1.90689e+015
+527 79 1.90532e+015
+459 304 1.90282e+015
+453 161 1.90265e+015
+287 34 1.90249e+015
+155 445 1.90101e+015
+96 453 1.90059e+015
+213 146 1.90016e+015
+156 78 1.89909e+015
+404 13 1.899e+015
+95 59 1.89841e+015
+96 37 1.89742e+015
+465 161 1.8962e+015
+265 286 1.89429e+015
+13 203 1.893e+015
+573 161 1.89189e+015
+537 139 1.89061e+015
+437 468 1.8894e+015
+163 114 1.88806e+015
+529 31 1.88748e+015
+483 164 1.88539e+015
+247 327 1.87981e+015
+480 173 1.87958e+015
+440 378 1.87853e+015
+119 5 1.87765e+015
+421 299 1.87753e+015
+420 143 1.87624e+015
+545 439 1.87603e+015
+214 93 1.87518e+015
+65 277 1.8747e+015
+414 261 1.87404e+015
+265 131 1.87309e+015
+401 44 1.87072e+015
+504 18 1.87065e+015
+438 397 1.86798e+015
+69 417 1.86425e+015
+411 98 1.86009e+015
+229 346 1.85908e+015
+49 220 1.85895e+015
+49 80 1.85848e+015
+281 386 1.8568e+015
+162 134 1.85678e+015
+580 80 1.85624e+015
+181 341 1.8559e+015
+138 1 1.8558e+015
+51 287 1.85297e+015
+99 256 1.85069e+015
+508 128 1.85032e+015
+214 149 1.8499e+015
+8 234 1.84871e+015
+513 20 1.84808e+015
+87 355 1.84756e+015
+576 311 1.84736e+015
+439 122 1.84685e+015
+210 445 1.845e+015
+223 154 1.84475e+015
+446 243 1.84297e+015
+543 443 1.84195e+015
+41 137 1.84111e+015
+258 108 1.8343e+015
+376 355 1.83318e+015
+445 204 1.83039e+015
+82 197 1.83002e+015
+147 6 1.82845e+015
+202 346 1.82834e+015
+514 362 1.8273e+015
+500 474 1.82711e+015
+311 299 1.82639e+015
+528 400 1.82591e+015
+271 414 1.82317e+015
+223 124 1.81928e+015
+223 72 1.8189e+015
+386 167 1.81694e+015
+167 309 1.81594e+015
+532 341 1.81591e+015
+97 147 1.81365e+015
+193 290 1.81325e+015
+34 114 1.81243e+015
+211 12 1.81226e+015
+442 320 1.81175e+015
+356 255 1.81074e+015
+87 275 1.8107e+015
+389 134 1.81011e+015
+567 181 1.8079e+015
+252 163 1.8055e+015
+401 144 1.80464e+015
+99 95 1.80447e+015
+472 265 1.80421e+015
+461 123 1.80327e+015
+323 148 1.80272e+015
+104 306 1.80269e+015
+464 101 1.80268e+015
+170 111 1.80187e+015
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_5_7.txt b/test_data/harriscorners/hc_msc_3.00_0.10_5_7.txt
new file mode 100644
index 0000000..5618474
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_5_7.txt
@@ -0,0 +1,1459 @@
+1458
+245 94 9.30136e+016
+81 29 6.39569e+016
+421 180 6.35066e+016
+237 20 6.12891e+016
+130 26 5.73559e+016
+272 366 5.60848e+016
+424 180 5.2228e+016
+424 177 4.80476e+016
+75 257 4.55084e+016
+121 43 4.43046e+016
+282 113 4.4202e+016
+80 4 4.25437e+016
+261 297 4.24644e+016
+510 124 4.10031e+016
+299 53 3.96282e+016
+130 37 3.93975e+016
+424 322 3.88484e+016
+30 8 3.86084e+016
+152 223 3.77959e+016
+199 18 3.74576e+016
+542 14 3.67458e+016
+240 92 3.63166e+016
+342 9 3.62215e+016
+122 46 3.5505e+016
+83 77 3.54128e+016
+330 128 3.5085e+016
+213 57 3.34705e+016
+34 139 3.32223e+016
+195 58 3.31995e+016
+26 9 3.31359e+016
+483 178 3.29954e+016
+485 338 3.29582e+016
+543 365 3.27416e+016
+458 279 3.27386e+016
+361 294 3.25213e+016
+363 400 3.25103e+016
+37 63 3.24126e+016
+528 24 3.2326e+016
+102 222 3.23121e+016
+138 204 3.21301e+016
+302 184 3.14964e+016
+128 1 3.13079e+016
+55 30 3.08069e+016
+385 10 3.07737e+016
+156 1 3.0623e+016
+253 12 3.05981e+016
+293 16 3.01497e+016
+361 395 2.98124e+016
+77 3 2.94966e+016
+525 24 2.94264e+016
+64 344 2.92337e+016
+135 213 2.85454e+016
+400 263 2.82456e+016
+36 145 2.82296e+016
+476 262 2.80804e+016
+464 394 2.80297e+016
+302 181 2.79069e+016
+389 10 2.76503e+016
+175 110 2.75711e+016
+320 225 2.73619e+016
+257 385 2.7265e+016
+320 314 2.71163e+016
+127 165 2.7098e+016
+554 39 2.70505e+016
+61 217 2.70366e+016
+391 294 2.69023e+016
+241 70 2.6848e+016
+436 68 2.65869e+016
+58 218 2.65231e+016
+115 43 2.63126e+016
+211 436 2.55881e+016
+104 61 2.55674e+016
+359 129 2.54312e+016
+451 338 2.5293e+016
+224 39 2.52121e+016
+33 100 2.49712e+016
+12 217 2.48797e+016
+34 8 2.47544e+016
+512 342 2.47518e+016
+359 334 2.46719e+016
+163 215 2.46305e+016
+447 261 2.45092e+016
+528 102 2.41065e+016
+449 299 2.40839e+016
+518 59 2.40168e+016
+122 186 2.38728e+016
+125 254 2.369e+016
+43 26 2.36731e+016
+223 420 2.36425e+016
+389 59 2.35751e+016
+345 339 2.35185e+016
+403 120 2.34558e+016
+364 250 2.34187e+016
+263 442 2.3375e+016
+328 296 2.3031e+016
+240 95 2.28888e+016
+511 169 2.28668e+016
+427 118 2.27947e+016
+210 450 2.27082e+016
+342 338 2.24282e+016
+447 296 2.23412e+016
+215 71 2.22137e+016
+55 290 2.21761e+016
+225 181 2.20219e+016
+126 26 2.20116e+016
+243 201 2.19709e+016
+196 127 2.19087e+016
+41 217 2.18445e+016
+47 98 2.17259e+016
+523 61 2.17135e+016
+383 5 2.16703e+016
+79 79 2.15346e+016
+390 143 2.15059e+016
+386 178 2.1468e+016
+545 59 2.14001e+016
+221 37 2.13762e+016
+416 8 2.13462e+016
+143 324 2.13032e+016
+448 398 2.11774e+016
+313 148 2.11695e+016
+158 74 2.11156e+016
+419 8 2.09545e+016
+272 280 2.09078e+016
+4 46 2.08828e+016
+486 58 2.07952e+016
+543 167 2.07451e+016
+470 421 2.07321e+016
+418 438 2.0726e+016
+357 259 2.06708e+016
+434 112 2.06287e+016
+126 364 2.05811e+016
+580 16 2.05673e+016
+60 40 2.04322e+016
+222 181 2.04271e+016
+352 321 2.04169e+016
+413 257 2.04157e+016
+56 6 2.03924e+016
+182 398 2.02828e+016
+576 16 2.01933e+016
+562 478 2.01909e+016
+510 166 2.00596e+016
+226 421 2.00566e+016
+48 26 1.97941e+016
+453 204 1.97713e+016
+367 144 1.97629e+016
+64 318 1.97345e+016
+138 207 1.97089e+016
+302 215 1.96931e+016
+477 19 1.96866e+016
+387 220 1.9643e+016
+302 165 1.96065e+016
+178 110 1.9605e+016
+470 238 1.95766e+016
+393 143 1.95626e+016
+506 16 1.95389e+016
+255 139 1.94059e+016
+209 21 1.92667e+016
+109 240 1.92635e+016
+123 197 1.9089e+016
+61 203 1.90465e+016
+207 449 1.90263e+016
+546 41 1.9024e+016
+404 183 1.90211e+016
+359 220 1.89943e+016
+364 142 1.89874e+016
+408 183 1.8953e+016
+509 16 1.89143e+016
+165 240 1.88401e+016
+150 306 1.87927e+016
+208 222 1.87786e+016
+87 254 1.87524e+016
+211 185 1.87159e+016
+534 185 1.87087e+016
+183 36 1.86228e+016
+293 26 1.86009e+016
+107 44 1.85684e+016
+174 40 1.85675e+016
+326 141 1.8544e+016
+490 139 1.85178e+016
+329 258 1.84798e+016
+310 6 1.84673e+016
+265 445 1.84308e+016
+449 204 1.84185e+016
+145 6 1.83988e+016
+284 402 1.83154e+016
+500 159 1.83034e+016
+246 144 1.82992e+016
+139 109 1.82733e+016
+36 174 1.82187e+016
+508 454 1.81163e+016
+243 166 1.80892e+016
+143 311 1.80267e+016
+410 353 1.79892e+016
+129 75 1.79731e+016
+528 186 1.79247e+016
+32 270 1.78714e+016
+107 39 1.78486e+016
+260 220 1.77797e+016
+132 74 1.77491e+016
+514 346 1.75476e+016
+128 187 1.75359e+016
+229 37 1.75304e+016
+49 151 1.75227e+016
+380 6 1.72928e+016
+175 113 1.72814e+016
+112 392 1.72763e+016
+100 198 1.72396e+016
+100 79 1.72057e+016
+60 184 1.71985e+016
+153 235 1.71937e+016
+7 10 1.71861e+016
+252 423 1.71825e+016
+66 216 1.71721e+016
+235 347 1.71679e+016
+256 151 1.71661e+016
+313 84 1.70739e+016
+343 264 1.70146e+016
+392 218 1.70107e+016
+65 235 1.70001e+016
+83 134 1.69535e+016
+512 221 1.69474e+016
+104 3 1.69319e+016
+511 19 1.69126e+016
+414 22 1.68553e+016
+85 148 1.68187e+016
+160 144 1.67898e+016
+88 148 1.66021e+016
+423 332 1.64949e+016
+432 147 1.64791e+016
+325 341 1.64419e+016
+435 397 1.6436e+016
+301 205 1.63806e+016
+339 10 1.63769e+016
+422 336 1.63288e+016
+245 207 1.62985e+016
+165 327 1.62531e+016
+42 63 1.62289e+016
+69 476 1.61653e+016
+467 238 1.6144e+016
+91 197 1.6056e+016
+371 161 1.60316e+016
+234 161 1.60203e+016
+309 370 1.60094e+016
+480 18 1.59682e+016
+168 326 1.59645e+016
+548 162 1.59415e+016
+223 433 1.59375e+016
+301 105 1.5877e+016
+196 124 1.57826e+016
+343 108 1.57516e+016
+228 291 1.56864e+016
+163 110 1.56692e+016
+361 259 1.56653e+016
+40 296 1.56594e+016
+232 125 1.56414e+016
+111 169 1.55642e+016
+437 304 1.5554e+016
+16 217 1.55505e+016
+208 225 1.55265e+016
+411 65 1.53753e+016
+263 402 1.53575e+016
+332 294 1.53396e+016
+305 439 1.53322e+016
+541 124 1.53126e+016
+137 173 1.52599e+016
+32 267 1.52547e+016
+462 43 1.51744e+016
+134 97 1.5173e+016
+48 12 1.51109e+016
+102 360 1.51094e+016
+326 89 1.50497e+016
+24 62 1.50438e+016
+481 299 1.50173e+016
+479 296 1.49925e+016
+544 457 1.49882e+016
+423 46 1.4981e+016
+323 314 1.49576e+016
+365 300 1.48988e+016
+176 260 1.48965e+016
+385 295 1.487e+016
+248 399 1.48426e+016
+112 344 1.48345e+016
+29 30 1.4828e+016
+420 46 1.47924e+016
+278 220 1.47835e+016
+389 21 1.47826e+016
+362 7 1.47709e+016
+479 15 1.47637e+016
+389 164 1.47472e+016
+125 259 1.47417e+016
+451 374 1.46918e+016
+70 25 1.46523e+016
+169 56 1.46159e+016
+54 222 1.45799e+016
+513 262 1.45768e+016
+365 6 1.45262e+016
+259 165 1.44949e+016
+394 65 1.4488e+016
+97 448 1.44723e+016
+448 166 1.44486e+016
+168 196 1.44462e+016
+365 105 1.4427e+016
+549 41 1.43661e+016
+404 266 1.43504e+016
+453 207 1.43457e+016
+431 318 1.42469e+016
+459 264 1.42347e+016
+355 128 1.42258e+016
+498 225 1.42096e+016
+153 196 1.42095e+016
+202 313 1.42053e+016
+280 365 1.41686e+016
+217 280 1.41662e+016
+377 120 1.41618e+016
+140 19 1.41406e+016
+131 132 1.41231e+016
+172 56 1.41186e+016
+89 258 1.40916e+016
+189 218 1.40895e+016
+329 11 1.40715e+016
+407 198 1.40659e+016
+270 291 1.40521e+016
+140 182 1.40168e+016
+494 139 1.40054e+016
+330 141 1.3955e+016
+533 20 1.39258e+016
+360 142 1.3912e+016
+412 45 1.38872e+016
+103 198 1.38623e+016
+260 236 1.3793e+016
+164 73 1.37227e+016
+169 18 1.37015e+016
+343 122 1.37006e+016
+163 277 1.3698e+016
+37 297 1.36976e+016
+388 16 1.36829e+016
+77 40 1.36465e+016
+217 147 1.36115e+016
+166 98 1.36087e+016
+93 215 1.3604e+016
+166 110 1.35982e+016
+463 280 1.35529e+016
+134 130 1.35421e+016
+85 1 1.35024e+016
+326 165 1.3493e+016
+432 276 1.34825e+016
+545 2 1.34542e+016
+52 42 1.34446e+016
+346 240 1.3439e+016
+273 181 1.34174e+016
+63 60 1.33951e+016
+218 105 1.33378e+016
+385 244 1.33243e+016
+562 461 1.33002e+016
+561 225 1.32925e+016
+107 28 1.32724e+016
+276 353 1.32724e+016
+567 42 1.32215e+016
+5 65 1.32035e+016
+165 357 1.31517e+016
+172 19 1.3142e+016
+357 166 1.31209e+016
+110 136 1.31081e+016
+56 65 1.30772e+016
+206 436 1.30665e+016
+174 311 1.30503e+016
+329 90 1.30462e+016
+510 129 1.29887e+016
+485 44 1.29807e+016
+45 339 1.29363e+016
+166 244 1.2926e+016
+265 30 1.29003e+016
+512 100 1.2878e+016
+165 179 1.28735e+016
+444 118 1.28688e+016
+282 72 1.28629e+016
+423 49 1.28417e+016
+346 350 1.28177e+016
+190 360 1.28011e+016
+557 463 1.28001e+016
+414 65 1.27423e+016
+488 44 1.2696e+016
+61 134 1.2684e+016
+274 132 1.26608e+016
+455 85 1.26436e+016
+296 332 1.26306e+016
+50 288 1.26055e+016
+223 14 1.25972e+016
+160 139 1.25934e+016
+47 81 1.25361e+016
+539 457 1.25132e+016
+481 84 1.25048e+016
+248 316 1.24802e+016
+340 108 1.24699e+016
+134 127 1.24638e+016
+413 163 1.24523e+016
+298 274 1.24295e+016
+513 78 1.24226e+016
+490 2 1.24168e+016
+283 51 1.23926e+016
+110 94 1.23388e+016
+483 363 1.23054e+016
+507 6 1.22897e+016
+300 264 1.22874e+016
+446 8 1.22644e+016
+437 319 1.22632e+016
+210 35 1.22589e+016
+273 316 1.22532e+016
+483 329 1.22456e+016
+521 184 1.22047e+016
+516 75 1.21997e+016
+151 1 1.21832e+016
+493 81 1.21584e+016
+145 16 1.21479e+016
+223 218 1.21467e+016
+193 218 1.21132e+016
+417 165 1.21036e+016
+524 186 1.20996e+016
+176 95 1.2069e+016
+175 20 1.20679e+016
+97 445 1.20605e+016
+110 179 1.20285e+016
+298 179 1.20216e+016
+10 102 1.20098e+016
+227 186 1.2004e+016
+70 149 1.19781e+016
+142 393 1.19491e+016
+46 355 1.19464e+016
+249 366 1.19293e+016
+231 199 1.19268e+016
+44 98 1.19265e+016
+304 190 1.1924e+016
+392 48 1.19089e+016
+257 147 1.19079e+016
+398 266 1.19069e+016
+269 53 1.19068e+016
+325 426 1.19032e+016
+111 110 1.18772e+016
+561 475 1.18529e+016
+145 161 1.18527e+016
+309 440 1.18386e+016
+162 96 1.18308e+016
+105 222 1.18242e+016
+222 17 1.18148e+016
+378 67 1.1807e+016
+271 168 1.1779e+016
+287 211 1.17751e+016
+165 313 1.17241e+016
+575 178 1.17222e+016
+465 196 1.17193e+016
+218 98 1.16942e+016
+269 70 1.16938e+016
+552 381 1.16929e+016
+421 165 1.16872e+016
+344 111 1.1686e+016
+394 164 1.16669e+016
+124 271 1.16451e+016
+448 218 1.16435e+016
+190 350 1.16213e+016
+347 181 1.16174e+016
+507 169 1.1604e+016
+403 186 1.16009e+016
+441 24 1.15871e+016
+324 294 1.15851e+016
+261 202 1.15808e+016
+221 149 1.15437e+016
+272 72 1.15105e+016
+511 174 1.15079e+016
+379 337 1.14971e+016
+525 38 1.14821e+016
+412 298 1.14768e+016
+42 81 1.14697e+016
+57 365 1.14468e+016
+166 287 1.14227e+016
+48 155 1.13921e+016
+334 91 1.13808e+016
+109 98 1.13378e+016
+247 219 1.1334e+016
+540 98 1.13335e+016
+517 20 1.13315e+016
+297 69 1.13065e+016
+541 128 1.12993e+016
+340 164 1.12681e+016
+88 368 1.12599e+016
+477 6 1.12465e+016
+521 264 1.12335e+016
+463 27 1.12299e+016
+409 162 1.12234e+016
+346 276 1.12074e+016
+91 254 1.11875e+016
+205 309 1.11736e+016
+538 406 1.11642e+016
+193 215 1.11418e+016
+249 402 1.11273e+016
+433 158 1.11223e+016
+279 129 1.11204e+016
+89 216 1.10985e+016
+470 121 1.10985e+016
+159 182 1.10854e+016
+503 164 1.1077e+016
+355 254 1.10757e+016
+162 169 1.10459e+016
+272 68 1.10458e+016
+276 182 1.10448e+016
+385 324 1.10444e+016
+487 263 1.09787e+016
+33 30 1.09708e+016
+544 7 1.09425e+016
+279 51 1.09394e+016
+380 107 1.0928e+016
+473 5 1.09265e+016
+373 392 1.09016e+016
+541 209 1.08746e+016
+437 338 1.08744e+016
+276 331 1.08639e+016
+358 319 1.08603e+016
+273 219 1.08462e+016
+166 107 1.08355e+016
+346 297 1.08312e+016
+575 13 1.08209e+016
+31 235 1.08094e+016
+220 290 1.0808e+016
+448 444 1.08038e+016
+523 123 1.07861e+016
+442 240 1.07757e+016
+445 123 1.07744e+016
+523 346 1.07705e+016
+102 164 1.07466e+016
+117 426 1.06906e+016
+118 115 1.06792e+016
+541 133 1.06698e+016
+284 198 1.06644e+016
+157 91 1.06537e+016
+418 83 1.06444e+016
+222 112 1.06267e+016
+86 61 1.05929e+016
+360 164 1.0579e+016
+158 96 1.05772e+016
+273 295 1.05685e+016
+530 143 1.05675e+016
+552 378 1.05447e+016
+58 75 1.054e+016
+508 2 1.05353e+016
+578 43 1.05237e+016
+436 379 1.05192e+016
+295 421 1.05105e+016
+91 290 1.04978e+016
+105 76 1.04703e+016
+282 391 1.04703e+016
+449 118 1.04635e+016
+473 23 1.04553e+016
+312 76 1.04493e+016
+324 145 1.0435e+016
+357 11 1.04259e+016
+407 45 1.04239e+016
+107 429 1.04204e+016
+192 143 1.03924e+016
+292 88 1.0368e+016
+450 87 1.03598e+016
+340 122 1.03435e+016
+139 99 1.03355e+016
+373 86 1.03266e+016
+474 247 1.03126e+016
+131 71 1.03113e+016
+164 209 1.03009e+016
+358 66 1.02913e+016
+486 139 1.02895e+016
+528 363 1.02788e+016
+42 10 1.02671e+016
+86 213 1.02622e+016
+191 206 1.02477e+016
+100 5 1.02373e+016
+322 426 1.02304e+016
+83 476 1.02262e+016
+90 213 1.02142e+016
+189 144 1.01957e+016
+527 347 1.01778e+016
+283 395 1.01747e+016
+153 112 1.01738e+016
+499 80 1.017e+016
+87 197 1.01245e+016
+196 132 1.01224e+016
+335 436 1.01094e+016
+139 178 1.00941e+016
+258 161 1.00911e+016
+452 62 1.0088e+016
+512 81 1.00813e+016
+373 83 1.00807e+016
+158 112 1.00698e+016
+575 459 1.00672e+016
+457 42 1.00353e+016
+451 438 9.93607e+015
+473 203 9.93409e+015
+234 199 9.93273e+015
+411 21 9.92944e+015
+215 124 9.8993e+015
+88 207 9.86409e+015
+87 144 9.8513e+015
+118 76 9.84764e+015
+514 203 9.84668e+015
+170 240 9.80383e+015
+41 339 9.80383e+015
+272 285 9.7754e+015
+228 129 9.75815e+015
+404 376 9.69775e+015
+396 317 9.69543e+015
+102 236 9.68856e+015
+250 220 9.67897e+015
+173 240 9.67567e+015
+119 447 9.66452e+015
+254 9 9.64813e+015
+475 244 9.63232e+015
+364 180 9.59908e+015
+279 143 9.59362e+015
+150 112 9.58806e+015
+357 63 9.57603e+015
+354 269 9.57148e+015
+85 73 9.56742e+015
+484 142 9.56656e+015
+537 394 9.56114e+015
+244 293 9.55486e+015
+114 1 9.55134e+015
+302 176 9.54688e+015
+287 164 9.52399e+015
+59 253 9.49748e+015
+279 136 9.48712e+015
+33 219 9.47911e+015
+92 445 9.47238e+015
+114 95 9.46839e+015
+467 139 9.44818e+015
+61 370 9.44619e+015
+287 397 9.43782e+015
+496 81 9.43247e+015
+166 20 9.43209e+015
+164 206 9.42136e+015
+424 399 9.39653e+015
+58 204 9.39557e+015
+94 257 9.37908e+015
+333 131 9.36064e+015
+564 160 9.34449e+015
+66 26 9.34107e+015
+426 378 9.34042e+015
+178 273 9.33939e+015
+524 426 9.32263e+015
+78 474 9.31303e+015
+305 194 9.25448e+015
+389 325 9.24795e+015
+126 96 9.19458e+015
+241 421 9.17945e+015
+351 146 9.15809e+015
+333 66 9.15588e+015
+514 119 9.1535e+015
+281 221 9.1533e+015
+540 101 9.14153e+015
+527 344 9.13678e+015
+389 66 9.12795e+015
+55 145 9.12363e+015
+161 115 9.12361e+015
+405 81 9.12193e+015
+126 78 9.11436e+015
+281 438 9.10271e+015
+392 160 9.09893e+015
+437 240 9.09412e+015
+455 58 9.09365e+015
+295 269 9.06354e+015
+444 451 9.04025e+015
+471 212 9.03681e+015
+472 266 9.03653e+015
+265 16 9.02162e+015
+357 282 9.01891e+015
+38 82 9.01787e+015
+110 2 8.99837e+015
+285 298 8.98864e+015
+529 399 8.9836e+015
+186 289 8.97853e+015
+328 181 8.97769e+015
+550 58 8.97728e+015
+86 311 8.96966e+015
+68 419 8.95396e+015
+518 263 8.94428e+015
+278 390 8.93392e+015
+563 464 8.92819e+015
+418 283 8.92738e+015
+375 5 8.92101e+015
+168 115 8.91016e+015
+259 34 8.90616e+015
+376 82 8.89731e+015
+229 288 8.8962e+015
+41 355 8.87992e+015
+387 124 8.86054e+015
+333 202 8.84955e+015
+276 179 8.84367e+015
+572 405 8.83541e+015
+406 64 8.82399e+015
+196 190 8.82147e+015
+271 185 8.81237e+015
+11 78 8.78306e+015
+395 160 8.75944e+015
+526 222 8.75728e+015
+453 102 8.75153e+015
+563 323 8.7427e+015
+186 20 8.73115e+015
+330 67 8.72963e+015
+279 132 8.72408e+015
+497 66 8.71635e+015
+190 312 8.68287e+015
+77 271 8.6698e+015
+478 243 8.66755e+015
+67 149 8.64003e+015
+335 218 8.63761e+015
+119 130 8.63748e+015
+190 278 8.63303e+015
+569 382 8.62165e+015
+182 343 8.6191e+015
+570 451 8.60679e+015
+229 13 8.60384e+015
+506 361 8.60305e+015
+171 95 8.60031e+015
+371 89 8.57533e+015
+353 294 8.57041e+015
+481 451 8.56613e+015
+387 127 8.55473e+015
+383 162 8.54563e+015
+91 376 8.51414e+015
+480 440 8.50823e+015
+133 237 8.49734e+015
+155 318 8.49299e+015
+232 13 8.48916e+015
+164 115 8.44327e+015
+330 213 8.4401e+015
+191 329 8.42522e+015
+179 164 8.42483e+015
+503 143 8.41222e+015
+390 242 8.38338e+015
+67 254 8.36515e+015
+174 187 8.35754e+015
+450 140 8.34488e+015
+204 160 8.33454e+015
+157 198 8.33424e+015
+261 140 8.32096e+015
+418 87 8.31851e+015
+561 228 8.3156e+015
+185 135 8.30745e+015
+468 204 8.30505e+015
+402 44 8.29987e+015
+70 96 8.29579e+015
+200 129 8.29512e+015
+197 194 8.29122e+015
+33 110 8.27317e+015
+133 147 8.27137e+015
+48 221 8.25418e+015
+91 276 8.24925e+015
+525 173 8.23826e+015
+394 215 8.22995e+015
+381 121 8.19563e+015
+421 298 8.19276e+015
+437 280 8.18836e+015
+466 25 8.18621e+015
+382 338 8.18273e+015
+18 343 8.17387e+015
+440 379 8.17088e+015
+155 56 8.15932e+015
+313 79 8.15633e+015
+12 81 8.1368e+015
+288 51 8.11796e+015
+516 42 8.09806e+015
+190 109 8.09577e+015
+363 357 8.08214e+015
+432 381 8.03778e+015
+86 364 8.03533e+015
+547 139 8.03433e+015
+540 41 8.01523e+015
+107 108 8.01376e+015
+572 446 8.00995e+015
+319 165 8.00763e+015
+448 124 7.99519e+015
+448 438 7.97877e+015
+537 93 7.97801e+015
+91 60 7.96513e+015
+151 232 7.96142e+015
+466 124 7.95295e+015
+26 131 7.92787e+015
+317 335 7.92543e+015
+136 136 7.90715e+015
+571 40 7.89258e+015
+346 47 7.88395e+015
+248 293 7.88368e+015
+241 195 7.8625e+015
+256 220 7.85821e+015
+171 312 7.84861e+015
+340 391 7.81832e+015
+72 165 7.81826e+015
+332 413 7.79737e+015
+431 81 7.79508e+015
+249 361 7.79494e+015
+78 199 7.76416e+015
+120 53 7.75068e+015
+262 392 7.74656e+015
+358 241 7.7313e+015
+185 132 7.71262e+015
+191 210 7.71059e+015
+454 116 7.7085e+015
+242 192 7.70495e+015
+110 58 7.7007e+015
+562 146 7.67191e+015
+384 260 7.65982e+015
+48 234 7.65165e+015
+187 108 7.6427e+015
+216 175 7.63482e+015
+547 217 7.63469e+015
+222 116 7.63441e+015
+272 64 7.62879e+015
+339 473 7.59933e+015
+392 21 7.58836e+015
+191 126 7.58484e+015
+468 208 7.58123e+015
+175 272 7.57645e+015
+425 3 7.56768e+015
+455 162 7.56123e+015
+207 160 7.5555e+015
+290 139 7.55309e+015
+342 47 7.53438e+015
+424 63 7.53013e+015
+147 449 7.52809e+015
+176 164 7.52739e+015
+421 141 7.52141e+015
+328 105 7.51935e+015
+400 168 7.51895e+015
+573 421 7.51235e+015
+542 163 7.50437e+015
+405 41 7.49202e+015
+168 118 7.48608e+015
+543 217 7.48601e+015
+253 74 7.48148e+015
+391 53 7.48038e+015
+275 52 7.47806e+015
+168 181 7.46349e+015
+306 449 7.45821e+015
+306 364 7.45718e+015
+360 368 7.45275e+015
+214 94 7.43664e+015
+337 390 7.42623e+015
+163 252 7.41602e+015
+292 335 7.41461e+015
+48 162 7.40986e+015
+486 375 7.40533e+015
+88 372 7.40165e+015
+359 53 7.39167e+015
+277 328 7.38843e+015
+366 336 7.36572e+015
+298 421 7.36527e+015
+577 245 7.36504e+015
+438 468 7.36486e+015
+110 262 7.36009e+015
+65 251 7.35313e+015
+319 187 7.35304e+015
+160 21 7.3449e+015
+57 70 7.34428e+015
+508 201 7.34176e+015
+213 32 7.33064e+015
+204 163 7.31851e+015
+388 138 7.30902e+015
+98 257 7.29542e+015
+163 62 7.29524e+015
+524 399 7.2897e+015
+104 307 7.27571e+015
+218 208 7.2755e+015
+337 264 7.27514e+015
+382 26 7.23628e+015
+267 288 7.23553e+015
+237 417 7.23109e+015
+541 139 7.22546e+015
+282 419 7.22188e+015
+369 86 7.22145e+015
+310 446 7.21587e+015
+538 138 7.20573e+015
+182 95 7.20421e+015
+224 128 7.20388e+015
+181 20 7.20329e+015
+325 258 7.18381e+015
+591 19 7.18206e+015
+205 15 7.17665e+015
+355 24 7.17637e+015
+362 65 7.17424e+015
+413 246 7.17324e+015
+379 181 7.14601e+015
+536 240 7.11887e+015
+191 292 7.1184e+015
+39 238 7.09463e+015
+222 87 7.08522e+015
+291 50 7.08288e+015
+209 419 7.0772e+015
+83 171 7.05737e+015
+476 341 7.05325e+015
+362 244 7.04906e+015
+569 422 7.0408e+015
+186 95 7.03984e+015
+53 358 7.03962e+015
+198 111 7.03604e+015
+220 212 7.03342e+015
+205 19 7.03232e+015
+324 15 7.02326e+015
+406 164 7.01589e+015
+282 209 7.01374e+015
+86 181 7.0117e+015
+501 362 7.00986e+015
+391 17 7.00467e+015
+70 130 6.99881e+015
+22 48 6.99827e+015
+574 330 6.99744e+015
+125 126 6.9788e+015
+247 35 6.9677e+015
+149 302 6.95765e+015
+105 360 6.94413e+015
+131 168 6.9403e+015
+354 11 6.93066e+015
+566 180 6.92583e+015
+217 425 6.92528e+015
+110 326 6.91597e+015
+514 381 6.9145e+015
+574 140 6.91413e+015
+9 233 6.91148e+015
+536 243 6.90829e+015
+280 124 6.90779e+015
+150 398 6.89776e+015
+85 38 6.89626e+015
+130 478 6.89567e+015
+187 308 6.87834e+015
+232 263 6.8742e+015
+578 81 6.85031e+015
+187 265 6.84269e+015
+130 428 6.84265e+015
+163 186 6.83829e+015
+529 160 6.82768e+015
+17 434 6.82353e+015
+502 22 6.82082e+015
+494 58 6.81611e+015
+486 2 6.81265e+015
+445 205 6.80745e+015
+170 109 6.80504e+015
+58 372 6.80449e+015
+162 127 6.79678e+015
+445 353 6.78837e+015
+255 107 6.7864e+015
+583 38 6.78432e+015
+186 202 6.78126e+015
+48 133 6.77574e+015
+283 195 6.77547e+015
+433 45 6.7738e+015
+195 255 6.76101e+015
+156 305 6.75749e+015
+513 298 6.73612e+015
+433 85 6.73529e+015
+184 142 6.72267e+015
+402 143 6.71733e+015
+276 214 6.71236e+015
+289 348 6.70308e+015
+526 197 6.69566e+015
+299 295 6.69334e+015
+343 200 6.68869e+015
+325 131 6.68545e+015
+266 203 6.68439e+015
+220 315 6.68245e+015
+39 287 6.67691e+015
+376 316 6.66898e+015
+47 255 6.66636e+015
+373 241 6.66252e+015
+215 128 6.65129e+015
+261 71 6.65001e+015
+353 338 6.61865e+015
+183 382 6.60249e+015
+128 126 6.59527e+015
+376 354 6.59235e+015
+247 107 6.59017e+015
+179 168 6.58637e+015
+438 182 6.57977e+015
+471 269 6.57871e+015
+498 460 6.57867e+015
+34 235 6.57459e+015
+512 363 6.56158e+015
+37 200 6.55898e+015
+396 104 6.55457e+015
+386 4 6.55194e+015
+277 187 6.55136e+015
+89 181 6.55058e+015
+178 330 6.54923e+015
+12 204 6.54467e+015
+33 164 6.52205e+015
+544 440 6.52003e+015
+385 321 6.51918e+015
+212 150 6.5141e+015
+380 162 6.51379e+015
+506 61 6.51152e+015
+186 101 6.51009e+015
+483 204 6.50311e+015
+466 424 6.49016e+015
+183 139 6.48354e+015
+533 161 6.48041e+015
+280 204 6.47934e+015
+118 95 6.47615e+015
+9 32 6.47576e+015
+1 383 6.4724e+015
+329 216 6.47192e+015
+275 204 6.46895e+015
+548 181 6.46766e+015
+136 239 6.46228e+015
+479 403 6.46094e+015
+433 280 6.45749e+015
+419 66 6.45168e+015
+10 75 6.44646e+015
+121 125 6.44451e+015
+207 163 6.43824e+015
+325 221 6.43398e+015
+268 242 6.43119e+015
+509 61 6.428e+015
+114 216 6.4238e+015
+345 166 6.41865e+015
+160 61 6.41653e+015
+328 64 6.40688e+015
+383 413 6.40422e+015
+291 262 6.40293e+015
+533 394 6.39513e+015
+388 97 6.39003e+015
+364 201 6.38867e+015
+298 398 6.38092e+015
+272 145 6.37776e+015
+191 122 6.37519e+015
+264 71 6.35888e+015
+331 105 6.35411e+015
+264 310 6.35333e+015
+168 316 6.34657e+015
+563 320 6.3451e+015
+562 149 6.33618e+015
+154 295 6.33426e+015
+270 108 6.33217e+015
+509 58 6.32653e+015
+277 190 6.31495e+015
+419 259 6.31229e+015
+161 152 6.31006e+015
+336 62 6.29351e+015
+95 5 6.29163e+015
+18 65 6.28739e+015
+302 333 6.2786e+015
+74 477 6.27809e+015
+385 166 6.27209e+015
+382 102 6.2636e+015
+287 262 6.26167e+015
+55 172 6.25977e+015
+130 306 6.25909e+015
+187 313 6.25673e+015
+523 78 6.25418e+015
+242 58 6.24711e+015
+446 22 6.24019e+015
+430 85 6.23618e+015
+455 48 6.23262e+015
+262 284 6.22575e+015
+480 165 6.22128e+015
+314 446 6.21967e+015
+204 294 6.21877e+015
+561 142 6.21027e+015
+183 379 6.2027e+015
+304 160 6.20029e+015
+394 107 6.19889e+015
+461 162 6.19743e+015
+503 18 6.1918e+015
+266 20 6.18754e+015
+226 112 6.18464e+015
+479 286 6.18138e+015
+242 281 6.17657e+015
+142 449 6.16914e+015
+147 78 6.16486e+015
+195 84 6.15592e+015
+368 109 6.14183e+015
+49 61 6.13793e+015
+106 182 6.11238e+015
+478 11 6.11026e+015
+163 118 6.10946e+015
+115 359 6.1038e+015
+212 145 6.0982e+015
+261 369 6.09747e+015
+484 163 6.09323e+015
+378 319 6.0903e+015
+578 53 6.08258e+015
+181 155 6.08049e+015
+28 134 6.07935e+015
+432 270 6.07384e+015
+96 93 6.06571e+015
+401 164 6.06512e+015
+94 21 6.06459e+015
+505 262 6.06306e+015
+418 449 6.05706e+015
+250 193 6.05534e+015
+51 453 6.05366e+015
+219 115 6.04771e+015
+536 265 6.03647e+015
+332 334 6.03309e+015
+580 345 6.0302e+015
+343 463 6.02845e+015
+264 141 6.00932e+015
+269 367 6.00622e+015
+416 245 6.00519e+015
+429 43 6.00196e+015
+109 146 6.00138e+015
+269 58 5.99764e+015
+558 79 5.9937e+015
+526 79 5.99107e+015
+477 204 5.98761e+015
+485 359 5.98709e+015
+572 326 5.98419e+015
+97 38 5.97524e+015
+276 197 5.97047e+015
+224 149 5.96794e+015
+434 89 5.96166e+015
+542 95 5.95936e+015
+307 359 5.94258e+015
+103 258 5.94088e+015
+534 121 5.93899e+015
+191 171 5.93729e+015
+190 55 5.92935e+015
+130 475 5.92925e+015
+408 140 5.92904e+015
+452 46 5.92775e+015
+458 115 5.91427e+015
+485 25 5.91197e+015
+450 180 5.91151e+015
+463 224 5.90638e+015
+318 461 5.90531e+015
+290 311 5.90308e+015
+391 118 5.89301e+015
+471 83 5.88618e+015
+254 78 5.88564e+015
+337 367 5.8849e+015
+542 443 5.88443e+015
+575 127 5.85616e+015
+258 249 5.85374e+015
+178 57 5.85366e+015
+449 143 5.85316e+015
+329 25 5.84887e+015
+45 408 5.84373e+015
+377 85 5.8431e+015
+435 182 5.83748e+015
+291 266 5.83409e+015
+201 294 5.83222e+015
+251 150 5.82355e+015
+215 289 5.82147e+015
+371 338 5.81008e+015
+191 188 5.80239e+015
+168 178 5.79891e+015
+398 356 5.79441e+015
+208 14 5.79168e+015
+157 194 5.78496e+015
+218 128 5.78461e+015
+227 123 5.78314e+015
+581 81 5.77226e+015
+91 79 5.76526e+015
+493 340 5.76208e+015
+506 380 5.75304e+015
+486 21 5.73758e+015
+338 427 5.7374e+015
+149 130 5.72311e+015
+439 123 5.72229e+015
+499 263 5.7215e+015
+498 463 5.72003e+015
+500 266 5.71982e+015
+438 160 5.70776e+015
+317 103 5.70407e+015
+314 165 5.69535e+015
+138 59 5.69299e+015
+562 18 5.68613e+015
+65 182 5.68537e+015
+72 408 5.68262e+015
+167 150 5.67981e+015
+541 248 5.67929e+015
+537 262 5.66448e+015
+106 432 5.66062e+015
+249 386 5.65913e+015
+386 92 5.65574e+015
+20 317 5.64969e+015
+96 60 5.64902e+015
+471 42 5.6451e+015
+541 381 5.63834e+015
+166 379 5.63284e+015
+464 355 5.62618e+015
+258 133 5.62597e+015
+566 144 5.62393e+015
+118 2 5.62243e+015
+214 439 5.62238e+015
+502 460 5.62072e+015
+226 198 5.61697e+015
+125 218 5.61497e+015
+112 211 5.60927e+015
+407 429 5.60836e+015
+142 99 5.60774e+015
+355 342 5.60242e+015
+405 11 5.60185e+015
+306 90 5.59719e+015
+189 325 5.59007e+015
+386 282 5.58814e+015
+183 316 5.58226e+015
+43 475 5.5778e+015
+115 130 5.57412e+015
+72 187 5.57194e+015
+209 155 5.5699e+015
+597 364 5.55856e+015
+225 51 5.55186e+015
+187 182 5.55166e+015
+8 115 5.54647e+015
+99 60 5.53486e+015
+298 87 5.52712e+015
+474 62 5.52258e+015
+495 474 5.51063e+015
+309 32 5.50728e+015
+169 105 5.50433e+015
+413 81 5.50391e+015
+51 39 5.49872e+015
+65 276 5.4943e+015
+243 33 5.49341e+015
+482 174 5.4926e+015
+292 122 5.4923e+015
+224 125 5.48694e+015
+483 288 5.47848e+015
+342 196 5.47372e+015
+539 186 5.46816e+015
+396 21 5.46547e+015
+445 244 5.4647e+015
+484 5 5.46348e+015
+199 166 5.46343e+015
+96 423 5.45206e+015
+433 240 5.44937e+015
+306 259 5.44625e+015
+559 272 5.44413e+015
+463 101 5.44375e+015
+261 249 5.44372e+015
+480 46 5.4371e+015
+111 358 5.43251e+015
+235 220 5.42416e+015
+437 89 5.42049e+015
+266 200 5.40944e+015
+129 259 5.40362e+015
+558 18 5.39652e+015
+217 204 5.38399e+015
+494 458 5.3832e+015
+550 223 5.38184e+015
+163 349 5.37269e+015
+239 220 5.37076e+015
+68 47 5.3704e+015
+307 169 5.36906e+015
+295 122 5.36666e+015
+308 355 5.36323e+015
+451 163 5.35987e+015
+226 433 5.35933e+015
+511 442 5.35691e+015
+321 121 5.35031e+015
+159 239 5.34594e+015
+575 100 5.34555e+015
+497 118 5.34527e+015
+425 6 5.34192e+015
+352 425 5.34092e+015
+155 445 5.33757e+015
+319 386 5.33682e+015
+430 89 5.32948e+015
+385 334 5.32865e+015
+342 466 5.32813e+015
+372 69 5.32346e+015
+298 269 5.32189e+015
+167 433 5.32015e+015
+386 65 5.31725e+015
+555 381 5.31681e+015
+182 291 5.31218e+015
+411 264 5.30817e+015
+361 362 5.30626e+015
+258 369 5.3042e+015
+321 11 5.29878e+015
+158 310 5.29739e+015
+268 88 5.29663e+015
+101 96 5.2965e+015
+18 236 5.29483e+015
+236 134 5.29148e+015
+269 144 5.28733e+015
+181 132 5.28377e+015
+20 286 5.28013e+015
+412 416 5.27266e+015
+371 118 5.2726e+015
+346 342 5.26635e+015
+503 156 5.26622e+015
+184 340 5.26095e+015
+542 262 5.25841e+015
+261 397 5.2576e+015
+531 120 5.25663e+015
+201 163 5.25182e+015
+189 357 5.2486e+015
+139 136 5.24675e+015
+412 471 5.24667e+015
+366 164 5.2403e+015
+408 143 5.2401e+015
+228 264 5.23979e+015
+23 131 5.23931e+015
+248 260 5.23439e+015
+401 318 5.22614e+015
+34 12 5.22482e+015
+269 416 5.21204e+015
+12 114 5.20875e+015
+526 383 5.20273e+015
+135 322 5.19916e+015
+205 33 5.19682e+015
+190 136 5.19362e+015
+228 260 5.19159e+015
+280 190 5.19133e+015
+433 226 5.19084e+015
+513 182 5.1868e+015
+66 306 5.18406e+015
+232 260 5.18256e+015
+266 131 5.17262e+015
+233 406 5.16865e+015
+584 346 5.16393e+015
+532 345 5.15797e+015
+147 97 5.15629e+015
+211 395 5.1502e+015
+111 338 5.14861e+015
+41 182 5.143e+015
+436 122 5.13426e+015
+456 177 5.13079e+015
+104 35 5.12896e+015
+294 141 5.12272e+015
+101 40 5.12197e+015
+283 124 5.1205e+015
+528 30 5.10619e+015
+343 142 5.10554e+015
+537 397 5.10533e+015
+191 306 5.10359e+015
+207 405 5.10339e+015
+311 299 5.09873e+015
+502 123 5.0916e+015
+594 101 5.09066e+015
+534 78 5.08941e+015
+390 135 5.08931e+015
+51 230 5.08727e+015
+253 182 5.07523e+015
+335 415 5.07261e+015
+459 304 5.05944e+015
+199 329 5.05697e+015
+156 39 5.04983e+015
+336 144 5.04488e+015
+265 249 5.04476e+015
+94 367 5.04332e+015
+136 140 5.04109e+015
+121 215 5.03871e+015
+307 105 5.03429e+015
+160 33 5.03414e+015
+389 450 5.03246e+015
+464 115 5.0323e+015
+107 260 5.02561e+015
+250 154 5.02186e+015
+268 91 5.01687e+015
+314 103 5.01293e+015
+128 219 5.01072e+015
+361 139 5.00963e+015
+76 110 5.00204e+015
+420 363 4.99791e+015
+351 273 4.99515e+015
+86 377 4.99e+015
+148 22 4.98008e+015
+444 114 4.97823e+015
+529 270 4.97567e+015
+442 97 4.97508e+015
+578 49 4.96939e+015
+190 132 4.969e+015
+139 140 4.96752e+015
+502 43 4.96573e+015
+261 30 4.95048e+015
+267 246 4.94841e+015
+349 88 4.94707e+015
+251 164 4.94319e+015
+332 355 4.9404e+015
+134 80 4.93997e+015
+3 234 4.93369e+015
+349 125 4.92649e+015
+107 257 4.92269e+015
+72 235 4.91711e+015
+233 31 4.91674e+015
+25 118 4.90987e+015
+327 52 4.9081e+015
+145 23 4.90746e+015
+127 109 4.90646e+015
+223 72 4.90139e+015
+278 87 4.90093e+015
+329 321 4.90061e+015
+295 411 4.89978e+015
+143 235 4.8958e+015
+512 140 4.88972e+015
+526 177 4.88803e+015
+383 145 4.88483e+015
+75 199 4.87991e+015
+303 88 4.87724e+015
+264 258 4.87687e+015
+387 101 4.87506e+015
+47 203 4.87317e+015
+361 48 4.86809e+015
+174 201 4.85904e+015
+476 267 4.85895e+015
+171 451 4.85795e+015
+528 431 4.85704e+015
+298 138 4.85182e+015
+207 183 4.84855e+015
+580 218 4.84485e+015
+227 72 4.84381e+015
+280 187 4.83902e+015
+112 354 4.82301e+015
+273 93 4.82169e+015
+42 122 4.81778e+015
+178 1 4.80514e+015
+204 419 4.8004e+015
+210 133 4.7969e+015
+400 277 4.79497e+015
+45 122 4.79489e+015
+55 330 4.79284e+015
+128 113 4.78177e+015
+213 398 4.77931e+015
+600 365 4.77866e+015
+509 140 4.76308e+015
+298 410 4.75307e+015
+225 397 4.75189e+015
+83 197 4.75025e+015
+26 44 4.74937e+015
+371 105 4.74798e+015
+115 277 4.74311e+015
+483 47 4.74272e+015
+150 79 4.74235e+015
+518 142 4.73614e+015
+299 135 4.73604e+015
+211 13 4.73514e+015
+529 34 4.70819e+015
+145 140 4.70767e+015
+383 22 4.70631e+015
+113 144 4.70387e+015
+236 403 4.70327e+015
+91 21 4.70095e+015
+96 456 4.69985e+015
+244 187 4.69767e+015
+566 60 4.69694e+015
+498 474 4.69575e+015
+82 101 4.69533e+015
+238 34 4.69332e+015
+389 333 4.69122e+015
+593 425 4.68574e+015
+201 345 4.68516e+015
+164 434 4.68194e+015
+288 31 4.68e+015
+334 181 4.67327e+015
+210 97 4.67105e+015
+528 437 4.67065e+015
+480 168 4.66754e+015
+188 301 4.66672e+015
+115 262 4.66217e+015
+77 233 4.65924e+015
+67 202 4.65891e+015
+106 263 4.65672e+015
+208 423 4.65323e+015
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_7_3.txt b/test_data/harriscorners/hc_msc_3.00_0.10_7_3.txt
new file mode 100644
index 0000000..45cd44d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_7_3.txt
@@ -0,0 +1,1119 @@
+1118
+245 95 1.26647e+020
+499 1 1.10239e+020
+274 366 1.00414e+020
+363 401 9.63726e+019
+251 13 7.04474e+019
+240 90 6.77478e+019
+282 115 6.25569e+019
+65 343 5.93703e+019
+507 122 5.80434e+019
+449 298 5.79116e+019
+131 36 5.78775e+019
+122 44 5.72633e+019
+261 297 5.22611e+019
+426 320 4.90999e+019
+465 394 4.89398e+019
+446 396 4.79442e+019
+344 10 4.75053e+019
+200 16 4.6941e+019
+520 61 4.67532e+019
+130 2 4.54327e+019
+37 62 4.46205e+019
+418 440 4.42616e+019
+421 182 4.41514e+019
+28 8 4.4031e+019
+387 10 4.40002e+019
+59 219 4.35944e+019
+480 298 4.32664e+019
+420 178 4.3234e+019
+387 178 4.30534e+019
+553 40 4.24744e+019
+247 92 4.19578e+019
+233 15 4.15305e+019
+237 20 4.13853e+019
+110 238 4.02671e+019
+213 72 3.98399e+019
+72 24 3.97202e+019
+435 68 3.96913e+019
+448 263 3.96281e+019
+543 364 3.91426e+019
+456 281 3.91081e+019
+45 27 3.90646e+019
+423 178 3.86891e+019
+183 401 3.76931e+019
+271 166 3.7312e+019
+144 309 3.72145e+019
+256 386 3.68557e+019
+390 58 3.6718e+019
+125 199 3.6717e+019
+299 52 3.62835e+019
+510 122 3.62782e+019
+223 38 3.58624e+019
+303 183 3.54916e+019
+479 19 3.5127e+019
+135 214 3.51138e+019
+34 137 3.5007e+019
+462 279 3.48495e+019
+77 257 3.45623e+019
+271 71 3.40639e+019
+355 220 3.39964e+019
+321 313 3.38621e+019
+411 354 3.37996e+019
+320 224 3.37215e+019
+526 60 3.37185e+019
+4 66 3.36766e+019
+348 179 3.35514e+019
+512 167 3.32859e+019
+102 4 3.29909e+019
+281 112 3.27584e+019
+264 440 3.26804e+019
+224 419 3.2526e+019
+482 365 3.23301e+019
+132 26 3.16807e+019
+439 339 3.15221e+019
+359 260 3.12525e+019
+385 221 3.11562e+019
+412 256 3.08576e+019
+432 146 3.07215e+019
+402 122 3.06544e+019
+101 58 3.05752e+019
+177 106 3.05161e+019
+221 16 3.04328e+019
+421 334 3.03832e+019
+92 198 3.01773e+019
+510 173 3.00735e+019
+81 2 2.98933e+019
+243 72 2.98346e+019
+136 202 2.9395e+019
+35 146 2.93501e+019
+392 144 2.93241e+019
+425 376 2.92385e+019
+515 76 2.92031e+019
+545 168 2.9121e+019
+58 183 2.91056e+019
+111 393 2.88103e+019
+262 165 2.88015e+019
+512 341 2.87275e+019
+74 6 2.86973e+019
+498 82 2.85646e+019
+308 372 2.84741e+019
+390 61 2.84288e+019
+483 24 2.80296e+019
+228 292 2.79042e+019
+361 131 2.78118e+019
+239 349 2.77336e+019
+41 297 2.76886e+019
+563 478 2.73574e+019
+181 111 2.71871e+019
+300 265 2.69052e+019
+304 216 2.68772e+019
+359 294 2.68634e+019
+293 15 2.68558e+019
+360 336 2.67743e+019
+210 445 2.66238e+019
+302 186 2.65505e+019
+483 339 2.65384e+019
+524 20 2.65096e+019
+82 29 2.6437e+019
+264 298 2.63969e+019
+453 340 2.61181e+019
+411 162 2.60965e+019
+125 255 2.60373e+019
+246 143 2.59615e+019
+382 8 2.57529e+019
+283 403 2.57248e+019
+138 110 2.55284e+019
+474 262 2.51675e+019
+250 364 2.51016e+019
+550 379 2.48752e+019
+388 221 2.4713e+019
+225 221 2.46766e+019
+64 235 2.46683e+019
+124 362 2.46528e+019
+167 286 2.46462e+019
+434 398 2.46313e+019
+372 163 2.43659e+019
+127 76 2.43396e+019
+12 101 2.43218e+019
+327 342 2.42538e+019
+542 18 2.41841e+019
+430 1 2.40024e+019
+128 164 2.39223e+019
+312 149 2.38891e+019
+510 455 2.38544e+019
+242 94 2.3691e+019
+140 203 2.36355e+019
+562 147 2.35703e+019
+324 341 2.35234e+019
+116 43 2.33114e+019
+378 353 2.32916e+019
+271 279 2.32497e+019
+528 98 2.32447e+019
+566 43 2.32008e+019
+192 331 2.30993e+019
+100 221 2.29214e+019
+348 241 2.28475e+019
+283 72 2.24447e+019
+64 60 2.24269e+019
+170 57 2.24253e+019
+184 35 2.24172e+019
+151 307 2.22173e+019
+387 295 2.2217e+019
+36 174 2.21603e+019
+340 9 2.21407e+019
+33 99 2.20096e+019
+327 127 2.18275e+019
+334 436 2.17917e+019
+345 109 2.17775e+019
+95 446 2.16059e+019
+69 27 2.1482e+019
+55 31 2.14327e+019
+302 206 2.131e+019
+66 320 2.12773e+019
+342 337 2.12368e+019
+329 254 2.12142e+019
+139 173 2.12001e+019
+481 179 2.11707e+019
+326 426 2.11091e+019
+87 148 2.11022e+019
+355 320 2.10994e+019
+66 214 2.10412e+019
+343 7 2.09632e+019
+422 44 2.08969e+019
+158 1 2.08739e+019
+101 78 2.08578e+019
+533 183 2.08214e+019
+111 241 2.08085e+019
+577 15 2.07589e+019
+475 22 2.0723e+019
+195 58 2.07188e+019
+395 260 2.0716e+019
+216 279 2.0702e+019
+356 268 2.07002e+019
+512 125 2.06825e+019
+203 310 2.0618e+019
+158 143 2.04611e+019
+328 142 2.04504e+019
+347 392 2.04351e+019
+277 352 2.03904e+019
+233 162 2.03872e+019
+456 83 2.03073e+019
+53 43 2.02657e+019
+514 223 2.01903e+019
+254 139 2.01499e+019
+338 165 2.01102e+019
+482 327 2.00878e+019
+522 122 1.99399e+019
+123 272 1.99002e+019
+449 219 1.98652e+019
+68 149 1.9843e+019
+208 451 1.98355e+019
+472 63 1.97822e+019
+48 100 1.968e+019
+162 214 1.96612e+019
+345 241 1.96603e+019
+542 210 1.95717e+019
+31 219 1.94513e+019
+417 7 1.92853e+019
+248 404 1.92792e+019
+165 217 1.92368e+019
+451 376 1.92133e+019
+503 361 1.91591e+019
+206 224 1.90896e+019
+416 23 1.90641e+019
+387 243 1.89963e+019
+57 364 1.88805e+019
+492 140 1.88604e+019
+212 182 1.88578e+019
+452 205 1.87701e+019
+465 197 1.87635e+019
+177 260 1.87252e+019
+38 296 1.86455e+019
+451 337 1.86334e+019
+366 144 1.84904e+019
+408 63 1.84809e+019
+169 198 1.84382e+019
+279 222 1.84016e+019
+46 147 1.83786e+019
+87 209 1.83548e+019
+170 18 1.8327e+019
+529 23 1.83147e+019
+86 255 1.82771e+019
+187 99 1.82249e+019
+556 40 1.81595e+019
+127 252 1.81465e+019
+357 335 1.81437e+019
+484 179 1.81187e+019
+175 109 1.80974e+019
+2 46 1.80918e+019
+512 128 1.80912e+019
+48 26 1.80781e+019
+49 153 1.80524e+019
+56 5 1.80294e+019
+91 292 1.79296e+019
+264 445 1.79174e+019
+147 21 1.7895e+019
+55 294 1.78911e+019
+328 66 1.78835e+019
+275 181 1.78642e+019
+37 138 1.78495e+019
+242 203 1.78017e+019
+191 359 1.77619e+019
+192 219 1.7703e+019
+141 324 1.76892e+019
+358 10 1.76428e+019
+512 295 1.76228e+019
+403 188 1.76178e+019
+234 346 1.74111e+019
+42 339 1.73567e+019
+229 35 1.73388e+019
+220 178 1.72337e+019
+114 345 1.72041e+019
+150 222 1.71703e+019
+131 148 1.71628e+019
+512 98 1.71289e+019
+55 66 1.70078e+019
+153 225 1.70052e+019
+273 130 1.70033e+019
+306 439 1.69912e+019
+121 52 1.69904e+019
+408 352 1.69824e+019
+45 81 1.69635e+019
+567 161 1.68751e+019
+164 242 1.68587e+019
+360 217 1.68518e+019
+545 4 1.68381e+019
+362 251 1.6836e+019
+236 92 1.68273e+019
+298 70 1.66953e+019
+37 288 1.66724e+019
+406 375 1.66308e+019
+379 66 1.65468e+019
+478 263 1.65405e+019
+41 64 1.65366e+019
+72 97 1.65318e+019
+433 110 1.65266e+019
+286 296 1.64243e+019
+546 57 1.63995e+019
+246 294 1.63763e+019
+22 61 1.63733e+019
+294 25 1.63515e+019
+209 223 1.63227e+019
+497 228 1.62875e+019
+15 219 1.62868e+019
+470 239 1.6271e+019
+232 200 1.62587e+019
+239 93 1.62203e+019
+312 7 1.6158e+019
+153 222 1.60484e+019
+136 206 1.60383e+019
+508 7 1.59906e+019
+54 289 1.59291e+019
+338 391 1.59277e+019
+541 99 1.58901e+019
+108 183 1.58794e+019
+274 281 1.57431e+019
+426 119 1.57119e+019
+340 13 1.57111e+019
+115 392 1.56795e+019
+157 55 1.5628e+019
+422 398 1.56236e+019
+263 201 1.55939e+019
+128 95 1.55817e+019
+255 182 1.55267e+019
+435 281 1.55033e+019
+314 82 1.54848e+019
+176 39 1.54765e+019
+535 242 1.54562e+019
+525 345 1.54522e+019
+236 130 1.5449e+019
+241 69 1.54251e+019
+107 40 1.54068e+019
+47 11 1.54067e+019
+367 247 1.53557e+019
+105 62 1.52897e+019
+210 437 1.52766e+019
+167 325 1.52698e+019
+351 320 1.52657e+019
+526 101 1.52481e+019
+86 214 1.52374e+019
+526 223 1.52214e+019
+486 182 1.52011e+019
+449 178 1.51937e+019
+513 220 1.51372e+019
+259 201 1.5137e+019
+413 299 1.51318e+019
+276 221 1.50726e+019
+436 91 1.50327e+019
+86 77 1.49463e+019
+510 18 1.49306e+019
+158 138 1.49302e+019
+482 331 1.49298e+019
+224 183 1.49094e+019
+113 213 1.49054e+019
+157 73 1.49032e+019
+542 130 1.4861e+019
+286 166 1.48554e+019
+211 57 1.48539e+019
+177 93 1.4841e+019
+254 422 1.48347e+019
+18 342 1.48257e+019
+280 128 1.48148e+019
+479 294 1.48011e+019
+358 393 1.47781e+019
+547 40 1.47149e+019
+525 424 1.46825e+019
+317 148 1.46127e+019
+382 411 1.45964e+019
+281 51 1.45604e+019
+196 82 1.45237e+019
+259 221 1.45114e+019
+432 83 1.45097e+019
+478 16 1.44888e+019
+528 188 1.44816e+019
+245 14 1.44495e+019
+576 178 1.43924e+019
+403 6 1.43915e+019
+57 290 1.43766e+019
+242 100 1.43356e+019
+105 4 1.43259e+019
+141 2 1.43223e+019
+289 137 1.43164e+019
+324 314 1.43141e+019
+110 96 1.42931e+019
+273 297 1.42725e+019
+236 163 1.42529e+019
+377 119 1.42322e+019
+221 182 1.42286e+019
+7 11 1.42212e+019
+301 165 1.42177e+019
+526 38 1.42017e+019
+537 186 1.41967e+019
+103 359 1.41116e+019
+156 318 1.41025e+019
+358 64 1.40789e+019
+366 7 1.40679e+019
+379 69 1.40617e+019
+173 312 1.40589e+019
+63 218 1.40154e+019
+477 12 1.40022e+019
+457 375 1.39828e+019
+390 296 1.39683e+019
+356 128 1.39531e+019
+384 354 1.39457e+019
+241 97 1.38832e+019
+527 361 1.3871e+019
+44 10 1.38462e+019
+94 217 1.38396e+019
+244 165 1.38343e+019
+345 351 1.38311e+019
+408 182 1.38014e+019
+230 266 1.37901e+019
+342 106 1.37709e+019
+136 128 1.37534e+019
+511 101 1.37447e+019
+219 35 1.37438e+019
+141 394 1.37326e+019
+6 45 1.3698e+019
+183 19 1.36664e+019
+173 40 1.36659e+019
+530 183 1.36655e+019
+358 143 1.36482e+019
+181 380 1.35998e+019
+365 251 1.35915e+019
+181 398 1.35777e+019
+239 422 1.35278e+019
+35 200 1.35166e+019
+84 476 1.35052e+019
+214 56 1.35023e+019
+181 394 1.34827e+019
+529 102 1.3443e+019
+443 23 1.34369e+019
+352 147 1.34268e+019
+103 392 1.34223e+019
+306 192 1.34026e+019
+481 182 1.33916e+019
+516 348 1.33565e+019
+28 236 1.33001e+019
+325 145 1.32499e+019
+140 183 1.32387e+019
+100 199 1.32355e+019
+100 162 1.32229e+019
+344 263 1.32212e+019
+64 371 1.32177e+019
+82 136 1.31824e+019
+389 140 1.31639e+019
+45 97 1.31088e+019
+256 35 1.31063e+019
+290 264 1.31044e+019
+379 7 1.30479e+019
+307 448 1.30207e+019
+584 38 1.29852e+019
+448 168 1.29805e+019
+484 59 1.29701e+019
+275 319 1.29443e+019
+124 252 1.28811e+019
+285 212 1.28375e+019
+155 1 1.27084e+019
+259 71 1.27038e+019
+325 165 1.26907e+019
+541 124 1.26562e+019
+351 271 1.26365e+019
+245 206 1.26162e+019
+146 160 1.25946e+019
+272 53 1.25548e+019
+286 209 1.2517e+019
+58 74 1.25078e+019
+220 107 1.24977e+019
+166 96 1.24633e+019
+296 420 1.2429e+019
+198 130 1.24117e+019
+220 100 1.23716e+019
+329 9 1.23696e+019
+346 297 1.23664e+019
+243 190 1.23516e+019
+597 272 1.2338e+019
+497 79 1.23236e+019
+110 46 1.23107e+019
+475 5 1.23096e+019
+418 68 1.23015e+019
+333 89 1.2301e+019
+571 448 1.22961e+019
+408 67 1.22834e+019
+214 59 1.22653e+019
+38 219 1.22633e+019
+4 63 1.22071e+019
+81 77 1.22034e+019
+362 360 1.22031e+019
+520 263 1.21964e+019
+290 49 1.21853e+019
+110 27 1.21681e+019
+195 16 1.21599e+019
+378 339 1.21221e+019
+136 176 1.21044e+019
+278 145 1.20982e+019
+141 22 1.20792e+019
+297 410 1.20688e+019
+112 165 1.20159e+019
+506 203 1.19983e+019
+490 343 1.19507e+019
+344 197 1.19473e+019
+568 382 1.19237e+019
+48 97 1.19125e+019
+46 219 1.19092e+019
+178 164 1.19018e+019
+136 21 1.19007e+019
+520 183 1.18652e+019
+187 34 1.18487e+019
+137 98 1.18349e+019
+239 202 1.18339e+019
+338 473 1.18158e+019
+90 256 1.17777e+019
+116 184 1.17514e+019
+208 54 1.17492e+019
+277 370 1.17156e+019
+536 393 1.17066e+019
+357 282 1.16782e+019
+507 164 1.16414e+019
+163 207 1.16347e+019
+561 320 1.1614e+019
+110 264 1.15996e+019
+371 393 1.15961e+019
+514 382 1.15902e+019
+33 65 1.15751e+019
+131 476 1.15556e+019
+398 169 1.15485e+019
+97 79 1.15443e+019
+381 26 1.15376e+019
+94 6 1.15348e+019
+391 324 1.15345e+019
+42 24 1.15212e+019
+220 290 1.15031e+019
+386 292 1.14921e+019
+429 88 1.14856e+019
+369 162 1.14777e+019
+281 132 1.14534e+019
+50 12 1.14347e+019
+500 224 1.14132e+019
+363 9 1.13926e+019
+211 33 1.13531e+019
+406 122 1.13373e+019
+420 81 1.13191e+019
+480 403 1.12908e+019
+68 337 1.12821e+019
+475 342 1.12818e+019
+267 297 1.12737e+019
+163 358 1.12512e+019
+393 46 1.12394e+019
+31 96 1.12369e+019
+152 1 1.12226e+019
+292 311 1.12156e+019
+33 172 1.12113e+019
+413 21 1.12069e+019
+392 165 1.12015e+019
+425 334 1.11982e+019
+228 184 1.11919e+019
+537 458 1.11893e+019
+422 48 1.11864e+019
+268 288 1.11778e+019
+144 187 1.1177e+019
+538 95 1.11382e+019
+187 263 1.11339e+019
+444 453 1.11195e+019
+403 265 1.11014e+019
+413 4 1.10958e+019
+560 81 1.10934e+019
+502 143 1.10811e+019
+197 55 1.10758e+019
+16 215 1.10742e+019
+513 261 1.10493e+019
+205 162 1.10476e+019
+186 401 1.10464e+019
+418 300 1.104e+019
+95 476 1.10199e+019
+365 105 1.09923e+019
+516 17 1.09863e+019
+524 24 1.09693e+019
+248 218 1.09645e+019
+250 32 1.09633e+019
+41 10 1.09131e+019
+127 186 1.09029e+019
+371 90 1.08712e+019
+598 364 1.08584e+019
+308 7 1.08474e+019
+190 205 1.08353e+019
+438 304 1.0829e+019
+163 168 1.08288e+019
+528 142 1.08266e+019
+267 30 1.0791e+019
+190 322 1.07576e+019
+374 393 1.07512e+019
+374 241 1.07314e+019
+323 260 1.07304e+019
+36 268 1.07301e+019
+9 76 1.07268e+019
+137 138 1.0705e+019
+297 331 1.06851e+019
+122 185 1.06519e+019
+114 428 1.06509e+019
+85 59 1.06418e+019
+131 255 1.06307e+019
+276 329 1.06295e+019
+164 277 1.06173e+019
+488 262 1.06089e+019
+77 8 1.05985e+019
+216 175 1.05543e+019
+342 123 1.05527e+019
+179 329 1.05262e+019
+432 268 1.05221e+019
+82 74 1.05127e+019
+260 142 1.05041e+019
+472 211 1.04993e+019
+287 33 1.04751e+019
+328 288 1.04453e+019
+154 114 1.04223e+019
+78 196 1.03265e+019
+177 18 1.0325e+019
+366 2 1.03081e+019
+404 13 1.02734e+019
+469 417 1.02578e+019
+45 407 1.02578e+019
+124 261 1.02569e+019
+314 85 1.02452e+019
+163 74 1.02218e+019
+274 369 1.02209e+019
+289 167 1.0212e+019
+358 168 1.01968e+019
+449 446 1.01715e+019
+539 40 1.016e+019
+540 13 1.01495e+019
+429 223 1.01458e+019
+492 181 1.01362e+019
+117 428 1.01334e+019
+458 266 1.01311e+019
+283 206 1.01237e+019
+324 90 1.01072e+019
+117 76 1.01062e+019
+236 221 1.0094e+019
+513 121 1.00863e+019
+209 36 1.00685e+019
+289 212 9.99003e+018
+560 229 9.97301e+018
+129 168 9.95191e+018
+204 435 9.94222e+018
+174 238 9.92762e+018
+511 43 9.92353e+018
+545 217 9.92332e+018
+408 45 9.918e+018
+93 254 9.89505e+018
+266 403 9.87627e+018
+206 159 9.86827e+018
+439 455 9.84324e+018
+547 162 9.81734e+018
+181 291 9.81025e+018
+251 10 9.80633e+018
+247 317 9.79693e+018
+417 450 9.79636e+018
+62 204 9.78838e+018
+106 59 9.78549e+018
+540 405 9.77286e+018
+250 423 9.71136e+018
+282 199 9.67943e+018
+39 406 9.67456e+018
+441 98 9.66344e+018
+68 304 9.6147e+018
+210 395 9.58667e+018
+572 328 9.57769e+018
+390 448 9.57412e+018
+173 94 9.56677e+018
+561 71 9.5537e+018
+278 418 9.54031e+018
+44 62 9.52466e+018
+182 133 9.50454e+018
+332 333 9.48838e+018
+336 317 9.47401e+018
+70 478 9.46927e+018
+370 107 9.45959e+018
+330 89 9.44891e+018
+163 328 9.43208e+018
+210 154 9.42593e+018
+495 140 9.41702e+018
+191 216 9.41511e+018
+342 464 9.39952e+018
+260 368 9.38407e+018
+357 125 9.38304e+018
+46 354 9.37814e+018
+530 366 9.37447e+018
+78 79 9.37205e+018
+419 52 9.37076e+018
+282 393 9.36517e+018
+51 61 9.3622e+018
+306 362 9.35006e+018
+29 12 9.34641e+018
+538 121 9.34586e+018
+282 135 9.33352e+018
+361 221 9.33159e+018
+445 127 9.32751e+018
+516 202 9.30942e+018
+421 6 9.29563e+018
+492 59 9.28452e+018
+472 421 9.27493e+018
+84 146 9.27372e+018
+430 44 9.25004e+018
+30 135 9.24727e+018
+242 199 9.24136e+018
+415 164 9.23711e+018
+68 96 9.23339e+018
+475 161 9.23191e+018
+544 171 9.22949e+018
+160 183 9.22645e+018
+78 2 9.22379e+018
+386 327 9.19361e+018
+469 140 9.17013e+018
+471 268 9.16629e+018
+496 462 9.16173e+018
+101 236 9.16055e+018
+513 402 9.15094e+018
+341 263 9.1463e+018
+130 239 9.14589e+018
+412 24 9.14003e+018
+113 3 9.13614e+018
+450 91 9.10064e+018
+84 310 9.07104e+018
+401 184 9.0479e+018
+505 381 9.04435e+018
+48 256 9.04015e+018
+56 373 9.03967e+018
+172 449 9.02978e+018
+274 76 9.02497e+018
+75 132 9.01379e+018
+450 22 8.99686e+018
+248 314 8.98859e+018
+321 10 8.98742e+018
+219 316 8.98637e+018
+62 133 8.98308e+018
+190 146 8.98302e+018
+398 358 8.9816e+018
+129 309 8.97842e+018
+31 269 8.97173e+018
+113 95 8.91903e+018
+318 311 8.91428e+018
+157 200 8.88537e+018
+461 220 8.8775e+018
+507 59 8.85873e+018
+186 19 8.85657e+018
+115 306 8.84936e+018
+99 195 8.84742e+018
+363 182 8.8256e+018
+497 160 8.82285e+018
+407 162 8.81799e+018
+270 62 8.81376e+018
+526 398 8.81335e+018
+344 340 8.80141e+018
+316 428 8.79013e+018
+363 370 8.78994e+018
+358 53 8.78425e+018
+228 289 8.77573e+018
+253 74 8.76361e+018
+526 104 8.74272e+018
+3 155 8.73865e+018
+523 186 8.72132e+018
+268 69 8.71103e+018
+316 107 8.70952e+018
+463 39 8.68978e+018
+134 238 8.68588e+018
+164 324 8.67355e+018
+368 337 8.66121e+018
+148 131 8.65427e+018
+386 162 8.63781e+018
+108 324 8.63749e+018
+394 162 8.63033e+018
+523 39 8.63019e+018
+365 200 8.61743e+018
+436 386 8.58967e+018
+3 382 8.57887e+018
+10 218 8.5605e+018
+391 52 8.56012e+018
+395 104 8.5576e+018
+471 4 8.54182e+018
+265 260 8.54051e+018
+341 88 8.53251e+018
+384 260 8.53063e+018
+121 239 8.52789e+018
+74 186 8.52513e+018
+199 110 8.51752e+018
+246 106 8.51521e+018
+390 19 8.5093e+018
+479 451 8.49716e+018
+569 39 8.4959e+018
+269 169 8.48547e+018
+43 474 8.47875e+018
+439 24 8.45646e+018
+364 255 8.45402e+018
+91 389 8.43034e+018
+179 103 8.4239e+018
+448 165 8.41444e+018
+333 412 8.41265e+018
+184 94 8.39716e+018
+271 184 8.39673e+018
+12 214 8.39435e+018
+583 345 8.39101e+018
+243 210 8.33216e+018
+463 23 8.32995e+018
+327 182 8.3284e+018
+151 114 8.3223e+018
+300 177 8.30412e+018
+224 218 8.29674e+018
+275 197 8.28963e+018
+88 354 8.28038e+018
+436 87 8.27316e+018
+364 357 8.27027e+018
+393 217 8.2695e+018
+149 38 8.26266e+018
+122 216 8.25767e+018
+326 13 8.25249e+018
+464 161 8.25089e+018
+39 143 8.247e+018
+18 236 8.24182e+018
+39 168 8.23885e+018
+262 391 8.21573e+018
+52 152 8.2117e+018
+116 96 8.20445e+018
+310 33 8.20289e+018
+39 355 8.20121e+018
+218 146 8.2009e+018
+291 30 8.19922e+018
+25 6 8.19687e+018
+282 351 8.19307e+018
+254 10 8.18947e+018
+548 45 8.18458e+018
+109 428 8.18085e+018
+331 127 8.17408e+018
+437 466 8.16171e+018
+565 463 8.1536e+018
+75 235 8.15059e+018
+100 95 8.14217e+018
+385 6 8.13856e+018
+317 385 8.13521e+018
+500 318 8.13434e+018
+274 206 8.12956e+018
+533 122 8.12825e+018
+536 103 8.12621e+018
+549 59 8.11081e+018
+173 18 8.10782e+018
+471 83 8.09004e+018
+184 318 8.0885e+018
+162 211 8.08741e+018
+259 34 8.06812e+018
+257 140 8.05876e+018
+217 126 8.05651e+018
+241 59 8.04727e+018
+191 57 8.04081e+018
+113 356 8.04072e+018
+78 28 8.02767e+018
+51 292 8.02172e+018
+274 215 8.00365e+018
+331 295 8.00196e+018
+279 363 7.99979e+018
+474 246 7.99953e+018
+89 376 7.99801e+018
+341 126 7.98003e+018
+83 404 7.97955e+018
+256 405 7.96576e+018
+289 349 7.96297e+018
+559 271 7.96202e+018
+24 65 7.9609e+018
+406 142 7.95796e+018
+159 112 7.95156e+018
+168 243 7.9396e+018
+108 136 7.93648e+018
+163 315 7.91643e+018
+412 220 7.91529e+018
+50 452 7.91374e+018
+222 430 7.90154e+018
+540 140 7.8932e+018
+575 126 7.89151e+018
+286 72 7.88508e+018
+173 37 7.8824e+018
+155 195 7.87102e+018
+140 98 7.87039e+018
+267 52 7.87031e+018
+507 3 7.86522e+018
+220 149 7.85743e+018
+272 289 7.84834e+018
+392 293 7.84664e+018
+214 123 7.84268e+018
+58 253 7.84037e+018
+362 397 7.83586e+018
+281 418 7.83231e+018
+191 189 7.81167e+018
+88 369 7.78714e+018
+187 292 7.7796e+018
+243 419 7.77688e+018
+103 305 7.76143e+018
+554 379 7.74442e+018
+412 245 7.73168e+018
+232 274 7.73092e+018
+304 162 7.68603e+018
+533 340 7.68221e+018
+363 143 7.6734e+018
+392 66 7.67219e+018
+512 95 7.66307e+018
+161 144 7.65706e+018
+95 450 7.65619e+018
+112 134 7.65353e+018
+90 289 7.64962e+018
+387 16 7.64918e+018
+472 201 7.62694e+018
+126 308 7.62425e+018
+438 68 7.61293e+018
+49 147 7.60934e+018
+50 160 7.60515e+018
+175 115 7.59916e+018
+390 48 7.58908e+018
+142 179 7.57907e+018
+317 224 7.56819e+018
+134 132 7.56665e+018
+325 295 7.56506e+018
+207 436 7.55289e+018
+197 148 7.54578e+018
+157 40 7.53199e+018
+53 221 7.50014e+018
+525 381 7.49232e+018
+258 237 7.48967e+018
+240 196 7.48962e+018
+121 447 7.48415e+018
+438 239 7.48276e+018
+465 281 7.47394e+018
+386 63 7.46929e+018
+117 360 7.46904e+018
+279 86 7.45605e+018
+370 82 7.42397e+018
+564 16 7.42026e+018
+45 137 7.42022e+018
+472 42 7.41945e+018
+516 120 7.4172e+018
+436 389 7.40735e+018
+186 288 7.39323e+018
+64 276 7.39207e+018
+572 161 7.38811e+018
+164 18 7.38728e+018
+258 151 7.37584e+018
+203 293 7.36611e+018
+489 43 7.36027e+018
+527 80 7.35347e+018
+57 332 7.3508e+018
+527 395 7.34813e+018
+544 91 7.34752e+018
+160 430 7.34244e+018
+137 56 7.3311e+018
+528 160 7.32929e+018
+407 196 7.31962e+018
+49 79 7.31957e+018
+247 394 7.31932e+018
+222 239 7.30906e+018
+571 456 7.29971e+018
+347 120 7.29752e+018
+226 180 7.295e+018
+65 252 7.28078e+018
+9 476 7.27112e+018
+416 86 7.25585e+018
+18 319 7.24954e+018
+258 131 7.2482e+018
+261 287 7.23441e+018
+172 112 7.23365e+018
+488 139 7.2255e+018
+485 4 7.22202e+018
+447 245 7.22075e+018
+531 398 7.21046e+018
+196 193 7.21017e+018
+146 98 7.2037e+018
+247 346 7.20226e+018
+335 445 7.19351e+018
+88 183 7.18842e+018
+220 210 7.18729e+018
+500 420 7.17492e+018
+309 356 7.17434e+018
+441 320 7.16951e+018
+375 341 7.16349e+018
+111 40 7.16313e+018
+316 167 7.16143e+018
+287 343 7.15205e+018
+262 216 7.14822e+018
+70 409 7.14805e+018
+211 21 7.14682e+018
+169 309 7.14607e+018
+400 319 7.13685e+018
+429 340 7.13263e+018
+95 20 7.11863e+018
+14 30 7.11492e+018
+23 322 7.11404e+018
+223 114 7.11213e+018
+390 420 7.08812e+018
+105 198 7.08099e+018
+45 131 7.0539e+018
+201 21 7.04839e+018
+22 58 7.04816e+018
+356 341 7.04004e+018
+221 339 7.02807e+018
+21 132 7.02507e+018
+215 425 7.01956e+018
+59 60 7.01797e+018
+524 172 7.0062e+018
+70 130 7.00263e+018
+572 451 6.99681e+018
+146 452 6.99341e+018
+561 60 6.9926e+018
+2 435 6.97494e+018
+259 161 6.9632e+018
+207 417 6.94948e+018
+447 351 6.94801e+018
+160 98 6.94348e+018
+466 102 6.93159e+018
+405 199 6.92683e+018
+107 96 6.92637e+018
+201 317 6.90707e+018
+166 117 6.90446e+018
+538 263 6.89402e+018
+431 275 6.89138e+018
+479 82 6.88833e+018
+293 334 6.88638e+018
+272 414 6.87593e+018
+59 372 6.87559e+018
+11 83 6.8734e+018
+564 39 6.86475e+018
+333 216 6.86471e+018
+320 119 6.86387e+018
+164 381 6.85305e+018
+144 325 6.85208e+018
+575 98 6.85032e+018
+418 282 6.84463e+018
+366 259 6.82775e+018
+179 274 6.82331e+018
+497 224 6.8197e+018
+149 231 6.81955e+018
+95 374 6.8177e+018
+377 461 6.80531e+018
+516 141 6.80262e+018
+65 363 6.80231e+018
+571 384 6.79526e+018
+229 347 6.79181e+018
+81 474 6.78649e+018
+189 107 6.77425e+018
+551 385 6.77041e+018
+438 378 6.76459e+018
+435 242 6.76134e+018
+133 64 6.75719e+018
+509 361 6.74436e+018
+403 180 6.7414e+018
+494 455 6.72802e+018
+299 399 6.72669e+018
+475 255 6.72077e+018
+344 48 6.71746e+018
+213 62 6.71621e+018
+117 115 6.7138e+018
+141 309 6.71067e+018
+447 136 6.70839e+018
+318 460 6.70832e+018
+395 23 6.69646e+018
+384 146 6.69106e+018
+164 202 6.68241e+018
+330 133 6.67926e+018
+278 263 6.67473e+018
+302 102 6.66324e+018
+153 233 6.66233e+018
+101 362 6.6579e+018
+208 421 6.65578e+018
+244 402 6.65306e+018
+504 260 6.63185e+018
+351 88 6.62605e+018
+353 127 6.6256e+018
+34 112 6.62248e+018
+297 182 6.62052e+018
+440 63 6.60759e+018
+217 98 6.60042e+018
+569 202 6.59973e+018
+80 40 6.59278e+018
+570 183 6.5927e+018
+167 19 6.59248e+018
+449 403 6.55931e+018
+168 422 6.55891e+018
+465 139 6.55365e+018
+459 44 6.54808e+018
+7 116 6.54805e+018
+398 265 6.53997e+018
+106 77 6.53729e+018
+260 231 6.53563e+018
+67 474 6.53101e+018
+314 75 6.52896e+018
+446 376 6.52625e+018
+327 90 6.52107e+018
+475 202 6.51161e+018
+435 303 6.51055e+018
+40 215 6.50149e+018
+540 165 6.49975e+018
+187 182 6.49164e+018
+84 289 6.49138e+018
+390 332 6.48138e+018
+303 180 6.47911e+018
+339 427 6.47051e+018
+359 160 6.45957e+018
+272 241 6.44949e+018
+221 72 6.4471e+018
+404 45 6.44026e+018
+260 272 6.43853e+018
+208 57 6.43789e+018
+86 365 6.41162e+018
+211 187 6.41113e+018
+219 279 6.41012e+018
+393 222 6.40712e+018
+414 262 6.40597e+018
+233 296 6.40159e+018
+29 66 6.37245e+018
+91 79 6.36267e+018
+102 42 6.34454e+018
+388 282 6.34326e+018
+378 63 6.3404e+018
+48 132 6.33689e+018
+478 176 6.3354e+018
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_7_5.txt b/test_data/harriscorners/hc_msc_3.00_0.10_7_5.txt
new file mode 100644
index 0000000..3ea8401
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_7_5.txt
@@ -0,0 +1,1111 @@
+1110
+245 94 7.93833e+020
+273 365 6.16873e+020
+237 20 5.39745e+020
+261 297 5.06198e+020
+423 178 5.03014e+020
+362 401 4.91781e+020
+543 365 4.52516e+020
+27 9 4.41432e+020
+65 343 4.3046e+020
+281 113 4.27048e+020
+76 257 4.23405e+020
+465 393 3.94011e+020
+82 28 3.90413e+020
+131 26 3.88975e+020
+195 58 3.73473e+020
+37 62 3.6955e+020
+252 13 3.51471e+020
+59 218 3.44381e+020
+343 9 3.41501e+020
+320 224 3.29754e+020
+387 10 3.28647e+020
+448 297 3.24214e+020
+131 36 3.22908e+020
+427 320 3.17554e+020
+420 181 3.1723e+020
+127 165 3.13923e+020
+360 295 3.03239e+020
+33 99 3.00169e+020
+200 17 2.99985e+020
+81 2 2.95783e+020
+239 91 2.9553e+020
+510 124 2.93241e+020
+447 397 2.87618e+020
+128 2 2.77759e+020
+418 439 2.773e+020
+420 178 2.69803e+020
+552 40 2.67768e+020
+528 24 2.63392e+020
+452 339 2.62689e+020
+519 61 2.62595e+020
+358 260 2.61695e+020
+138 203 2.61145e+020
+484 338 2.60904e+020
+257 385 2.60368e+020
+448 262 2.59614e+020
+242 71 2.57961e+020
+153 223 2.57701e+020
+294 15 2.575e+020
+225 420 2.56769e+020
+387 178 2.52336e+020
+507 122 2.51564e+020
+456 280 2.48661e+020
+122 43 2.47811e+020
+35 137 2.45925e+020
+263 441 2.44208e+020
+511 167 2.43027e+020
+525 24 2.42538e+020
+302 185 2.38449e+020
+300 52 2.36035e+020
+513 341 2.35701e+020
+390 61 2.34325e+020
+78 2 2.32844e+020
+124 198 2.30635e+020
+302 182 2.28923e+020
+320 313 2.26042e+020
+101 222 2.26017e+020
+475 262 2.25174e+020
+389 57 2.22265e+020
+181 111 2.21448e+020
+214 72 2.20348e+020
+138 110 2.19841e+020
+36 145 2.19228e+020
+214 55 2.12897e+020
+243 202 2.1218e+020
+183 400 2.11385e+020
+544 168 2.11351e+020
+433 112 2.09463e+020
+116 44 2.09286e+020
+356 220 2.08432e+020
+45 27 2.08064e+020
+483 178 2.06598e+020
+343 338 2.0451e+020
+325 341 2.03898e+020
+4 66 2.03043e+020
+134 214 2.02649e+020
+216 279 1.99103e+020
+102 59 1.98212e+020
+480 297 1.95933e+020
+533 184 1.94848e+020
+55 290 1.94617e+020
+302 215 1.93067e+020
+435 69 1.92385e+020
+361 131 1.92312e+020
+426 119 1.91986e+020
+177 106 1.91973e+020
+48 26 1.87172e+020
+411 354 1.86562e+020
+222 39 1.85905e+020
+225 38 1.85773e+020
+112 393 1.85688e+020
+55 29 1.85483e+020
+57 4 1.84723e+020
+125 364 1.83788e+020
+404 121 1.81888e+020
+283 403 1.81108e+020
+421 335 1.8055e+020
+142 324 1.80529e+020
+41 63 1.79879e+020
+66 215 1.79499e+020
+390 295 1.78087e+020
+283 72 1.77944e+020
+456 283 1.77819e+020
+338 12 1.76859e+020
+70 25 1.76428e+020
+371 162 1.76231e+020
+509 455 1.75504e+020
+176 109 1.75354e+020
+144 310 1.74926e+020
+476 21 1.74646e+020
+123 185 1.74617e+020
+524 20 1.73203e+020
+125 254 1.72286e+020
+169 57 1.71867e+020
+425 377 1.71406e+020
+309 7 1.70975e+020
+461 279 1.70515e+020
+412 256 1.70388e+020
+308 372 1.70202e+020
+150 307 1.69764e+020
+234 346 1.69292e+020
+545 41 1.69235e+020
+261 165 1.68815e+020
+92 198 1.68411e+020
+365 143 1.67882e+020
+360 337 1.67649e+020
+86 255 1.66934e+020
+383 9 1.65543e+020
+386 220 1.65449e+020
+391 144 1.64932e+020
+100 198 1.64102e+020
+207 450 1.64043e+020
+431 147 1.63523e+020
+163 214 1.62999e+020
+434 398 1.627e+020
+327 142 1.62461e+020
+351 321 1.61772e+020
+329 128 1.61714e+020
+579 16 1.61121e+020
+480 179 1.60917e+020
+88 148 1.60012e+020
+13 218 1.59909e+020
+363 251 1.58919e+020
+167 286 1.58795e+020
+233 15 1.58777e+020
+510 173 1.58627e+020
+64 60 1.57037e+020
+36 173 1.566e+020
+75 6 1.54692e+020
+84 78 1.54198e+020
+60 41 1.53591e+020
+174 40 1.52756e+020
+301 165 1.52512e+020
+109 239 1.51748e+020
+54 66 1.51329e+020
+346 240 1.51181e+020
+261 222 1.51067e+020
+210 451 1.50953e+020
+32 66 1.50631e+020
+64 236 1.50121e+020
+220 290 1.49923e+020
+252 423 1.49843e+020
+542 210 1.49771e+020
+417 23 1.49343e+020
+41 217 1.49255e+020
+567 43 1.47954e+020
+163 277 1.47931e+020
+139 173 1.47717e+020
+334 436 1.4714e+020
+403 187 1.46931e+020
+95 477 1.46347e+020
+62 203 1.46285e+020
+272 280 1.45941e+020
+439 339 1.45833e+020
+177 260 1.45415e+020
+168 197 1.45225e+020
+358 334 1.44882e+020
+212 59 1.44375e+020
+545 4 1.43884e+020
+511 128 1.43713e+020
+545 59 1.43239e+020
+543 15 1.43069e+020
+57 183 1.43026e+020
+40 296 1.42921e+020
+527 99 1.42106e+020
+509 19 1.406e+020
+515 347 1.4007e+020
+342 263 1.39708e+020
+230 36 1.3968e+020
+264 445 1.39218e+020
+408 182 1.39172e+020
+271 166 1.3866e+020
+387 294 1.37934e+020
+300 265 1.37495e+020
+379 7 1.37411e+020
+348 179 1.37346e+020
+159 138 1.37309e+020
+479 18 1.37093e+020
+210 435 1.36776e+020
+71 147 1.35355e+020
+42 339 1.34621e+020
+479 262 1.34239e+020
+354 321 1.33664e+020
+328 253 1.33166e+020
+490 139 1.32774e+020
+302 205 1.3249e+020
+453 206 1.31157e+020
+482 365 1.31041e+020
+276 352 1.30244e+020
+515 76 1.30061e+020
+541 124 1.2985e+020
+355 268 1.29771e+020
+530 186 1.29579e+020
+96 447 1.29216e+020
+448 166 1.29016e+020
+246 145 1.28768e+020
+238 349 1.27946e+020
+395 261 1.27887e+020
+413 162 1.27626e+020
+386 243 1.2761e+020
+104 4 1.27387e+020
+423 332 1.27381e+020
+470 239 1.27002e+020
+78 79 1.26576e+020
+497 81 1.26518e+020
+68 149 1.26235e+020
+100 78 1.25947e+020
+58 364 1.25417e+020
+137 206 1.25391e+020
+68 337 1.25117e+020
+556 40 1.25032e+020
+221 16 1.24347e+020
+326 427 1.23728e+020
+525 38 1.23589e+020
+482 328 1.23374e+020
+471 421 1.23362e+020
+48 99 1.23059e+020
+410 65 1.22644e+020
+528 102 1.22459e+020
+52 43 1.22363e+020
+123 272 1.22363e+020
+254 138 1.22302e+020
+65 319 1.21898e+020
+44 97 1.21517e+020
+192 219 1.21199e+020
+512 262 1.21178e+020
+49 151 1.20956e+020
+212 182 1.20942e+020
+494 140 1.20897e+020
+108 28 1.20404e+020
+358 128 1.20386e+020
+10 102 1.20307e+020
+413 299 1.20222e+020
+345 350 1.1945e+020
+211 185 1.19292e+020
+417 8 1.1921e+020
+324 314 1.18726e+020
+249 364 1.18496e+020
+270 71 1.18357e+020
+345 108 1.18157e+020
+163 74 1.18148e+020
+2 47 1.17703e+020
+363 7 1.17622e+020
+311 150 1.17468e+020
+358 10 1.17263e+020
+37 296 1.17034e+020
+406 198 1.16687e+020
+184 36 1.16523e+020
+46 355 1.16296e+020
+225 182 1.16233e+020
+221 180 1.16066e+020
+8 10 1.16035e+020
+313 84 1.15993e+020
+407 64 1.15545e+020
+36 176 1.15526e+020
+18 343 1.15407e+020
+170 18 1.1529e+020
+85 214 1.14855e+020
+164 327 1.1456e+020
+328 297 1.13674e+020
+51 98 1.13386e+020
+229 292 1.13092e+020
+377 119 1.12794e+020
+140 394 1.12787e+020
+37 218 1.12527e+020
+234 162 1.12504e+020
+422 48 1.12338e+020
+509 343 1.11958e+020
+540 14 1.11822e+020
+365 105 1.11782e+020
+484 59 1.11525e+020
+106 39 1.11348e+020
+498 159 1.11124e+020
+50 12 1.11014e+020
+156 318 1.10993e+020
+340 8 1.10969e+020
+368 144 1.10947e+020
+332 295 1.10519e+020
+393 294 1.10429e+020
+361 221 1.10081e+020
+529 183 1.09791e+020
+265 31 1.09035e+020
+167 326 1.08978e+020
+512 296 1.07632e+020
+293 27 1.07552e+020
+92 292 1.07421e+020
+367 247 1.07368e+020
+449 445 1.07357e+020
+244 165 1.06913e+020
+102 359 1.06094e+020
+149 223 1.05734e+020
+164 358 1.05631e+020
+471 212 1.05473e+020
+520 184 1.04811e+020
+350 145 1.04387e+020
+225 221 1.0436e+020
+113 345 1.04263e+020
+239 202 1.04241e+020
+47 11 1.0405e+020
+317 312 1.04014e+020
+47 147 1.03987e+020
+221 432 1.03929e+020
+508 5 1.03901e+020
+436 303 1.03883e+020
+360 217 1.03813e+020
+452 377 1.03643e+020
+325 164 1.03617e+020
+249 403 1.03592e+020
+94 218 1.03541e+020
+449 219 1.03475e+020
+61 134 1.03456e+020
+247 399 1.03204e+020
+371 90 1.0299e+020
+106 61 1.02917e+020
+141 1 1.02913e+020
+523 123 1.02463e+020
+31 270 1.02251e+020
+474 5 1.02223e+020
+358 64 1.02131e+020
+278 222 1.01921e+020
+374 393 1.01682e+020
+108 45 1.0162e+020
+165 244 1.01598e+020
+135 129 1.01279e+020
+249 423 1.01159e+020
+527 361 1.00731e+020
+298 69 1.00543e+020
+506 16 1.00486e+020
+31 219 1.00194e+020
+105 198 1.0007e+020
+248 316 9.93434e+019
+211 438 9.91355e+019
+329 12 9.89257e+019
+423 398 9.8906e+019
+512 99 9.83134e+019
+272 53 9.81461e+019
+73 23 9.81458e+019
+210 445 9.77405e+019
+384 260 9.7347e+019
+46 82 9.72967e+019
+512 220 9.7136e+019
+399 261 9.68522e+019
+537 393 9.68354e+019
+576 14 9.68093e+019
+157 73 9.67172e+019
+70 476 9.66468e+019
+192 330 9.6393e+019
+449 204 9.61342e+019
+245 294 9.58579e+019
+346 298 9.5536e+019
+275 329 9.511e+019
+126 76 9.49871e+019
+358 282 9.49026e+019
+84 476 9.47066e+019
+476 341 9.46303e+019
+325 294 9.44124e+019
+166 97 9.41335e+019
+58 29 9.39272e+019
+548 163 9.37306e+019
+228 185 9.32798e+019
+77 41 9.3079e+019
+531 102 9.29291e+019
+562 146 9.28675e+019
+444 453 9.28287e+019
+71 96 9.27674e+019
+539 405 9.22603e+019
+140 22 9.21674e+019
+488 263 9.21325e+019
+403 265 9.20866e+019
+516 18 9.20494e+019
+393 66 9.20457e+019
+519 264 9.17022e+019
+207 224 9.15861e+019
+471 268 9.15215e+019
+550 378 9.1451e+019
+328 66 9.14058e+019
+525 423 9.12533e+019
+475 246 9.1189e+019
+55 294 9.08602e+019
+109 96 9.08475e+019
+333 91 9.08138e+019
+456 84 9.06903e+019
+144 6 9.06738e+019
+489 43 9.05444e+019
+465 196 9.04791e+019
+584 38 9.02699e+019
+118 75 9.02457e+019
+366 5 9.00689e+019
+57 373 9.00665e+019
+517 57 8.99918e+019
+193 216 8.99709e+019
+306 440 8.97486e+019
+220 100 8.96941e+019
+36 201 8.96864e+019
+498 225 8.94193e+019
+41 10 8.93829e+019
+278 144 8.9054e+019
+180 394 8.88592e+019
+542 132 8.87235e+019
+291 50 8.86264e+019
+542 129 8.8293e+019
+224 218 8.81641e+019
+42 24 8.78803e+019
+23 61 8.78455e+019
+254 10 8.77472e+019
+79 197 8.7587e+019
+138 98 8.73343e+019
+436 320 8.73066e+019
+186 289 8.72728e+019
+362 395 8.71743e+019
+530 144 8.66952e+019
+191 360 8.64792e+019
+120 447 8.64118e+019
+410 163 8.63827e+019
+543 457 8.62426e+019
+378 66 8.61229e+019
+273 296 8.6044e+019
+221 177 8.59795e+019
+359 143 8.59091e+019
+279 128 8.58894e+019
+128 187 8.57621e+019
+187 264 8.57447e+019
+255 150 8.57291e+019
+65 371 8.56877e+019
+408 45 8.56079e+019
+209 20 8.55482e+019
+287 166 8.55134e+019
+471 83 8.47804e+019
+5 45 8.46822e+019
+113 95 8.46187e+019
+307 449 8.4404e+019
+463 40 8.4368e+019
+330 89 8.42382e+019
+397 265 8.40177e+019
+193 16 8.39178e+019
+463 23 8.39095e+019
+342 107 8.39044e+019
+231 125 8.37665e+019
+571 450 8.36859e+019
+69 420 8.3625e+019
+59 75 8.30443e+019
+314 147 8.29401e+019
+106 42 8.29042e+019
+44 9 8.26562e+019
+338 165 8.26388e+019
+359 394 8.26291e+019
+286 297 8.25398e+019
+502 160 8.25075e+019
+191 205 8.23054e+019
+393 216 8.21613e+019
+289 137 8.21493e+019
+44 62 8.20733e+019
+28 30 8.19242e+019
+165 218 8.17606e+019
+351 270 8.1627e+019
+508 166 8.15236e+019
+449 437 8.12011e+019
+297 331 8.08252e+019
+87 208 8.07022e+019
+224 178 8.06809e+019
+250 32 8.06533e+019
+541 99 8.06358e+019
+140 182 8.04016e+019
+258 161 8.03733e+019
+486 44 8.02394e+019
+221 107 8.01682e+019
+330 9 8.00678e+019
+37 287 7.99795e+019
+363 358 7.95189e+019
+166 277 7.94684e+019
+129 168 7.94e+019
+565 160 7.93226e+019
+297 410 7.90397e+019
+82 135 7.89872e+019
+568 382 7.89531e+019
+259 35 7.88808e+019
+160 183 7.88526e+019
+530 362 7.88399e+019
+432 275 7.86525e+019
+160 143 7.8597e+019
+444 119 7.8595e+019
+196 127 7.84312e+019
+127 96 7.77796e+019
+273 131 7.75006e+019
+133 93 7.71117e+019
+514 382 7.70732e+019
+241 421 7.6795e+019
+332 127 7.67645e+019
+154 114 7.67458e+019
+388 16 7.67273e+019
+405 375 7.66491e+019
+90 376 7.66306e+019
+469 140 7.65286e+019
+386 327 7.63425e+019
+162 111 7.61982e+019
+109 137 7.61619e+019
+336 391 7.6007e+019
+212 33 7.59784e+019
+130 476 7.59267e+019
+154 236 7.58574e+019
+166 312 7.5482e+019
+535 241 7.54362e+019
+513 20 7.52841e+019
+538 97 7.52715e+019
+220 150 7.52706e+019
+382 412 7.52186e+019
+525 186 7.51588e+019
+334 218 7.51012e+019
+31 135 7.50656e+019
+182 380 7.49791e+019
+449 178 7.46652e+019
+215 175 7.44762e+019
+276 180 7.44021e+019
+393 164 7.43619e+019
+483 143 7.42479e+019
+432 269 7.4181e+019
+270 185 7.41617e+019
+163 168 7.41249e+019
+559 80 7.40476e+019
+571 447 7.40432e+019
+526 346 7.40051e+019
+203 310 7.39797e+019
+118 425 7.3788e+019
+294 269 7.37174e+019
+425 324 7.34932e+019
+472 42 7.34429e+019
+284 199 7.33816e+019
+502 143 7.32503e+019
+354 295 7.32156e+019
+435 281 7.32022e+019
+62 369 7.3194e+019
+328 214 7.31324e+019
+478 13 7.31259e+019
+198 131 7.3061e+019
+202 315 7.28467e+019
+549 59 7.28058e+019
+364 254 7.28024e+019
+53 222 7.27618e+019
+173 116 7.26039e+019
+248 395 7.23583e+019
+135 21 7.23031e+019
+9 77 7.2298e+019
+163 208 7.22229e+019
+263 403 7.21539e+019
+280 132 7.20386e+019
+245 14 7.19878e+019
+275 317 7.19106e+019
+393 48 7.18703e+019
+338 473 7.17214e+019
+191 146 7.16245e+019
+332 131 7.15695e+019
+209 395 7.13355e+019
+390 48 7.13267e+019
+347 393 7.12941e+019
+481 451 7.12731e+019
+491 59 7.09857e+019
+389 140 7.0683e+019
+416 84 7.06482e+019
+364 181 7.05945e+019
+117 428 7.05944e+019
+473 202 7.05398e+019
+16 216 7.0487e+019
+205 160 7.03884e+019
+110 264 7.02264e+019
+381 26 7.01489e+019
+53 12 7.00877e+019
+553 378 7.00244e+019
+484 23 6.99373e+019
+107 429 6.99353e+019
+451 86 6.98804e+019
+259 71 6.96329e+019
+59 78 6.952e+019
+390 325 6.93143e+019
+456 377 6.90545e+019
+233 200 6.904e+019
+558 462 6.88409e+019
+281 419 6.87144e+019
+268 289 6.84499e+019
+297 182 6.84013e+019
+209 55 6.82455e+019
+341 122 6.82252e+019
+214 449 6.81832e+019
+527 222 6.81572e+019
+327 182 6.80718e+019
+109 169 6.78324e+019
+259 237 6.77557e+019
+264 311 6.76972e+019
+573 405 6.76025e+019
+248 313 6.75998e+019
+309 441 6.75779e+019
+64 218 6.75164e+019
+325 88 6.73227e+019
+178 94 6.73104e+019
+374 240 6.72473e+019
+221 183 6.71849e+019
+157 40 6.71832e+019
+119 115 6.71358e+019
+108 183 6.70873e+019
+338 263 6.70501e+019
+165 111 6.70181e+019
+349 298 6.68385e+019
+489 343 6.67973e+019
+130 72 6.66598e+019
+575 99 6.66479e+019
+429 223 6.66435e+019
+131 255 6.65871e+019
+251 10 6.65594e+019
+318 460 6.645e+019
+83 72 6.6242e+019
+418 68 6.61895e+019
+261 368 6.61888e+019
+432 82 6.60789e+019
+180 164 6.59573e+019
+191 350 6.58608e+019
+504 361 6.58597e+019
+439 25 6.57269e+019
+514 120 6.57231e+019
+453 102 6.57024e+019
+420 44 6.5687e+019
+39 355 6.56647e+019
+344 123 6.56199e+019
+306 193 6.56128e+019
+442 23 6.5597e+019
+359 53 6.52323e+019
+101 164 6.52241e+019
+345 277 6.52145e+019
+362 370 6.51085e+019
+562 461 6.50311e+019
+445 8 6.49224e+019
+268 53 6.49096e+019
+313 76 6.48183e+019
+190 312 6.47541e+019
+73 164 6.46419e+019
+283 395 6.46323e+019
+51 61 6.46302e+019
+398 168 6.45698e+019
+565 463 6.43749e+019
+576 179 6.43547e+019
+503 164 6.43515e+019
+303 189 6.41934e+019
+528 189 6.41356e+019
+333 258 6.40549e+019
+272 316 6.40172e+019
+378 340 6.40109e+019
+306 362 6.39144e+019
+390 449 6.38642e+019
+120 54 6.38603e+019
+206 435 6.38413e+019
+403 6 6.35565e+019
+440 455 6.34921e+019
+93 255 6.34285e+019
+34 31 6.32052e+019
+191 189 6.31829e+019
+186 19 6.29728e+019
+539 458 6.29579e+019
+246 206 6.28984e+019
+86 311 6.28095e+019
+345 48 6.26434e+019
+287 210 6.25814e+019
+569 422 6.25782e+019
+437 466 6.25473e+019
+322 425 6.25218e+019
+56 222 6.25096e+019
+418 283 6.23954e+019
+573 423 6.23439e+019
+96 79 6.22817e+019
+379 352 6.22798e+019
+355 255 6.22798e+019
+143 17 6.21973e+019
+271 182 6.20937e+019
+113 213 6.2082e+019
+147 98 6.20811e+019
+277 371 6.20756e+019
+332 201 6.19752e+019
+522 425 6.19682e+019
+470 417 6.18792e+019
+196 124 6.18185e+019
+473 63 6.1602e+019
+325 91 6.14101e+019
+356 341 6.13098e+019
+597 272 6.12876e+019
+196 194 6.12863e+019
+282 135 6.12608e+019
+454 115 6.12579e+019
+479 402 6.11171e+019
+439 378 6.10914e+019
+38 168 6.10577e+019
+164 183 6.09233e+019
+438 397 6.08527e+019
+90 255 6.07e+019
+174 239 6.06974e+019
+289 349 6.06834e+019
+158 112 6.06012e+019
+517 42 6.05383e+019
+459 266 6.04736e+019
+50 453 6.03793e+019
+413 4 6.03449e+019
+10 47 6.03392e+019
+95 20 6.03347e+019
+578 43 6.03264e+019
+166 117 6.03247e+019
+114 3 6.02935e+019
+181 292 6.02894e+019
+246 106 6.02041e+019
+576 38 6.01353e+019
+570 182 6.01161e+019
+179 329 6.00963e+019
+280 50 6.0015e+019
+175 94 5.99856e+019
+338 63 5.99321e+019
+256 35 5.99291e+019
+434 159 5.99286e+019
+561 320 5.98814e+019
+271 290 5.9848e+019
+375 4 5.97714e+019
+330 92 5.96978e+019
+275 197 5.96027e+019
+417 300 5.96015e+019
+66 477 5.94779e+019
+500 265 5.93854e+019
+536 459 5.93731e+019
+18 236 5.93065e+019
+133 148 5.92126e+019
+511 83 5.91851e+019
+147 6 5.91662e+019
+267 20 5.89898e+019
+71 409 5.89215e+019
+34 267 5.88281e+019
+156 195 5.86789e+019
+321 10 5.86399e+019
+92 59 5.86018e+019
+56 78 5.85224e+019
+170 311 5.82616e+019
+88 369 5.82259e+019
+441 240 5.82065e+019
+147 21 5.81303e+019
+574 459 5.81294e+019
+389 97 5.80934e+019
+532 398 5.80705e+019
+106 98 5.79984e+019
+174 19 5.79772e+019
+120 51 5.78982e+019
+152 196 5.78593e+019
+508 8 5.78409e+019
+404 13 5.78353e+019
+92 214 5.77951e+019
+274 215 5.77481e+019
+93 445 5.76889e+019
+249 219 5.76817e+019
+129 238 5.75857e+019
+111 111 5.75595e+019
+156 55 5.74684e+019
+367 303 5.74579e+019
+177 18 5.73905e+019
+291 264 5.73749e+019
+433 240 5.73013e+019
+211 12 5.72976e+019
+380 180 5.71178e+019
+156 94 5.69137e+019
+264 201 5.68702e+019
+433 381 5.6851e+019
+418 80 5.67725e+019
+341 110 5.67177e+019
+319 186 5.66561e+019
+29 97 5.66333e+019
+52 151 5.64379e+019
+48 256 5.64316e+019
+430 89 5.64141e+019
+16 434 5.63148e+019
+161 20 5.62988e+019
+299 178 5.62282e+019
+95 94 5.6141e+019
+578 52 5.61026e+019
+67 27 5.60772e+019
+538 186 5.59928e+019
+187 99 5.59231e+019
+505 381 5.59028e+019
+107 76 5.58629e+019
+198 111 5.58521e+019
+482 332 5.58233e+019
+445 114 5.579e+019
+450 22 5.57851e+019
+486 139 5.5775e+019
+497 228 5.57411e+019
+132 238 5.56897e+019
+214 124 5.56888e+019
+525 173 5.55818e+019
+538 263 5.55681e+019
+23 321 5.55382e+019
+332 67 5.55131e+019
+191 123 5.54876e+019
+344 198 5.54843e+019
+493 181 5.54545e+019
+599 364 5.53374e+019
+455 178 5.53015e+019
+39 83 5.51572e+019
+345 274 5.50957e+019
+402 45 5.49859e+019
+70 129 5.49385e+019
+297 420 5.46939e+019
+174 312 5.45871e+019
+278 419 5.44997e+019
+44 407 5.44941e+019
+95 5 5.44233e+019
+236 222 5.43852e+019
+229 289 5.43633e+019
+243 31 5.43337e+019
+79 474 5.42744e+019
+217 146 5.41445e+019
+86 63 5.40726e+019
+286 213 5.38891e+019
+220 317 5.38516e+019
+177 164 5.38449e+019
+224 398 5.38214e+019
+405 42 5.38138e+019
+479 293 5.37906e+019
+536 103 5.36791e+019
+395 104 5.34956e+019
+146 162 5.34912e+019
+58 254 5.34613e+019
+451 63 5.34037e+019
+184 94 5.33609e+019
+513 402 5.33585e+019
+485 5 5.33375e+019
+359 291 5.33146e+019
+482 440 5.32786e+019
+148 397 5.31098e+019
+544 218 5.30533e+019
+217 149 5.30119e+019
+423 118 5.30034e+019
+261 286 5.29612e+019
+447 350 5.29595e+019
+449 118 5.29448e+019
+406 80 5.28882e+019
+457 116 5.27119e+019
+459 304 5.26421e+019
+245 102 5.26181e+019
+466 24 5.25841e+019
+90 275 5.25255e+019
+183 316 5.23457e+019
+181 344 5.23104e+019
+376 181 5.23089e+019
+363 101 5.22926e+019
+41 137 5.22833e+019
+103 392 5.21784e+019
+269 66 5.20988e+019
+242 190 5.20478e+019
+433 43 5.20193e+019
+79 271 5.20184e+019
+364 257 5.1932e+019
+107 107 5.1874e+019
+151 114 5.18474e+019
+68 96 5.18416e+019
+444 122 5.17555e+019
+104 202 5.17088e+019
+367 337 5.16783e+019
+98 202 5.16376e+019
+212 22 5.16335e+019
+299 398 5.16299e+019
+283 208 5.13622e+019
+221 104 5.13222e+019
+160 96 5.12516e+019
+500 318 5.12377e+019
+254 77 5.11788e+019
+220 339 5.10338e+019
+470 121 5.10179e+019
+163 315 5.09221e+019
+592 18 5.0837e+019
+233 295 5.08078e+019
+136 179 5.07769e+019
+391 18 5.0647e+019
+21 132 5.06177e+019
+350 87 5.04758e+019
+129 310 5.02697e+019
+165 180 5.02438e+019
+132 75 5.0207e+019
+103 259 5.01905e+019
+297 25 5.0155e+019
+126 308 5.01031e+019
+394 23 5.01029e+019
+47 132 5.00439e+019
+460 44 4.99666e+019
+86 363 4.99198e+019
+67 304 4.98427e+019
+229 16 4.98242e+019
+506 203 4.97779e+019
+87 372 4.97297e+019
+324 259 4.97282e+019
+333 412 4.97217e+019
+217 208 4.97165e+019
+29 236 4.9683e+019
+169 243 4.96206e+019
+539 128 4.95848e+019
+85 60 4.95404e+019
+244 210 4.94329e+019
+206 308 4.94109e+019
+138 131 4.93156e+019
+528 159 4.92939e+019
+529 395 4.92836e+019
+255 405 4.92373e+019
+96 37 4.91168e+019
+163 96 4.90988e+019
+257 391 4.9061e+019
+380 121 4.90323e+019
+560 272 4.89826e+019
+445 204 4.8956e+019
+187 308 4.89417e+019
+317 453 4.89369e+019
+301 106 4.89228e+019
+243 281 4.8799e+019
+20 317 4.87714e+019
+398 357 4.87601e+019
+44 474 4.87243e+019
+387 126 4.86967e+019
+197 148 4.85305e+019
+572 326 4.84646e+019
+255 108 4.84376e+019
+292 311 4.83851e+019
+203 293 4.83568e+019
+257 131 4.82644e+019
+35 134 4.8225e+019
+49 235 4.81724e+019
+342 141 4.80527e+019
+387 3 4.80419e+019
+274 77 4.79842e+019
+358 241 4.77565e+019
+431 395 4.77482e+019
+188 143 4.77392e+019
+562 142 4.77183e+019
+257 250 4.76841e+019
+376 355 4.76712e+019
+274 205 4.75031e+019
+579 85 4.74905e+019
+56 171 4.74674e+019
+33 111 4.74128e+019
+497 463 4.73769e+019
+479 439 4.72279e+019
+74 186 4.70505e+019
+172 450 4.70224e+019
+191 58 4.70223e+019
+513 95 4.6997e+019
+46 220 4.6861e+019
+375 340 4.68122e+019
+225 50 4.67924e+019
+384 146 4.67697e+019
+138 139 4.67591e+019
+325 14 4.67042e+019
+543 443 4.66627e+019
+569 203 4.66567e+019
+290 166 4.66362e+019
+255 182 4.65128e+019
+486 376 4.64763e+019
+279 86 4.64037e+019
+34 114 4.64019e+019
+332 333 4.63599e+019
+525 400 4.6288e+019
+222 115 4.62848e+019
+288 396 4.62726e+019
+566 39 4.62128e+019
+101 235 4.61136e+019
+480 83 4.6099e+019
+301 103 4.60952e+019
+410 263 4.60576e+019
+314 448 4.60318e+019
+142 179 4.60296e+019
+75 476 4.6011e+019
+104 306 4.59421e+019
+156 445 4.57018e+019
+363 302 4.56843e+019
+165 379 4.56016e+019
+93 276 4.55077e+019
+421 299 4.54823e+019
+95 374 4.54521e+019
+104 106 4.54204e+019
+202 220 4.53838e+019
+567 180 4.53162e+019
+347 342 4.52798e+019
+511 43 4.52778e+019
+382 337 4.52686e+019
+2 435 4.51461e+019
+156 78 4.51328e+019
+9 476 4.51146e+019
+364 296 4.50519e+019
+456 161 4.50369e+019
+11 126 4.48468e+019
+462 221 4.48305e+019
+88 183 4.4829e+019
+529 365 4.47651e+019
+500 474 4.47239e+019
+221 72 4.47097e+019
+550 223 4.45632e+019
+298 274 4.44934e+019
+116 360 4.44848e+019
+168 358 4.44465e+019
+444 126 4.44455e+019
+168 179 4.4439e+019
+464 27 4.43949e+019
+336 317 4.43663e+019
+228 128 4.43652e+019
+412 245 4.43146e+019
+214 93 4.42701e+019
+453 161 4.42677e+019
+413 264 4.42338e+019
+572 179 4.42227e+019
+219 211 4.40778e+019
+262 396 4.40205e+019
+195 83 4.39963e+019
+66 252 4.39632e+019
+434 225 4.39618e+019
+151 111 4.39196e+019
+265 15 4.38888e+019
+274 220 4.3884e+019
+387 283 4.38303e+019
+232 177 4.38208e+019
+200 330 4.38108e+019
+77 163 4.37713e+019
+370 106 4.37545e+019
+205 163 4.37471e+019
+199 293 4.36896e+019
+404 143 4.36591e+019
+465 161 4.3488e+019
+329 354 4.34869e+019
+116 306 4.34602e+019
+448 136 4.34185e+019
+469 204 4.34159e+019
+291 89 4.33946e+019
+507 60 4.33697e+019
+149 132 4.33572e+019
+298 86 4.3226e+019
+254 4 4.31528e+019
+385 162 4.3152e+019
+445 445 4.30957e+019
+561 324 4.30028e+019
+125 261 4.287e+019
+100 95 4.28409e+019
+263 392 4.2765e+019
+251 152 4.27624e+019
+215 97 4.27478e+019
+143 449 4.27059e+019
+151 317 4.27001e+019
+8 235 4.25714e+019
+150 231 4.25568e+019
+547 139 4.25424e+019
+467 28 4.24659e+019
+203 258 4.24565e+019
+360 140 4.24049e+019
+387 450 4.2368e+019
+414 261 4.23493e+019
+449 139 4.22108e+019
+504 259 4.22057e+019
+157 306 4.21371e+019
+580 245 4.20439e+019
+167 291 4.20391e+019
+312 299 4.19839e+019
+562 72 4.192e+019
+103 98 4.1902e+019
+75 132 4.18392e+019
+402 167 4.18332e+019
+382 320 4.18273e+019
+581 445 4.18264e+019
+371 159 4.18173e+019
+287 33 4.17971e+019
+365 165 4.17175e+019
+438 240 4.16529e+019
+84 170 4.16516e+019
+168 150 4.1627e+019
+178 40 4.15722e+019
+243 168 4.15417e+019
+437 110 4.15176e+019
+569 39 4.14779e+019
+23 48 4.14673e+019
+252 163 4.14609e+019
+503 167 4.14157e+019
+63 252 4.14068e+019
+163 253 4.13896e+019
+561 227 4.13486e+019
+538 94 4.13425e+019
+441 98 4.13088e+019
+421 7 4.12957e+019
+379 106 4.11937e+019
+411 418 4.116e+019
diff --git a/test_data/harriscorners/hc_msc_3.00_0.10_7_7.txt b/test_data/harriscorners/hc_msc_3.00_0.10_7_7.txt
new file mode 100644
index 0000000..ab13ed4
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.10_7_7.txt
@@ -0,0 +1,1222 @@
+1221
+245 94 2.23905e+021
+81 29 1.94901e+021
+130 26 1.74076e+021
+237 20 1.65854e+021
+421 180 1.49323e+021
+261 298 1.35648e+021
+424 177 1.27291e+021
+26 9 1.21566e+021
+272 366 1.20353e+021
+424 180 1.19181e+021
+30 8 1.14311e+021
+195 58 1.12412e+021
+76 257 1.11254e+021
+81 4 1.05874e+021
+543 365 1.02632e+021
+130 37 1.00977e+021
+525 24 9.99859e+020
+37 63 9.79255e+020
+282 113 9.74533e+020
+152 223 9.60171e+020
+510 124 9.51656e+020
+528 24 9.47064e+020
+65 344 9.34467e+020
+385 10 9.23402e+020
+240 92 9.06272e+020
+343 9 9.01463e+020
+253 12 8.69899e+020
+363 400 8.39108e+020
+424 322 8.1715e+020
+388 10 8.03605e+020
+483 178 7.95869e+020
+214 57 7.8905e+020
+77 3 7.85614e+020
+542 14 7.79818e+020
+476 262 7.77446e+020
+485 338 7.77262e+020
+127 165 7.72098e+020
+302 185 7.6577e+020
+138 204 7.61183e+020
+102 222 7.48982e+020
+128 1 7.44245e+020
+361 395 7.35875e+020
+12 218 7.32633e+020
+34 139 7.26751e+020
+257 385 7.23681e+020
+55 30 7.23659e+020
+60 217 7.20979e+020
+357 259 7.20897e+020
+464 393 7.20489e+020
+359 294 7.18986e+020
+33 100 7.15869e+020
+60 40 7.11748e+020
+293 16 7.08559e+020
+451 339 7.04368e+020
+175 110 6.98635e+020
+199 18 6.97467e+020
+121 43 6.9434e+020
+320 225 6.91753e+020
+320 314 6.84618e+020
+299 53 6.82309e+020
+391 294 6.80906e+020
+458 279 6.80759e+020
+519 60 6.79072e+020
+418 438 6.67935e+020
+428 2 6.60889e+020
+122 46 6.56132e+020
+241 70 6.50396e+020
+447 261 6.49869e+020
+330 128 6.42916e+020
+226 36 6.39733e+020
+528 20 6.38086e+020
+512 342 6.34358e+020
+224 39 6.20877e+020
+523 62 6.20376e+020
+434 112 6.19958e+020
+240 95 6.01981e+020
+163 215 6.01009e+020
+328 296 5.92684e+020
+83 77 5.92547e+020
+389 60 5.91158e+020
+359 334 5.9048e+020
+310 6 5.86889e+020
+302 181 5.8389e+020
+210 450 5.83259e+020
+126 26 5.83175e+020
+224 420 5.78007e+020
+55 290 5.76472e+020
+403 121 5.7631e+020
+359 220 5.62752e+020
+533 185 5.62184e+020
+448 299 5.56231e+020
+554 40 5.55595e+020
+36 145 5.54785e+020
+115 43 5.5208e+020
+359 129 5.50027e+020
+511 169 5.48688e+020
+179 110 5.46364e+020
+405 183 5.4578e+020
+383 6 5.44858e+020
+263 442 5.4304e+020
+43 26 5.42649e+020
+182 398 5.40576e+020
+145 6 5.40486e+020
+476 21 5.38215e+020
+539 14 5.37344e+020
+408 183 5.28122e+020
+272 280 5.26306e+020
+100 198 5.25474e+020
+61 203 5.22158e+020
+511 19 5.20709e+020
+580 16 5.19542e+020
+470 422 5.14656e+020
+342 264 5.12642e+020
+337 12 5.10272e+020
+103 60 5.08843e+020
+364 251 5.07824e+020
+123 186 5.07344e+020
+576 16 5.06218e+020
+139 109 5.05762e+020
+325 341 5.03057e+020
+427 118 5.01875e+020
+448 296 5.01557e+020
+284 402 5.01282e+020
+265 446 4.94688e+020
+449 204 4.93976e+020
+423 332 4.924e+020
+399 263 4.91906e+020
+85 148 4.91857e+020
+386 178 4.91392e+020
+302 215 4.91092e+020
+410 353 4.89393e+020
+528 186 4.89118e+020
+364 143 4.87368e+020
+490 139 4.85272e+020
+150 306 4.82739e+020
+436 397 4.8251e+020
+232 125 4.82054e+020
+327 141 4.79797e+020
+87 254 4.78881e+020
+248 399 4.7858e+020
+436 68 4.76904e+020
+243 202 4.75498e+020
+66 216 4.68328e+020
+126 254 4.68323e+020
+196 127 4.67936e+020
+36 173 4.66421e+020
+528 102 4.6211e+020
+403 118 4.60241e+020
+390 143 4.60088e+020
+352 321 4.59891e+020
+345 339 4.59398e+020
+447 397 4.58035e+020
+48 26 4.56621e+020
+453 204 4.56579e+020
+3 65 4.5624e+020
+174 40 4.56063e+020
+513 262 4.56026e+020
+301 205 4.55854e+020
+143 324 4.54798e+020
+159 75 4.51806e+020
+387 220 4.51034e+020
+112 392 4.50994e+020
+545 59 4.50954e+020
+211 436 4.49396e+020
+329 258 4.49015e+020
+514 346 4.48706e+020
+64 318 4.44993e+020
+432 276 4.40707e+020
+69 476 4.40382e+020
+222 433 4.3906e+020
+135 213 4.38158e+020
+448 166 4.37743e+020
+120 185 4.37432e+020
+380 6 4.3424e+020
+165 327 4.32765e+020
+546 41 4.31911e+020
+444 118 4.30864e+020
+41 217 4.29821e+020
+345 264 4.29625e+020
+416 9 4.28919e+020
+302 165 4.27403e+020
+415 22 4.26694e+020
+96 477 4.25931e+020
+259 165 4.25687e+020
+509 454 4.25484e+020
+544 168 4.23755e+020
+165 182 4.23116e+020
+57 4 4.23036e+020
+104 3 4.23015e+020
+211 185 4.22781e+020
+149 223 4.207e+020
+70 25 4.20699e+020
+107 43 4.16285e+020
+562 461 4.16043e+020
+215 280 4.14565e+020
+109 240 4.13148e+020
+104 198 4.1277e+020
+168 196 4.12186e+020
+479 15 4.12037e+020
+229 36 4.11528e+020
+88 148 4.10996e+020
+47 98 4.10338e+020
+128 187 4.08006e+020
+4 45 4.07439e+020
+49 151 4.06762e+020
+252 424 4.06246e+020
+413 256 4.06034e+020
+389 21 4.04433e+020
+218 105 4.03357e+020
+45 339 4.02924e+020
+79 79 4.0136e+020
+215 71 4.00479e+020
+76 40 3.98185e+020
+367 144 3.9763e+020
+419 8 3.97357e+020
+42 63 3.95314e+020
+40 296 3.94481e+020
+545 3 3.93616e+020
+225 181 3.92397e+020
+129 74 3.92324e+020
+143 311 3.90784e+020
+256 151 3.90637e+020
+437 304 3.90078e+020
+169 56 3.86295e+020
+313 148 3.85866e+020
+541 124 3.84231e+020
+430 117 3.83099e+020
+500 159 3.82174e+020
+209 21 3.82107e+020
+508 166 3.80318e+020
+62 60 3.79181e+020
+176 260 3.77985e+020
+235 346 3.76178e+020
+346 240 3.76049e+020
+65 60 3.7403e+020
+158 72 3.7376e+020
+123 197 3.73433e+020
+371 161 3.72794e+020
+246 144 3.72407e+020
+293 26 3.71598e+020
+272 316 3.71096e+020
+453 207 3.70509e+020
+506 16 3.70465e+020
+54 66 3.70412e+020
+344 108 3.69282e+020
+479 296 3.68434e+020
+174 114 3.68013e+020
+328 255 3.67321e+020
+413 259 3.671e+020
+360 142 3.66804e+020
+222 179 3.66595e+020
+7 10 3.65492e+020
+32 270 3.65171e+020
+132 74 3.64914e+020
+544 457 3.61496e+020
+548 162 3.60139e+020
+481 299 3.59728e+020
+107 29 3.59292e+020
+66 476 3.59068e+020
+451 374 3.58157e+020
+355 255 3.58034e+020
+107 39 3.57857e+020
+165 179 3.56222e+020
+136 173 3.55156e+020
+298 181 3.55109e+020
+335 436 3.54853e+020
+59 184 3.54505e+020
+498 225 3.54395e+020
+404 188 3.54154e+020
+218 98 3.53499e+020
+412 298 3.52768e+020
+407 198 3.52223e+020
+221 37 3.51443e+020
+517 20 3.50536e+020
+52 42 3.49786e+020
+377 120 3.49516e+020
+430 148 3.48719e+020
+365 105 3.47933e+020
+125 364 3.47528e+020
+488 44 3.47514e+020
+261 223 3.46431e+020
+566 42 3.4602e+020
+168 286 3.45963e+020
+249 402 3.45628e+020
+510 129 3.45621e+020
+282 72 3.4487e+020
+140 19 3.44615e+020
+313 84 3.42675e+020
+111 110 3.42388e+020
+25 62 3.4214e+020
+139 174 3.42025e+020
+512 221 3.41889e+020
+345 350 3.40856e+020
+278 220 3.4075e+020
+103 77 3.40213e+020
+102 360 3.3877e+020
+557 463 3.37973e+020
+100 79 3.37826e+020
+389 164 3.37638e+020
+394 65 3.37243e+020
+260 220 3.36788e+020
+185 36 3.36533e+020
+329 13 3.36435e+020
+134 96 3.36029e+020
+462 42 3.35877e+020
+332 294 3.32997e+020
+473 23 3.31423e+020
+46 355 3.29975e+020
+392 218 3.29967e+020
+210 35 3.2898e+020
+263 402 3.26687e+020
+388 16 3.26481e+020
+165 357 3.26251e+020
+525 38 3.25915e+020
+333 258 3.25518e+020
+549 40 3.24957e+020
+256 139 3.24482e+020
+164 73 3.24248e+020
+483 329 3.24016e+020
+463 280 3.23582e+020
+193 218 3.22435e+020
+168 326 3.22037e+020
+163 277 3.21959e+020
+494 139 3.21402e+020
+448 444 3.21e+020
+57 365 3.19785e+020
+524 187 3.18731e+020
+300 264 3.17566e+020
+56 183 3.17342e+020
+196 124 3.16667e+020
+309 371 3.16411e+020
+358 66 3.16303e+020
+96 448 3.16098e+020
+446 8 3.15107e+020
+507 6 3.14909e+020
+186 289 3.14667e+020
+153 195 3.13132e+020
+470 238 3.12393e+020
+48 12 3.12139e+020
+166 110 3.11165e+020
+63 236 3.11113e+020
+228 291 3.10444e+020
+91 199 3.10413e+020
+362 7 3.08665e+020
+134 131 3.0838e+020
+220 290 3.06138e+020
+265 30 3.06047e+020
+507 169 3.03928e+020
+248 316 3.03128e+020
+485 44 3.0297e+020
+333 66 3.00625e+020
+297 69 2.99924e+020
+423 49 2.99543e+020
+449 117 2.99506e+020
+486 58 2.98863e+020
+164 313 2.9849e+020
+344 111 2.97452e+020
+386 244 2.97441e+020
+409 64 2.96482e+020
+52 99 2.96138e+020
+44 98 2.96012e+020
+420 48 2.95332e+020
+436 379 2.95301e+020
+386 294 2.95184e+020
+482 364 2.94721e+020
+437 319 2.93527e+020
+56 44 2.93457e+020
+305 439 2.93419e+020
+88 216 2.9323e+020
+207 222 2.93104e+020
+137 178 2.92914e+020
+54 222 2.92274e+020
+521 184 2.92188e+020
+452 62 2.92105e+020
+163 110 2.9208e+020
+483 58 2.92046e+020
+160 139 2.91805e+020
+88 207 2.91607e+020
+575 459 2.9148e+020
+140 181 2.91393e+020
+364 101 2.8942e+020
+304 190 2.89213e+020
+119 115 2.89106e+020
+284 198 2.88673e+020
+8 46 2.88646e+020
+473 5 2.88632e+020
+276 353 2.88599e+020
+245 207 2.8768e+020
+357 63 2.86628e+020
+448 438 2.86301e+020
+29 30 2.85699e+020
+474 247 2.84932e+020
+512 100 2.84777e+020
+413 162 2.84742e+020
+243 166 2.83618e+020
+552 378 2.8357e+020
+60 134 2.83322e+020
+348 181 2.83286e+020
+86 213 2.83022e+020
+144 16 2.82955e+020
+404 266 2.82088e+020
+47 81 2.81016e+020
+169 18 2.80254e+020
+91 196 2.79322e+020
+324 294 2.78625e+020
+253 139 2.77983e+020
+463 27 2.77654e+020
+190 360 2.77438e+020
+325 426 2.76134e+020
+270 73 2.75943e+020
+258 161 2.75713e+020
+249 365 2.74009e+020
+45 12 2.73884e+020
+190 350 2.72743e+020
+88 368 2.70827e+020
+165 242 2.70721e+020
+112 344 2.70313e+020
+295 269 2.69057e+020
+451 438 2.6902e+020
+301 105 2.68784e+020
+155 317 2.68218e+020
+70 148 2.67646e+020
+329 90 2.67544e+020
+538 406 2.67067e+020
+439 339 2.66676e+020
+269 70 2.65757e+020
+233 13 2.65361e+020
+414 65 2.65313e+020
+541 128 2.643e+020
+343 122 2.64061e+020
+92 254 2.63965e+020
+530 144 2.62733e+020
+223 218 2.62613e+020
+273 181 2.62469e+020
+340 108 2.62452e+020
+575 13 2.62188e+020
+426 378 2.62002e+020
+484 142 2.61764e+020
+84 144 2.61725e+020
+450 87 2.60555e+020
+346 298 2.60319e+020
+271 167 2.59101e+020
+571 446 2.5849e+020
+35 267 2.58013e+020
+110 95 2.57385e+020
+165 98 2.57039e+020
+402 44 2.56719e+020
+455 58 2.56331e+020
+493 81 2.56266e+020
+335 218 2.55929e+020
+110 169 2.55219e+020
+423 46 2.54143e+020
+155 235 2.53935e+020
+110 179 2.53774e+020
+373 392 2.53681e+020
+124 271 2.53183e+020
+332 90 2.53098e+020
+208 225 2.53092e+020
+117 426 2.5173e+020
+542 209 2.5173e+020
+114 95 2.51723e+020
+448 218 2.5168e+020
+296 332 2.51666e+020
+279 129 2.50284e+020
+356 321 2.49802e+020
+107 429 2.49684e+020
+445 123 2.49232e+020
+87 144 2.47917e+020
+232 17 2.47772e+020
+503 164 2.47528e+020
+49 155 2.4725e+020
+234 161 2.47146e+020
+471 212 2.47124e+020
+330 67 2.46956e+020
+276 331 2.46608e+020
+394 164 2.45914e+020
+457 42 2.45369e+020
+86 311 2.45187e+020
+431 319 2.45174e+020
+472 266 2.45092e+020
+83 134 2.44955e+020
+490 2 2.43673e+020
+407 45 2.43187e+020
+125 259 2.42845e+020
+384 260 2.42744e+020
+309 440 2.42392e+020
+477 6 2.4194e+020
+455 85 2.41779e+020
+389 66 2.40815e+020
+377 67 2.39897e+020
+354 268 2.39482e+020
+421 298 2.39201e+020
+433 158 2.39124e+020
+412 44 2.38107e+020
+56 78 2.37542e+020
+578 43 2.36626e+020
+322 426 2.36501e+020
+35 31 2.35992e+020
+313 80 2.35966e+020
+190 312 2.35789e+020
+510 174 2.34966e+020
+489 58 2.34889e+020
+142 393 2.34554e+020
+193 16 2.33441e+020
+280 365 2.33219e+020
+257 147 2.33214e+020
+68 419 2.33123e+020
+162 169 2.32655e+020
+283 395 2.32352e+020
+85 73 2.32339e+020
+496 81 2.31079e+020
+538 97 2.31042e+020
+172 19 2.3092e+020
+287 211 2.30421e+020
+162 97 2.29308e+020
+93 216 2.29276e+020
+119 447 2.28586e+020
+83 475 2.28543e+020
+431 81 2.28247e+020
+398 266 2.28246e+020
+159 182 2.27878e+020
+64 232 2.27606e+020
+159 144 2.27241e+020
+468 139 2.27191e+020
+440 379 2.2704e+020
+9 102 2.26757e+020
+380 67 2.26427e+020
+217 147 2.26423e+020
+326 89 2.2626e+020
+465 196 2.26233e+020
+227 186 2.25708e+020
+270 53 2.25691e+020
+487 263 2.25389e+020
+357 11 2.24852e+020
+342 47 2.2459e+020
+164 209 2.24213e+020
+168 181 2.23438e+020
+473 203 2.23007e+020
+385 326 2.2226e+020
+101 5 2.22127e+020
+353 294 2.2186e+020
+281 221 2.21432e+020
+523 123 2.20992e+020
+367 301 2.20953e+020
+392 49 2.20673e+020
+357 282 2.20597e+020
+454 116 2.20538e+020
+70 96 2.20006e+020
+471 269 2.19979e+020
+349 146 2.19577e+020
+345 276 2.19206e+020
+378 337 2.1918e+020
+167 107 2.19132e+020
+339 166 2.18741e+020
+529 400 2.18614e+020
+244 293 2.18166e+020
+78 198 2.18097e+020
+190 206 2.17691e+020
+418 82 2.1738e+020
+330 213 2.17355e+020
+221 14 2.17093e+020
+10 78 2.17076e+020
+409 163 2.16849e+020
+155 56 2.16827e+020
+92 257 2.16817e+020
+41 81 2.16467e+020
+333 202 2.1631e+020
+574 178 2.16241e+020
+175 20 2.16042e+020
+289 139 2.15441e+020
+274 132 2.14751e+020
+118 76 2.14337e+020
+538 101 2.13985e+020
+241 421 2.13622e+020
+119 130 2.13435e+020
+217 425 2.13204e+020
+33 219 2.12884e+020
+213 32 2.12835e+020
+259 34 2.12728e+020
+516 74 2.12631e+020
+86 61 2.12411e+020
+145 161 2.1234e+020
+486 139 2.1207e+020
+570 451 2.11937e+020
+107 76 2.11732e+020
+569 382 2.11356e+020
+126 96 2.11014e+020
+524 426 2.10493e+020
+105 222 2.09297e+020
+277 328 2.09216e+020
+521 264 2.09068e+020
+196 190 2.08811e+020
+269 186 2.08522e+020
+518 263 2.08254e+020
+50 288 2.07638e+020
+191 292 2.07617e+020
+528 363 2.07119e+020
+282 391 2.06954e+020
+139 99 2.06621e+020
+424 399 2.06065e+020
+91 290 2.06058e+020
+292 88 2.0601e+020
+295 421 2.05626e+020
+389 326 2.05193e+020
+151 1 2.04647e+020
+260 236 2.04583e+020
+541 133 2.03692e+020
+444 451 2.03262e+020
+163 62 2.0295e+020
+291 50 2.02838e+020
+287 397 2.02772e+020
+249 361 2.02718e+020
+18 343 2.02527e+020
+138 96 2.0229e+020
+464 199 2.02081e+020
+126 77 2.01845e+020
+476 341 2.01539e+020
+155 112 2.01458e+020
+161 185 2.00646e+020
+273 219 2.00483e+020
+516 42 2.00169e+020
+38 82 1.99216e+020
+202 313 1.99079e+020
+482 451 1.98735e+020
+270 290 1.9803e+020
+525 422 1.97534e+020
+158 112 1.97515e+020
+405 41 1.97301e+020
+205 309 1.97048e+020
+157 198 1.9694e+020
+437 240 1.96387e+020
+577 245 1.96329e+020
+109 2 1.96038e+020
+419 66 1.95861e+020
+468 208 1.954e+020
+92 445 1.95219e+020
+298 274 1.95046e+020
+79 474 1.94969e+020
+215 96 1.94538e+020
+149 302 1.94453e+020
+333 131 1.94184e+020
+231 199 1.93904e+020
+437 280 1.93715e+020
+110 136 1.9368e+020
+571 406 1.93325e+020
+170 108 1.93208e+020
+547 139 1.9289e+020
+192 144 1.9284e+020
+441 239 1.92447e+020
+58 254 1.9228e+020
+337 264 1.92017e+020
+247 219 1.91725e+020
+441 24 1.91401e+020
+272 170 1.91342e+020
+104 307 1.91183e+020
+220 18 1.91045e+020
+279 132 1.90354e+020
+325 258 1.90271e+020
+182 343 1.89588e+020
+340 122 1.89554e+020
+221 151 1.89455e+020
+196 255 1.89137e+020
+88 364 1.88923e+020
+432 381 1.88487e+020
+465 424 1.88409e+020
+467 238 1.88362e+020
+468 204 1.88303e+020
+72 165 1.88275e+020
+272 285 1.88196e+020
+459 264 1.88164e+020
+470 121 1.88134e+020
+325 165 1.88085e+020
+154 295 1.88058e+020
+75 475 1.87977e+020
+53 13 1.87551e+020
+520 121 1.87377e+020
+273 295 1.87284e+020
+528 222 1.87144e+020
+61 370 1.87089e+020
+113 2 1.86916e+020
+319 187 1.86751e+020
+265 311 1.86459e+020
+356 338 1.8644e+020
+405 376 1.86365e+020
+337 62 1.85717e+020
+583 38 1.85456e+020
+131 71 1.85207e+020
+164 206 1.85166e+020
+371 90 1.84929e+020
+91 60 1.84742e+020
+438 467 1.84683e+020
+196 132 1.84627e+020
+563 323 1.8458e+020
+57 373 1.84569e+020
+206 435 1.84425e+020
+128 191 1.84379e+020
+241 195 1.84136e+020
+191 210 1.84027e+020
+562 145 1.83937e+020
+196 194 1.836e+020
+186 20 1.83378e+020
+531 364 1.83343e+020
+372 86 1.83182e+020
+363 357 1.83181e+020
+355 342 1.82621e+020
+406 65 1.82472e+020
+90 375 1.82391e+020
+458 115 1.82218e+020
+280 136 1.82079e+020
+514 119 1.82036e+020
+174 92 1.8136e+020
+318 459 1.80976e+020
+514 381 1.80905e+020
+295 273 1.80405e+020
+220 184 1.79776e+020
+380 107 1.79762e+020
+265 16 1.7958e+020
+374 3 1.79313e+020
+444 114 1.79018e+020
+64 370 1.7898e+020
+418 283 1.78888e+020
+103 237 1.78829e+020
+185 132 1.7815e+020
+33 110 1.77899e+020
+280 204 1.77844e+020
+328 181 1.77797e+020
+377 182 1.77674e+020
+512 297 1.77627e+020
+110 262 1.77581e+020
+345 47 1.77574e+020
+513 77 1.77477e+020
+482 440 1.77294e+020
+48 234 1.77177e+020
+222 113 1.77134e+020
+577 39 1.76546e+020
+174 312 1.76482e+020
+102 164 1.76292e+020
+459 267 1.76127e+020
+279 52 1.76097e+020
+287 165 1.7603e+020
+262 285 1.75963e+020
+130 478 1.75946e+020
+481 84 1.75334e+020
+167 116 1.75308e+020
+281 438 1.74837e+020
+527 347 1.74618e+020
+191 329 1.74005e+020
+364 180 1.73817e+020
+357 166 1.73387e+020
+282 419 1.73154e+020
+575 100 1.72744e+020
+157 218 1.72742e+020
+157 91 1.72653e+020
+537 393 1.72609e+020
+453 102 1.72587e+020
+228 130 1.72519e+020
+22 48 1.7244e+020
+306 449 1.724e+020
+9 234 1.72275e+020
+569 422 1.72174e+020
+134 147 1.71951e+020
+107 108 1.71646e+020
+178 330 1.71363e+020
+278 144 1.71165e+020
+440 456 1.70459e+020
+283 52 1.69797e+020
+504 261 1.69763e+020
+394 215 1.69663e+020
+305 194 1.69528e+020
+41 355 1.69508e+020
+313 76 1.69301e+020
+512 81 1.69201e+020
+189 144 1.68989e+020
+216 175 1.68923e+020
+91 276 1.68826e+020
+359 53 1.68609e+020
+157 194 1.6804e+020
+187 265 1.67699e+020
+574 421 1.67509e+020
+524 399 1.67038e+020
+529 397 1.66633e+020
+186 95 1.66493e+020
+432 270 1.66191e+020
+494 158 1.66143e+020
+191 189 1.65762e+020
+83 171 1.65701e+020
+334 62 1.65569e+020
+234 199 1.65329e+020
+55 145 1.65105e+020
+183 95 1.64809e+020
+137 136 1.64798e+020
+537 262 1.64588e+020
+282 268 1.64538e+020
+276 320 1.64519e+020
+178 273 1.63951e+020
+456 177 1.6386e+020
+89 213 1.63601e+020
+455 162 1.6341e+020
+283 195 1.63298e+020
+110 133 1.62931e+020
+39 287 1.62564e+020
+150 112 1.62203e+020
+413 246 1.6207e+020
+567 180 1.61933e+020
+166 20 1.61732e+020
+564 160 1.61161e+020
+503 156 1.60998e+020
+494 58 1.60589e+020
+151 232 1.603e+020
+222 116 1.59553e+020
+433 85 1.59374e+020
+561 142 1.59296e+020
+70 130 1.59129e+020
+389 53 1.59121e+020
+17 434 1.59101e+020
+330 64 1.59013e+020
+229 282 1.58735e+020
+227 112 1.5842e+020
+162 119 1.58267e+020
+506 361 1.58265e+020
+156 95 1.58196e+020
+261 200 1.58101e+020
+478 243 1.58039e+020
+405 11 1.57975e+020
+146 449 1.57715e+020
+376 355 1.57657e+020
+179 164 1.57565e+020
+216 180 1.57218e+020
+362 244 1.57208e+020
+351 273 1.57181e+020
+498 463 1.5694e+020
+229 288 1.56869e+020
+471 83 1.56837e+020
+292 335 1.56776e+020
+325 132 1.56757e+020
+343 141 1.56651e+020
+433 281 1.56554e+020
+209 395 1.56158e+020
+208 14 1.55768e+020
+405 80 1.55689e+020
+343 200 1.55308e+020
+525 173 1.55146e+020
+130 475 1.54953e+020
+392 21 1.54821e+020
+453 178 1.54737e+020
+120 54 1.54602e+020
+298 87 1.54417e+020
+276 182 1.54273e+020
+85 40 1.54237e+020
+20 316 1.54147e+020
+132 237 1.54146e+020
+242 33 1.53903e+020
+66 26 1.53711e+020
+238 34 1.53485e+020
+386 4 1.53463e+020
+340 391 1.53454e+020
+261 369 1.53296e+020
+220 315 1.5295e+020
+299 269 1.52944e+020
+256 220 1.52925e+020
+527 344 1.52911e+020
+195 84 1.52875e+020
+200 129 1.5278e+020
+105 359 1.5268e+020
+450 180 1.52679e+020
+327 64 1.52522e+020
+36 200 1.52443e+020
+28 136 1.52396e+020
+360 164 1.52218e+020
+173 240 1.52014e+020
+561 226 1.51735e+020
+450 140 1.51676e+020
+306 259 1.5164e+020
+366 164 1.51547e+020
+387 127 1.51524e+020
+381 121 1.51478e+020
+591 19 1.51183e+020
+332 413 1.51085e+020
+597 364 1.5085e+020
+298 410 1.50768e+020
+124 126 1.50594e+020
+302 333 1.50114e+020
+503 143 1.49619e+020
+174 95 1.49254e+020
+65 182 1.49251e+020
+187 313 1.4923e+020
+362 66 1.48878e+020
+354 12 1.48833e+020
+543 162 1.48823e+020
+204 161 1.48787e+020
+289 136 1.48742e+020
+218 115 1.4857e+020
+33 164 1.48443e+020
+528 431 1.48176e+020
+98 257 1.48172e+020
+493 340 1.48171e+020
+285 298 1.48015e+020
+497 66 1.4797e+020
+160 21 1.47932e+020
+279 49 1.47893e+020
+499 266 1.47762e+020
+215 124 1.47617e+020
+211 13 1.47592e+020
+433 44 1.47411e+020
+325 221 1.47298e+020
+142 449 1.47117e+020
+226 198 1.46953e+020
+359 243 1.46899e+020
+360 369 1.46844e+020
+479 286 1.46643e+020
+267 290 1.46316e+020
+335 390 1.46283e+020
+170 105 1.46252e+020
+258 392 1.46127e+020
+182 290 1.45563e+020
+188 278 1.45428e+020
+503 362 1.45039e+020
+417 165 1.44548e+020
+473 41 1.44389e+020
+291 262 1.44252e+020
+319 166 1.44047e+020
+34 114 1.44008e+020
+148 226 1.43969e+020
+377 70 1.4382e+020
+537 93 1.43765e+020
+483 25 1.43661e+020
+324 15 1.43519e+020
+220 212 1.42925e+020
+514 203 1.42919e+020
+576 330 1.42832e+020
+425 3 1.42779e+020
+170 240 1.42494e+020
+400 168 1.42396e+020
+156 40 1.42375e+020
+346 342 1.42249e+020
+468 28 1.41968e+020
+242 281 1.41946e+020
+67 254 1.41551e+020
+346 273 1.41533e+020
+387 124 1.41115e+020
+275 204 1.40847e+020
+106 32 1.40787e+020
+257 133 1.40715e+020
+12 81 1.40644e+020
+198 111 1.40511e+020
+580 345 1.40445e+020
+339 473 1.404e+020
+501 320 1.40388e+020
+114 169 1.40171e+020
+502 460 1.40124e+020
+487 375 1.39983e+020
+250 34 1.399e+020
+107 182 1.39695e+020
+188 109 1.39554e+020
+330 26 1.39269e+020
+333 331 1.3922e+020
+382 102 1.39202e+020
+335 408 1.39147e+020
+418 449 1.39065e+020
+240 155 1.39028e+020
+544 440 1.38828e+020
+242 190 1.38757e+020
+77 163 1.3866e+020
+291 266 1.38519e+020
+366 336 1.38312e+020
+276 179 1.38027e+020
+20 286 1.37518e+020
+388 139 1.37441e+020
+77 271 1.37392e+020
+225 397 1.37316e+020
+563 320 1.36767e+020
+448 123 1.36734e+020
+267 20 1.36666e+020
+215 289 1.36542e+020
+237 416 1.36458e+020
+255 107 1.36269e+020
+179 379 1.36229e+020
+250 220 1.36219e+020
+509 57 1.3617e+020
+53 360 1.36117e+020
+479 403 1.35901e+020
+513 442 1.35437e+020
+447 351 1.35425e+020
+51 39 1.35422e+020
+191 122 1.35336e+020
+1 156 1.34937e+020
+541 248 1.34813e+020
+502 22 1.34692e+020
+336 405 1.3469e+020
+207 161 1.34512e+020
+9 32 1.34111e+020
+247 34 1.34077e+020
+321 11 1.33932e+020
+547 218 1.33731e+020
+436 237 1.3363e+020
+214 436 1.33585e+020
+168 433 1.33496e+020
+64 253 1.33225e+020
+485 6 1.33078e+020
+74 196 1.32949e+020
+559 80 1.32821e+020
+572 326 1.32648e+020
+382 320 1.32623e+020
+329 354 1.326e+020
+86 134 1.32581e+020
+584 346 1.32527e+020
+247 105 1.32508e+020
+56 170 1.32491e+020
+430 151 1.32405e+020
+452 162 1.32401e+020
+422 165 1.32396e+020
+390 123 1.32261e+020
+180 155 1.32252e+020
+486 3 1.32155e+020
+372 83 1.31877e+020
+593 425 1.31667e+020
+533 397 1.31614e+020
+51 453 1.31453e+020
+423 64 1.31298e+020
+250 150 1.31247e+020
+183 381 1.31124e+020
+254 78 1.30989e+020
+570 455 1.30935e+020
+390 118 1.30933e+020
+261 140 1.30911e+020
+562 149 1.30796e+020
+376 82 1.30693e+020
+31 235 1.3069e+020
+368 82 1.30634e+020
+78 133 1.30589e+020
+298 25 1.30539e+020
+510 61 1.30538e+020
+165 379 1.30376e+020
+226 123 1.30271e+020
+298 398 1.30178e+020
+89 181 1.29979e+020
+222 72 1.29885e+020
+94 375 1.29553e+020
+189 357 1.29541e+020
+459 376 1.2933e+020
+307 428 1.29313e+020
+163 252 1.29186e+020
+71 408 1.29065e+020
+344 183 1.28692e+020
+147 97 1.28689e+020
+224 128 1.28653e+020
+175 272 1.28642e+020
+523 77 1.28518e+020
+504 258 1.2848e+020
+311 299 1.28363e+020
+97 39 1.28355e+020
+176 164 1.28243e+020
+103 258 1.28134e+020
+268 88 1.28035e+020
+396 104 1.2782e+020
+250 31 1.2782e+020
+186 101 1.2776e+020
+209 419 1.27277e+020
+579 85 1.27157e+020
+257 130 1.27064e+020
+597 33 1.27054e+020
+525 281 1.26921e+020
+128 307 1.26791e+020
+332 334 1.26565e+020
+466 123 1.26563e+020
+455 48 1.26494e+020
+308 358 1.26482e+020
+96 60 1.26457e+020
+288 348 1.26417e+020
+217 429 1.26378e+020
+382 338 1.26367e+020
+48 162 1.26286e+020
+258 369 1.26279e+020
+509 442 1.26126e+020
+275 198 1.2605e+020
+162 152 1.25951e+020
+310 446 1.25929e+020
+392 159 1.25761e+020
+232 31 1.25635e+020
+212 146 1.25422e+020
+262 393 1.25418e+020
+158 305 1.25393e+020
+243 30 1.25178e+020
+541 381 1.2501e+020
+183 316 1.24851e+020
+222 87 1.24802e+020
+218 208 1.24784e+020
+543 217 1.24592e+020
+18 235 1.24541e+020
+391 450 1.24342e+020
+142 99 1.24299e+020
+506 380 1.24046e+020
+111 338 1.24039e+020
+577 52 1.23965e+020
+155 162 1.2375e+020
+582 446 1.23707e+020
+104 35 1.23603e+020
+294 141 1.2345e+020
+56 71 1.23354e+020
+429 42 1.23327e+020
+161 126 1.23013e+020
+94 80 1.22968e+020
+480 166 1.22879e+020
+262 397 1.22821e+020
+451 21 1.226e+020
+533 394 1.22574e+020
+37 166 1.22432e+020
+156 78 1.22384e+020
+539 186 1.22184e+020
+26 44 1.2205e+020
+40 200 1.22042e+020
+502 123 1.22004e+020
+272 64 1.2188e+020
+299 255 1.21816e+020
+327 105 1.21794e+020
+337 367 1.21614e+020
+318 452 1.21567e+020
+161 33 1.21545e+020
+255 5 1.21527e+020
+413 264 1.2145e+020
+185 135 1.21085e+020
+376 240 1.2107e+020
+542 443 1.21027e+020
+433 240 1.20952e+020
+17 65 1.2075e+020
+240 327 1.20718e+020
+362 63 1.20689e+020
+102 96 1.20592e+020
+93 213 1.20577e+020
+387 450 1.20158e+020
+503 18 1.20105e+020
+337 181 1.20077e+020
+430 89 1.20054e+020
+315 446 1.20019e+020
+96 21 1.19756e+020
+183 142 1.19699e+020
+121 215 1.19681e+020
+47 203 1.1965e+020
+383 25 1.19529e+020
+43 408 1.19222e+020
+166 292 1.18995e+020
+429 223 1.18974e+020
+115 359 1.18881e+020
+150 397 1.18877e+020
+217 414 1.18835e+020
+149 132 1.18725e+020
+395 160 1.1865e+020
+394 107 1.18512e+020
+181 168 1.1843e+020
+99 164 1.1837e+020
+418 260 1.18123e+020
+417 87 1.1792e+020
+382 413 1.17877e+020
+155 445 1.17825e+020
+51 230 1.17787e+020
+332 408 1.17724e+020
+107 382 1.17689e+020
+118 95 1.1768e+020
+255 459 1.17617e+020
+111 429 1.17584e+020
+327 52 1.17383e+020
+39 238 1.17376e+020
+256 104 1.17198e+020
+459 304 1.17149e+020
+233 406 1.1706e+020
+438 108 1.16989e+020
+212 150 1.16971e+020
+511 352 1.16916e+020
+157 122 1.16886e+020
+236 403 1.167e+020
+101 40 1.16564e+020
+225 51 1.16419e+020
+566 144 1.16378e+020
+174 187 1.15966e+020
+99 94 1.1591e+020
+14 435 1.15878e+020
+572 330 1.15543e+020
+309 54 1.15537e+020
+291 311 1.15535e+020
+145 23 1.15456e+020
+200 294 1.15349e+020
+514 403 1.15257e+020
+447 21 1.15254e+020
+540 40 1.15153e+020
+351 255 1.15122e+020
+46 408 1.15095e+020
+400 280 1.15084e+020
+22 322 1.15033e+020
+597 273 1.14987e+020
+190 132 1.14715e+020
+537 397 1.14463e+020
+10 125 1.14378e+020
+94 366 1.14289e+020
+526 79 1.14195e+020
+148 199 1.14128e+020
+463 224 1.14045e+020
+150 79 1.13923e+020
+205 33 1.13845e+020
+480 46 1.13767e+020
+288 265 1.1372e+020
+115 130 1.13669e+020
+386 282 1.1364e+020
+447 376 1.13576e+020
+218 204 1.1356e+020
+408 430 1.13541e+020
+275 214 1.13537e+020
+129 428 1.13393e+020
+114 261 1.13312e+020
+452 48 1.13093e+020
+157 24 1.12997e+020
+41 203 1.12994e+020
+508 203 1.12525e+020
+266 258 1.12508e+020
+408 140 1.12484e+020
+38 354 1.12379e+020
+235 220 1.12349e+020
+401 164 1.12295e+020
+362 48 1.1226e+020
+186 202 1.12253e+020
+94 276 1.12122e+020
+106 260 1.12014e+020
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_3_3.txt b/test_data/harriscorners/hc_msc_3.00_0.15_3_3.txt
new file mode 100644
index 0000000..dfffe1a
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_3_3.txt
@@ -0,0 +1,1533 @@
+1532
+449 298 3.32013e+011
+329 127 2.40479e+011
+499 1 2.3572e+011
+388 178 2.22672e+011
+421 183 2.15372e+011
+401 261 2.13482e+011
+213 72 1.93722e+011
+66 320 1.81165e+011
+321 313 1.79205e+011
+544 170 1.78251e+011
+363 401 1.74675e+011
+121 44 1.72328e+011
+365 200 1.66654e+011
+553 40 1.65255e+011
+75 236 1.60659e+011
+135 215 1.603e+011
+449 219 1.59546e+011
+159 143 1.52973e+011
+137 208 1.51472e+011
+514 77 1.44856e+011
+89 197 1.42311e+011
+45 26 1.39432e+011
+312 149 1.39254e+011
+447 397 1.39158e+011
+449 403 1.39003e+011
+412 256 1.38427e+011
+223 38 1.35886e+011
+285 297 1.35718e+011
+125 255 1.35631e+011
+385 221 1.34753e+011
+436 68 1.34254e+011
+282 115 1.34177e+011
+296 420 1.31746e+011
+396 319 1.30232e+011
+144 309 1.30226e+011
+344 10 1.27771e+011
+173 94 1.27765e+011
+256 386 1.24699e+011
+246 143 1.23946e+011
+184 35 1.23258e+011
+299 54 1.23249e+011
+124 362 1.21894e+011
+522 263 1.20143e+011
+59 185 1.19992e+011
+417 7 1.19915e+011
+508 18 1.19444e+011
+113 213 1.19438e+011
+34 137 1.18269e+011
+177 260 1.18138e+011
+273 365 1.1716e+011
+426 320 1.16482e+011
+58 74 1.16247e+011
+140 184 1.15883e+011
+199 18 1.15247e+011
+242 203 1.14681e+011
+348 179 1.14112e+011
+64 235 1.13843e+011
+273 290 1.1347e+011
+545 217 1.13457e+011
+221 16 1.11675e+011
+317 385 1.1145e+011
+480 298 1.11068e+011
+245 95 1.08943e+011
+126 162 1.08936e+011
+173 312 1.08494e+011
+293 120 1.07417e+011
+456 281 1.06354e+011
+71 148 1.02865e+011
+507 122 1.02318e+011
+3 47 1.02278e+011
+46 219 1.00061e+011
+301 175 9.96735e+010
+239 90 9.94915e+010
+206 223 9.87767e+010
+484 59 9.8545e+010
+308 372 9.81498e+010
+253 138 9.77265e+010
+380 68 9.75023e+010
+65 344 9.67893e+010
+419 163 9.67742e+010
+425 262 9.50666e+010
+270 241 9.47397e+010
+303 183 9.41986e+010
+264 201 9.34707e+010
+364 298 9.31987e+010
+197 57 9.31893e+010
+82 27 9.31434e+010
+489 264 9.16105e+010
+535 243 9.11293e+010
+448 263 9.09534e+010
+371 82 8.99196e+010
+112 4 8.94971e+010
+183 401 8.90444e+010
+282 403 8.87494e+010
+277 181 8.86356e+010
+270 60 8.8555e+010
+455 83 8.83753e+010
+236 163 8.78992e+010
+543 57 8.78691e+010
+301 164 8.75609e+010
+287 344 8.71933e+010
+406 375 8.67871e+010
+114 344 8.56334e+010
+556 182 8.54822e+010
+569 40 8.50566e+010
+511 342 8.38851e+010
+467 123 8.37288e+010
+359 168 8.36512e+010
+360 335 8.35301e+010
+507 164 8.33022e+010
+174 238 8.32778e+010
+205 202 8.31866e+010
+208 434 8.3186e+010
+572 142 8.3011e+010
+272 166 8.22367e+010
+87 78 8.20642e+010
+423 180 8.19501e+010
+278 352 8.19263e+010
+10 102 8.18657e+010
+496 119 8.16362e+010
+251 13 8.14815e+010
+401 184 8.14769e+010
+381 164 8.14237e+010
+390 58 8.11309e+010
+324 88 8.08953e+010
+378 316 8.08477e+010
+209 223 8.01866e+010
+313 75 7.98569e+010
+125 199 7.92236e+010
+526 101 7.90062e+010
+478 16 7.89078e+010
+455 3 7.82006e+010
+391 47 7.76358e+010
+433 146 7.75953e+010
+560 229 7.726e+010
+530 185 7.70649e+010
+102 4 7.66956e+010
+424 376 7.61736e+010
+124 365 7.58478e+010
+224 221 7.57099e+010
+341 337 7.51563e+010
+392 144 7.50462e+010
+543 364 7.49456e+010
+163 207 7.48815e+010
+131 36 7.46726e+010
+279 296 7.46392e+010
+473 63 7.46334e+010
+64 371 7.38101e+010
+461 279 7.37125e+010
+28 8 7.3378e+010
+382 8 7.29965e+010
+261 165 7.29928e+010
+170 19 7.26616e+010
+275 216 7.25494e+010
+35 300 7.23838e+010
+224 183 7.22909e+010
+463 198 7.16838e+010
+355 320 7.1669e+010
+279 370 7.09063e+010
+317 336 7.07404e+010
+240 349 7.0726e+010
+562 478 7.07163e+010
+360 316 7.07085e+010
+192 331 7.05062e+010
+166 20 7.04956e+010
+257 90 7.02903e+010
+525 346 7.02554e+010
+109 239 7.00581e+010
+524 199 6.99845e+010
+373 116 6.90968e+010
+485 23 6.89545e+010
+510 172 6.87798e+010
+211 56 6.86982e+010
+359 294 6.82845e+010
+392 353 6.8006e+010
+282 221 6.79263e+010
+448 138 6.78777e+010
+464 240 6.76343e+010
+384 162 6.74381e+010
+479 181 6.74053e+010
+192 276 6.71509e+010
+260 273 6.70827e+010
+105 62 6.70658e+010
+313 222 6.70554e+010
+471 239 6.70266e+010
+404 120 6.69485e+010
+244 72 6.65082e+010
+352 146 6.64941e+010
+338 473 6.64691e+010
+326 427 6.64265e+010
+365 7 6.63697e+010
+203 17 6.62013e+010
+29 236 6.59508e+010
+128 1 6.59499e+010
+411 4 6.59144e+010
+556 245 6.57224e+010
+220 100 6.55948e+010
+84 78 6.52076e+010
+382 338 6.51112e+010
+342 123 6.50371e+010
+221 181 6.50149e+010
+575 126 6.50086e+010
+419 180 6.49903e+010
+297 296 6.45906e+010
+185 18 6.45689e+010
+364 255 6.44384e+010
+365 259 6.40468e+010
+77 81 6.40258e+010
+303 207 6.38558e+010
+411 355 6.37262e+010
+380 26 6.36531e+010
+558 19 6.35145e+010
+283 71 6.34571e+010
+376 7 6.33788e+010
+164 241 6.32783e+010
+224 419 6.32311e+010
+370 107 6.32179e+010
+461 340 6.31388e+010
+299 70 6.27673e+010
+342 464 6.2729e+010
+376 84 6.26312e+010
+479 81 6.25653e+010
+259 236 6.20956e+010
+521 122 6.20633e+010
+507 60 6.19057e+010
+387 319 6.17718e+010
+538 95 6.16153e+010
+79 3 6.15896e+010
+353 126 6.15454e+010
+415 253 6.15049e+010
+140 173 6.14922e+010
+412 23 6.13352e+010
+513 93 6.11844e+010
+331 107 6.08829e+010
+273 130 6.08464e+010
+266 53 6.07627e+010
+160 183 6.06261e+010
+174 114 6.05348e+010
+110 96 6.04995e+010
+487 3 6.02847e+010
+271 278 6.01424e+010
+300 265 6.00032e+010
+512 165 5.9997e+010
+36 147 5.99462e+010
+61 61 5.97795e+010
+451 101 5.97104e+010
+31 8 5.9594e+010
+525 223 5.95214e+010
+97 79 5.93704e+010
+282 111 5.92748e+010
+126 76 5.89135e+010
+238 74 5.88489e+010
+225 180 5.87739e+010
+509 361 5.86898e+010
+432 319 5.86452e+010
+55 28 5.86451e+010
+408 352 5.84593e+010
+230 267 5.83829e+010
+264 298 5.83234e+010
+319 201 5.80784e+010
+223 114 5.79494e+010
+550 380 5.79183e+010
+512 99 5.79039e+010
+363 250 5.75366e+010
+361 131 5.74675e+010
+553 384 5.74331e+010
+332 130 5.73124e+010
+535 267 5.71946e+010
+386 126 5.71675e+010
+192 359 5.69978e+010
+381 411 5.65391e+010
+125 261 5.65161e+010
+389 139 5.64628e+010
+46 90 5.64483e+010
+264 440 5.63203e+010
+54 6 5.62353e+010
+374 163 5.61762e+010
+307 440 5.61124e+010
+203 310 5.60268e+010
+351 339 5.58039e+010
+266 14 5.5512e+010
+161 238 5.52833e+010
+394 158 5.51805e+010
+465 394 5.51308e+010
+478 12 5.50208e+010
+445 23 5.49909e+010
+352 161 5.48942e+010
+177 106 5.48457e+010
+120 4 5.4805e+010
+520 183 5.47988e+010
+333 89 5.47962e+010
+387 242 5.47331e+010
+429 320 5.46697e+010
+396 161 5.46133e+010
+303 156 5.43943e+010
+49 158 5.42958e+010
+579 18 5.4104e+010
+13 206 5.3914e+010
+529 104 5.37689e+010
+229 292 5.376e+010
+529 32 5.37173e+010
+497 64 5.36635e+010
+580 52 5.35787e+010
+276 393 5.35316e+010
+186 342 5.32643e+010
+244 164 5.31083e+010
+338 391 5.29004e+010
+483 339 5.28012e+010
+510 456 5.27146e+010
+239 18 5.26892e+010
+228 184 5.26404e+010
+313 86 5.25801e+010
+169 238 5.25666e+010
+169 55 5.24658e+010
+148 396 5.24387e+010
+277 333 5.23021e+010
+212 183 5.21943e+010
+184 137 5.21287e+010
+281 49 5.19704e+010
+118 61 5.17674e+010
+162 20 5.16328e+010
+219 291 5.14264e+010
+542 210 5.11964e+010
+260 250 5.10715e+010
+76 8 5.09706e+010
+285 240 5.0758e+010
+422 44 5.07025e+010
+79 474 5.05485e+010
+561 321 5.0382e+010
+540 40 5.02301e+010
+451 82 5.02115e+010
+150 114 5.02088e+010
+542 18 5.01409e+010
+136 202 5.01398e+010
+243 189 5.01201e+010
+36 268 5.00971e+010
+49 152 5.00459e+010
+541 13 4.9997e+010
+330 202 4.9984e+010
+500 42 4.99795e+010
+305 193 4.99758e+010
+73 186 4.99396e+010
+234 72 4.98345e+010
+215 144 4.98261e+010
+317 165 4.95489e+010
+356 267 4.94771e+010
+512 168 4.94745e+010
+96 125 4.93265e+010
+419 167 4.92737e+010
+290 183 4.924e+010
+359 162 4.92243e+010
+71 410 4.9117e+010
+189 180 4.90307e+010
+508 142 4.88942e+010
+315 160 4.88818e+010
+108 325 4.88593e+010
+494 456 4.87995e+010
+22 60 4.87893e+010
+68 27 4.87746e+010
+292 15 4.86476e+010
+404 338 4.85925e+010
+398 357 4.85631e+010
+172 449 4.84895e+010
+300 245 4.84802e+010
+234 261 4.84019e+010
+170 117 4.83873e+010
+59 219 4.83872e+010
+526 171 4.82621e+010
+271 51 4.82215e+010
+560 60 4.81504e+010
+97 447 4.81475e+010
+88 256 4.81389e+010
+562 149 4.80759e+010
+524 20 4.80395e+010
+532 268 4.80157e+010
+32 269 4.79959e+010
+267 131 4.79571e+010
+232 200 4.78804e+010
+56 31 4.76229e+010
+387 10 4.75446e+010
+388 282 4.7539e+010
+511 128 4.74527e+010
+421 7 4.7441e+010
+78 196 4.74264e+010
+25 200 4.73723e+010
+487 357 4.72904e+010
+406 65 4.71602e+010
+100 221 4.7118e+010
+508 4 4.6984e+010
+118 96 4.69834e+010
+184 184 4.69171e+010
+92 21 4.67795e+010
+265 72 4.66755e+010
+112 393 4.66266e+010
+137 98 4.64651e+010
+441 98 4.64145e+010
+139 204 4.63868e+010
+304 363 4.62856e+010
+546 182 4.62825e+010
+38 296 4.62357e+010
+150 151 4.62263e+010
+162 212 4.61648e+010
+372 67 4.59859e+010
+269 105 4.59755e+010
+474 245 4.59665e+010
+510 300 4.59435e+010
+91 291 4.58293e+010
+324 166 4.5813e+010
+423 320 4.58033e+010
+358 127 4.55595e+010
+286 165 4.55166e+010
+137 128 4.54939e+010
+594 19 4.54605e+010
+175 57 4.54059e+010
+434 398 4.53898e+010
+484 361 4.53839e+010
+72 97 4.53212e+010
+101 58 4.52862e+010
+282 119 4.52031e+010
+250 313 4.51898e+010
+379 107 4.50949e+010
+236 221 4.50771e+010
+394 260 4.50428e+010
+235 19 4.49662e+010
+210 154 4.49139e+010
+191 217 4.48388e+010
+312 81 4.48301e+010
+115 76 4.47252e+010
+292 28 4.46923e+010
+413 100 4.46805e+010
+329 9 4.46782e+010
+77 256 4.46443e+010
+18 342 4.4631e+010
+536 138 4.46003e+010
+436 339 4.45697e+010
+159 113 4.44626e+010
+389 327 4.43724e+010
+27 220 4.43478e+010
+134 72 4.4342e+010
+43 62 4.42493e+010
+157 93 4.38204e+010
+59 254 4.38166e+010
+115 390 4.38126e+010
+454 340 4.37227e+010
+40 309 4.371e+010
+458 264 4.3708e+010
+529 361 4.36137e+010
+36 176 4.35485e+010
+161 124 4.35119e+010
+545 6 4.34609e+010
+550 183 4.34512e+010
+112 134 4.32658e+010
+479 451 4.32558e+010
+565 60 4.31753e+010
+430 1 4.31001e+010
+412 162 4.30471e+010
+29 29 4.30449e+010
+217 126 4.29913e+010
+439 149 4.29214e+010
+85 476 4.29116e+010
+407 336 4.27508e+010
+32 218 4.26987e+010
+152 308 4.26416e+010
+484 376 4.25308e+010
+217 208 4.25189e+010
+48 97 4.24476e+010
+22 219 4.23491e+010
+361 369 4.23308e+010
+172 202 4.23219e+010
+445 453 4.22977e+010
+418 85 4.22619e+010
+187 109 4.2194e+010
+192 123 4.21697e+010
+241 58 4.20811e+010
+363 182 4.19809e+010
+96 148 4.19617e+010
+293 333 4.19545e+010
+572 121 4.18522e+010
+276 221 4.18371e+010
+182 111 4.18003e+010
+355 106 4.15504e+010
+57 331 4.15472e+010
+132 130 4.15286e+010
+267 31 4.14392e+010
+336 427 4.14213e+010
+391 19 4.13924e+010
+569 203 4.1321e+010
+292 310 4.12898e+010
+350 323 4.12846e+010
+270 55 4.1284e+010
+182 201 4.11235e+010
+175 2 4.1106e+010
+85 196 4.11037e+010
+201 313 4.09992e+010
+246 294 4.09431e+010
+443 320 4.09296e+010
+276 137 4.09062e+010
+572 160 4.07462e+010
+452 161 4.07453e+010
+446 352 4.0683e+010
+355 13 4.06574e+010
+261 297 4.06086e+010
+163 276 4.05877e+010
+262 393 4.05651e+010
+554 201 4.056e+010
+400 273 4.05134e+010
+387 295 4.04164e+010
+538 458 4.03377e+010
+537 141 4.02363e+010
+153 446 4.01827e+010
+196 192 4.0115e+010
+502 143 4.00663e+010
+188 146 3.99633e+010
+344 166 3.9896e+010
+89 147 3.98871e+010
+447 145 3.98684e+010
+63 8 3.98e+010
+143 187 3.9784e+010
+37 62 3.97673e+010
+396 104 3.97459e+010
+208 421 3.97066e+010
+197 130 3.96576e+010
+474 23 3.96223e+010
+225 73 3.95462e+010
+41 297 3.95349e+010
+286 209 3.95077e+010
+270 66 3.94958e+010
+451 376 3.94875e+010
+213 123 3.94825e+010
+274 281 3.94512e+010
+497 342 3.94503e+010
+223 239 3.94321e+010
+59 289 3.94082e+010
+466 40 3.93775e+010
+92 214 3.92772e+010
+177 96 3.92594e+010
+111 40 3.92037e+010
+6 9 3.91992e+010
+540 165 3.91388e+010
+266 260 3.91154e+010
+113 356 3.91059e+010
+511 205 3.90671e+010
+164 359 3.90655e+010
+474 262 3.90596e+010
+369 338 3.90341e+010
+264 445 3.89599e+010
+561 225 3.89558e+010
+102 358 3.89467e+010
+435 181 3.89209e+010
+474 202 3.88472e+010
+85 256 3.88314e+010
+360 260 3.88299e+010
+371 393 3.87679e+010
+220 151 3.87407e+010
+361 396 3.86838e+010
+51 290 3.86639e+010
+162 216 3.86369e+010
+130 217 3.85442e+010
+140 325 3.85439e+010
+59 28 3.85101e+010
+55 66 3.84889e+010
+76 96 3.84672e+010
+110 265 3.8432e+010
+386 167 3.84014e+010
+162 168 3.83788e+010
+202 392 3.82566e+010
+327 320 3.81906e+010
+518 202 3.80911e+010
+226 295 3.80827e+010
+137 111 3.80611e+010
+544 92 3.79958e+010
+579 79 3.79667e+010
+132 26 3.79178e+010
+139 2 3.78164e+010
+105 39 3.77167e+010
+188 214 3.76705e+010
+373 242 3.76041e+010
+100 78 3.75514e+010
+67 47 3.73619e+010
+449 178 3.73306e+010
+550 383 3.72778e+010
+377 299 3.72396e+010
+179 274 3.71829e+010
+167 150 3.71606e+010
+422 398 3.71499e+010
+491 1 3.71355e+010
+438 123 3.71068e+010
+565 19 3.70245e+010
+93 255 3.70178e+010
+95 452 3.68933e+010
+432 83 3.67761e+010
+216 279 3.66548e+010
+274 206 3.66128e+010
+273 297 3.66057e+010
+475 340 3.6522e+010
+124 272 3.64658e+010
+463 267 3.64605e+010
+432 122 3.64555e+010
+203 347 3.64402e+010
+411 45 3.64242e+010
+589 309 3.64136e+010
+281 386 3.63827e+010
+398 412 3.6334e+010
+492 182 3.63111e+010
+133 427 3.62958e+010
+423 337 3.62731e+010
+506 204 3.62613e+010
+471 262 3.6246e+010
+604 121 3.61506e+010
+306 88 3.60367e+010
+505 159 3.59928e+010
+67 337 3.59462e+010
+367 144 3.59302e+010
+129 168 3.59146e+010
+400 104 3.58699e+010
+5 65 3.58467e+010
+261 329 3.58383e+010
+507 178 3.58268e+010
+135 237 3.58226e+010
+486 205 3.5683e+010
+65 363 3.56335e+010
+12 80 3.55347e+010
+58 103 3.55183e+010
+525 381 3.54806e+010
+146 160 3.54263e+010
+343 36 3.51996e+010
+258 34 3.5165e+010
+379 352 3.51263e+010
+82 135 3.512e+010
+38 170 3.51103e+010
+418 440 3.5062e+010
+64 448 3.50251e+010
+259 71 3.49972e+010
+259 221 3.49966e+010
+413 65 3.49903e+010
+109 60 3.4986e+010
+318 107 3.49812e+010
+436 387 3.49418e+010
+144 327 3.49122e+010
+81 75 3.47987e+010
+460 395 3.47555e+010
+464 24 3.47452e+010
+355 220 3.47349e+010
+214 59 3.47315e+010
+129 429 3.4719e+010
+543 130 3.4715e+010
+390 161 3.46712e+010
+549 59 3.46386e+010
+315 145 3.46057e+010
+410 99 3.45742e+010
+567 423 3.4525e+010
+497 79 3.45012e+010
+193 17 3.44028e+010
+246 106 3.43839e+010
+300 183 3.43136e+010
+283 35 3.42231e+010
+285 263 3.41597e+010
+357 240 3.41371e+010
+163 147 3.41141e+010
+240 365 3.4059e+010
+191 171 3.40022e+010
+2 155 3.39925e+010
+217 55 3.39838e+010
+498 68 3.39284e+010
+49 164 3.38826e+010
+321 103 3.38173e+010
+194 110 3.38099e+010
+148 21 3.37901e+010
+407 81 3.37553e+010
+153 299 3.3725e+010
+484 179 3.37159e+010
+365 86 3.36295e+010
+153 197 3.35371e+010
+440 181 3.34728e+010
+378 340 3.34414e+010
+161 133 3.34368e+010
+252 422 3.33852e+010
+503 361 3.338e+010
+40 217 3.33284e+010
+386 292 3.33112e+010
+44 121 3.33035e+010
+254 74 3.33e+010
+512 125 3.3261e+010
+113 263 3.32446e+010
+298 191 3.31578e+010
+543 252 3.3116e+010
+197 75 3.31046e+010
+109 358 3.30568e+010
+335 240 3.2995e+010
+198 15 3.29466e+010
+273 71 3.29352e+010
+254 404 3.29182e+010
+141 391 3.2898e+010
+158 1 3.28516e+010
+598 364 3.2829e+010
+165 154 3.27809e+010
+445 7 3.27764e+010
+577 178 3.27128e+010
+226 15 3.26989e+010
+550 222 3.26966e+010
+65 252 3.26954e+010
+247 258 3.266e+010
+143 395 3.25668e+010
+344 197 3.25513e+010
+128 238 3.25205e+010
+345 109 3.24429e+010
+114 220 3.23661e+010
+181 33 3.23464e+010
+46 80 3.23424e+010
+515 1 3.2336e+010
+297 274 3.23056e+010
+325 148 3.22999e+010
+262 219 3.22802e+010
+209 136 3.22475e+010
+45 131 3.22084e+010
+227 258 3.21576e+010
+131 73 3.21473e+010
+218 144 3.2134e+010
+541 122 3.21134e+010
+282 351 3.20493e+010
+311 334 3.20173e+010
+403 6 3.20151e+010
+389 420 3.20125e+010
+187 100 3.19551e+010
+534 18 3.19331e+010
+163 108 3.1872e+010
+366 95 3.18113e+010
+294 25 3.17575e+010
+208 449 3.16687e+010
+211 33 3.16493e+010
+383 89 3.16358e+010
+194 135 3.16339e+010
+44 10 3.16162e+010
+274 76 3.16129e+010
+324 142 3.15459e+010
+505 382 3.15319e+010
+168 242 3.15291e+010
+530 364 3.15036e+010
+334 368 3.14948e+010
+189 202 3.14933e+010
+480 402 3.14244e+010
+252 10 3.14194e+010
+473 120 3.14115e+010
+430 181 3.13927e+010
+286 52 3.13823e+010
+535 120 3.13787e+010
+167 325 3.13593e+010
+421 315 3.13583e+010
+64 276 3.13248e+010
+340 164 3.13207e+010
+243 55 3.13048e+010
+559 271 3.12986e+010
+166 113 3.12175e+010
+278 145 3.11219e+010
+298 332 3.10548e+010
+522 140 3.09568e+010
+415 83 3.0923e+010
+482 364 3.08933e+010
+313 71 3.08801e+010
+538 78 3.07838e+010
+345 241 3.07034e+010
+141 22 3.06776e+010
+447 376 3.06595e+010
+498 82 3.06565e+010
+24 65 3.06286e+010
+183 133 3.06157e+010
+347 392 3.05554e+010
+479 19 3.05527e+010
+191 314 3.05483e+010
+355 24 3.05315e+010
+343 351 3.05255e+010
+113 205 3.05241e+010
+212 437 3.05028e+010
+516 18 3.04946e+010
+184 117 3.04762e+010
+59 216 3.04203e+010
+528 98 3.03671e+010
+513 220 3.03328e+010
+562 17 3.03151e+010
+192 141 3.03119e+010
+108 45 3.03008e+010
+46 147 3.02913e+010
+509 168 3.02785e+010
+518 164 3.02507e+010
+285 403 3.02426e+010
+447 245 3.02379e+010
+618 181 3.02249e+010
+406 142 3.01828e+010
+272 133 3.0173e+010
+356 334 3.01459e+010
+129 309 3.01032e+010
+273 353 3.01028e+010
+297 137 3.00783e+010
+9 476 3.00409e+010
+311 33 2.99698e+010
+375 225 2.99597e+010
+170 199 2.99514e+010
+36 202 2.99056e+010
+207 159 2.98943e+010
+397 25 2.98546e+010
+418 414 2.98259e+010
+497 283 2.98107e+010
+527 39 2.981e+010
+48 256 2.97906e+010
+514 223 2.97842e+010
+360 216 2.97808e+010
+320 119 2.97802e+010
+86 370 2.97646e+010
+110 168 2.97306e+010
+437 303 2.97008e+010
+308 147 2.96975e+010
+363 407 2.96887e+010
+472 355 2.96768e+010
+376 67 2.9642e+010
+303 170 2.96336e+010
+318 147 2.96107e+010
+345 306 2.95975e+010
+415 262 2.94785e+010
+292 147 2.9458e+010
+70 130 2.94209e+010
+206 293 2.93707e+010
+303 180 2.92892e+010
+363 355 2.92381e+010
+374 394 2.92364e+010
+216 172 2.92323e+010
+343 7 2.92279e+010
+179 359 2.91558e+010
+530 24 2.91448e+010
+320 335 2.91426e+010
+153 216 2.91369e+010
+172 166 2.91233e+010
+498 160 2.91137e+010
+592 107 2.91085e+010
+511 209 2.90855e+010
+64 27 2.90422e+010
+199 328 2.90303e+010
+153 93 2.90294e+010
+326 180 2.89858e+010
+303 52 2.89692e+010
+425 44 2.8952e+010
+383 181 2.88673e+010
+92 112 2.88159e+010
+329 212 2.88021e+010
+180 136 2.87883e+010
+180 106 2.878e+010
+530 193 2.87612e+010
+381 47 2.86816e+010
+51 377 2.86816e+010
+252 153 2.86699e+010
+220 210 2.86051e+010
+162 128 2.85959e+010
+569 122 2.857e+010
+311 298 2.85405e+010
+503 265 2.85123e+010
+528 161 2.85065e+010
+329 103 2.84393e+010
+83 183 2.84091e+010
+484 153 2.8386e+010
+60 148 2.83768e+010
+287 34 2.83665e+010
+201 166 2.83574e+010
+177 311 2.83303e+010
+54 358 2.83024e+010
+101 197 2.82999e+010
+94 217 2.82903e+010
+421 334 2.82234e+010
+260 142 2.82132e+010
+242 101 2.82021e+010
+308 8 2.81796e+010
+513 44 2.81739e+010
+259 228 2.81672e+010
+113 347 2.81266e+010
+84 237 2.81047e+010
+136 93 2.80904e+010
+174 418 2.80867e+010
+270 91 2.80719e+010
+301 86 2.80634e+010
+130 77 2.80501e+010
+278 417 2.80401e+010
+190 184 2.8024e+010
+454 264 2.79856e+010
+185 170 2.79644e+010
+328 165 2.79359e+010
+94 291 2.78767e+010
+539 220 2.78728e+010
+105 430 2.78683e+010
+44 476 2.7867e+010
+133 78 2.78455e+010
+228 288 2.77609e+010
+79 273 2.7731e+010
+224 154 2.77283e+010
+516 348 2.77048e+010
+516 142 2.76708e+010
+453 358 2.76642e+010
+397 21 2.76304e+010
+188 104 2.76281e+010
+521 344 2.76231e+010
+230 35 2.76007e+010
+2 166 2.75605e+010
+485 236 2.75596e+010
+361 9 2.75558e+010
+57 364 2.75226e+010
+166 96 2.75211e+010
+203 397 2.74693e+010
+412 221 2.74471e+010
+422 63 2.74119e+010
+241 68 2.74052e+010
+115 44 2.73709e+010
+219 387 2.73313e+010
+451 204 2.73255e+010
+329 66 2.72136e+010
+163 249 2.72081e+010
+528 142 2.72025e+010
+263 311 2.71133e+010
+90 377 2.7076e+010
+175 40 2.70451e+010
+39 143 2.7035e+010
+136 57 2.69469e+010
+369 140 2.69269e+010
+245 213 2.69179e+010
+573 333 2.69027e+010
+332 295 2.68878e+010
+267 146 2.68597e+010
+166 286 2.6782e+010
+489 23 2.6768e+010
+228 198 2.67157e+010
+335 93 2.67035e+010
+550 121 2.67021e+010
+565 161 2.66929e+010
+231 150 2.66819e+010
+175 121 2.66737e+010
+501 102 2.66589e+010
+356 317 2.66529e+010
+484 161 2.66353e+010
+461 123 2.65756e+010
+136 171 2.65532e+010
+491 470 2.65491e+010
+445 128 2.64998e+010
+500 223 2.64884e+010
+95 284 2.64288e+010
+214 56 2.64039e+010
+54 449 2.64e+010
+32 112 2.63986e+010
+109 183 2.63704e+010
+308 448 2.63477e+010
+288 397 2.62596e+010
+576 164 2.6195e+010
+221 125 2.61903e+010
+376 239 2.61463e+010
+323 424 2.61179e+010
+357 143 2.60613e+010
+512 349 2.60198e+010
+578 123 2.5966e+010
+493 140 2.59598e+010
+127 186 2.59426e+010
+373 86 2.59226e+010
+545 438 2.58981e+010
+28 254 2.58857e+010
+175 187 2.58707e+010
+94 422 2.58328e+010
+189 137 2.5782e+010
+479 241 2.57463e+010
+247 347 2.57131e+010
+109 340 2.56844e+010
+151 133 2.56711e+010
+542 216 2.56515e+010
+450 442 2.56414e+010
+103 223 2.56401e+010
+251 184 2.56317e+010
+76 270 2.55674e+010
+265 249 2.55531e+010
+39 242 2.55043e+010
+125 40 2.54915e+010
+513 402 2.54673e+010
+509 83 2.54497e+010
+54 303 2.54443e+010
+84 59 2.53428e+010
+148 163 2.5327e+010
+422 161 2.53084e+010
+244 219 2.53026e+010
+262 390 2.53001e+010
+180 394 2.52989e+010
+177 331 2.52911e+010
+367 247 2.52836e+010
+289 212 2.52342e+010
+572 328 2.52267e+010
+155 396 2.52234e+010
+349 241 2.52e+010
+308 183 2.51877e+010
+140 317 2.51716e+010
+573 139 2.51258e+010
+290 89 2.51025e+010
+597 272 2.50876e+010
+161 32 2.50828e+010
+288 86 2.50528e+010
+131 148 2.50134e+010
+220 418 2.50127e+010
+360 242 2.49948e+010
+482 173 2.49784e+010
+372 73 2.4948e+010
+266 118 2.49366e+010
+509 102 2.49159e+010
+180 56 2.49141e+010
+310 90 2.48846e+010
+187 257 2.4867e+010
+512 201 2.48444e+010
+561 201 2.47891e+010
+540 263 2.4774e+010
+69 417 2.47465e+010
+474 143 2.47447e+010
+562 157 2.47287e+010
+383 146 2.4718e+010
+420 362 2.47071e+010
+62 133 2.46743e+010
+235 198 2.46613e+010
+281 143 2.46475e+010
+201 74 2.46139e+010
+117 360 2.45877e+010
+335 104 2.45837e+010
+485 221 2.45802e+010
+509 137 2.45768e+010
+310 259 2.45652e+010
+20 67 2.45591e+010
+54 221 2.45348e+010
+384 25 2.45292e+010
+128 40 2.45158e+010
+480 128 2.4502e+010
+48 458 2.44281e+010
+200 293 2.44177e+010
+330 168 2.44036e+010
+406 162 2.43734e+010
+472 42 2.43238e+010
+163 97 2.43217e+010
+83 101 2.43109e+010
+46 420 2.43086e+010
+195 343 2.43074e+010
+37 138 2.42855e+010
+525 79 2.42684e+010
+81 219 2.423e+010
+351 320 2.42229e+010
+215 427 2.42092e+010
+560 81 2.42087e+010
+83 404 2.41925e+010
+202 7 2.4149e+010
+367 2 2.41479e+010
+209 203 2.41394e+010
+133 411 2.41322e+010
+89 22 2.41191e+010
+534 161 2.40618e+010
+575 54 2.40597e+010
+494 163 2.40239e+010
+451 138 2.40182e+010
+513 261 2.38309e+010
+243 419 2.37793e+010
+326 13 2.37713e+010
+361 449 2.37025e+010
+478 4 2.36895e+010
+576 91 2.36706e+010
+418 282 2.36688e+010
+340 9 2.36552e+010
+515 381 2.36307e+010
+534 393 2.36171e+010
+536 40 2.36113e+010
+324 163 2.3594e+010
+389 222 2.35533e+010
+533 340 2.35181e+010
+304 292 2.35037e+010
+385 450 2.34733e+010
+79 269 2.34694e+010
+524 349 2.34575e+010
+160 256 2.34275e+010
+515 184 2.34164e+010
+574 39 2.34088e+010
+402 265 2.33816e+010
+422 48 2.33605e+010
+59 372 2.33549e+010
+324 341 2.33508e+010
+277 164 2.33395e+010
+138 146 2.33349e+010
+44 152 2.33276e+010
+391 166 2.33264e+010
+279 363 2.32978e+010
+106 2 2.32735e+010
+206 417 2.32733e+010
+240 194 2.32658e+010
+344 276 2.32265e+010
+133 376 2.3195e+010
+336 50 2.31582e+010
+234 346 2.30731e+010
+449 324 2.30493e+010
+273 146 2.30268e+010
+497 229 2.30159e+010
+118 224 2.29861e+010
+161 397 2.29771e+010
+525 423 2.29066e+010
+268 289 2.28929e+010
+154 114 2.28788e+010
+568 383 2.2859e+010
+363 295 2.28404e+010
+152 58 2.28398e+010
+87 230 2.28313e+010
+111 55 2.28101e+010
+389 334 2.27726e+010
+37 288 2.27672e+010
+465 355 2.27641e+010
+588 345 2.2738e+010
+302 102 2.26739e+010
+409 281 2.26324e+010
+11 114 2.26314e+010
+347 370 2.26255e+010
+259 159 2.26029e+010
+125 112 2.25938e+010
+245 385 2.2584e+010
+280 188 2.25755e+010
+198 167 2.25461e+010
+433 63 2.25379e+010
+378 183 2.25278e+010
+51 257 2.25097e+010
+58 79 2.24833e+010
+158 237 2.24573e+010
+93 95 2.2442e+010
+32 103 2.2439e+010
+94 5 2.24097e+010
+560 274 2.23623e+010
+194 201 2.23586e+010
+220 38 2.23535e+010
+515 120 2.2339e+010
+512 109 2.23151e+010
+38 167 2.22991e+010
+426 119 2.2246e+010
+78 59 2.22253e+010
+114 176 2.2218e+010
+461 161 2.21659e+010
+512 295 2.21545e+010
+51 64 2.21236e+010
+205 164 2.21151e+010
+266 139 2.21101e+010
+383 325 2.21022e+010
+541 99 2.20471e+010
+296 410 2.2021e+010
+206 220 2.2006e+010
+132 255 2.19838e+010
+258 327 2.19393e+010
+416 23 2.18662e+010
+175 342 2.18282e+010
+179 103 2.18253e+010
+305 217 2.18119e+010
+401 169 2.18072e+010
+185 374 2.18039e+010
+234 158 2.17853e+010
+503 180 2.17763e+010
+251 257 2.17556e+010
+311 265 2.17397e+010
+290 249 2.17036e+010
+144 255 2.17022e+010
+157 103 2.17001e+010
+513 180 2.1698e+010
+347 144 2.16822e+010
+88 183 2.16808e+010
+591 103 2.16799e+010
+205 127 2.16775e+010
+250 191 2.16769e+010
+299 106 2.16688e+010
+414 143 2.16473e+010
+109 99 2.16078e+010
+358 9 2.15888e+010
+71 47 2.15883e+010
+494 23 2.15763e+010
+572 364 2.15558e+010
+515 335 2.15342e+010
+379 319 2.15342e+010
+431 340 2.15314e+010
+172 107 2.15297e+010
+347 297 2.15157e+010
+31 233 2.14987e+010
+282 392 2.14874e+010
+215 62 2.14859e+010
+432 268 2.14719e+010
+266 286 2.14555e+010
+63 230 2.14478e+010
+545 160 2.14216e+010
+315 238 2.14099e+010
+11 72 2.14086e+010
+323 370 2.13639e+010
+497 223 2.13633e+010
+316 101 2.13502e+010
+320 224 2.13317e+010
+175 19 2.13221e+010
+391 324 2.13217e+010
+329 255 2.13106e+010
+394 336 2.12895e+010
+228 347 2.12852e+010
+533 346 2.12741e+010
+281 132 2.1273e+010
+139 58 2.12519e+010
+123 343 2.12413e+010
+391 449 2.12083e+010
+263 142 2.1208e+010
+531 239 2.12023e+010
+402 217 2.11947e+010
+176 180 2.11681e+010
+323 118 2.11056e+010
+516 43 2.10979e+010
+196 81 2.10968e+010
+144 432 2.10914e+010
+247 164 2.10791e+010
+341 314 2.10786e+010
+150 38 2.10623e+010
+164 379 2.10621e+010
+186 200 2.10595e+010
+163 137 2.10552e+010
+133 392 2.10356e+010
+423 122 2.10147e+010
+154 345 2.098e+010
+267 296 2.09721e+010
+185 311 2.09721e+010
+512 139 2.09489e+010
+151 400 2.09461e+010
+529 136 2.09435e+010
+240 165 2.09095e+010
+332 397 2.09011e+010
+198 111 2.08971e+010
+252 222 2.08846e+010
+54 44 2.08746e+010
+180 123 2.08743e+010
+134 134 2.08565e+010
+521 426 2.08353e+010
+132 477 2.08219e+010
+545 43 2.08114e+010
+158 74 2.0797e+010
+496 462 2.07386e+010
+137 324 2.07279e+010
+333 28 2.07265e+010
+249 363 2.0702e+010
+577 403 2.06881e+010
+214 148 2.06852e+010
+94 198 2.06673e+010
+297 182 2.06606e+010
+13 236 2.06532e+010
+248 262 2.06409e+010
+249 404 2.06304e+010
+36 233 2.06091e+010
+327 342 2.06029e+010
+402 166 2.05951e+010
+279 191 2.05175e+010
+483 286 2.0513e+010
+91 390 2.05054e+010
+458 200 2.04938e+010
+222 214 2.04753e+010
+282 135 2.04496e+010
+368 162 2.0415e+010
+246 326 2.04007e+010
+344 263 2.03829e+010
+271 183 2.03827e+010
+398 169 2.02984e+010
+88 261 2.02914e+010
+374 126 2.02789e+010
+441 63 2.02428e+010
+95 59 2.02419e+010
+362 359 2.02408e+010
+127 26 2.02343e+010
+477 184 2.0233e+010
+40 148 2.02189e+010
+251 247 2.02119e+010
+566 43 2.01984e+010
+482 164 2.01795e+010
+387 203 2.01776e+010
+156 307 2.01715e+010
+114 374 2.01405e+010
+261 440 2.01348e+010
+437 126 2.01245e+010
+300 188 2.01245e+010
+198 10 2.00946e+010
+208 315 2.00838e+010
+216 235 2.00684e+010
+384 111 2.00678e+010
+440 241 2.00477e+010
+557 264 2.0044e+010
+588 19 1.99513e+010
+540 141 1.99511e+010
+464 226 1.9933e+010
+399 67 1.99078e+010
+221 85 1.99002e+010
+252 238 1.98741e+010
+279 194 1.9871e+010
+6 151 1.98591e+010
+236 295 1.98549e+010
+153 222 1.98402e+010
+344 187 1.98362e+010
+41 337 1.98341e+010
+303 406 1.97984e+010
+421 89 1.97892e+010
+590 162 1.97859e+010
+368 31 1.97791e+010
+297 257 1.97773e+010
+487 242 1.97728e+010
+449 284 1.9772e+010
+247 180 1.97481e+010
+106 97 1.96905e+010
+526 122 1.96827e+010
+219 315 1.96772e+010
+170 131 1.96723e+010
+561 144 1.96541e+010
+275 318 1.96515e+010
+31 81 1.96483e+010
+572 450 1.96302e+010
+312 7 1.96282e+010
+59 204 1.95999e+010
+159 90 1.9594e+010
+302 141 1.95888e+010
+146 15 1.95859e+010
+391 52 1.95675e+010
+215 402 1.95563e+010
+96 257 1.95491e+010
+162 150 1.95176e+010
+23 254 1.95146e+010
+487 119 1.9513e+010
+137 177 1.95009e+010
+222 176 1.94798e+010
+90 321 1.94775e+010
+354 238 1.94715e+010
+482 123 1.94601e+010
+179 18 1.94506e+010
+525 265 1.94415e+010
+244 402 1.94402e+010
+416 377 1.94391e+010
+45 407 1.94299e+010
+77 29 1.9405e+010
+179 75 1.93775e+010
+470 202 1.93455e+010
+325 315 1.93425e+010
+3 109 1.93289e+010
+229 178 1.92968e+010
+524 289 1.92797e+010
+310 138 1.92775e+010
+86 356 1.92504e+010
+424 102 1.92369e+010
+263 31 1.9236e+010
+270 222 1.92338e+010
+59 70 1.92303e+010
+390 132 1.92303e+010
+244 255 1.91594e+010
+224 130 1.91545e+010
+357 52 1.91504e+010
+230 92 1.91233e+010
+406 78 1.91132e+010
+47 10 1.91124e+010
+33 39 1.91078e+010
+154 21 1.91027e+010
+527 357 1.90942e+010
+344 341 1.90807e+010
+407 262 1.9077e+010
+64 218 1.90579e+010
+272 414 1.90397e+010
+559 422 1.90361e+010
+108 260 1.90092e+010
+366 107 1.8955e+010
+284 48 1.89487e+010
+463 139 1.89101e+010
+70 390 1.88963e+010
+125 330 1.88794e+010
+13 202 1.88771e+010
+434 381 1.88679e+010
+396 141 1.88516e+010
+289 264 1.88421e+010
+569 420 1.88364e+010
+575 98 1.88321e+010
+466 127 1.88305e+010
+340 220 1.88128e+010
+290 112 1.87997e+010
+426 471 1.8795e+010
+399 131 1.87649e+010
+577 15 1.87383e+010
+144 179 1.87319e+010
+192 326 1.87288e+010
+589 350 1.87032e+010
+361 156 1.86959e+010
+506 198 1.86937e+010
+217 284 1.86878e+010
+164 310 1.86833e+010
+579 42 1.86777e+010
+149 2 1.86537e+010
+477 221 1.86277e+010
+479 458 1.86036e+010
+410 417 1.85815e+010
+103 392 1.85619e+010
+243 430 1.85494e+010
+438 454 1.85449e+010
+250 425 1.85384e+010
+292 349 1.85369e+010
+101 113 1.85304e+010
+257 140 1.85289e+010
+436 105 1.85219e+010
+153 75 1.85207e+010
+527 398 1.85207e+010
+8 43 1.85189e+010
+449 349 1.85184e+010
+107 111 1.84942e+010
+459 140 1.84787e+010
+512 83 1.84544e+010
+172 37 1.84274e+010
+97 198 1.84182e+010
+344 329 1.83901e+010
+374 366 1.83499e+010
+569 325 1.83323e+010
+469 302 1.83317e+010
+454 47 1.83312e+010
+127 365 1.83128e+010
+41 395 1.83098e+010
+200 415 1.83076e+010
+62 439 1.83055e+010
+209 187 1.8277e+010
+420 140 1.8271e+010
+109 77 1.8254e+010
+346 200 1.82437e+010
+572 405 1.82433e+010
+237 149 1.82215e+010
+411 183 1.82146e+010
+225 51 1.81876e+010
+342 297 1.81846e+010
+332 257 1.81647e+010
+115 130 1.81586e+010
+83 3 1.81547e+010
+62 164 1.81388e+010
+479 263 1.81273e+010
+549 281 1.81198e+010
+155 200 1.80967e+010
+569 183 1.80837e+010
+460 356 1.808e+010
+214 161 1.80218e+010
+31 134 1.80096e+010
+68 149 1.8004e+010
+119 54 1.79794e+010
+371 190 1.79663e+010
+176 200 1.79522e+010
+258 107 1.79409e+010
+407 106 1.79336e+010
+467 22 1.79259e+010
+260 457 1.79164e+010
+214 132 1.79085e+010
+246 172 1.79076e+010
+140 428 1.78948e+010
+210 21 1.78929e+010
+124 93 1.78822e+010
+54 389 1.77985e+010
+227 38 1.77954e+010
+519 348 1.77618e+010
+350 86 1.77251e+010
+440 468 1.77018e+010
+465 236 1.76898e+010
+137 138 1.76888e+010
+522 79 1.7678e+010
+129 113 1.76745e+010
+404 221 1.76662e+010
+281 311 1.76536e+010
+128 257 1.76521e+010
+87 395 1.75821e+010
+166 126 1.7581e+010
+232 101 1.75749e+010
+436 184 1.75652e+010
+260 201 1.75522e+010
+258 349 1.7544e+010
+406 199 1.75314e+010
+557 302 1.75173e+010
+544 175 1.75147e+010
+201 317 1.74751e+010
+384 242 1.74744e+010
+576 182 1.7456e+010
+230 112 1.74221e+010
+347 119 1.74166e+010
+355 296 1.73969e+010
+469 140 1.73959e+010
+226 121 1.73864e+010
+212 94 1.73789e+010
+42 25 1.73656e+010
+450 91 1.73603e+010
+198 28 1.73522e+010
+461 102 1.73321e+010
+374 144 1.73216e+010
+81 40 1.73155e+010
+139 394 1.73025e+010
+353 424 1.72552e+010
+277 238 1.72493e+010
+570 59 1.72483e+010
+39 82 1.72461e+010
+358 282 1.72371e+010
+38 254 1.72146e+010
+433 241 1.71171e+010
+584 37 1.70959e+010
+483 326 1.70885e+010
+400 199 1.70871e+010
+393 184 1.70846e+010
+90 399 1.70795e+010
+266 111 1.70586e+010
+24 185 1.7047e+010
+210 163 1.70394e+010
+208 308 1.702e+010
+527 188 1.70189e+010
+68 304 1.70182e+010
+546 365 1.70134e+010
+429 63 1.7009e+010
+465 100 1.69889e+010
+248 15 1.69684e+010
+435 87 1.69622e+010
+42 305 1.69552e+010
+305 411 1.69445e+010
+274 313 1.69354e+010
+248 219 1.69266e+010
+187 264 1.69072e+010
+454 418 1.6896e+010
+565 463 1.68957e+010
+571 268 1.68741e+010
+187 219 1.68595e+010
+490 343 1.68482e+010
+281 418 1.68319e+010
+472 211 1.68294e+010
+102 236 1.68048e+010
+303 444 1.67943e+010
+62 136 1.67878e+010
+324 31 1.67823e+010
+375 282 1.67816e+010
+545 141 1.67725e+010
+95 359 1.6717e+010
+196 310 1.66993e+010
+244 182 1.66988e+010
+313 447 1.66763e+010
+263 401 1.664e+010
+165 203 1.66381e+010
+253 147 1.66364e+010
+212 422 1.66329e+010
+563 178 1.66132e+010
+219 279 1.66092e+010
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_3_5.txt b/test_data/harriscorners/hc_msc_3.00_0.15_3_5.txt
new file mode 100644
index 0000000..5b2313e
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_3_5.txt
@@ -0,0 +1,2192 @@
+2191
+273 366 1.03858e+012
+122 43 9.43959e+011
+330 128 7.81711e+011
+420 181 7.62046e+011
+84 78 7.4066e+011
+448 297 7.33463e+011
+298 53 7.27697e+011
+214 73 6.97482e+011
+237 19 6.86312e+011
+134 214 6.70817e+011
+272 291 6.68358e+011
+199 18 6.67754e+011
+246 94 6.65694e+011
+485 59 6.49721e+011
+436 67 6.48386e+011
+553 40 6.47487e+011
+175 94 6.43601e+011
+387 178 6.25761e+011
+125 364 6.1605e+011
+507 122 6.13473e+011
+395 318 6.08429e+011
+544 168 6.07178e+011
+447 397 6.00073e+011
+400 262 5.93597e+011
+124 254 5.91885e+011
+425 321 5.8891e+011
+303 182 5.86818e+011
+33 137 5.83375e+011
+253 139 5.58292e+011
+124 198 5.57708e+011
+184 35 5.51281e+011
+65 235 5.50484e+011
+277 368 5.45713e+011
+262 441 5.3871e+011
+77 257 5.33267e+011
+302 176 5.29753e+011
+137 209 5.28544e+011
+423 178 5.24847e+011
+257 385 5.23807e+011
+222 38 5.22534e+011
+160 143 5.17429e+011
+90 198 5.12305e+011
+48 27 5.11262e+011
+393 143 5.0707e+011
+242 203 5.05173e+011
+55 29 5.04045e+011
+207 224 5.03916e+011
+294 15 4.96819e+011
+363 401 4.96682e+011
+344 9 4.86838e+011
+325 88 4.86587e+011
+360 295 4.83138e+011
+543 365 4.80161e+011
+82 28 4.78084e+011
+543 15 4.76715e+011
+418 8 4.75979e+011
+207 435 4.6989e+011
+456 282 4.69045e+011
+514 76 4.67605e+011
+523 264 4.66568e+011
+301 165 4.66397e+011
+412 256 4.66215e+011
+344 338 4.64985e+011
+239 202 4.6057e+011
+131 36 4.6034e+011
+449 218 4.5769e+011
+341 337 4.56345e+011
+390 58 4.54325e+011
+282 117 4.52687e+011
+30 8 4.48264e+011
+104 62 4.47021e+011
+225 182 4.46868e+011
+210 435 4.44856e+011
+447 263 4.43206e+011
+317 335 4.40347e+011
+78 2 4.39515e+011
+101 222 4.36833e+011
+360 335 4.34819e+011
+65 319 4.34407e+011
+285 297 4.32564e+011
+166 241 4.31838e+011
+48 98 4.31676e+011
+238 91 4.31184e+011
+209 55 4.28632e+011
+172 95 4.24149e+011
+174 312 4.21507e+011
+196 57 4.1893e+011
+281 112 4.17668e+011
+141 183 4.1557e+011
+465 393 4.12699e+011
+311 150 4.12493e+011
+65 343 4.08438e+011
+498 159 4.08252e+011
+124 185 4.07536e+011
+261 297 4.07314e+011
+36 145 4.07292e+011
+383 162 4.06814e+011
+427 118 4.04419e+011
+510 124 4.02483e+011
+545 58 4.02138e+011
+325 164 4.00403e+011
+418 164 3.9947e+011
+508 18 3.98737e+011
+512 342 3.97353e+011
+143 310 3.97089e+011
+511 167 3.93619e+011
+359 167 3.91162e+011
+291 15 3.88885e+011
+542 209 3.88336e+011
+433 147 3.8725e+011
+562 224 3.87039e+011
+276 182 3.86994e+011
+245 143 3.86457e+011
+509 164 3.85315e+011
+244 165 3.805e+011
+453 204 3.80371e+011
+379 69 3.78181e+011
+389 140 3.72939e+011
+5 46 3.7286e+011
+211 438 3.7241e+011
+510 173 3.72303e+011
+312 76 3.71404e+011
+268 53 3.71127e+011
+543 216 3.7112e+011
+261 222 3.67218e+011
+478 181 3.6644e+011
+221 181 3.66146e+011
+468 237 3.65916e+011
+404 121 3.65781e+011
+86 255 3.63986e+011
+60 184 3.63558e+011
+33 99 3.62376e+011
+116 44 3.6155e+011
+529 24 3.60692e+011
+47 220 3.60467e+011
+529 183 3.58587e+011
+459 263 3.57831e+011
+484 338 3.57384e+011
+451 339 3.56297e+011
+274 288 3.54993e+011
+100 79 3.5493e+011
+366 7 3.54322e+011
+78 80 3.5261e+011
+201 313 3.511e+011
+313 147 3.49731e+011
+138 172 3.49358e+011
+459 279 3.48533e+011
+113 345 3.46847e+011
+241 71 3.46469e+011
+512 98 3.45819e+011
+127 164 3.4565e+011
+37 63 3.45124e+011
+131 26 3.43377e+011
+364 200 3.43142e+011
+364 251 3.41754e+011
+58 74 3.4076e+011
+377 318 3.40129e+011
+83 135 3.39823e+011
+106 39 3.37731e+011
+320 225 3.36827e+011
+347 179 3.3592e+011
+102 360 3.35268e+011
+496 119 3.34527e+011
+509 1 3.33243e+011
+363 8 3.33012e+011
+36 176 3.31887e+011
+528 104 3.31515e+011
+163 277 3.31134e+011
+71 147 3.29476e+011
+546 41 3.27813e+011
+59 219 3.27181e+011
+480 82 3.2701e+011
+139 203 3.26386e+011
+423 45 3.26376e+011
+308 371 3.26095e+011
+112 213 3.26084e+011
+421 162 3.25361e+011
+525 199 3.25335e+011
+552 384 3.23493e+011
+390 48 3.23064e+011
+266 295 3.22698e+011
+509 455 3.21147e+011
+354 320 3.20076e+011
+31 270 3.20023e+011
+136 203 3.19881e+011
+138 110 3.19824e+011
+386 221 3.1865e+011
+233 199 3.16623e+011
+164 20 3.16136e+011
+217 208 3.15341e+011
+467 124 3.09602e+011
+159 183 3.09307e+011
+511 220 3.08225e+011
+412 45 3.07548e+011
+176 106 3.07475e+011
+36 299 3.07447e+011
+313 84 3.06677e+011
+527 99 3.06542e+011
+382 5 3.05338e+011
+109 240 3.05208e+011
+225 420 3.04668e+011
+110 135 3.04343e+011
+372 83 3.02607e+011
+228 185 3.01129e+011
+395 261 3.01079e+011
+152 223 3.01034e+011
+317 165 3.0101e+011
+168 19 3.01e+011
+506 164 2.99669e+011
+465 197 2.98716e+011
+573 141 2.98537e+011
+364 257 2.98361e+011
+555 181 2.98257e+011
+251 12 2.97766e+011
+484 179 2.97388e+011
+283 402 2.9724e+011
+321 313 2.96154e+011
+264 299 2.93485e+011
+388 10 2.92956e+011
+113 392 2.91688e+011
+75 237 2.90917e+011
+276 352 2.90566e+011
+211 185 2.90175e+011
+364 254 2.89675e+011
+488 265 2.89662e+011
+262 165 2.89386e+011
+283 72 2.89089e+011
+183 138 2.88697e+011
+424 261 2.88172e+011
+142 324 2.8817e+011
+163 96 2.88105e+011
+156 94 2.87929e+011
+527 360 2.87364e+011
+214 58 2.87239e+011
+478 15 2.84978e+011
+305 193 2.84318e+011
+151 307 2.84268e+011
+230 36 2.84216e+011
+470 122 2.84191e+011
+357 334 2.83321e+011
+113 3 2.83074e+011
+525 172 2.82036e+011
+221 150 2.81971e+011
+51 98 2.81289e+011
+327 141 2.79424e+011
+449 402 2.79129e+011
+318 384 2.79011e+011
+524 20 2.78469e+011
+160 111 2.78191e+011
+10 102 2.78064e+011
+30 237 2.77724e+011
+486 358 2.77e+011
+566 61 2.76744e+011
+537 139 2.76444e+011
+41 63 2.7632e+011
+62 60 2.75612e+011
+569 39 2.7437e+011
+475 261 2.73925e+011
+407 352 2.73863e+011
+350 338 2.73767e+011
+544 3 2.73506e+011
+222 16 2.73301e+011
+130 217 2.72867e+011
+351 321 2.72542e+011
+96 79 2.71594e+011
+244 71 2.69907e+011
+131 1 2.69156e+011
+254 75 2.68712e+011
+271 278 2.67763e+011
+559 19 2.67715e+011
+207 450 2.67636e+011
+88 148 2.67338e+011
+502 143 2.67267e+011
+125 260 2.6671e+011
+373 162 2.66377e+011
+188 181 2.66254e+011
+273 296 2.6463e+011
+297 420 2.64572e+011
+174 239 2.64386e+011
+223 220 2.6383e+011
+176 259 2.63679e+011
+192 172 2.62973e+011
+175 113 2.62664e+011
+343 122 2.6225e+011
+483 359 2.61959e+011
+213 55 2.61419e+011
+363 297 2.61196e+011
+508 5 2.60767e+011
+362 395 2.60511e+011
+260 235 2.60261e+011
+372 117 2.60218e+011
+40 217 2.59686e+011
+154 236 2.59349e+011
+537 393 2.5877e+011
+423 48 2.58557e+011
+306 363 2.58373e+011
+49 151 2.57805e+011
+479 18 2.57388e+011
+92 214 2.57293e+011
+522 123 2.56155e+011
+277 138 2.56061e+011
+292 121 2.55216e+011
+510 79 2.55006e+011
+330 106 2.54977e+011
+76 8 2.54416e+011
+186 215 2.53984e+011
+183 401 2.52683e+011
+544 7 2.52543e+011
+252 423 2.51913e+011
+79 270 2.51858e+011
+524 347 2.51319e+011
+62 371 2.50521e+011
+541 41 2.50509e+011
+222 115 2.492e+011
+24 62 2.48919e+011
+51 289 2.48884e+011
+463 27 2.47846e+011
+387 126 2.46845e+011
+455 264 2.46543e+011
+109 58 2.4546e+011
+293 26 2.45332e+011
+146 160 2.44901e+011
+267 15 2.44321e+011
+480 299 2.43989e+011
+324 314 2.43711e+011
+264 201 2.43118e+011
+498 65 2.42992e+011
+430 320 2.42868e+011
+21 61 2.42696e+011
+412 5 2.42041e+011
+107 62 2.41762e+011
+417 84 2.41639e+011
+578 50 2.41499e+011
+374 240 2.41013e+011
+273 71 2.40446e+011
+345 276 2.40396e+011
+163 213 2.4027e+011
+276 217 2.39864e+011
+281 48 2.39416e+011
+37 218 2.39069e+011
+234 160 2.38654e+011
+387 326 2.38484e+011
+424 337 2.38345e+011
+164 208 2.38266e+011
+442 22 2.38089e+011
+272 167 2.37981e+011
+434 397 2.37882e+011
+167 326 2.37716e+011
+477 5 2.3716e+011
+191 145 2.37093e+011
+326 427 2.37061e+011
+209 154 2.36926e+011
+133 74 2.36897e+011
+260 71 2.36303e+011
+423 398 2.3626e+011
+401 183 2.35729e+011
+534 267 2.35107e+011
+541 123 2.34776e+011
+454 83 2.34431e+011
+519 202 2.3415e+011
+298 69 2.3373e+011
+269 242 2.33271e+011
+364 181 2.33102e+011
+376 85 2.33025e+011
+448 139 2.33023e+011
+273 131 2.32931e+011
+542 132 2.3286e+011
+324 148 2.32798e+011
+63 133 2.32197e+011
+575 126 2.32094e+011
+157 73 2.31451e+011
+386 243 2.3134e+011
+511 83 2.31307e+011
+314 164 2.31289e+011
+418 439 2.30854e+011
+409 45 2.29927e+011
+360 260 2.29883e+011
+286 164 2.29858e+011
+380 337 2.29811e+011
+512 94 2.29811e+011
+372 69 2.29762e+011
+395 159 2.29071e+011
+511 128 2.28637e+011
+225 295 2.2833e+011
+445 22 2.28238e+011
+265 31 2.28179e+011
+362 130 2.28026e+011
+333 90 2.27673e+011
+191 277 2.26993e+011
+216 145 2.26938e+011
+272 282 2.26412e+011
+25 66 2.26296e+011
+358 128 2.26203e+011
+182 111 2.25789e+011
+148 397 2.25773e+011
+436 182 2.25528e+011
+258 89 2.25187e+011
+209 20 2.24957e+011
+579 16 2.24883e+011
+280 371 2.2469e+011
+267 130 2.24114e+011
+510 141 2.23454e+011
+404 338 2.22901e+011
+212 182 2.22551e+011
+546 216 2.21727e+011
+346 350 2.21603e+011
+317 312 2.21277e+011
+92 292 2.20759e+011
+525 196 2.20606e+011
+276 392 2.20427e+011
+302 173 2.20421e+011
+547 161 2.20364e+011
+332 295 2.20354e+011
+539 96 2.19298e+011
+330 10 2.19132e+011
+344 165 2.19086e+011
+539 458 2.18791e+011
+57 5 2.18113e+011
+164 358 2.1789e+011
+271 63 2.17809e+011
+278 144 2.17632e+011
+230 292 2.17489e+011
+78 474 2.17321e+011
+48 133 2.17292e+011
+175 1 2.16304e+011
+302 215 2.15873e+011
+102 235 2.1582e+011
+255 151 2.15615e+011
+171 201 2.15604e+011
+235 346 2.14947e+011
+516 347 2.14757e+011
+381 26 2.14181e+011
+450 82 2.13965e+011
+68 46 2.13673e+011
+216 279 2.13523e+011
+339 473 2.12906e+011
+242 58 2.12786e+011
+368 143 2.1273e+011
+44 62 2.12701e+011
+72 96 2.12694e+011
+116 76 2.1262e+011
+172 40 2.12527e+011
+79 196 2.12476e+011
+274 52 2.11948e+011
+332 202 2.11736e+011
+441 240 2.117e+011
+75 96 2.11345e+011
+138 98 2.11187e+011
+327 182 2.10812e+011
+135 129 2.10552e+011
+410 353 2.10519e+011
+151 114 2.10476e+011
+249 313 2.10437e+011
+186 108 2.10047e+011
+451 373 2.10009e+011
+350 145 2.0973e+011
+549 382 2.09547e+011
+28 30 2.0949e+011
+237 163 2.0881e+011
+532 102 2.08681e+011
+358 241 2.08625e+011
+576 179 2.0854e+011
+462 395 2.08268e+011
+176 186 2.082e+011
+329 202 2.08169e+011
+206 158 2.0763e+011
+25 200 2.0702e+011
+229 198 2.06803e+011
+186 170 2.06794e+011
+84 477 2.06517e+011
+406 81 2.06415e+011
+189 109 2.06268e+011
+96 449 2.05814e+011
+47 11 2.05321e+011
+53 5 2.04908e+011
+161 20 2.04652e+011
+264 71 2.04398e+011
+124 40 2.04371e+011
+441 98 2.04315e+011
+520 182 2.03993e+011
+451 262 2.03849e+011
+533 183 2.0379e+011
+549 183 2.03513e+011
+425 377 2.03199e+011
+507 60 2.03155e+011
+161 238 2.03018e+011
+361 251 2.02541e+011
+379 107 2.02119e+011
+480 165 2.01838e+011
+557 246 2.01814e+011
+420 45 2.01651e+011
+47 147 2.01606e+011
+533 21 2.01249e+011
+398 356 2.01199e+011
+84 2 2.00872e+011
+214 124 2.0064e+011
+418 283 1.99934e+011
+413 99 1.9954e+011
+489 182 1.99184e+011
+162 216 1.99015e+011
+444 452 1.98775e+011
+287 51 1.98122e+011
+228 130 1.97959e+011
+561 321 1.97841e+011
+37 173 1.97473e+011
+572 39 1.97381e+011
+446 352 1.97279e+011
+530 360 1.97214e+011
+355 268 1.96974e+011
+181 394 1.96954e+011
+536 244 1.96591e+011
+511 203 1.95428e+011
+203 294 1.95173e+011
+336 391 1.95027e+011
+104 4 1.94962e+011
+359 317 1.94002e+011
+358 10 1.93527e+011
+307 89 1.93273e+011
+487 24 1.93261e+011
+563 18 1.9215e+011
+55 66 1.91485e+011
+233 261 1.91459e+011
+191 330 1.91346e+011
+265 446 1.90957e+011
+193 16 1.90799e+011
+473 203 1.9074e+011
+414 21 1.90313e+011
+580 80 1.90309e+011
+58 289 1.90297e+011
+281 222 1.90151e+011
+163 74 1.90116e+011
+247 220 1.90101e+011
+479 261 1.89856e+011
+185 20 1.89618e+011
+221 177 1.89408e+011
+185 201 1.89321e+011
+184 344 1.89252e+011
+196 131 1.89223e+011
+43 9 1.88785e+011
+117 392 1.8871e+011
+436 338 1.88696e+011
+140 394 1.88583e+011
+357 220 1.8855e+011
+377 6 1.88489e+011
+85 181 1.88236e+011
+474 63 1.88163e+011
+301 264 1.87959e+011
+49 159 1.87764e+011
+343 463 1.87422e+011
+109 98 1.8731e+011
+286 343 1.87225e+011
+479 451 1.87e+011
+304 157 1.85761e+011
+298 136 1.85431e+011
+397 265 1.8533e+011
+516 182 1.85254e+011
+42 24 1.85242e+011
+314 161 1.85073e+011
+3 155 1.84921e+011
+538 122 1.84681e+011
+96 446 1.84559e+011
+123 272 1.84558e+011
+162 126 1.84411e+011
+134 237 1.84408e+011
+175 41 1.84319e+011
+284 241 1.84169e+011
+112 41 1.8403e+011
+502 164 1.83889e+011
+502 160 1.83695e+011
+412 65 1.83588e+011
+476 341 1.83486e+011
+6 65 1.83459e+011
+248 316 1.83263e+011
+570 141 1.83247e+011
+181 202 1.82962e+011
+286 262 1.82945e+011
+174 19 1.82941e+011
+214 61 1.82611e+011
+242 168 1.82517e+011
+269 93 1.82379e+011
+190 218 1.82174e+011
+412 24 1.82158e+011
+45 82 1.82104e+011
+62 253 1.81929e+011
+405 376 1.8186e+011
+433 111 1.81832e+011
+364 354 1.81668e+011
+159 91 1.81576e+011
+324 341 1.81276e+011
+314 222 1.81189e+011
+186 218 1.81035e+011
+363 408 1.80912e+011
+204 203 1.80892e+011
+150 152 1.80601e+011
+168 56 1.80371e+011
+226 221 1.80239e+011
+297 331 1.80217e+011
+492 139 1.80102e+011
+203 308 1.798e+011
+36 201 1.79364e+011
+235 73 1.79333e+011
+296 296 1.7929e+011
+95 477 1.78825e+011
+387 283 1.78455e+011
+390 297 1.7843e+011
+278 191 1.78239e+011
+194 218 1.77897e+011
+119 95 1.77819e+011
+467 41 1.77544e+011
+191 205 1.77364e+011
+541 164 1.77e+011
+344 263 1.7673e+011
+111 264 1.76199e+011
+341 163 1.7606e+011
+263 219 1.75816e+011
+119 60 1.75599e+011
+354 127 1.75558e+011
+225 51 1.75509e+011
+414 259 1.75484e+011
+161 169 1.75153e+011
+66 252 1.74922e+011
+130 428 1.74728e+011
+498 224 1.74676e+011
+133 132 1.74563e+011
+126 219 1.74431e+011
+169 197 1.73841e+011
+563 159 1.73686e+011
+452 102 1.73357e+011
+142 2 1.73322e+011
+95 148 1.73275e+011
+186 341 1.73085e+011
+476 21 1.72958e+011
+90 376 1.72733e+011
+405 199 1.72409e+011
+399 318 1.7225e+011
+44 474 1.72145e+011
+554 202 1.71974e+011
+196 76 1.71801e+011
+5 9 1.71002e+011
+38 168 1.70773e+011
+239 350 1.70649e+011
+272 181 1.69979e+011
+273 222 1.69855e+011
+14 203 1.69597e+011
+260 329 1.69288e+011
+227 72 1.69255e+011
+571 122 1.68973e+011
+95 217 1.68639e+011
+534 161 1.68416e+011
+384 323 1.68297e+011
+352 163 1.68237e+011
+486 4 1.68201e+011
+53 221 1.67976e+011
+559 80 1.67531e+011
+178 274 1.6752e+011
+517 43 1.67408e+011
+489 139 1.67339e+011
+171 239 1.67195e+011
+151 111 1.66624e+011
+245 293 1.66556e+011
+572 332 1.66424e+011
+12 80 1.66412e+011
+95 6 1.66381e+011
+220 126 1.66318e+011
+100 198 1.66154e+011
+419 87 1.66034e+011
+289 396 1.65928e+011
+509 301 1.65808e+011
+473 23 1.65596e+011
+220 290 1.65439e+011
+289 183 1.65361e+011
+402 167 1.65045e+011
+460 339 1.64897e+011
+529 365 1.64649e+011
+270 66 1.64628e+011
+368 337 1.64492e+011
+209 420 1.6438e+011
+309 7 1.64359e+011
+39 239 1.64228e+011
+510 362 1.63969e+011
+39 309 1.63945e+011
+33 234 1.63945e+011
+94 94 1.63794e+011
+507 83 1.63434e+011
+278 334 1.63341e+011
+57 146 1.6327e+011
+108 45 1.63101e+011
+321 29 1.63095e+011
+191 360 1.63066e+011
+393 353 1.62944e+011
+162 123 1.62875e+011
+395 22 1.62767e+011
+282 393 1.62572e+011
+408 183 1.62512e+011
+278 331 1.62248e+011
+120 110 1.6213e+011
+318 202 1.62126e+011
+452 162 1.62116e+011
+571 162 1.61788e+011
+372 393 1.6177e+011
+259 34 1.61587e+011
+371 90 1.6148e+011
+524 223 1.61294e+011
+60 203 1.61263e+011
+432 123 1.61083e+011
+56 78 1.60931e+011
+440 181 1.60782e+011
+154 198 1.60481e+011
+109 95 1.60431e+011
+560 272 1.60408e+011
+280 385 1.60397e+011
+571 450 1.60236e+011
+251 152 1.60176e+011
+262 392 1.60045e+011
+32 29 1.60037e+011
+424 62 1.60009e+011
+178 122 1.60007e+011
+461 123 1.59868e+011
+365 106 1.59693e+011
+131 77 1.59536e+011
+35 134 1.5949e+011
+220 100 1.59482e+011
+200 166 1.59466e+011
+217 55 1.59255e+011
+510 180 1.59204e+011
+366 260 1.59067e+011
+391 159 1.59037e+011
+446 7 1.58991e+011
+407 65 1.5895e+011
+297 273 1.58695e+011
+539 79 1.58646e+011
+361 314 1.58601e+011
+354 106 1.5854e+011
+474 245 1.58251e+011
+326 295 1.58247e+011
+449 445 1.57725e+011
+129 167 1.5739e+011
+230 149 1.57195e+011
+389 243 1.56948e+011
+525 39 1.56919e+011
+595 18 1.5688e+011
+408 430 1.56818e+011
+249 192 1.56766e+011
+90 289 1.56508e+011
+166 149 1.56109e+011
+481 172 1.55977e+011
+160 95 1.55973e+011
+96 196 1.55963e+011
+129 238 1.5595e+011
+388 97 1.55944e+011
+368 1 1.5578e+011
+178 18 1.55541e+011
+125 76 1.55344e+011
+186 101 1.55269e+011
+529 31 1.55067e+011
+386 165 1.55066e+011
+439 124 1.55019e+011
+410 82 1.54856e+011
+329 166 1.54399e+011
+150 1 1.54251e+011
+413 298 1.54232e+011
+375 392 1.54199e+011
+445 128 1.54048e+011
+537 261 1.54029e+011
+57 254 1.53898e+011
+210 136 1.53823e+011
+354 25 1.53673e+011
+279 187 1.53555e+011
+163 148 1.53511e+011
+181 135 1.53486e+011
+307 448 1.5343e+011
+44 98 1.53245e+011
+418 258 1.53221e+011
+341 8 1.53155e+011
+58 71 1.53114e+011
+264 250 1.52557e+011
+573 405 1.52081e+011
+437 304 1.52031e+011
+495 456 1.51897e+011
+257 220 1.51749e+011
+462 100 1.51666e+011
+284 110 1.51561e+011
+329 257 1.51529e+011
+392 19 1.51415e+011
+263 141 1.51311e+011
+144 16 1.51166e+011
+166 115 1.51e+011
+516 19 1.50989e+011
+531 142 1.50775e+011
+225 130 1.50689e+011
+454 47 1.50616e+011
+118 425 1.50316e+011
+316 239 1.5008e+011
+165 110 1.49192e+011
+26 132 1.49165e+011
+526 382 1.49067e+011
+80 40 1.49029e+011
+93 255 1.48721e+011
+116 129 1.48676e+011
+57 364 1.48401e+011
+377 65 1.48361e+011
+259 273 1.48264e+011
+352 11 1.48228e+011
+89 259 1.48188e+011
+270 106 1.48064e+011
+539 405 1.48029e+011
+204 164 1.47917e+011
+512 262 1.47716e+011
+401 104 1.47464e+011
+546 17 1.47314e+011
+345 108 1.47268e+011
+238 220 1.47232e+011
+562 149 1.47116e+011
+65 275 1.46791e+011
+501 42 1.46533e+011
+270 144 1.46528e+011
+99 360 1.46408e+011
+574 129 1.46394e+011
+49 256 1.46266e+011
+529 161 1.46198e+011
+465 355 1.46077e+011
+69 129 1.46054e+011
+239 74 1.45491e+011
+330 89 1.45433e+011
+104 224 1.45121e+011
+68 337 1.45081e+011
+393 216 1.44974e+011
+53 42 1.4485e+011
+262 402 1.44717e+011
+18 342 1.44682e+011
+276 220 1.44593e+011
+146 79 1.4419e+011
+154 114 1.44111e+011
+95 422 1.439e+011
+395 105 1.43793e+011
+343 198 1.43716e+011
+95 59 1.43642e+011
+53 359 1.43582e+011
+299 190 1.43485e+011
+321 104 1.43335e+011
+388 14 1.43294e+011
+355 12 1.43053e+011
+578 43 1.42619e+011
+382 411 1.42546e+011
+549 59 1.42503e+011
+223 153 1.42387e+011
+403 187 1.42307e+011
+550 223 1.41957e+011
+485 162 1.41882e+011
+514 363 1.41836e+011
+32 66 1.4149e+011
+331 142 1.41351e+011
+471 421 1.41338e+011
+407 142 1.41333e+011
+174 201 1.41237e+011
+227 259 1.41073e+011
+281 35 1.40833e+011
+192 140 1.40597e+011
+361 370 1.39801e+011
+289 88 1.39769e+011
+387 175 1.3972e+011
+253 194 1.39577e+011
+293 312 1.3948e+011
+446 123 1.39425e+011
+382 180 1.3935e+011
+71 409 1.39222e+011
+411 471 1.39163e+011
+302 170 1.39119e+011
+246 206 1.3891e+011
+172 55 1.38903e+011
+483 176 1.38803e+011
+388 420 1.38651e+011
+460 162 1.3859e+011
+290 348 1.38428e+011
+513 143 1.38335e+011
+469 141 1.38308e+011
+422 315 1.3829e+011
+32 218 1.38102e+011
+119 129 1.38002e+011
+485 377 1.37903e+011
+163 311 1.37898e+011
+346 296 1.37617e+011
+73 186 1.37367e+011
+281 419 1.37054e+011
+222 239 1.36871e+011
+123 161 1.36833e+011
+78 60 1.36578e+011
+506 177 1.36501e+011
+249 423 1.36421e+011
+354 15 1.36415e+011
+380 119 1.36272e+011
+87 369 1.36228e+011
+50 62 1.36078e+011
+478 241 1.3604e+011
+123 95 1.35931e+011
+183 184 1.35553e+011
+92 59 1.35384e+011
+85 214 1.35237e+011
+299 106 1.35088e+011
+294 334 1.34994e+011
+286 34 1.34901e+011
+525 422 1.34717e+011
+322 119 1.34599e+011
+93 20 1.34531e+011
+49 235 1.3446e+011
+376 353 1.34455e+011
+236 150 1.34445e+011
+40 354 1.34385e+011
+191 314 1.34353e+011
+387 322 1.34087e+011
+506 381 1.34083e+011
+334 28 1.34034e+011
+265 204 1.33913e+011
+130 255 1.33883e+011
+127 26 1.33717e+011
+337 428 1.3367e+011
+87 372 1.3344e+011
+37 268 1.33416e+011
+272 353 1.33291e+011
+184 142 1.33249e+011
+513 200 1.33086e+011
+171 448 1.33044e+011
+513 44 1.33038e+011
+195 111 1.33018e+011
+513 181 1.3299e+011
+3 382 1.32873e+011
+58 102 1.32868e+011
+510 135 1.32828e+011
+18 64 1.32651e+011
+482 46 1.32607e+011
+497 283 1.32463e+011
+111 169 1.32458e+011
+138 146 1.32451e+011
+148 22 1.32359e+011
+247 347 1.3235e+011
+186 309 1.32321e+011
+157 308 1.3229e+011
+162 254 1.32289e+011
+599 364 1.32131e+011
+520 345 1.31948e+011
+109 325 1.31765e+011
+333 369 1.31744e+011
+370 87 1.31682e+011
+242 420 1.31576e+011
+212 32 1.31489e+011
+308 440 1.30944e+011
+279 129 1.3087e+011
+503 362 1.30647e+011
+538 268 1.30443e+011
+421 140 1.30436e+011
+21 66 1.3025e+011
+180 165 1.30067e+011
+30 256 1.29805e+011
+199 293 1.29784e+011
+390 326 1.29758e+011
+448 285 1.29746e+011
+447 376 1.29602e+011
+258 161 1.29458e+011
+482 86 1.29368e+011
+448 22 1.29237e+011
+260 249 1.29043e+011
+87 340 1.29031e+011
+129 113 1.28615e+011
+540 141 1.28598e+011
+297 182 1.28556e+011
+332 241 1.28477e+011
+377 121 1.28464e+011
+110 358 1.28458e+011
+410 260 1.28141e+011
+280 134 1.28014e+011
+164 286 1.27889e+011
+384 89 1.27871e+011
+471 212 1.27849e+011
+443 320 1.27834e+011
+274 209 1.2781e+011
+506 160 1.27732e+011
+304 53 1.27708e+011
+107 108 1.27596e+011
+21 218 1.27572e+011
+453 359 1.26764e+011
+584 38 1.26537e+011
+393 65 1.26517e+011
+384 258 1.26506e+011
+405 163 1.26476e+011
+469 201 1.26469e+011
+469 204 1.26305e+011
+329 320 1.26268e+011
+588 161 1.2623e+011
+106 98 1.26217e+011
+177 57 1.26007e+011
+461 43 1.25875e+011
+281 193 1.25846e+011
+376 182 1.2581e+011
+471 83 1.25733e+011
+325 13 1.25712e+011
+460 357 1.25681e+011
+570 182 1.25611e+011
+437 150 1.25552e+011
+215 174 1.25448e+011
+514 381 1.25407e+011
+500 265 1.25363e+011
+109 147 1.25149e+011
+191 123 1.25015e+011
+223 124 1.24771e+011
+374 300 1.24753e+011
+382 46 1.24721e+011
+438 241 1.24713e+011
+64 218 1.24671e+011
+247 106 1.24659e+011
+38 138 1.24624e+011
+540 1 1.2458e+011
+126 330 1.24568e+011
+188 264 1.24451e+011
+88 182 1.24258e+011
+448 165 1.2417e+011
+199 29 1.24104e+011
+573 178 1.2406e+011
+446 243 1.23882e+011
+283 53 1.23845e+011
+483 288 1.23677e+011
+354 220 1.23613e+011
+217 97 1.23317e+011
+287 111 1.23295e+011
+507 203 1.23211e+011
+382 147 1.2297e+011
+391 322 1.22942e+011
+366 86 1.22705e+011
+33 111 1.22616e+011
+246 181 1.22516e+011
+288 125 1.22366e+011
+114 178 1.22359e+011
+535 93 1.22334e+011
+566 39 1.22285e+011
+332 415 1.22269e+011
+249 387 1.22235e+011
+451 324 1.2189e+011
+549 379 1.21843e+011
+267 287 1.21782e+011
+95 124 1.21714e+011
+515 120 1.21629e+011
+436 320 1.21572e+011
+208 202 1.21568e+011
+250 91 1.21545e+011
+451 86 1.21456e+011
+120 446 1.21379e+011
+541 99 1.21373e+011
+245 385 1.21075e+011
+392 166 1.21018e+011
+366 95 1.21002e+011
+167 315 1.20972e+011
+145 326 1.20626e+011
+243 189 1.20615e+011
+91 276 1.20516e+011
+107 428 1.20256e+011
+359 53 1.20144e+011
+43 150 1.20044e+011
+250 183 1.19961e+011
+517 58 1.19957e+011
+39 144 1.19908e+011
+562 324 1.19839e+011
+360 161 1.19737e+011
+301 102 1.19703e+011
+274 75 1.19469e+011
+236 197 1.19458e+011
+194 135 1.19444e+011
+200 327 1.19442e+011
+272 184 1.1943e+011
+333 356 1.19418e+011
+198 111 1.1941e+011
+464 23 1.19032e+011
+545 91 1.1901e+011
+309 354 1.18822e+011
+169 117 1.18801e+011
+12 113 1.18541e+011
+423 122 1.18422e+011
+93 79 1.18415e+011
+152 130 1.18221e+011
+346 239 1.17923e+011
+501 102 1.17857e+011
+478 205 1.17511e+011
+241 68 1.17479e+011
+448 63 1.17271e+011
+188 136 1.16769e+011
+572 59 1.16679e+011
+228 287 1.16634e+011
+246 257 1.1659e+011
+370 107 1.16581e+011
+354 295 1.16553e+011
+171 165 1.16511e+011
+310 298 1.16503e+011
+388 334 1.16473e+011
+339 12 1.16453e+011
+194 312 1.16428e+011
+246 89 1.16374e+011
+278 295 1.16348e+011
+105 431 1.16243e+011
+175 272 1.16093e+011
+53 450 1.15896e+011
+122 123 1.15809e+011
+314 336 1.15781e+011
+369 30 1.15677e+011
+283 135 1.15646e+011
+341 109 1.15476e+011
+239 194 1.15471e+011
+49 166 1.15254e+011
+387 318 1.15211e+011
+537 40 1.15205e+011
+484 155 1.15068e+011
+29 135 1.14842e+011
+49 162 1.14656e+011
+421 80 1.14565e+011
+451 44 1.14492e+011
+52 154 1.14476e+011
+174 121 1.14434e+011
+329 297 1.14382e+011
+162 202 1.14316e+011
+360 220 1.14104e+011
+569 203 1.14079e+011
+490 58 1.13862e+011
+433 381 1.13804e+011
+391 221 1.13802e+011
+195 164 1.13665e+011
+251 163 1.13659e+011
+66 213 1.13638e+011
+58 373 1.13571e+011
+88 230 1.13332e+011
+184 118 1.13296e+011
+523 79 1.13279e+011
+302 189 1.13151e+011
+82 197 1.13135e+011
+485 140 1.1313e+011
+201 393 1.13029e+011
+229 91 1.12935e+011
+448 119 1.12903e+011
+229 346 1.12851e+011
+265 260 1.12823e+011
+516 2 1.12714e+011
+559 61 1.12705e+011
+274 206 1.1267e+011
+509 102 1.12663e+011
+446 144 1.12568e+011
+3 165 1.1254e+011
+196 342 1.12417e+011
+198 194 1.12356e+011
+12 433 1.12236e+011
+11 72 1.12222e+011
+149 129 1.12148e+011
+181 105 1.12127e+011
+446 246 1.1202e+011
+113 205 1.11968e+011
+328 26 1.11653e+011
+163 165 1.11579e+011
+187 325 1.11564e+011
+362 64 1.1156e+011
+133 148 1.11439e+011
+334 281 1.11425e+011
+489 43 1.11345e+011
+401 200 1.11306e+011
+463 40 1.11197e+011
+59 40 1.11171e+011
+204 347 1.11159e+011
+18 236 1.11123e+011
+129 308 1.1107e+011
+375 224 1.11007e+011
+301 244 1.10921e+011
+481 440 1.10893e+011
+251 248 1.10888e+011
+278 112 1.10833e+011
+234 32 1.10792e+011
+75 61 1.10763e+011
+149 163 1.10667e+011
+54 303 1.10539e+011
+266 147 1.10513e+011
+357 282 1.10366e+011
+522 425 1.1032e+011
+418 414 1.10281e+011
+115 218 1.10149e+011
+60 77 1.10131e+011
+576 165 1.10091e+011
+562 142 1.10078e+011
+255 405 1.10004e+011
+257 249 1.10002e+011
+231 71 1.09965e+011
+96 257 1.09781e+011
+326 179 1.09685e+011
+434 277 1.09681e+011
+134 411 1.09608e+011
+230 265 1.09571e+011
+150 231 1.09489e+011
+494 79 1.09358e+011
+102 39 1.09276e+011
+361 214 1.09229e+011
+259 143 1.08915e+011
+394 183 1.08836e+011
+487 204 1.08819e+011
+69 304 1.08522e+011
+354 424 1.08476e+011
+525 186 1.08471e+011
+162 31 1.08372e+011
+163 349 1.08353e+011
+389 133 1.0818e+011
+433 239 1.08174e+011
+120 54 1.08035e+011
+304 206 1.07853e+011
+57 333 1.07765e+011
+484 20 1.07751e+011
+540 206 1.07734e+011
+329 66 1.07662e+011
+10 218 1.07573e+011
+357 143 1.07495e+011
+182 310 1.07445e+011
+151 400 1.07308e+011
+294 269 1.07088e+011
+568 422 1.06813e+011
+182 132 1.06773e+011
+438 455 1.06618e+011
+319 186 1.06571e+011
+202 318 1.0652e+011
+160 138 1.06446e+011
+540 262 1.06441e+011
+571 159 1.06426e+011
+343 37 1.06417e+011
+246 419 1.06392e+011
+588 309 1.06351e+011
+485 235 1.06295e+011
+350 128 1.06268e+011
+243 102 1.0621e+011
+136 323 1.06208e+011
+141 21 1.06137e+011
+427 183 1.06099e+011
+247 326 1.0599e+011
+389 55 1.05893e+011
+77 29 1.05714e+011
+414 144 1.05714e+011
+186 312 1.05711e+011
+432 115 1.0558e+011
+568 382 1.05538e+011
+534 40 1.05505e+011
+543 457 1.05391e+011
+540 219 1.05377e+011
+403 143 1.05353e+011
+406 77 1.05346e+011
+157 235 1.0527e+011
+547 439 1.05256e+011
+166 152 1.05048e+011
+498 341 1.04768e+011
+309 33 1.04738e+011
+302 132 1.04553e+011
+85 60 1.04458e+011
+367 303 1.04341e+011
+432 269 1.04341e+011
+165 379 1.04271e+011
+519 80 1.04106e+011
+510 114 1.0397e+011
+92 149 1.03877e+011
+310 335 1.03817e+011
+527 120 1.03599e+011
+46 407 1.03568e+011
+72 46 1.03484e+011
+519 164 1.03382e+011
+483 325 1.03351e+011
+346 46 1.03299e+011
+229 14 1.03099e+011
+52 30 1.02817e+011
+511 118 1.02758e+011
+541 253 1.02722e+011
+574 56 1.02673e+011
+170 313 1.02666e+011
+386 294 1.02513e+011
+238 94 1.02452e+011
+69 419 1.02368e+011
+504 262 1.01991e+011
+258 108 1.01962e+011
+28 221 1.01918e+011
+96 453 1.01911e+011
+396 46 1.01678e+011
+402 219 1.01582e+011
+39 287 1.01474e+011
+112 132 1.01307e+011
+201 128 1.01298e+011
+283 211 1.01128e+011
+211 163 1.01124e+011
+345 371 1.0101e+011
+246 216 1.00929e+011
+75 128 1.00912e+011
+87 376 1.00809e+011
+380 87 1.0057e+011
+43 122 1.00365e+011
+99 257 1.00281e+011
+110 183 1.00163e+011
+248 261 1.00112e+011
+327 10 1.0002e+011
+618 181 9.99343e+010
+565 463 9.99031e+010
+605 121 9.97144e+010
+131 393 9.96973e+010
+411 415 9.96161e+010
+170 131 9.9557e+010
+424 7 9.94988e+010
+153 56 9.9492e+010
+529 135 9.94478e+010
+147 90 9.9437e+010
+4 235 9.94101e+010
+141 115 9.93341e+010
+434 45 9.93083e+010
+339 220 9.92593e+010
+216 106 9.90813e+010
+419 362 9.87384e+010
+261 456 9.86817e+010
+566 143 9.86306e+010
+41 60 9.8572e+010
+538 182 9.84955e+010
+513 324 9.84057e+010
+434 86 9.83815e+010
+275 109 9.82941e+010
+123 83 9.82677e+010
+471 138 9.81274e+010
+334 103 9.80714e+010
+434 62 9.80134e+010
+341 313 9.78997e+010
+319 95 9.78915e+010
+167 358 9.78216e+010
+183 17 9.77401e+010
+177 330 9.76926e+010
+223 87 9.7601e+010
+541 380 9.75975e+010
+6 151 9.7549e+010
+513 2 9.75011e+010
+16 434 9.74026e+010
+46 90 9.73341e+010
+276 426 9.7199e+010
+497 59 9.71244e+010
+214 425 9.71206e+010
+264 311 9.6948e+010
+10 475 9.69356e+010
+298 400 9.68805e+010
+254 108 9.67438e+010
+484 222 9.67285e+010
+280 439 9.67118e+010
+95 285 9.64931e+010
+494 65 9.64432e+010
+375 144 9.63763e+010
+499 459 9.63652e+010
+270 364 9.61609e+010
+419 97 9.61569e+010
+404 104 9.61502e+010
+374 151 9.61139e+010
+438 25 9.60811e+010
+544 142 9.59764e+010
+307 196 9.58894e+010
+87 356 9.5705e+010
+272 109 9.56891e+010
+173 417 9.56726e+010
+10 75 9.55461e+010
+323 134 9.55027e+010
+349 87 9.54575e+010
+191 350 9.53695e+010
+49 452 9.53503e+010
+108 259 9.52984e+010
+302 141 9.52827e+010
+126 327 9.52806e+010
+157 170 9.52781e+010
+328 103 9.51868e+010
+501 82 9.51194e+010
+556 265 9.51192e+010
+583 141 9.50528e+010
+525 189 9.50452e+010
+401 118 9.50222e+010
+434 26 9.48505e+010
+430 89 9.46781e+010
+431 182 9.45811e+010
+229 268 9.45756e+010
+494 472 9.44384e+010
+244 212 9.44231e+010
+335 50 9.43164e+010
+147 125 9.42901e+010
+535 78 9.42279e+010
+316 100 9.41907e+010
+538 162 9.41023e+010
+309 266 9.38708e+010
+275 316 9.38602e+010
+69 28 9.38449e+010
+9 44 9.37985e+010
+561 275 9.36304e+010
+234 295 9.36272e+010
+375 125 9.35154e+010
+152 446 9.34466e+010
+84 236 9.34228e+010
+311 260 9.33416e+010
+470 23 9.33013e+010
+394 337 9.32739e+010
+157 163 9.32683e+010
+373 75 9.32301e+010
+330 412 9.32249e+010
+262 396 9.31288e+010
+425 102 9.30578e+010
+148 193 9.30295e+010
+197 91 9.28487e+010
+401 376 9.28411e+010
+205 55 9.28271e+010
+567 181 9.28199e+010
+448 259 9.26835e+010
+528 397 9.2682e+010
+143 143 9.259e+010
+391 450 9.25543e+010
+343 296 9.25526e+010
+82 100 9.24159e+010
+561 146 9.23765e+010
+64 362 9.23673e+010
+348 372 9.23088e+010
+293 147 9.22789e+010
+478 221 9.22521e+010
+378 163 9.21858e+010
+126 307 9.21748e+010
+27 117 9.21636e+010
+523 141 9.21363e+010
+214 161 9.20283e+010
+179 169 9.20278e+010
+409 163 9.19069e+010
+70 476 9.1854e+010
+116 359 9.18253e+010
+412 183 9.17717e+010
+76 111 9.17328e+010
+556 303 9.13846e+010
+39 82 9.12496e+010
+204 17 9.12492e+010
+242 281 9.11884e+010
+144 6 9.1176e+010
+204 398 9.11424e+010
+444 119 9.11243e+010
+539 128 9.10425e+010
+544 246 9.09648e+010
+301 204 9.09604e+010
+252 148 9.09475e+010
+135 135 9.0814e+010
+248 365 9.07484e+010
+314 447 9.05867e+010
+451 125 9.0539e+010
+359 448 9.05358e+010
+433 159 9.03385e+010
+219 106 9.03374e+010
+116 289 8.99796e+010
+413 252 8.99658e+010
+177 201 8.99317e+010
+482 124 8.97928e+010
+16 213 8.97644e+010
+42 298 8.97637e+010
+328 14 8.97198e+010
+259 229 8.94992e+010
+464 266 8.91801e+010
+469 207 8.8926e+010
+140 390 8.88957e+010
+336 241 8.88416e+010
+255 80 8.87997e+010
+329 214 8.8777e+010
+335 143 8.87529e+010
+109 76 8.87103e+010
+191 187 8.86686e+010
+188 303 8.85867e+010
+317 460 8.85037e+010
+45 356 8.84953e+010
+231 159 8.84433e+010
+137 94 8.84339e+010
+576 311 8.84054e+010
+399 28 8.83721e+010
+152 92 8.83323e+010
+242 384 8.82976e+010
+119 115 8.79487e+010
+109 179 8.79369e+010
+218 315 8.7841e+010
+106 77 8.78366e+010
+464 237 8.78188e+010
+188 300 8.77415e+010
+428 62 8.76775e+010
+561 245 8.76642e+010
+131 476 8.76328e+010
+297 15 8.75768e+010
+494 59 8.7447e+010
+113 306 8.74425e+010
+132 376 8.73896e+010
+284 199 8.73891e+010
+386 450 8.72135e+010
+243 182 8.71567e+010
+256 105 8.7128e+010
+158 102 8.68861e+010
+486 242 8.68154e+010
+532 396 8.67711e+010
+510 348 8.67229e+010
+50 378 8.67177e+010
+112 339 8.66273e+010
+159 152 8.65985e+010
+322 425 8.65802e+010
+112 355 8.65439e+010
+266 19 8.64975e+010
+122 114 8.64642e+010
+505 199 8.64425e+010
+255 191 8.63491e+010
+55 171 8.63459e+010
+259 370 8.62992e+010
+576 82 8.62738e+010
+36 470 8.61625e+010
+135 139 8.61348e+010
+205 416 8.61196e+010
+39 78 8.6076e+010
+507 41 8.59867e+010
+148 137 8.58439e+010
+240 134 8.5842e+010
+462 140 8.58046e+010
+333 94 8.57675e+010
+158 254 8.56331e+010
+299 254 8.56322e+010
+91 113 8.56287e+010
+85 110 8.56056e+010
+407 105 8.56005e+010
+55 142 8.55885e+010
+208 143 8.55719e+010
+465 115 8.54912e+010
+123 342 8.54828e+010
+547 283 8.52798e+010
+198 311 8.5279e+010
+570 325 8.52526e+010
+227 262 8.5193e+010
+544 249 8.50085e+010
+88 310 8.49595e+010
+466 139 8.48632e+010
+450 197 8.48135e+010
+545 263 8.47838e+010
+400 132 8.47749e+010
+269 220 8.47495e+010
+83 146 8.46998e+010
+533 346 8.46432e+010
+188 256 8.45955e+010
+497 70 8.44566e+010
+92 444 8.44265e+010
+362 452 8.44055e+010
+579 57 8.43257e+010
+27 45 8.43235e+010
+524 162 8.4315e+010
+276 203 8.41862e+010
+123 412 8.41421e+010
+451 417 8.40582e+010
+513 350 8.39396e+010
+510 59 8.39204e+010
+454 118 8.37822e+010
+232 273 8.37675e+010
+414 264 8.36543e+010
+302 405 8.34711e+010
+245 172 8.34527e+010
+343 240 8.34464e+010
+344 178 8.34077e+010
+573 422 8.33663e+010
+169 123 8.3353e+010
+297 410 8.33325e+010
+49 458 8.33175e+010
+149 201 8.32381e+010
+532 341 8.32367e+010
+26 271 8.30741e+010
+447 133 8.30011e+010
+246 34 8.29464e+010
+450 178 8.29283e+010
+161 61 8.28741e+010
+338 63 8.28429e+010
+408 15 8.28295e+010
+408 335 8.27913e+010
+155 445 8.27256e+010
+183 382 8.27251e+010
+473 356 8.25636e+010
+44 251 8.25538e+010
+134 428 8.25375e+010
+512 287 8.23493e+010
+106 359 8.23471e+010
+64 153 8.22456e+010
+449 441 8.22139e+010
+243 218 8.21512e+010
+281 207 8.20716e+010
+63 9 8.19586e+010
+162 37 8.18125e+010
+456 1 8.18036e+010
+279 87 8.1735e+010
+41 183 8.17143e+010
+538 103 8.17115e+010
+161 120 8.14965e+010
+216 403 8.14718e+010
+183 56 8.14422e+010
+450 437 8.12785e+010
+206 234 8.12753e+010
+296 146 8.12444e+010
+435 93 8.12177e+010
+56 234 8.10666e+010
+150 236 8.10589e+010
+515 203 8.08989e+010
+351 364 8.08059e+010
+413 244 8.07181e+010
+70 373 8.06674e+010
+89 21 8.06388e+010
+103 261 8.0622e+010
+319 107 8.05137e+010
+587 18 8.03979e+010
+438 397 8.03825e+010
+497 78 8.03636e+010
+405 7 8.0335e+010
+493 164 8.03262e+010
+196 345 8.03142e+010
+305 217 8.03119e+010
+490 469 8.02532e+010
+8 235 8.0248e+010
+58 106 8.01168e+010
+258 158 8.00404e+010
+478 399 7.99356e+010
+43 339 7.98998e+010
+81 238 7.98086e+010
+218 351 7.95972e+010
+576 91 7.93711e+010
+176 140 7.9358e+010
+95 260 7.92717e+010
+346 201 7.92601e+010
+162 152 7.92011e+010
+161 326 7.9069e+010
+186 94 7.90583e+010
+99 151 7.90546e+010
+550 282 7.90419e+010
+562 200 7.90084e+010
+156 318 7.89667e+010
+395 242 7.89295e+010
+125 114 7.89132e+010
+275 196 7.88946e+010
+214 93 7.88252e+010
+198 148 7.87704e+010
+89 398 7.86107e+010
+267 417 7.85936e+010
+343 354 7.83947e+010
+391 335 7.83831e+010
+498 81 7.83554e+010
+197 466 7.82501e+010
+121 148 7.82353e+010
+416 250 7.82014e+010
+145 343 7.81821e+010
+399 92 7.81767e+010
+13 237 7.80787e+010
+532 172 7.80697e+010
+301 85 7.80574e+010
+481 402 7.80479e+010
+354 326 7.80107e+010
+591 104 7.79618e+010
+69 389 7.79075e+010
+579 202 7.78778e+010
+126 111 7.78087e+010
+106 28 7.7682e+010
+140 316 7.76695e+010
+440 468 7.76602e+010
+24 254 7.76436e+010
+201 7 7.76432e+010
+143 98 7.76086e+010
+173 106 7.75846e+010
+276 319 7.7489e+010
+399 412 7.74486e+010
+323 370 7.73966e+010
+63 448 7.72254e+010
+586 345 7.70831e+010
+488 52 7.70724e+010
+322 11 7.69605e+010
+139 215 7.69068e+010
+119 5 7.69062e+010
+311 89 7.68749e+010
+511 208 7.68717e+010
+120 85 7.68413e+010
+270 414 7.67827e+010
+231 177 7.67804e+010
+517 141 7.6776e+010
+236 136 7.67527e+010
+129 125 7.67458e+010
+266 191 7.66703e+010
+444 204 7.66081e+010
+359 28 7.65708e+010
+179 380 7.64953e+010
+227 201 7.64921e+010
+575 99 7.64685e+010
+306 147 7.64565e+010
+102 57 7.63422e+010
+9 47 7.63234e+010
+62 229 7.63192e+010
+220 84 7.62691e+010
+480 405 7.60778e+010
+445 445 7.5988e+010
+25 49 7.59767e+010
+160 310 7.59484e+010
+109 144 7.58588e+010
+213 131 7.58293e+010
+291 50 7.57634e+010
+128 375 7.57214e+010
+312 131 7.56984e+010
+183 316 7.5673e+010
+390 205 7.56601e+010
+143 237 7.56174e+010
+103 98 7.55444e+010
+456 122 7.55368e+010
+196 197 7.55211e+010
+294 137 7.55156e+010
+180 360 7.53774e+010
+90 255 7.52935e+010
+262 446 7.52512e+010
+212 396 7.52114e+010
+46 204 7.52014e+010
+141 118 7.5108e+010
+88 286 7.50373e+010
+360 182 7.50172e+010
+146 98 7.49765e+010
+388 3 7.49212e+010
+417 79 7.49196e+010
+69 370 7.4904e+010
+408 473 7.48854e+010
+385 337 7.48845e+010
+421 291 7.48619e+010
+80 406 7.46386e+010
+528 356 7.45826e+010
+578 326 7.4442e+010
+125 86 7.44106e+010
+251 222 7.43563e+010
+528 41 7.42972e+010
+381 261 7.42706e+010
+266 79 7.42603e+010
+126 127 7.42458e+010
+442 128 7.41757e+010
+527 79 7.41112e+010
+254 248 7.40857e+010
+480 457 7.40714e+010
+102 30 7.40247e+010
+603 365 7.40208e+010
+418 94 7.40078e+010
+284 125 7.39914e+010
+51 336 7.3983e+010
+266 75 7.39738e+010
+248 361 7.39656e+010
+466 101 7.389e+010
+104 181 7.381e+010
+185 132 7.37809e+010
+196 1 7.36537e+010
+400 129 7.36214e+010
+185 304 7.36009e+010
+350 297 7.35817e+010
+209 316 7.35748e+010
+222 107 7.34367e+010
+513 402 7.34222e+010
+568 222 7.33859e+010
+48 102 7.33641e+010
+374 4 7.32433e+010
+430 45 7.32307e+010
+344 306 7.32257e+010
+28 259 7.30293e+010
+575 135 7.30029e+010
+483 374 7.29957e+010
+147 451 7.29677e+010
+101 295 7.29586e+010
+151 76 7.29453e+010
+137 122 7.29228e+010
+163 248 7.29063e+010
+217 171 7.28937e+010
+116 276 7.2877e+010
+207 309 7.2801e+010
+176 344 7.26947e+010
+421 298 7.25626e+010
+53 389 7.24996e+010
+391 125 7.24246e+010
+164 432 7.23963e+010
+225 147 7.23108e+010
+332 68 7.23007e+010
+179 271 7.22776e+010
+214 290 7.21497e+010
+401 43 7.21346e+010
+410 104 7.20366e+010
+343 350 7.20244e+010
+289 308 7.20127e+010
+362 49 7.18201e+010
+293 90 7.17593e+010
+471 268 7.17165e+010
+229 365 7.17034e+010
+498 139 7.14247e+010
+445 86 7.13843e+010
+426 24 7.13763e+010
+138 131 7.1308e+010
+569 385 7.12876e+010
+538 186 7.12703e+010
+59 171 7.12034e+010
+208 416 7.1172e+010
+124 148 7.1171e+010
+469 434 7.11623e+010
+288 160 7.11376e+010
+135 234 7.11263e+010
+49 374 7.11061e+010
+416 301 7.10102e+010
+282 298 7.09926e+010
+242 357 7.09312e+010
+417 471 7.09273e+010
+230 111 7.08339e+010
+400 17 7.0805e+010
+484 366 7.08034e+010
+344 187 7.07755e+010
+120 187 7.07342e+010
+272 315 7.06892e+010
+56 180 7.06455e+010
+528 437 7.06455e+010
+70 259 7.06223e+010
+473 6 7.05786e+010
+353 238 7.04594e+010
+65 307 7.03727e+010
+470 417 7.033e+010
+589 346 7.03263e+010
+361 157 7.0325e+010
+195 83 7.03058e+010
+67 256 7.0288e+010
+214 450 7.02572e+010
+31 46 7.00508e+010
+133 63 7.00486e+010
+368 161 6.99433e+010
+481 363 6.98982e+010
+523 362 6.98727e+010
+336 94 6.98314e+010
+95 367 6.98138e+010
+303 109 6.97885e+010
+333 65 6.97625e+010
+267 118 6.97215e+010
+235 76 6.97056e+010
+243 429 6.96522e+010
+39 115 6.9597e+010
+332 395 6.95871e+010
+345 140 6.9543e+010
+58 109 6.94975e+010
+558 462 6.94901e+010
+485 159 6.94351e+010
+101 445 6.94075e+010
+521 323 6.93344e+010
+21 131 6.92398e+010
+168 415 6.92312e+010
+194 200 6.91953e+010
+115 169 6.91879e+010
+383 103 6.91862e+010
+154 162 6.91853e+010
+474 238 6.9179e+010
+65 311 6.91641e+010
+160 133 6.91598e+010
+199 143 6.91597e+010
+512 110 6.91563e+010
+570 270 6.90396e+010
+335 219 6.89966e+010
+124 172 6.89593e+010
+529 347 6.89469e+010
+242 53 6.88969e+010
+460 165 6.88867e+010
+523 290 6.88607e+010
+247 329 6.88404e+010
+194 326 6.88361e+010
+95 281 6.87761e+010
+405 42 6.86921e+010
+22 48 6.86445e+010
+487 118 6.85908e+010
+133 93 6.8521e+010
+157 40 6.85092e+010
+434 225 6.84999e+010
+143 449 6.84983e+010
+344 331 6.84751e+010
+213 166 6.8425e+010
+317 404 6.84059e+010
+384 65 6.84023e+010
+432 242 6.83701e+010
+232 190 6.83199e+010
+138 178 6.8295e+010
+33 336 6.8092e+010
+269 314 6.80769e+010
+273 254 6.80764e+010
+481 328 6.80705e+010
+330 218 6.7998e+010
+112 242 6.79967e+010
+199 10 6.79796e+010
+530 177 6.79223e+010
+438 82 6.7829e+010
+278 166 6.77818e+010
+290 11 6.77371e+010
+5 33 6.76661e+010
+343 27 6.76612e+010
+448 86 6.76291e+010
+264 283 6.75677e+010
+182 156 6.75292e+010
+293 199 6.75049e+010
+369 463 6.7373e+010
+96 38 6.7315e+010
+186 375 6.72582e+010
+113 309 6.72234e+010
+155 345 6.71941e+010
+154 397 6.71351e+010
+455 418 6.70108e+010
+82 274 6.70104e+010
+467 136 6.69622e+010
+73 164 6.68601e+010
+27 150 6.68377e+010
+354 341 6.68148e+010
+322 186 6.68091e+010
+119 223 6.68001e+010
+111 389 6.67087e+010
+402 14 6.66708e+010
+336 183 6.66284e+010
+256 102 6.65677e+010
+263 145 6.65607e+010
+87 93 6.64897e+010
+125 124 6.63371e+010
+498 241 6.6309e+010
+579 310 6.62451e+010
+323 137 6.61879e+010
+437 160 6.61798e+010
+310 138 6.61552e+010
+117 263 6.60939e+010
+372 143 6.60621e+010
+473 452 6.60494e+010
+210 96 6.6019e+010
+45 343 6.59952e+010
+207 186 6.5811e+010
+500 71 6.56194e+010
+139 311 6.56142e+010
+468 319 6.55971e+010
+221 431 6.55749e+010
+341 331 6.54534e+010
+261 383 6.53939e+010
+133 144 6.5358e+010
+176 325 6.53045e+010
+426 472 6.53029e+010
+145 146 6.51885e+010
+135 21 6.51802e+010
+199 97 6.51708e+010
+351 270 6.50995e+010
+57 361 6.50909e+010
+463 185 6.49972e+010
+101 165 6.49264e+010
+532 114 6.49185e+010
+218 388 6.49129e+010
+308 130 6.48741e+010
+345 321 6.48124e+010
+143 433 6.47745e+010
+401 80 6.47733e+010
+453 438 6.47435e+010
+303 293 6.47367e+010
+511 369 6.46976e+010
+388 290 6.46706e+010
+104 307 6.46488e+010
+78 218 6.46206e+010
+207 76 6.45303e+010
+227 122 6.44808e+010
+46 419 6.44676e+010
+325 109 6.44515e+010
+17 274 6.4414e+010
+222 215 6.43865e+010
+456 377 6.42878e+010
+50 146 6.42841e+010
+246 15 6.42579e+010
+258 191 6.42238e+010
+95 291 6.41345e+010
+547 224 6.41336e+010
+349 276 6.41335e+010
+184 164 6.40758e+010
+62 200 6.39745e+010
+589 349 6.39625e+010
+464 212 6.39517e+010
+386 356 6.39219e+010
+327 29 6.38888e+010
+82 72 6.38562e+010
+68 56 6.38255e+010
+288 276 6.37962e+010
+544 85 6.37918e+010
+301 444 6.3781e+010
+602 275 6.37149e+010
+483 242 6.36e+010
+459 200 6.35686e+010
+585 59 6.35271e+010
+387 434 6.34895e+010
+33 39 6.34628e+010
+510 366 6.34165e+010
+478 143 6.3371e+010
+370 93 6.33503e+010
+360 140 6.33428e+010
+18 247 6.33245e+010
+27 189 6.3302e+010
+203 39 6.32814e+010
+209 394 6.32358e+010
+375 282 6.31118e+010
+561 152 6.30931e+010
+493 42 6.30271e+010
+496 475 6.30176e+010
+579 214 6.28995e+010
+257 458 6.28674e+010
+261 317 6.27035e+010
+60 177 6.26868e+010
+289 248 6.26583e+010
+414 220 6.2629e+010
+553 18 6.26286e+010
+376 88 6.25875e+010
+152 193 6.25587e+010
+64 28 6.24982e+010
+52 180 6.24604e+010
+434 280 6.24415e+010
+573 363 6.24172e+010
+282 310 6.23194e+010
+523 429 6.22715e+010
+251 239 6.21873e+010
+86 363 6.21798e+010
+37 254 6.21625e+010
+218 283 6.21339e+010
+102 113 6.21085e+010
+309 173 6.20801e+010
+347 124 6.20541e+010
+278 236 6.20376e+010
+324 258 6.19392e+010
+518 360 6.19298e+010
+268 141 6.18869e+010
+412 160 6.17803e+010
+72 338 6.17687e+010
+45 254 6.17333e+010
+553 221 6.17258e+010
+123 216 6.17152e+010
+151 59 6.1691e+010
+259 349 6.16564e+010
+511 297 6.16229e+010
+290 140 6.1621e+010
+544 243 6.15618e+010
+13 420 6.15565e+010
+66 271 6.15541e+010
+111 45 6.1439e+010
+282 265 6.13908e+010
+148 197 6.13631e+010
+142 429 6.13181e+010
+298 257 6.13021e+010
+203 108 6.12699e+010
+396 95 6.12543e+010
+144 234 6.12192e+010
+420 119 6.11812e+010
+259 200 6.11712e+010
+458 394 6.11707e+010
+153 312 6.11538e+010
+502 419 6.11078e+010
+12 46 6.10855e+010
+216 249 6.1055e+010
+355 18 6.10461e+010
+266 110 6.10168e+010
+474 82 6.09461e+010
+542 178 6.09404e+010
+467 108 6.09066e+010
+314 126 6.08643e+010
+331 221 6.08532e+010
+95 374 6.08297e+010
+250 400 6.07063e+010
+484 206 6.06957e+010
+250 403 6.06725e+010
+458 115 6.06658e+010
+192 240 6.06067e+010
+186 73 6.05984e+010
+250 369 6.05859e+010
+359 361 6.05629e+010
+9 31 6.056e+010
+577 403 6.05576e+010
+381 450 6.04628e+010
+416 268 6.04298e+010
+81 219 6.04242e+010
+213 400 6.03757e+010
+305 188 6.03167e+010
+520 242 6.0019e+010
+186 292 6.00106e+010
+366 244 5.99835e+010
+308 104 5.99771e+010
+82 153 5.99295e+010
+377 96 5.99245e+010
+262 89 5.9901e+010
+145 397 5.97624e+010
+435 104 5.97383e+010
+167 127 5.96838e+010
+307 257 5.96789e+010
+387 246 5.96582e+010
+140 149 5.96367e+010
+373 355 5.9577e+010
+374 155 5.95716e+010
+401 425 5.94953e+010
+239 148 5.94662e+010
+153 22 5.93884e+010
+305 398 5.93866e+010
+56 294 5.93506e+010
+250 320 5.93227e+010
+49 226 5.9319e+010
+58 303 5.93174e+010
+372 351 5.93125e+010
+26 168 5.91663e+010
+103 336 5.91154e+010
+167 39 5.90953e+010
+427 105 5.9078e+010
+308 220 5.90748e+010
+263 239 5.90318e+010
+254 258 5.89026e+010
+136 58 5.88498e+010
+557 365 5.88472e+010
+199 199 5.883e+010
+213 418 5.86752e+010
+104 162 5.86678e+010
+11 178 5.86583e+010
+138 254 5.8557e+010
+404 30 5.85533e+010
+156 174 5.85034e+010
+162 91 5.84974e+010
+376 46 5.8431e+010
+209 404 5.83291e+010
+212 202 5.83178e+010
+510 245 5.83056e+010
+397 137 5.82497e+010
+399 95 5.81402e+010
+539 177 5.81053e+010
+448 288 5.80806e+010
+193 290 5.80803e+010
+294 399 5.80363e+010
+358 66 5.80338e+010
+530 192 5.8014e+010
+513 60 5.80032e+010
+281 124 5.79716e+010
+230 332 5.79175e+010
+220 327 5.787e+010
+468 302 5.78236e+010
+437 387 5.77517e+010
+578 329 5.7709e+010
+229 51 5.76634e+010
+35 44 5.75903e+010
+544 436 5.75654e+010
+592 108 5.75439e+010
+378 148 5.7443e+010
+520 239 5.74379e+010
+464 227 5.74082e+010
+487 231 5.7391e+010
+475 399 5.73619e+010
+345 328 5.73561e+010
+445 414 5.73558e+010
+173 131 5.73428e+010
+76 147 5.73174e+010
+244 400 5.73108e+010
+113 374 5.72632e+010
+211 93 5.72593e+010
+248 395 5.72162e+010
+306 412 5.72129e+010
+250 327 5.72068e+010
+294 374 5.71698e+010
+221 130 5.71292e+010
+155 298 5.70571e+010
+227 284 5.70451e+010
+200 405 5.70319e+010
+156 78 5.70057e+010
+152 317 5.6991e+010
+467 210 5.69635e+010
+230 262 5.69236e+010
+521 91 5.69217e+010
+195 211 5.68365e+010
+206 404 5.67966e+010
+41 336 5.67355e+010
+433 82 5.67172e+010
+297 316 5.67139e+010
+533 62 5.67058e+010
+32 80 5.66537e+010
+437 111 5.66239e+010
+181 293 5.6616e+010
+250 53 5.66032e+010
+521 189 5.6523e+010
+94 407 5.65224e+010
+472 102 5.64653e+010
+516 83 5.64347e+010
+220 421 5.64249e+010
+47 478 5.64061e+010
+115 253 5.63916e+010
+20 317 5.63654e+010
+142 255 5.63227e+010
+111 111 5.63117e+010
+567 359 5.62677e+010
+566 177 5.62374e+010
+434 387 5.62267e+010
+275 95 5.60509e+010
+408 109 5.59995e+010
+224 74 5.59957e+010
+83 403 5.59911e+010
+543 444 5.59354e+010
+53 146 5.59345e+010
+84 170 5.59231e+010
+284 78 5.59145e+010
+558 324 5.58855e+010
+205 29 5.58667e+010
+61 439 5.58127e+010
+164 364 5.57919e+010
+366 454 5.57789e+010
+581 327 5.57701e+010
+540 443 5.57393e+010
+275 122 5.57358e+010
+3 110 5.56616e+010
+156 448 5.55314e+010
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_3_7.txt b/test_data/harriscorners/hc_msc_3.00_0.15_3_7.txt
new file mode 100644
index 0000000..5198800
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_3_7.txt
@@ -0,0 +1,2464 @@
+2463
+121 44 3.00111e+012
+274 367 2.74009e+012
+421 180 2.53537e+012
+277 367 2.49213e+012
+401 263 2.3162e+012
+331 128 2.28505e+012
+135 214 2.15244e+012
+299 53 2.04517e+012
+246 94 2.01927e+012
+83 77 1.97487e+012
+424 322 1.9503e+012
+238 19 1.94856e+012
+81 29 1.92336e+012
+271 291 1.92071e+012
+199 18 1.75559e+012
+437 68 1.73882e+012
+75 257 1.7191e+012
+458 279 1.7175e+012
+542 14 1.70482e+012
+282 113 1.68526e+012
+55 30 1.67721e+012
+80 4 1.63066e+012
+165 240 1.59462e+012
+510 124 1.57588e+012
+210 436 1.54354e+012
+361 294 1.52489e+012
+244 98 1.50193e+012
+130 26 1.486e+012
+482 178 1.47515e+012
+424 177 1.45542e+012
+302 184 1.44458e+012
+151 223 1.43906e+012
+512 78 1.4284e+012
+302 181 1.4207e+012
+213 58 1.4021e+012
+460 264 1.39875e+012
+390 142 1.39784e+012
+394 142 1.38932e+012
+345 339 1.36153e+012
+561 225 1.35675e+012
+160 144 1.35424e+012
+396 317 1.34272e+012
+138 204 1.33086e+012
+484 58 1.32695e+012
+510 166 1.32636e+012
+183 34 1.32318e+012
+293 16 1.32167e+012
+174 95 1.32066e+012
+543 167 1.31259e+012
+343 8 1.30545e+012
+224 181 1.30253e+012
+260 297 1.29945e+012
+208 222 1.29339e+012
+125 255 1.29313e+012
+34 138 1.29025e+012
+102 222 1.28989e+012
+258 384 1.27852e+012
+342 338 1.27623e+012
+348 339 1.25686e+012
+361 395 1.25263e+012
+554 39 1.23548e+012
+130 37 1.22671e+012
+484 338 1.21752e+012
+528 102 1.20902e+012
+115 43 1.20586e+012
+421 165 1.20225e+012
+138 208 1.20183e+012
+36 145 1.19701e+012
+419 8 1.19542e+012
+413 255 1.19381e+012
+124 185 1.19175e+012
+244 166 1.18873e+012
+158 74 1.17875e+012
+416 8 1.17549e+012
+263 442 1.15975e+012
+413 259 1.15676e+012
+544 58 1.15505e+012
+30 8 1.15454e+012
+65 235 1.15433e+012
+79 80 1.15012e+012
+497 160 1.14793e+012
+127 164 1.13872e+012
+528 24 1.13699e+012
+302 176 1.13681e+012
+126 364 1.1271e+012
+90 197 1.12249e+012
+242 203 1.11534e+012
+359 166 1.11153e+012
+215 71 1.10708e+012
+302 166 1.10641e+012
+448 399 1.10582e+012
+313 148 1.10418e+012
+4 46 1.09981e+012
+44 26 1.08591e+012
+326 165 1.08554e+012
+386 178 1.08267e+012
+450 338 1.07609e+012
+47 98 1.07151e+012
+390 59 1.0699e+012
+241 70 1.06961e+012
+224 37 1.06807e+012
+252 139 1.06766e+012
+299 165 1.06473e+012
+326 89 1.05807e+012
+112 344 1.05799e+012
+255 139 1.05288e+012
+34 267 1.0526e+012
+359 334 1.04669e+012
+450 204 1.04345e+012
+319 225 1.04285e+012
+542 365 1.04225e+012
+282 49 1.03888e+012
+507 19 1.03728e+012
+87 197 1.02779e+012
+104 61 1.02725e+012
+111 169 1.02619e+012
+208 225 1.0246e+012
+448 296 1.02303e+012
+511 2 1.02043e+012
+175 111 1.01515e+012
+383 162 1.01383e+012
+223 420 1.01307e+012
+202 313 1.01172e+012
+383 5 1.00903e+012
+310 149 1.00895e+012
+319 314 1.00862e+012
+276 182 1.0056e+012
+208 55 1.00541e+012
+449 299 1.00457e+012
+359 129 1.00345e+012
+454 204 1.00161e+012
+238 201 1.00035e+012
+391 296 9.9867e+011
+65 232 9.98653e+011
+547 162 9.98094e+011
+209 21 9.9377e+011
+464 395 9.92293e+011
+552 383 9.89748e+011
+509 163 9.89725e+011
+352 321 9.87703e+011
+403 120 9.87049e+011
+378 68 9.86639e+011
+373 84 9.8561e+011
+358 319 9.84082e+011
+83 136 9.82918e+011
+448 261 9.78032e+011
+155 235 9.75416e+011
+481 84 9.75121e+011
+467 238 9.72139e+011
+513 342 9.64977e+011
+269 53 9.64672e+011
+362 258 9.62916e+011
+123 199 9.59224e+011
+432 147 9.566e+011
+404 183 9.54566e+011
+542 214 9.53666e+011
+470 238 9.52945e+011
+206 436 9.47512e+011
+503 1 9.46258e+011
+265 296 9.45997e+011
+55 290 9.43352e+011
+144 311 9.4138e+011
+206 449 9.39657e+011
+364 255 9.3849e+011
+107 39 9.36774e+011
+132 74 9.33892e+011
+387 220 9.31659e+011
+428 117 9.31422e+011
+326 141 9.3095e+011
+87 254 9.2995e+011
+313 84 9.29081e+011
+176 108 9.28543e+011
+46 221 9.226e+011
+283 402 9.21484e+011
+260 220 9.20784e+011
+64 342 9.19693e+011
+469 123 9.19459e+011
+365 6 9.18525e+011
+125 259 9.1777e+011
+274 132 9.13975e+011
+424 45 9.11024e+011
+143 323 9.07076e+011
+36 135 9.06141e+011
+152 308 9.01676e+011
+34 100 9.01119e+011
+162 110 8.99382e+011
+412 45 8.99146e+011
+481 337 8.93173e+011
+189 218 8.92897e+011
+163 215 8.92498e+011
+61 217 8.92448e+011
+60 184 8.90961e+011
+166 98 8.90397e+011
+174 41 8.89402e+011
+389 11 8.87189e+011
+328 296 8.84649e+011
+64 319 8.83354e+011
+420 46 8.80579e+011
+140 182 8.80418e+011
+528 183 8.79139e+011
+232 199 8.79051e+011
+142 185 8.7704e+011
+280 365 8.75207e+011
+364 251 8.71425e+011
+256 152 8.70837e+011
+546 41 8.68591e+011
+455 283 8.6835e+011
+112 391 8.67389e+011
+213 74 8.62783e+011
+41 217 8.62034e+011
+249 143 8.60589e+011
+294 27 8.60464e+011
+282 117 8.53233e+011
+56 6 8.51695e+011
+174 312 8.50026e+011
+475 261 8.48079e+011
+380 5 8.44096e+011
+562 478 8.43036e+011
+156 1 8.42127e+011
+317 165 8.40977e+011
+485 359 8.401e+011
+111 136 8.38415e+011
+195 58 8.35935e+011
+516 75 8.35746e+011
+365 300 8.3544e+011
+177 105 8.33975e+011
+508 454 8.31995e+011
+486 180 8.31829e+011
+272 280 8.26095e+011
+512 219 8.25834e+011
+464 198 8.25095e+011
+384 10 8.24435e+011
+12 217 8.20592e+011
+217 145 8.16945e+011
+128 187 8.1609e+011
+508 2 8.15806e+011
+36 298 8.15088e+011
+314 163 8.14747e+011
+495 118 8.13129e+011
+234 161 8.12715e+011
+145 161 8.09219e+011
+36 63 8.08903e+011
+49 29 8.08572e+011
+431 318 8.08351e+011
+31 235 8.04414e+011
+523 265 8.03313e+011
+170 240 8.03018e+011
+50 289 8.02557e+011
+317 336 7.99196e+011
+329 258 7.97306e+011
+236 347 7.94361e+011
+229 37 7.94052e+011
+312 75 7.9349e+011
+261 236 7.93021e+011
+505 165 7.92452e+011
+512 97 7.88971e+011
+365 258 7.88201e+011
+538 457 7.87947e+011
+245 207 7.87883e+011
+436 396 7.87441e+011
+169 18 7.86033e+011
+36 174 7.83556e+011
+294 122 7.80162e+011
+413 6 7.79861e+011
+192 143 7.78043e+011
+101 360 7.75817e+011
+423 336 7.75443e+011
+447 218 7.73463e+011
+526 197 7.73267e+011
+528 186 7.72399e+011
+522 346 7.70938e+011
+362 7 7.69982e+011
+392 47 7.69568e+011
+525 24 7.68656e+011
+370 83 7.67038e+011
+511 19 7.66079e+011
+139 325 7.6544e+011
+505 162 7.63981e+011
+158 96 7.63691e+011
+276 353 7.63386e+011
+153 197 7.61488e+011
+247 219 7.59719e+011
+388 164 7.57854e+011
+380 162 7.56882e+011
+250 12 7.55207e+011
+392 218 7.54636e+011
+24 62 7.53723e+011
+211 184 7.53598e+011
+510 81 7.52893e+011
+25 65 7.52151e+011
+498 66 7.50247e+011
+168 326 7.5021e+011
+363 403 7.50058e+011
+115 392 7.49388e+011
+514 203 7.48534e+011
+229 293 7.47533e+011
+364 400 7.466e+011
+265 445 7.46162e+011
+251 423 7.44326e+011
+477 19 7.44135e+011
+355 128 7.425e+011
+182 137 7.41657e+011
+162 96 7.40805e+011
+379 338 7.40704e+011
+291 122 7.40688e+011
+303 169 7.40018e+011
+484 363 7.38403e+011
+57 75 7.36466e+011
+190 171 7.35927e+011
+389 323 7.3307e+011
+29 30 7.31571e+011
+528 360 7.31337e+011
+543 211 7.29519e+011
+273 219 7.29306e+011
+222 218 7.29207e+011
+408 183 7.28754e+011
+191 278 7.28685e+011
+538 138 7.26237e+011
+227 186 7.26184e+011
+385 324 7.2607e+011
+110 58 7.24232e+011
+409 354 7.23223e+011
+302 215 7.22306e+011
+490 139 7.19772e+011
+299 105 7.1941e+011
+376 317 7.15133e+011
+58 218 7.14945e+011
+175 187 7.14838e+011
+480 18 7.14347e+011
+134 132 7.14253e+011
+407 82 7.12144e+011
+544 4 7.0979e+011
+548 182 7.07165e+011
+101 79 7.06725e+011
+190 108 7.06677e+011
+520 201 7.05631e+011
+367 142 7.04709e+011
+462 27 7.03105e+011
+479 14 7.02908e+011
+165 20 6.98128e+011
+145 392 6.97663e+011
+211 144 6.97266e+011
+541 41 6.95762e+011
+580 16 6.93764e+011
+253 11 6.92462e+011
+418 87 6.92229e+011
+253 74 6.91376e+011
+34 7 6.90835e+011
+90 258 6.90058e+011
+223 112 6.88627e+011
+175 260 6.87901e+011
+466 123 6.86706e+011
+188 182 6.86127e+011
+129 75 6.84813e+011
+442 239 6.84648e+011
+131 132 6.84078e+011
+275 137 6.82933e+011
+514 346 6.82689e+011
+359 219 6.82661e+011
+275 141 6.80694e+011
+49 150 6.80406e+011
+535 266 6.80185e+011
+343 122 6.77882e+011
+298 274 6.77563e+011
+323 315 6.75746e+011
+462 42 6.7547e+011
+89 149 6.75126e+011
+36 219 6.74818e+011
+472 261 6.74011e+011
+453 85 6.73716e+011
+114 169 6.69566e+011
+509 203 6.66335e+011
+568 42 6.66126e+011
+218 208 6.65534e+011
+142 393 6.62147e+011
+510 139 6.61001e+011
+343 108 6.60593e+011
+342 166 6.60046e+011
+558 19 6.58869e+011
+346 276 6.58701e+011
+164 209 6.57281e+011
+186 202 6.5644e+011
+541 124 6.56386e+011
+392 160 6.5615e+011
+134 97 6.55721e+011
+222 151 6.55213e+011
+278 219 6.55129e+011
+471 421 6.54279e+011
+487 263 6.52939e+011
+394 163 6.50756e+011
+137 171 6.4971e+011
+372 69 6.4796e+011
+97 80 6.47647e+011
+159 181 6.45858e+011
+139 174 6.45296e+011
+380 107 6.43955e+011
+509 142 6.43946e+011
+330 141 6.40954e+011
+477 204 6.40746e+011
+372 161 6.39155e+011
+322 146 6.3741e+011
+215 125 6.36683e+011
+414 22 6.3414e+011
+78 271 6.34006e+011
+510 84 6.32921e+011
+162 115 6.32411e+011
+331 105 6.30442e+011
+108 98 6.30298e+011
+278 390 6.30167e+011
+157 91 6.29408e+011
+104 3 6.28973e+011
+534 184 6.28591e+011
+164 206 6.28354e+011
+533 20 6.2826e+011
+256 147 6.28091e+011
+61 253 6.27921e+011
+190 360 6.26917e+011
+542 208 6.26034e+011
+102 236 6.25643e+011
+97 449 6.2525e+011
+441 22 6.2518e+011
+266 16 6.24051e+011
+232 263 6.23922e+011
+361 400 6.23725e+011
+33 30 6.23425e+011
+385 295 6.2338e+011
+191 204 6.23113e+011
+435 182 6.21775e+011
+139 109 6.19022e+011
+266 30 6.1864e+011
+184 110 6.1856e+011
+263 402 6.1824e+011
+272 64 6.17975e+011
+248 314 6.17837e+011
+173 240 6.17554e+011
+493 139 6.17342e+011
+528 363 6.16553e+011
+261 141 6.16365e+011
+61 203 6.1615e+011
+450 374 6.15456e+011
+516 182 6.13716e+011
+226 421 6.12429e+011
+22 65 6.11718e+011
+377 120 6.11457e+011
+223 14 6.10445e+011
+411 21 6.10132e+011
+340 122 6.1009e+011
+54 222 6.09964e+011
+518 58 6.08936e+011
+509 174 6.08334e+011
+362 130 6.07766e+011
+269 132 6.07452e+011
+437 304 6.07392e+011
+61 134 6.06114e+011
+571 40 6.05535e+011
+485 45 6.05469e+011
+106 43 6.0535e+011
+385 244 6.05268e+011
+346 179 6.04312e+011
+373 392 6.04165e+011
+527 347 6.02678e+011
+540 98 6.02254e+011
+579 81 6.0182e+011
+296 421 6.00908e+011
+134 127 5.99957e+011
+357 11 5.9995e+011
+279 353 5.99789e+011
+184 399 5.99629e+011
+512 142 5.99354e+011
+296 331 5.99339e+011
+110 179 5.9665e+011
+328 11 5.96378e+011
+573 140 5.95986e+011
+332 294 5.94713e+011
+268 243 5.93815e+011
+356 259 5.93402e+011
+100 198 5.92979e+011
+170 200 5.92913e+011
+537 96 5.92243e+011
+345 166 5.92154e+011
+274 72 5.91357e+011
+466 26 5.91147e+011
+478 5 5.89565e+011
+205 295 5.89356e+011
+78 40 5.89351e+011
+463 280 5.88675e+011
+72 259 5.88171e+011
+480 165 5.87847e+011
+232 347 5.87392e+011
+269 277 5.86538e+011
+277 187 5.85345e+011
+175 20 5.84875e+011
+448 124 5.84594e+011
+436 124 5.83306e+011
+114 216 5.82154e+011
+210 74 5.82128e+011
+544 457 5.8205e+011
+265 300 5.82041e+011
+85 1 5.8168e+011
+284 299 5.80778e+011
+483 164 5.80508e+011
+300 205 5.80476e+011
+577 53 5.8038e+011
+91 254 5.80045e+011
+161 169 5.79816e+011
+566 61 5.79029e+011
+75 9 5.78274e+011
+504 143 5.76502e+011
+493 81 5.76144e+011
+389 21 5.76098e+011
+499 225 5.75493e+011
+207 156 5.73883e+011
+43 81 5.73647e+011
+165 278 5.7332e+011
+278 137 5.71727e+011
+517 346 5.70191e+011
+144 181 5.69884e+011
+524 20 5.68971e+011
+145 7 5.68692e+011
+48 12 5.68399e+011
+575 178 5.66933e+011
+345 349 5.66397e+011
+475 244 5.65531e+011
+250 220 5.64973e+011
+162 252 5.64727e+011
+120 115 5.63957e+011
+449 140 5.6299e+011
+447 8 5.62895e+011
+424 63 5.62808e+011
+387 128 5.62401e+011
+331 202 5.62037e+011
+57 72 5.61863e+011
+272 68 5.61346e+011
+310 370 5.612e+011
+108 240 5.60869e+011
+185 343 5.60337e+011
+56 145 5.59739e+011
+237 91 5.59637e+011
+168 115 5.59284e+011
+107 63 5.5892e+011
+94 257 5.58909e+011
+259 165 5.58493e+011
+105 223 5.58153e+011
+218 105 5.57806e+011
+178 273 5.56757e+011
+536 393 5.5659e+011
+423 261 5.56297e+011
+334 91 5.55261e+011
+204 309 5.54895e+011
+473 204 5.54832e+011
+516 42 5.54639e+011
+524 171 5.54461e+011
+418 438 5.54446e+011
+85 61 5.54444e+011
+64 134 5.5397e+011
+523 122 5.53902e+011
+247 386 5.53344e+011
+126 38 5.53123e+011
+57 183 5.53001e+011
+360 141 5.52903e+011
+356 219 5.52676e+011
+287 262 5.52646e+011
+160 137 5.525e+011
+331 90 5.51832e+011
+165 357 5.51683e+011
+298 138 5.51053e+011
+209 419 5.50852e+011
+304 190 5.49312e+011
+167 313 5.48574e+011
+374 240 5.48134e+011
+327 105 5.48076e+011
+287 51 5.47983e+011
+385 166 5.47948e+011
+71 150 5.47915e+011
+38 240 5.4739e+011
+376 162 5.47337e+011
+412 100 5.45901e+011
+422 49 5.45854e+011
+385 88 5.45625e+011
+238 161 5.45625e+011
+218 98 5.44901e+011
+554 181 5.42794e+011
+11 204 5.42548e+011
+228 260 5.42066e+011
+273 166 5.41879e+011
+195 132 5.41254e+011
+445 123 5.40071e+011
+191 350 5.39625e+011
+119 128 5.39594e+011
+279 143 5.39556e+011
+147 398 5.39174e+011
+510 129 5.39147e+011
+397 163 5.37076e+011
+448 166 5.36803e+011
+404 376 5.36331e+011
+276 331 5.36093e+011
+66 216 5.35387e+011
+210 154 5.35283e+011
+387 125 5.3404e+011
+413 65 5.33967e+011
+241 57 5.33795e+011
+272 170 5.33747e+011
+354 11 5.33026e+011
+446 21 5.33008e+011
+63 59 5.3275e+011
+365 201 5.32547e+011
+305 439 5.32358e+011
+256 220 5.31682e+011
+358 241 5.30017e+011
+205 163 5.2976e+011
+176 240 5.29645e+011
+250 193 5.2953e+011
+172 18 5.29125e+011
+509 343 5.28405e+011
+489 2 5.27802e+011
+282 71 5.26894e+011
+372 118 5.26062e+011
+478 243 5.25182e+011
+363 357 5.24735e+011
+393 20 5.24614e+011
+152 112 5.2458e+011
+467 140 5.24554e+011
+562 18 5.24447e+011
+78 474 5.23458e+011
+262 166 5.22637e+011
+185 217 5.22095e+011
+310 6 5.21831e+011
+113 177 5.2176e+011
+280 129 5.18227e+011
+349 181 5.17859e+011
+247 216 5.17454e+011
+34 235 5.17345e+011
+168 118 5.17163e+011
+364 180 5.16029e+011
+527 344 5.15742e+011
+561 475 5.15546e+011
+261 71 5.1553e+011
+67 253 5.15318e+011
+353 338 5.14681e+011
+271 145 5.14144e+011
+563 323 5.13471e+011
+537 93 5.13394e+011
+576 125 5.12802e+011
+172 55 5.12724e+011
+306 195 5.12051e+011
+322 104 5.11524e+011
+46 81 5.10792e+011
+83 476 5.10776e+011
+261 202 5.10697e+011
+438 160 5.09987e+011
+139 99 5.07962e+011
+162 126 5.07763e+011
+537 122 5.07745e+011
+86 181 5.07082e+011
+129 218 5.0679e+011
+415 164 5.06715e+011
+405 339 5.05503e+011
+56 66 5.05316e+011
+531 141 5.0524e+011
+266 130 5.04622e+011
+147 78 5.04363e+011
+540 406 5.03926e+011
+509 179 5.02817e+011
+61 371 5.02368e+011
+164 312 5.02115e+011
+542 95 5.0187e+011
+164 73 5.0116e+011
+480 300 5.00297e+011
+277 190 5.00188e+011
+344 264 5.00139e+011
+93 214 4.99908e+011
+435 319 4.99023e+011
+11 81 4.98868e+011
+82 61 4.98826e+011
+543 8 4.98244e+011
+72 146 4.97882e+011
+401 166 4.97429e+011
+397 356 4.96901e+011
+80 195 4.96146e+011
+199 166 4.9601e+011
+392 17 4.93638e+011
+521 183 4.93382e+011
+563 62 4.93286e+011
+541 133 4.91999e+011
+6 64 4.91798e+011
+149 130 4.91073e+011
+116 77 4.91066e+011
+270 108 4.9054e+011
+418 283 4.9014e+011
+91 290 4.89905e+011
+362 407 4.89634e+011
+264 71 4.89412e+011
+328 182 4.89261e+011
+232 260 4.89112e+011
+90 376 4.88949e+011
+36 170 4.87995e+011
+109 43 4.87551e+011
+109 94 4.87427e+011
+168 196 4.87353e+011
+166 107 4.86962e+011
+180 395 4.86927e+011
+572 405 4.86631e+011
+488 58 4.86254e+011
+193 218 4.85164e+011
+42 10 4.84428e+011
+340 264 4.8429e+011
+415 98 4.83946e+011
+301 101 4.83924e+011
+114 2 4.8388e+011
+196 126 4.83629e+011
+325 426 4.83561e+011
+434 159 4.83516e+011
+434 112 4.83464e+011
+319 386 4.83293e+011
+129 78 4.82735e+011
+270 93 4.82516e+011
+250 90 4.82476e+011
+7 9 4.82284e+011
+238 164 4.81584e+011
+114 212 4.81479e+011
+280 191 4.81292e+011
+279 132 4.80917e+011
+228 130 4.80816e+011
+10 102 4.8081e+011
+93 149 4.80788e+011
+402 186 4.80489e+011
+288 397 4.79859e+011
+220 212 4.78589e+011
+150 398 4.77649e+011
+383 221 4.76946e+011
+66 276 4.76906e+011
+501 164 4.76646e+011
+207 201 4.76262e+011
+124 271 4.75958e+011
+148 449 4.75845e+011
+560 323 4.75091e+011
+563 160 4.74694e+011
+290 88 4.74432e+011
+51 155 4.7428e+011
+116 389 4.74181e+011
+468 202 4.74077e+011
+26 131 4.7388e+011
+452 102 4.73851e+011
+217 280 4.73778e+011
+102 164 4.73489e+011
+445 118 4.71673e+011
+273 316 4.71244e+011
+507 6 4.70422e+011
+501 142 4.70023e+011
+33 110 4.69878e+011
+222 116 4.69758e+011
+541 163 4.69638e+011
+421 141 4.69527e+011
+520 122 4.69357e+011
+480 451 4.68923e+011
+506 361 4.68915e+011
+402 143 4.68815e+011
+268 58 4.68554e+011
+364 141 4.68113e+011
+484 375 4.67916e+011
+539 265 4.67668e+011
+394 63 4.66605e+011
+96 423 4.65812e+011
+377 85 4.65558e+011
+365 105 4.65426e+011
+95 197 4.65296e+011
+202 294 4.65151e+011
+48 132 4.64881e+011
+389 17 4.64736e+011
+486 139 4.64257e+011
+31 67 4.641e+011
+194 215 4.63372e+011
+360 315 4.63258e+011
+107 429 4.63143e+011
+298 296 4.62956e+011
+449 87 4.62642e+011
+297 68 4.6262e+011
+60 40 4.62229e+011
+196 167 4.62216e+011
+447 351 4.62067e+011
+524 187 4.61453e+011
+440 124 4.61118e+011
+375 65 4.60971e+011
+115 131 4.60655e+011
+277 179 4.60567e+011
+258 161 4.60111e+011
+512 362 4.59862e+011
+117 425 4.59663e+011
+468 42 4.59633e+011
+419 259 4.59359e+011
+4 9 4.59282e+011
+422 121 4.58775e+011
+573 124 4.58669e+011
+145 16 4.58364e+011
+4 154 4.58207e+011
+306 364 4.57911e+011
+365 337 4.57755e+011
+88 368 4.57298e+011
+266 203 4.5675e+011
+40 355 4.56504e+011
+517 20 4.56152e+011
+192 139 4.55831e+011
+135 147 4.55659e+011
+506 62 4.54368e+011
+272 58 4.54252e+011
+371 89 4.5425e+011
+428 1 4.54161e+011
+25 201 4.53756e+011
+200 129 4.53511e+011
+276 110 4.53404e+011
+66 26 4.53279e+011
+58 204 4.52755e+011
+182 201 4.52735e+011
+513 46 4.52494e+011
+68 47 4.52375e+011
+1 383 4.52134e+011
+335 88 4.5194e+011
+488 183 4.51816e+011
+310 446 4.51406e+011
+265 249 4.50948e+011
+53 63 4.50928e+011
+174 201 4.50853e+011
+134 238 4.49746e+011
+422 399 4.48606e+011
+404 200 4.48477e+011
+74 96 4.47641e+011
+345 297 4.47104e+011
+309 440 4.46933e+011
+455 162 4.46778e+011
+110 2 4.4675e+011
+232 34 4.46627e+011
+142 18 4.45587e+011
+349 145 4.45568e+011
+205 21 4.45546e+011
+258 90 4.43984e+011
+408 26 4.43795e+011
+84 148 4.43423e+011
+113 243 4.43322e+011
+437 240 4.43165e+011
+284 295 4.4307e+011
+547 216 4.42401e+011
+164 150 4.41604e+011
+306 90 4.41105e+011
+541 141 4.39574e+011
+281 438 4.395e+011
+340 109 4.39241e+011
+498 62 4.39087e+011
+52 42 4.38962e+011
+407 429 4.38593e+011
+216 128 4.38554e+011
+175 272 4.38082e+011
+246 72 4.36421e+011
+394 354 4.36236e+011
+53 358 4.35718e+011
+514 262 4.3557e+011
+573 330 4.35371e+011
+550 57 4.35061e+011
+463 101 4.35021e+011
+368 109 4.34546e+011
+195 329 4.34336e+011
+353 333 4.34097e+011
+223 433 4.33868e+011
+44 98 4.33678e+011
+308 353 4.33409e+011
+407 198 4.33357e+011
+239 219 4.32092e+011
+289 346 4.31337e+011
+201 163 4.313e+011
+534 160 4.31052e+011
+190 329 4.30669e+011
+152 116 4.30521e+011
+265 74 4.30181e+011
+381 88 4.29552e+011
+472 23 4.29452e+011
+332 355 4.29432e+011
+436 379 4.2928e+011
+575 15 4.29186e+011
+382 26 4.29121e+011
+362 65 4.28325e+011
+259 391 4.2829e+011
+291 335 4.28205e+011
+228 263 4.28195e+011
+31 218 4.28019e+011
+84 213 4.27677e+011
+205 159 4.27667e+011
+325 341 4.27377e+011
+7 67 4.26906e+011
+461 162 4.25692e+011
+437 338 4.25551e+011
+66 372 4.25517e+011
+400 318 4.25449e+011
+378 64 4.25325e+011
+300 264 4.25295e+011
+93 93 4.25282e+011
+185 340 4.25197e+011
+250 165 4.24528e+011
+359 7 4.23523e+011
+481 125 4.23432e+011
+505 178 4.23025e+011
+43 150 4.22852e+011
+142 5 4.22655e+011
+304 160 4.22528e+011
+285 164 4.22411e+011
+185 308 4.22133e+011
+237 134 4.22103e+011
+579 43 4.21548e+011
+511 262 4.21495e+011
+190 136 4.21131e+011
+494 458 4.21007e+011
+346 239 4.20446e+011
+72 234 4.20396e+011
+23 59 4.20347e+011
+559 244 4.20322e+011
+209 162 4.19599e+011
+556 245 4.19037e+011
+351 11 4.18367e+011
+189 313 4.18094e+011
+76 236 4.17994e+011
+229 13 4.17252e+011
+12 114 4.16975e+011
+572 179 4.16857e+011
+96 94 4.16612e+011
+40 308 4.16606e+011
+120 58 4.15931e+011
+451 163 4.15875e+011
+130 428 4.15417e+011
+219 153 4.149e+011
+449 118 4.147e+011
+249 260 4.13878e+011
+43 146 4.13739e+011
+408 143 4.13512e+011
+399 106 4.13281e+011
+406 164 4.13261e+011
+283 124 4.13151e+011
+346 45 4.12032e+011
+268 68 4.11622e+011
+424 375 4.11365e+011
+529 160 4.10983e+011
+255 89 4.10862e+011
+282 391 4.1085e+011
+523 79 4.10014e+011
+446 129 4.09505e+011
+93 60 4.09502e+011
+448 444 4.08799e+011
+276 316 4.08305e+011
+196 90 4.08221e+011
+224 128 4.08137e+011
+464 354 4.08047e+011
+594 19 4.07531e+011
+470 140 4.07514e+011
+264 141 4.07286e+011
+564 156 4.06834e+011
+230 180 4.06364e+011
+302 157 4.06283e+011
+475 62 4.06134e+011
+188 167 4.05479e+011
+525 39 4.05449e+011
+52 4 4.05033e+011
+149 151 4.04775e+011
+196 111 4.03971e+011
+443 128 4.03485e+011
+41 182 4.03398e+011
+72 128 4.03316e+011
+452 45 4.0326e+011
+97 363 4.02064e+011
+411 26 4.02034e+011
+400 200 4.0116e+011
+302 243 4.00603e+011
+458 339 4.00358e+011
+480 440 3.99669e+011
+179 121 3.98675e+011
+97 149 3.98342e+011
+165 179 3.97826e+011
+178 20 3.97737e+011
+512 299 3.9736e+011
+483 288 3.97325e+011
+315 238 3.97036e+011
+236 74 3.9689e+011
+258 248 3.96055e+011
+211 136 3.95967e+011
+261 249 3.95944e+011
+323 121 3.95911e+011
+68 476 3.95627e+011
+224 51 3.95062e+011
+541 128 3.94793e+011
+46 355 3.947e+011
+570 121 3.94639e+011
+195 77 3.94152e+011
+149 1 3.94063e+011
+120 447 3.93881e+011
+386 282 3.93797e+011
+344 463 3.93455e+011
+375 352 3.93354e+011
+540 101 3.93205e+011
+442 97 3.93172e+011
+444 452 3.93105e+011
+178 57 3.92898e+011
+47 162 3.92804e+011
+273 94 3.92794e+011
+57 365 3.92152e+011
+71 477 3.92059e+011
+11 78 3.91341e+011
+122 95 3.91008e+011
+251 182 3.90973e+011
+264 390 3.90955e+011
+390 242 3.90802e+011
+210 34 3.90756e+011
+399 184 3.90619e+011
+118 95 3.90319e+011
+125 80 3.90268e+011
+107 29 3.9023e+011
+281 372 3.89974e+011
+136 136 3.89872e+011
+502 43 3.89841e+011
+376 124 3.89667e+011
+413 81 3.89084e+011
+232 125 3.89077e+011
+42 63 3.88569e+011
+165 115 3.88371e+011
+88 288 3.87985e+011
+523 99 3.8692e+011
+390 130 3.86621e+011
+402 104 3.86508e+011
+19 65 3.86036e+011
+72 187 3.85995e+011
+105 360 3.85734e+011
+91 276 3.85507e+011
+391 118 3.84681e+011
+220 128 3.84573e+011
+333 242 3.8452e+011
+539 79 3.84459e+011
+432 276 3.84386e+011
+110 326 3.84008e+011
+557 463 3.83873e+011
+445 244 3.83716e+011
+285 241 3.83567e+011
+526 383 3.83417e+011
+544 247 3.83401e+011
+227 127 3.83244e+011
+361 244 3.82987e+011
+29 257 3.82959e+011
+330 167 3.82557e+011
+540 182 3.81823e+011
+271 142 3.81501e+011
+252 249 3.81127e+011
+561 271 3.81105e+011
+200 30 3.8106e+011
+381 120 3.81026e+011
+283 195 3.80417e+011
+103 198 3.80377e+011
+139 20 3.80026e+011
+29 222 3.79888e+011
+235 150 3.79327e+011
+242 190 3.78436e+011
+135 179 3.78349e+011
+244 293 3.77762e+011
+97 445 3.77626e+011
+173 119 3.77571e+011
+489 44 3.77459e+011
+413 298 3.76788e+011
+480 168 3.76756e+011
+98 259 3.7657e+011
+76 30 3.75763e+011
+364 102 3.75442e+011
+232 150 3.75358e+011
+529 177 3.75287e+011
+299 72 3.75068e+011
+572 162 3.74951e+011
+259 328 3.74713e+011
+218 102 3.74454e+011
+108 76 3.7433e+011
+64 316 3.74295e+011
+409 102 3.73926e+011
+338 428 3.73711e+011
+290 311 3.73551e+011
+378 342 3.7316e+011
+181 312 3.73e+011
+577 56 3.72996e+011
+110 110 3.71761e+011
+359 53 3.70691e+011
+59 64 3.70384e+011
+87 144 3.69996e+011
+477 340 3.69934e+011
+59 100 3.69741e+011
+139 178 3.69651e+011
+192 15 3.69521e+011
+259 107 3.69511e+011
+536 260 3.69387e+011
+317 103 3.68893e+011
+301 133 3.68845e+011
+148 90 3.6879e+011
+45 475 3.68318e+011
+468 208 3.68182e+011
+432 381 3.67521e+011
+396 138 3.67185e+011
+185 167 3.66903e+011
+279 332 3.66888e+011
+371 338 3.65541e+011
+322 426 3.65375e+011
+119 110 3.65202e+011
+10 32 3.64988e+011
+354 144 3.6409e+011
+91 20 3.63807e+011
+461 340 3.63801e+011
+491 180 3.63614e+011
+282 211 3.63279e+011
+342 466 3.62938e+011
+174 122 3.62865e+011
+542 262 3.62847e+011
+48 235 3.62802e+011
+88 216 3.62747e+011
+38 267 3.62472e+011
+105 76 3.61803e+011
+451 438 3.61141e+011
+218 290 3.61108e+011
+320 30 3.60802e+011
+71 46 3.60053e+011
+228 287 3.60042e+011
+186 102 3.59959e+011
+204 204 3.59869e+011
+323 29 3.59175e+011
+314 446 3.5906e+011
+531 266 3.58915e+011
+92 444 3.58827e+011
+212 162 3.58615e+011
+387 335 3.58575e+011
+86 371 3.58335e+011
+253 386 3.58291e+011
+281 33 3.58081e+011
+121 125 3.57294e+011
+268 219 3.56723e+011
+161 152 3.56289e+011
+412 416 3.56109e+011
+509 58 3.56086e+011
+283 395 3.55916e+011
+269 416 3.55856e+011
+562 274 3.55673e+011
+262 199 3.54454e+011
+192 313 3.54368e+011
+434 338 3.54018e+011
+335 392 3.53969e+011
+561 142 3.53321e+011
+511 134 3.53299e+011
+287 402 3.53194e+011
+571 60 3.52766e+011
+280 418 3.5274e+011
+343 200 3.52726e+011
+562 461 3.52457e+011
+110 265 3.52388e+011
+479 11 3.52149e+011
+333 66 3.51584e+011
+9 47 3.51358e+011
+529 270 3.51304e+011
+303 87 3.5119e+011
+222 99 3.51101e+011
+214 174 3.50615e+011
+483 204 3.49697e+011
+356 23 3.49215e+011
+329 25 3.49091e+011
+221 87 3.48464e+011
+294 311 3.48101e+011
+536 78 3.47714e+011
+488 25 3.47274e+011
+37 202 3.46948e+011
+413 353 3.4668e+011
+573 57 3.46397e+011
+186 2 3.4578e+011
+369 92 3.44843e+011
+375 5 3.44837e+011
+349 125 3.44818e+011
+290 184 3.44816e+011
+323 14 3.44755e+011
+251 150 3.44429e+011
+149 199 3.4403e+011
+206 419 3.44015e+011
+306 359 3.43986e+011
+499 80 3.43964e+011
+130 112 3.43861e+011
+536 245 3.43202e+011
+138 311 3.43079e+011
+357 66 3.42948e+011
+248 293 3.42873e+011
+411 263 3.42394e+011
+381 181 3.42342e+011
+354 269 3.42331e+011
+348 164 3.42141e+011
+384 257 3.42063e+011
+541 249 3.42063e+011
+561 146 3.4185e+011
+18 342 3.41765e+011
+372 121 3.4164e+011
+116 58 3.41608e+011
+149 196 3.4129e+011
+215 94 3.41006e+011
+360 370 3.40403e+011
+47 255 3.40121e+011
+131 135 3.40022e+011
+498 460 3.3986e+011
+163 118 3.39345e+011
+164 349 3.38954e+011
+397 46 3.38856e+011
+538 41 3.38603e+011
+340 472 3.38171e+011
+566 144 3.37897e+011
+115 359 3.37831e+011
+558 79 3.37681e+011
+181 165 3.37589e+011
+355 105 3.37531e+011
+247 107 3.36715e+011
+84 100 3.36431e+011
+524 424 3.3631e+011
+202 394 3.36198e+011
+250 154 3.36178e+011
+445 166 3.35491e+011
+165 286 3.35486e+011
+464 115 3.35329e+011
+203 201 3.35323e+011
+110 261 3.35202e+011
+117 61 3.35166e+011
+277 210 3.3512e+011
+130 237 3.34859e+011
+265 144 3.34503e+011
+248 399 3.34129e+011
+528 163 3.33926e+011
+113 94 3.33724e+011
+342 196 3.33577e+011
+52 451 3.33521e+011
+158 309 3.32959e+011
+179 262 3.32856e+011
+541 205 3.32464e+011
+242 219 3.32439e+011
+388 419 3.3241e+011
+307 104 3.32312e+011
+367 245 3.32161e+011
+76 110 3.30949e+011
+505 262 3.30681e+011
+135 322 3.30649e+011
+331 413 3.30195e+011
+8 114 3.30031e+011
+77 128 3.29442e+011
+123 110 3.29386e+011
+375 224 3.29275e+011
+224 125 3.28656e+011
+84 110 3.28627e+011
+86 374 3.28461e+011
+255 107 3.28358e+011
+547 141 3.28165e+011
+247 366 3.27956e+011
+339 392 3.27914e+011
+450 324 3.27361e+011
+81 101 3.26634e+011
+71 372 3.25943e+011
+27 118 3.25881e+011
+461 121 3.25875e+011
+360 159 3.2582e+011
+346 372 3.2575e+011
+227 72 3.25645e+011
+100 7 3.256e+011
+173 416 3.2536e+011
+219 314 3.25192e+011
+111 358 3.2507e+011
+198 195 3.24677e+011
+521 426 3.24445e+011
+317 99 3.24372e+011
+495 473 3.23727e+011
+245 180 3.23568e+011
+437 277 3.23211e+011
+40 23 3.23152e+011
+526 177 3.23102e+011
+86 377 3.23013e+011
+354 14 3.22925e+011
+122 82 3.2291e+011
+125 216 3.22814e+011
+353 24 3.22599e+011
+151 91 3.22369e+011
+523 222 3.22294e+011
+457 121 3.22211e+011
+342 47 3.22133e+011
+284 399 3.22119e+011
+494 59 3.21499e+011
+327 102 3.21432e+011
+389 88 3.20722e+011
+545 244 3.2061e+011
+182 96 3.20305e+011
+91 285 3.2015e+011
+130 128 3.20128e+011
+432 122 3.20098e+011
+523 119 3.20085e+011
+569 382 3.20038e+011
+241 134 3.19976e+011
+313 103 3.19656e+011
+164 182 3.19294e+011
+285 33 3.18929e+011
+279 387 3.1891e+011
+173 58 3.18766e+011
+383 22 3.18659e+011
+179 169 3.18427e+011
+153 192 3.17865e+011
+199 90 3.17716e+011
+173 106 3.17209e+011
+335 218 3.17018e+011
+286 215 3.17016e+011
+449 285 3.16652e+011
+512 116 3.16645e+011
+280 122 3.16479e+011
+426 103 3.16263e+011
+90 95 3.16173e+011
+515 122 3.15914e+011
+169 130 3.15815e+011
+173 343 3.15738e+011
+76 60 3.1529e+011
+284 198 3.1517e+011
+242 421 3.14975e+011
+86 339 3.14817e+011
+434 82 3.14754e+011
+461 124 3.14624e+011
+326 29 3.14575e+011
+566 180 3.14413e+011
+69 338 3.14377e+011
+540 218 3.14369e+011
+527 140 3.1412e+011
+289 118 3.14097e+011
+497 282 3.13993e+011
+450 62 3.13835e+011
+550 223 3.13744e+011
+248 346 3.13651e+011
+451 124 3.13562e+011
+240 194 3.13212e+011
+115 277 3.12904e+011
+329 216 3.12752e+011
+285 346 3.12279e+011
+126 126 3.11938e+011
+383 102 3.11425e+011
+249 207 3.11332e+011
+501 363 3.10991e+011
+531 120 3.10896e+011
+247 256 3.10733e+011
+356 283 3.09816e+011
+478 125 3.09457e+011
+310 265 3.09158e+011
+382 147 3.09039e+011
+150 233 3.09018e+011
+192 186 3.09006e+011
+12 421 3.08615e+011
+280 223 3.08384e+011
+515 380 3.08283e+011
+390 335 3.08191e+011
+509 300 3.07641e+011
+352 425 3.07497e+011
+248 182 3.06864e+011
+181 20 3.06863e+011
+9 234 3.06836e+011
+319 187 3.06817e+011
+539 241 3.06627e+011
+593 101 3.06485e+011
+530 96 3.06147e+011
+349 371 3.06069e+011
+541 380 3.06006e+011
+178 330 3.05615e+011
+170 167 3.05297e+011
+391 205 3.0475e+011
+94 19 3.04569e+011
+188 301 3.04339e+011
+132 78 3.04278e+011
+282 386 3.04054e+011
+566 18 3.03878e+011
+87 311 3.03339e+011
+38 82 3.03189e+011
+501 266 3.03165e+011
+394 104 3.03083e+011
+68 419 3.03004e+011
+160 61 3.02457e+011
+261 226 3.02361e+011
+110 323 3.02098e+011
+575 81 3.02026e+011
+263 284 3.01735e+011
+335 370 3.01654e+011
+188 265 3.01602e+011
+391 354 3.01585e+011
+528 30 3.01558e+011
+11 75 3.01452e+011
+110 243 3.01236e+011
+3 234 3.01093e+011
+162 33 3.00902e+011
+471 212 3.00747e+011
+336 144 3.00618e+011
+189 326 3.00446e+011
+104 258 3.00412e+011
+284 132 3.00258e+011
+137 59 2.99935e+011
+260 457 2.99692e+011
+124 341 2.99621e+011
+418 448 2.99565e+011
+570 451 2.98785e+011
+275 68 2.98361e+011
+376 158 2.98303e+011
+323 133 2.98246e+011
+85 38 2.98244e+011
+576 134 2.97829e+011
+72 409 2.97605e+011
+303 141 2.97579e+011
+296 269 2.97388e+011
+481 171 2.9731e+011
+381 321 2.97237e+011
+163 62 2.96989e+011
+454 116 2.96773e+011
+24 49 2.96439e+011
+430 62 2.96349e+011
+215 162 2.96092e+011
+237 196 2.95765e+011
+110 145 2.95564e+011
+151 135 2.95096e+011
+529 397 2.95032e+011
+272 208 2.94897e+011
+132 394 2.9486e+011
+247 362 2.94755e+011
+285 343 2.94342e+011
+548 220 2.9389e+011
+139 142 2.93886e+011
+390 135 2.93401e+011
+146 139 2.93316e+011
+444 205 2.93108e+011
+479 286 2.92979e+011
+420 90 2.92747e+011
+412 472 2.92605e+011
+576 166 2.92428e+011
+214 400 2.92064e+011
+275 204 2.91258e+011
+184 376 2.91152e+011
+127 110 2.91034e+011
+569 422 2.90545e+011
+250 402 2.90407e+011
+44 339 2.8994e+011
+439 25 2.89678e+011
+106 180 2.89649e+011
+42 119 2.89306e+011
+85 239 2.89195e+011
+375 146 2.89169e+011
+143 177 2.88702e+011
+144 142 2.88594e+011
+215 289 2.87798e+011
+170 124 2.87649e+011
+391 53 2.87423e+011
+83 171 2.86947e+011
+293 146 2.8663e+011
+515 325 2.86513e+011
+181 16 2.86266e+011
+155 57 2.86124e+011
+94 8 2.86122e+011
+243 281 2.86063e+011
+334 427 2.86027e+011
+391 96 2.85915e+011
+516 163 2.8514e+011
+105 432 2.84795e+011
+49 61 2.84772e+011
+119 55 2.84183e+011
+406 161 2.83957e+011
+306 146 2.83882e+011
+362 318 2.83834e+011
+103 57 2.83669e+011
+329 213 2.82995e+011
+191 122 2.82919e+011
+68 316 2.82583e+011
+190 127 2.82535e+011
+547 439 2.82529e+011
+497 43 2.82239e+011
+116 222 2.82151e+011
+231 71 2.82067e+011
+400 27 2.8181e+011
+484 2 2.81806e+011
+100 445 2.81432e+011
+130 306 2.81406e+011
+419 412 2.812e+011
+299 256 2.81148e+011
+201 345 2.81118e+011
+254 191 2.8094e+011
+322 187 2.80934e+011
+26 44 2.80701e+011
+158 305 2.80628e+011
+311 221 2.80506e+011
+168 58 2.80501e+011
+149 22 2.80462e+011
+329 219 2.79971e+011
+225 87 2.79968e+011
+183 116 2.79903e+011
+454 438 2.79872e+011
+259 35 2.79748e+011
+104 307 2.79559e+011
+198 198 2.79312e+011
+163 135 2.79222e+011
+160 121 2.79167e+011
+450 416 2.79047e+011
+199 327 2.79003e+011
+235 219 2.78977e+011
+453 120 2.78724e+011
+139 147 2.7847e+011
+209 125 2.78198e+011
+247 418 2.78099e+011
+133 91 2.78039e+011
+352 125 2.77805e+011
+421 298 2.77707e+011
+420 361 2.77305e+011
+122 160 2.7729e+011
+281 36 2.77146e+011
+366 94 2.76939e+011
+147 136 2.7658e+011
+195 199 2.75975e+011
+131 146 2.75843e+011
+32 45 2.75786e+011
+500 104 2.75746e+011
+245 187 2.75675e+011
+170 451 2.75383e+011
+217 433 2.75252e+011
+45 408 2.75061e+011
+485 238 2.7468e+011
+494 340 2.74592e+011
+586 17 2.74214e+011
+218 420 2.73703e+011
+6 151 2.73667e+011
+413 144 2.73601e+011
+402 220 2.73361e+011
+57 303 2.73184e+011
+368 30 2.73162e+011
+459 101 2.7252e+011
+262 383 2.72516e+011
+518 141 2.72084e+011
+342 312 2.72036e+011
+55 172 2.72031e+011
+408 105 2.71839e+011
+529 137 2.7168e+011
+247 35 2.71522e+011
+219 204 2.71485e+011
+409 64 2.71377e+011
+478 143 2.71085e+011
+456 358 2.70913e+011
+186 290 2.70882e+011
+142 429 2.7077e+011
+181 1 2.7053e+011
+4 165 2.70365e+011
+95 285 2.70106e+011
+335 29 2.69849e+011
+575 459 2.69831e+011
+290 308 2.69808e+011
+86 364 2.69646e+011
+200 391 2.69253e+011
+94 367 2.69233e+011
+228 92 2.69212e+011
+560 268 2.68675e+011
+17 434 2.68384e+011
+177 344 2.68337e+011
+572 421 2.68231e+011
+293 273 2.681e+011
+579 245 2.67911e+011
+139 136 2.67886e+011
+427 183 2.67883e+011
+155 318 2.67867e+011
+355 255 2.67744e+011
+162 327 2.67742e+011
+452 360 2.67609e+011
+69 335 2.67593e+011
+362 452 2.67544e+011
+561 150 2.67477e+011
+329 320 2.67277e+011
+581 56 2.66904e+011
+503 62 2.66517e+011
+540 21 2.66329e+011
+516 1 2.66246e+011
+492 161 2.65992e+011
+436 25 2.65667e+011
+428 335 2.65554e+011
+382 47 2.65416e+011
+531 115 2.65334e+011
+186 304 2.65319e+011
+55 333 2.65224e+011
+441 454 2.65199e+011
+150 229 2.65163e+011
+94 124 2.65102e+011
+437 280 2.64996e+011
+58 105 2.64877e+011
+215 97 2.64681e+011
+580 346 2.64599e+011
+413 284 2.64481e+011
+362 443 2.64443e+011
+311 299 2.64237e+011
+438 469 2.6413e+011
+185 95 2.64035e+011
+445 143 2.63915e+011
+435 62 2.63386e+011
+231 364 2.63137e+011
+122 86 2.63129e+011
+223 240 2.62949e+011
+345 139 2.62797e+011
+329 99 2.6251e+011
+567 202 2.62127e+011
+88 207 2.62034e+011
+114 261 2.62017e+011
+542 443 2.61814e+011
+71 49 2.61716e+011
+97 38 2.61592e+011
+57 371 2.61259e+011
+88 232 2.61126e+011
+481 175 2.61012e+011
+158 101 2.60891e+011
+415 265 2.60808e+011
+432 237 2.60706e+011
+552 378 2.60698e+011
+409 67 2.60668e+011
+155 295 2.60192e+011
+12 434 2.59796e+011
+117 290 2.59565e+011
+545 86 2.59242e+011
+67 151 2.59051e+011
+338 13 2.58711e+011
+540 187 2.58688e+011
+136 141 2.58563e+011
+434 108 2.58522e+011
+25 255 2.58416e+011
+401 126 2.58364e+011
+284 219 2.58252e+011
+101 29 2.58181e+011
+68 306 2.57724e+011
+78 135 2.57549e+011
+426 106 2.57495e+011
+365 165 2.57376e+011
+409 14 2.57363e+011
+85 234 2.5736e+011
+277 426 2.56944e+011
+342 331 2.56912e+011
+266 200 2.56173e+011
+407 108 2.55687e+011
+163 432 2.55588e+011
+346 322 2.5547e+011
+42 122 2.55188e+011
+587 161 2.54245e+011
+389 2 2.54075e+011
+208 403 2.54038e+011
+351 128 2.53973e+011
+286 184 2.53763e+011
+245 184 2.53744e+011
+222 104 2.53441e+011
+484 325 2.53277e+011
+158 152 2.52849e+011
+423 103 2.52217e+011
+161 38 2.52007e+011
+213 424 2.51946e+011
+433 44 2.51885e+011
+587 347 2.51647e+011
+571 327 2.51478e+011
+345 331 2.51193e+011
+111 338 2.51098e+011
+462 141 2.50871e+011
+214 450 2.50566e+011
+142 99 2.5051e+011
+475 451 2.50467e+011
+419 95 2.50279e+011
+44 253 2.50004e+011
+484 5 2.49901e+011
+510 349 2.49701e+011
+338 63 2.49587e+011
+539 246 2.49575e+011
+232 155 2.49336e+011
+204 125 2.49161e+011
+54 303 2.49045e+011
+106 184 2.48625e+011
+330 334 2.48513e+011
+389 450 2.48435e+011
+205 403 2.48146e+011
+142 117 2.48105e+011
+540 254 2.48095e+011
+497 242 2.48087e+011
+168 416 2.47847e+011
+17 237 2.47691e+011
+375 299 2.47545e+011
+208 308 2.47045e+011
+50 254 2.47003e+011
+357 63 2.46935e+011
+447 180 2.46899e+011
+509 380 2.46873e+011
+342 92 2.46786e+011
+509 365 2.46331e+011
+109 257 2.46259e+011
+571 459 2.46217e+011
+574 445 2.46081e+011
+381 413 2.46047e+011
+181 155 2.45448e+011
+90 372 2.45371e+011
+529 34 2.4494e+011
+484 121 2.44925e+011
+6 234 2.44914e+011
+114 205 2.44686e+011
+388 174 2.44514e+011
+331 282 2.44471e+011
+424 100 2.44279e+011
+95 5 2.44242e+011
+286 246 2.43993e+011
+64 183 2.43951e+011
+192 292 2.43904e+011
+396 182 2.43344e+011
+519 242 2.43005e+011
+445 247 2.42314e+011
+282 215 2.42095e+011
+84 73 2.41699e+011
+265 309 2.41675e+011
+149 303 2.416e+011
+424 332 2.41201e+011
+209 415 2.41157e+011
+361 48 2.41096e+011
+243 215 2.41033e+011
+537 183 2.40996e+011
+283 84 2.40807e+011
+276 223 2.40639e+011
+579 309 2.40525e+011
+375 154 2.40233e+011
+189 255 2.39975e+011
+302 404 2.3984e+011
+264 259 2.39597e+011
+360 361 2.39533e+011
+555 202 2.39369e+011
+463 224 2.39116e+011
+180 270 2.38898e+011
+459 356 2.3888e+011
+130 409 2.38769e+011
+413 183 2.38702e+011
+191 420 2.38701e+011
+63 152 2.38434e+011
+265 312 2.38133e+011
+130 374 2.38061e+011
+535 39 2.37786e+011
+507 42 2.37782e+011
+4 33 2.37745e+011
+99 164 2.37742e+011
+526 79 2.37691e+011
+279 164 2.37673e+011
+245 104 2.37538e+011
+72 164 2.37226e+011
+387 102 2.37039e+011
+335 415 2.36946e+011
+492 117 2.36756e+011
+479 401 2.36514e+011
+303 294 2.36062e+011
+239 215 2.35951e+011
+389 66 2.35638e+011
+118 6 2.35398e+011
+490 458 2.35125e+011
+50 375 2.35057e+011
+194 238 2.35028e+011
+343 142 2.34859e+011
+166 380 2.34338e+011
+336 49 2.34168e+011
+268 119 2.34128e+011
+121 149 2.34012e+011
+256 157 2.34011e+011
+358 449 2.33908e+011
+404 278 2.33891e+011
+213 203 2.3363e+011
+274 121 2.33295e+011
+101 97 2.33244e+011
+127 307 2.33229e+011
+114 349 2.33213e+011
+305 149 2.33024e+011
+429 43 2.33003e+011
+374 451 2.32897e+011
+38 113 2.32833e+011
+502 122 2.32754e+011
+145 145 2.32616e+011
+33 164 2.32587e+011
+152 23 2.32539e+011
+446 416 2.32453e+011
+256 459 2.32384e+011
+505 382 2.32261e+011
+183 382 2.3204e+011
+317 202 2.31949e+011
+417 415 2.31706e+011
+443 183 2.31648e+011
+106 262 2.31454e+011
+212 97 2.31445e+011
+474 7 2.31377e+011
+415 47 2.3131e+011
+531 112 2.31265e+011
+133 411 2.31195e+011
+416 412 2.31146e+011
+212 149 2.31079e+011
+587 310 2.3104e+011
+296 199 2.3091e+011
+356 265 2.30909e+011
+195 255 2.3086e+011
+417 245 2.30809e+011
+539 223 2.30516e+011
+94 371 2.30372e+011
+470 433 2.3015e+011
+67 202 2.30099e+011
+41 286 2.30003e+011
+499 340 2.2998e+011
+248 326 2.29708e+011
+583 39 2.29575e+011
+46 204 2.29451e+011
+54 236 2.2937e+011
+194 123 2.29314e+011
+355 426 2.29258e+011
+205 345 2.28986e+011
+393 183 2.28962e+011
+548 281 2.28936e+011
+287 211 2.2891e+011
+250 246 2.28821e+011
+483 241 2.28788e+011
+592 105 2.28775e+011
+231 91 2.28747e+011
+64 312 2.2873e+011
+155 445 2.28327e+011
+468 101 2.28249e+011
+571 203 2.28078e+011
+520 164 2.28049e+011
+489 469 2.27943e+011
+403 427 2.27765e+011
+178 201 2.27401e+011
+202 404 2.27126e+011
+363 3 2.27062e+011
+298 401 2.2694e+011
+232 288 2.2692e+011
+155 78 2.26744e+011
+86 355 2.26609e+011
+75 199 2.26379e+011
+386 4 2.26159e+011
+400 130 2.26057e+011
+197 343 2.25939e+011
+413 244 2.25923e+011
+217 423 2.25781e+011
+70 61 2.25404e+011
+217 400 2.25325e+011
+196 189 2.25244e+011
+137 124 2.25034e+011
+571 446 2.24858e+011
+435 228 2.24519e+011
+64 424 2.24493e+011
+433 280 2.24171e+011
+532 345 2.24083e+011
+27 169 2.23824e+011
+69 258 2.23808e+011
+539 444 2.23688e+011
+181 259 2.23573e+011
+518 83 2.23509e+011
+260 369 2.23507e+011
+179 183 2.23423e+011
+503 104 2.23402e+011
+186 161 2.23281e+011
+235 222 2.23221e+011
+466 422 2.22814e+011
+448 132 2.22798e+011
+140 24 2.22779e+011
+319 96 2.22711e+011
+200 8 2.22467e+011
+307 218 2.22437e+011
+362 215 2.22228e+011
+402 44 2.22181e+011
+510 113 2.21671e+011
+158 163 2.21355e+011
+577 326 2.21137e+011
+419 315 2.20553e+011
+262 271 2.20334e+011
+485 235 2.20297e+011
+36 76 2.20215e+011
+414 219 2.20192e+011
+138 120 2.20036e+011
+478 375 2.19988e+011
+600 365 2.19805e+011
+493 469 2.1937e+011
+313 128 2.19284e+011
+185 119 2.19172e+011
+471 82 2.19147e+011
+337 92 2.18843e+011
+269 103 2.18718e+011
+349 107 2.18338e+011
+114 143 2.18244e+011
+276 78 2.1823e+011
+71 389 2.18116e+011
+201 108 2.18109e+011
+196 466 2.18059e+011
+288 31 2.18011e+011
+53 375 2.17892e+011
+568 323 2.17698e+011
+524 141 2.17428e+011
+83 217 2.17158e+011
+160 106 2.17039e+011
+232 270 2.17026e+011
+143 235 2.16867e+011
+568 379 2.16786e+011
+309 130 2.16661e+011
+213 326 2.16589e+011
+432 226 2.16449e+011
+328 51 2.1639e+011
+304 332 2.16352e+011
+257 103 2.16005e+011
+205 397 2.1578e+011
+402 98 2.15642e+011
+107 323 2.15612e+011
+340 219 2.15542e+011
+450 196 2.1551e+011
+177 141 2.15206e+011
+126 330 2.15096e+011
+154 161 2.14921e+011
+199 96 2.14843e+011
+46 118 2.14568e+011
+349 121 2.14544e+011
+290 140 2.14327e+011
+206 184 2.14268e+011
+477 220 2.14094e+011
+405 9 2.14066e+011
+486 159 2.13944e+011
+157 313 2.13798e+011
+483 221 2.13719e+011
+268 192 2.13589e+011
+567 270 2.1353e+011
+200 5 2.13515e+011
+335 280 2.1348e+011
+142 253 2.13389e+011
+263 90 2.13199e+011
+397 92 2.13134e+011
+287 167 2.13107e+011
+135 168 2.12895e+011
+124 412 2.12849e+011
+499 138 2.1277e+011
+582 203 2.12207e+011
+309 34 2.12148e+011
+558 62 2.12079e+011
+186 71 2.11794e+011
+343 307 2.11626e+011
+15 213 2.11572e+011
+80 406 2.11567e+011
+542 179 2.11416e+011
+433 25 2.1129e+011
+284 223 2.11158e+011
+333 180 2.11111e+011
+210 326 2.10864e+011
+432 1 2.10837e+011
+262 397 2.10568e+011
+131 188 2.10198e+011
+509 377 2.10181e+011
+580 327 2.10152e+011
+318 461 2.09877e+011
+281 78 2.09798e+011
+389 290 2.09782e+011
+196 212 2.09709e+011
+479 404 2.0968e+011
+62 285 2.09538e+011
+578 214 2.09392e+011
+133 477 2.09285e+011
+502 156 2.0913e+011
+292 200 2.08996e+011
+194 241 2.08823e+011
+341 297 2.08767e+011
+209 317 2.08672e+011
+268 137 2.08469e+011
+523 163 2.08456e+011
+511 323 2.08379e+011
+451 181 2.08331e+011
+563 79 2.07709e+011
+277 33 2.07681e+011
+46 92 2.07251e+011
+169 105 2.06964e+011
+279 236 2.06895e+011
+469 108 2.06805e+011
+97 456 2.06645e+011
+75 408 2.06597e+011
+302 291 2.06427e+011
+417 251 2.06135e+011
+220 286 2.05873e+011
+405 41 2.05696e+011
+205 235 2.05687e+011
+380 451 2.05591e+011
+196 146 2.05305e+011
+436 93 2.05289e+011
+286 350 2.05057e+011
+349 392 2.05044e+011
+95 282 2.04827e+011
+224 93 2.04766e+011
+582 141 2.04714e+011
+255 406 2.04515e+011
+183 304 2.04079e+011
+383 449 2.03844e+011
+223 157 2.03801e+011
+59 335 2.0376e+011
+215 314 2.03402e+011
+132 390 2.03196e+011
+291 51 2.0316e+011
+135 429 2.02916e+011
+311 259 2.0287e+011
+41 339 2.02737e+011
+400 277 2.02505e+011
+165 38 2.02466e+011
+272 255 2.02358e+011
+552 19 2.02278e+011
+565 176 2.02265e+011
+27 190 2.02255e+011
+464 106 2.0217e+011
+448 258 2.02165e+011
+400 427 2.01764e+011
+403 27 2.01739e+011
+244 33 2.01689e+011
+146 326 2.01476e+011
+511 442 2.01378e+011
+487 204 2.01059e+011
+363 88 2.00957e+011
+257 133 2.00751e+011
+157 24 2.00744e+011
+283 332 2.00728e+011
+223 386 2.00622e+011
+342 31 2.00586e+011
+105 161 2.0028e+011
+501 421 2.00089e+011
+437 140 1.99975e+011
+140 237 1.99891e+011
+41 204 1.99802e+011
+33 79 1.9977e+011
+416 223 1.99749e+011
+58 171 1.99708e+011
+210 140 1.99608e+011
+484 173 1.99513e+011
+214 404 1.99337e+011
+432 270 1.99322e+011
+476 398 1.99242e+011
+218 350 1.99185e+011
+51 39 1.99141e+011
+547 301 1.98992e+011
+462 187 1.98874e+011
+375 151 1.98827e+011
+181 340 1.98789e+011
+395 130 1.9859e+011
+461 304 1.98253e+011
+400 93 1.97766e+011
+352 159 1.97692e+011
+310 79 1.97491e+011
+495 165 1.97408e+011
+552 218 1.97372e+011
+358 181 1.97341e+011
+521 95 1.97247e+011
+312 262 1.97169e+011
+522 361 1.97071e+011
+158 258 1.96957e+011
+64 363 1.96854e+011
+92 282 1.96778e+011
+146 235 1.96641e+011
+447 323 1.96625e+011
+141 150 1.96317e+011
+135 165 1.96135e+011
+116 253 1.96109e+011
+42 59 1.95775e+011
+121 170 1.95747e+011
+247 434 1.95555e+011
+27 271 1.95356e+011
+349 138 1.95299e+011
+538 178 1.95228e+011
+481 102 1.95188e+011
+336 367 1.95005e+011
+406 96 1.94952e+011
+302 408 1.94876e+011
+178 237 1.94391e+011
+25 221 1.94246e+011
+68 389 1.94061e+011
+73 154 1.94058e+011
+49 227 1.94049e+011
+334 465 1.93989e+011
+280 208 1.93786e+011
+182 57 1.93784e+011
+282 143 1.93673e+011
+155 99 1.93547e+011
+345 34 1.93203e+011
+243 430 1.93158e+011
+464 210 1.93153e+011
+214 169 1.93137e+011
+288 199 1.93048e+011
+214 396 1.92914e+011
+278 86 1.92421e+011
+238 95 1.92253e+011
+440 82 1.92223e+011
+88 21 1.92102e+011
+349 296 1.91796e+011
+57 234 1.91586e+011
+29 231 1.91532e+011
+439 108 1.91499e+011
+534 82 1.91448e+011
+232 113 1.91444e+011
+574 100 1.91277e+011
+230 332 1.91235e+011
+130 475 1.91006e+011
+400 280 1.90531e+011
+556 366 1.9012e+011
+454 417 1.89943e+011
+407 6 1.89933e+011
+498 59 1.89856e+011
+206 14 1.89813e+011
+401 15 1.89808e+011
+97 366 1.89443e+011
+475 455 1.89411e+011
+281 89 1.89406e+011
+438 402 1.89204e+011
+564 200 1.891e+011
+384 114 1.89014e+011
+308 164 1.8898e+011
+546 90 1.88881e+011
+184 394 1.88768e+011
+9 475 1.88354e+011
+224 202 1.88327e+011
+157 177 1.88243e+011
+500 356 1.88161e+011
+55 330 1.88115e+011
+513 106 1.87974e+011
+18 275 1.8782e+011
+126 237 1.87675e+011
+489 54 1.87531e+011
+66 367 1.87499e+011
+242 244 1.87486e+011
+83 355 1.87368e+011
+138 56 1.8707e+011
+385 118 1.86938e+011
+124 149 1.86756e+011
+148 145 1.86684e+011
+442 87 1.86672e+011
+437 44 1.86522e+011
+343 315 1.86495e+011
+430 25 1.86323e+011
+429 90 1.863e+011
+255 403 1.86144e+011
+531 173 1.86114e+011
+545 281 1.86093e+011
+315 234 1.8599e+011
+497 265 1.85764e+011
+196 29 1.85747e+011
+370 468 1.85669e+011
+371 138 1.85594e+011
+421 416 1.85308e+011
+469 356 1.85279e+011
+120 341 1.85193e+011
+510 110 1.85134e+011
+157 39 1.84763e+011
+281 293 1.84629e+011
+574 97 1.84568e+011
+35 45 1.84567e+011
+219 174 1.84565e+011
+45 250 1.84551e+011
+565 464 1.84346e+011
+230 50 1.84338e+011
+182 287 1.84183e+011
+210 395 1.84115e+011
+132 120 1.84104e+011
+41 314 1.84e+011
+14 46 1.83862e+011
+196 143 1.83766e+011
+305 152 1.83646e+011
+429 46 1.8363e+011
+578 203 1.83427e+011
+47 167 1.83312e+011
+485 224 1.83124e+011
+202 88 1.82825e+011
+129 121 1.82393e+011
+511 288 1.82341e+011
+82 115 1.8216e+011
+251 321 1.81877e+011
+463 237 1.81865e+011
+165 305 1.81811e+011
+304 109 1.81599e+011
+580 218 1.81591e+011
+367 98 1.81572e+011
+134 253 1.81421e+011
+533 42 1.81411e+011
+93 219 1.81389e+011
+472 269 1.81323e+011
+121 215 1.80989e+011
+330 329 1.8093e+011
+264 126 1.80873e+011
+72 413 1.8083e+011
+498 473 1.8074e+011
+7 162 1.80521e+011
+118 2 1.80521e+011
+63 258 1.80428e+011
+557 265 1.80376e+011
+553 276 1.80023e+011
+595 33 1.79852e+011
+178 333 1.79825e+011
+49 231 1.79478e+011
+475 143 1.79473e+011
+39 117 1.79453e+011
+328 96 1.79439e+011
+14 236 1.79392e+011
+239 243 1.79154e+011
+428 472 1.79138e+011
+373 414 1.79027e+011
+360 251 1.79012e+011
+393 11 1.78949e+011
+91 39 1.78735e+011
+78 99 1.78637e+011
+455 177 1.78631e+011
+68 375 1.78364e+011
+527 432 1.78156e+011
+66 154 1.78062e+011
+94 388 1.77953e+011
+37 470 1.77856e+011
+97 29 1.77791e+011
+139 253 1.77757e+011
+247 428 1.77716e+011
+343 303 1.77518e+011
+215 352 1.77156e+011
+247 407 1.76925e+011
+606 122 1.76879e+011
+159 278 1.76752e+011
+383 64 1.76648e+011
+323 138 1.76432e+011
+264 109 1.7627e+011
+469 318 1.7626e+011
+191 114 1.76247e+011
+351 274 1.7617e+011
+69 154 1.76049e+011
+466 213 1.75984e+011
+579 141 1.75686e+011
+325 257 1.75445e+011
+444 322 1.75271e+011
+265 192 1.75176e+011
+152 36 1.74821e+011
+446 186 1.74682e+011
+193 85 1.74427e+011
+509 283 1.74335e+011
+145 120 1.74323e+011
+234 333 1.74127e+011
+88 397 1.73945e+011
+95 357 1.73798e+011
+248 392 1.73692e+011
+555 303 1.73497e+011
+112 306 1.73435e+011
+86 389 1.73322e+011
+206 38 1.7321e+011
+67 361 1.73116e+011
+260 453 1.72451e+011
+446 437 1.72245e+011
+484 155 1.72167e+011
+328 323 1.71917e+011
+182 412 1.71772e+011
+469 416 1.71766e+011
+197 419 1.71736e+011
+153 241 1.71736e+011
+221 326 1.71599e+011
+349 141 1.71481e+011
+301 66 1.71409e+011
+291 149 1.7118e+011
+266 399 1.71106e+011
+167 187 1.70999e+011
+173 145 1.70952e+011
+344 187 1.70916e+011
+558 303 1.70901e+011
+546 284 1.70879e+011
+296 256 1.70815e+011
+80 235 1.70777e+011
+117 90 1.70742e+011
+299 406 1.7062e+011
+32 335 1.70597e+011
+269 413 1.70474e+011
+359 135 1.70455e+011
+357 178 1.70444e+011
+373 101 1.70375e+011
+193 89 1.70061e+011
+581 177 1.70031e+011
+463 229 1.69977e+011
+258 231 1.69976e+011
+236 417 1.69947e+011
+489 161 1.69932e+011
+189 270 1.69906e+011
+75 146 1.69813e+011
+17 246 1.69653e+011
+214 429 1.69473e+011
+398 133 1.69448e+011
+300 445 1.69224e+011
+528 120 1.69124e+011
+107 304 1.69052e+011
+107 337 1.69022e+011
+74 335 1.69019e+011
+79 217 1.68819e+011
+206 75 1.68453e+011
+400 375 1.68e+011
+188 57 1.67946e+011
+486 117 1.67936e+011
+562 239 1.67904e+011
+556 276 1.67831e+011
+86 245 1.6763e+011
+233 406 1.67551e+011
+334 431 1.67541e+011
+541 370 1.67527e+011
+346 327 1.675e+011
+93 406 1.67379e+011
+600 274 1.67377e+011
+516 303 1.6733e+011
+315 124 1.67239e+011
+506 157 1.67218e+011
+353 220 1.66968e+011
+535 178 1.66698e+011
+282 268 1.66458e+011
+62 446 1.66435e+011
+396 95 1.66283e+011
+22 217 1.66248e+011
+56 352 1.65929e+011
+238 33 1.65916e+011
+422 292 1.65723e+011
+117 303 1.65608e+011
+68 205 1.65305e+011
+375 95 1.65285e+011
+295 411 1.65275e+011
+61 437 1.65266e+011
+341 239 1.65249e+011
+305 66 1.65201e+011
+223 399 1.6517e+011
+519 360 1.65114e+011
+123 175 1.64842e+011
+146 343 1.64757e+011
+536 173 1.6475e+011
+39 291 1.64698e+011
+117 258 1.64653e+011
+191 241 1.64651e+011
+243 357 1.64526e+011
+86 360 1.64508e+011
+391 408 1.64343e+011
+513 403 1.64319e+011
+228 157 1.64232e+011
+126 326 1.64201e+011
+273 198 1.64001e+011
+146 97 1.63814e+011
+142 257 1.63809e+011
+99 292 1.63685e+011
+484 329 1.6368e+011
+524 241 1.63491e+011
+364 98 1.63484e+011
+497 419 1.63471e+011
+191 430 1.63393e+011
+25 217 1.63273e+011
+491 358 1.63037e+011
+471 216 1.62911e+011
+67 309 1.62859e+011
+370 463 1.62811e+011
+80 238 1.62764e+011
+409 334 1.62707e+011
+210 94 1.62351e+011
+64 165 1.62311e+011
+231 274 1.62123e+011
+557 306 1.61714e+011
+277 254 1.61697e+011
+72 199 1.61637e+011
+501 241 1.61582e+011
+51 335 1.6149e+011
+308 429 1.61365e+011
+475 267 1.61278e+011
+425 25 1.61152e+011
+417 302 1.61062e+011
+306 258 1.60649e+011
+566 358 1.60631e+011
+550 139 1.60554e+011
+192 210 1.60391e+011
+232 133 1.60353e+011
+71 377 1.60175e+011
+26 187 1.60008e+011
+35 389 1.59961e+011
+94 391 1.59885e+011
+564 266 1.59779e+011
+36 255 1.59757e+011
+98 263 1.59743e+011
+286 307 1.59738e+011
+507 113 1.59731e+011
+247 279 1.59721e+011
+181 160 1.59647e+011
+62 441 1.59548e+011
+424 172 1.59536e+011
+152 56 1.59459e+011
+528 437 1.59399e+011
+378 95 1.5932e+011
+412 105 1.59288e+011
+507 255 1.59261e+011
+184 270 1.59232e+011
+340 142 1.5921e+011
+311 136 1.59197e+011
+418 376 1.5906e+011
+454 198 1.58973e+011
+422 286 1.58937e+011
+217 396 1.58902e+011
+161 101 1.58814e+011
+290 423 1.58633e+011
+152 318 1.58537e+011
+260 316 1.58514e+011
+202 366 1.58443e+011
+349 88 1.58436e+011
+370 351 1.58382e+011
+546 342 1.58183e+011
+35 335 1.5817e+011
+574 363 1.58156e+011
+513 400 1.57665e+011
+375 235 1.57651e+011
+79 150 1.57576e+011
+507 403 1.57449e+011
+525 281 1.5705e+011
+112 310 1.56811e+011
+433 294 1.56716e+011
+157 240 1.56707e+011
+273 413 1.56705e+011
+55 137 1.56705e+011
+510 246 1.56601e+011
+341 139 1.56524e+011
+246 176 1.56493e+011
+552 265 1.56377e+011
+313 142 1.56358e+011
+229 282 1.56348e+011
+292 114 1.56124e+011
+34 13 1.5607e+011
+337 242 1.56039e+011
+152 449 1.56031e+011
+61 453 1.55962e+011
+306 94 1.55899e+011
+313 464 1.55547e+011
+473 102 1.55436e+011
+423 106 1.55305e+011
+120 90 1.54942e+011
+489 51 1.54726e+011
+24 272 1.54693e+011
+317 403 1.54627e+011
+67 312 1.54496e+011
+520 99 1.54441e+011
+352 365 1.54302e+011
+468 224 1.54247e+011
+307 108 1.5419e+011
+285 145 1.54033e+011
+589 102 1.53965e+011
+482 271 1.5375e+011
+170 219 1.53495e+011
+196 431 1.53346e+011
+293 141 1.53288e+011
+176 326 1.53212e+011
+187 384 1.53115e+011
+294 92 1.53098e+011
+157 194 1.52977e+011
+127 407 1.52919e+011
+335 435 1.52908e+011
+161 258 1.52848e+011
+149 313 1.52774e+011
+238 294 1.52363e+011
+11 163 1.52306e+011
+196 26 1.52278e+011
+39 275 1.52212e+011
+182 102 1.52191e+011
+226 282 1.51961e+011
+619 183 1.51922e+011
+86 242 1.51905e+011
+102 337 1.51862e+011
+91 345 1.51796e+011
+508 394 1.51726e+011
+206 415 1.51716e+011
+261 321 1.51695e+011
+475 239 1.51633e+011
+455 58 1.51602e+011
+67 211 1.51533e+011
+576 130 1.51386e+011
+475 298 1.51338e+011
+522 291 1.51302e+011
+571 237 1.50771e+011
+466 377 1.50683e+011
+181 379 1.50643e+011
+78 155 1.50456e+011
+39 253 1.50361e+011
+20 255 1.50277e+011
+201 370 1.50233e+011
+522 322 1.50188e+011
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_5_3.txt b/test_data/harriscorners/hc_msc_3.00_0.15_5_3.txt
new file mode 100644
index 0000000..7000aa1
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_5_3.txt
@@ -0,0 +1,1419 @@
+1418
+245 95 2.98677e+015
+363 401 2.95346e+015
+499 1 2.82848e+015
+449 298 2.63708e+015
+274 366 2.48547e+015
+122 44 2.14697e+015
+282 115 2.0924e+015
+507 122 2.08827e+015
+421 182 1.98758e+015
+251 13 1.89287e+015
+387 178 1.88994e+015
+553 40 1.86006e+015
+426 320 1.79558e+015
+446 396 1.68018e+015
+213 72 1.67913e+015
+240 90 1.66558e+015
+344 10 1.6497e+015
+65 343 1.5712e+015
+131 36 1.56612e+015
+144 309 1.54037e+015
+435 68 1.46886e+015
+480 298 1.46864e+015
+200 16 1.45036e+015
+456 281 1.42175e+015
+223 38 1.4029e+015
+348 179 1.33634e+015
+34 137 1.31714e+015
+256 386 1.29963e+015
+321 313 1.29722e+015
+183 401 1.29677e+015
+135 215 1.29e+015
+303 183 1.28845e+015
+45 27 1.25028e+015
+125 199 1.23078e+015
+299 53 1.23077e+015
+59 219 1.22992e+015
+412 256 1.21004e+015
+125 255 1.20506e+015
+448 262 1.19894e+015
+246 143 1.19774e+015
+28 8 1.18439e+015
+64 234 1.17161e+015
+110 238 1.16259e+015
+312 149 1.15598e+015
+465 394 1.15394e+015
+390 58 1.13224e+015
+261 297 1.10977e+015
+385 221 1.09017e+015
+308 372 1.08611e+015
+124 362 1.08176e+015
+102 4 1.05702e+015
+224 419 1.05474e+015
+418 440 1.04116e+015
+184 35 1.03772e+015
+239 349 1.03002e+015
+449 219 1.02949e+015
+382 8 1.02203e+015
+392 144 1.01834e+015
+271 166 1.01105e+015
+510 173 1.01086e+015
+329 127 1.00966e+015
+355 220 9.99554e+014
+37 62 9.91071e+014
+221 16 9.90682e+014
+387 10 9.8661e+014
+59 185 9.8322e+014
+262 165 9.82478e+014
+130 2 9.77001e+014
+66 320 9.70812e+014
+137 208 9.67308e+014
+411 355 9.66312e+014
+432 146 9.61176e+014
+417 7 9.5779e+014
+239 18 9.43356e+014
+177 107 9.31974e+014
+243 72 9.2274e+014
+282 403 9.15323e+014
+360 336 9.12485e+014
+192 331 9.10641e+014
+300 265 9.00171e+014
+404 120 8.9862e+014
+462 279 8.83525e+014
+158 143 8.67029e+014
+514 76 8.56354e+014
+545 168 8.56139e+014
+425 377 8.52581e+014
+92 198 8.44485e+014
+264 298 8.37092e+014
+77 257 8.29217e+014
+101 58 8.26447e+014
+263 441 8.19425e+014
+71 148 8.1911e+014
+294 15 8.11008e+014
+35 146 8.09336e+014
+512 168 8.06277e+014
+545 217 8.049e+014
+113 213 8.0471e+014
+543 364 8.04369e+014
+542 18 8.0299e+014
+177 260 8.00515e+014
+271 71 7.90522e+014
+277 352 7.84372e+014
+209 223 7.80318e+014
+253 138 7.74947e+014
+140 184 7.71869e+014
+355 320 7.64998e+014
+291 16 7.58361e+014
+372 163 7.57751e+014
+126 76 7.57558e+014
+455 83 7.56051e+014
+41 297 7.55281e+014
+550 379 7.39932e+014
+176 93 7.3759e+014
+498 82 7.37463e+014
+132 26 7.3726e+014
+229 292 7.36899e+014
+111 393 7.3385e+014
+236 163 7.30714e+014
+483 339 7.29307e+014
+203 310 7.27816e+014
+513 340 7.26349e+014
+225 221 7.24263e+014
+542 210 7.16842e+014
+114 344 7.11431e+014
+164 242 7.07056e+014
+526 223 7.06896e+014
+482 365 7.04297e+014
+563 478 7.01085e+014
+479 19 7.00196e+014
+46 219 6.96858e+014
+434 398 6.93924e+014
+522 263 6.93909e+014
+421 334 6.89832e+014
+359 294 6.89776e+014
+359 260 6.89285e+014
+525 345 6.82711e+014
+105 62 6.8149e+014
+365 200 6.81312e+014
+72 24 6.77686e+014
+58 74 6.77663e+014
+304 216 6.77292e+014
+296 420 6.72335e+014
+510 455 6.70867e+014
+474 262 6.68519e+014
+342 337 6.68276e+014
+317 385 6.67559e+014
+12 101 6.6265e+014
+110 96 6.59552e+014
+484 59 6.5865e+014
+138 110 6.5559e+014
+387 295 6.55261e+014
+326 426 6.53224e+014
+406 375 6.52652e+014
+173 312 6.52592e+014
+453 340 6.52104e+014
+281 51 6.48941e+014
+544 171 6.47255e+014
+395 260 6.45429e+014
+100 221 6.43995e+014
+478 12 6.41181e+014
+280 112 6.41064e+014
+151 307 6.37267e+014
+224 183 6.3501e+014
+301 164 6.34268e+014
+249 363 6.31291e+014
+361 131 6.29618e+014
+173 94 6.27141e+014
+87 78 6.24912e+014
+352 147 6.22906e+014
+97 447 6.21691e+014
+270 278 6.21544e+014
+451 376 6.19031e+014
+449 403 6.16102e+014
+48 100 6.13825e+014
+91 292 6.11823e+014
+72 97 6.1155e+014
+162 213 6.09198e+014
+356 267 6.09176e+014
+264 201 6.08449e+014
+272 130 6.07205e+014
+285 297 6.06993e+014
+528 98 6.05675e+014
+345 109 6.05353e+014
+181 111 6.03976e+014
+221 180 5.99324e+014
+338 391 5.97616e+014
+139 173 5.9523e+014
+522 122 5.9511e+014
+135 202 5.94896e+014
+236 92 5.92489e+014
+324 341 5.91428e+014
+233 162 5.90822e+014
+46 147 5.90571e+014
+400 261 5.89184e+014
+345 241 5.88995e+014
+5 66 5.86816e+014
+283 71 5.86418e+014
+379 69 5.85552e+014
+230 266 5.85354e+014
+232 200 5.80922e+014
+512 98 5.79507e+014
+470 239 5.7904e+014
+22 60 5.77914e+014
+503 361 5.76896e+014
+338 473 5.76503e+014
+212 182 5.74983e+014
+84 78 5.72108e+014
+387 243 5.71906e+014
+191 359 5.71853e+014
+140 204 5.70204e+014
+167 286 5.6958e+014
+244 165 5.66567e+014
+408 352 5.63968e+014
+74 6 5.63963e+014
+36 175 5.63243e+014
+236 20 5.6271e+014
+339 164 5.62587e+014
+348 241 5.61737e+014
+530 184 5.55189e+014
+539 40 5.52719e+014
+299 70 5.51551e+014
+64 371 5.49326e+014
+514 223 5.48835e+014
+422 44 5.44537e+014
+97 79 5.44233e+014
+526 101 5.43108e+014
+170 18 5.42835e+014
+100 78 5.42397e+014
+32 218 5.42295e+014
+382 411 5.41588e+014
+449 178 5.40841e+014
+246 294 5.40159e+014
+484 179 5.40153e+014
+524 20 5.37929e+014
+2 46 5.37761e+014
+248 404 5.37085e+014
+562 148 5.36617e+014
+511 128 5.36562e+014
+44 81 5.31332e+014
+18 342 5.28234e+014
+270 62 5.26702e+014
+327 342 5.26647e+014
+242 203 5.26491e+014
+78 196 5.23381e+014
+508 18 5.23292e+014
+55 31 5.22784e+014
+560 229 5.21928e+014
+512 125 5.20024e+014
+478 16 5.19549e+014
+472 63 5.1635e+014
+208 54 5.13498e+014
+277 370 5.1264e+014
+343 7 5.11854e+014
+430 1 5.10335e+014
+577 15 5.07958e+014
+275 181 5.04005e+014
+333 89 5.02864e+014
+481 179 5.02383e+014
+123 272 5.01717e+014
+329 9 5.01102e+014
+273 297 5.00673e+014
+137 98 4.98287e+014
+325 88 4.97777e+014
+114 3 4.9736e+014
+48 97 4.96853e+014
+513 220 4.96492e+014
+328 66 4.96241e+014
+57 364 4.9243e+014
+183 19 4.9182e+014
+243 189 4.91742e+014
+136 128 4.91585e+014
+432 83 4.90741e+014
+365 251 4.88777e+014
+198 130 4.87388e+014
+423 178 4.85473e+014
+169 57 4.85231e+014
+545 57 4.82781e+014
+371 82 4.81556e+014
+421 6 4.80958e+014
+82 28 4.80883e+014
+264 445 4.80865e+014
+342 464 4.79924e+014
+507 164 4.79639e+014
+163 207 4.78438e+014
+146 160 4.78169e+014
+391 47 4.78044e+014
+389 139 4.77979e+014
+441 98 4.77747e+014
+388 221 4.77087e+014
+242 100 4.77062e+014
+306 192 4.7693e+014
+538 95 4.76158e+014
+54 6 4.75792e+014
+358 10 4.75526e+014
+158 1 4.73447e+014
+344 197 4.7273e+014
+274 281 4.72133e+014
+416 23 4.71949e+014
+62 60 4.70677e+014
+144 187 4.69558e+014
+575 126 4.69281e+014
+452 205 4.69133e+014
+422 398 4.69109e+014
+276 221 4.63912e+014
+111 241 4.63879e+014
+187 100 4.61868e+014
+131 148 4.61179e+014
+567 43 4.61075e+014
+448 138 4.60244e+014
+370 107 4.59878e+014
+302 205 4.58323e+014
+259 71 4.57786e+014
+88 148 4.56143e+014
+542 130 4.54879e+014
+401 184 4.54324e+014
+294 26 4.54285e+014
+196 82 4.53132e+014
+512 295 4.53023e+014
+36 268 4.50911e+014
+342 123 4.50455e+014
+292 311 4.50062e+014
+366 7 4.49027e+014
+226 180 4.49013e+014
+286 166 4.48958e+014
+82 135 4.48941e+014
+358 168 4.48264e+014
+220 100 4.47588e+014
+380 25 4.47416e+014
+75 235 4.47049e+014
+216 279 4.45367e+014
+445 453 4.45286e+014
+403 6 4.44956e+014
+174 57 4.44338e+014
+357 335 4.43959e+014
+306 440 4.42981e+014
+561 320 4.42195e+014
+378 353 4.41615e+014
+208 451 4.41454e+014
+35 200 4.41257e+014
+217 126 4.40551e+014
+528 104 4.39037e+014
+38 172 4.38015e+014
+367 144 4.38003e+014
+77 8 4.37971e+014
+262 391 4.35894e+014
+175 239 4.34509e+014
+347 392 4.3417e+014
+115 44 4.34152e+014
+371 392 4.3143e+014
+37 288 4.31075e+014
+313 85 4.29024e+014
+386 292 4.28108e+014
+492 140 4.27592e+014
+351 320 4.27184e+014
+254 422 4.26372e+014
+569 39 4.25749e+014
+210 154 4.25202e+014
+147 21 4.25079e+014
+540 99 4.23957e+014
+137 138 4.23463e+014
+300 177 4.22975e+014
+68 27 4.22733e+014
+167 325 4.21387e+014
+47 10 4.20512e+014
+6 9 4.20309e+014
+29 236 4.19369e+014
+482 327 4.18708e+014
+49 159 4.1814e+014
+239 202 4.18074e+014
+533 183 4.17907e+014
+334 435 4.17718e+014
+169 198 4.17637e+014
+374 241 4.17599e+014
+55 28 4.1726e+014
+172 449 4.17173e+014
+529 24 4.17137e+014
+108 324 4.1565e+014
+115 77 4.15197e+014
+223 113 4.14784e+014
+259 221 4.14294e+014
+229 184 4.14166e+014
+367 247 4.13737e+014
+181 394 4.12385e+014
+66 213 4.1234e+014
+6 45 4.12161e+014
+44 10 4.10712e+014
+206 159 4.08511e+014
+81 3 4.08256e+014
+236 221 4.07578e+014
+481 82 4.0695e+014
+53 43 4.06064e+014
+572 142 4.05858e+014
+360 217 4.0473e+014
+537 458 4.04522e+014
+241 59 4.03423e+014
+37 296 4.02812e+014
+353 127 4.02575e+014
+506 203 4.02217e+014
+480 403 4.00442e+014
+37 138 3.98938e+014
+576 178 3.98574e+014
+474 23 3.97958e+014
+307 448 3.9676e+014
+48 26 3.96446e+014
+520 183 3.96395e+014
+320 224 3.95174e+014
+365 259 3.94712e+014
+49 152 3.94592e+014
+510 102 3.94485e+014
+38 219 3.93824e+014
+192 219 3.93577e+014
+211 33 3.92271e+014
+253 74 3.9218e+014
+544 4 3.91254e+014
+207 436 3.90741e+014
+312 7 3.90734e+014
+546 365 3.89697e+014
+509 361 3.89668e+014
+364 255 3.89249e+014
+396 161 3.88221e+014
+124 261 3.86911e+014
+289 212 3.85853e+014
+214 59 3.85463e+014
+130 239 3.84409e+014
+39 143 3.84386e+014
+274 76 3.83379e+014
+141 394 3.82827e+014
+391 61 3.82797e+014
+351 323 3.827e+014
+406 142 3.82213e+014
+507 60 3.80919e+014
+68 149 3.8065e+014
+282 221 3.80464e+014
+378 339 3.79712e+014
+216 176 3.79561e+014
+103 392 3.79126e+014
+310 33 3.78328e+014
+412 24 3.77741e+014
+110 265 3.77639e+014
+105 4 3.77218e+014
+195 16 3.76547e+014
+413 21 3.75355e+014
+458 265 3.75005e+014
+278 145 3.74195e+014
+597 272 3.73915e+014
+358 143 3.73081e+014
+259 236 3.72932e+014
+328 142 3.72582e+014
+190 146 3.72517e+014
+161 144 3.72284e+014
+357 125 3.72094e+014
+241 68 3.72011e+014
+248 218 3.71895e+014
+104 359 3.70135e+014
+572 328 3.69959e+014
+112 134 3.69318e+014
+510 165 3.69137e+014
+438 68 3.69135e+014
+268 288 3.6872e+014
+274 216 3.68104e+014
+463 198 3.67879e+014
+267 297 3.6786e+014
+270 66 3.6707e+014
+528 188 3.65504e+014
+398 357 3.65362e+014
+384 162 3.65344e+014
+444 23 3.65065e+014
+398 169 3.64829e+014
+42 24 3.64553e+014
+42 62 3.64481e+014
+42 339 3.64388e+014
+32 100 3.64297e+014
+159 112 3.62717e+014
+412 64 3.61792e+014
+141 2 3.61118e+014
+230 35 3.60729e+014
+85 475 3.59961e+014
+541 13 3.5993e+014
+366 2 3.59747e+014
+497 229 3.59626e+014
+598 364 3.59021e+014
+164 359 3.58269e+014
+266 14 3.58145e+014
+248 93 3.57973e+014
+162 216 3.57917e+014
+508 5 3.57494e+014
+487 182 3.56056e+014
+160 183 3.55809e+014
+281 132 3.55581e+014
+492 182 3.55145e+014
+528 362 3.53883e+014
+113 356 3.53412e+014
+65 252 3.53268e+014
+57 5 3.52653e+014
+477 182 3.51826e+014
+275 318 3.51009e+014
+297 296 3.50646e+014
+498 160 3.50587e+014
+266 53 3.50297e+014
+121 52 3.49534e+014
+135 238 3.49294e+014
+514 382 3.48957e+014
+183 133 3.48886e+014
+535 243 3.48415e+014
+151 114 3.47909e+014
+325 165 3.46585e+014
+368 337 3.4499e+014
+196 57 3.44359e+014
+568 383 3.43365e+014
+270 241 3.43056e+014
+313 222 3.42865e+014
+571 448 3.39689e+014
+419 167 3.39163e+014
+117 96 3.38595e+014
+537 186 3.3856e+014
+292 29 3.38498e+014
+287 33 3.38362e+014
+298 332 3.37169e+014
+525 381 3.36517e+014
+327 320 3.36389e+014
+5 63 3.36179e+014
+497 79 3.36148e+014
+3 382 3.35989e+014
+265 31 3.35824e+014
+127 186 3.35582e+014
+516 348 3.3547e+014
+154 114 3.35146e+014
+540 165 3.34871e+014
+525 60 3.34728e+014
+502 143 3.34429e+014
+129 309 3.33888e+014
+374 394 3.32185e+014
+287 344 3.31982e+014
+285 212 3.31372e+014
+413 299 3.31199e+014
+168 242 3.31085e+014
+524 172 3.31005e+014
+467 125 3.3097e+014
+317 148 3.30481e+014
+456 284 3.30352e+014
+535 121 3.30225e+014
+317 107 3.29798e+014
+163 168 3.2963e+014
+274 206 3.28898e+014
+363 182 3.28682e+014
+290 264 3.28043e+014
+217 54 3.2797e+014
+408 67 3.27958e+014
+479 451 3.2793e+014
+560 60 3.26826e+014
+282 351 3.26541e+014
+96 125 3.26326e+014
+306 362 3.26062e+014
+544 91 3.2594e+014
+546 182 3.25601e+014
+213 123 3.25446e+014
+361 396 3.25073e+014
+289 137 3.24351e+014
+560 81 3.24106e+014
+64 276 3.24062e+014
+111 40 3.2386e+014
+187 34 3.23664e+014
+246 106 3.23182e+014
+220 210 3.22864e+014
+262 217 3.22763e+014
+219 291 3.22347e+014
+412 4 3.21931e+014
+257 35 3.21767e+014
+82 74 3.21319e+014
+45 131 3.20976e+014
+391 52 3.20785e+014
+362 360 3.20784e+014
+184 137 3.20533e+014
+63 218 3.20343e+014
+521 60 3.19479e+014
+86 214 3.18645e+014
+100 162 3.18637e+014
+408 63 3.1839e+014
+377 7 3.18296e+014
+179 274 3.18295e+014
+425 262 3.18291e+014
+494 456 3.18257e+014
+269 105 3.18197e+014
+559 271 3.16455e+014
+540 140 3.16277e+014
+357 282 3.16039e+014
+85 197 3.14744e+014
+371 90 3.14205e+014
+84 59 3.14103e+014
+437 303 3.13614e+014
+45 407 3.13596e+014
+293 334 3.13421e+014
+48 256 3.12827e+014
+572 161 3.12733e+014
+558 19 3.12289e+014
+505 381 3.11931e+014
+274 369 3.11888e+014
+85 256 3.11585e+014
+115 392 3.11506e+014
+93 254 3.11236e+014
+132 255 3.11075e+014
+513 402 3.10346e+014
+344 263 3.10291e+014
+420 81 3.1022e+014
+584 38 3.09983e+014
+96 452 3.09791e+014
+74 186 3.09345e+014
+331 107 3.08614e+014
+474 202 3.08187e+014
+391 324 3.07954e+014
+110 46 3.07744e+014
+181 380 3.07614e+014
+422 48 3.07609e+014
+208 421 3.07596e+014
+105 40 3.07196e+014
+220 150 3.07128e+014
+432 268 3.06947e+014
+396 104 3.06154e+014
+161 256 3.06083e+014
+516 202 3.06018e+014
+54 289 3.05816e+014
+177 18 3.05692e+014
+196 192 3.05618e+014
+55 65 3.0557e+014
+179 103 3.05274e+014
+297 410 3.05068e+014
+51 61 3.04867e+014
+140 325 3.0482e+014
+173 40 3.0427e+014
+3 155 3.03876e+014
+526 398 3.03336e+014
+418 68 3.03264e+014
+300 50 3.02724e+014
+33 172 3.02121e+014
+58 253 3.01826e+014
+279 222 3.01767e+014
+271 289 3.01767e+014
+102 236 3.01761e+014
+457 375 3.01485e+014
+471 122 3.00916e+014
+218 145 3.00245e+014
+136 21 2.99871e+014
+272 53 2.99746e+014
+83 404 2.99397e+014
+251 10 2.98994e+014
+190 276 2.98917e+014
+91 390 2.98861e+014
+412 162 2.98827e+014
+419 163 2.98564e+014
+556 182 2.98102e+014
+129 168 2.98087e+014
+433 110 2.97906e+014
+388 282 2.97753e+014
+34 298 2.97228e+014
+475 342 2.97163e+014
+59 216 2.96338e+014
+316 336 2.95096e+014
+320 119 2.94321e+014
+125 40 2.93984e+014
+569 203 2.93881e+014
+243 419 2.93744e+014
+150 38 2.93641e+014
+359 160 2.93417e+014
+490 343 2.93023e+014
+438 339 2.92587e+014
+425 334 2.92223e+014
+403 265 2.92117e+014
+65 363 2.92034e+014
+369 162 2.91481e+014
+245 206 2.91008e+014
+390 19 2.90975e+014
+541 123 2.90743e+014
+445 127 2.9074e+014
+166 20 2.89814e+014
+542 42 2.89778e+014
+148 396 2.89341e+014
+532 340 2.89262e+014
+158 74 2.88662e+014
+496 462 2.88608e+014
+527 39 2.88093e+014
+377 119 2.87571e+014
+406 162 2.87563e+014
+205 202 2.87442e+014
+278 418 2.87429e+014
+495 140 2.87153e+014
+146 452 2.86935e+014
+432 319 2.86927e+014
+451 263 2.86706e+014
+109 358 2.85896e+014
+436 387 2.85815e+014
+177 96 2.85703e+014
+68 304 2.8555e+014
+487 261 2.85454e+014
+149 231 2.84979e+014
+407 81 2.84251e+014
+239 422 2.83973e+014
+512 95 2.83948e+014
+283 206 2.83898e+014
+351 271 2.83572e+014
+549 59 2.83517e+014
+55 294 2.83491e+014
+318 201 2.82441e+014
+487 4 2.82052e+014
+158 138 2.82052e+014
+378 316 2.81714e+014
+279 363 2.80951e+014
+229 347 2.80916e+014
+128 164 2.80641e+014
+564 16 2.80467e+014
+44 121 2.79725e+014
+528 142 2.79086e+014
+618 181 2.78862e+014
+248 315 2.76935e+014
+525 424 2.76928e+014
+89 376 2.76409e+014
+326 13 2.7569e+014
+280 128 2.75245e+014
+100 199 2.75053e+014
+290 49 2.74718e+014
+418 300 2.74654e+014
+177 331 2.73882e+014
+500 224 2.73845e+014
+46 90 2.73427e+014
+520 64 2.73146e+014
+451 336 2.72892e+014
+382 338 2.72245e+014
+331 333 2.72066e+014
+250 312 2.72051e+014
+235 346 2.71078e+014
+187 263 2.70971e+014
+376 84 2.70927e+014
+342 106 2.70871e+014
+537 392 2.70769e+014
+424 163 2.69967e+014
+340 13 2.69849e+014
+386 327 2.69309e+014
+412 220 2.69148e+014
+164 277 2.69018e+014
+265 260 2.68547e+014
+410 99 2.68113e+014
+364 357 2.6745e+014
+473 211 2.67381e+014
+379 107 2.67256e+014
+59 372 2.66917e+014
+117 132 2.66282e+014
+463 161 2.66252e+014
+267 132 2.66245e+014
+336 427 2.65788e+014
+88 354 2.65666e+014
+278 367 2.64653e+014
+260 142 2.64541e+014
+132 477 2.64393e+014
+417 450 2.64297e+014
+262 319 2.64202e+014
+12 80 2.64156e+014
+277 137 2.63998e+014
+190 205 2.63677e+014
+439 455 2.63495e+014
+199 110 2.62826e+014
+9 76 2.62811e+014
+186 401 2.62462e+014
+84 310 2.62447e+014
+474 246 2.62262e+014
+13 206 2.61788e+014
+117 428 2.61787e+014
+256 405 2.61223e+014
+184 200 2.60978e+014
+214 146 2.60808e+014
+408 182 2.6069e+014
+450 91 2.60451e+014
+144 327 2.60106e+014
+44 476 2.59551e+014
+117 360 2.59409e+014
+386 167 2.5913e+014
+363 9 2.58782e+014
+324 314 2.58705e+014
+523 39 2.58563e+014
+260 272 2.58188e+014
+232 14 2.58092e+014
+529 32 2.5801e+014
+182 398 2.57166e+014
+450 22 2.56769e+014
+192 171 2.56403e+014
+571 333 2.56131e+014
+94 6 2.55747e+014
+403 188 2.55404e+014
+447 244 2.55381e+014
+321 10 2.55174e+014
+317 167 2.54994e+014
+261 329 2.54062e+014
+300 246 2.53997e+014
+38 147 2.53139e+014
+404 13 2.52934e+014
+29 29 2.52816e+014
+323 260 2.52632e+014
+439 24 2.52334e+014
+392 165 2.51895e+014
+44 98 2.51714e+014
+50 452 2.51175e+014
+141 22 2.51163e+014
+166 96 2.50897e+014
+282 135 2.50492e+014
+547 40 2.49647e+014
+18 236 2.48889e+014
+451 101 2.48823e+014
+279 86 2.48784e+014
+357 240 2.4868e+014
+390 420 2.48641e+014
+219 315 2.48443e+014
+500 42 2.48327e+014
+67 47 2.47594e+014
+418 282 2.47465e+014
+137 56 2.47351e+014
+249 32 2.4725e+014
+314 75 2.47138e+014
+57 332 2.47025e+014
+447 351 2.4653e+014
+396 319 2.46192e+014
+410 44 2.45913e+014
+279 296 2.45787e+014
+83 101 2.45658e+014
+181 291 2.45511e+014
+246 14 2.45143e+014
+315 160 2.45001e+014
+38 169 2.44627e+014
+565 161 2.44476e+014
+135 134 2.4427e+014
+30 135 2.44163e+014
+391 449 2.44067e+014
+53 221 2.43795e+014
+15 219 2.43711e+014
+446 376 2.43686e+014
+222 239 2.43513e+014
+537 140 2.43388e+014
+79 273 2.43202e+014
+88 183 2.43185e+014
+186 109 2.42676e+014
+87 208 2.42632e+014
+211 21 2.4253e+014
+469 140 2.41823e+014
+62 133 2.41638e+014
+271 414 2.41618e+014
+175 115 2.41383e+014
+393 317 2.41211e+014
+259 201 2.40979e+014
+153 222 2.40872e+014
+446 265 2.40626e+014
+78 81 2.39962e+014
+187 182 2.39831e+014
+140 98 2.39472e+014
+421 89 2.39424e+014
+246 327 2.39369e+014
+303 180 2.39206e+014
+206 417 2.3916e+014
+538 121 2.38892e+014
+33 140 2.38338e+014
+59 289 2.38278e+014
+166 113 2.37975e+014
+311 298 2.37971e+014
+583 345 2.37858e+014
+302 102 2.37783e+014
+259 370 2.37742e+014
+415 164 2.36811e+014
+133 427 2.36537e+014
+70 130 2.35817e+014
+157 95 2.3492e+014
+254 182 2.34252e+014
+516 120 2.33652e+014
+447 145 2.3359e+014
+157 318 2.33402e+014
+487 205 2.32834e+014
+247 347 2.32592e+014
+149 399 2.3169e+014
+508 81 2.31689e+014
+104 430 2.31505e+014
+498 67 2.31349e+014
+513 121 2.30897e+014
+177 180 2.30844e+014
+69 418 2.30355e+014
+88 261 2.30209e+014
+282 392 2.3016e+014
+281 418 2.30084e+014
+465 355 2.29602e+014
+201 313 2.29351e+014
+565 61 2.29229e+014
+288 397 2.28778e+014
+96 148 2.28341e+014
+412 245 2.28261e+014
+308 8 2.28177e+014
+80 474 2.27988e+014
+261 35 2.27672e+014
+394 158 2.2763e+014
+511 43 2.27144e+014
+272 133 2.2696e+014
+537 103 2.26134e+014
+198 75 2.25931e+014
+531 103 2.25456e+014
+451 82 2.25244e+014
+500 318 2.25e+014
+386 127 2.23979e+014
+221 84 2.23736e+014
+92 20 2.23327e+014
+512 262 2.23268e+014
+511 205 2.23103e+014
+386 63 2.22702e+014
+439 149 2.22411e+014
+271 184 2.22302e+014
+213 62 2.22252e+014
+209 36 2.22139e+014
+203 293 2.22091e+014
+32 112 2.21908e+014
+239 195 2.2189e+014
+517 16 2.21744e+014
+528 160 2.21105e+014
+9 476 2.21028e+014
+288 87 2.20288e+014
+496 119 2.20032e+014
+115 306 2.20001e+014
+579 78 2.19681e+014
+365 105 2.19554e+014
+202 347 2.19541e+014
+333 412 2.19522e+014
+234 261 2.19472e+014
+445 7 2.19158e+014
+512 109 2.19033e+014
+226 130 2.18901e+014
+473 355 2.18203e+014
+515 184 2.18063e+014
+166 117 2.17719e+014
+277 140 2.17297e+014
+358 64 2.17297e+014
+39 241 2.17289e+014
+416 86 2.17175e+014
+244 402 2.17153e+014
+164 381 2.17136e+014
+303 193 2.16848e+014
+347 296 2.16722e+014
+122 446 2.16655e+014
+299 399 2.16388e+014
+159 89 2.16387e+014
+193 111 2.16247e+014
+555 264 2.16172e+014
+180 329 2.16111e+014
+495 476 2.15849e+014
+296 165 2.15174e+014
+91 79 2.1508e+014
+345 352 2.15004e+014
+80 40 2.14924e+014
+383 147 2.14882e+014
+94 219 2.14873e+014
+184 94 2.14851e+014
+212 438 2.14812e+014
+322 29 2.14388e+014
+110 168 2.14208e+014
+366 299 2.13926e+014
+558 245 2.13884e+014
+88 370 2.13826e+014
+100 95 2.13797e+014
+553 383 2.1322e+014
+241 97 2.13163e+014
+144 432 2.13029e+014
+375 341 2.12758e+014
+266 139 2.12633e+014
+475 339 2.12546e+014
+434 339 2.12293e+014
+218 182 2.12213e+014
+310 259 2.12122e+014
+411 183 2.12042e+014
+415 83 2.12023e+014
+325 92 2.11979e+014
+527 421 2.11848e+014
+188 214 2.11813e+014
+522 141 2.1168e+014
+313 88 2.11572e+014
+58 28 2.11436e+014
+275 289 2.11256e+014
+436 91 2.1114e+014
+289 167 2.10913e+014
+361 369 2.10821e+014
+251 163 2.10683e+014
+210 395 2.10425e+014
+517 142 2.0994e+014
+211 136 2.09912e+014
+430 116 2.09882e+014
+108 183 2.0977e+014
+456 418 2.09668e+014
+220 107 2.09601e+014
+228 288 2.0866e+014
+547 162 2.08431e+014
+48 458 2.08016e+014
+127 218 2.07912e+014
+310 91 2.07849e+014
+536 80 2.07775e+014
+534 92 2.07761e+014
+269 169 2.07543e+014
+461 220 2.07513e+014
+200 293 2.07077e+014
+58 103 2.07068e+014
+361 315 2.07019e+014
+293 120 2.06787e+014
+165 378 2.06781e+014
+297 182 2.0678e+014
+465 281 2.06758e+014
+327 182 2.0629e+014
+550 223 2.05911e+014
+433 25 2.05884e+014
+462 396 2.05871e+014
+400 319 2.05647e+014
+339 427 2.05525e+014
+153 57 2.05471e+014
+230 38 2.0536e+014
+356 107 2.0514e+014
+510 142 2.05065e+014
+202 7 2.0498e+014
+301 86 2.04969e+014
+76 270 2.04025e+014
+175 2 2.0393e+014
+35 99 2.03818e+014
+472 42 2.03806e+014
+508 84 2.03575e+014
+592 107 2.02667e+014
+512 83 2.01938e+014
+285 263 2.01532e+014
+472 421 2.01488e+014
+150 151 2.01453e+014
+565 463 2.01411e+014
+71 409 2.01016e+014
+497 283 2.00952e+014
+395 23 2.0084e+014
+570 324 2.00778e+014
+247 318 2.00751e+014
+332 295 2.00653e+014
+309 356 2.00146e+014
+452 161 2.00129e+014
+550 183 2.00031e+014
+436 87 1.99831e+014
+479 293 1.99789e+014
+95 374 1.99624e+014
+258 88 1.99528e+014
+31 96 1.99525e+014
+545 43 1.99356e+014
+409 23 1.99184e+014
+153 216 1.97926e+014
+191 57 1.97866e+014
+484 361 1.97272e+014
+527 80 1.96994e+014
+224 73 1.96956e+014
+109 428 1.96847e+014
+485 236 1.96803e+014
+67 338 1.96787e+014
+482 331 1.96468e+014
+441 321 1.9641e+014
+133 64 1.96378e+014
+384 243 1.96175e+014
+11 83 1.95983e+014
+33 268 1.95621e+014
+180 56 1.94866e+014
+419 362 1.94717e+014
+108 136 1.94457e+014
+119 425 1.94224e+014
+188 104 1.9383e+014
+352 162 1.93791e+014
+209 203 1.93741e+014
+281 386 1.93727e+014
+221 339 1.93473e+014
+89 151 1.9345e+014
+24 65 1.93315e+014
+235 295 1.93278e+014
+532 397 1.93221e+014
+113 96 1.93184e+014
+135 74 1.93167e+014
+378 63 1.93159e+014
+70 478 1.93053e+014
+102 42 1.9272e+014
+530 366 1.92715e+014
+527 395 1.9266e+014
+169 359 1.92551e+014
+49 147 1.92526e+014
+58 31 1.92508e+014
+298 274 1.92507e+014
+187 326 1.92328e+014
+215 426 1.92275e+014
+107 58 1.9227e+014
+303 50 1.92072e+014
+321 168 1.91878e+014
+172 37 1.91834e+014
+329 255 1.91705e+014
+186 291 1.91593e+014
+273 146 1.9156e+014
+340 220 1.91545e+014
+64 448 1.91524e+014
+160 98 1.91486e+014
+75 132 1.91314e+014
+18 319 1.91296e+014
+479 241 1.90351e+014
+570 183 1.90336e+014
+153 196 1.89988e+014
+164 328 1.89282e+014
+548 45 1.89233e+014
+95 58 1.88674e+014
+199 328 1.88619e+014
+344 166 1.88607e+014
+559 224 1.88516e+014
+285 53 1.88274e+014
+463 123 1.88203e+014
+52 153 1.88178e+014
+440 63 1.88165e+014
+245 385 1.88121e+014
+113 205 1.88056e+014
+377 183 1.8793e+014
+348 299 1.87845e+014
+184 184 1.8782e+014
+52 359 1.87569e+014
+540 263 1.87265e+014
+104 76 1.87209e+014
+449 64 1.87068e+014
+337 60 1.87017e+014
+85 478 1.8701e+014
+25 200 1.86899e+014
+575 98 1.86847e+014
+576 311 1.86811e+014
+194 135 1.86726e+014
+95 477 1.86321e+014
+523 198 1.86174e+014
+56 373 1.86083e+014
+306 356 1.85979e+014
+11 114 1.85748e+014
+350 338 1.855e+014
+241 165 1.85372e+014
+99 195 1.85271e+014
+392 293 1.85219e+014
+429 224 1.85151e+014
+203 396 1.84788e+014
+503 180 1.84629e+014
+429 88 1.84475e+014
+126 251 1.83977e+014
+214 99 1.83964e+014
+589 350 1.83946e+014
+414 262 1.83764e+014
+330 202 1.83762e+014
+574 39 1.83652e+014
+118 61 1.83159e+014
+469 417 1.82688e+014
+161 134 1.81975e+014
+232 274 1.81881e+014
+94 260 1.81846e+014
+132 128 1.81789e+014
+183 157 1.81743e+014
+416 377 1.81736e+014
+486 377 1.817e+014
+51 292 1.81555e+014
+395 48 1.81325e+014
+482 164 1.81322e+014
+477 221 1.80867e+014
+84 371 1.80856e+014
+549 283 1.80792e+014
+572 121 1.80709e+014
+540 405 1.80541e+014
+492 59 1.8054e+014
+146 98 1.80163e+014
+114 176 1.79916e+014
+466 102 1.79645e+014
+181 33 1.79616e+014
+375 282 1.79233e+014
+336 183 1.79219e+014
+126 339 1.78734e+014
+525 77 1.78728e+014
+151 1 1.77927e+014
+328 108 1.77843e+014
+365 86 1.77803e+014
+160 219 1.77505e+014
+188 200 1.77153e+014
+85 180 1.77011e+014
+344 329 1.76994e+014
+172 203 1.76964e+014
+243 209 1.76869e+014
+317 125 1.76832e+014
+137 324 1.76746e+014
+201 317 1.76647e+014
+469 41 1.76606e+014
+35 66 1.76344e+014
+49 237 1.76088e+014
+168 422 1.76059e+014
+29 220 1.7572e+014
+464 139 1.75439e+014
+310 173 1.75332e+014
+524 24 1.75235e+014
+311 334 1.75196e+014
+266 117 1.75098e+014
+144 256 1.74926e+014
+189 107 1.74898e+014
+265 250 1.74892e+014
+523 186 1.7486e+014
+146 15 1.74616e+014
+384 258 1.74359e+014
+484 161 1.74345e+014
+371 87 1.74255e+014
+278 263 1.74201e+014
+319 186 1.74186e+014
+93 112 1.74021e+014
+103 98 1.74005e+014
+361 222 1.73814e+014
+95 20 1.7378e+014
+375 225 1.73671e+014
+289 349 1.73627e+014
+554 379 1.73453e+014
+233 71 1.73447e+014
+579 43 1.73077e+014
+68 96 1.72848e+014
+95 422 1.72378e+014
+191 189 1.72232e+014
+473 119 1.71851e+014
+595 19 1.7179e+014
+215 149 1.71732e+014
+93 95 1.71579e+014
+23 331 1.71553e+014
+180 94 1.71495e+014
+361 450 1.71291e+014
+96 455 1.71269e+014
+408 47 1.71219e+014
+226 14 1.71185e+014
+449 445 1.71139e+014
+161 32 1.71085e+014
+336 317 1.70993e+014
+180 106 1.70712e+014
+270 146 1.7064e+014
+16 215 1.70596e+014
+574 333 1.70203e+014
+349 278 1.69932e+014
+270 56 1.69751e+014
+449 165 1.69712e+014
+254 10 1.69608e+014
+200 98 1.69514e+014
+375 391 1.69497e+014
+392 260 1.69447e+014
+572 384 1.69326e+014
+455 404 1.69182e+014
+179 164 1.69156e+014
+331 219 1.69108e+014
+165 218 1.68996e+014
+504 260 1.68828e+014
+144 376 1.68782e+014
+265 72 1.68716e+014
+487 266 1.68306e+014
+392 222 1.68168e+014
+283 200 1.68165e+014
+319 337 1.68126e+014
+433 63 1.68063e+014
+573 139 1.67971e+014
+164 312 1.67962e+014
+313 70 1.67894e+014
+283 79 1.67758e+014
+143 179 1.67685e+014
+205 162 1.6768e+014
+202 219 1.67485e+014
+572 405 1.67413e+014
+510 366 1.67178e+014
+111 144 1.67157e+014
+388 434 1.67157e+014
+500 461 1.67058e+014
+227 258 1.66985e+014
+151 236 1.66875e+014
+590 162 1.66851e+014
+368 96 1.66645e+014
+488 43 1.66546e+014
+254 193 1.66439e+014
+124 82 1.66255e+014
+355 11 1.66138e+014
+497 224 1.66096e+014
+413 99 1.66077e+014
+503 161 1.65967e+014
+363 407 1.65838e+014
+539 220 1.65834e+014
+84 237 1.65774e+014
+198 168 1.657e+014
+4 266 1.65633e+014
+143 141 1.65388e+014
+578 123 1.65354e+014
+161 430 1.6527e+014
+114 389 1.64894e+014
+129 127 1.64527e+014
+484 153 1.64313e+014
+533 161 1.6412e+014
+533 346 1.64029e+014
+539 126 1.63867e+014
+250 192 1.63661e+014
+381 180 1.63608e+014
+107 74 1.63507e+014
+119 122 1.63398e+014
+572 451 1.63274e+014
+535 19 1.63194e+014
+224 295 1.63188e+014
+480 171 1.63119e+014
+142 239 1.6311e+014
+129 190 1.63077e+014
+198 148 1.62975e+014
+202 392 1.62935e+014
+38 308 1.62844e+014
+522 425 1.62754e+014
+92 59 1.6262e+014
+335 445 1.62535e+014
+424 337 1.62522e+014
+3 166 1.62292e+014
+223 214 1.62178e+014
+450 117 1.62147e+014
+148 131 1.62107e+014
+235 33 1.62094e+014
+168 308 1.62086e+014
+286 209 1.6203e+014
+544 442 1.61922e+014
+400 104 1.61891e+014
+62 204 1.61585e+014
+2 286 1.61536e+014
+309 183 1.61513e+014
+135 467 1.61467e+014
+266 403 1.61457e+014
+112 262 1.61343e+014
+421 314 1.61326e+014
+377 461 1.61213e+014
+172 166 1.61188e+014
+466 40 1.61186e+014
+342 296 1.60961e+014
+344 340 1.6093e+014
+248 262 1.60921e+014
+132 303 1.60855e+014
+177 200 1.60805e+014
+158 237 1.60636e+014
+56 358 1.60625e+014
+501 103 1.605e+014
+101 258 1.60436e+014
+127 328 1.59977e+014
+260 231 1.59936e+014
+76 476 1.59843e+014
+493 102 1.59766e+014
+48 156 1.59675e+014
+409 473 1.59461e+014
+247 258 1.593e+014
+439 241 1.5923e+014
+281 35 1.59163e+014
+277 329 1.58985e+014
+163 73 1.58643e+014
+211 95 1.58526e+014
+178 367 1.58442e+014
+201 74 1.58296e+014
+117 184 1.58226e+014
+553 203 1.58184e+014
+359 53 1.58055e+014
+562 144 1.57853e+014
+303 157 1.57771e+014
+55 172 1.57438e+014
+290 182 1.57431e+014
+481 182 1.57304e+014
+177 380 1.57275e+014
+562 434 1.5714e+014
+171 112 1.56937e+014
+300 183 1.56899e+014
+577 51 1.56746e+014
+454 116 1.56316e+014
+392 353 1.56277e+014
+290 248 1.56162e+014
+512 288 1.55992e+014
+39 355 1.5591e+014
+317 224 1.55822e+014
+296 138 1.55726e+014
+471 268 1.55494e+014
+357 341 1.55041e+014
+390 296 1.55038e+014
+279 427 1.55022e+014
+293 269 1.54916e+014
+261 455 1.54828e+014
+463 23 1.54605e+014
+451 196 1.54306e+014
+334 143 1.543e+014
+411 418 1.54097e+014
+251 184 1.54041e+014
+467 23 1.53686e+014
+106 98 1.53524e+014
+576 164 1.53474e+014
+245 101 1.53462e+014
+318 460 1.53439e+014
+261 287 1.53353e+014
+175 417 1.53231e+014
+22 220 1.52922e+014
+106 37 1.52861e+014
+432 122 1.52692e+014
+181 138 1.52645e+014
+393 217 1.5255e+014
+274 197 1.52469e+014
+122 216 1.52389e+014
+70 390 1.52237e+014
+502 2 1.51926e+014
+3 435 1.51919e+014
+209 173 1.5186e+014
+71 261 1.51806e+014
+109 101 1.51689e+014
+42 305 1.51587e+014
+29 12 1.51563e+014
+222 430 1.51561e+014
+111 325 1.51558e+014
+475 269 1.51444e+014
+277 165 1.5142e+014
+401 169 1.51414e+014
+414 145 1.51017e+014
+249 85 1.50938e+014
+246 37 1.50771e+014
+25 6 1.50438e+014
+433 278 1.50263e+014
+103 293 1.50253e+014
+155 446 1.49986e+014
+238 190 1.49938e+014
+148 2 1.49805e+014
+329 212 1.49791e+014
+397 95 1.49749e+014
+257 132 1.49598e+014
+512 117 1.49594e+014
+208 57 1.49566e+014
+333 281 1.49502e+014
+103 105 1.49357e+014
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_5_5.txt b/test_data/harriscorners/hc_msc_3.00_0.15_5_5.txt
new file mode 100644
index 0000000..7f7587b
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_5_5.txt
@@ -0,0 +1,1408 @@
+1407
+273 366 1.41455e+016
+246 94 1.25357e+016
+237 20 1.207e+016
+77 257 1.08258e+016
+261 297 1.0637e+016
+122 43 1.04572e+016
+543 365 1.03719e+016
+362 401 1.0133e+016
+423 178 1.00259e+016
+427 320 9.7695e+015
+281 113 9.47644e+015
+465 393 9.28011e+015
+448 297 9.27192e+015
+199 18 9.20115e+015
+65 343 8.92524e+015
+447 397 8.66244e+015
+507 122 8.65586e+015
+344 9 8.58562e+015
+131 36 8.41797e+015
+300 52 8.28395e+015
+27 9 8.25503e+015
+552 40 8.23189e+015
+30 8 8.22015e+015
+37 62 8.02744e+015
+420 181 7.89487e+015
+387 178 7.64888e+015
+59 218 7.52096e+015
+510 124 7.50884e+015
+360 295 7.48827e+015
+81 4 7.45358e+015
+33 138 7.33314e+015
+82 29 7.28623e+015
+131 26 7.22382e+015
+320 225 7.19594e+015
+294 15 7.12376e+015
+239 91 7.10473e+015
+257 385 7.06823e+015
+134 214 6.9861e+015
+36 145 6.97259e+015
+303 182 6.96362e+015
+125 364 6.83648e+015
+456 280 6.7672e+015
+33 99 6.74504e+015
+388 10 6.73787e+015
+484 338 6.71487e+015
+195 58 6.60689e+015
+214 73 6.60414e+015
+435 67 6.54987e+015
+84 78 6.44761e+015
+124 254 6.37078e+015
+128 1 6.34468e+015
+390 58 6.31354e+015
+242 71 6.31088e+015
+251 12 6.22896e+015
+225 420 6.1763e+015
+544 168 6.17368e+015
+263 441 6.16764e+015
+512 341 6.13029e+015
+343 338 6.1205e+015
+448 262 6.09661e+015
+529 24 5.95264e+015
+452 339 5.88751e+015
+124 198 5.8845e+015
+101 222 5.85967e+015
+127 165 5.84557e+015
+412 256 5.82457e+015
+222 39 5.7729e+015
+404 121 5.44631e+015
+55 29 5.42311e+015
+131 1 5.41236e+015
+253 139 5.35422e+015
+78 2 5.35214e+015
+138 110 5.30734e+015
+153 223 5.27407e+015
+329 128 5.25429e+015
+510 173 5.24113e+015
+144 310 5.22575e+015
+418 440 5.22493e+015
+183 400 5.19184e+015
+64 236 5.16844e+015
+426 119 5.14027e+015
+301 165 5.08471e+015
+483 179 5.07424e+015
+360 335 5.03891e+015
+543 15 5.01004e+015
+92 198 5.00393e+015
+177 106 4.97756e+015
+484 59 4.93854e+015
+57 5 4.93309e+015
+48 26 4.91029e+015
+123 185 4.90845e+015
+511 167 4.86046e+015
+261 222 4.85048e+015
+359 260 4.71142e+015
+243 202 4.69399e+015
+545 58 4.63852e+015
+142 324 4.59492e+015
+311 150 4.56742e+015
+225 182 4.56466e+015
+245 143 4.56201e+015
+509 455 4.52485e+015
+252 423 4.51475e+015
+302 215 4.50609e+015
+181 111 4.50604e+015
+533 184 4.49794e+015
+392 144 4.49572e+015
+207 450 4.48665e+015
+137 207 4.47924e+015
+371 162 4.4761e+015
+115 44 4.44304e+015
+480 179 4.38945e+015
+163 277 4.38014e+015
+545 41 4.37827e+015
+109 240 4.37048e+015
+351 321 4.3525e+015
+210 435 4.34555e+015
+308 372 4.34127e+015
+364 251 4.33602e+015
+283 72 4.33362e+015
+184 36 4.3333e+015
+151 307 4.31436e+015
+361 131 4.31417e+015
+459 279 4.30829e+015
+542 210 4.30168e+015
+138 204 4.25743e+015
+433 147 4.25194e+015
+60 183 4.24068e+015
+348 179 4.17456e+015
+235 346 4.13791e+015
+498 159 4.13178e+015
+475 261 4.1198e+015
+382 6 4.06625e+015
+40 217 4.05965e+015
+527 99 4.05439e+015
+216 279 4.0417e+015
+41 63 4.03873e+015
+113 392 4.00162e+015
+221 180 3.99882e+015
+239 202 3.97458e+015
+418 8 3.96688e+015
+207 224 3.94376e+015
+214 57 3.94342e+015
+261 165 3.94238e+015
+78 80 3.91082e+015
+71 148 3.90499e+015
+100 78 3.90227e+015
+106 39 3.87786e+015
+363 7 3.87615e+015
+244 165 3.87294e+015
+48 99 3.86844e+015
+276 352 3.86512e+015
+578 16 3.86369e+015
+86 255 3.86036e+015
+556 39 3.85386e+015
+175 94 3.81964e+015
+357 220 3.81816e+015
+36 176 3.81792e+015
+62 60 3.81355e+015
+283 403 3.80254e+015
+386 220 3.80122e+015
+528 104 3.77764e+015
+163 213 3.76824e+015
+4 65 3.74284e+015
+453 204 3.7131e+015
+313 84 3.70831e+015
+325 164 3.68528e+015
+354 321 3.67503e+015
+37 218 3.67137e+015
+522 264 3.66947e+015
+434 398 3.63598e+015
+530 185 3.63153e+015
+321 313 3.63071e+015
+449 219 3.62758e+015
+82 135 3.61882e+015
+169 56 3.61041e+015
+177 259 3.6088e+015
+300 265 3.60148e+015
+266 296 3.59964e+015
+324 341 3.58836e+015
+386 243 3.58815e+015
+511 220 3.53189e+015
+55 289 3.53043e+015
+480 299 3.52843e+015
+327 141 3.51267e+015
+10 102 3.49457e+015
+49 151 3.48481e+015
+395 261 3.4631e+015
+92 292 3.45667e+015
+211 438 3.45646e+015
+230 36 3.45067e+015
+293 26 3.45014e+015
+123 272 3.44755e+015
+390 297 3.44561e+015
+228 185 3.42879e+015
+309 7 3.40629e+015
+325 88 3.38194e+015
+541 123 3.37492e+015
+324 314 3.36918e+015
+513 76 3.34282e+015
+425 377 3.33878e+015
+174 40 3.3263e+015
+515 347 3.31927e+015
+421 335 3.3186e+015
+358 10 3.31677e+015
+470 238 3.30409e+015
+271 290 3.29742e+015
+104 4 3.29285e+015
+47 11 3.29179e+015
+54 66 3.28852e+015
+511 128 3.27845e+015
+508 19 3.27638e+015
+361 251 3.2738e+015
+223 16 3.27204e+015
+138 172 3.26173e+015
+140 394 3.25931e+015
+113 345 3.25388e+015
+211 185 3.21698e+015
+326 427 3.18638e+015
+102 360 3.18136e+015
+408 183 3.17683e+015
+234 162 3.17658e+015
+169 197 3.17292e+015
+272 281 3.17118e+015
+265 31 3.15656e+015
+167 326 3.15355e+015
+527 361 3.14767e+015
+163 74 3.13742e+015
+165 241 3.11902e+015
+88 148 3.10726e+015
+110 95 3.08418e+015
+433 111 3.08298e+015
+37 173 3.08287e+015
+95 477 3.08023e+015
+544 4 3.07975e+015
+100 198 3.06897e+015
+478 18 3.06574e+015
+212 182 3.06323e+015
+58 74 3.05961e+015
+403 265 3.0554e+015
+265 446 3.05145e+015
+332 295 3.03656e+015
+18 343 3.03652e+015
+31 270 3.02607e+015
+32 66 3.01425e+015
+523 123 3.0098e+015
+256 139 3.0076e+015
+164 358 3.00136e+015
+239 349 3.00055e+015
+346 240 2.99879e+015
+51 98 2.99797e+015
+220 290 2.99343e+015
+371 90 2.9916e+015
+220 150 2.9915e+015
+5 46 2.96069e+015
+44 98 2.95643e+015
+411 353 2.94888e+015
+542 132 2.94661e+015
+135 129 2.94657e+015
+37 296 2.94242e+015
+344 263 2.93882e+015
+313 76 2.93368e+015
+52 42 2.932e+015
+444 453 2.92655e+015
+379 7 2.92437e+015
+141 183 2.92105e+015
+367 143 2.91362e+015
+350 145 2.91072e+015
+66 214 2.91053e+015
+537 393 2.91013e+015
+508 5 2.89075e+015
+178 94 2.88047e+015
+399 262 2.85996e+015
+333 90 2.85987e+015
+413 299 2.85482e+015
+285 297 2.83687e+015
+208 55 2.82468e+015
+172 57 2.82066e+015
+117 76 2.81806e+015
+386 294 2.81514e+015
+6 10 2.81048e+015
+414 21 2.80935e+015
+280 50 2.80755e+015
+366 7 2.80591e+015
+106 61 2.80336e+015
+478 15 2.79557e+015
+357 128 2.79339e+015
+61 203 2.79184e+015
+124 40 2.78886e+015
+259 237 2.78417e+015
+61 134 2.76492e+015
+96 449 2.76014e+015
+362 395 2.75774e+015
+305 193 2.75074e+015
+31 135 2.73896e+015
+58 29 2.73112e+015
+65 319 2.73103e+015
+476 21 2.7277e+015
+298 69 2.72662e+015
+540 13 2.72153e+015
+47 147 2.71702e+015
+138 98 2.71477e+015
+158 73 2.71214e+015
+206 435 2.71177e+015
+249 423 2.70989e+015
+230 292 2.70571e+015
+355 267 2.70371e+015
+202 315 2.70225e+015
+493 139 2.70193e+015
+181 394 2.69231e+015
+248 316 2.69008e+015
+57 364 2.67446e+015
+390 48 2.67437e+015
+524 346 2.67268e+015
+68 337 2.67218e+015
+272 167 2.67138e+015
+522 62 2.65962e+015
+233 199 2.65576e+015
+221 177 2.64816e+015
+273 296 2.64743e+015
+76 8 2.63918e+015
+506 16 2.63767e+015
+260 71 2.63251e+015
+223 220 2.62973e+015
+162 216 2.62837e+015
+85 214 2.62771e+015
+512 262 2.6166e+015
+436 303 2.61117e+015
+160 143 2.59716e+015
+524 19 2.58697e+015
+531 102 2.57905e+015
+490 139 2.57458e+015
+341 122 2.57284e+015
+408 45 2.56735e+015
+191 360 2.56638e+015
+84 477 2.5609e+015
+393 48 2.54462e+015
+191 205 2.54285e+015
+21 61 2.54133e+015
+72 97 2.5377e+015
+32 218 2.53691e+015
+193 16 2.52986e+015
+338 473 2.52483e+015
+175 311 2.51716e+015
+113 213 2.51645e+015
+245 294 2.50688e+015
+471 212 2.5042e+015
+96 79 2.49852e+015
+38 138 2.49748e+015
+382 412 2.49237e+015
+268 53 2.48384e+015
+524 24 2.48036e+015
+345 350 2.46823e+015
+329 12 2.46584e+015
+480 262 2.45776e+015
+403 187 2.45663e+015
+519 62 2.45574e+015
+307 449 2.4549e+015
+525 172 2.45371e+015
+448 166 2.45354e+015
+259 35 2.44485e+015
+364 254 2.4403e+015
+374 240 2.42361e+015
+171 17 2.41414e+015
+478 12 2.41211e+015
+339 13 2.40954e+015
+191 146 2.40721e+015
+386 326 2.40688e+015
+471 421 2.40646e+015
+542 129 2.40638e+015
+512 99 2.40276e+015
+346 296 2.40201e+015
+325 294 2.39906e+015
+191 330 2.39826e+015
+168 18 2.39093e+015
+297 331 2.39002e+015
+141 2 2.38935e+015
+411 44 2.38876e+015
+377 119 2.38703e+015
+374 393 2.38544e+015
+328 297 2.37835e+015
+454 84 2.3686e+015
+283 52 2.36801e+015
+360 220 2.36744e+015
+364 181 2.35683e+015
+278 144 2.35641e+015
+336 391 2.35153e+015
+571 450 2.33661e+015
+64 371 2.33413e+015
+530 362 2.33315e+015
+538 97 2.33274e+015
+393 218 2.33189e+015
+286 165 2.32899e+015
+28 30 2.32355e+015
+159 183 2.32244e+015
+364 257 2.32219e+015
+166 97 2.32107e+015
+410 65 2.31999e+015
+406 198 2.31428e+015
+154 114 2.313e+015
+328 89 2.30838e+015
+44 9 2.30025e+015
+276 180 2.29828e+015
+90 376 2.2973e+015
+193 218 2.2961e+015
+365 106 2.29005e+015
+248 313 2.28341e+015
+453 102 2.28027e+015
+297 420 2.27714e+015
+547 161 2.27585e+015
+507 2 2.27447e+015
+416 84 2.27107e+015
+127 26 2.26936e+015
+389 140 2.26919e+015
+302 204 2.26389e+015
+120 447 2.26021e+015
+42 339 2.25746e+015
+449 445 2.25684e+015
+46 82 2.25207e+015
+359 217 2.24701e+015
+255 149 2.2385e+015
+345 108 2.23624e+015
+110 137 2.23587e+015
+133 132 2.23304e+015
+53 221 2.23301e+015
+381 26 2.23195e+015
+312 7 2.2284e+015
+159 138 2.2276e+015
+358 282 2.22602e+015
+12 218 2.22213e+015
+340 165 2.21798e+015
+502 160 2.21757e+015
+187 264 2.21474e+015
+345 276 2.21348e+015
+422 48 2.20989e+015
+451 376 2.20825e+015
+299 178 2.20815e+015
+105 42 2.20658e+015
+480 82 2.20578e+015
+561 227 2.19798e+015
+79 197 2.18617e+015
+473 23 2.18421e+015
+158 112 2.17595e+015
+42 24 2.17463e+015
+306 363 2.17175e+015
+539 458 2.17126e+015
+78 41 2.1705e+015
+146 160 2.16865e+015
+167 285 2.16745e+015
+46 355 2.16726e+015
+99 360 2.16188e+015
+113 95 2.16163e+015
+473 202 2.15831e+015
+197 131 2.15408e+015
+175 115 2.15197e+015
+30 237 2.15177e+015
+58 290 2.13333e+015
+539 405 2.1323e+015
+46 220 2.12514e+015
+125 260 2.12197e+015
+221 183 2.12172e+015
+126 77 2.11062e+015
+216 125 2.1034e+015
+238 94 2.10262e+015
+436 320 2.09903e+015
+271 131 2.09803e+015
+559 80 2.09587e+015
+306 440 2.09496e+015
+418 164 2.09308e+015
+423 398 2.09303e+015
+325 91 2.09171e+015
+156 94 2.09056e+015
+161 20 2.09028e+015
+568 43 2.07486e+015
+166 277 2.07324e+015
+480 451 2.07116e+015
+217 208 2.06712e+015
+475 246 2.06383e+015
+118 425 2.06238e+015
+470 122 2.06216e+015
+274 215 2.05784e+015
+249 365 2.05705e+015
+309 441 2.05571e+015
+524 38 2.0504e+015
+378 340 2.05015e+015
+36 201 2.04987e+015
+363 358 2.04698e+015
+324 142 2.04657e+015
+384 258 2.04593e+015
+418 283 2.04587e+015
+281 222 2.04402e+015
+378 68 2.04349e+015
+129 238 2.03979e+015
+576 179 2.03862e+015
+219 100 2.03796e+015
+69 420 2.03684e+015
+327 182 2.02998e+015
+44 62 2.02818e+015
+79 271 2.02452e+015
+511 83 2.02001e+015
+573 405 2.01567e+015
+203 309 2.01205e+015
+268 289 2.01135e+015
+573 141 2.00995e+015
+216 146 2.00685e+015
+520 183 2.00372e+015
+42 297 2.00107e+015
+407 352 1.9993e+015
+254 10 1.99742e+015
+334 436 1.99661e+015
+101 235 1.99488e+015
+437 339 1.99232e+015
+212 33 1.9914e+015
+502 143 1.98963e+015
+163 208 1.98467e+015
+272 53 1.98368e+015
+397 265 1.98126e+015
+451 373 1.97793e+015
+41 10 1.97348e+015
+272 72 1.97219e+015
+442 22 1.97182e+015
+253 75 1.97095e+015
+388 15 1.96711e+015
+279 366 1.95513e+015
+215 175 1.95199e+015
+483 364 1.94697e+015
+463 40 1.94347e+015
+364 200 1.9389e+015
+172 95 1.93689e+015
+210 21 1.93637e+015
+475 341 1.93454e+015
+498 224 1.92726e+015
+503 164 1.92445e+015
+488 262 1.92221e+015
+47 132 1.91996e+015
+511 102 1.91087e+015
+185 20 1.90824e+015
+359 167 1.90226e+015
+357 297 1.90077e+015
+110 264 1.89841e+015
+318 385 1.89508e+015
+141 21 1.89503e+015
+114 3 1.89454e+015
+281 419 1.8945e+015
+131 476 1.89372e+015
+280 132 1.88911e+015
+471 83 1.88731e+015
+458 265 1.88112e+015
+130 72 1.88106e+015
+395 105 1.88063e+015
+406 80 1.87993e+015
+112 242 1.87833e+015
+25 64 1.87157e+015
+384 162 1.86277e+015
+109 169 1.86217e+015
+169 243 1.86109e+015
+128 168 1.85188e+015
+387 127 1.84571e+015
+281 128 1.8429e+015
+163 96 1.84126e+015
+568 382 1.84083e+015
+518 202 1.83708e+015
+358 241 1.83569e+015
+161 169 1.83264e+015
+49 159 1.83071e+015
+448 137 1.8304e+015
+505 361 1.82827e+015
+451 86 1.82706e+015
+398 357 1.82607e+015
+277 137 1.82302e+015
+449 204 1.82265e+015
+294 269 1.8204e+015
+156 91 1.81891e+015
+131 255 1.81772e+015
+329 67 1.81753e+015
+441 98 1.8162e+015
+95 217 1.8161e+015
+35 134 1.81501e+015
+246 106 1.81444e+015
+92 59 1.81409e+015
+328 255 1.8139e+015
+549 59 1.81387e+015
+413 65 1.81342e+015
+489 182 1.81277e+015
+584 38 1.81169e+015
+99 446 1.80927e+015
+332 201 1.80892e+015
+134 238 1.80456e+015
+38 287 1.80433e+015
+222 114 1.80295e+015
+66 322 1.80222e+015
+354 295 1.80025e+015
+32 141 1.79774e+015
+405 376 1.79431e+015
+166 312 1.79039e+015
+471 268 1.79022e+015
+145 187 1.78547e+015
+422 162 1.78233e+015
+448 401 1.78224e+015
+367 337 1.78097e+015
+514 120 1.78059e+015
+241 166 1.78004e+015
+77 29 1.7718e+015
+372 83 1.77122e+015
+396 160 1.77047e+015
+464 23 1.76868e+015
+467 124 1.76857e+015
+464 197 1.76839e+015
+343 198 1.76725e+015
+514 382 1.76439e+015
+271 182 1.76092e+015
+144 6 1.75965e+015
+156 318 1.75949e+015
+84 148 1.75912e+015
+282 135 1.75802e+015
+60 40 1.7557e+015
+432 269 1.7553e+015
+44 474 1.74744e+015
+317 312 1.74548e+015
+242 420 1.74413e+015
+107 429 1.74329e+015
+18 236 1.74233e+015
+148 397 1.7385e+015
+250 403 1.736e+015
+394 318 1.73525e+015
+265 15 1.73365e+015
+505 381 1.73192e+015
+237 163 1.73091e+015
+392 165 1.72878e+015
+160 96 1.7264e+015
+133 75 1.72411e+015
+165 110 1.724e+015
+366 300 1.72188e+015
+525 422 1.7215e+015
+282 392 1.72097e+015
+58 373 1.7188e+015
+449 178 1.71695e+015
+39 355 1.71631e+015
+64 218 1.71505e+015
+66 252 1.71184e+015
+192 172 1.70897e+015
+512 95 1.70596e+015
+486 265 1.70064e+015
+284 199 1.69846e+015
+174 19 1.69656e+015
+165 19 1.69159e+015
+344 165 1.6909e+015
+561 320 1.68602e+015
+198 111 1.6858e+015
+246 89 1.68525e+015
+258 161 1.68385e+015
+151 114 1.68253e+015
+70 476 1.68084e+015
+367 1 1.67766e+015
+206 160 1.67654e+015
+398 168 1.6736e+015
+379 107 1.66888e+015
+102 58 1.66812e+015
+95 94 1.66533e+015
+424 337 1.66145e+015
+342 465 1.66076e+015
+3 155 1.65242e+015
+367 303 1.65218e+015
+81 76 1.64939e+015
+274 77 1.6492e+015
+544 216 1.64821e+015
+90 275 1.64773e+015
+391 221 1.64748e+015
+297 182 1.63839e+015
+507 60 1.63831e+015
+109 59 1.6374e+015
+249 220 1.63577e+015
+79 473 1.63351e+015
+95 20 1.63147e+015
+440 455 1.62985e+015
+269 61 1.62942e+015
+316 335 1.62804e+015
+289 396 1.62612e+015
+377 318 1.62604e+015
+188 181 1.62405e+015
+429 117 1.62211e+015
+404 181 1.62179e+015
+543 457 1.6216e+015
+106 98 1.61922e+015
+359 53 1.61911e+015
+447 350 1.61643e+015
+36 299 1.61005e+015
+331 258 1.60692e+015
+350 338 1.60568e+015
+93 255 1.6036e+015
+489 43 1.60242e+015
+445 8 1.60096e+015
+291 50 1.60088e+015
+434 159 1.59796e+015
+217 149 1.5918e+015
+578 43 1.58859e+015
+441 240 1.58819e+015
+150 231 1.58803e+015
+389 54 1.58716e+015
+49 235 1.58415e+015
+486 44 1.58241e+015
+382 337 1.58112e+015
+39 239 1.57937e+015
+157 40 1.57781e+015
+236 222 1.57682e+015
+174 239 1.57591e+015
+576 126 1.57542e+015
+51 61 1.57537e+015
+180 164 1.57526e+015
+48 257 1.57335e+015
+277 140 1.57255e+015
+390 449 1.56853e+015
+517 58 1.56402e+015
+12 79 1.56364e+015
+56 78 1.56174e+015
+87 372 1.56084e+015
+275 317 1.56074e+015
+70 23 1.56071e+015
+70 129 1.5598e+015
+261 393 1.55825e+015
+570 182 1.55722e+015
+532 398 1.55634e+015
+183 136 1.55547e+015
+60 254 1.55059e+015
+536 121 1.54963e+015
+298 274 1.54944e+015
+242 190 1.54939e+015
+217 97 1.54937e+015
+146 98 1.54781e+015
+483 143 1.5451e+015
+550 378 1.54468e+015
+529 365 1.54145e+015
+297 410 1.53842e+015
+491 1 1.53636e+015
+261 217 1.53367e+015
+319 186 1.5333e+015
+316 166 1.53284e+015
+269 66 1.53241e+015
+517 42 1.53056e+015
+34 31 1.52862e+015
+191 350 1.52744e+015
+270 185 1.52355e+015
+524 425 1.52328e+015
+509 163 1.52168e+015
+569 39 1.52143e+015
+107 107 1.52121e+015
+265 201 1.52049e+015
+178 274 1.51398e+015
+434 277 1.5076e+015
+528 159 1.50577e+015
+482 440 1.50376e+015
+38 168 1.50369e+015
+569 203 1.50327e+015
+318 460 1.50054e+015
+133 148 1.49971e+015
+423 165 1.49618e+015
+525 186 1.49556e+015
+483 326 1.49396e+015
+75 96 1.4935e+015
+468 139 1.4928e+015
+338 63 1.48949e+015
+508 166 1.4894e+015
+16 434 1.489e+015
+50 453 1.48743e+015
+550 223 1.48587e+015
+332 131 1.48496e+015
+500 82 1.48443e+015
+149 1 1.48381e+015
+449 63 1.48264e+015
+376 84 1.48228e+015
+196 194 1.48211e+015
+328 214 1.47998e+015
+289 349 1.47964e+015
+126 96 1.47949e+015
+402 167 1.4791e+015
+506 163 1.47826e+015
+91 259 1.4761e+015
+498 67 1.47272e+015
+165 117 1.4698e+015
+187 308 1.46944e+015
+469 204 1.46514e+015
+203 294 1.46213e+015
+565 463 1.46056e+015
+179 380 1.45908e+015
+71 408 1.45602e+015
+119 115 1.45471e+015
+534 161 1.45226e+015
+309 33 1.44932e+015
+560 272 1.4482e+015
+210 154 1.44652e+015
+539 128 1.44027e+015
+565 159 1.43984e+015
+233 261 1.43936e+015
+85 180 1.43844e+015
+406 163 1.43814e+015
+525 381 1.43796e+015
+332 415 1.43768e+015
+538 40 1.43668e+015
+359 142 1.43465e+015
+9 8 1.43421e+015
+50 155 1.43194e+015
+464 27 1.43076e+015
+358 66 1.42794e+015
+56 171 1.42741e+015
+172 450 1.4272e+015
+512 295 1.42431e+015
+202 318 1.42274e+015
+332 412 1.42131e+015
+314 222 1.42101e+015
+384 146 1.4198e+015
+572 327 1.41941e+015
+525 224 1.41857e+015
+541 41 1.41585e+015
+369 82 1.41518e+015
+76 474 1.41492e+015
+225 52 1.4121e+015
+187 101 1.41207e+015
+242 58 1.41046e+015
+375 340 1.41022e+015
+129 309 1.40976e+015
+275 329 1.40972e+015
+53 359 1.40453e+015
+325 13 1.40408e+015
+44 408 1.40339e+015
+433 381 1.40322e+015
+245 102 1.4029e+015
+486 376 1.40189e+015
+450 398 1.4011e+015
+575 99 1.40048e+015
+190 312 1.39895e+015
+485 4 1.39841e+015
+3 382 1.39722e+015
+103 259 1.39341e+015
+391 18 1.39297e+015
+561 146 1.39156e+015
+163 253 1.3913e+015
+421 80 1.3851e+015
+508 361 1.38468e+015
+501 42 1.38445e+015
+465 355 1.38361e+015
+92 444 1.38263e+015
+387 283 1.38151e+015
+246 207 1.38129e+015
+264 311 1.37753e+015
+456 161 1.37672e+015
+88 182 1.3748e+015
+395 23 1.37413e+015
+389 97 1.37259e+015
+200 330 1.36777e+015
+85 310 1.36756e+015
+255 405 1.36439e+015
+377 183 1.36347e+015
+563 17 1.36176e+015
+513 402 1.36041e+015
+578 52 1.36021e+015
+55 145 1.3578e+015
+411 4 1.35467e+015
+497 81 1.35262e+015
+275 196 1.35011e+015
+277 220 1.34837e+015
+182 379 1.34821e+015
+152 196 1.34756e+015
+82 72 1.34435e+015
+330 92 1.34154e+015
+540 141 1.3403e+015
+184 142 1.33977e+015
+405 142 1.33956e+015
+592 18 1.33906e+015
+9 75 1.33768e+015
+92 79 1.33761e+015
+302 190 1.33657e+015
+449 118 1.33469e+015
+227 130 1.33236e+015
+473 5 1.33158e+015
+210 395 1.33114e+015
+524 198 1.33063e+015
+250 400 1.3293e+015
+119 96 1.32856e+015
+274 206 1.32782e+015
+561 324 1.32735e+015
+292 310 1.3266e+015
+307 354 1.32478e+015
+552 384 1.32159e+015
+110 358 1.32151e+015
+272 316 1.3207e+015
+294 331 1.32067e+015
+291 89 1.31985e+015
+420 45 1.31749e+015
+289 137 1.31733e+015
+259 369 1.31713e+015
+472 42 1.31702e+015
+464 390 1.31687e+015
+360 369 1.31672e+015
+481 165 1.31603e+015
+599 365 1.31536e+015
+248 395 1.31171e+015
+84 60 1.31167e+015
+329 200 1.31145e+015
+300 106 1.31088e+015
+529 396 1.31039e+015
+380 120 1.30819e+015
+445 22 1.30512e+015
+106 359 1.3045e+015
+86 197 1.30379e+015
+251 152 1.30272e+015
+454 115 1.30258e+015
+323 146 1.30227e+015
+516 19 1.30074e+015
+516 183 1.30021e+015
+74 186 1.29761e+015
+559 18 1.29717e+015
+220 315 1.29577e+015
+186 109 1.29513e+015
+397 318 1.29383e+015
+569 422 1.29177e+015
+288 264 1.2909e+015
+114 178 1.29085e+015
+328 320 1.28939e+015
+545 91 1.28898e+015
+33 111 1.28784e+015
+362 361 1.28753e+015
+288 88 1.28679e+015
+233 296 1.2867e+015
+541 163 1.28545e+015
+149 223 1.28482e+015
+537 263 1.28281e+015
+148 22 1.28031e+015
+338 263 1.2773e+015
+157 306 1.27681e+015
+183 316 1.27634e+015
+200 293 1.27578e+015
+387 3 1.27374e+015
+184 94 1.27279e+015
+454 47 1.27046e+015
+279 86 1.26996e+015
+191 188 1.26986e+015
+433 240 1.26906e+015
+272 170 1.26846e+015
+573 178 1.2682e+015
+87 207 1.26707e+015
+319 335 1.26553e+015
+186 289 1.26233e+015
+462 161 1.26189e+015
+449 437 1.26151e+015
+388 420 1.25996e+015
+122 124 1.25972e+015
+529 31 1.25783e+015
+434 43 1.25778e+015
+136 138 1.25499e+015
+408 430 1.25484e+015
+265 52 1.25461e+015
+221 432 1.25298e+015
+490 58 1.24976e+015
+456 377 1.24882e+015
+273 220 1.24873e+015
+229 14 1.24814e+015
+359 291 1.24732e+015
+436 182 1.24714e+015
+321 10 1.24642e+015
+506 203 1.24469e+015
+500 266 1.24466e+015
+469 42 1.24463e+015
+512 43 1.24392e+015
+562 149 1.2415e+015
+412 245 1.24104e+015
+265 286 1.24074e+015
+453 161 1.23895e+015
+219 211 1.23352e+015
+247 405 1.23297e+015
+116 360 1.23241e+015
+259 273 1.23241e+015
+525 79 1.23193e+015
+479 439 1.23029e+015
+322 28 1.2299e+015
+562 461 1.22976e+015
+362 214 1.22862e+015
+327 9 1.2275e+015
+278 417 1.22269e+015
+351 271 1.21956e+015
+263 402 1.2186e+015
+461 43 1.2176e+015
+597 272 1.21664e+015
+407 65 1.21594e+015
+73 163 1.21463e+015
+191 277 1.21444e+015
+120 187 1.21382e+015
+445 126 1.21337e+015
+51 287 1.21331e+015
+21 131 1.21283e+015
+176 57 1.21205e+015
+410 263 1.21184e+015
+411 98 1.20856e+015
+175 186 1.20826e+015
+223 87 1.20819e+015
+513 20 1.208e+015
+48 102 1.20539e+015
+395 165 1.20387e+015
+208 421 1.20311e+015
+195 83 1.20221e+015
+576 311 1.20009e+015
+155 445 1.19424e+015
+96 37 1.19386e+015
+255 108 1.19324e+015
+182 344 1.19314e+015
+514 362 1.19018e+015
+239 194 1.18967e+015
+242 281 1.18913e+015
+363 302 1.18905e+015
+240 197 1.18762e+015
+446 376 1.18758e+015
+314 447 1.1867e+015
+438 241 1.18409e+015
+95 59 1.18274e+015
+267 19 1.18003e+015
+417 301 1.17894e+015
+9 475 1.17539e+015
+422 64 1.17498e+015
+177 332 1.17448e+015
+567 181 1.17404e+015
+165 379 1.17387e+015
+69 304 1.17131e+015
+198 148 1.17076e+015
+548 45 1.17063e+015
+87 369 1.16934e+015
+462 397 1.1685e+015
+16 213 1.16565e+015
+109 146 1.16563e+015
+86 63 1.16506e+015
+67 48 1.16325e+015
+479 242 1.16197e+015
+414 261 1.16164e+015
+93 276 1.16075e+015
+349 241 1.15959e+015
+444 123 1.15939e+015
+12 113 1.15905e+015
+461 123 1.15894e+015
+512 204 1.15823e+015
+55 142 1.1575e+015
+278 392 1.1563e+015
+269 241 1.15595e+015
+478 221 1.15505e+015
+335 427 1.15493e+015
+330 106 1.15365e+015
+547 218 1.15275e+015
+145 16 1.15241e+015
+168 358 1.15222e+015
+529 141 1.15061e+015
+439 25 1.14906e+015
+455 265 1.14837e+015
+87 275 1.14596e+015
+370 107 1.14444e+015
+262 396 1.14433e+015
+432 82 1.14374e+015
+414 264 1.14145e+015
+535 140 1.13958e+015
+99 95 1.13956e+015
+251 192 1.13895e+015
+443 320 1.13451e+015
+108 45 1.13087e+015
+83 100 1.13065e+015
+411 418 1.13018e+015
+355 341 1.13017e+015
+187 325 1.12813e+015
+526 399 1.12808e+015
+572 39 1.12702e+015
+272 146 1.12324e+015
+331 334 1.12234e+015
+564 225 1.12192e+015
+122 268 1.12167e+015
+311 299 1.11977e+015
+403 14 1.11901e+015
+227 72 1.11805e+015
+202 346 1.11698e+015
+449 22 1.1168e+015
+13 203 1.1151e+015
+116 131 1.1145e+015
+120 54 1.11365e+015
+104 76 1.11321e+015
+322 424 1.11171e+015
+87 355 1.11162e+015
+95 374 1.10878e+015
+419 362 1.10874e+015
+307 196 1.10811e+015
+438 397 1.10758e+015
+257 220 1.10593e+015
+251 163 1.1045e+015
+572 459 1.10349e+015
+130 428 1.10292e+015
+214 450 1.10289e+015
+497 283 1.1003e+015
+555 181 1.09976e+015
+266 131 1.09791e+015
+444 118 1.09689e+015
+151 399 1.09592e+015
+232 13 1.09469e+015
+263 140 1.09318e+015
+354 424 1.09286e+015
+531 159 1.0928e+015
+359 161 1.09277e+015
+533 346 1.09276e+015
+103 98 1.0912e+015
+508 83 1.09045e+015
+183 201 1.08991e+015
+160 126 1.08954e+015
+211 12 1.08948e+015
+424 261 1.08928e+015
+467 319 1.08922e+015
+486 139 1.08915e+015
+111 132 1.08773e+015
+113 354 1.08746e+015
+247 327 1.08691e+015
+438 122 1.0854e+015
+143 449 1.08519e+015
+269 56 1.08451e+015
+125 124 1.08402e+015
+485 235 1.08157e+015
+329 109 1.08005e+015
+572 333 1.07998e+015
+500 318 1.07869e+015
+298 137 1.07865e+015
+618 181 1.07785e+015
+246 256 1.07742e+015
+419 68 1.07599e+015
+260 329 1.07542e+015
+222 107 1.07534e+015
+284 386 1.07196e+015
+278 331 1.0718e+015
+229 346 1.07175e+015
+64 275 1.07159e+015
+493 58 1.06982e+015
+504 260 1.06963e+015
+223 124 1.06814e+015
+186 170 1.06799e+015
+136 135 1.06732e+015
+108 75 1.06686e+015
+394 183 1.06682e+015
+272 92 1.0643e+015
+58 71 1.06364e+015
+12 433 1.06318e+015
+391 324 1.06317e+015
+196 76 1.06242e+015
+474 64 1.06207e+015
+455 179 1.06075e+015
+339 427 1.05845e+015
+354 25 1.05672e+015
+541 380 1.05529e+015
+64 182 1.05511e+015
+221 84 1.05435e+015
+394 65 1.05275e+015
+380 181 1.05232e+015
+99 257 1.05199e+015
+493 456 1.05168e+015
+562 141 1.0498e+015
+223 154 1.04923e+015
+45 343 1.0487e+015
+458 115 1.04828e+015
+286 34 1.04787e+015
+151 152 1.04688e+015
+433 26 1.04663e+015
+224 398 1.04511e+015
+455 418 1.03994e+015
+378 352 1.03987e+015
+436 468 1.03954e+015
+26 131 1.03932e+015
+96 453 1.03895e+015
+271 414 1.03791e+015
+383 103 1.03714e+015
+278 190 1.03669e+015
+576 165 1.03638e+015
+8 235 1.03525e+015
+321 119 1.0347e+015
+206 163 1.03406e+015
+190 315 1.03403e+015
+232 176 1.03388e+015
+418 79 1.03362e+015
+199 166 1.03226e+015
+446 243 1.03164e+015
+537 103 1.03086e+015
+102 41 1.02985e+015
+342 296 1.02888e+015
+431 395 1.02691e+015
+194 312 1.02677e+015
+573 423 1.02528e+015
+126 218 1.02458e+015
+25 200 1.02398e+015
+409 140 1.0233e+015
+486 326 1.02098e+015
+69 417 1.02097e+015
+214 93 1.02018e+015
+493 79 1.01924e+015
+17 64 1.01705e+015
+445 444 1.01569e+015
+374 151 1.01519e+015
+389 134 1.01428e+015
+185 132 1.01193e+015
+480 204 1.01005e+015
+336 183 1.00895e+015
+50 221 1.00878e+015
+311 222 1.00855e+015
+148 79 1.00669e+015
+110 179 1.00656e+015
+170 313 1.00605e+015
+515 203 1.00242e+015
+559 60 1.00119e+015
+493 82 1.00077e+015
+227 198 9.99329e+014
+162 99 9.97682e+014
+266 293 9.97389e+014
+243 31 9.97283e+014
+104 307 9.96584e+014
+135 21 9.96534e+014
+297 15 9.96299e+014
+261 287 9.96241e+014
+385 64 9.96117e+014
+426 334 9.96031e+014
+154 56 9.95024e+014
+483 46 9.94129e+014
+39 83 9.93943e+014
+112 206 9.93469e+014
+181 293 9.92653e+014
+256 102 9.91304e+014
+257 391 9.91294e+014
+151 317 9.90021e+014
+363 49 9.84837e+014
+46 122 9.84731e+014
+205 202 9.84589e+014
+180 168 9.84585e+014
+149 131 9.84096e+014
+131 411 9.83525e+014
+136 323 9.82152e+014
+425 102 9.8201e+014
+246 420 9.81986e+014
+267 118 9.81527e+014
+249 387 9.81469e+014
+364 165 9.81237e+014
+574 129 9.78378e+014
+166 219 9.77795e+014
+363 407 9.77512e+014
+53 452 9.7694e+014
+323 133 9.76646e+014
+538 187 9.76024e+014
+483 359 9.73177e+014
+524 189 9.72955e+014
+418 167 9.72241e+014
+105 224 9.72183e+014
+74 234 9.69966e+014
+546 142 9.69303e+014
+510 59 9.67454e+014
+386 334 9.67436e+014
+391 125 9.67055e+014
+173 123 9.66894e+014
+210 136 9.65848e+014
+186 292 9.65797e+014
+406 76 9.65492e+014
+403 5 9.6461e+014
+36 470 9.62826e+014
+556 264 9.62013e+014
+256 105 9.61626e+014
+234 32 9.61357e+014
+22 48 9.61082e+014
+116 289 9.60598e+014
+188 255 9.59234e+014
+450 197 9.57856e+014
+354 15 9.56874e+014
+440 379 9.5646e+014
+112 40 9.5582e+014
+333 281 9.55499e+014
+545 439 9.5494e+014
+414 145 9.54125e+014
+138 131 9.5363e+014
+467 39 9.53519e+014
+117 429 9.5345e+014
+257 250 9.51333e+014
+106 29 9.49571e+014
+333 66 9.49337e+014
+108 259 9.49195e+014
+543 443 9.48491e+014
+383 109 9.47699e+014
+446 266 9.47096e+014
+581 245 9.47048e+014
+134 412 9.46751e+014
+394 20 9.46705e+014
+401 320 9.46229e+014
+173 272 9.45377e+014
+422 119 9.43742e+014
+362 64 9.42618e+014
+269 104 9.42078e+014
+300 246 9.41389e+014
+526 119 9.41197e+014
+84 170 9.41091e+014
+23 322 9.40613e+014
+334 143 9.38666e+014
+129 125 9.37928e+014
+130 113 9.37893e+014
+420 87 9.35811e+014
+245 385 9.34918e+014
+334 28 9.34698e+014
+451 125 9.34191e+014
+90 113 9.33765e+014
+401 144 9.33179e+014
+249 91 9.30829e+014
+143 433 9.30524e+014
+437 110 9.30226e+014
+276 187 9.2902e+014
+287 308 9.28807e+014
+579 84 9.28127e+014
+179 271 9.2557e+014
+265 260 9.25461e+014
+154 163 9.25327e+014
+310 335 9.25137e+014
+352 341 9.2439e+014
+113 306 9.2351e+014
+163 348 9.2305e+014
+575 38 9.22874e+014
+10 203 9.22463e+014
+581 445 9.21977e+014
+333 356 9.21147e+014
+130 218 9.20487e+014
+547 283 9.19828e+014
+156 195 9.19633e+014
+310 259 9.19444e+014
+344 48 9.1797e+014
+549 384 9.17163e+014
+551 182 9.17015e+014
+432 121 9.16201e+014
+247 348 9.15569e+014
+307 89 9.13978e+014
+284 212 9.13757e+014
+257 131 9.13335e+014
+252 183 9.13267e+014
+387 449 9.13205e+014
+434 226 9.12882e+014
+512 287 9.12792e+014
+318 202 9.11974e+014
+340 220 9.10896e+014
+564 162 9.10309e+014
+123 83 9.09332e+014
+202 220 9.09074e+014
+298 399 9.05255e+014
+273 223 9.04378e+014
+290 182 9.03495e+014
+162 120 9.02033e+014
+104 106 9.01445e+014
+420 142 9.00206e+014
+528 437 9.0016e+014
+216 121 8.984e+014
+133 79 8.98033e+014
+512 183 8.98024e+014
+546 181 8.95236e+014
+566 39 8.95207e+014
+460 357 8.94075e+014
+94 422 8.93768e+014
+510 135 8.92666e+014
+206 404 8.92501e+014
+575 332 8.92421e+014
+483 287 8.92282e+014
+589 350 8.91953e+014
+85 363 8.91697e+014
+480 45 8.90907e+014
+475 269 8.90067e+014
+446 145 8.89203e+014
+5 236 8.88166e+014
+502 103 8.87783e+014
+177 396 8.86565e+014
+497 78 8.86361e+014
+422 332 8.84848e+014
+102 392 8.84198e+014
+420 90 8.82921e+014
+200 8 8.82731e+014
+152 236 8.82477e+014
+363 455 8.81823e+014
+247 399 8.81153e+014
+199 97 8.80592e+014
+107 325 8.77177e+014
+70 259 8.76866e+014
+100 165 8.7683e+014
+280 35 8.76515e+014
+478 399 8.7547e+014
+214 290 8.74813e+014
+535 92 8.74201e+014
+277 223 8.7377e+014
+364 353 8.73156e+014
+227 259 8.7313e+014
+181 341 8.7285e+014
+230 332 8.71772e+014
+186 312 8.70662e+014
+41 168 8.69091e+014
+162 186 8.68699e+014
+566 176 8.68573e+014
+159 254 8.68565e+014
+37 267 8.68409e+014
+355 325 8.65949e+014
+288 125 8.65819e+014
+299 254 8.64635e+014
+366 454 8.63465e+014
+421 299 8.634e+014
+560 275 8.6301e+014
+186 215 8.62919e+014
+136 180 8.6236e+014
+126 339 8.62207e+014
+195 110 8.61837e+014
+288 111 8.61137e+014
+497 118 8.61123e+014
+276 203 8.60121e+014
+183 56 8.60033e+014
+167 315 8.60027e+014
+497 286 8.59146e+014
+307 257 8.58936e+014
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_5_7.txt b/test_data/harriscorners/hc_msc_3.00_0.15_5_7.txt
new file mode 100644
index 0000000..f6098c3
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_5_7.txt
@@ -0,0 +1,1797 @@
+1796
+81 29 4.02032e+016
+246 94 3.87072e+016
+421 180 3.83742e+016
+238 20 3.80821e+016
+274 367 3.38325e+016
+131 26 3.09709e+016
+424 180 2.87657e+016
+282 113 2.84256e+016
+424 177 2.83919e+016
+75 257 2.83902e+016
+261 297 2.81707e+016
+80 3 2.701e+016
+510 124 2.61816e+016
+130 37 2.59809e+016
+424 322 2.47883e+016
+121 43 2.45696e+016
+30 8 2.42082e+016
+542 14 2.35507e+016
+199 18 2.32623e+016
+299 53 2.28522e+016
+152 223 2.18569e+016
+330 128 2.15327e+016
+458 279 2.13623e+016
+544 366 2.08709e+016
+343 8 2.07863e+016
+102 222 2.03723e+016
+55 30 2.03269e+016
+213 57 2.01506e+016
+34 139 1.99213e+016
+483 178 1.98886e+016
+359 294 1.98468e+016
+195 58 1.97963e+016
+292 16 1.97653e+016
+302 184 1.97284e+016
+26 9 1.96779e+016
+84 77 1.95378e+016
+37 63 1.94078e+016
+528 25 1.93352e+016
+485 338 1.89733e+016
+361 395 1.8714e+016
+156 1 1.85472e+016
+385 10 1.8229e+016
+302 181 1.80201e+016
+122 46 1.80071e+016
+400 263 1.79925e+016
+295 15 1.777e+016
+77 2 1.76548e+016
+391 296 1.76447e+016
+138 204 1.76151e+016
+464 395 1.75798e+016
+64 344 1.75593e+016
+258 384 1.7538e+016
+241 70 1.74276e+016
+436 68 1.73337e+016
+388 11 1.70714e+016
+135 213 1.7031e+016
+60 217 1.69708e+016
+224 39 1.67893e+016
+36 145 1.66165e+016
+319 225 1.64007e+016
+451 338 1.63895e+016
+525 25 1.62658e+016
+12 217 1.61594e+016
+211 436 1.61454e+016
+34 100 1.61401e+016
+115 42 1.59763e+016
+512 342 1.57383e+016
+250 12 1.57233e+016
+359 334 1.56331e+016
+345 339 1.55022e+016
+554 40 1.53778e+016
+447 261 1.53666e+016
+328 296 1.52377e+016
+389 59 1.52043e+016
+403 120 1.51288e+016
+253 11 1.50803e+016
+224 420 1.4996e+016
+122 186 1.47938e+016
+127 165 1.47254e+016
+225 181 1.45681e+016
+449 299 1.43893e+016
+511 169 1.42545e+016
+320 312 1.4234e+016
+364 251 1.40627e+016
+364 400 1.40381e+016
+313 148 1.40369e+016
+503 1 1.40209e+016
+476 262 1.40071e+016
+125 253 1.39923e+016
+263 442 1.3929e+016
+386 178 1.38975e+016
+158 74 1.37705e+016
+47 98 1.36928e+016
+359 129 1.36831e+016
+175 110 1.35755e+016
+383 5 1.3531e+016
+545 59 1.3484e+016
+528 103 1.34465e+016
+419 8 1.3415e+016
+209 450 1.34099e+016
+448 296 1.31725e+016
+143 323 1.31218e+016
+562 478 1.3084e+016
+448 398 1.30806e+016
+79 79 1.30508e+016
+518 59 1.30428e+016
+41 217 1.30195e+016
+363 403 1.28623e+016
+163 215 1.28171e+016
+138 207 1.27365e+016
+390 143 1.26575e+016
+302 165 1.26508e+016
+486 58 1.25765e+016
+418 438 1.25268e+016
+361 400 1.25254e+016
+352 321 1.25128e+016
+272 280 1.24878e+016
+56 290 1.24512e+016
+4 45 1.23828e+016
+356 259 1.22695e+016
+150 306 1.22557e+016
+359 220 1.22121e+016
+427 118 1.22072e+016
+408 183 1.21853e+016
+238 91 1.2166e+016
+43 26 1.21649e+016
+165 240 1.21434e+016
+580 16 1.212e+016
+222 179 1.211e+016
+56 4 1.21076e+016
+310 6 1.20661e+016
+508 454 1.20309e+016
+393 143 1.19259e+016
+528 186 1.1913e+016
+246 144 1.18636e+016
+284 402 1.18227e+016
+72 257 1.18125e+016
+534 185 1.17686e+016
+177 105 1.17571e+016
+253 139 1.17395e+016
+143 311 1.17335e+016
+107 39 1.16975e+016
+182 398 1.16467e+016
+546 41 1.15728e+016
+449 204 1.15692e+016
+265 445 1.1555e+016
+60 40 1.15469e+016
+294 27 1.15449e+016
+126 364 1.15435e+016
+413 259 1.15292e+016
+387 219 1.14469e+016
+128 187 1.14427e+016
+260 220 1.14349e+016
+243 166 1.14055e+016
+500 159 1.13824e+016
+302 215 1.13431e+016
+329 258 1.12594e+016
+471 421 1.12427e+016
+405 183 1.11936e+016
+139 109 1.11739e+016
+60 184 1.11722e+016
+87 254 1.11605e+016
+256 151 1.11476e+016
+104 3 1.11212e+016
+132 74 1.10903e+016
+104 61 1.10634e+016
+313 84 1.10407e+016
+453 204 1.10203e+016
+253 423 1.09445e+016
+108 240 1.08401e+016
+209 21 1.08362e+016
+343 264 1.08224e+016
+327 141 1.08168e+016
+380 6 1.07669e+016
+215 71 1.07661e+016
+392 218 1.07636e+016
+208 222 1.07542e+016
+61 203 1.07413e+016
+435 397 1.07352e+016
+414 22 1.07328e+016
+145 7 1.07085e+016
+174 41 1.06813e+016
+235 347 1.06786e+016
+433 147 1.06577e+016
+211 185 1.06052e+016
+548 162 1.06048e+016
+239 201 1.0546e+016
+229 37 1.05246e+016
+434 112 1.05058e+016
+36 174 1.05047e+016
+65 235 1.04521e+016
+514 345 1.03387e+016
+166 326 1.02815e+016
+410 353 1.02434e+016
+123 199 1.0242e+016
+541 124 1.01852e+016
+83 134 1.01336e+016
+208 225 1.0093e+016
+101 360 9.9941e+015
+49 150 9.99005e+015
+428 1 9.95392e+015
+301 205 9.95389e+015
+100 198 9.95255e+015
+111 169 9.94397e+015
+508 20 9.93638e+015
+437 304 9.86447e+015
+176 260 9.79373e+015
+371 161 9.74187e+015
+112 391 9.73351e+015
+32 269 9.69788e+015
+52 98 9.69695e+015
+183 35 9.68477e+015
+100 79 9.66801e+015
+54 222 9.64737e+015
+325 341 9.64706e+015
+508 166 9.64023e+015
+134 97 9.63638e+015
+479 15 9.62351e+015
+477 18 9.60804e+015
+365 6 9.58921e+015
+91 199 9.57541e+015
+480 262 9.52449e+015
+543 169 9.4912e+015
+85 148 9.49111e+015
+362 7 9.4595e+015
+462 42 9.38275e+015
+24 62 9.33834e+015
+163 212 9.32488e+015
+523 22 9.30177e+015
+505 15 9.27408e+015
+174 114 9.2678e+015
+183 111 9.26076e+015
+139 325 9.26013e+015
+512 221 9.25604e+015
+430 117 9.244e+015
+356 219 9.23981e+015
+280 365 9.2338e+015
+326 89 9.22856e+015
+168 196 9.14782e+015
+404 266 9.14436e+015
+66 216 9.14409e+015
+431 318 9.13306e+015
+91 196 9.12831e+015
+332 294 9.11039e+015
+106 43 9.08363e+015
+329 11 9.07291e+015
+112 344 9.07163e+015
+422 336 9.07154e+015
+448 166 9.01348e+015
+513 262 8.98138e+015
+160 144 8.9765e+015
+343 122 8.95231e+015
+134 132 8.94302e+015
+432 276 8.9311e+015
+125 259 8.91555e+015
+52 42 8.88845e+015
+377 120 8.88669e+015
+77 40 8.88168e+015
+260 236 8.88036e+015
+270 290 8.8703e+015
+213 74 8.86344e+015
+49 28 8.86325e+015
+389 21 8.83267e+015
+217 280 8.81252e+015
+235 161 8.80229e+015
+385 295 8.80057e+015
+454 207 8.78116e+015
+385 244 8.77753e+015
+546 167 8.76909e+015
+163 110 8.76576e+015
+533 20 8.76457e+015
+562 461 8.76205e+015
+263 402 8.72376e+015
+48 12 8.65048e+015
+29 30 8.63958e+015
+298 181 8.63532e+015
+355 128 8.63345e+015
+65 232 8.61791e+015
+330 141 8.59127e+015
+232 125 8.55018e+015
+259 165 8.51436e+015
+357 166 8.47488e+015
+164 73 8.46128e+015
+482 299 8.40801e+015
+50 288 8.40044e+015
+140 19 8.38139e+015
+363 130 8.37969e+015
+65 319 8.34467e+015
+296 332 8.33559e+015
+140 182 8.30998e+015
+544 457 8.29851e+015
+129 74 8.29655e+015
+539 13 8.29651e+015
+49 25 8.2952e+015
+412 45 8.26158e+015
+164 278 8.25562e+015
+459 264 8.2535e+015
+450 374 8.2514e+015
+510 129 8.24726e+015
+56 65 8.23219e+015
+445 118 8.21604e+015
+169 55 8.21473e+015
+165 357 8.21315e+015
+367 143 8.20687e+015
+283 51 8.20246e+015
+103 76 8.2e+015
+229 291 8.1991e+015
+190 360 8.19794e+015
+388 164 8.13453e+015
+276 353 8.1224e+015
+7 9 8.11508e+015
+498 225 8.10282e+015
+333 258 8.08282e+015
+329 90 8.0467e+015
+6 65 8.03916e+015
+110 94 8.01879e+015
+539 457 8.01409e+015
+89 258 8.01138e+015
+248 316 8.00559e+015
+272 316 8.00454e+015
+544 4 8.00324e+015
+227 186 7.97444e+015
+40 296 7.97183e+015
+145 161 7.89819e+015
+142 393 7.88133e+015
+176 95 7.87442e+015
+414 65 7.87156e+015
+162 96 7.82497e+015
+231 199 7.82321e+015
+437 319 7.81067e+015
+110 179 7.79472e+015
+65 59 7.79315e+015
+218 105 7.78855e+015
+189 218 7.78829e+015
+165 98 7.78488e+015
+360 141 7.77324e+015
+523 61 7.76701e+015
+70 477 7.76312e+015
+97 448 7.7568e+015
+172 55 7.75612e+015
+485 44 7.75278e+015
+346 240 7.75102e+015
+561 226 7.73436e+015
+280 49 7.72284e+015
+62 60 7.70461e+015
+304 190 7.68991e+015
+210 34 7.68942e+015
+507 169 7.67754e+015
+265 30 7.65991e+015
+490 139 7.65643e+015
+218 98 7.65625e+015
+362 259 7.64293e+015
+47 81 7.61382e+015
+364 141 7.5996e+015
+190 350 7.59881e+015
+524 187 7.59353e+015
+324 315 7.58777e+015
+153 235 7.58294e+015
+448 218 7.56523e+015
+493 81 7.56234e+015
+284 73 7.56132e+015
+344 108 7.55912e+015
+110 136 7.55653e+015
+217 147 7.55542e+015
+124 271 7.54108e+015
+517 20 7.53994e+015
+44 98 7.51041e+015
+167 313 7.50921e+015
+345 350 7.43419e+015
+413 298 7.42997e+015
+463 27 7.42e+015
+37 297 7.41912e+015
+423 332 7.41837e+015
+37 170 7.40169e+015
+302 169 7.40125e+015
+301 264 7.39697e+015
+576 15 7.38729e+015
+273 182 7.37953e+015
+464 280 7.3666e+015
+506 6 7.36418e+015
+503 164 7.3641e+015
+430 148 7.36092e+015
+223 218 7.3606e+015
+245 207 7.35793e+015
+115 392 7.34232e+015
+568 42 7.33521e+015
+385 324 7.33458e+015
+165 179 7.32835e+015
+278 219 7.32565e+015
+223 14 7.30214e+015
+346 276 7.2694e+015
+248 399 7.25174e+015
+159 182 7.25073e+015
+421 165 7.24843e+015
+223 433 7.22101e+015
+433 158 7.20538e+015
+349 181 7.19205e+015
+455 85 7.17733e+015
+206 434 7.15029e+015
+274 132 7.14783e+015
+46 355 7.14417e+015
+540 406 7.11184e+015
+395 164 7.09581e+015
+257 147 7.08555e+015
+175 20 7.08271e+015
+358 319 7.07519e+015
+109 98 7.07359e+015
+305 439 7.07185e+015
+373 392 7.06939e+015
+470 121 7.05905e+015
+174 312 7.04755e+015
+279 353 7.04053e+015
+509 174 7.0396e+015
+111 110 7.03544e+015
+377 68 7.0336e+015
+61 134 7.01473e+015
+276 317 7.00448e+015
+522 264 6.98894e+015
+481 84 6.98686e+015
+392 49 6.98398e+015
+271 168 6.97705e+015
+379 338 6.97244e+015
+380 107 6.95312e+015
+389 17 6.93794e+015
+297 69 6.92724e+015
+420 47 6.92133e+015
+365 301 6.91788e+015
+561 475 6.91699e+015
+488 44 6.90854e+015
+193 218 6.89572e+015
+360 164 6.89052e+015
+131 133 6.89027e+015
+153 196 6.88461e+015
+272 73 6.88214e+015
+35 31 6.8805e+015
+407 198 6.83126e+015
+357 11 6.82233e+015
+450 87 6.82229e+015
+4 9 6.79824e+015
+523 123 6.78751e+015
+192 143 6.78352e+015
+436 379 6.77494e+015
+42 62 6.76692e+015
+168 18 6.76109e+015
+142 185 6.74354e+015
+221 151 6.74146e+015
+557 463 6.72087e+015
+540 98 6.71412e+015
+309 440 6.70325e+015
+483 363 6.69041e+015
+208 55 6.67502e+015
+391 164 6.67414e+015
+358 66 6.66834e+015
+574 178 6.6632e+015
+373 85 6.65456e+015
+247 219 6.65228e+015
+164 209 6.64711e+015
+56 78 6.61816e+015
+507 162 6.61515e+015
+145 16 6.60409e+015
+541 128 6.60219e+015
+523 344 6.59443e+015
+494 139 6.59128e+015
+474 247 6.57542e+015
+269 54 6.57475e+015
+447 8 6.57221e+015
+510 100 6.52551e+015
+411 21 6.50728e+015
+448 444 6.5024e+015
+158 96 6.48841e+015
+449 117 6.48535e+015
+120 115 6.48409e+015
+295 421 6.48322e+015
+272 285 6.4797e+015
+200 313 6.47652e+015
+325 426 6.47238e+015
+575 459 6.45101e+015
+549 40 6.44879e+015
+191 206 6.44792e+015
+470 238 6.44618e+015
+527 18 6.44383e+015
+56 364 6.4292e+015
+139 99 6.4113e+015
+189 145 6.39346e+015
+473 203 6.38156e+015
+105 223 6.37657e+015
+157 91 6.36535e+015
+36 177 6.36322e+015
+138 173 6.35443e+015
+346 297 6.3537e+015
+340 122 6.35264e+015
+510 4 6.34311e+015
+527 347 6.34187e+015
+107 429 6.3406e+015
+273 295 6.33987e+015
+411 66 6.33787e+015
+542 209 6.33767e+015
+57 75 6.33343e+015
+487 264 6.33298e+015
+509 17 6.32299e+015
+409 45 6.31542e+015
+250 402 6.31462e+015
+160 137 6.30557e+015
+298 274 6.28911e+015
+326 165 6.27908e+015
+365 105 6.27348e+015
+279 136 6.25062e+015
+313 76 6.24814e+015
+332 92 6.24343e+015
+277 182 6.2403e+015
+91 290 6.23622e+015
+92 254 6.22997e+015
+162 169 6.21626e+015
+117 426 6.21193e+015
+158 112 6.20926e+015
+309 373 6.2092e+015
+528 363 6.20746e+015
+221 106 6.20226e+015
+131 71 6.19693e+015
+344 111 6.1799e+015
+85 61 6.17605e+015
+119 447 6.16372e+015
+340 166 6.16287e+015
+132 1 6.15115e+015
+541 133 6.14911e+015
+84 213 6.14283e+015
+58 204 6.1419e+015
+512 78 6.11581e+015
+205 308 6.10623e+015
+305 194 6.10597e+015
+258 161 6.10122e+015
+126 26 6.10016e+015
+276 331 6.09946e+015
+76 8 6.09448e+015
+178 273 6.08154e+015
+114 95 6.07127e+015
+220 290 6.06231e+015
+423 49 6.05786e+015
+118 76 6.03517e+015
+196 132 6.03418e+015
+59 253 6.02013e+015
+273 219 6.00886e+015
+108 60 6.00623e+015
+284 198 5.99048e+015
+196 128 5.98631e+015
+215 124 5.98579e+015
+71 149 5.98069e+015
+444 451 5.97756e+015
+445 123 5.92672e+015
+483 142 5.9232e+015
+282 391 5.9062e+015
+510 82 5.90513e+015
+114 169 5.90262e+015
+153 112 5.90032e+015
+526 360 5.8871e+015
+88 216 5.87998e+015
+301 105 5.87129e+015
+83 476 5.86163e+015
+514 97 5.85656e+015
+71 146 5.84604e+015
+520 122 5.82955e+015
+337 13 5.82888e+015
+68 419 5.81993e+015
+55 145 5.81768e+015
+402 186 5.81553e+015
+45 339 5.80807e+015
+88 368 5.80221e+015
+102 236 5.78264e+015
+572 406 5.7781e+015
+88 207 5.76228e+015
+295 269 5.75857e+015
+442 240 5.7584e+015
+107 29 5.75522e+015
+333 67 5.7149e+015
+280 130 5.70624e+015
+266 16 5.70283e+015
+351 145 5.68772e+015
+333 202 5.68675e+015
+371 89 5.68116e+015
+353 294 5.67324e+015
+78 474 5.66952e+015
+396 317 5.65752e+015
+268 279 5.65453e+015
+463 199 5.65176e+015
+278 391 5.63816e+015
+78 271 5.63809e+015
+223 113 5.63412e+015
+328 181 5.63258e+015
+76 30 5.63077e+015
+92 257 5.62534e+015
+471 212 5.61904e+015
+527 344 5.61788e+015
+481 451 5.61388e+015
+423 46 5.61092e+015
+497 66 5.58362e+015
+394 63 5.57384e+015
+453 102 5.54713e+015
+271 185 5.5429e+015
+33 218 5.53077e+015
+472 266 5.52624e+015
+506 361 5.50997e+015
+91 376 5.50327e+015
+150 112 5.49545e+015
+11 78 5.47692e+015
+86 311 5.47684e+015
+104 57 5.47349e+015
+418 83 5.44893e+015
+357 282 5.44836e+015
+287 397 5.42968e+015
+376 338 5.41419e+015
+233 33 5.40912e+015
+174 187 5.40763e+015
+511 96 5.39734e+015
+464 196 5.39451e+015
+31 235 5.37917e+015
+468 204 5.37727e+015
+514 203 5.37339e+015
+161 115 5.35506e+015
+364 180 5.35152e+015
+164 206 5.34659e+015
+357 63 5.33729e+015
+50 155 5.33467e+015
+302 176 5.31294e+015
+452 62 5.3029e+015
+17 343 5.30282e+015
+525 173 5.30211e+015
+578 43 5.30082e+015
+330 67 5.29908e+015
+234 198 5.29706e+015
+448 124 5.28372e+015
+451 438 5.28174e+015
+392 215 5.27779e+015
+480 440 5.27008e+015
+437 240 5.26768e+015
+529 399 5.26396e+015
+418 87 5.25974e+015
+405 81 5.24948e+015
+190 278 5.24581e+015
+540 101 5.24217e+015
+383 162 5.24092e+015
+418 283 5.23771e+015
+563 323 5.23664e+015
+43 81 5.23314e+015
+238 161 5.22563e+015
+189 313 5.22064e+015
+540 41 5.21851e+015
+424 399 5.21607e+015
+437 338 5.20784e+015
+91 276 5.19983e+015
+544 7 5.19966e+015
+169 58 5.19958e+015
+449 140 5.19718e+015
+48 221 5.19717e+015
+12 81 5.19671e+015
+466 123 5.18847e+015
+10 103 5.18157e+015
+185 289 5.17232e+015
+249 366 5.1722e+015
+114 1 5.15984e+015
+217 292 5.1509e+015
+229 13 5.14459e+015
+537 393 5.1387e+015
+113 177 5.13731e+015
+291 88 5.13172e+015
+136 136 5.13097e+015
+550 58 5.12703e+015
+244 293 5.12603e+015
+340 109 5.12377e+015
+441 22 5.11863e+015
+133 237 5.11259e+015
+467 236 5.11005e+015
+185 135 5.10383e+015
+404 376 5.09842e+015
+319 165 5.08936e+015
+363 357 5.08887e+015
+280 438 5.07151e+015
+86 134 5.07083e+015
+358 241 5.06757e+015
+261 140 5.05702e+015
+484 329 5.03272e+015
+455 162 5.02962e+015
+570 451 5.02918e+015
+323 146 5.0061e+015
+432 381 4.99555e+015
+175 272 4.98751e+015
+468 208 4.98528e+015
+569 382 4.97789e+015
+335 435 4.97337e+015
+424 63 4.96562e+015
+472 23 4.95028e+015
+256 220 4.92813e+015
+92 444 4.91662e+015
+153 115 4.91553e+015
+543 213 4.91041e+015
+48 234 4.89633e+015
+87 197 4.88871e+015
+486 139 4.88429e+015
+198 195 4.8826e+015
+163 252 4.87804e+015
+454 116 4.8761e+015
+327 105 4.87418e+015
+213 32 4.86865e+015
+253 74 4.865e+015
+571 446 4.85498e+015
+119 130 4.85382e+015
+227 130 4.85209e+015
+259 35 4.81799e+015
+328 214 4.81783e+015
+292 335 4.81598e+015
+272 64 4.79905e+015
+306 449 4.79636e+015
+108 76 4.79398e+015
+424 376 4.79083e+015
+65 251 4.78569e+015
+335 218 4.78495e+015
+33 110 4.77355e+015
+155 318 4.75865e+015
+166 285 4.74892e+015
+218 208 4.74652e+015
+41 339 4.74357e+015
+135 179 4.7376e+015
+400 168 4.73459e+015
+467 138 4.73415e+015
+87 144 4.73269e+015
+516 42 4.73231e+015
+322 426 4.72644e+015
+238 95 4.72048e+015
+239 164 4.72036e+015
+466 24 4.70513e+015
+504 143 4.70109e+015
+382 338 4.69303e+015
+182 343 4.69016e+015
+163 62 4.68347e+015
+525 37 4.66653e+015
+530 142 4.66339e+015
+478 243 4.66275e+015
+384 258 4.6562e+015
+167 116 4.65606e+015
+382 67 4.64997e+015
+537 93 4.64151e+015
+538 138 4.64031e+015
+103 198 4.63946e+015
+147 449 4.63169e+015
+413 6 4.62098e+015
+83 171 4.61519e+015
+150 2 4.61164e+015
+387 128 4.60379e+015
+275 139 4.59988e+015
+319 187 4.59445e+015
+253 385 4.59171e+015
+157 235 4.59166e+015
+519 63 4.59094e+015
+40 355 4.58388e+015
+340 474 4.57743e+015
+215 97 4.56755e+015
+78 197 4.56594e+015
+282 418 4.56574e+015
+473 6 4.5397e+015
+139 178 4.53815e+015
+421 298 4.53675e+015
+522 426 4.53611e+015
+187 265 4.53393e+015
+216 175 4.52812e+015
+134 147 4.51471e+015
+214 94 4.51217e+015
+448 438 4.5118e+015
+190 329 4.51141e+015
+222 116 4.51063e+015
+250 220 4.50129e+015
+149 302 4.49582e+015
+62 371 4.4795e+015
+362 65 4.47793e+015
+39 238 4.47767e+015
+267 288 4.47723e+015
+279 143 4.47577e+015
+259 392 4.47559e+015
+100 445 4.47148e+015
+92 60 4.46587e+015
+87 181 4.46059e+015
+217 425 4.45219e+015
+310 446 4.45165e+015
+242 421 4.44654e+015
+70 96 4.44605e+015
+276 214 4.44231e+015
+359 53 4.43677e+015
+577 245 4.43656e+015
+343 200 4.43302e+015
+261 71 4.42276e+015
+102 162 4.41928e+015
+373 241 4.41897e+015
+364 101 4.4096e+015
+362 244 4.40613e+015
+397 160 4.3954e+015
+337 264 4.38359e+015
+150 398 4.37732e+015
+113 243 4.36491e+015
+125 78 4.3589e+015
+499 80 4.35209e+015
+53 360 4.33591e+015
+396 104 4.32451e+015
+190 109 4.32091e+015
+516 74 4.31815e+015
+186 202 4.31272e+015
+12 204 4.31087e+015
+162 19 4.3092e+015
+65 370 4.30658e+015
+438 468 4.30456e+015
+184 142 4.30183e+015
+514 118 4.29911e+015
+22 48 4.28904e+015
+526 221 4.2872e+015
+392 20 4.28015e+015
+172 16 4.27739e+015
+247 362 4.27709e+015
+110 2 4.2701e+015
+181 165 4.26502e+015
+48 162 4.25464e+015
+342 47 4.24882e+015
+220 315 4.24122e+015
+9 234 4.23953e+015
+175 240 4.23739e+015
+220 212 4.23704e+015
+163 186 4.23546e+015
+345 166 4.22736e+015
+354 12 4.19731e+015
+130 477 4.19719e+015
+105 360 4.19556e+015
+541 141 4.19235e+015
+193 329 4.18696e+015
+10 75 4.18588e+015
+196 111 4.18505e+015
+270 108 4.18468e+015
+530 96 4.17792e+015
+114 215 4.17605e+015
+272 145 4.1724e+015
+104 307 4.17169e+015
+441 454 4.17059e+015
+209 161 4.1566e+015
+107 108 4.15094e+015
+406 164 4.15091e+015
+402 143 4.14997e+015
+366 336 4.14731e+015
+552 377 4.13962e+015
+509 58 4.12715e+015
+509 61 4.12355e+015
+517 183 4.12309e+015
+283 396 4.12029e+015
+247 107 4.11978e+015
+392 17 4.11225e+015
+43 146 4.10324e+015
+445 205 4.10051e+015
+567 180 4.1003e+015
+389 124 4.09965e+015
+192 292 4.09723e+015
+487 375 4.09374e+015
+392 159 4.09307e+015
+204 294 4.08454e+015
+255 107 4.08104e+015
+84 72 4.08053e+015
+336 62 4.07372e+015
+382 102 4.06961e+015
+388 138 4.05956e+015
+277 187 4.05718e+015
+355 255 4.05615e+015
+512 361 4.05252e+015
+212 145 4.05185e+015
+226 112 4.05122e+015
+591 19 4.05046e+015
+283 195 4.04689e+015
+182 95 4.04553e+015
+298 25 4.04127e+015
+74 96 4.0379e+015
+268 242 4.03772e+015
+147 78 4.03733e+015
+284 134 4.03496e+015
+277 111 4.03344e+015
+285 164 4.02655e+015
+209 419 4.02531e+015
+97 445 4.02458e+015
+378 64 4.02349e+015
+438 182 4.02348e+015
+420 66 4.0207e+015
+320 336 4.02049e+015
+213 22 4.01946e+015
+433 81 4.01616e+015
+263 284 4.01596e+015
+288 51 4.01554e+015
+391 53 4.0048e+015
+142 449 3.99284e+015
+353 339 3.991e+015
+155 295 3.9838e+015
+325 133 3.98067e+015
+202 308 3.97867e+015
+302 195 3.97678e+015
+376 161 3.97664e+015
+242 58 3.97376e+015
+388 2 3.96902e+015
+323 14 3.96875e+015
+455 48 3.96638e+015
+262 392 3.96625e+015
+269 58 3.96559e+015
+186 308 3.96349e+015
+97 38 3.96311e+015
+418 449 3.96288e+015
+128 78 3.96281e+015
+447 351 3.96136e+015
+122 123 3.96118e+015
+331 413 3.95229e+015
+136 239 3.9485e+015
+526 197 3.94638e+015
+17 434 3.94585e+015
+484 325 3.94476e+015
+196 124 3.94034e+015
+277 190 3.93557e+015
+480 166 3.93113e+015
+402 44 3.93066e+015
+39 286 3.9261e+015
+542 95 3.92531e+015
+190 171 3.925e+015
+298 419 3.92133e+015
+110 265 3.91304e+015
+376 316 3.91008e+015
+533 394 3.90574e+015
+426 379 3.90362e+015
+437 280 3.89705e+015
+401 164 3.89568e+015
+346 47 3.89363e+015
+224 128 3.89182e+015
+180 136 3.8837e+015
+380 162 3.8823e+015
+250 90 3.88128e+015
+318 459 3.88042e+015
+471 269 3.87578e+015
+569 423 3.87568e+015
+9 32 3.87472e+015
+129 428 3.87461e+015
+186 21 3.87241e+015
+541 163 3.86085e+015
+484 163 3.85838e+015
+55 172 3.84885e+015
+72 164 3.8467e+015
+446 21 3.8423e+015
+70 128 3.83933e+015
+51 453 3.8362e+015
+381 120 3.83275e+015
+98 257 3.8324e+015
+264 71 3.82588e+015
+33 164 3.82484e+015
+264 141 3.82152e+015
+290 311 3.81741e+015
+533 161 3.80303e+015
+254 78 3.8018e+015
+162 118 3.80122e+015
+38 82 3.80076e+015
+110 326 3.79766e+015
+253 388 3.79345e+015
+243 281 3.79254e+015
+547 141 3.7894e+015
+299 295 3.78912e+015
+205 163 3.78628e+015
+201 294 3.7855e+015
+167 105 3.78282e+015
+287 262 3.77659e+015
+461 162 3.76947e+015
+26 131 3.76894e+015
+103 258 3.76682e+015
+576 125 3.75977e+015
+572 326 3.75924e+015
+110 262 3.75688e+015
+88 80 3.7524e+015
+425 184 3.75032e+015
+290 397 3.74903e+015
+240 192 3.74826e+015
+541 248 3.74664e+015
+234 262 3.74181e+015
+537 262 3.7332e+015
+85 40 3.73216e+015
+195 255 3.72918e+015
+450 180 3.72004e+015
+508 201 3.71596e+015
+317 103 3.71399e+015
+106 432 3.71352e+015
+137 72 3.71026e+015
+75 477 3.70809e+015
+561 142 3.69745e+015
+222 87 3.69363e+015
+398 356 3.69109e+015
+315 446 3.68667e+015
+365 201 3.68515e+015
+187 182 3.68437e+015
+329 26 3.68118e+015
+449 143 3.68105e+015
+574 330 3.67649e+015
+281 124 3.67395e+015
+265 312 3.67123e+015
+558 79 3.66765e+015
+162 126 3.66756e+015
+421 141 3.66739e+015
+289 139 3.6669e+015
+513 42 3.66214e+015
+391 118 3.65952e+015
+183 139 3.65893e+015
+523 78 3.65316e+015
+249 386 3.64614e+015
+382 413 3.64535e+015
+355 342 3.64476e+015
+382 25 3.64342e+015
+162 152 3.64124e+015
+96 95 3.6407e+015
+520 201 3.64063e+015
+547 217 3.63414e+015
+521 185 3.63369e+015
+277 179 3.6311e+015
+226 198 3.6255e+015
+408 140 3.61657e+015
+515 381 3.61233e+015
+315 336 3.60863e+015
+552 383 3.60044e+015
+479 286 3.59762e+015
+149 130 3.59165e+015
+65 182 3.58934e+015
+525 398 3.58806e+015
+480 46 3.58429e+015
+142 99 3.56521e+015
+8 115 3.56335e+015
+563 160 3.56276e+015
+86 363 3.55986e+015
+109 43 3.55887e+015
+240 195 3.55086e+015
+115 359 3.54838e+015
+319 386 3.53983e+015
+287 215 3.53938e+015
+396 23 3.52756e+015
+181 155 3.52638e+015
+125 125 3.52555e+015
+62 368 3.51843e+015
+526 79 3.51777e+015
+115 130 3.51598e+015
+149 232 3.50933e+015
+385 334 3.50922e+015
+337 389 3.5047e+015
+383 321 3.50424e+015
+114 212 3.50407e+015
+109 145 3.50356e+015
+111 358 3.49989e+015
+307 359 3.4979e+015
+407 429 3.49436e+015
+200 129 3.49259e+015
+178 331 3.49259e+015
+65 275 3.49177e+015
+409 26 3.48865e+015
+337 428 3.48563e+015
+365 165 3.48493e+015
+563 320 3.48318e+015
+541 381 3.47948e+015
+204 160 3.47119e+015
+1 383 3.47108e+015
+289 348 3.46974e+015
+575 100 3.46945e+015
+596 363 3.46935e+015
+452 46 3.46181e+015
+158 305 3.46024e+015
+311 79 3.45315e+015
+181 168 3.45312e+015
+281 223 3.44712e+015
+330 334 3.44109e+015
+225 51 3.4364e+015
+307 169 3.43314e+015
+119 95 3.43301e+015
+342 466 3.42913e+015
+342 196 3.42715e+015
+314 165 3.41991e+015
+292 122 3.41867e+015
+229 288 3.41017e+015
+278 224 3.40771e+015
+17 65 3.40464e+015
+534 121 3.40437e+015
+470 42 3.3976e+015
+483 204 3.39718e+015
+302 333 3.39641e+015
+239 220 3.3953e+015
+483 287 3.38468e+015
+406 354 3.38117e+015
+372 69 3.37862e+015
+386 282 3.37505e+015
+228 260 3.37409e+015
+524 422 3.3739e+015
+436 122 3.37278e+015
+275 204 3.37226e+015
+185 94 3.37073e+015
+209 155 3.36802e+015
+378 183 3.36655e+015
+199 329 3.36633e+015
+13 435 3.36258e+015
+41 182 3.3584e+015
+203 318 3.35591e+015
+308 354 3.3502e+015
+478 11 3.34875e+015
+96 423 3.34808e+015
+160 33 3.34352e+015
+506 380 3.34213e+015
+18 236 3.34171e+015
+212 97 3.34148e+015
+471 82 3.3409e+015
+163 349 3.33994e+015
+357 267 3.33833e+015
+477 339 3.3345e+015
+503 18 3.33393e+015
+435 237 3.33352e+015
+505 261 3.3256e+015
+224 149 3.32524e+015
+86 377 3.32504e+015
+306 90 3.32371e+015
+12 114 3.32059e+015
+432 237 3.31977e+015
+513 182 3.31945e+015
+101 6 3.31905e+015
+94 375 3.31555e+015
+212 150 3.31512e+015
+455 177 3.31236e+015
+494 58 3.30749e+015
+46 408 3.30304e+015
+580 346 3.30208e+015
+360 362 3.29545e+015
+267 246 3.28713e+015
+125 96 3.28553e+015
+83 181 3.28466e+015
+336 144 3.2832e+015
+199 166 3.28117e+015
+314 103 3.28093e+015
+190 136 3.27858e+015
+215 128 3.27513e+015
+368 109 3.27169e+015
+438 159 3.26882e+015
+359 368 3.2658e+015
+511 103 3.26166e+015
+129 259 3.25731e+015
+219 115 3.25684e+015
+43 475 3.25589e+015
+261 199 3.24923e+015
+178 56 3.24922e+015
+295 122 3.24521e+015
+513 442 3.23843e+015
+101 40 3.23613e+015
+174 201 3.23507e+015
+548 381 3.2344e+015
+530 159 3.23341e+015
+594 101 3.23293e+015
+558 19 3.23263e+015
+291 50 3.23232e+015
+135 322 3.23027e+015
+248 395 3.2259e+015
+25 118 3.22082e+015
+298 269 3.22045e+015
+167 433 3.21596e+015
+542 444 3.21191e+015
+211 396 3.20764e+015
+529 270 3.20543e+015
+94 19 3.20415e+015
+72 187 3.20177e+015
+251 164 3.20054e+015
+574 140 3.19815e+015
+101 96 3.19627e+015
+499 266 3.19465e+015
+269 416 3.1945e+015
+406 143 3.19369e+015
+183 316 3.19345e+015
+284 299 3.19139e+015
+465 424 3.19094e+015
+311 299 3.18991e+015
+563 18 3.18262e+015
+265 249 3.17726e+015
+128 126 3.17417e+015
+171 451 3.16898e+015
+157 39 3.16796e+015
+306 363 3.16104e+015
+332 355 3.1596e+015
+527 160 3.15476e+015
+525 177 3.15423e+015
+442 97 3.15207e+015
+139 136 3.15195e+015
+385 166 3.15171e+015
+497 117 3.15167e+015
+115 277 3.14875e+015
+113 76 3.14673e+015
+214 439 3.14407e+015
+415 165 3.14187e+015
+279 330 3.14129e+015
+267 68 3.13365e+015
+503 156 3.13075e+015
+155 57 3.12407e+015
+269 144 3.12247e+015
+411 264 3.12244e+015
+578 84 3.12239e+015
+387 451 3.11988e+015
+559 272 3.11966e+015
+65 477 3.11593e+015
+343 463 3.11439e+015
+304 160 3.11382e+015
+377 85 3.11161e+015
+385 91 3.11141e+015
+491 58 3.10996e+015
+405 41 3.10294e+015
+298 138 3.10144e+015
+288 265 3.09256e+015
+215 289 3.08621e+015
+76 110 3.08516e+015
+352 425 3.08327e+015
+432 268 3.07953e+015
+464 115 3.07528e+015
+143 235 3.0746e+015
+566 144 3.07091e+015
+186 101 3.06926e+015
+413 81 3.06752e+015
+164 434 3.0649e+015
+61 78 3.06407e+015
+502 43 3.06109e+015
+72 235 3.05997e+015
+150 79 3.05769e+015
+375 88 3.05581e+015
+250 150 3.05283e+015
+82 100 3.04885e+015
+282 268 3.04868e+015
+112 354 3.04865e+015
+413 244 3.04143e+015
+526 383 3.0347e+015
+471 142 3.03301e+015
+506 61 3.02856e+015
+510 206 3.02811e+015
+266 401 3.02651e+015
+343 142 3.02387e+015
+35 200 3.01277e+015
+125 216 3.00824e+015
+190 133 2.99241e+015
+280 190 2.98257e+015
+248 260 2.98143e+015
+74 198 2.97949e+015
+97 456 2.97898e+015
+445 244 2.97696e+015
+361 48 2.97652e+015
+189 210 2.97488e+015
+528 30 2.97458e+015
+68 48 2.97445e+015
+509 442 2.97264e+015
+577 53 2.97216e+015
+323 29 2.97023e+015
+216 204 2.96959e+015
+362 453 2.96768e+015
+548 181 2.96728e+015
+356 24 2.96723e+015
+439 108 2.96237e+015
+325 258 2.96141e+015
+278 86 2.96081e+015
+224 125 2.95531e+015
+155 444 2.95231e+015
+464 354 2.95027e+015
+412 3 2.94807e+015
+98 164 2.94781e+015
+390 135 2.9453e+015
+391 325 2.94395e+015
+107 258 2.9439e+015
+498 463 2.9428e+015
+564 156 2.94016e+015
+227 72 2.93656e+015
+94 276 2.93132e+015
+178 1 2.93045e+015
+3 235 2.92459e+015
+402 259 2.92375e+015
+329 321 2.92186e+015
+106 263 2.91929e+015
+420 362 2.91923e+015
+94 367 2.9186e+015
+560 145 2.91761e+015
+180 270 2.91654e+015
+417 245 2.91483e+015
+444 114 2.91334e+015
+255 459 2.9103e+015
+430 151 2.90934e+015
+194 84 2.90609e+015
+578 81 2.90136e+015
+295 410 2.89958e+015
+584 346 2.89711e+015
+147 97 2.89463e+015
+71 407 2.89458e+015
+114 143 2.89119e+015
+322 104 2.88843e+015
+173 416 2.88627e+015
+275 51 2.88505e+015
+480 329 2.88332e+015
+268 92 2.8818e+015
+367 88 2.87988e+015
+166 379 2.87827e+015
+289 112 2.87696e+015
+242 33 2.86805e+015
+200 76 2.86799e+015
+68 316 2.86764e+015
+495 474 2.85949e+015
+550 223 2.85881e+015
+191 188 2.85766e+015
+66 26 2.85354e+015
+120 55 2.85331e+015
+437 25 2.84491e+015
+594 425 2.84083e+015
+272 68 2.83649e+015
+114 261 2.83237e+015
+541 21 2.83233e+015
+148 394 2.83003e+015
+26 44 2.82751e+015
+275 78 2.82588e+015
+51 39 2.82376e+015
+233 406 2.82369e+015
+350 273 2.82012e+015
+401 318 2.81892e+015
+412 416 2.81622e+015
+104 35 2.81035e+015
+375 225 2.80743e+015
+425 103 2.80576e+015
+150 151 2.80298e+015
+562 149 2.7984e+015
+268 119 2.79669e+015
+261 369 2.79396e+015
+280 121 2.78862e+015
+258 459 2.78591e+015
+250 192 2.7843e+015
+241 155 2.78421e+015
+299 87 2.78264e+015
+575 165 2.78068e+015
+22 131 2.77755e+015
+196 189 2.77523e+015
+286 246 2.7722e+015
+511 135 2.76856e+015
+200 30 2.76279e+015
+173 106 2.75798e+015
+207 405 2.75706e+015
+266 131 2.75653e+015
+509 140 2.7553e+015
+413 284 2.75387e+015
+307 428 2.75256e+015
+181 16 2.75155e+015
+386 88 2.7487e+015
+412 99 2.74468e+015
+70 22 2.7411e+015
+374 3 2.73928e+015
+183 382 2.73913e+015
+247 255 2.73329e+015
+127 109 2.73266e+015
+301 101 2.72978e+015
+486 239 2.72962e+015
+528 432 2.72956e+015
+258 370 2.72913e+015
+512 140 2.7279e+015
+232 288 2.72562e+015
+518 141 2.72528e+015
+309 33 2.72493e+015
+289 124 2.7247e+015
+33 260 2.72318e+015
+597 33 2.72298e+015
+287 167 2.72124e+015
+283 84 2.71966e+015
+184 166 2.71942e+015
+433 43 2.71779e+015
+423 372 2.71683e+015
+484 6 2.71383e+015
+530 115 2.71303e+015
+571 203 2.70978e+015
+413 144 2.70564e+015
+184 340 2.70559e+015
+150 135 2.70487e+015
+371 338 2.70241e+015
+54 453 2.69461e+015
+414 219 2.69051e+015
+236 416 2.69026e+015
+391 450 2.6891e+015
+298 409 2.68892e+015
+91 285 2.68532e+015
+577 310 2.68518e+015
+189 255 2.68504e+015
+134 80 2.68336e+015
+583 38 2.68273e+015
+282 211 2.68186e+015
+501 363 2.68137e+015
+385 65 2.67992e+015
+272 205 2.67577e+015
+155 161 2.67361e+015
+446 416 2.67267e+015
+133 91 2.67239e+015
+303 173 2.67083e+015
+444 128 2.67016e+015
+501 320 2.66744e+015
+148 91 2.66583e+015
+395 183 2.6624e+015
+36 76 2.66228e+015
+396 138 2.65629e+015
+54 330 2.65214e+015
+288 308 2.65054e+015
+250 154 2.64992e+015
+40 308 2.64913e+015
+302 87 2.64125e+015
+302 243 2.63261e+015
+196 167 2.63225e+015
+86 355 2.63167e+015
+236 403 2.63125e+015
+201 345 2.62993e+015
+444 444 2.6298e+015
+182 287 2.6288e+015
+513 403 2.62501e+015
+207 203 2.62465e+015
+261 327 2.62314e+015
+251 182 2.62037e+015
+145 140 2.61723e+015
+195 170 2.61144e+015
+182 202 2.60993e+015
+66 29 2.60975e+015
+387 419 2.60973e+015
+272 208 2.60905e+015
+371 118 2.60701e+015
+277 320 2.60637e+015
+149 312 2.60458e+015
+54 236 2.60093e+015
+212 134 2.59698e+015
+283 32 2.59378e+015
+128 307 2.58956e+015
+202 394 2.58638e+015
+476 398 2.58551e+015
+501 145 2.58519e+015
+390 130 2.58213e+015
+140 236 2.58184e+015
+485 359 2.57911e+015
+228 282 2.57776e+015
+568 202 2.57684e+015
+275 209 2.57385e+015
+476 81 2.57273e+015
+97 366 2.57251e+015
+480 205 2.57058e+015
+403 15 2.56307e+015
+405 11 2.56244e+015
+137 61 2.56196e+015
+47 204 2.55981e+015
+349 125 2.55972e+015
+283 265 2.55886e+015
+413 183 2.55869e+015
+481 101 2.55682e+015
+531 120 2.55646e+015
+582 446 2.55618e+015
+321 120 2.55384e+015
+204 419 2.5537e+015
+191 420 2.5536e+015
+240 327 2.55314e+015
+130 111 2.55284e+015
+545 181 2.55103e+015
+77 162 2.551e+015
+130 216 2.5447e+015
+218 128 2.54378e+015
+219 398 2.54296e+015
+242 220 2.54244e+015
+382 451 2.54211e+015
+483 241 2.542e+015
+268 219 2.53905e+015
+332 242 2.53628e+015
+67 323 2.53491e+015
+55 333 2.53108e+015
+183 378 2.53014e+015
+41 203 2.52845e+015
+126 73 2.52809e+015
+136 140 2.52593e+015
+231 364 2.52591e+015
+497 284 2.52483e+015
+146 235 2.52355e+015
+478 143 2.52161e+015
+338 182 2.52027e+015
+188 300 2.51665e+015
+90 94 2.51476e+015
+284 215 2.508e+015
+502 460 2.50721e+015
+187 324 2.50679e+015
+175 125 2.50622e+015
+47 255 2.50586e+015
+282 386 2.50561e+015
+57 137 2.50492e+015
+223 399 2.50451e+015
+264 321 2.50344e+015
+86 360 2.50265e+015
+463 224 2.50213e+015
+50 231 2.50204e+015
+469 108 2.50155e+015
+266 203 2.50019e+015
+476 6 2.49789e+015
+273 94 2.49787e+015
+564 141 2.49586e+015
+245 388 2.49457e+015
+268 137 2.49186e+015
+31 256 2.49032e+015
+175 120 2.4901e+015
+84 109 2.48981e+015
+14 47 2.48901e+015
+375 156 2.48798e+015
+80 406 2.48779e+015
+268 88 2.48634e+015
+578 48 2.48629e+015
+255 4 2.48277e+015
+288 135 2.48216e+015
+43 408 2.48163e+015
+335 405 2.48046e+015
+280 186 2.48042e+015
+4 33 2.47754e+015
+544 262 2.47645e+015
+511 298 2.47453e+015
+298 398 2.47126e+015
+383 22 2.46807e+015
+240 150 2.46792e+015
+299 256 2.46774e+015
+181 1 2.46771e+015
+69 305 2.46599e+015
+215 314 2.46395e+015
+346 34 2.46271e+015
+318 99 2.46164e+015
+157 24 2.46125e+015
+222 72 2.46106e+015
+166 150 2.45983e+015
+283 338 2.45952e+015
+264 55 2.45759e+015
+412 430 2.456e+015
+230 179 2.45526e+015
+60 148 2.45523e+015
+540 186 2.4552e+015
+419 79 2.45519e+015
+82 369 2.45423e+015
+25 201 2.45301e+015
+94 372 2.45173e+015
+468 318 2.45005e+015
+248 184 2.44822e+015
+199 98 2.44632e+015
+211 11 2.44234e+015
+326 29 2.44109e+015
+503 177 2.43936e+015
+494 340 2.43746e+015
+530 347 2.43656e+015
+435 182 2.43626e+015
+254 194 2.43435e+015
+217 429 2.43307e+015
+83 196 2.4321e+015
+306 258 2.43044e+015
+55 371 2.42716e+015
+67 202 2.427e+015
+450 416 2.42143e+015
+227 285 2.42095e+015
+576 57 2.42056e+015
+264 259 2.41751e+015
+244 187 2.40624e+015
+528 437 2.40205e+015
+460 376 2.402e+015
+69 258 2.40175e+015
+247 405 2.39657e+015
+186 270 2.39382e+015
+130 114 2.39366e+015
+424 261 2.38883e+015
+246 326 2.38506e+015
+113 338 2.38333e+015
+5 150 2.38224e+015
+393 135 2.38086e+015
+522 360 2.37815e+015
+124 341 2.37382e+015
+179 379 2.37139e+015
+333 330 2.37094e+015
+47 258 2.37073e+015
+135 58 2.36885e+015
+327 52 2.36784e+015
+479 455 2.3675e+015
+142 429 2.36727e+015
+64 312 2.36667e+015
+345 331 2.3655e+015
+397 46 2.36334e+015
+380 158 2.36212e+015
+389 290 2.35781e+015
+342 330 2.35756e+015
+94 124 2.3568e+015
+71 389 2.35548e+015
+246 35 2.35452e+015
+391 205 2.35239e+015
+540 181 2.34839e+015
+111 206 2.34748e+015
+545 86 2.34652e+015
+544 440 2.34609e+015
+166 430 2.34185e+015
+149 23 2.34075e+015
+239 215 2.33881e+015
+374 151 2.33805e+015
+433 227 2.33718e+015
+106 183 2.32916e+015
+269 260 2.32747e+015
+48 131 2.32626e+015
+552 181 2.32387e+015
+576 134 2.32188e+015
+180 141 2.32028e+015
+274 121 2.31373e+015
+303 372 2.30733e+015
+212 162 2.30646e+015
+184 116 2.30518e+015
+242 244 2.30493e+015
+284 77 2.30458e+015
+381 88 2.3028e+015
+107 382 2.29994e+015
+148 192 2.2993e+015
+537 397 2.296e+015
+445 247 2.29595e+015
+156 79 2.294e+015
+443 351 2.29391e+015
+376 145 2.29276e+015
+277 427 2.29241e+015
+20 316 2.29217e+015
+205 345 2.29082e+015
+235 220 2.28852e+015
+391 97 2.28842e+015
+405 76 2.28727e+015
+206 236 2.28552e+015
+248 346 2.28478e+015
+518 17 2.28306e+015
+187 167 2.28212e+015
+130 409 2.28177e+015
+433 122 2.28031e+015
+119 170 2.27987e+015
+446 293 2.27941e+015
+373 144 2.27747e+015
+402 101 2.27662e+015
+57 101 2.26839e+015
+476 268 2.26775e+015
+286 350 2.264e+015
+45 122 2.26265e+015
+168 414 2.26251e+015
+105 111 2.26163e+015
+450 325 2.26103e+015
+351 12 2.25848e+015
+303 403 2.25786e+015
+195 77 2.25755e+015
+567 60 2.25684e+015
+210 307 2.25672e+015
+478 221 2.25663e+015
+254 191 2.25273e+015
+191 122 2.25262e+015
+573 4 2.25196e+015
+500 104 2.25177e+015
+359 135 2.25015e+015
+310 220 2.24882e+015
+548 281 2.24655e+015
+556 381 2.24584e+015
+334 282 2.24407e+015
+74 61 2.24314e+015
+14 236 2.24295e+015
+259 330 2.24147e+015
+338 47 2.2408e+015
+387 102 2.23839e+015
+216 329 2.2378e+015
+198 466 2.23722e+015
+565 176 2.23636e+015
+525 281 2.23466e+015
+353 24 2.23412e+015
+151 316 2.23225e+015
+342 311 2.23107e+015
+185 304 2.23061e+015
+37 167 2.22452e+015
+476 271 2.21687e+015
+129 117 2.21553e+015
+71 49 2.21397e+015
+313 32 2.21282e+015
+550 139 2.21046e+015
+344 322 2.21024e+015
+494 459 2.2095e+015
+450 197 2.20494e+015
+213 326 2.20297e+015
+151 91 2.20266e+015
+111 430 2.20096e+015
+276 194 2.19938e+015
+568 38 2.19804e+015
+502 122 2.19734e+015
+453 378 2.19632e+015
+547 302 2.1924e+015
+27 169 2.19124e+015
+309 55 2.18978e+015
+203 200 2.18947e+015
+193 87 2.1894e+015
+460 422 2.18864e+015
+373 125 2.1835e+015
+281 36 2.18274e+015
+142 432 2.1818e+015
+419 411 2.18024e+015
+226 424 2.17766e+015
+573 56 2.17509e+015
+241 144 2.17338e+015
+282 145 2.1703e+015
+343 370 2.16777e+015
+415 98 2.1674e+015
+560 268 2.16646e+015
+556 245 2.15936e+015
+593 105 2.15835e+015
+117 290 2.15614e+015
+145 24 2.15585e+015
+513 303 2.15521e+015
+346 327 2.1549e+015
+431 25 2.1549e+015
+160 347 2.1535e+015
+347 414 2.15202e+015
+418 98 2.15199e+015
+44 253 2.15181e+015
+260 271 2.14759e+015
+170 219 2.14684e+015
+520 242 2.14553e+015
+271 355 2.1449e+015
+600 274 2.14138e+015
+157 194 2.1401e+015
+139 140 2.13816e+015
+162 191 2.13467e+015
+509 365 2.13467e+015
+374 451 2.13358e+015
+259 108 2.13008e+015
+130 412 2.12978e+015
+121 214 2.1239e+015
+157 122 2.1226e+015
+569 141 2.12092e+015
+240 315 2.11616e+015
+437 228 2.11473e+015
+290 184 2.1141e+015
+319 452 2.11375e+015
+267 108 2.11372e+015
+189 269 2.11051e+015
+355 105 2.10836e+015
+433 1 2.1069e+015
+205 22 2.10664e+015
+128 81 2.10596e+015
+203 203 2.10531e+015
+308 166 2.10501e+015
+199 115 2.1035e+015
+133 412 2.10164e+015
+360 443 2.09998e+015
+484 235 2.09969e+015
+464 377 2.09907e+015
+200 8 2.09831e+015
+315 124 2.09816e+015
+32 79 2.09275e+015
+349 270 2.08915e+015
+355 425 2.08893e+015
+393 11 2.0885e+015
+186 72 2.08831e+015
+15 212 2.08793e+015
+597 273 2.0864e+015
+20 254 2.08588e+015
+344 186 2.08396e+015
+95 387 2.08205e+015
+95 285 2.08175e+015
+539 79 2.08133e+015
+498 242 2.08113e+015
+361 321 2.0805e+015
+519 180 2.07663e+015
+557 475 2.07659e+015
+534 143 2.07587e+015
+202 404 2.07242e+015
+63 258 2.07131e+015
+474 451 2.07065e+015
+453 94 2.06947e+015
+142 257 2.06928e+015
+322 423 2.06916e+015
+277 264 2.06907e+015
+371 335 2.06826e+015
+511 352 2.06716e+015
+167 187 2.06698e+015
+183 57 2.06343e+015
+244 180 2.05941e+015
+458 164 2.05924e+015
+383 145 2.05854e+015
+527 267 2.0548e+015
+97 29 2.0545e+015
+141 143 2.0469e+015
+279 33 2.04645e+015
+575 333 2.04404e+015
+127 331 2.04303e+015
+213 204 2.04105e+015
+466 213 2.03896e+015
+576 37 2.03877e+015
+57 302 2.03668e+015
+217 413 2.03485e+015
+567 224 2.03417e+015
+463 187 2.03365e+015
+101 29 2.03358e+015
+335 28 2.03225e+015
+424 106 2.03141e+015
+556 366 2.03014e+015
+25 256 2.02872e+015
+359 125 2.02578e+015
+386 25 2.02456e+015
+288 31 2.02276e+015
+297 401 2.02187e+015
+9 222 2.02029e+015
+456 418 2.01978e+015
+36 233 2.01958e+015
+359 27 2.01941e+015
+83 275 2.01639e+015
+40 200 2.01143e+015
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_7_3.txt b/test_data/harriscorners/hc_msc_3.00_0.15_7_3.txt
new file mode 100644
index 0000000..f440318
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_7_3.txt
@@ -0,0 +1,869 @@
+868
+245 95 8.29987e+019
+363 401 6.31582e+019
+274 366 6.21795e+019
+499 1 5.06707e+019
+251 13 4.65892e+019
+240 90 3.97539e+019
+122 44 3.67023e+019
+131 36 3.64636e+019
+507 122 3.63828e+019
+449 298 3.33565e+019
+65 343 3.30421e+019
+261 297 3.15072e+019
+344 10 3.1281e+019
+465 394 2.93093e+019
+200 16 2.89419e+019
+59 219 2.88975e+019
+282 115 2.87339e+019
+418 440 2.87042e+019
+446 396 2.82962e+019
+130 2 2.75483e+019
+480 298 2.55476e+019
+110 238 2.5223e+019
+427 320 2.4938e+019
+387 10 2.46049e+019
+387 178 2.42342e+019
+125 199 2.41836e+019
+456 280 2.41094e+019
+553 40 2.40732e+019
+271 166 2.4e+019
+37 62 2.3961e+019
+448 262 2.38667e+019
+144 309 2.3349e+019
+239 18 2.31203e+019
+479 19 2.24661e+019
+213 72 2.22864e+019
+435 68 2.22013e+019
+520 61 2.21936e+019
+72 24 2.21809e+019
+183 400 2.20096e+019
+411 354 2.1967e+019
+355 220 2.19571e+019
+423 181 2.16989e+019
+77 257 2.14745e+019
+271 71 2.12549e+019
+543 365 2.12376e+019
+46 28 2.12018e+019
+462 279 2.06096e+019
+135 214 2.03358e+019
+102 4 2.03114e+019
+101 58 2.02767e+019
+510 122 2.02325e+019
+233 15 1.9954e+019
+303 183 1.99147e+019
+512 167 1.97006e+019
+35 146 1.95473e+019
+421 334 1.94648e+019
+432 146 1.93837e+019
+263 441 1.9352e+019
+392 144 1.93377e+019
+300 52 1.92231e+019
+425 377 1.91266e+019
+510 173 1.90584e+019
+224 419 1.89032e+019
+514 76 1.88629e+019
+255 387 1.88492e+019
+402 122 1.88196e+019
+111 393 1.87212e+019
+242 71 1.87178e+019
+262 165 1.86869e+019
+58 183 1.86452e+019
+4 66 1.84871e+019
+29 8 1.84801e+019
+309 372 1.83732e+019
+177 106 1.83031e+019
+74 6 1.82426e+019
+390 58 1.82258e+019
+439 339 1.81548e+019
+236 20 1.79696e+019
+348 179 1.78916e+019
+512 341 1.77754e+019
+41 297 1.77753e+019
+498 82 1.75934e+019
+304 216 1.74912e+019
+239 349 1.72909e+019
+35 137 1.72645e+019
+482 365 1.71904e+019
+300 265 1.70241e+019
+137 203 1.6803e+019
+385 221 1.67419e+019
+293 15 1.65908e+019
+453 340 1.65294e+019
+358 260 1.6438e+019
+382 8 1.60801e+019
+125 255 1.60471e+019
+280 112 1.58647e+019
+26 9 1.57474e+019
+138 110 1.56045e+019
+124 362 1.55557e+019
+372 163 1.5543e+019
+388 221 1.54795e+019
+64 234 1.54079e+019
+550 379 1.53762e+019
+192 331 1.53381e+019
+324 341 1.53067e+019
+167 286 1.52911e+019
+327 342 1.51556e+019
+245 143 1.51277e+019
+348 241 1.50524e+019
+301 186 1.49496e+019
+64 60 1.49356e+019
+412 256 1.48233e+019
+545 168 1.48086e+019
+264 298 1.48075e+019
+181 111 1.46702e+019
+419 180 1.46544e+019
+391 61 1.46153e+019
+525 60 1.43649e+019
+542 18 1.43116e+019
+81 3 1.42908e+019
+327 127 1.42767e+019
+312 149 1.4255e+019
+334 436 1.42445e+019
+378 353 1.40935e+019
+66 214 1.39588e+019
+132 26 1.39494e+019
+562 147 1.39424e+019
+210 445 1.39316e+019
+139 173 1.39137e+019
+434 398 1.38655e+019
+92 197 1.38388e+019
+360 131 1.36976e+019
+170 57 1.36779e+019
+82 29 1.35208e+019
+577 15 1.3483e+019
+249 363 1.34681e+019
+66 320 1.33162e+019
+328 142 1.32414e+019
+248 93 1.31669e+019
+282 403 1.31653e+019
+510 455 1.31389e+019
+221 15 1.3126e+019
+360 294 1.30786e+019
+53 43 1.30625e+019
+277 352 1.30597e+019
+228 292 1.30431e+019
+127 75 1.30325e+019
+512 125 1.29815e+019
+356 268 1.29578e+019
+567 43 1.2946e+019
+345 241 1.29423e+019
+542 210 1.28154e+019
+360 337 1.27951e+019
+203 310 1.2787e+019
+248 404 1.27478e+019
+514 223 1.27219e+019
+36 175 1.27045e+019
+522 122 1.2672e+019
+206 224 1.26706e+019
+387 243 1.26188e+019
+424 320 1.25327e+019
+233 162 1.251e+019
+225 221 1.2491e+019
+451 376 1.24894e+019
+482 327 1.24831e+019
+503 361 1.24172e+019
+481 179 1.23634e+019
+177 260 1.23535e+019
+338 165 1.23388e+019
+302 205 1.23315e+019
+528 98 1.23197e+019
+345 109 1.22397e+019
+140 204 1.22352e+019
+31 219 1.222e+019
+416 23 1.20866e+019
+355 320 1.20673e+019
+12 101 1.20216e+019
+46 147 1.19846e+019
+449 219 1.19809e+019
+270 279 1.1863e+019
+279 222 1.18536e+019
+68 149 1.18293e+019
+123 272 1.18002e+019
+162 214 1.17908e+019
+223 38 1.17801e+019
+192 219 1.17293e+019
+55 31 1.17166e+019
+328 66 1.17155e+019
+475 22 1.1711e+019
+512 295 1.1625e+019
+191 359 1.15984e+019
+48 100 1.15341e+019
+42 339 1.14968e+019
+533 183 1.14342e+019
+342 337 1.1425e+019
+169 198 1.13877e+019
+97 447 1.13821e+019
+484 179 1.12997e+019
+512 128 1.12707e+019
+343 7 1.12688e+019
+472 63 1.12629e+019
+114 345 1.12611e+019
+283 72 1.12464e+019
+408 352 1.12035e+019
+403 188 1.10715e+019
+91 292 1.10304e+019
+45 81 1.09887e+019
+524 20 1.09808e+019
+164 242 1.09698e+019
+512 98 1.09051e+019
+220 178 1.08538e+019
+395 260 1.07925e+019
+358 10 1.0781e+019
+360 217 1.07374e+019
+232 200 1.0729e+019
+99 221 1.07074e+019
+529 24 1.06368e+019
+38 172 1.06295e+019
+124 41 1.06198e+019
+37 296 1.06176e+019
+272 130 1.05809e+019
+422 44 1.05803e+019
+246 294 1.05371e+019
+136 206 1.05075e+019
+115 392 1.04512e+019
+541 99 1.0408e+019
+456 83 1.03975e+019
+264 445 1.03763e+019
+33 99 1.0334e+019
+422 398 1.02864e+019
+340 13 1.0267e+019
+236 92 1.02378e+019
+187 99 1.01632e+019
+449 178 1.01258e+019
+321 312 1.01109e+019
+470 239 1.00193e+019
+101 77 1.00148e+019
+526 223 1.00128e+019
+132 148 9.96132e+018
+408 63 9.94548e+018
+387 295 9.93554e+018
+367 247 9.92399e+018
+263 201 9.92195e+018
+55 294 9.91961e+018
+157 73 9.9176e+018
+165 218 9.91456e+018
+113 213 9.89036e+018
+177 93 9.84234e+018
+413 299 9.83522e+018
+57 364 9.79893e+018
+85 214 9.79349e+018
+298 70 9.78146e+018
+127 165 9.74652e+018
+546 365 9.70629e+018
+68 27 9.70054e+018
+486 182 9.69527e+018
+72 97 9.66968e+018
+433 110 9.66629e+018
+195 58 9.6552e+018
+37 288 9.65441e+018
+229 35 9.64947e+018
+15 219 9.60826e+018
+147 21 9.56221e+018
+242 100 9.55146e+018
+88 148 9.53962e+018
+455 284 9.53724e+018
+347 393 9.5192e+018
+326 426 9.47138e+018
+451 337 9.4539e+018
+236 163 9.45169e+018
+289 137 9.42787e+018
+526 38 9.41141e+018
+281 51 9.3576e+018
+528 188 9.35476e+018
+9 101 9.32829e+018
+254 138 9.311e+018
+452 205 9.30687e+018
+542 130 9.29466e+018
+275 181 9.29065e+018
+484 338 9.24613e+018
+86 255 9.2383e+018
+497 228 9.19755e+018
+159 138 9.17975e+018
+115 44 9.15714e+018
+105 4 9.15425e+018
+87 209 9.12236e+018
+44 10 9.1167e+018
+432 83 9.11165e+018
+513 220 9.10413e+018
+379 69 9.10307e+018
+273 297 9.10229e+018
+342 106 9.08825e+018
+110 96 9.07083e+018
+49 153 9.05899e+018
+41 64 9.04567e+018
+245 14 9.03061e+018
+317 148 9.01125e+018
+57 290 9.00075e+018
+525 345 8.96833e+018
+358 64 8.92242e+018
+230 266 8.91446e+018
+382 411 8.90609e+018
+312 7 8.89761e+018
+135 129 8.85472e+018
+350 145 8.85053e+018
+196 82 8.81065e+018
+141 394 8.77839e+018
+56 5 8.76264e+018
+208 451 8.75751e+018
+306 192 8.75105e+018
+103 392 8.73581e+018
+255 182 8.71918e+018
+365 251 8.71353e+018
+408 182 8.6647e+018
+212 182 8.65731e+018
+314 82 8.64074e+018
+366 143 8.63639e+018
+584 38 8.63378e+018
+547 40 8.62703e+018
+351 320 8.61508e+018
+529 102 8.57277e+018
+306 439 8.56546e+018
+108 183 8.54742e+018
+478 12 8.54357e+018
+100 162 8.52508e+018
+511 101 8.5212e+018
+273 281 8.48993e+018
+173 40 8.4817e+018
+526 101 8.47792e+018
+435 281 8.47692e+018
+545 4 8.46875e+018
+403 6 8.45169e+018
+156 318 8.42597e+018
+35 201 8.41892e+018
+377 119 8.40704e+018
+254 422 8.40647e+018
+244 165 8.39951e+018
+389 140 8.37756e+018
+181 380 8.33603e+018
+351 271 8.29222e+018
+18 343 8.27106e+018
+328 253 8.26364e+018
+170 18 8.25974e+018
+478 16 8.23611e+018
+221 182 8.23147e+018
+124 252 8.21078e+018
+294 26 8.19957e+018
+224 183 8.19636e+018
+597 272 8.17663e+018
+301 164 8.17016e+018
+141 2 8.14181e+018
+481 182 8.14175e+018
+545 57 8.11629e+018
+338 391 8.11212e+018
+286 166 8.10819e+018
+33 140 8.0866e+018
+333 89 8.07445e+018
+175 109 8.07328e+018
+183 19 8.05781e+018
+465 197 8.0511e+018
+158 143 8.02439e+018
+379 7 8.01621e+018
+181 394 7.99991e+018
+418 68 7.99389e+018
+390 296 7.98428e+018
+280 128 7.98066e+018
+6 45 7.96696e+018
+63 219 7.95593e+018
+82 136 7.94451e+018
+520 64 7.92035e+018
+259 71 7.88672e+018
+140 183 7.87541e+018
+58 74 7.85317e+018
+259 201 7.79851e+018
+541 124 7.78833e+018
+157 55 7.75517e+018
+195 16 7.73758e+018
+259 221 7.72042e+018
+38 147 7.71546e+018
+37 141 7.70688e+018
+362 360 7.68274e+018
+391 324 7.68137e+018
+104 359 7.66655e+018
+506 203 7.66479e+018
+208 54 7.6547e+018
+153 225 7.65066e+018
+329 9 7.60116e+018
+107 40 7.57867e+018
+307 448 7.56713e+018
+571 448 7.51864e+018
+484 59 7.51587e+018
+110 264 7.49294e+018
+411 162 7.49047e+018
+398 169 7.49043e+018
+110 46 7.48868e+018
+220 107 7.48711e+018
+568 383 7.45102e+018
+386 292 7.45078e+018
+4 63 7.4432e+018
+500 224 7.43127e+018
+508 7 7.42205e+018
+22 61 7.42167e+018
+537 458 7.41984e+018
+576 178 7.39841e+018
+392 165 7.39169e+018
+537 186 7.39154e+018
+413 21 7.38743e+018
+127 252 7.37666e+018
+243 190 7.36138e+018
+33 172 7.35515e+018
+418 300 7.32907e+018
+420 81 7.30744e+018
+444 453 7.27809e+018
+268 288 7.27711e+018
+363 9 7.27078e+018
+324 314 7.27035e+018
+252 141 7.26481e+018
+248 218 7.24343e+018
+292 311 7.24247e+018
+290 49 7.23539e+018
+144 187 7.2072e+018
+521 263 7.20492e+018
+481 338 7.20474e+018
+371 392 7.17633e+018
+598 364 7.16063e+018
+393 46 7.15866e+018
+48 97 7.15068e+018
+7 11 7.1459e+018
+490 343 7.14412e+018
+267 297 7.14112e+018
+457 375 7.1258e+018
+530 183 7.12096e+018
+374 393 7.11224e+018
+38 219 7.11013e+018
+561 320 7.09749e+018
+48 25 7.09471e+018
+406 375 7.07361e+018
+84 476 7.07352e+018
+507 164 7.07035e+018
+163 277 7.04762e+018
+357 334 7.03488e+018
+94 219 7.03191e+018
+515 347 7.02897e+018
+514 382 7.00906e+018
+9 76 6.99607e+018
+137 138 6.99229e+018
+45 97 6.99097e+018
+528 362 6.97571e+018
+371 90 6.95145e+018
+287 33 6.93652e+018
+162 207 6.93476e+018
+464 391 6.91543e+018
+525 425 6.89477e+018
+438 304 6.89326e+018
+198 131 6.87786e+018
+369 162 6.87639e+018
+281 132 6.87017e+018
+344 197 6.83864e+018
+320 225 6.82907e+018
+475 342 6.82348e+018
+517 16 6.81707e+018
+265 32 6.81223e+018
+357 282 6.79951e+018
+276 221 6.76602e+018
+239 422 6.76382e+018
+297 332 6.74483e+018
+156 1 6.74295e+018
+245 206 6.73828e+018
+560 81 6.73692e+018
+100 199 6.73534e+018
+184 35 6.73128e+018
+186 401 6.70926e+018
+475 262 6.70052e+018
+250 32 6.6848e+018
+151 307 6.65405e+018
+380 25 6.65164e+018
+488 262 6.64421e+018
+338 473 6.6414e+018
+557 39 6.6282e+018
+408 67 6.6276e+018
+425 333 6.62416e+018
+325 165 6.60706e+018
+97 79 6.5987e+018
+421 48 6.59663e+018
+210 437 6.58414e+018
+502 143 6.58152e+018
+277 370 6.56472e+018
+511 43 6.55615e+018
+131 255 6.54071e+018
+297 410 6.53454e+018
+122 52 6.52882e+018
+65 371 6.52107e+018
+345 351 6.50846e+018
+358 143 6.50363e+018
+482 331 6.50157e+018
+449 446 6.48873e+018
+412 64 6.48058e+018
+187 34 6.47419e+018
+131 476 6.47187e+018
+116 184 6.44879e+018
+204 435 6.44684e+018
+285 212 6.42344e+018
+68 304 6.39205e+018
+439 455 6.3786e+018
+216 54 6.36956e+018
+181 291 6.36852e+018
+537 392 6.35609e+018
+124 261 6.35099e+018
+209 36 6.34713e+018
+179 329 6.34327e+018
+417 7 6.3379e+018
+173 94 6.31455e+018
+283 206 6.3143e+018
+274 369 6.30463e+018
+417 450 6.3014e+018
+572 328 6.29612e+018
+248 145 6.28161e+018
+210 154 6.27036e+018
+250 423 6.27018e+018
+374 241 6.26639e+018
+324 90 6.25283e+018
+492 140 6.25216e+018
+42 24 6.24789e+018
+70 478 6.23877e+018
+539 40 6.22031e+018
+240 97 6.21488e+018
+445 127 6.21473e+018
+84 78 6.21352e+018
+216 280 6.20378e+018
+216 175 6.1969e+018
+277 329 6.19529e+018
+85 59 6.18791e+018
+211 33 6.18637e+018
+449 167 6.18573e+018
+285 297 6.17726e+018
+378 339 6.1771e+018
+46 354 6.12955e+018
+122 255 6.12315e+018
+106 62 6.10747e+018
+30 135 6.10255e+018
+323 260 6.088e+018
+357 296 6.08613e+018
+348 299 6.07384e+018
+206 159 6.06629e+018
+357 125 6.05967e+018
+492 59 6.0501e+018
+177 18 6.04843e+018
+146 160 6.0457e+018
+214 59 6.01688e+018
+492 182 5.99995e+018
+123 185 5.99329e+018
+101 236 5.98858e+018
+471 212 5.97695e+018
+545 217 5.95716e+018
+404 13 5.94121e+018
+274 76 5.92397e+018
+313 85 5.91766e+018
+508 19 5.907e+018
+290 264 5.90568e+018
+77 8 5.90487e+018
+336 317 5.87058e+018
+356 128 5.86296e+018
+330 89 5.85978e+018
+247 318 5.85345e+018
+260 368 5.85108e+018
+30 96 5.83988e+018
+441 98 5.83824e+018
+289 212 5.83043e+018
+545 43 5.8245e+018
+358 53 5.81415e+018
+129 309 5.81188e+018
+91 256 5.79594e+018
+54 66 5.79535e+018
+366 7 5.79429e+018
+444 23 5.78502e+018
+16 214 5.78354e+018
+129 238 5.7806e+018
+412 24 5.77644e+018
+272 53 5.76507e+018
+81 77 5.75974e+018
+188 264 5.75556e+018
+368 337 5.74349e+018
+513 402 5.7285e+018
+248 315 5.72799e+018
+451 263 5.72217e+018
+364 106 5.69916e+018
+332 333 5.6914e+018
+154 114 5.68434e+018
+115 306 5.67851e+018
+164 358 5.67247e+018
+497 79 5.66516e+018
+480 403 5.66342e+018
+496 462 5.6605e+018
+458 266 5.66049e+018
+429 88 5.64736e+018
+516 202 5.63057e+018
+561 71 5.6277e+018
+324 145 5.62223e+018
+239 202 5.61179e+018
+266 403 5.61168e+018
+179 103 5.60659e+018
+236 221 5.58958e+018
+275 318 5.5894e+018
+317 107 5.56324e+018
+328 288 5.56049e+018
+364 255 5.54631e+018
+398 358 5.5436e+018
+280 420 5.53429e+018
+530 366 5.51392e+018
+107 58 5.51314e+018
+321 10 5.5067e+018
+309 7 5.49114e+018
+472 421 5.48004e+018
+88 354 5.46611e+018
+395 105 5.44622e+018
+117 428 5.44148e+018
+235 346 5.4319e+018
+184 94 5.41307e+018
+428 224 5.40874e+018
+148 131 5.39908e+018
+62 203 5.39641e+018
+379 66 5.39264e+018
+252 74 5.38864e+018
+450 22 5.38829e+018
+56 373 5.38488e+018
+523 186 5.38204e+018
+289 167 5.37964e+018
+439 24 5.37163e+018
+44 62 5.37126e+018
+210 395 5.36517e+018
+241 59 5.3583e+018
+469 139 5.35293e+018
+246 106 5.35099e+018
+560 229 5.34579e+018
+358 393 5.34376e+018
+114 3 5.3381e+018
+45 407 5.33067e+018
+135 238 5.32654e+018
+115 77 5.3222e+018
+533 122 5.32197e+018
+75 132 5.31661e+018
+83 404 5.31617e+018
+282 393 5.31221e+018
+497 160 5.30359e+018
+341 263 5.29559e+018
+39 168 5.29356e+018
+436 91 5.29061e+018
+227 185 5.28239e+018
+415 164 5.27202e+018
+386 327 5.26954e+018
+164 328 5.2683e+018
+296 420 5.25384e+018
+243 209 5.2427e+018
+84 310 5.24061e+018
+32 66 5.23854e+018
+155 195 5.22984e+018
+136 21 5.2274e+018
+366 2 5.20477e+018
+10 218 5.20317e+018
+390 448 5.19654e+018
+432 268 5.19633e+018
+3 155 5.19445e+018
+50 452 5.18844e+018
+160 183 5.18355e+018
+137 98 5.16795e+018
+274 215 5.1516e+018
+224 218 5.13728e+018
+74 186 5.13309e+018
+479 451 5.12978e+018
+540 140 5.12616e+018
+540 405 5.1227e+018
+46 219 5.11892e+018
+463 23 5.11198e+018
+232 274 5.10285e+018
+43 474 5.10246e+018
+403 265 5.10039e+018
+512 95 5.09822e+018
+437 466 5.09387e+018
+113 356 5.08853e+018
+159 112 5.0851e+018
+99 195 5.08121e+018
+471 268 5.07774e+018
+317 385 5.07671e+018
+167 326 5.07527e+018
+333 413 5.07362e+018
+190 146 5.07152e+018
+569 39 5.05775e+018
+475 5 5.05733e+018
+162 211 5.05689e+018
+29 12 5.03995e+018
+140 98 5.03971e+018
+361 221 5.01835e+018
+430 1 5.01349e+018
+413 4 5.0133e+018
+370 107 5.01297e+018
+190 322 5.0016e+018
+108 28 4.98819e+018
+52 153 4.98359e+018
+109 428 4.97984e+018
+475 161 4.97956e+018
+50 160 4.97852e+018
+95 450 4.97696e+018
+242 199 4.97571e+018
+29 236 4.96923e+018
+94 6 4.9683e+018
+256 405 4.96801e+018
+134 132 4.95246e+018
+554 378 4.95161e+018
+18 236 4.94787e+018
+243 419 4.93751e+018
+559 271 4.93177e+018
+87 78 4.92218e+018
+505 381 4.92217e+018
+126 308 4.91257e+018
+122 216 4.91238e+018
+189 205 4.90974e+018
+407 162 4.90237e+018
+564 16 4.90122e+018
+390 48 4.89595e+018
+113 95 4.89447e+018
+164 18 4.89401e+018
+186 19 4.89266e+018
+258 237 4.8776e+018
+127 186 4.86718e+018
+450 91 4.84284e+018
+438 239 4.82017e+018
+342 123 4.81232e+018
+198 55 4.80898e+018
+108 324 4.80803e+018
+184 318 4.79947e+018
+186 291 4.79827e+018
+447 245 4.79343e+018
+35 66 4.79241e+018
+68 96 4.77555e+018
+270 62 4.77418e+018
+461 220 4.76933e+018
+90 376 4.76657e+018
+463 39 4.7665e+018
+310 33 4.75855e+018
+365 200 4.75753e+018
+375 341 4.75386e+018
+47 11 4.75282e+018
+309 356 4.74917e+018
+436 386 4.74765e+018
+412 220 4.74606e+018
+77 77 4.73806e+018
+268 68 4.73023e+018
+211 58 4.72625e+018
+51 292 4.72516e+018
+88 183 4.71407e+018
+441 320 4.71071e+018
+256 35 4.7056e+018
+121 447 4.70292e+018
+391 52 4.70108e+018
+526 398 4.69518e+018
+219 100 4.69039e+018
+342 465 4.68718e+018
+327 182 4.68111e+018
+575 126 4.67829e+018
+500 318 4.66777e+018
+60 254 4.6638e+018
+282 351 4.65695e+018
+215 425 4.64717e+018
+78 81 4.62116e+018
+539 95 4.61206e+018
+221 339 4.61167e+018
+199 110 4.61108e+018
+186 288 4.60441e+018
+536 103 4.59427e+018
+466 102 4.58914e+018
+291 30 4.58084e+018
+274 206 4.57837e+018
+267 52 4.56963e+018
+548 45 4.55945e+018
+524 172 4.55341e+018
+174 116 4.54913e+018
+23 322 4.54542e+018
+11 83 4.5385e+018
+222 239 4.52727e+018
+418 282 4.51005e+018
+545 91 4.50959e+018
+173 56 4.50071e+018
+220 150 4.49892e+018
+41 9 4.48967e+018
+90 289 4.48542e+018
+479 294 4.48499e+018
+363 129 4.48419e+018
+175 239 4.48408e+018
+478 263 4.47044e+018
+416 86 4.46716e+018
+547 162 4.46663e+018
+438 378 4.46553e+018
+408 45 4.46153e+018
+70 409 4.46112e+018
+514 122 4.44885e+018
+394 162 4.44647e+018
+386 63 4.44498e+018
+150 38 4.44265e+018
+272 289 4.43904e+018
+481 341 4.4348e+018
+527 395 4.42923e+018
+317 167 4.42374e+018
+18 319 4.41603e+018
+219 316 4.41173e+018
+142 179 4.41161e+018
+527 80 4.40428e+018
+182 133 4.3973e+018
+146 452 4.39419e+018
+100 95 4.39304e+018
+488 139 4.38931e+018
+49 147 4.387e+018
+383 261 4.38581e+018
+428 118 4.38264e+018
+164 381 4.37407e+018
+247 346 4.36584e+018
+82 74 4.36506e+018
+262 216 4.36064e+018
+347 120 4.35765e+018
+261 142 4.35375e+018
+281 417 4.35057e+018
+178 164 4.33755e+018
+117 360 4.33547e+018
+326 13 4.33496e+018
+254 10 4.32877e+018
+516 141 4.32512e+018
+344 48 4.31925e+018
+187 182 4.31516e+018
+512 262 4.3128e+018
+262 392 4.30796e+018
+137 56 4.30305e+018
+431 275 4.29548e+018
+571 456 4.29406e+018
+88 369 4.29166e+018
+305 363 4.2855e+018
+172 449 4.2802e+018
+377 461 4.27793e+018
+286 72 4.27611e+018
+108 136 4.26324e+018
+168 242 4.26276e+018
+150 222 4.25872e+018
+206 162 4.2579e+018
+57 332 4.25619e+018
+570 183 4.25613e+018
+406 141 4.25598e+018
+390 332 4.25218e+018
+221 72 4.2473e+018
+149 231 4.24566e+018
+226 180 4.24072e+018
+392 293 4.24038e+018
+157 40 4.2399e+018
+214 123 4.23793e+018
+509 2 4.22769e+018
+395 23 4.2103e+018
+359 160 4.21014e+018
+356 341 4.2088e+018
+533 340 4.20744e+018
+239 195 4.20009e+018
+173 313 4.20007e+018
+203 293 4.18806e+018
+400 319 4.18437e+018
+271 414 4.17868e+018
+107 74 4.17825e+018
+118 76 4.17648e+018
+141 324 4.17371e+018
+75 235 4.16998e+018
+165 111 4.16993e+018
+571 451 4.16411e+018
+34 113 4.16114e+018
+430 44 4.15713e+018
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_7_5.txt b/test_data/harriscorners/hc_msc_3.00_0.15_7_5.txt
new file mode 100644
index 0000000..df3fa33
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_7_5.txt
@@ -0,0 +1,1242 @@
+1241
+273 365 3.59215e+020
+261 297 3.36972e+020
+237 20 3.11225e+020
+246 95 2.98616e+020
+543 365 2.85984e+020
+362 401 2.83266e+020
+27 9 2.80065e+020
+281 113 2.72669e+020
+65 343 2.67265e+020
+77 257 2.65123e+020
+465 393 2.52392e+020
+423 178 2.41726e+020
+82 29 2.36819e+020
+37 62 2.36681e+020
+195 58 2.13449e+020
+427 320 2.07029e+020
+344 9 2.05175e+020
+59 218 2.03209e+020
+131 26 1.99713e+020
+388 10 1.98142e+020
+448 297 1.93475e+020
+81 4 1.87918e+020
+131 36 1.86591e+020
+510 124 1.85929e+020
+320 225 1.82441e+020
+251 13 1.81183e+020
+33 99 1.81181e+020
+127 165 1.77555e+020
+200 17 1.74464e+020
+418 440 1.69567e+020
+358 260 1.6869e+020
+225 420 1.68613e+020
+447 397 1.68453e+020
+507 122 1.67511e+020
+360 295 1.66627e+020
+242 71 1.65665e+020
+257 384 1.65607e+020
+552 40 1.64556e+020
+484 338 1.63559e+020
+128 2 1.63554e+020
+452 339 1.61635e+020
+239 91 1.60731e+020
+153 223 1.57368e+020
+512 341 1.56245e+020
+529 24 1.5494e+020
+456 280 1.54584e+020
+390 60 1.53679e+020
+122 43 1.53424e+020
+131 1 1.52669e+020
+387 178 1.50331e+020
+448 262 1.47583e+020
+294 15 1.4582e+020
+389 57 1.41699e+020
+419 180 1.41204e+020
+300 52 1.39634e+020
+138 110 1.39341e+020
+263 441 1.37057e+020
+33 138 1.3576e+020
+343 338 1.35264e+020
+356 220 1.33461e+020
+511 167 1.32498e+020
+302 182 1.31624e+020
+137 203 1.31175e+020
+181 111 1.30632e+020
+101 222 1.30516e+020
+302 185 1.30065e+020
+183 400 1.29627e+020
+533 184 1.29156e+020
+483 179 1.28258e+020
+37 145 1.26692e+020
+4 65 1.2631e+020
+519 61 1.23756e+020
+404 121 1.20971e+020
+544 168 1.20893e+020
+57 4 1.20848e+020
+225 38 1.20092e+020
+215 55 1.18846e+020
+177 106 1.17412e+020
+509 455 1.14935e+020
+435 67 1.1415e+020
+123 185 1.13574e+020
+302 215 1.13442e+020
+112 393 1.12672e+020
+134 214 1.12445e+020
+55 289 1.12168e+020
+144 310 1.11698e+020
+55 29 1.11016e+020
+125 254 1.10717e+020
+216 280 1.107e+020
+371 162 1.09789e+020
+261 165 1.08813e+020
+325 341 1.08587e+020
+309 7 1.07835e+020
+412 256 1.06937e+020
+207 450 1.06847e+020
+480 179 1.05487e+020
+434 398 1.05063e+020
+475 262 1.04507e+020
+351 321 1.04276e+020
+360 337 1.03782e+020
+283 403 1.03552e+020
+411 354 1.03241e+020
+283 72 1.02983e+020
+392 144 1.02931e+020
+510 173 1.02696e+020
+327 141 1.02211e+020
+150 307 1.01977e+020
+361 131 1.01916e+020
+522 62 1.00391e+020
+545 41 1.00086e+020
+252 423 9.97081e+019
+45 28 9.95116e+019
+261 222 9.94178e+019
+235 346 9.93112e+019
+578 16 9.86208e+019
+125 363 9.85348e+019
+124 198 9.84848e+019
+169 56 9.81812e+019
+92 197 9.79354e+019
+115 44 9.7855e+019
+386 220 9.77967e+019
+86 255 9.74559e+019
+301 165 9.72384e+019
+54 66 9.7201e+019
+142 324 9.67616e+019
+163 213 9.61534e+019
+421 335 9.59279e+019
+64 60 9.52269e+019
+390 295 9.48938e+019
+320 312 9.48049e+019
+64 236 9.44669e+019
+456 283 9.42546e+019
+177 260 9.39658e+019
+425 377 9.38315e+019
+243 99 9.34308e+019
+48 26 9.28623e+019
+57 183 9.28051e+019
+168 197 9.2488e+019
+460 279 9.20821e+019
+84 78 9.19512e+019
+66 214 9.11215e+019
+542 210 9.10454e+019
+524 25 9.09906e+019
+545 58 9.07238e+019
+174 40 9.0623e+019
+383 9 9.03937e+019
+543 15 9.02041e+019
+431 147 9.0181e+019
+300 265 9.01508e+019
+417 23 9.00212e+019
+78 2 8.95893e+019
+358 334 8.93778e+019
+100 199 8.92893e+019
+328 128 8.90727e+019
+339 13 8.88526e+019
+163 277 8.87556e+019
+408 183 8.81343e+019
+346 240 8.80964e+019
+342 263 8.77445e+019
+41 217 8.76783e+019
+403 187 8.76407e+019
+222 39 8.76388e+019
+36 173 8.71105e+019
+515 347 8.6512e+019
+544 4 8.63366e+019
+334 436 8.62147e+019
+433 111 8.57385e+019
+246 145 8.5471e+019
+541 124 8.54039e+019
+276 352 8.52986e+019
+32 66 8.49668e+019
+426 119 8.49291e+019
+109 239 8.43061e+019
+271 166 8.31645e+019
+453 206 8.30085e+019
+61 203 8.27192e+019
+530 186 8.26403e+019
+527 98 8.20544e+019
+41 63 8.19114e+019
+214 73 8.17657e+019
+137 206 8.14686e+019
+211 435 8.12035e+019
+123 272 8.10897e+019
+52 43 8.10565e+019
+379 7 8.08538e+019
+104 4 8.07644e+019
+272 281 8.07049e+019
+264 445 7.96647e+019
+308 372 7.93847e+019
+44 97 7.91135e+019
+13 218 7.90514e+019
+42 339 7.80983e+019
+355 321 7.80155e+019
+365 143 7.77515e+019
+238 349 7.76097e+019
+95 476 7.75541e+019
+567 43 7.75254e+019
+478 18 7.70854e+019
+448 166 7.6786e+019
+71 148 7.67606e+019
+509 19 7.66938e+019
+220 290 7.65868e+019
+511 128 7.64664e+019
+413 299 7.61311e+019
+57 364 7.60986e+019
+386 243 7.59318e+019
+358 10 7.57385e+019
+324 314 7.57173e+019
+512 262 7.54705e+019
+18 343 7.53465e+019
+139 173 7.52399e+019
+212 59 7.51886e+019
+102 58 7.50327e+019
+225 182 7.4911e+019
+78 80 7.47748e+019
+221 180 7.47377e+019
+85 214 7.44932e+019
+395 261 7.44094e+019
+100 78 7.40694e+019
+377 119 7.40133e+019
+68 337 7.40097e+019
+311 150 7.40073e+019
+167 286 7.37338e+019
+363 7 7.3692e+019
+106 39 7.34415e+019
+49 151 7.3329e+019
+159 138 7.29323e+019
+480 299 7.27758e+019
+528 104 7.27476e+019
+140 394 7.24644e+019
+302 204 7.22354e+019
+313 84 7.19745e+019
+242 203 7.12505e+019
+230 36 7.12342e+019
+46 355 7.09729e+019
+490 139 7.07855e+019
+92 292 7.07276e+019
+367 247 7.06968e+019
+348 179 7.06644e+019
+529 183 7.05365e+019
+8 10 7.04723e+019
+509 343 7.03699e+019
+361 221 7.00249e+019
+326 427 6.9529e+019
+350 145 6.95257e+019
+364 251 6.94218e+019
+293 27 6.9401e+019
+163 74 6.93581e+019
+386 294 6.93412e+019
+471 212 6.90247e+019
+265 31 6.87986e+019
+476 21 6.8661e+019
+449 219 6.85744e+019
+164 358 6.85178e+019
+37 218 6.83816e+019
+371 90 6.80174e+019
+525 38 6.78985e+019
+192 219 6.75702e+019
+37 296 6.7239e+019
+328 253 6.65066e+019
+113 345 6.64229e+019
+328 297 6.61781e+019
+436 303 6.61775e+019
+165 244 6.59652e+019
+545 44 6.57946e+019
+439 339 6.57721e+019
+357 129 6.56863e+019
+482 364 6.55334e+019
+135 129 6.55218e+019
+524 19 6.54527e+019
+88 148 6.51978e+019
+298 69 6.51937e+019
+36 176 6.51579e+019
+523 123 6.51463e+019
+248 316 6.48266e+019
+374 393 6.47457e+019
+101 360 6.46883e+019
+253 139 6.46046e+019
+356 268 6.44998e+019
+498 159 6.42979e+019
+249 423 6.41779e+019
+38 138 6.40375e+019
+360 217 6.38735e+019
+156 318 6.36458e+019
+51 98 6.36243e+019
+249 364 6.34953e+019
+234 162 6.3476e+019
+41 297 6.34297e+019
+345 351 6.325e+019
+127 26 6.3085e+019
+141 1 6.30678e+019
+32 219 6.25783e+019
+512 220 6.24798e+019
+329 12 6.23884e+019
+493 139 6.21851e+019
+449 204 6.19707e+019
+508 5 6.17471e+019
+84 477 6.16905e+019
+361 251 6.15812e+019
+212 182 6.12364e+019
+548 163 6.12249e+019
+228 185 6.1096e+019
+167 327 6.09129e+019
+164 328 6.05721e+019
+471 268 6.05567e+019
+449 445 6.00971e+019
+406 198 5.99652e+019
+110 96 5.99321e+019
+106 61 5.97558e+019
+521 263 5.96608e+019
+357 297 5.95029e+019
+513 76 5.92837e+019
+444 453 5.90617e+019
+484 59 5.88869e+019
+84 148 5.88019e+019
+403 265 5.87281e+019
+118 75 5.84669e+019
+366 5 5.84538e+019
+244 165 5.84015e+019
+184 36 5.83679e+019
+384 259 5.80244e+019
+346 296 5.78691e+019
+358 282 5.78082e+019
+75 7 5.77727e+019
+332 294 5.75806e+019
+211 438 5.75326e+019
+191 360 5.75187e+019
+475 341 5.74451e+019
+61 134 5.73755e+019
+418 8 5.70057e+019
+483 300 5.68334e+019
+187 264 5.6817e+019
+120 447 5.68156e+019
+325 165 5.66121e+019
+10 102 5.654e+019
+128 186 5.63304e+019
+463 40 5.62036e+019
+158 73 5.5936e+019
+50 13 5.59353e+019
+512 295 5.58282e+019
+527 361 5.57902e+019
+238 94 5.56172e+019
+113 95 5.55961e+019
+250 403 5.55942e+019
+193 16 5.55467e+019
+358 64 5.54935e+019
+365 106 5.53268e+019
+192 216 5.51363e+019
+333 90 5.50665e+019
+44 9 5.49759e+019
+307 449 5.49625e+019
+245 294 5.49563e+019
+239 199 5.49352e+019
+229 292 5.47608e+019
+330 89 5.45543e+019
+72 96 5.44778e+019
+256 139 5.4405e+019
+480 262 5.43322e+019
+451 377 5.4068e+019
+77 29 5.38874e+019
+219 99 5.36411e+019
+511 100 5.33321e+019
+537 393 5.31267e+019
+345 110 5.31243e+019
+223 218 5.30381e+019
+47 99 5.28769e+019
+314 147 5.28505e+019
+542 132 5.28229e+019
+224 178 5.27244e+019
+273 296 5.24504e+019
+191 205 5.23827e+019
+221 177 5.23659e+019
+192 330 5.19132e+019
+259 35 5.18554e+019
+70 25 5.17833e+019
+502 159 5.16933e+019
+325 294 5.16818e+019
+23 61 5.15708e+019
+69 420 5.15539e+019
+211 185 5.15494e+019
+483 328 5.1526e+019
+94 219 5.13616e+019
+475 246 5.11454e+019
+584 38 5.10728e+019
+78 41 5.09546e+019
+138 98 5.08902e+019
+47 147 5.08237e+019
+362 395 5.06823e+019
+96 449 5.06646e+019
+471 421 5.06473e+019
+286 73 5.04926e+019
+90 376 5.01636e+019
+166 312 5.01447e+019
+212 33 5.00304e+019
+58 29 5.00227e+019
+180 394 4.99679e+019
+470 238 4.99204e+019
+571 451 4.98809e+019
+363 358 4.98588e+019
+223 221 4.9742e+019
+463 23 4.96422e+019
+486 44 4.94733e+019
+144 6 4.94571e+019
+281 222 4.93366e+019
+408 45 4.93271e+019
+130 476 4.93057e+019
+498 224 4.92775e+019
+31 135 4.91807e+019
+513 20 4.89102e+019
+407 352 4.88614e+019
+289 137 4.87074e+019
+539 405 4.87066e+019
+568 382 4.8701e+019
+186 288 4.86086e+019
+540 14 4.86074e+019
+53 222 4.83444e+019
+271 72 4.82839e+019
+220 150 4.82123e+019
+432 275 4.82064e+019
+436 320 4.79436e+019
+423 398 4.79251e+019
+154 114 4.78581e+019
+393 48 4.78394e+019
+105 42 4.77516e+019
+306 440 4.76267e+019
+219 280 4.75915e+019
+328 66 4.74557e+019
+149 223 4.73455e+019
+382 412 4.72793e+019
+248 395 4.72334e+019
+207 224 4.71707e+019
+393 218 4.71573e+019
+254 10 4.70603e+019
+47 11 4.70174e+019
+170 17 4.70101e+019
+473 202 4.69477e+019
+35 201 4.68585e+019
+449 178 4.68103e+019
+280 132 4.67355e+019
+163 111 4.66994e+019
+191 146 4.66684e+019
+559 80 4.6604e+019
+272 53 4.65209e+019
+541 99 4.63924e+019
+107 429 4.62768e+019
+296 331 4.62583e+019
+259 71 4.62428e+019
+118 425 4.619e+019
+514 382 4.61302e+019
+455 84 4.61263e+019
+538 123 4.6009e+019
+481 451 4.5961e+019
+294 269 4.59117e+019
+59 74 4.58859e+019
+399 262 4.58344e+019
+223 16 4.5776e+019
+31 270 4.57353e+019
+233 14 4.57248e+019
+284 199 4.56972e+019
+275 317 4.56434e+019
+423 332 4.55243e+019
+359 142 4.55103e+019
+328 214 4.533e+019
+386 327 4.52195e+019
+60 40 4.51681e+019
+259 237 4.50931e+019
+53 5 4.5077e+019
+489 44 4.49882e+019
+531 103 4.4948e+019
+126 76 4.4907e+019
+281 128 4.48174e+019
+258 161 4.47909e+019
+351 271 4.46935e+019
+354 295 4.46389e+019
+297 410 4.46149e+019
+422 49 4.45282e+019
+374 240 4.44413e+019
+248 313 4.44141e+019
+451 86 4.43841e+019
+178 94 4.43312e+019
+397 265 4.42739e+019
+573 405 4.41768e+019
+38 287 4.41306e+019
+110 264 4.41247e+019
+278 145 4.40446e+019
+309 441 4.40274e+019
+431 269 4.39948e+019
+157 40 4.38931e+019
+281 419 4.38407e+019
+32 141 4.38115e+019
+215 175 4.37147e+019
+318 460 4.3681e+019
+221 432 4.35245e+019
+285 297 4.34874e+019
+209 395 4.34262e+019
+483 143 4.33929e+019
+453 102 4.33169e+019
+239 202 4.32016e+019
+87 207 4.31239e+019
+197 131 4.29915e+019
+141 182 4.2936e+019
+128 168 4.29333e+019
+503 164 4.2813e+019
+473 5 4.28127e+019
+160 183 4.27821e+019
+392 165 4.27643e+019
+277 329 4.26676e+019
+9 76 4.26526e+019
+338 473 4.26093e+019
+286 165 4.25636e+019
+257 152 4.24913e+019
+173 116 4.24418e+019
+306 193 4.24369e+019
+336 391 4.24105e+019
+390 48 4.24094e+019
+344 123 4.24006e+019
+57 373 4.21543e+019
+291 50 4.21537e+019
+377 340 4.21474e+019
+163 208 4.21431e+019
+488 262 4.20647e+019
+444 118 4.19796e+019
+575 99 4.18937e+019
+191 350 4.18698e+019
+272 316 4.17821e+019
+469 139 4.17437e+019
+42 24 4.16684e+019
+28 30 4.16625e+019
+340 165 4.16366e+019
+378 67 4.16112e+019
+341 122 4.16083e+019
+242 421 4.15169e+019
+542 129 4.137e+019
+141 21 4.13359e+019
+46 82 4.12591e+019
+416 84 4.12281e+019
+466 281 4.12026e+019
+96 79 4.11963e+019
+166 277 4.1171e+019
+390 449 4.117e+019
+471 83 4.10593e+019
+65 371 4.10472e+019
+79 198 4.09971e+019
+440 455 4.09496e+019
+233 199 4.09298e+019
+82 134 4.09221e+019
+221 184 4.08693e+019
+562 461 4.07995e+019
+524 346 4.07588e+019
+325 88 4.07466e+019
+127 251 4.06849e+019
+268 289 4.06598e+019
+449 438 4.06554e+019
+446 8 4.05901e+019
+7 46 4.05163e+019
+497 81 4.05149e+019
+158 112 4.02036e+019
+398 169 4.01008e+019
+530 363 4.00979e+019
+277 371 3.99907e+019
+113 213 3.99302e+019
+539 458 3.99077e+019
+50 453 3.98855e+019
+110 169 3.97312e+019
+112 242 3.96563e+019
+345 276 3.96487e+019
+209 35 3.95463e+019
+364 254 3.95311e+019
+411 44 3.94602e+019
+147 98 3.93946e+019
+355 341 3.92797e+019
+302 190 3.91888e+019
+418 282 3.91814e+019
+389 140 3.90995e+019
+330 92 3.89819e+019
+561 146 3.89488e+019
+163 169 3.89441e+019
+327 182 3.88997e+019
+55 79 3.88658e+019
+410 65 3.88409e+019
+131 255 3.88338e+019
+418 68 3.87986e+019
+517 17 3.87931e+019
+525 186 3.87589e+019
+18 236 3.86406e+019
+297 182 3.85888e+019
+432 82 3.85257e+019
+313 76 3.8499e+019
+109 137 3.84747e+019
+454 115 3.84622e+019
+502 144 3.84405e+019
+388 15 3.84017e+019
+129 238 3.8351e+019
+210 21 3.82951e+019
+367 303 3.82746e+019
+280 50 3.82342e+019
+66 319 3.82203e+019
+489 181 3.8171e+019
+175 94 3.81516e+019
+44 63 3.81387e+019
+556 39 3.80925e+019
+572 459 3.80739e+019
+119 115 3.80316e+019
+464 197 3.79154e+019
+92 59 3.78741e+019
+524 423 3.78588e+019
+506 16 3.77698e+019
+517 42 3.76244e+019
+434 159 3.74983e+019
+597 272 3.74629e+019
+439 397 3.73755e+019
+332 258 3.73457e+019
+274 215 3.71655e+019
+130 72 3.70207e+019
+515 120 3.69294e+019
+549 379 3.69144e+019
+222 107 3.68973e+019
+186 19 3.68473e+019
+282 135 3.68169e+019
+271 131 3.67253e+019
+571 447 3.67128e+019
+532 398 3.66933e+019
+569 422 3.66364e+019
+538 263 3.66178e+019
+246 106 3.65429e+019
+344 198 3.64589e+019
+126 96 3.64585e+019
+338 264 3.63654e+019
+478 12 3.62923e+019
+52 153 3.62789e+019
+334 218 3.61074e+019
+86 311 3.60442e+019
+180 380 3.5881e+019
+359 53 3.5862e+019
+338 63 3.58245e+019
+525 173 3.58022e+019
+55 294 3.57195e+019
+166 97 3.56283e+019
+109 28 3.5608e+019
+325 91 3.55925e+019
+332 68 3.54557e+019
+349 241 3.54538e+019
+220 317 3.54314e+019
+527 222 3.53312e+019
+513 402 3.53302e+019
+165 219 3.52948e+019
+184 94 3.52789e+019
+451 63 3.51847e+019
+203 309 3.51578e+019
+268 53 3.51443e+019
+70 129 3.51163e+019
+505 361 3.49992e+019
+549 59 3.49857e+019
+259 369 3.49116e+019
+270 185 3.48976e+019
+333 202 3.48756e+019
+439 378 3.48742e+019
+429 117 3.48632e+019
+520 184 3.48466e+019
+319 186 3.4774e+019
+505 382 3.47604e+019
+321 10 3.47345e+019
+278 419 3.467e+019
+166 118 3.46221e+019
+106 98 3.46082e+019
+236 222 3.45493e+019
+464 390 3.44797e+019
+482 440 3.44261e+019
+502 362 3.43464e+019
+297 419 3.43194e+019
+367 337 3.43176e+019
+455 178 3.41871e+019
+271 290 3.41562e+019
+71 408 3.41426e+019
+79 271 3.40455e+019
+347 338 3.40072e+019
+449 118 3.40006e+019
+570 182 3.40003e+019
+177 18 3.38366e+019
+316 312 3.38285e+019
+391 221 3.38018e+019
+391 324 3.37814e+019
+381 26 3.3765e+019
+437 466 3.37466e+019
+245 102 3.36233e+019
+262 286 3.35825e+019
+63 220 3.35143e+019
+211 12 3.33116e+019
+364 257 3.32276e+019
+457 116 3.32253e+019
+447 350 3.3197e+019
+395 105 3.31843e+019
+103 259 3.31758e+019
+206 435 3.31681e+019
+217 149 3.30992e+019
+500 318 3.30716e+019
+355 256 3.30438e+019
+95 20 3.30208e+019
+23 322 3.30206e+019
+160 96 3.28934e+019
+332 127 3.28743e+019
+542 207 3.2646e+019
+196 194 3.26384e+019
+146 161 3.26137e+019
+190 312 3.26015e+019
+93 255 3.25993e+019
+404 13 3.25586e+019
+86 63 3.25483e+019
+41 10 3.25306e+019
+217 208 3.25052e+019
+297 25 3.24855e+019
+90 275 3.24629e+019
+98 202 3.24235e+019
+183 316 3.23174e+019
+217 146 3.21737e+019
+134 238 3.21676e+019
+105 359 3.21587e+019
+148 397 3.21235e+019
+364 181 3.21117e+019
+180 164 3.20586e+019
+198 111 3.2053e+019
+81 76 3.2019e+019
+572 326 3.19077e+019
+377 183 3.18433e+019
+246 14 3.18358e+019
+271 181 3.18112e+019
+159 144 3.17921e+019
+405 376 3.17908e+019
+289 349 3.17905e+019
+16 435 3.17787e+019
+233 296 3.15588e+019
+34 31 3.15556e+019
+274 77 3.1491e+019
+92 444 3.14774e+019
+255 405 3.14617e+019
+276 180 3.14591e+019
+107 75 3.1453e+019
+96 37 3.14512e+019
+485 264 3.13797e+019
+59 254 3.12858e+019
+11 79 3.12714e+019
+191 188 3.12522e+019
+398 357 3.12468e+019
+87 372 3.12418e+019
+345 48 3.12219e+019
+513 95 3.11972e+019
+456 377 3.1175e+019
+417 301 3.11633e+019
+246 89 3.11389e+019
+261 444 3.11068e+019
+21 131 3.10557e+019
+539 128 3.0943e+019
+35 134 3.08816e+019
+49 235 3.08298e+019
+114 2 3.0791e+019
+443 22 3.0789e+019
+275 196 3.07446e+019
+358 394 3.07022e+019
+135 21 3.0637e+019
+388 126 3.06299e+019
+511 83 3.06118e+019
+95 94 3.05649e+019
+206 308 3.05352e+019
+358 241 3.05245e+019
+389 54 3.04688e+019
+39 355 3.04539e+019
+129 309 3.04032e+019
+569 203 3.03759e+019
+331 413 3.03604e+019
+56 171 3.03594e+019
+172 450 3.02637e+019
+264 311 3.02172e+019
+187 308 3.01994e+019
+348 393 3.01253e+019
+203 293 3.00381e+019
+529 395 2.99764e+019
+44 408 2.99338e+019
+267 20 2.99252e+019
+104 106 2.99212e+019
+254 77 2.99169e+019
+491 59 2.98993e+019
+33 111 2.98931e+019
+208 55 2.98818e+019
+242 190 2.98517e+019
+508 166 2.98494e+019
+324 143 2.98005e+019
+88 183 2.97999e+019
+433 381 2.97468e+019
+395 23 2.96647e+019
+241 166 2.96291e+019
+180 329 2.95562e+019
+133 75 2.95512e+019
+243 281 2.95454e+019
+433 43 2.94897e+019
+82 72 2.94341e+019
+543 457 2.94057e+019
+169 243 2.93935e+019
+458 265 2.93879e+019
+202 220 2.93417e+019
+106 29 2.93295e+019
+530 143 2.93266e+019
+517 57 2.93241e+019
+456 161 2.93009e+019
+403 5 2.93006e+019
+168 358 2.92917e+019
+387 3 2.91979e+019
+142 186 2.91588e+019
+133 148 2.91317e+019
+206 160 2.91255e+019
+256 147 2.90962e+019
+342 106 2.90788e+019
+274 205 2.90103e+019
+73 163 2.89594e+019
+406 80 2.88929e+019
+500 266 2.88617e+019
+202 315 2.88517e+019
+468 204 2.88338e+019
+156 91 2.88267e+019
+282 392 2.8826e+019
+470 121 2.88251e+019
+200 292 2.88203e+019
+76 474 2.8737e+019
+299 178 2.87162e+019
+138 131 2.86341e+019
+578 44 2.86135e+019
+160 20 2.86053e+019
+249 220 2.85764e+019
+56 222 2.85384e+019
+220 339 2.84372e+019
+441 240 2.84224e+019
+448 136 2.83987e+019
+136 179 2.83669e+019
+101 235 2.8361e+019
+200 330 2.83559e+019
+453 161 2.8347e+019
+485 5 2.83443e+019
+198 148 2.83208e+019
+567 181 2.82542e+019
+414 3 2.8217e+019
+575 179 2.81999e+019
+48 257 2.81269e+019
+414 261 2.81005e+019
+506 203 2.80845e+019
+562 141 2.80761e+019
+246 207 2.80587e+019
+143 449 2.79884e+019
+156 445 2.79506e+019
+150 231 2.79247e+019
+449 22 2.792e+019
+215 96 2.79092e+019
+183 394 2.79036e+019
+445 126 2.78861e+019
+314 448 2.78775e+019
+525 399 2.78332e+019
+95 374 2.78262e+019
+402 167 2.77978e+019
+365 165 2.77479e+019
+44 475 2.77372e+019
+391 18 2.76776e+019
+334 130 2.76765e+019
+592 19 2.7674e+019
+292 311 2.76593e+019
+439 25 2.76455e+019
+279 85 2.75916e+019
+147 22 2.7577e+019
+2 436 2.75408e+019
+561 324 2.75328e+019
+187 101 2.7508e+019
+404 143 2.74682e+019
+325 13 2.74084e+019
+11 126 2.73465e+019
+107 183 2.73321e+019
+464 27 2.73309e+019
+322 424 2.72551e+019
+265 15 2.7255e+019
+126 308 2.72521e+019
+99 95 2.72371e+019
+565 159 2.71894e+019
+164 183 2.71786e+019
+103 392 2.7161e+019
+300 106 2.71535e+019
+84 60 2.71485e+019
+436 280 2.71096e+019
+34 114 2.70949e+019
+528 159 2.69901e+019
+13 102 2.69809e+019
+221 72 2.69776e+019
+444 114 2.69409e+019
+49 159 2.68799e+019
+163 253 2.68714e+019
+119 131 2.68399e+019
+216 124 2.68109e+019
+318 454 2.68011e+019
+561 227 2.67839e+019
+162 186 2.67758e+019
+309 355 2.67489e+019
+272 170 2.67479e+019
+137 138 2.67271e+019
+232 176 2.67229e+019
+254 4 2.67057e+019
+382 320 2.669e+019
+103 98 2.66458e+019
+413 65 2.66327e+019
+265 201 2.66303e+019
+479 439 2.66129e+019
+537 103 2.66062e+019
+538 40 2.66005e+019
+187 312 2.65527e+019
+496 463 2.65447e+019
+414 264 2.64438e+019
+145 187 2.64017e+019
+104 238 2.63724e+019
+411 418 2.6349e+019
+79 473 2.63376e+019
+422 118 2.62915e+019
+16 213 2.62692e+019
+157 95 2.62627e+019
+580 245 2.62527e+019
+219 211 2.62457e+019
+107 106 2.62328e+019
+361 369 2.62304e+019
+62 253 2.62219e+019
+504 260 2.62108e+019
+448 401 2.61847e+019
+493 82 2.61703e+019
+34 267 2.61694e+019
+7 101 2.61593e+019
+272 286 2.614e+019
+383 324 2.6116e+019
+551 223 2.60905e+019
+177 331 2.60594e+019
+492 182 2.6034e+019
+387 449 2.60111e+019
+596 364 2.60092e+019
+255 108 2.60021e+019
+198 124 2.59876e+019
+387 283 2.59771e+019
+579 85 2.59679e+019
+560 320 2.59661e+019
+298 274 2.59166e+019
+502 167 2.58904e+019
+62 369 2.58313e+019
+151 115 2.58067e+019
+116 361 2.5745e+019
+298 86 2.57183e+019
+572 179 2.56429e+019
+265 286 2.5613e+019
+30 237 2.56047e+019
+104 307 2.55305e+019
+243 209 2.55182e+019
+332 332 2.54825e+019
+100 164 2.54561e+019
+40 239 2.54217e+019
+314 300 2.53723e+019
+349 297 2.53617e+019
+486 376 2.53605e+019
+93 276 2.53258e+019
+277 137 2.5312e+019
+445 444 2.52986e+019
+506 163 2.52931e+019
+122 124 2.52786e+019
+380 181 2.52619e+019
+89 369 2.52335e+019
+576 38 2.52304e+019
+261 396 2.52186e+019
+125 260 2.51993e+019
+206 163 2.51987e+019
+190 315 2.51982e+019
+299 398 2.51746e+019
+305 363 2.51013e+019
+125 124 2.50805e+019
+329 199 2.50728e+019
+3 155 2.50609e+019
+74 186 2.50272e+019
+243 31 2.50177e+019
+255 129 2.50119e+019
+184 143 2.50118e+019
+507 60 2.49711e+019
+208 422 2.49234e+019
+322 28 2.49189e+019
+449 139 2.49093e+019
+102 41 2.49005e+019
+267 118 2.48985e+019
+418 362 2.47877e+019
+257 391 2.47842e+019
+252 163 2.47836e+019
+429 89 2.47413e+019
+229 281 2.47376e+019
+524 78 2.47304e+019
+229 14 2.47179e+019
+412 245 2.46913e+019
+528 400 2.46878e+019
+191 172 2.46843e+019
+223 114 2.46668e+019
+225 50 2.46231e+019
+291 263 2.45474e+019
+23 48 2.45285e+019
+185 110 2.44864e+019
+148 112 2.44574e+019
+309 33 2.43752e+019
+149 132 2.43603e+019
+223 150 2.43577e+019
+447 245 2.43473e+019
+151 317 2.43377e+019
+136 135 2.43167e+019
+454 48 2.42749e+019
+446 205 2.42697e+019
+384 146 2.42496e+019
+383 335 2.42393e+019
+317 167 2.41798e+019
+177 273 2.41712e+019
+159 90 2.41564e+019
+210 154 2.41372e+019
+597 33 2.41232e+019
+493 79 2.41022e+019
+441 98 2.4099e+019
+361 67 2.40003e+019
+3 382 2.39827e+019
+501 43 2.39632e+019
+48 102 2.39607e+019
+421 81 2.39569e+019
+122 268 2.39427e+019
+478 221 2.3937e+019
+164 381 2.39207e+019
+339 427 2.39207e+019
+188 255 2.39111e+019
+527 79 2.3903e+019
+162 119 2.38896e+019
+68 95 2.38819e+019
+379 107 2.38544e+019
+537 187 2.38506e+019
+544 443 2.38434e+019
+342 142 2.3842e+019
+155 162 2.38219e+019
+409 62 2.37789e+019
+181 344 2.37487e+019
+53 359 2.37484e+019
+214 93 2.3743e+019
+109 59 2.37069e+019
+159 219 2.3661e+019
+69 304 2.36549e+019
+195 83 2.36535e+019
+562 71 2.36262e+019
+287 397 2.36144e+019
+359 291 2.36084e+019
+467 319 2.35366e+019
+283 266 2.35347e+019
+256 102 2.3493e+019
+148 6 2.34894e+019
+87 275 2.34848e+019
+149 79 2.34262e+019
+363 302 2.33844e+019
+307 165 2.3335e+019
+294 431 2.33228e+019
+143 17 2.33173e+019
+339 182 2.33145e+019
+528 431 2.32905e+019
+475 269 2.32747e+019
+503 180 2.32665e+019
+4 60 2.32348e+019
+287 308 2.32281e+019
+452 404 2.32217e+019
+271 414 2.32093e+019
+599 365 2.32031e+019
+176 311 2.31736e+019
+541 381 2.31712e+019
+408 430 2.31627e+019
+546 218 2.31049e+019
+355 325 2.30818e+019
+581 445 2.3068e+019
+525 381 2.30612e+019
+202 192 2.29565e+019
+510 60 2.29259e+019
+92 79 2.28957e+019
+143 433 2.28944e+019
+255 181 2.28776e+019
+263 403 2.28706e+019
+430 395 2.28553e+019
+182 292 2.28526e+019
+512 442 2.28419e+019
+363 49 2.28349e+019
+110 179 2.28233e+019
+465 138 2.27932e+019
+181 286 2.27873e+019
+113 354 2.27671e+019
+481 165 2.27469e+019
+409 163 2.27306e+019
+444 123 2.27203e+019
+328 322 2.27199e+019
+287 33 2.27174e+019
+95 59 2.26945e+019
+257 459 2.26927e+019
+395 165 2.2656e+019
+108 382 2.2639e+019
+51 61 2.26275e+019
+458 418 2.26075e+019
+306 168 2.25949e+019
+480 83 2.25426e+019
+576 311 2.25164e+019
+529 31 2.24798e+019
+486 139 2.24717e+019
+8 235 2.24693e+019
+518 202 2.24658e+019
+472 41 2.24497e+019
+75 133 2.24335e+019
+468 207 2.23856e+019
+269 60 2.23735e+019
+84 171 2.23281e+019
+369 82 2.2273e+019
+250 31 2.22292e+019
+347 341 2.22288e+019
+223 87 2.21979e+019
+261 216 2.21862e+019
+396 160 2.21319e+019
+555 378 2.20925e+019
+55 146 2.20877e+019
+85 180 2.20772e+019
+279 366 2.20734e+019
+246 368 2.20628e+019
+170 311 2.20572e+019
+112 206 2.20356e+019
+82 44 2.2029e+019
+277 217 2.20186e+019
+277 140 2.20148e+019
+120 55 2.20051e+019
+278 263 2.19897e+019
+534 161 2.19861e+019
+250 152 2.19664e+019
+540 163 2.19626e+019
+126 339 2.18938e+019
+466 126 2.18937e+019
+410 263 2.18788e+019
+446 375 2.18368e+019
+563 16 2.18093e+019
+7 116 2.18e+019
+154 295 2.17805e+019
+185 132 2.17581e+019
+539 141 2.17559e+019
+391 125 2.17433e+019
+438 65 2.17369e+019
+262 283 2.17182e+019
+558 271 2.16953e+019
+186 182 2.16726e+019
+336 406 2.16313e+019
+336 183 2.16145e+019
+511 43 2.16023e+019
+327 319 2.15839e+019
+210 225 2.15763e+019
+465 355 2.14971e+019
+45 343 2.14859e+019
+380 120 2.14745e+019
+323 146 2.14627e+019
+299 254 2.14467e+019
+433 240 2.14074e+019
+46 220 2.13839e+019
+167 308 2.13737e+019
+566 176 2.1358e+019
+240 328 2.1345e+019
+201 75 2.13375e+019
+508 361 2.1315e+019
+174 17 2.13141e+019
+12 113 2.13121e+019
+413 161 2.12966e+019
+224 398 2.12568e+019
+418 338 2.12382e+019
+423 162 2.12217e+019
+342 464 2.11895e+019
+539 248 2.11481e+019
+437 109 2.11438e+019
+455 265 2.1141e+019
+60 78 2.10979e+019
+166 239 2.10731e+019
+497 229 2.10709e+019
+533 346 2.10646e+019
+479 243 2.10471e+019
+462 161 2.10252e+019
+543 172 2.10037e+019
+66 251 2.09916e+019
+119 97 2.09765e+019
+370 107 2.09547e+019
+234 34 2.09449e+019
+569 200 2.09328e+019
+535 120 2.09327e+019
+378 352 2.09303e+019
+161 99 2.09184e+019
+64 182 2.09086e+019
+183 135 2.08664e+019
+154 56 2.08648e+019
+96 453 2.08545e+019
+565 463 2.0844e+019
+215 182 2.08342e+019
+212 146 2.08099e+019
+138 358 2.08001e+019
+442 320 2.07879e+019
+67 28 2.0769e+019
+162 190 2.07683e+019
+394 65 2.07228e+019
+64 145 2.0722e+019
+382 103 2.07113e+019
+202 318 2.06187e+019
+335 317 2.06138e+019
+85 363 2.06036e+019
+116 131 2.05556e+019
+277 220 2.05408e+019
+464 123 2.05326e+019
+149 1 2.0524e+019
+376 84 2.04896e+019
+161 33 2.04745e+019
+420 322 2.04529e+019
+245 387 2.04309e+019
+160 126 2.03902e+019
+461 423 2.03756e+019
+221 84 2.03664e+019
+232 92 2.03522e+019
+422 298 2.03521e+019
+76 273 2.03417e+019
+572 237 2.03374e+019
+450 196 2.02929e+019
+576 125 2.02913e+019
+525 105 2.02838e+019
+390 333 2.02838e+019
+210 52 2.02187e+019
+291 90 2.02144e+019
+323 259 2.02065e+019
+9 475 2.02008e+019
+240 155 2.01812e+019
+77 163 2.01736e+019
+301 86 2.01587e+019
+418 79 2.01483e+019
+286 248 2.01373e+019
+244 245 2.01254e+019
+247 399 2.01108e+019
+406 163 2.00993e+019
+424 338 2.00538e+019
+576 57 2.00466e+019
+152 236 2.00425e+019
+422 65 2.00423e+019
+603 364 2.00148e+019
+524 199 1.99247e+019
+578 52 1.98588e+019
+384 161 1.9822e+019
diff --git a/test_data/harriscorners/hc_msc_3.00_0.15_7_7.txt b/test_data/harriscorners/hc_msc_3.00_0.15_7_7.txt
new file mode 100644
index 0000000..e599cb1
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_3.00_0.15_7_7.txt
@@ -0,0 +1,1244 @@
+1243
+81 29 1.19845e+021
+238 20 1.0467e+021
+131 26 9.62539e+020
+260 297 8.86736e+020
+246 93 8.64866e+020
+421 180 8.32933e+020
+26 9 7.60316e+020
+272 366 7.3704e+020
+424 177 7.33895e+020
+29 8 7.17347e+020
+76 257 6.80966e+020
+195 58 6.80484e+020
+543 366 6.60423e+020
+131 37 6.60354e+020
+81 3 6.51375e+020
+282 113 6.43644e+020
+510 124 5.88561e+020
+244 97 5.82805e+020
+37 63 5.81732e+020
+525 25 5.68797e+020
+385 10 5.5797e+020
+64 344 5.54219e+020
+152 223 5.49106e+020
+528 25 5.33876e+020
+424 321 5.28618e+020
+343 8 5.00771e+020
+388 11 4.99731e+020
+542 15 4.93555e+020
+302 185 4.8929e+020
+214 57 4.89092e+020
+253 12 4.85506e+020
+55 30 4.7671e+020
+12 218 4.66859e+020
+361 395 4.65695e+020
+359 294 4.64645e+020
+77 2 4.62388e+020
+102 222 4.57956e+020
+60 217 4.57565e+020
+293 16 4.51322e+020
+482 178 4.51246e+020
+33 100 4.50317e+020
+451 339 4.49869e+020
+257 385 4.48543e+020
+391 294 4.46401e+020
+465 392 4.40418e+020
+485 338 4.39441e+020
+138 204 4.37775e+020
+458 279 4.34732e+020
+199 18 4.26798e+020
+356 259 4.26793e+020
+128 1 4.20868e+020
+226 37 4.20094e+020
+418 438 4.17748e+020
+512 342 4.16115e+020
+241 70 4.14304e+020
+34 139 4.11601e+020
+447 261 4.08752e+020
+330 128 3.9767e+020
+127 165 3.96349e+020
+320 226 3.96211e+020
+123 43 3.96079e+020
+328 296 3.92094e+020
+299 53 3.90175e+020
+519 60 3.83963e+020
+320 312 3.81461e+020
+224 420 3.81434e+020
+310 6 3.80813e+020
+60 40 3.80448e+020
+364 400 3.78647e+020
+533 185 3.70168e+020
+359 334 3.68648e+020
+389 59 3.66767e+020
+361 401 3.65883e+020
+403 120 3.60231e+020
+359 220 3.58415e+020
+476 262 3.52486e+020
+302 181 3.52229e+020
+523 62 3.49203e+020
+175 109 3.47371e+020
+238 91 3.44565e+020
+115 42 3.44325e+020
+511 169 3.3859e+020
+343 264 3.34623e+020
+448 299 3.29826e+020
+408 183 3.29215e+020
+383 5 3.28729e+020
+265 446 3.28265e+020
+56 290 3.27942e+020
+284 402 3.25884e+020
+528 186 3.24981e+020
+209 450 3.23229e+020
+83 77 3.22395e+020
+428 1 3.22026e+020
+405 182 3.15659e+020
+139 109 3.14663e+020
+580 16 3.13191e+020
+263 442 3.1143e+020
+435 397 3.10926e+020
+399 263 3.0891e+020
+150 306 3.084e+020
+386 178 3.07982e+020
+122 186 3.07553e+020
+325 341 3.0622e+020
+449 204 3.05765e+020
+345 339 3.05579e+020
+182 398 3.0408e+020
+364 251 3.02845e+020
+272 280 3.00549e+020
+145 7 3.00273e+020
+436 67 2.9996e+020
+159 75 2.99716e+020
+552 41 2.98438e+020
+327 141 2.98137e+020
+359 129 2.97957e+020
+434 112 2.94659e+020
+163 215 2.93948e+020
+448 296 2.9326e+020
+410 353 2.9186e+020
+301 205 2.91769e+020
+84 148 2.87761e+020
+432 276 2.85021e+020
+511 20 2.84532e+020
+509 454 2.83331e+020
+36 173 2.82845e+020
+513 262 2.81318e+020
+104 3 2.81065e+020
+87 254 2.80829e+020
+61 203 2.80308e+020
+100 198 2.79714e+020
+329 258 2.78943e+020
+122 46 2.78485e+020
+302 215 2.78211e+020
+514 346 2.7794e+020
+545 59 2.77788e+020
+563 478 2.77565e+020
+125 254 2.7726e+020
+448 166 2.76322e+020
+415 22 2.75575e+020
+562 461 2.75079e+020
+37 145 2.74212e+020
+211 436 2.737e+020
+143 324 2.73555e+020
+302 165 2.73257e+020
+447 398 2.72039e+020
+352 321 2.71661e+020
+57 4 2.71506e+020
+470 422 2.71155e+020
+168 196 2.71154e+020
+232 125 2.69865e+020
+112 392 2.68473e+020
+479 15 2.67148e+020
+174 40 2.66752e+020
+452 204 2.66313e+020
+128 187 2.66014e+020
+182 111 2.65822e+020
+390 143 2.656e+020
+380 6 2.64686e+020
+43 26 2.64259e+020
+252 424 2.63675e+020
+165 327 2.61435e+020
+41 217 2.61055e+020
+225 181 2.60887e+020
+423 332 2.60681e+020
+445 118 2.6002e+020
+79 79 2.59365e+020
+259 165 2.58191e+020
+387 220 2.5755e+020
+135 213 2.57525e+020
+480 262 2.57022e+020
+313 148 2.56508e+020
+528 103 2.56129e+020
+96 477 2.55109e+020
+546 41 2.54459e+020
+76 40 2.53937e+020
+143 311 2.52329e+020
+176 260 2.51531e+020
+47 98 2.50204e+020
+437 304 2.4998e+020
+419 8 2.49442e+020
+541 124 2.48003e+020
+109 240 2.47047e+020
+163 212 2.45471e+020
+246 144 2.44989e+020
+393 143 2.43872e+020
+215 280 2.43115e+020
+54 66 2.42643e+020
+256 151 2.42332e+020
+500 159 2.42171e+020
+425 118 2.4127e+020
+428 117 2.41184e+020
+222 179 2.40859e+020
+548 162 2.38097e+020
+273 317 2.37737e+020
+107 39 2.37728e+020
+218 105 2.36856e+020
+413 259 2.34813e+020
+3 64 2.33219e+020
+517 20 2.33081e+020
+248 399 2.3281e+020
+218 99 2.3272e+020
+66 216 2.32184e+020
+412 298 2.31896e+020
+294 27 2.31511e+020
+396 263 2.30875e+020
+212 184 2.29971e+020
+235 346 2.29572e+020
+59 184 2.29006e+020
+65 60 2.28855e+020
+238 199 2.27764e+020
+25 62 2.25903e+020
+132 74 2.25501e+020
+52 42 2.25155e+020
+229 36 2.24619e+020
+62 60 2.24233e+020
+102 360 2.23966e+020
+140 19 2.23884e+020
+389 21 2.23814e+020
+313 84 2.23339e+020
+576 16 2.23264e+020
+50 151 2.23257e+020
+508 166 2.22877e+020
+377 120 2.22571e+020
+346 240 2.22327e+020
+364 142 2.21997e+020
+165 182 2.20765e+020
+422 336 2.1804e+020
+298 181 2.18023e+020
+510 129 2.17924e+020
+454 207 2.17579e+020
+371 161 2.17373e+020
+260 220 2.16861e+020
+490 138 2.14597e+020
+539 13 2.1392e+020
+433 147 2.13498e+020
+544 4 2.13215e+020
+48 26 2.13165e+020
+4 45 2.11827e+020
+505 15 2.11769e+020
+169 55 2.11505e+020
+285 72 2.11036e+020
+412 256 2.10414e+020
+337 13 2.09907e+020
+329 11 2.08997e+020
+40 296 2.08841e+020
+70 477 2.08547e+020
+527 18 2.08465e+020
+512 221 2.06955e+020
+358 66 2.06924e+020
+482 299 2.06716e+020
+544 169 2.06608e+020
+250 402 2.062e+020
+100 79 2.0576e+020
+165 357 2.05673e+020
+56 183 2.05556e+020
+488 44 2.04845e+020
+362 131 2.04324e+020
+46 355 2.04205e+020
+158 72 2.03654e+020
+179 114 2.0343e+020
+134 97 2.03296e+020
+524 187 2.0249e+020
+104 61 2.02043e+020
+507 169 2.01207e+020
+448 445 2.00375e+020
+335 435 2.00169e+020
+300 264 1.99608e+020
+164 73 1.99198e+020
+498 225 1.98434e+020
+209 21 1.98211e+020
+449 117 1.98111e+020
+164 278 1.97531e+020
+248 316 1.9717e+020
+506 6 1.97004e+020
+462 42 1.96943e+020
+210 34 1.96761e+020
+68 338 1.96123e+020
+345 350 1.95402e+020
+527 100 1.95331e+020
+63 236 1.95316e+020
+134 131 1.94562e+020
+392 218 1.94253e+020
+386 244 1.93384e+020
+111 110 1.93263e+020
+52 99 1.92282e+020
+450 374 1.92139e+020
+360 141 1.92088e+020
+222 433 1.91878e+020
+256 139 1.91714e+020
+362 7 1.91238e+020
+44 98 1.90926e+020
+186 36 1.90308e+020
+9 47 1.89086e+020
+129 74 1.89059e+020
+297 69 1.88886e+020
+165 179 1.87866e+020
+483 58 1.8776e+020
+32 269 1.87388e+020
+485 44 1.87168e+020
+332 294 1.86983e+020
+476 20 1.86449e+020
+389 17 1.85393e+020
+333 66 1.8499e+020
+333 258 1.84638e+020
+436 379 1.8453e+020
+9 9 1.84409e+020
+416 9 1.83935e+020
+56 364 1.83714e+020
+174 114 1.83627e+020
+475 247 1.83451e+020
+185 289 1.83308e+020
+88 207 1.8317e+020
+437 319 1.82485e+020
+54 222 1.82032e+020
+463 27 1.81921e+020
+575 459 1.80784e+020
+103 76 1.80614e+020
+404 266 1.7995e+020
+190 360 1.79638e+020
+282 73 1.79444e+020
+355 129 1.785e+020
+165 313 1.77242e+020
+304 190 1.77028e+020
+193 218 1.76975e+020
+165 242 1.75817e+020
+385 294 1.75233e+020
+65 318 1.74946e+020
+229 291 1.74166e+020
+190 350 1.74077e+020
+450 87 1.73588e+020
+544 456 1.73557e+020
+119 116 1.7355e+020
+265 30 1.73155e+020
+243 166 1.73058e+020
+123 199 1.72802e+020
+324 314 1.72772e+020
+258 161 1.72513e+020
+403 188 1.72111e+020
+343 122 1.71852e+020
+464 280 1.71606e+020
+110 95 1.71554e+020
+238 350 1.7073e+020
+284 198 1.70643e+020
+357 63 1.70476e+020
+45 12 1.70103e+020
+242 203 1.69566e+020
+140 181 1.69532e+020
+263 402 1.69429e+020
+407 198 1.69244e+020
+430 148 1.68888e+020
+88 216 1.68821e+020
+97 448 1.6855e+020
+568 42 1.67833e+020
+88 148 1.67495e+020
+110 179 1.67286e+020
+349 181 1.66988e+020
+324 294 1.66979e+020
+114 95 1.66487e+020
+329 90 1.66369e+020
+345 107 1.65897e+020
+47 81 1.65866e+020
+571 446 1.65559e+020
+253 139 1.6545e+020
+84 213 1.65217e+020
+296 332 1.65162e+020
+168 326 1.65098e+020
+373 392 1.65093e+020
+271 167 1.64739e+020
+107 29 1.64468e+020
+448 218 1.6411e+020
+223 218 1.63853e+020
+295 269 1.63649e+020
+503 164 1.63453e+020
+493 81 1.62957e+020
+276 353 1.6252e+020
+356 321 1.62094e+020
+76 30 1.61899e+020
+124 271 1.61766e+020
+42 62 1.61735e+020
+447 8 1.60834e+020
+93 199 1.60714e+020
+168 285 1.60136e+020
+484 329 1.59886e+020
+220 290 1.58926e+020
+355 255 1.5884e+020
+448 438 1.58827e+020
+557 463 1.58574e+020
+248 423 1.58325e+020
+482 364 1.5824e+020
+104 58 1.57994e+020
+431 319 1.57924e+020
+112 344 1.57902e+020
+540 406 1.57755e+020
+41 339 1.56533e+020
+166 110 1.56001e+020
+60 135 1.55578e+020
+124 365 1.55287e+020
+48 13 1.549e+020
+117 426 1.54626e+020
+483 142 1.54607e+020
+86 311 1.54591e+020
+277 219 1.54446e+020
+44 339 1.54255e+020
+511 100 1.5417e+020
+89 258 1.53831e+020
+108 170 1.5348e+020
+433 158 1.53045e+020
+56 78 1.53034e+020
+138 173 1.52917e+020
+142 393 1.52829e+020
+539 457 1.52626e+020
+414 65 1.52606e+020
+346 297 1.52604e+020
+271 73 1.52053e+020
+280 365 1.51423e+020
+367 144 1.51319e+020
+125 259 1.50758e+020
+29 31 1.50731e+020
+542 209 1.50175e+020
+35 31 1.50002e+020
+68 419 1.49863e+020
+227 186 1.49852e+020
+162 97 1.49484e+020
+83 134 1.49184e+020
+365 105 1.4897e+020
+208 225 1.48481e+020
+238 95 1.48453e+020
+335 218 1.48366e+020
+332 90 1.48285e+020
+273 181 1.4818e+020
+183 36 1.47993e+020
+471 266 1.47984e+020
+165 98 1.47606e+020
+455 85 1.47367e+020
+326 426 1.47043e+020
+525 37 1.4696e+020
+163 110 1.46529e+020
+471 212 1.46467e+020
+235 161 1.46423e+020
+388 164 1.46335e+020
+196 128 1.46048e+020
+164 209 1.46001e+020
+353 294 1.45952e+020
+385 326 1.45586e+020
+107 429 1.45498e+020
+330 67 1.45477e+020
+160 137 1.45447e+020
+276 331 1.44853e+020
+349 146 1.44765e+020
+541 128 1.44579e+020
+64 232 1.44118e+020
+523 123 1.44116e+020
+111 169 1.44102e+020
+344 111 1.43916e+020
+77 7 1.4385e+020
+510 174 1.43839e+020
+451 438 1.43822e+020
+159 182 1.43358e+020
+395 164 1.42687e+020
+451 62 1.42312e+020
+345 276 1.42084e+020
+391 164 1.41812e+020
+120 447 1.41398e+020
+213 32 1.40679e+020
+473 203 1.40496e+020
+145 161 1.40469e+020
+83 475 1.40364e+020
+93 196 1.40334e+020
+215 71 1.39727e+020
+440 379 1.39683e+020
+377 68 1.39639e+020
+246 88 1.3951e+020
+145 16 1.39317e+020
+384 260 1.38831e+020
+357 11 1.38794e+020
+191 206 1.38326e+020
+357 282 1.38093e+020
+473 6 1.38073e+020
+309 440 1.38052e+020
+412 45 1.37844e+020
+190 313 1.3784e+020
+244 208 1.37689e+020
+155 318 1.37423e+020
+514 97 1.37116e+020
+454 116 1.36879e+020
+333 202 1.36873e+020
+217 425 1.3674e+020
+118 76 1.36531e+020
+249 366 1.36375e+020
+328 214 1.36204e+020
+392 49 1.36098e+020
+92 254 1.35542e+020
+472 24 1.35512e+020
+33 219 1.35455e+020
+135 179 1.35335e+020
+494 138 1.35158e+020
+574 13 1.35068e+020
+212 74 1.35046e+020
+217 292 1.34232e+020
+438 339 1.34162e+020
+471 269 1.34091e+020
+153 194 1.34087e+020
+217 147 1.3403e+020
+510 4 1.34022e+020
+18 343 1.33683e+020
+71 146 1.33253e+020
+444 451 1.32738e+020
+326 90 1.32727e+020
+549 39 1.32638e+020
+305 440 1.32306e+020
+420 49 1.32299e+020
+207 222 1.32084e+020
+50 288 1.31787e+020
+445 123 1.31522e+020
+259 34 1.31395e+020
+10 78 1.30827e+020
+160 185 1.30791e+020
+539 97 1.30004e+020
+552 377 1.29906e+020
+422 298 1.29773e+020
+257 147 1.29662e+020
+71 149 1.29209e+020
+339 166 1.29167e+020
+231 199 1.29138e+020
+280 130 1.28815e+020
+215 96 1.28718e+020
+529 400 1.28362e+020
+49 155 1.28273e+020
+572 406 1.28174e+020
+431 81 1.27465e+020
+91 290 1.27293e+020
+468 208 1.26857e+020
+378 338 1.26303e+020
+342 47 1.26104e+020
+155 114 1.26074e+020
+163 62 1.25845e+020
+489 58 1.25841e+020
+158 112 1.25777e+020
+530 143 1.25551e+020
+233 33 1.25397e+020
+485 263 1.25213e+020
+272 170 1.25013e+020
+268 280 1.24869e+020
+272 285 1.24832e+020
+482 451 1.24402e+020
+396 266 1.24398e+020
+577 246 1.24388e+020
+574 178 1.24387e+020
+149 302 1.24129e+020
+569 382 1.23617e+020
+519 121 1.23121e+020
+191 143 1.23074e+020
+371 90 1.22686e+020
+528 363 1.22585e+020
+75 475 1.22503e+020
+86 63 1.2233e+020
+570 451 1.22158e+020
+301 105 1.22075e+020
+139 99 1.21698e+020
+167 278 1.21425e+020
+138 96 1.21415e+020
+526 360 1.21258e+020
+151 226 1.20944e+020
+270 290 1.20864e+020
+521 264 1.20668e+020
+515 59 1.20623e+020
+176 20 1.20448e+020
+70 96 1.2024e+020
+522 426 1.20127e+020
+424 399 1.19895e+020
+272 132 1.19575e+020
+372 86 1.19392e+020
+318 459 1.19376e+020
+287 397 1.1928e+020
+271 186 1.19101e+020
+295 421 1.19087e+020
+88 368 1.18826e+020
+282 391 1.18734e+020
+337 62 1.18556e+020
+424 376 1.18457e+020
+260 238 1.18229e+020
+355 342 1.18202e+020
+364 101 1.18176e+020
+280 136 1.17981e+020
+319 187 1.17724e+020
+421 399 1.17608e+020
+381 67 1.174e+020
+59 254 1.17192e+020
+220 184 1.17181e+020
+459 264 1.16983e+020
+169 17 1.16632e+020
+92 257 1.16603e+020
+269 54 1.16407e+020
+35 266 1.16375e+020
+470 121 1.16374e+020
+550 59 1.16326e+020
+155 295 1.16091e+020
+312 80 1.1608e+020
+247 219 1.1585e+020
+309 373 1.15803e+020
+78 474 1.1515e+020
+530 96 1.15035e+020
+205 308 1.15018e+020
+540 101 1.1501e+020
+468 138 1.14583e+020
+103 237 1.14356e+020
+263 285 1.14291e+020
+89 375 1.14178e+020
+221 151 1.14015e+020
+380 107 1.13932e+020
+306 449 1.13761e+020
+407 45 1.13448e+020
+575 100 1.13144e+020
+440 456 1.13096e+020
+363 357 1.13091e+020
+217 74 1.13061e+020
+468 204 1.13004e+020
+162 169 1.12805e+020
+517 42 1.12416e+020
+463 199 1.12384e+020
+35 177 1.12369e+020
+458 115 1.12015e+020
+273 295 1.11868e+020
+130 477 1.11847e+020
+279 51 1.11763e+020
+204 221 1.11166e+020
+578 44 1.11163e+020
+196 132 1.11161e+020
+164 206 1.11048e+020
+328 181 1.11002e+020
+289 139 1.10893e+020
+104 307 1.10863e+020
+187 265 1.10738e+020
+402 44 1.10678e+020
+265 17 1.10631e+020
+48 234 1.10498e+020
+249 361 1.10321e+020
+437 240 1.103e+020
+100 445 1.10274e+020
+432 381 1.10045e+020
+273 219 1.0972e+020
+541 133 1.09718e+020
+438 467 1.09596e+020
+337 264 1.0942e+020
+192 292 1.09356e+020
+423 50 1.09265e+020
+282 268 1.09142e+020
+426 379 1.09139e+020
+482 440 1.09133e+020
+136 136 1.08897e+020
+455 162 1.08682e+020
+119 131 1.08613e+020
+260 226 1.08494e+020
+33 111 1.0842e+020
+392 215 1.08372e+020
+537 262 1.08312e+020
+174 93 1.08217e+020
+279 419 1.0811e+020
+157 218 1.08107e+020
+453 102 1.08038e+020
+563 323 1.07971e+020
+107 75 1.07956e+020
+265 311 1.07806e+020
+91 60 1.07618e+020
+244 293 1.07571e+020
+78 198 1.07517e+020
+56 75 1.07454e+020
+283 52 1.07355e+020
+411 66 1.06898e+020
+105 97 1.06808e+020
+420 66 1.06613e+020
+22 48 1.06169e+020
+494 160 1.05963e+020
+483 325 1.05878e+020
+105 223 1.05722e+020
+358 54 1.05679e+020
+437 281 1.05422e+020
+227 112 1.05408e+020
+92 444 1.05172e+020
+131 71 1.05095e+020
+9 234 1.04866e+020
+486 138 1.0484e+020
+205 435 1.04736e+020
+357 166 1.0467e+020
+84 72 1.04457e+020
+216 180 1.04429e+020
+109 136 1.04346e+020
+313 76 1.03986e+020
+467 280 1.03688e+020
+282 419 1.03606e+020
+91 276 1.03538e+020
+162 119 1.0325e+020
+160 146 1.03142e+020
+87 144 1.03091e+020
+298 274 1.03086e+020
+167 118 1.03081e+020
+453 178 1.02903e+020
+387 217 1.02352e+020
+418 83 1.02305e+020
+514 83 1.02286e+020
+114 1 1.02236e+020
+530 397 1.02166e+020
+266 300 1.01956e+020
+444 114 1.01955e+020
+471 237 1.01929e+020
+223 14 1.0154e+020
+340 108 1.01539e+020
+283 195 1.01096e+020
+343 200 1.01075e+020
+83 171 1.01051e+020
+55 145 1.00802e+020
+281 221 1.00721e+020
+196 195 1.00288e+020
+527 347 1.0026e+020
+153 235 1.00147e+020
+186 20 1.00043e+020
+506 361 1.00006e+020
+213 22 9.99276e+019
+292 335 9.99214e+019
+178 273 9.98931e+019
+525 173 9.97996e+019
+366 164 9.97496e+019
+441 239 9.96772e+019
+216 175 9.94119e+019
+325 133 9.92481e+019
+10 103 9.92304e+019
+360 164 9.90958e+019
+87 251 9.89965e+019
+418 283 9.89799e+019
+365 302 9.89541e+019
+334 62 9.89156e+019
+561 226 9.8694e+019
+182 343 9.855e+019
+146 449 9.85125e+019
+196 255 9.84025e+019
+242 421 9.83395e+019
+465 425 9.82269e+019
+232 13 9.79901e+019
+295 273 9.79356e+019
+305 194 9.74411e+019
+187 313 9.73247e+019
+229 13 9.69303e+019
+450 180 9.66983e+019
+211 396 9.66569e+019
+43 80 9.6526e+019
+133 237 9.6437e+019
+463 22 9.59753e+019
+70 128 9.58495e+019
+134 147 9.58451e+019
+596 363 9.56622e+019
+10 75 9.53523e+019
+569 423 9.53145e+019
+223 113 9.52836e+019
+537 393 9.52115e+019
+362 244 9.51379e+019
+524 399 9.51109e+019
+39 287 9.50356e+019
+65 182 9.49448e+019
+497 66 9.48303e+019
+319 166 9.47781e+019
+561 142 9.47468e+019
+480 84 9.47155e+019
+142 449 9.46142e+019
+512 77 9.44957e+019
+187 309 9.43503e+019
+346 47 9.41565e+019
+274 216 9.40392e+019
+504 260 9.38883e+019
+359 243 9.34264e+019
+157 90 9.34108e+019
+253 389 9.33388e+019
+226 198 9.32368e+019
+220 315 9.31856e+019
+72 164 9.31431e+019
+182 95 9.29638e+019
+278 328 9.29247e+019
+475 342 9.29109e+019
+281 438 9.26089e+019
+70 22 9.26075e+019
+527 221 9.25813e+019
+56 374 9.25133e+019
+256 220 9.232e+019
+110 262 9.20867e+019
+449 140 9.19913e+019
+382 102 9.19272e+019
+503 156 9.1862e+019
+515 119 9.1808e+019
+418 449 9.1735e+019
+209 55 9.17208e+019
+162 240 9.15658e+019
+240 155 9.14137e+019
+415 357 9.12541e+019
+404 376 9.12434e+019
+283 133 9.12261e+019
+322 426 9.08648e+019
+494 58 9.07303e+019
+389 325 9.05739e+019
+277 182 9.04254e+019
+267 290 9.02987e+019
+17 434 9.00394e+019
+299 269 8.98774e+019
+362 66 8.97833e+019
+351 273 8.9776e+019
+150 112 8.97602e+019
+197 123 8.97482e+019
+325 258 8.96032e+019
+280 204 8.92664e+019
+98 257 8.91994e+019
+222 116 8.88758e+019
+105 360 8.88598e+019
+343 142 8.87726e+019
+110 265 8.87683e+019
+499 81 8.87507e+019
+340 473 8.86098e+019
+542 246 8.85609e+019
+567 180 8.84217e+019
+354 12 8.83561e+019
+323 14 8.83327e+019
+190 329 8.82378e+019
+234 198 8.815e+019
+323 166 8.80306e+019
+548 139 8.79879e+019
+330 26 8.78014e+019
+512 103 8.77119e+019
+178 331 8.75699e+019
+277 111 8.75492e+019
+513 442 8.74994e+019
+53 360 8.74918e+019
+200 313 8.73938e+019
+106 32 8.72505e+019
+156 39 8.72472e+019
+191 210 8.7104e+019
+254 78 8.69126e+019
+392 20 8.68812e+019
+278 224 8.65093e+019
+89 181 8.63852e+019
+63 253 8.62883e+019
+288 135 8.6286e+019
+122 123 8.62796e+019
+336 405 8.60029e+019
+307 169 8.56701e+019
+523 346 8.55281e+019
+78 271 8.54444e+019
+298 409 8.54021e+019
+479 243 8.52017e+019
+125 77 8.51698e+019
+364 180 8.50775e+019
+238 34 8.50553e+019
+509 58 8.49618e+019
+441 23 8.49363e+019
+430 151 8.49212e+019
+125 96 8.47546e+019
+528 431 8.47149e+019
+78 133 8.46532e+019
+521 187 8.46152e+019
+229 281 8.4341e+019
+378 183 8.42244e+019
+97 38 8.42236e+019
+163 252 8.42189e+019
+12 81 8.41872e+019
+499 266 8.41549e+019
+466 123 8.39586e+019
+400 168 8.35568e+019
+240 166 8.34965e+019
+155 56 8.33887e+019
+283 204 8.33148e+019
+220 212 8.32821e+019
+186 94 8.32707e+019
+244 281 8.32147e+019
+106 106 8.32006e+019
+368 82 8.31694e+019
+114 169 8.31689e+019
+432 268 8.31585e+019
+218 208 8.31366e+019
+405 79 8.31235e+019
+512 94 8.3079e+019
+279 145 8.30195e+019
+516 381 8.30001e+019
+51 453 8.2975e+019
+479 286 8.28702e+019
+257 134 8.27818e+019
+591 20 8.25994e+019
+448 124 8.25967e+019
+239 163 8.25702e+019
+397 104 8.25153e+019
+103 258 8.25026e+019
+151 232 8.24401e+019
+424 64 8.23554e+019
+188 278 8.18747e+019
+559 80 8.16475e+019
+307 428 8.13638e+019
+480 166 8.12968e+019
+487 375 8.12365e+019
+323 146 8.12178e+019
+94 80 8.12014e+019
+388 127 8.11938e+019
+175 272 8.11515e+019
+40 355 8.11037e+019
+471 82 8.10771e+019
+161 33 8.10021e+019
+501 320 8.07807e+019
+186 133 8.07783e+019
+299 87 8.07609e+019
+172 16 8.05861e+019
+55 172 8.05843e+019
+358 268 8.05677e+019
+390 118 8.05213e+019
+113 243 8.04351e+019
+89 476 8.04091e+019
+327 105 8.03623e+019
+283 395 8.03206e+019
+86 363 8.01405e+019
+447 351 7.99787e+019
+291 50 7.98646e+019
+597 33 7.95826e+019
+571 326 7.95684e+019
+405 11 7.95143e+019
+298 25 7.94783e+019
+247 105 7.94544e+019
+308 358 7.94042e+019
+242 33 7.9374e+019
+576 330 7.93602e+019
+302 333 7.92478e+019
+498 463 7.92305e+019
+18 235 7.92039e+019
+147 99 7.91927e+019
+388 138 7.91044e+019
+212 146 7.90692e+019
+376 240 7.90502e+019
+74 196 7.90095e+019
+129 191 7.87289e+019
+527 344 7.87253e+019
+511 297 7.85507e+019
+286 164 7.83601e+019
+255 107 7.81661e+019
+511 294 7.77657e+019
+367 337 7.77025e+019
+541 381 7.75158e+019
+108 382 7.73779e+019
+388 2 7.7248e+019
+102 96 7.72392e+019
+167 105 7.72273e+019
+183 142 7.72263e+019
+390 124 7.7207e+019
+387 450 7.71389e+019
+9 32 7.69758e+019
+514 203 7.69178e+019
+258 392 7.68357e+019
+373 241 7.68266e+019
+115 116 7.67604e+019
+436 237 7.66915e+019
+533 394 7.66582e+019
+240 327 7.66291e+019
+423 165 7.66153e+019
+65 370 7.66121e+019
+478 7 7.65592e+019
+383 321 7.64505e+019
+166 18 7.64082e+019
+506 380 7.62648e+019
+261 140 7.61944e+019
+455 48 7.61932e+019
+191 188 7.61486e+019
+200 294 7.60009e+019
+346 342 7.59963e+019
+578 85 7.5928e+019
+447 21 7.58337e+019
+594 425 7.57561e+019
+222 72 7.57071e+019
+174 312 7.57015e+019
+150 397 7.56411e+019
+161 19 7.56363e+019
+197 111 7.5564e+019
+162 152 7.53758e+019
+207 163 7.53726e+019
+2 156 7.53395e+019
+156 95 7.52589e+019
+174 187 7.51399e+019
+291 262 7.50824e+019
+543 173 7.50625e+019
+560 145 7.50559e+019
+94 375 7.49812e+019
+310 446 7.49144e+019
+413 264 7.48769e+019
+33 164 7.47757e+019
+148 226 7.47685e+019
+167 433 7.47536e+019
+299 255 7.46908e+019
+394 104 7.45988e+019
+291 89 7.45807e+019
+504 143 7.45509e+019
+406 354 7.45268e+019
+126 125 7.44843e+019
+227 130 7.44733e+019
+311 299 7.44405e+019
+272 64 7.44049e+019
+287 214 7.43584e+019
+315 446 7.43389e+019
+183 316 7.42675e+019
+452 48 7.42671e+019
+106 263 7.42079e+019
+150 79 7.41431e+019
+255 4 7.40842e+019
+582 446 7.38889e+019
+540 40 7.38776e+019
+211 11 7.38358e+019
+255 459 7.37357e+019
+514 403 7.35226e+019
+41 203 7.35097e+019
+155 162 7.3453e+019
+382 413 7.33788e+019
+404 15 7.33645e+019
+181 165 7.32611e+019
+217 429 7.32367e+019
+524 78 7.32304e+019
+149 132 7.3118e+019
+371 83 7.30746e+019
+35 200 7.29873e+019
+333 330 7.28998e+019
+401 164 7.27721e+019
+480 46 7.27538e+019
+290 311 7.26881e+019
+259 70 7.26265e+019
+388 53 7.25129e+019
+277 320 7.24732e+019
+542 162 7.24486e+019
+71 407 7.22529e+019
+104 197 7.217e+019
+262 369 7.20761e+019
+149 229 7.2062e+019
+56 334 7.19225e+019
+464 119 7.17616e+019
+209 419 7.14853e+019
+161 126 7.14424e+019
+518 17 7.14412e+019
+112 354 7.1426e+019
+509 442 7.13552e+019
+14 435 7.12725e+019
+438 108 7.12488e+019
+99 94 7.12144e+019
+85 40 7.10427e+019
+407 164 7.09961e+019
+330 414 7.09427e+019
+226 294 7.09272e+019
+8 115 7.08801e+019
+163 348 7.08676e+019
+420 362 7.07353e+019
+447 376 7.07109e+019
+109 2 7.06959e+019
+214 436 7.06592e+019
+12 204 7.05498e+019
+309 82 7.05405e+019
+101 40 7.04909e+019
+106 183 7.04511e+019
+114 215 7.04355e+019
+215 289 7.04265e+019
+194 84 7.04115e+019
+339 182 7.03924e+019
+275 204 7.03173e+019
+525 177 7.03049e+019
+3 61 7.02841e+019
+270 108 7.01882e+019
+460 376 7.01283e+019
+202 309 7.01139e+019
+269 58 7.00363e+019
+385 65 7.00017e+019
+113 76 6.99917e+019
+330 334 6.99901e+019
+584 346 6.99452e+019
+114 130 6.96503e+019
+275 52 6.95492e+019
+362 48 6.94687e+019
+276 269 6.94389e+019
+222 86 6.9403e+019
+77 162 6.94023e+019
+165 379 6.91197e+019
+584 37 6.90761e+019
+225 51 6.90345e+019
+48 161 6.89877e+019
+106 260 6.89545e+019
+360 369 6.88457e+019
+483 287 6.88412e+019
+157 122 6.88369e+019
+46 408 6.88243e+019
+212 150 6.88066e+019
+298 419 6.87498e+019
+53 295 6.87239e+019
+258 370 6.86683e+019
+249 386 6.85982e+019
+96 456 6.85063e+019
+86 377 6.84762e+019
+102 162 6.84238e+019
+386 284 6.83644e+019
+408 429 6.83378e+019
+43 146 6.82991e+019
+203 160 6.82965e+019
+39 238 6.82332e+019
+318 453 6.82182e+019
+399 108 6.80385e+019
+225 397 6.80356e+019
+468 28 6.80044e+019
+182 286 6.79741e+019
+537 93 6.79578e+019
+336 144 6.79174e+019
+525 282 6.77392e+019
+41 182 6.76206e+019
+412 246 6.75797e+019
+594 101 6.7571e+019
+26 44 6.75535e+019
+290 397 6.75391e+019
+521 184 6.74987e+019
+254 130 6.73582e+019
+524 422 6.73486e+019
+396 23 6.73205e+019
+262 394 6.72415e+019
+200 129 6.72045e+019
+4 35 6.7178e+019
+168 316 6.70663e+019
+204 419 6.70299e+019
+258 459 6.68058e+019
+171 451 6.67998e+019
+142 235 6.66966e+019
+453 378 6.6643e+019
+129 428 6.66193e+019
+418 260 6.65872e+019
+376 83 6.65556e+019
+190 109 6.64335e+019
+10 125 6.6433e+019
+211 225 6.63941e+019
+215 124 6.63748e+019
+53 330 6.62862e+019
+316 105 6.62033e+019
+302 195 6.60024e+019
+543 444 6.59114e+019
+597 273 6.58592e+019
+417 87 6.58295e+019
+511 352 6.57685e+019
+186 269 6.57519e+019
+314 300 6.56535e+019
+516 73 6.5621e+019
+298 398 6.56164e+019
+132 255 6.53079e+019
+275 139 6.52473e+019
+199 329 6.51991e+019
+143 96 6.51678e+019
+380 451 6.51267e+019
+241 190 6.51169e+019
+576 37 6.5089e+019
+432 237 6.50178e+019
+288 348 6.49851e+019
+33 260 6.4906e+019
+87 134 6.48227e+019
+147 78 6.47884e+019
+175 240 6.47184e+019
+119 95 6.46226e+019
+270 415 6.46207e+019
+20 316 6.44544e+019
+113 144 6.43916e+019
+137 237 6.43798e+019
+452 404 6.43051e+019
+186 202 6.42239e+019
+541 142 6.41613e+019
+204 294 6.41456e+019
+349 270 6.41104e+019
+268 19 6.40677e+019
+408 26 6.40278e+019
+155 444 6.39677e+019
+278 86 6.39378e+019
+381 120 6.38952e+019
+412 3 6.38501e+019
+175 120 6.38141e+019
+385 334 6.37499e+019
+461 161 6.36369e+019
+268 88 6.36179e+019
+36 76 6.36049e+019
+109 145 6.35894e+019
+337 428 6.35685e+019
+596 313 6.35406e+019
+187 294 6.35155e+019
+437 25 6.34582e+019
+129 259 6.34422e+019
+563 145 6.34359e+019
+572 330 6.34297e+019
+158 305 6.34119e+019
+186 101 6.33879e+019
+51 230 6.31035e+019
+111 358 6.30858e+019
+268 118 6.30729e+019
+247 405 6.30616e+019
+236 403 6.2931e+019
+56 137 6.27598e+019
+261 199 6.27481e+019
+250 150 6.27123e+019
+233 406 6.26888e+019
+189 255 6.26078e+019
+481 101 6.26059e+019
+476 83 6.25485e+019
+580 346 6.25086e+019
+98 164 6.25063e+019
+114 261 6.24436e+019
+182 289 6.23794e+019
+150 2 6.23583e+019
+250 221 6.22637e+019
+547 301 6.21899e+019
+470 42 6.20869e+019
+402 143 6.20659e+019
+438 182 6.20266e+019
+255 74 6.19814e+019
+253 163 6.18393e+019
+96 95 6.17938e+019
+595 269 6.16652e+019
+150 199 6.16594e+019
+95 387 6.16428e+019
+72 188 6.1597e+019
+485 6 6.15168e+019
+94 276 6.14711e+019
+180 155 6.14689e+019
+275 136 6.14297e+019
+173 417 6.14283e+019
+244 388 6.12935e+019
+264 321 6.12834e+019
+543 21 6.12682e+019
+86 360 6.12407e+019
+116 361 6.12319e+019
+436 121 6.10912e+019
+216 204 6.10251e+019
+562 149 6.09231e+019
+283 338 6.09154e+019
+231 178 6.08252e+019
+201 195 6.07872e+019
+262 143 6.07621e+019
+65 220 6.07601e+019
+528 31 6.06961e+019
+503 363 6.06777e+019
+449 143 6.05111e+019
+543 217 6.04767e+019
+397 160 6.03305e+019
+117 212 6.0299e+019
+501 145 6.02982e+019
+563 320 6.02162e+019
+410 140 6.02e+019
+200 76 6.01612e+019
+443 168 6.00791e+019
+271 145 6.00233e+019
+423 372 5.9924e+019
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_3_3.txt b/test_data/harriscorners/hc_msc_30.00_0.04_3_3.txt
new file mode 100644
index 0000000..b5a8637
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_3_3.txt
@@ -0,0 +1,188 @@
+187
+449 298 7.11603e+011
+499 1 6.14136e+011
+535 242 5.50429e+011
+329 127 5.373e+011
+274 366 5.00877e+011
+421 183 4.81895e+011
+401 261 4.8154e+011
+388 178 4.73174e+011
+76 236 4.55167e+011
+553 41 4.41546e+011
+213 73 4.38065e+011
+200 18 4.32789e+011
+321 313 4.21361e+011
+385 221 4.18499e+011
+436 68 4.12777e+011
+66 320 4.11039e+011
+447 397 4.07071e+011
+89 197 4.04961e+011
+121 44 4.04891e+011
+173 312 4.01539e+011
+544 170 3.93932e+011
+286 296 3.92621e+011
+135 215 3.87618e+011
+45 26 3.74365e+011
+159 143 3.72284e+011
+363 401 3.71432e+011
+471 240 3.66628e+011
+449 219 3.57373e+011
+245 94 3.54639e+011
+515 77 3.5205e+011
+110 239 3.46322e+011
+301 175 3.46175e+011
+34 138 3.45836e+011
+448 263 3.44597e+011
+364 298 3.36092e+011
+455 3 3.34436e+011
+174 238 3.28586e+011
+3 47 3.21677e+011
+299 53 3.14265e+011
+296 420 3.12681e+011
+36 269 3.08535e+011
+223 38 3.06453e+011
+282 115 3.06092e+011
+59 185 3.00251e+011
+82 27 2.98989e+011
+396 319 2.93987e+011
+126 162 2.91522e+011
+317 385 2.91386e+011
+120 4 2.90357e+011
+344 10 2.85939e+011
+242 203 2.82159e+011
+175 94 2.81316e+011
+253 138 2.78104e+011
+419 7 2.74974e+011
+507 165 2.72862e+011
+489 264 2.71049e+011
+59 74 2.7104e+011
+124 363 2.67523e+011
+426 320 2.66975e+011
+207 223 2.65415e+011
+382 8 2.65404e+011
+480 298 2.63568e+011
+380 68 2.57742e+011
+508 122 2.56886e+011
+236 163 2.49906e+011
+230 266 2.47889e+011
+359 168 2.43987e+011
+303 207 2.42507e+011
+28 236 2.39823e+011
+203 311 2.34468e+011
+251 13 2.30285e+011
+524 199 2.27565e+011
+370 107 2.27089e+011
+71 148 2.20707e+011
+270 241 2.14214e+011
+484 59 2.13514e+011
+271 166 2.11024e+011
+406 375 2.10999e+011
+240 366 2.08406e+011
+170 19 2.06809e+011
+543 364 2.05938e+011
+183 401 2.05129e+011
+263 440 2.01914e+011
+511 342 2.01603e+011
+192 124 2.00475e+011
+326 87 1.9944e+011
+192 276 1.95691e+011
+467 123 1.89929e+011
+572 142 1.89129e+011
+10 102 1.88404e+011
+360 335 1.8802e+011
+80 474 1.87547e+011
+416 44 1.85724e+011
+365 259 1.85173e+011
+338 473 1.84708e+011
+208 434 1.83225e+011
+392 144 1.77674e+011
+266 53 1.75916e+011
+101 78 1.75323e+011
+64 371 1.72464e+011
+111 134 1.72178e+011
+211 183 1.6665e+011
+484 375 1.66128e+011
+433 146 1.65209e+011
+96 447 1.61968e+011
+562 478 1.60052e+011
+355 220 1.56944e+011
+524 21 1.56872e+011
+277 332 1.56018e+011
+461 340 1.55891e+011
+35 300 1.55536e+011
+260 273 1.53648e+011
+419 440 1.53237e+011
+108 325 1.51192e+011
+579 18 1.50301e+011
+326 427 1.49601e+011
+112 393 1.48873e+011
+413 100 1.46809e+011
+477 182 1.46697e+011
+554 201 1.46254e+011
+362 370 1.44585e+011
+509 455 1.43259e+011
+250 313 1.42978e+011
+160 183 1.42483e+011
+174 57 1.40157e+011
+13 206 1.39444e+011
+148 396 1.39003e+011
+300 265 1.38172e+011
+138 111 1.34667e+011
+151 447 1.31469e+011
+561 321 1.28712e+011
+192 359 1.26769e+011
+292 16 1.26515e+011
+141 325 1.22103e+011
+239 421 1.18115e+011
+5 13 1.17834e+011
+91 291 1.15568e+011
+221 114 1.14619e+011
+537 140 1.1394e+011
+134 72 1.07753e+011
+332 255 1.05977e+011
+71 410 1.05227e+011
+3 381 1.03643e+011
+577 178 1.00506e+011
+479 451 1.00465e+011
+2 155 9.8956e+010
+470 419 9.88302e+010
+510 300 9.79638e+010
+544 91 9.64574e+010
+18 342 9.51953e+010
+604 121 9.30464e+010
+572 449 9.29218e+010
+306 354 9.12603e+010
+460 40 9.04555e+010
+450 442 9.03468e+010
+124 272 8.86899e+010
+263 403 8.86893e+010
+335 49 8.82568e+010
+526 422 8.64998e+010
+398 412 8.54246e+010
+560 272 8.52673e+010
+579 79 8.378e+010
+589 309 8.28037e+010
+60 110 8.2156e+010
+9 476 7.93657e+010
+64 448 7.90233e+010
+598 363 7.81109e+010
+618 181 7.64906e+010
+283 80 7.54417e+010
+39 406 7.27112e+010
+385 450 7.21421e+010
+44 476 6.92221e+010
+416 470 6.53779e+010
+184 201 6.16348e+010
+500 223 5.83407e+010
+534 393 5.78151e+010
+464 82 5.72289e+010
+119 423 5.70464e+010
+597 272 5.48273e+010
+66 272 5.11974e+010
+568 383 5.07474e+010
+132 477 4.65099e+010
+14 434 4.51996e+010
+302 141 4.5e+010
+215 402 4.40395e+010
+418 290 4.36628e+010
+4 266 3.93369e+010
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_3_5.txt b/test_data/harriscorners/hc_msc_30.00_0.04_3_5.txt
new file mode 100644
index 0000000..ad958c9
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_3_5.txt
@@ -0,0 +1,185 @@
+184
+244 94 3.10864e+012
+273 366 2.99939e+012
+122 43 2.38424e+012
+330 127 2.00645e+012
+298 52 1.99983e+012
+422 181 1.93221e+012
+84 78 1.83694e+012
+200 17 1.81141e+012
+237 19 1.78538e+012
+214 72 1.76632e+012
+448 297 1.75554e+012
+134 214 1.72973e+012
+362 400 1.61958e+012
+485 59 1.59539e+012
+484 23 1.57647e+012
+395 318 1.54446e+012
+553 40 1.53717e+012
+286 297 1.5281e+012
+47 27 1.47111e+012
+436 67 1.46911e+012
+317 335 1.43848e+012
+401 262 1.4377e+012
+447 397 1.42966e+012
+35 138 1.41639e+012
+175 94 1.40562e+012
+160 143 1.40173e+012
+128 2 1.39903e+012
+303 183 1.37005e+012
+92 214 1.36373e+012
+507 122 1.36282e+012
+243 203 1.35305e+012
+544 168 1.34444e+012
+387 177 1.33373e+012
+82 28 1.33187e+012
+425 321 1.32295e+012
+343 9 1.31682e+012
+124 254 1.31092e+012
+125 364 1.30847e+012
+535 241 1.29169e+012
+195 125 1.28548e+012
+253 139 1.26585e+012
+470 239 1.25814e+012
+418 8 1.25337e+012
+76 256 1.24239e+012
+2 46 1.24145e+012
+466 197 1.22631e+012
+360 295 1.21782e+012
+45 218 1.19727e+012
+48 98 1.1854e+012
+393 143 1.17965e+012
+262 440 1.1716e+012
+320 224 1.15885e+012
+282 114 1.15073e+012
+294 15 1.149e+012
+174 312 1.12774e+012
+480 297 1.12655e+012
+447 263 1.12635e+012
+386 221 1.12138e+012
+65 319 1.10893e+012
+509 164 1.09e+012
+207 224 1.08992e+012
+515 76 1.08472e+012
+325 88 1.08147e+012
+110 135 1.06043e+012
+207 435 1.02984e+012
+456 4 1.0296e+012
+427 119 1.02783e+012
+543 365 1.02014e+012
+308 371 1.00087e+012
+390 58 9.88456e+011
+174 238 9.59076e+011
+138 173 9.55318e+011
+382 6 9.51401e+011
+361 335 9.39762e+011
+562 224 9.37132e+011
+287 210 9.21012e+011
+221 180 9.20193e+011
+512 343 9.0782e+011
+60 184 9.06301e+011
+41 63 9.00652e+011
+10 101 8.89154e+011
+525 20 8.76428e+011
+486 358 8.55373e+011
+363 251 8.43257e+011
+71 147 8.31426e+011
+284 403 8.2932e+011
+268 53 8.28012e+011
+347 178 8.18555e+011
+260 237 8.18497e+011
+228 292 7.92834e+011
+96 446 7.91173e+011
+39 296 7.90945e+011
+410 353 7.84769e+011
+138 110 7.80869e+011
+488 264 7.76166e+011
+573 141 7.74005e+011
+451 339 7.64617e+011
+369 106 7.60955e+011
+142 324 7.47812e+011
+418 440 7.45097e+011
+163 277 7.44883e+011
+113 392 7.42416e+011
+511 222 7.39639e+011
+579 19 7.36972e+011
+271 166 7.21237e+011
+164 20 7.14221e+011
+130 76 7.13431e+011
+468 124 7.02888e+011
+509 455 6.8936e+011
+5 11 6.87874e+011
+221 150 6.70805e+011
+172 57 6.52687e+011
+306 440 6.3843e+011
+183 401 6.32131e+011
+79 474 6.30142e+011
+478 402 6.10644e+011
+62 371 5.69804e+011
+192 172 5.68785e+011
+338 473 5.67163e+011
+240 366 5.59323e+011
+362 369 5.57522e+011
+356 220 5.56263e+011
+1 156 5.55162e+011
+576 177 5.50365e+011
+152 448 5.50055e+011
+147 397 5.45605e+011
+325 297 5.39196e+011
+164 208 5.39025e+011
+301 263 5.34501e+011
+526 423 5.28144e+011
+92 290 5.20337e+011
+542 132 5.08397e+011
+184 344 5.02659e+011
+538 96 5.00658e+011
+233 262 4.95473e+011
+539 458 4.89128e+011
+580 80 4.82353e+011
+108 183 4.81851e+011
+278 333 4.78896e+011
+246 403 4.75432e+011
+561 321 4.71529e+011
+109 325 4.58477e+011
+560 272 4.48263e+011
+44 474 4.44416e+011
+482 328 4.40508e+011
+359 143 4.36822e+011
+107 99 4.29178e+011
+462 162 4.16569e+011
+478 451 4.11677e+011
+248 316 4.04106e+011
+346 48 4.02892e+011
+434 225 3.98067e+011
+337 426 3.87901e+011
+411 470 3.81516e+011
+18 343 3.73719e+011
+408 82 3.71446e+011
+571 450 3.66069e+011
+14 203 3.64866e+011
+203 257 3.57255e+011
+3 382 3.46241e+011
+389 420 3.42376e+011
+72 409 3.41125e+011
+30 255 3.39408e+011
+599 364 3.35011e+011
+573 405 3.33955e+011
+362 448 3.27618e+011
+118 425 3.2611e+011
+506 381 3.21432e+011
+512 297 3.16459e+011
+332 392 3.00811e+011
+10 476 2.99369e+011
+13 433 2.82567e+011
+302 142 2.78495e+011
+4 235 2.69851e+011
+459 41 2.53673e+011
+589 309 2.43211e+011
+76 111 2.39415e+011
+63 440 2.36171e+011
+450 437 2.35082e+011
+605 121 2.32699e+011
+131 476 2.26423e+011
+618 181 2.17402e+011
+207 315 2.16449e+011
+282 81 2.04789e+011
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_3_7.txt b/test_data/harriscorners/hc_msc_30.00_0.04_3_7.txt
new file mode 100644
index 0000000..27ccacf
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_3_7.txt
@@ -0,0 +1,193 @@
+192
+244 94 7.52428e+012
+498 1 7.16173e+012
+121 44 7.06738e+012
+274 367 6.72401e+012
+421 180 5.97555e+012
+331 128 5.59613e+012
+83 77 5.49709e+012
+299 53 5.1256e+012
+401 263 5.00272e+012
+135 214 4.85851e+012
+238 20 4.68279e+012
+80 28 4.50504e+012
+271 291 4.38534e+012
+424 322 4.35505e+012
+202 18 4.21799e+012
+467 238 4.18864e+012
+342 8 4.0838e+012
+282 113 4.0347e+012
+75 257 3.83362e+012
+542 14 3.80761e+012
+438 68 3.79286e+012
+165 240 3.64222e+012
+458 279 3.63846e+012
+510 166 3.56818e+012
+543 167 3.49089e+012
+510 124 3.48188e+012
+361 294 3.4587e+012
+394 142 3.41918e+012
+394 317 3.39077e+012
+129 1 3.35154e+012
+210 436 3.33879e+012
+213 57 3.33636e+012
+302 184 3.31753e+012
+243 203 3.25817e+012
+196 126 3.25617e+012
+486 58 3.21708e+012
+160 144 3.19407e+012
+126 255 3.13634e+012
+363 400 3.12808e+012
+513 78 3.09592e+012
+83 134 3.09292e+012
+175 95 3.06776e+012
+416 8 3.05636e+012
+541 59 3.03744e+012
+481 180 3.03634e+012
+562 225 2.97595e+012
+202 313 2.94425e+012
+485 338 2.92333e+012
+34 138 2.90041e+012
+345 339 2.89994e+012
+46 26 2.86609e+012
+208 221 2.86547e+012
+137 174 2.84981e+012
+222 181 2.82964e+012
+293 16 2.82323e+012
+319 314 2.82133e+012
+102 222 2.81186e+012
+34 267 2.66058e+012
+41 217 2.64485e+012
+263 441 2.61718e+012
+326 165 2.61199e+012
+378 67 2.57218e+012
+383 5 2.54663e+012
+413 45 2.54467e+012
+255 139 2.54046e+012
+442 24 2.53679e+012
+48 98 2.52796e+012
+4 46 2.5196e+012
+454 204 2.51109e+012
+126 364 2.50103e+012
+448 399 2.49276e+012
+552 381 2.47733e+012
+533 241 2.45809e+012
+64 319 2.43784e+012
+319 225 2.42042e+012
+387 220 2.39955e+012
+359 166 2.39344e+012
+326 89 2.38184e+012
+129 75 2.36051e+012
+450 338 2.33354e+012
+269 53 2.32396e+012
+261 238 2.27879e+012
+428 118 2.26566e+012
+388 177 2.24855e+012
+37 298 2.24257e+012
+362 258 2.23023e+012
+575 16 2.22989e+012
+298 274 2.2205e+012
+227 293 2.18243e+012
+220 148 2.14767e+012
+38 63 2.14043e+012
+527 195 2.12482e+012
+169 19 2.12256e+012
+144 311 2.0971e+012
+60 184 2.07585e+012
+7 10 2.0711e+012
+469 123 2.0588e+012
+283 402 2.05301e+012
+112 392 2.03673e+012
+381 353 2.02815e+012
+523 346 2.01168e+012
+232 263 1.97856e+012
+329 258 1.97581e+012
+309 370 1.96569e+012
+10 101 1.92885e+012
+172 56 1.91124e+012
+305 439 1.88412e+012
+131 132 1.86534e+012
+236 347 1.80581e+012
+562 478 1.79848e+012
+366 105 1.79e+012
+469 421 1.77468e+012
+508 454 1.74826e+012
+487 263 1.67352e+012
+405 82 1.67307e+012
+97 448 1.67181e+012
+538 457 1.6709e+012
+191 278 1.63402e+012
+102 164 1.63036e+012
+574 140 1.61255e+012
+578 53 1.58979e+012
+190 171 1.57871e+012
+271 166 1.56102e+012
+417 438 1.5495e+012
+498 225 1.52302e+012
+164 206 1.51253e+012
+575 178 1.50833e+012
+183 399 1.50447e+012
+145 392 1.50261e+012
+83 476 1.49994e+012
+108 98 1.49076e+012
+190 360 1.45355e+012
+356 219 1.44656e+012
+540 98 1.4426e+012
+404 376 1.41887e+012
+482 375 1.41857e+012
+299 138 1.40643e+012
+276 331 1.36451e+012
+247 402 1.28811e+012
+52 358 1.27423e+012
+91 290 1.27204e+012
+514 42 1.2701e+012
+513 298 1.2544e+012
+449 166 1.24997e+012
+527 424 1.24303e+012
+563 323 1.22984e+012
+345 47 1.20921e+012
+541 133 1.18629e+012
+88 369 1.16897e+012
+412 470 1.16716e+012
+11 204 1.15514e+012
+148 449 1.15479e+012
+472 23 1.12677e+012
+1 383 1.11675e+012
+572 405 1.07498e+012
+4 154 1.0705e+012
+286 220 1.0674e+012
+437 240 1.04597e+012
+110 326 9.87584e+011
+334 391 9.8142e+011
+343 463 9.73684e+011
+562 272 9.6409e+011
+338 427 9.35238e+011
+448 444 9.32413e+011
+43 473 9.04293e+011
+514 380 9.02377e+011
+320 30 8.03396e+011
+375 463 7.9748e+011
+388 419 7.85637e+011
+421 290 7.82787e+011
+213 94 7.78561e+011
+72 408 7.78136e+011
+592 105 7.71092e+011
+18 342 7.4175e+011
+3 234 7.41686e+011
+12 421 7.09176e+011
+600 365 6.49877e+011
+572 446 6.43828e+011
+214 400 6.37703e+011
+130 477 6.10457e+011
+11 478 5.62084e+011
+62 441 5.57365e+011
+172 326 5.43479e+011
+285 81 5.27052e+011
+198 466 4.89001e+011
+466 84 4.23165e+011
+35 389 4.18546e+011
+480 473 4.14231e+011
+160 354 4.12198e+011
+602 276 3.98583e+011
+31 168 3.97392e+011
+6 300 3.80264e+011
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_5_3.txt b/test_data/harriscorners/hc_msc_30.00_0.04_5_3.txt
new file mode 100644
index 0000000..487d8ca
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_5_3.txt
@@ -0,0 +1,184 @@
+183
+499 1 8.85626e+015
+245 94 7.79632e+015
+274 366 7.4044e+015
+363 401 6.2812e+015
+449 298 5.84133e+015
+282 115 5.33863e+015
+122 44 5.01352e+015
+553 41 4.97071e+015
+421 182 4.9305e+015
+388 178 4.57141e+015
+507 122 4.49498e+015
+426 320 4.41292e+015
+251 13 4.34456e+015
+447 397 4.34141e+015
+200 18 4.25439e+015
+34 138 4.25086e+015
+535 242 4.21206e+015
+213 72 3.98506e+015
+2 47 3.96422e+015
+543 364 3.95454e+015
+448 263 3.91894e+015
+82 27 3.8559e+015
+321 313 3.80093e+015
+65 343 3.76516e+015
+435 68 3.72402e+015
+135 215 3.64225e+015
+223 38 3.64116e+015
+299 52 3.63192e+015
+344 10 3.52405e+015
+480 298 3.49708e+015
+110 238 3.48133e+015
+45 27 3.37399e+015
+144 309 3.32802e+015
+520 61 3.28465e+015
+320 223 3.25035e+015
+303 183 3.20581e+015
+385 221 3.20356e+015
+471 240 3.17227e+015
+183 401 3.14552e+015
+412 256 3.08445e+015
+348 179 3.01849e+015
+242 203 2.9477e+015
+92 214 2.93427e+015
+159 143 2.88926e+015
+329 127 2.86907e+015
+246 143 2.86032e+015
+271 166 2.85994e+015
+130 2 2.79342e+015
+77 256 2.78079e+015
+364 297 2.75834e+015
+264 440 2.68626e+015
+37 61 2.6707e+015
+390 58 2.66331e+015
+59 219 2.64803e+015
+361 131 2.61004e+015
+286 296 2.59294e+015
+174 238 2.47139e+015
+510 172 2.45154e+015
+482 365 2.44817e+015
+308 372 2.43899e+015
+360 336 2.42068e+015
+101 78 2.39868e+015
+387 10 2.37175e+015
+125 363 2.36895e+015
+426 119 2.32414e+015
+224 419 2.30238e+015
+228 292 2.29973e+015
+417 7 2.28259e+015
+449 219 2.28178e+015
+239 349 2.2748e+015
+355 220 2.27038e+015
+419 440 2.24988e+015
+170 19 2.23752e+015
+209 223 2.23404e+015
+425 376 2.22293e+015
+562 478 2.21442e+015
+392 144 2.19059e+015
+49 99 2.18376e+015
+545 168 2.13006e+015
+282 403 2.11864e+015
+513 340 2.11819e+015
+212 183 2.11106e+015
+271 71 2.09638e+015
+112 393 2.09605e+015
+177 106 2.09252e+015
+59 185 2.084e+015
+498 82 1.99341e+015
+192 331 1.95503e+015
+88 148 1.93985e+015
+36 269 1.93257e+015
+140 184 1.9251e+015
+300 265 1.90244e+015
+294 15 1.89172e+015
+95 446 1.87419e+015
+138 111 1.8601e+015
+167 287 1.83654e+015
+524 21 1.81758e+015
+28 236 1.81694e+015
+362 251 1.81331e+015
+307 439 1.80472e+015
+455 3 1.72977e+015
+11 101 1.7065e+015
+452 337 1.67292e+015
+510 455 1.65489e+015
+489 264 1.64834e+015
+527 99 1.59517e+015
+472 63 1.58234e+015
+579 18 1.57777e+015
+329 253 1.52246e+015
+542 210 1.51143e+015
+208 451 1.49411e+015
+285 211 1.48982e+015
+338 473 1.482e+015
+169 55 1.44969e+015
+91 291 1.44798e+015
+513 296 1.433e+015
+124 272 1.38423e+015
+543 130 1.34706e+015
+470 418 1.29904e+015
+325 88 1.28912e+015
+482 331 1.2822e+015
+527 422 1.27532e+015
+18 342 1.25641e+015
+576 178 1.2359e+015
+260 273 1.23183e+015
+362 370 1.21772e+015
+198 130 1.20188e+015
+572 142 1.19689e+015
+371 82 1.19547e+015
+6 9 1.17359e+015
+108 183 1.15518e+015
+80 474 1.14279e+015
+39 406 1.12285e+015
+164 359 1.10876e+015
+108 324 1.10045e+015
+55 294 1.09502e+015
+572 449 1.09216e+015
+513 220 1.08634e+015
+479 179 1.08544e+015
+561 320 1.06225e+015
+259 236 1.01685e+015
+169 198 1.0047e+015
+203 257 9.87867e+014
+108 109 9.73644e+014
+172 449 9.56514e+014
+250 313 9.34047e+014
+9 476 9.06089e+014
+535 393 8.96395e+014
+336 426 8.49475e+014
+3 382 8.38772e+014
+390 420 8.37761e+014
+133 78 8.12096e+014
+561 71 8.10545e+014
+398 358 8.05768e+014
+451 101 8.04169e+014
+3 155 7.9578e+014
+598 364 7.94613e+014
+396 104 7.91725e+014
+597 272 7.87207e+014
+133 427 7.83753e+014
+71 410 7.7623e+014
+293 334 7.49805e+014
+479 451 7.41852e+014
+440 468 7.41737e+014
+568 383 7.41371e+014
+394 317 7.34824e+014
+560 272 7.22789e+014
+86 365 6.93889e+014
+148 396 6.75892e+014
+358 52 6.61196e+014
+385 450 6.51661e+014
+449 168 6.51318e+014
+13 206 6.41369e+014
+131 477 6.2025e+014
+618 181 6.00806e+014
+180 166 5.93097e+014
+44 476 5.87279e+014
+469 141 5.57059e+014
+591 103 5.49094e+014
+245 385 5.1357e+014
+216 106 4.64312e+014
+16 435 4.57206e+014
+51 373 4.54975e+014
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_5_5.txt b/test_data/harriscorners/hc_msc_30.00_0.04_5_5.txt
new file mode 100644
index 0000000..ff2d677
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_5_5.txt
@@ -0,0 +1,167 @@
+166
+244 94 7.0718e+016
+273 365 4.19588e+016
+237 19 3.36442e+016
+362 400 3.12716e+016
+423 178 3.00271e+016
+82 28 2.53341e+016
+76 257 2.44932e+016
+200 17 2.3797e+016
+122 43 2.37448e+016
+281 113 2.37446e+016
+448 297 2.28076e+016
+543 365 2.26334e+016
+320 224 2.26184e+016
+261 297 2.24358e+016
+299 52 2.24339e+016
+214 72 2.19388e+016
+65 343 2.19239e+016
+343 9 2.16203e+016
+427 320 2.12805e+016
+447 397 2.08519e+016
+35 138 2.072e+016
+128 2 2.05662e+016
+553 40 2.05077e+016
+360 295 2.00814e+016
+124 198 1.98774e+016
+59 218 1.88757e+016
+27 9 1.85968e+016
+507 122 1.83679e+016
+38 63 1.8258e+016
+484 23 1.76262e+016
+387 178 1.75983e+016
+294 15 1.71674e+016
+480 297 1.7e+016
+243 202 1.65612e+016
+303 183 1.65272e+016
+448 262 1.64732e+016
+519 61 1.63025e+016
+127 164 1.62931e+016
+125 364 1.61276e+016
+386 10 1.60423e+016
+92 214 1.59941e+016
+435 69 1.58275e+016
+263 441 1.58061e+016
+2 47 1.57747e+016
+308 371 1.57158e+016
+33 99 1.56448e+016
+152 222 1.54905e+016
+84 78 1.54859e+016
+484 338 1.50463e+016
+470 239 1.48046e+016
+544 168 1.47875e+016
+320 313 1.47586e+016
+329 127 1.45128e+016
+426 119 1.44942e+016
+110 239 1.42893e+016
+418 440 1.39622e+016
+195 125 1.39122e+016
+511 167 1.38492e+016
+390 58 1.36823e+016
+452 339 1.36672e+016
+225 420 1.35091e+016
+535 243 1.35072e+016
+526 24 1.34505e+016
+485 59 1.34419e+016
+145 310 1.30646e+016
+363 251 1.30202e+016
+412 256 1.30182e+016
+343 338 1.30044e+016
+253 139 1.28398e+016
+160 143 1.27002e+016
+360 131 1.24699e+016
+138 110 1.23532e+016
+96 446 1.21616e+016
+183 400 1.21299e+016
+88 148 1.20424e+016
+216 279 1.19035e+016
+386 221 1.14656e+016
+410 353 1.136e+016
+417 8 1.12757e+016
+234 346 1.11488e+016
+40 296 1.11484e+016
+112 392 1.0934e+016
+391 144 1.08178e+016
+167 287 1.07297e+016
+270 70 1.06782e+016
+390 295 1.05786e+016
+542 209 1.0529e+016
+57 4 1.05262e+016
+207 450 1.05094e+016
+283 403 1.04837e+016
+348 178 1.04718e+016
+466 196 1.03105e+016
+35 173 1.01971e+016
+169 57 1.01752e+016
+356 220 1.01186e+016
+579 16 1.01181e+016
+202 314 1.01138e+016
+527 99 1.0019e+016
+211 184 9.93412e+015
+509 455 9.91383e+015
+470 421 9.87021e+015
+286 210 9.35477e+015
+207 224 9.34972e+015
+271 166 9.28476e+015
+166 97 8.97277e+015
+325 425 8.94868e+015
+314 84 8.91304e+015
+127 76 8.61633e+015
+379 354 8.61118e+015
+526 423 8.43952e+015
+95 477 8.37936e+015
+329 254 8.33015e+015
+512 222 8.23405e+015
+515 347 8.0338e+015
+488 263 7.99266e+015
+300 265 7.7726e+015
+92 292 7.63393e+015
+13 218 7.60296e+015
+576 177 7.50458e+015
+123 272 7.38085e+015
+265 31 7.02271e+015
+18 343 6.97317e+015
+542 129 6.72518e+015
+220 150 6.71198e+015
+259 237 6.62416e+015
+164 358 6.59556e+015
+275 329 6.48812e+015
+458 4 6.4293e+015
+338 473 6.38928e+015
+371 90 6.29832e+015
+513 296 6.09857e+015
+457 43 5.98365e+015
+558 462 5.72339e+015
+573 141 5.71706e+015
+160 183 5.69684e+015
+449 445 5.64507e+015
+434 225 5.57885e+015
+573 422 5.46666e+015
+307 449 5.18123e+015
+57 372 5.17685e+015
+470 122 5.14324e+015
+561 320 5.13931e+015
+108 109 4.98623e+015
+161 20 4.90167e+015
+87 369 4.88128e+015
+188 264 4.8446e+015
+569 383 4.81473e+015
+559 80 4.81234e+015
+118 425 4.73387e+015
+390 326 4.6269e+015
+69 420 4.60856e+015
+560 272 4.59559e+015
+44 474 4.53142e+015
+412 470 4.49605e+015
+599 364 4.46812e+015
+346 48 4.39113e+015
+131 476 4.24436e+015
+514 381 4.17366e+015
+9 476 4.13796e+015
+294 297 4.11043e+015
+109 325 4.05554e+015
+148 397 4.00963e+015
+85 180 4.00711e+015
+10 79 3.98272e+015
+2 156 3.79171e+015
+16 434 3.7152e+015
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_5_7.txt b/test_data/harriscorners/hc_msc_30.00_0.04_5_7.txt
new file mode 100644
index 0000000..d2a398a
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_5_7.txt
@@ -0,0 +1,171 @@
+170
+244 94 1.71634e+017
+498 1 1.18825e+017
+421 180 9.36654e+016
+81 29 9.24614e+016
+237 20 8.97759e+016
+130 26 8.90595e+016
+272 366 8.39073e+016
+75 257 6.60503e+016
+282 113 6.31336e+016
+342 9 6.01663e+016
+261 298 5.99472e+016
+299 53 5.97594e+016
+509 124 5.92795e+016
+152 223 5.69227e+016
+363 400 5.67849e+016
+30 8 5.58886e+016
+424 322 5.57206e+016
+83 77 5.46018e+016
+199 18 5.44919e+016
+542 14 5.25799e+016
+330 128 5.13478e+016
+485 338 4.97401e+016
+213 57 4.94543e+016
+34 139 4.91835e+016
+483 178 4.87234e+016
+37 63 4.80184e+016
+361 294 4.77804e+016
+543 365 4.74466e+016
+102 222 4.66399e+016
+458 279 4.63903e+016
+385 10 4.58272e+016
+302 184 4.56179e+016
+156 1 4.5114e+016
+320 314 4.44035e+016
+175 110 4.43659e+016
+65 344 4.37888e+016
+321 225 4.33318e+016
+295 15 4.289e+016
+58 218 4.25782e+016
+428 2 4.23333e+016
+126 164 4.22744e+016
+464 393 4.09885e+016
+243 201 4.0947e+016
+400 263 4.05493e+016
+519 60 3.96577e+016
+391 294 3.86609e+016
+436 68 3.76907e+016
+469 239 3.71014e+016
+211 436 3.69193e+016
+576 16 3.68946e+016
+126 254 3.6476e+016
+451 338 3.59772e+016
+33 100 3.56392e+016
+359 334 3.55184e+016
+427 118 3.54997e+016
+12 217 3.5344e+016
+262 441 3.5013e+016
+364 250 3.49004e+016
+543 167 3.48545e+016
+389 60 3.43815e+016
+55 290 3.38504e+016
+367 144 3.37161e+016
+511 166 3.35903e+016
+123 197 3.22981e+016
+126 364 3.14261e+016
+129 75 3.14175e+016
+4 46 3.14103e+016
+143 324 3.12371e+016
+417 438 3.10606e+016
+309 370 3.08468e+016
+486 58 3.06577e+016
+182 398 3.0646e+016
+386 178 3.05527e+016
+453 204 3.02726e+016
+387 220 2.9532e+016
+562 478 2.87192e+016
+255 139 2.86797e+016
+211 185 2.84488e+016
+208 222 2.84078e+016
+174 40 2.81666e+016
+32 270 2.81484e+016
+68 476 2.80056e+016
+88 148 2.77346e+016
+36 173 2.76491e+016
+410 353 2.72843e+016
+160 142 2.72624e+016
+329 258 2.71442e+016
+139 109 2.67925e+016
+112 392 2.63582e+016
+278 220 2.63258e+016
+514 346 2.62078e+016
+512 221 2.6177e+016
+269 70 2.61294e+016
+284 402 2.61065e+016
+508 454 2.54188e+016
+305 439 2.52446e+016
+236 348 2.50892e+016
+457 43 2.49552e+016
+202 313 2.48486e+016
+234 161 2.47292e+016
+228 291 2.47278e+016
+168 288 2.44609e+016
+314 84 2.44165e+016
+365 105 2.42112e+016
+248 399 2.39517e+016
+104 3 2.39046e+016
+534 242 2.34408e+016
+97 448 2.2531e+016
+326 165 2.21496e+016
+541 124 2.14655e+016
+448 166 2.09708e+016
+168 196 2.08042e+016
+197 84 2.06407e+016
+561 225 2.01985e+016
+164 73 2.00364e+016
+525 424 2.00218e+016
+298 274 1.97979e+016
+165 357 1.9078e+016
+575 178 1.86807e+016
+539 457 1.79121e+016
+88 368 1.78092e+016
+296 332 1.77847e+016
+467 140 1.76111e+016
+271 167 1.75869e+016
+142 393 1.68305e+016
+487 263 1.66694e+016
+335 437 1.6625e+016
+109 98 1.64549e+016
+448 444 1.59656e+016
+91 290 1.56116e+016
+389 326 1.54772e+016
+196 132 1.50283e+016
+436 379 1.50123e+016
+357 66 1.48066e+016
+513 298 1.45853e+016
+179 168 1.45842e+016
+574 421 1.44261e+016
+218 110 1.42422e+016
+437 240 1.36858e+016
+550 58 1.35976e+016
+527 195 1.35835e+016
+363 369 1.33099e+016
+569 382 1.29942e+016
+563 323 1.295e+016
+454 102 1.28687e+016
+11 78 1.27504e+016
+68 419 1.27148e+016
+412 470 1.24035e+016
+480 440 1.2394e+016
+537 93 1.19818e+016
+18 343 1.16253e+016
+578 81 1.1589e+016
+513 380 1.15e+016
+339 473 1.13742e+016
+574 140 1.13733e+016
+258 250 1.12316e+016
+147 449 1.10038e+016
+110 326 1.06579e+016
+163 252 1.04616e+016
+195 255 1.03992e+016
+130 478 1.03737e+016
+17 434 1.02767e+016
+86 181 1.02732e+016
+1 383 1.0074e+016
+402 143 9.79817e+015
+343 200 9.3955e+015
+396 104 9.23065e+015
+421 291 9.21042e+015
+375 463 9.02056e+015
+294 141 8.99765e+015
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_7_3.txt b/test_data/harriscorners/hc_msc_30.00_0.04_7_3.txt
new file mode 100644
index 0000000..d4d999b
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_7_3.txt
@@ -0,0 +1,170 @@
+169
+245 94 1.94856e+020
+499 1 1.81721e+020
+273 366 1.51415e+020
+363 401 1.3623e+020
+282 115 1.03145e+020
+251 13 9.90773e+019
+423 179 9.71754e+019
+65 343 9.09641e+019
+543 364 8.86213e+019
+449 298 8.73777e+019
+507 122 8.40362e+019
+131 36 8.35743e+019
+553 41 7.95278e+019
+426 320 7.85005e+019
+261 297 7.71658e+019
+520 61 7.62246e+019
+28 8 7.58288e+019
+196 57 7.50088e+019
+320 224 7.26692e+019
+465 394 7.24963e+019
+37 61 7.10939e+019
+448 263 7.10212e+019
+200 17 7.06644e+019
+82 27 6.91503e+019
+388 178 6.78018e+019
+387 10 6.72745e+019
+344 10 6.69744e+019
+130 2 6.68939e+019
+223 38 6.47611e+019
+480 298 6.45288e+019
+2 47 6.38296e+019
+34 138 6.3416e+019
+77 256 6.30893e+019
+418 440 6.29304e+019
+321 313 6.26197e+019
+183 401 6.15912e+019
+59 219 6.12306e+019
+435 68 6.06794e+019
+299 52 6.02479e+019
+102 59 5.97668e+019
+390 58 5.89087e+019
+110 238 5.832e+019
+124 199 5.71215e+019
+264 440 5.64331e+019
+361 131 5.46241e+019
+303 183 5.41839e+019
+144 309 5.38532e+019
+271 166 5.32864e+019
+242 203 5.31421e+019
+348 179 5.23431e+019
+483 339 5.13205e+019
+128 164 5.1119e+019
+92 198 5.09284e+019
+412 256 5.00988e+019
+513 340 4.99645e+019
+512 167 4.95884e+019
+359 260 4.95375e+019
+271 71 4.94348e+019
+425 376 4.90856e+019
+224 419 4.88734e+019
+385 221 4.84534e+019
+355 220 4.84436e+019
+33 98 4.81932e+019
+359 294 4.76875e+019
+535 242 4.76597e+019
+378 354 4.74598e+019
+562 478 4.70332e+019
+430 1 4.6789e+019
+545 168 4.6296e+019
+177 107 4.58436e+019
+228 292 4.57375e+019
+426 119 4.55122e+019
+167 287 4.52392e+019
+524 20 4.51441e+019
+127 76 4.45495e+019
+471 240 4.40441e+019
+310 371 4.30741e+019
+283 403 4.29906e+019
+246 143 4.22138e+019
+498 82 4.173e+019
+58 183 4.1658e+019
+165 217 4.13433e+019
+392 144 4.13077e+019
+329 253 4.11889e+019
+111 393 4.09173e+019
+239 349 4.02648e+019
+41 297 3.95847e+019
+293 15 3.91739e+019
+138 111 3.90553e+019
+300 265 3.87624e+019
+452 337 3.80105e+019
+87 148 3.7831e+019
+212 183 3.77927e+019
+125 364 3.73587e+019
+510 455 3.67131e+019
+528 98 3.63548e+019
+95 446 3.6086e+019
+343 337 3.56667e+019
+312 149 3.54501e+019
+158 143 3.53851e+019
+326 426 3.50744e+019
+474 23 3.42676e+019
+170 19 3.40191e+019
+209 223 3.36698e+019
+208 451 3.31291e+019
+513 296 3.30266e+019
+192 331 3.24127e+019
+481 179 3.17394e+019
+452 205 3.01259e+019
+472 63 3.00053e+019
+123 272 2.96202e+019
+577 15 2.949e+019
+329 66 2.94363e+019
+542 210 2.76792e+019
+279 222 2.62591e+019
+91 292 2.62086e+019
+158 56 2.57538e+019
+527 422 2.55542e+019
+69 478 2.48119e+019
+72 97 2.47663e+019
+15 219 2.43011e+019
+342 107 2.39008e+019
+18 342 2.33975e+019
+39 406 2.28748e+019
+576 178 2.27851e+019
+513 220 2.23768e+019
+389 97 2.21958e+019
+542 130 2.15406e+019
+390 296 2.11492e+019
+163 358 2.03648e+019
+141 394 1.96775e+019
+57 372 1.93897e+019
+257 250 1.93449e+019
+198 130 1.9344e+019
+275 329 1.89447e+019
+187 263 1.88801e+019
+339 473 1.86776e+019
+167 180 1.82606e+019
+59 4 1.82481e+019
+571 448 1.80292e+019
+568 382 1.80132e+019
+33 268 1.77604e+019
+131 476 1.7656e+019
+597 272 1.73316e+019
+514 382 1.70875e+019
+561 320 1.70338e+019
+560 81 1.63211e+019
+449 445 1.5444e+019
+469 140 1.54038e+019
+598 364 1.52957e+019
+108 109 1.5189e+019
+172 449 1.47293e+019
+9 476 1.47021e+019
+3 382 1.39825e+019
+108 324 1.32328e+019
+3 155 1.29917e+019
+500 264 1.25884e+019
+479 451 1.2538e+019
+358 53 1.23484e+019
+247 394 1.22272e+019
+88 369 1.19817e+019
+390 420 1.17656e+019
+575 126 1.17474e+019
+559 271 1.15983e+019
+49 453 1.15251e+019
+83 404 1.11756e+019
+16 435 1.08902e+019
+211 94 1.06322e+019
+377 461 9.83817e+018
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_7_5.txt b/test_data/harriscorners/hc_msc_30.00_0.04_7_5.txt
new file mode 100644
index 0000000..a3a9dce
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_7_5.txt
@@ -0,0 +1,152 @@
+151
+244 94 1.87775e+021
+273 365 9.26061e+020
+423 178 8.16558e+020
+237 19 8.14972e+020
+362 400 7.87473e+020
+261 297 7.0927e+020
+82 28 7.01247e+020
+543 365 6.52354e+020
+27 9 6.35072e+020
+65 343 6.26293e+020
+76 257 6.17333e+020
+131 26 6.16091e+020
+281 113 6.12302e+020
+195 58 5.65501e+020
+465 393 5.63954e+020
+320 224 5.55213e+020
+37 62 5.28994e+020
+343 9 5.24211e+020
+58 218 5.18074e+020
+386 10 4.89463e+020
+448 297 4.81101e+020
+127 164 4.80108e+020
+526 24 4.75043e+020
+360 295 4.67175e+020
+200 17 4.50611e+020
+138 203 4.5036e+020
+427 320 4.50185e+020
+33 99 4.42955e+020
+519 61 4.29201e+020
+483 23 4.27497e+020
+510 124 4.22015e+020
+102 59 4.11714e+020
+418 439 4.097e+020
+553 40 4.01707e+020
+35 138 3.97414e+020
+299 52 3.95271e+020
+320 313 3.94701e+020
+448 262 3.94052e+020
+294 15 3.91516e+020
+484 339 3.87805e+020
+243 202 3.84311e+020
+452 339 3.83953e+020
+480 297 3.83135e+020
+511 167 3.75663e+020
+387 178 3.74741e+020
+358 260 3.73301e+020
+263 441 3.72788e+020
+302 185 3.68508e+020
+433 112 3.66965e+020
+225 420 3.62557e+020
+390 61 3.49165e+020
+101 222 3.40617e+020
+216 279 3.30839e+020
+181 111 3.30427e+020
+308 371 3.21167e+020
+544 168 3.199e+020
+435 69 3.18818e+020
+138 110 3.16442e+020
+167 287 3.13054e+020
+483 178 3.10019e+020
+183 400 3.09493e+020
+4 66 3.06705e+020
+360 131 3.05749e+020
+55 290 3.0272e+020
+356 220 2.98396e+020
+125 364 2.93716e+020
+343 338 2.87605e+020
+411 354 2.86548e+020
+142 324 2.81051e+020
+390 295 2.77918e+020
+112 392 2.75828e+020
+283 403 2.74176e+020
+88 148 2.7379e+020
+270 70 2.70009e+020
+234 346 2.66455e+020
+57 4 2.61375e+020
+327 142 2.59315e+020
+471 240 2.5894e+020
+96 446 2.57589e+020
+429 3 2.57093e+020
+13 218 2.56938e+020
+404 121 2.54989e+020
+387 220 2.5433e+020
+431 147 2.51533e+020
+509 455 2.48187e+020
+412 256 2.4653e+020
+125 254 2.46169e+020
+579 16 2.42533e+020
+210 451 2.41467e+020
+261 165 2.40817e+020
+36 173 2.39987e+020
+95 477 2.39628e+020
+434 398 2.31864e+020
+528 98 2.22445e+020
+334 436 2.20251e+020
+542 210 2.20241e+020
+348 179 2.17365e+020
+102 4 2.14854e+020
+159 138 2.14561e+020
+535 243 2.14515e+020
+168 197 2.08509e+020
+278 222 2.05907e+020
+515 347 2.0434e+020
+378 354 2.0419e+020
+211 185 2.00583e+020
+526 423 1.9647e+020
+78 79 1.95493e+020
+300 265 1.94309e+020
+453 206 1.88936e+020
+127 76 1.88422e+020
+231 125 1.88151e+020
+342 107 1.87531e+020
+192 219 1.85554e+020
+513 296 1.81007e+020
+163 74 1.76695e+020
+485 59 1.76638e+020
+314 83 1.74423e+020
+31 270 1.70071e+020
+275 329 1.65327e+020
+449 445 1.64069e+020
+18 343 1.63479e+020
+154 236 1.61582e+020
+457 43 1.60623e+020
+512 222 1.58598e+020
+358 64 1.58097e+020
+265 31 1.57318e+020
+543 457 1.54447e+020
+92 292 1.51453e+020
+164 358 1.50168e+020
+192 330 1.49769e+020
+57 373 1.47561e+020
+542 129 1.44601e+020
+576 177 1.40333e+020
+469 140 1.37061e+020
+573 422 1.27187e+020
+390 325 1.241e+020
+69 420 1.2211e+020
+187 264 1.20458e+020
+569 383 1.19195e+020
+88 368 1.17776e+020
+514 382 1.14205e+020
+177 164 1.10992e+020
+247 395 1.10898e+020
+500 265 1.10619e+020
+130 476 1.07872e+020
+559 80 1.0698e+020
+118 425 1.06906e+020
+338 473 1.06656e+020
+561 320 1.01603e+020
+257 251 9.77537e+019
+599 364 9.76464e+019
diff --git a/test_data/harriscorners/hc_msc_30.00_0.04_7_7.txt b/test_data/harriscorners/hc_msc_30.00_0.04_7_7.txt
new file mode 100644
index 0000000..f0a17fd
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.04_7_7.txt
@@ -0,0 +1,159 @@
+158
+244 94 4.54756e+021
+498 1 2.89128e+021
+81 29 2.84968e+021
+130 26 2.73927e+021
+237 20 2.43927e+021
+421 180 2.2856e+021
+261 298 1.9493e+021
+272 364 1.76478e+021
+26 9 1.76208e+021
+195 58 1.65648e+021
+525 24 1.63081e+021
+76 257 1.63042e+021
+543 365 1.50648e+021
+342 9 1.48334e+021
+37 63 1.45628e+021
+152 223 1.45345e+021
+362 400 1.43983e+021
+65 344 1.39373e+021
+510 124 1.38737e+021
+283 113 1.38112e+021
+385 10 1.36192e+021
+476 262 1.2874e+021
+127 165 1.223e+021
+483 178 1.21407e+021
+485 338 1.18265e+021
+424 322 1.16909e+021
+58 218 1.16673e+021
+34 140 1.16469e+021
+429 2 1.15137e+021
+175 110 1.12882e+021
+320 314 1.11767e+021
+102 222 1.09821e+021
+302 185 1.09755e+021
+321 225 1.09392e+021
+357 259 1.07415e+021
+295 15 1.07279e+021
+464 393 1.0691e+021
+361 294 1.05276e+021
+12 218 1.05156e+021
+33 100 1.03453e+021
+519 60 1.0332e+021
+299 53 1.03287e+021
+199 18 1.02227e+021
+433 112 1.01855e+021
+451 339 1.00977e+021
+243 201 1.00009e+021
+418 438 9.6816e+020
+391 294 9.62312e+020
+103 60 9.39121e+020
+330 128 9.37211e+020
+211 450 9.12746e+020
+554 41 9.01196e+020
+55 290 8.87608e+020
+389 61 8.79589e+020
+359 334 8.56678e+020
+262 441 8.5423e+020
+223 420 8.52762e+020
+576 16 8.45762e+020
+403 121 8.35747e+020
+364 143 8.33057e+020
+448 299 8.27916e+020
+182 398 8.24371e+020
+534 185 8.12589e+020
+359 220 8.07957e+020
+3 65 7.82525e+020
+248 399 7.73503e+020
+69 476 7.51168e+020
+58 6 7.44708e+020
+480 296 7.37737e+020
+85 148 7.37646e+020
+232 125 7.3668e+020
+139 109 7.35081e+020
+126 254 7.31429e+020
+168 287 7.30664e+020
+410 353 7.26433e+020
+449 204 7.19829e+020
+400 263 7.11932e+020
+284 402 7.1176e+020
+386 178 7.11483e+020
+436 68 6.90917e+020
+36 173 6.86713e+020
+143 324 6.72291e+020
+112 392 6.70019e+020
+165 182 6.65937e+020
+513 262 6.65676e+020
+124 197 6.65273e+020
+309 370 6.63096e+020
+457 43 6.63081e+020
+211 185 6.58228e+020
+514 346 6.53625e+020
+129 75 6.53551e+020
+159 75 6.34314e+020
+448 166 6.31448e+020
+259 165 6.26683e+020
+215 280 6.20304e+020
+160 139 6.1647e+020
+269 70 6.07298e+020
+126 364 5.99519e+020
+508 454 5.97576e+020
+544 457 5.93751e+020
+104 3 5.93356e+020
+364 104 5.89494e+020
+32 270 5.89043e+020
+278 220 5.88782e+020
+79 79 5.71755e+020
+236 348 5.52356e+020
+335 436 5.49779e+020
+541 124 5.47705e+020
+498 225 5.41548e+020
+96 446 5.24552e+020
+488 44 5.18717e+020
+391 218 5.00675e+020
+193 218 4.96988e+020
+305 439 4.87631e+020
+313 84 4.85879e+020
+448 444 4.85666e+020
+169 18 4.82567e+020
+526 423 4.73472e+020
+165 357 4.70944e+020
+347 181 4.61854e+020
+300 264 4.59116e+020
+88 368 4.53228e+020
+358 66 4.47558e+020
+566 160 4.33717e+020
+436 379 4.28225e+020
+467 139 4.26815e+020
+575 459 4.24315e+020
+276 328 4.14067e+020
+513 297 3.89012e+020
+190 312 3.85645e+020
+389 326 3.71143e+020
+493 81 3.68236e+020
+574 421 3.64665e+020
+86 311 3.53903e+020
+69 420 3.33721e+020
+57 373 3.23321e+020
+528 222 3.18126e+020
+569 382 3.16643e+020
+442 240 3.04411e+020
+107 108 3.03993e+020
+514 381 3.03814e+020
+577 245 2.99365e+020
+196 255 2.98018e+020
+20 317 2.8627e+020
+580 345 2.81357e+020
+192 145 2.81059e+020
+432 270 2.7981e+020
+214 94 2.77621e+020
+362 369 2.71367e+020
+130 478 2.52892e+020
+480 440 2.52235e+020
+575 100 2.44264e+020
+117 306 2.43109e+020
+17 434 2.41976e+020
+147 449 2.41271e+020
+537 93 2.34734e+020
+294 141 2.29493e+020
+563 320 2.28627e+020
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_3_3.txt b/test_data/harriscorners/hc_msc_30.00_0.10_3_3.txt
new file mode 100644
index 0000000..79c1a5e
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_3_3.txt
@@ -0,0 +1,183 @@
+182
+449 298 5.04554e+011
+499 1 4.07727e+011
+329 127 3.75398e+011
+388 178 3.36537e+011
+421 183 3.36519e+011
+401 261 3.35327e+011
+535 242 2.99733e+011
+213 72 2.99069e+011
+321 313 2.89276e+011
+75 236 2.88936e+011
+66 320 2.85654e+011
+553 41 2.83848e+011
+121 44 2.78038e+011
+544 170 2.76288e+011
+363 401 2.6411e+011
+385 221 2.63728e+011
+135 215 2.63626e+011
+89 197 2.61697e+011
+447 397 2.60936e+011
+436 68 2.60855e+011
+274 366 2.56453e+011
+200 18 2.55751e+011
+159 143 2.52659e+011
+449 219 2.49467e+011
+45 26 2.4622e+011
+173 312 2.41696e+011
+286 296 2.2879e+011
+515 77 2.26533e+011
+245 94 2.15661e+011
+296 420 2.13989e+011
+223 38 2.13416e+011
+34 138 2.13301e+011
+282 115 2.1232e+011
+301 175 2.1172e+011
+125 255 2.0665e+011
+299 54 2.06455e+011
+448 263 2.06246e+011
+396 319 2.04666e+011
+364 298 2.03605e+011
+3 47 2.02005e+011
+59 185 2.01928e+011
+344 10 1.99666e+011
+471 240 1.97349e+011
+174 238 1.94781e+011
+455 3 1.94671e+011
+175 94 1.9415e+011
+317 385 1.93239e+011
+126 162 1.9193e+011
+242 203 1.90807e+011
+246 143 1.877e+011
+82 27 1.86709e+011
+59 74 1.86456e+011
+426 320 1.84888e+011
+124 362 1.83778e+011
+417 7 1.82238e+011
+480 298 1.80386e+011
+489 264 1.73174e+011
+207 223 1.72592e+011
+348 179 1.71986e+011
+380 68 1.70339e+011
+508 122 1.68457e+011
+507 165 1.6638e+011
+36 269 1.63233e+011
+120 4 1.61874e+011
+382 8 1.60454e+011
+71 148 1.56429e+011
+48 219 1.52688e+011
+484 59 1.50804e+011
+251 13 1.4912e+011
+270 241 1.49046e+011
+303 207 1.45061e+011
+406 375 1.43247e+011
+183 401 1.4181e+011
+524 199 1.41612e+011
+370 107 1.37705e+011
+511 342 1.37393e+011
+543 364 1.34488e+011
+230 266 1.33725e+011
+170 19 1.33638e+011
+467 123 1.32002e+011
+272 166 1.31814e+011
+572 142 1.31246e+011
+360 335 1.31026e+011
+10 102 1.30292e+011
+325 88 1.30076e+011
+208 434 1.28658e+011
+192 276 1.25578e+011
+392 144 1.21695e+011
+338 473 1.20214e+011
+365 259 1.19104e+011
+64 371 1.18653e+011
+240 349 1.17625e+011
+433 146 1.1742e+011
+264 440 1.13441e+011
+266 53 1.13105e+011
+203 310 1.12287e+011
+562 478 1.11323e+011
+35 300 1.1018e+011
+80 474 1.09848e+011
+97 79 1.07589e+011
+260 273 1.06431e+011
+192 124 1.05642e+011
+461 340 1.05299e+011
+326 427 1.04233e+011
+477 182 1.01998e+011
+212 183 1.00529e+011
+277 332 9.79954e+010
+160 183 9.78336e+010
+579 18 9.78298e+010
+300 265 9.55346e+010
+108 325 9.53743e+010
+127 76 9.33655e+010
+112 393 9.31024e+010
+13 206 9.27915e+010
+509 455 9.19396e+010
+148 396 9.17862e+010
+413 100 9.11027e+010
+96 447 9.08206e+010
+215 144 9.07712e+010
+355 220 9.02845e+010
+250 313 8.9639e+010
+192 359 8.87122e+010
+554 201 8.86025e+010
+484 375 8.70552e+010
+169 55 8.61301e+010
+561 321 8.59867e+010
+524 21 8.44043e+010
+111 134 8.3873e+010
+362 370 8.2567e+010
+292 15 7.96816e+010
+221 114 7.92578e+010
+150 114 7.89292e+010
+91 291 7.75289e+010
+419 441 7.7079e+010
+153 446 7.57023e+010
+71 410 7.46217e+010
+537 140 7.259e+010
+510 300 6.95891e+010
+479 451 6.92599e+010
+140 325 6.87943e+010
+411 46 6.80585e+010
+18 342 6.76148e+010
+577 178 6.35279e+010
+2 155 6.35214e+010
+6 9 6.27169e+010
+604 121 6.20124e+010
+544 91 6.17918e+010
+358 143 6.14019e+010
+579 79 5.87909e+010
+398 412 5.86479e+010
+589 309 5.75001e+010
+450 442 5.50529e+010
+64 448 5.50243e+010
+567 423 5.37137e+010
+254 404 5.28804e+010
+598 363 5.27946e+010
+559 271 5.26344e+010
+9 476 5.24613e+010
+618 181 5.12548e+010
+3 381 5.07232e+010
+335 49 4.87484e+010
+526 422 4.84226e+010
+470 418 4.72528e+010
+44 476 4.66647e+010
+385 450 4.55955e+010
+219 387 4.5111e+010
+332 255 4.47975e+010
+500 223 4.09667e+010
+184 201 4.05983e+010
+13 236 3.99191e+010
+534 393 3.91617e+010
+597 272 3.86057e+010
+460 40 3.65809e+010
+568 383 3.55355e+010
+306 354 3.49271e+010
+283 80 3.46323e+010
+41 395 3.2737e+010
+132 477 3.24983e+010
+302 141 3.11393e+010
+59 110 3.08179e+010
+119 423 3.074e+010
+14 434 2.89163e+010
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_3_5.txt b/test_data/harriscorners/hc_msc_30.00_0.10_3_5.txt
new file mode 100644
index 0000000..7692a8b
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_3_5.txt
@@ -0,0 +1,190 @@
+189
+273 366 1.92986e+012
+122 43 1.59863e+012
+244 94 1.43017e+012
+330 128 1.29686e+012
+422 181 1.28873e+012
+84 78 1.23897e+012
+298 53 1.21622e+012
+448 297 1.19804e+012
+237 19 1.18589e+012
+214 72 1.18216e+012
+200 17 1.17126e+012
+134 214 1.15214e+012
+485 59 1.07957e+012
+553 40 1.05189e+012
+395 318 1.0339e+012
+272 291 1.03228e+012
+436 67 1.02144e+012
+175 94 9.89973e+011
+447 397 9.77159e+011
+401 262 9.74749e+011
+507 122 9.54085e+011
+387 178 9.46806e+011
+47 27 9.45205e+011
+544 168 9.42298e+011
+35 138 9.38376e+011
+303 183 9.36694e+011
+363 401 9.34352e+011
+125 364 9.30786e+011
+425 321 9.22566e+011
+160 143 9.19384e+011
+124 254 9.18721e+011
+317 335 8.94043e+011
+253 139 8.79908e+011
+243 202 8.78556e+011
+82 28 8.66168e+011
+65 235 8.55138e+011
+90 198 8.31147e+011
+418 8 8.29339e+011
+262 441 8.25298e+011
+343 9 8.24831e+011
+360 295 8.17085e+011
+393 143 8.12788e+011
+294 15 7.93264e+011
+48 98 7.74279e+011
+207 224 7.70283e+011
+325 88 7.56989e+011
+447 263 7.53726e+011
+514 76 7.47079e+011
+174 312 7.42521e+011
+65 319 7.41009e+011
+508 17 7.39035e+011
+470 239 7.37189e+011
+281 112 7.36766e+011
+543 365 7.25604e+011
+207 435 7.24415e+011
+523 264 7.21332e+011
+466 197 7.17966e+011
+509 164 7.05627e+011
+390 58 6.97112e+011
+2 46 6.89764e+011
+543 216 6.86997e+011
+320 224 6.84964e+011
+427 119 6.83895e+011
+386 221 6.83529e+011
+166 241 6.65958e+011
+128 2 6.64604e+011
+360 335 6.55112e+011
+110 135 6.48018e+011
+308 371 6.32813e+011
+124 185 6.31477e+011
+221 180 6.17628e+011
+143 310 6.13686e+011
+60 184 6.10259e+011
+512 342 6.06258e+011
+359 167 5.97381e+011
+382 6 5.80636e+011
+268 53 5.78802e+011
+29 237 5.63218e+011
+41 63 5.60107e+011
+71 147 5.57635e+011
+364 251 5.56052e+011
+480 297 5.53492e+011
+477 5 5.47488e+011
+10 101 5.45253e+011
+451 339 5.41897e+011
+195 125 5.40678e+011
+486 358 5.39897e+011
+138 110 5.2939e+011
+364 200 5.25526e+011
+31 270 5.21195e+011
+163 277 5.19202e+011
+284 403 5.17435e+011
+573 141 5.14659e+011
+260 237 5.04727e+011
+488 264 5.02923e+011
+511 220 4.98269e+011
+164 20 4.97084e+011
+113 392 4.96565e+011
+509 455 4.88517e+011
+468 124 4.81658e+011
+159 183 4.76075e+011
+410 353 4.71542e+011
+96 446 4.60293e+011
+229 292 4.59932e+011
+221 150 4.58714e+011
+418 440 4.54542e+011
+272 167 4.42547e+011
+372 117 4.38723e+011
+579 17 4.25966e+011
+544 3 4.25295e+011
+183 401 4.25159e+011
+445 23 4.23896e+011
+192 172 4.01978e+011
+376 85 4.01603e+011
+62 371 3.9565e+011
+287 210 3.93408e+011
+326 426 3.92902e+011
+79 474 3.9035e+011
+79 270 3.88226e+011
+133 72 3.76278e+011
+338 473 3.68418e+011
+235 346 3.66848e+011
+576 179 3.62386e+011
+148 397 3.60778e+011
+542 132 3.58104e+011
+109 95 3.50303e+011
+24 200 3.46195e+011
+539 96 3.45274e+011
+539 458 3.41672e+011
+164 358 3.39214e+011
+329 166 3.38899e+011
+1 156 3.38595e+011
+170 57 3.38042e+011
+300 264 3.32345e+011
+557 246 3.25473e+011
+580 80 3.23056e+011
+561 321 3.22245e+011
+233 262 3.20598e+011
+298 137 3.1817e+011
+130 428 3.17161e+011
+478 402 3.05848e+011
+362 370 3.02518e+011
+278 333 2.97845e+011
+44 474 2.95905e+011
+5 10 2.91368e+011
+478 451 2.88304e+011
+248 316 2.83647e+011
+109 325 2.8027e+011
+326 295 2.66093e+011
+526 423 2.61212e+011
+408 82 2.59888e+011
+330 257 2.55752e+011
+571 450 2.53796e+011
+460 162 2.53176e+011
+411 471 2.44074e+011
+18 343 2.404e+011
+573 405 2.34751e+011
+3 382 2.29858e+011
+199 293 2.26654e+011
+389 420 2.26565e+011
+599 364 2.2435e+011
+72 409 2.24019e+011
+245 385 2.23427e+011
+506 381 2.19241e+011
+346 46 2.19184e+011
+434 225 2.18303e+011
+483 328 2.11044e+011
+171 448 2.09415e+011
+203 346 2.01311e+011
+10 475 1.86142e+011
+13 433 1.83941e+011
+101 165 1.81314e+011
+238 422 1.79612e+011
+359 448 1.74675e+011
+548 283 1.70489e+011
+589 309 1.66993e+011
+605 121 1.60162e+011
+579 214 1.59862e+011
+102 295 1.58866e+011
+76 111 1.58861e+011
+512 297 1.5543e+011
+332 392 1.54326e+011
+618 181 1.53329e+011
+450 437 1.51189e+011
+131 476 1.50719e+011
+203 256 1.4891e+011
+302 444 1.47367e+011
+63 440 1.36669e+011
+197 466 1.26392e+011
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_3_7.txt b/test_data/harriscorners/hc_msc_30.00_0.10_3_7.txt
new file mode 100644
index 0000000..a577253
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_3_7.txt
@@ -0,0 +1,193 @@
+192
+121 44 4.84941e+012
+274 367 4.55096e+012
+245 94 4.32557e+012
+421 180 4.09909e+012
+331 128 3.79009e+012
+83 77 3.57588e+012
+499 1 3.54332e+012
+401 263 3.53735e+012
+299 53 3.44537e+012
+135 214 3.38247e+012
+238 20 3.18512e+012
+424 322 3.04337e+012
+271 291 3.041e+012
+81 29 3.00702e+012
+199 18 2.81087e+012
+282 113 2.75319e+012
+75 257 2.68024e+012
+437 68 2.66398e+012
+542 14 2.66063e+012
+458 279 2.59066e+012
+342 8 2.54577e+012
+165 240 2.52535e+012
+510 124 2.44225e+012
+467 238 2.43419e+012
+361 294 2.40389e+012
+210 436 2.35956e+012
+510 166 2.34537e+012
+394 142 2.31198e+012
+543 167 2.30272e+012
+302 184 2.29592e+012
+394 317 2.26998e+012
+482 178 2.25352e+012
+213 58 2.2456e+012
+160 144 2.19052e+012
+486 58 2.18352e+012
+512 78 2.1797e+012
+125 255 2.12015e+012
+175 95 2.11358e+012
+562 225 2.08809e+012
+345 339 2.06081e+012
+243 203 2.05053e+012
+416 8 2.03043e+012
+34 138 2.02214e+012
+293 16 2.00419e+012
+361 395 2.00337e+012
+208 221 1.99842e+012
+102 222 1.9817e+012
+222 181 1.96771e+012
+485 338 1.95887e+012
+83 134 1.93867e+012
+202 313 1.89014e+012
+544 58 1.87306e+012
+319 314 1.83258e+012
+263 442 1.81517e+012
+44 26 1.8113e+012
+127 164 1.80823e+012
+34 267 1.7835e+012
+326 165 1.77938e+012
+126 364 1.75161e+012
+4 46 1.74517e+012
+196 126 1.74388e+012
+448 399 1.73624e+012
+255 139 1.72906e+012
+48 98 1.71694e+012
+383 5 1.70794e+012
+359 166 1.69422e+012
+378 67 1.69035e+012
+454 204 1.68774e+012
+41 217 1.6724e+012
+319 225 1.66902e+012
+326 89 1.65978e+012
+450 338 1.64766e+012
+542 365 1.63822e+012
+127 1 1.63539e+012
+387 220 1.59888e+012
+64 319 1.58994e+012
+269 53 1.58253e+012
+413 45 1.57323e+012
+132 75 1.56606e+012
+388 177 1.56436e+012
+362 258 1.53897e+012
+428 118 1.537e+012
+55 290 1.5166e+012
+157 1 1.50381e+012
+512 221 1.49536e+012
+144 311 1.46671e+012
+174 41 1.43992e+012
+469 123 1.43734e+012
+283 402 1.43581e+012
+60 184 1.42955e+012
+227 293 1.39331e+012
+112 392 1.38466e+012
+298 274 1.3789e+012
+38 63 1.37705e+012
+261 236 1.34087e+012
+329 258 1.33299e+012
+527 195 1.30966e+012
+580 17 1.29337e+012
+562 478 1.27733e+012
+236 347 1.25411e+012
+508 454 1.24848e+012
+522 264 1.24175e+012
+232 263 1.23967e+012
+131 132 1.22102e+012
+409 354 1.21975e+012
+514 346 1.20224e+012
+309 370 1.19627e+012
+220 149 1.19604e+012
+538 457 1.18929e+012
+476 22 1.18636e+012
+7 10 1.15644e+012
+305 439 1.1468e+012
+191 278 1.1402e+012
+190 171 1.11901e+012
+469 421 1.1174e+012
+487 263 1.11684e+012
+405 82 1.10418e+012
+145 392 1.06355e+012
+97 448 1.0623e+012
+574 140 1.05376e+012
+366 105 1.04222e+012
+10 101 1.03198e+012
+446 23 1.03126e+012
+578 53 1.03028e+012
+164 206 1.03025e+012
+108 98 1.02142e+012
+417 438 1.00542e+012
+190 360 1.00266e+012
+183 399 9.96094e+011
+575 178 9.94842e+011
+541 124 9.90203e+011
+273 166 9.76052e+011
+83 476 9.60395e+011
+356 219 9.58988e+011
+276 331 9.12645e+011
+247 386 8.8343e+011
+484 375 8.73749e+011
+515 42 8.67494e+011
+376 353 8.58425e+011
+449 166 8.56854e+011
+91 290 8.45422e+011
+563 323 8.39093e+011
+299 140 8.39051e+011
+61 370 8.2228e+011
+11 204 8.20997e+011
+148 449 7.84455e+011
+538 406 7.73043e+011
+284 211 7.62833e+011
+1 383 7.54231e+011
+346 45 7.541e+011
+572 405 7.54063e+011
+512 298 7.48506e+011
+4 154 7.36524e+011
+437 240 7.17167e+011
+110 326 6.58361e+011
+343 463 6.54777e+011
+448 444 6.46805e+011
+412 471 6.43764e+011
+562 271 6.34095e+011
+338 427 6.25829e+011
+241 421 6.17035e+011
+542 93 6.07026e+011
+45 475 6.06821e+011
+514 380 5.74031e+011
+320 30 5.61981e+011
+388 419 5.38422e+011
+215 94 5.30483e+011
+18 342 5.23577e+011
+72 408 5.11386e+011
+3 234 5.01363e+011
+12 421 4.90688e+011
+593 101 4.79308e+011
+214 400 4.49172e+011
+375 463 4.34264e+011
+600 365 4.15293e+011
+572 446 4.13569e+011
+94 367 4.11056e+011
+176 329 4.06219e+011
+421 290 4.05845e+011
+501 420 4.03367e+011
+130 477 3.68278e+011
+159 277 3.5766e+011
+9 475 3.52264e+011
+62 441 3.40374e+011
+198 466 3.38308e+011
+157 176 3.3519e+011
+283 82 2.78512e+011
+35 389 2.775e+011
+602 276 2.72222e+011
+101 185 2.65237e+011
+317 404 2.47562e+011
+466 84 2.43159e+011
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_5_3.txt b/test_data/harriscorners/hc_msc_30.00_0.10_5_3.txt
new file mode 100644
index 0000000..4c23503
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_5_3.txt
@@ -0,0 +1,177 @@
+176
+499 1 5.56838e+015
+274 366 4.72135e+015
+245 95 4.51807e+015
+363 401 4.46607e+015
+449 298 4.09356e+015
+282 115 3.56796e+015
+122 44 3.44995e+015
+421 182 3.32527e+015
+507 122 3.18223e+015
+251 13 3.00727e+015
+426 320 2.98528e+015
+387 178 2.96541e+015
+553 40 2.96376e+015
+447 397 2.84196e+015
+213 72 2.72728e+015
+65 343 2.56846e+015
+200 18 2.52165e+015
+344 10 2.50168e+015
+435 68 2.49393e+015
+321 313 2.43527e+015
+34 137 2.43461e+015
+223 38 2.42029e+015
+448 263 2.39266e+015
+480 298 2.39066e+015
+135 215 2.3592e+015
+144 309 2.35294e+015
+543 364 2.23627e+015
+110 238 2.21656e+015
+45 27 2.2156e+015
+303 183 2.15998e+015
+299 52 2.1546e+015
+183 401 2.13711e+015
+348 179 2.10095e+015
+412 256 2.06204e+015
+385 221 2.0508e+015
+535 242 1.96008e+015
+246 143 1.95346e+015
+59 219 1.87452e+015
+329 127 1.85485e+015
+271 166 1.85146e+015
+390 58 1.82818e+015
+130 2 1.80265e+015
+261 297 1.72225e+015
+308 372 1.70106e+015
+520 61 1.65454e+015
+2 47 1.65069e+015
+125 363 1.64638e+015
+242 203 1.62704e+015
+224 419 1.62185e+015
+510 173 1.61871e+015
+387 10 1.61622e+015
+37 62 1.61539e+015
+264 440 1.60141e+015
+449 219 1.59871e+015
+360 336 1.59803e+015
+320 224 1.59797e+015
+239 349 1.59583e+015
+418 440 1.58642e+015
+355 220 1.5772e+015
+159 143 1.56618e+015
+417 7 1.55997e+015
+392 144 1.55118e+015
+361 131 1.52981e+015
+411 355 1.51267e+015
+82 28 1.51047e+015
+483 339 1.50046e+015
+359 294 1.49246e+015
+91 198 1.48527e+015
+59 185 1.48357e+015
+432 146 1.47847e+015
+282 403 1.46228e+015
+77 256 1.4573e+015
+177 106 1.45526e+015
+209 223 1.4411e+015
+545 168 1.43519e+015
+192 331 1.38536e+015
+271 71 1.3841e+015
+229 292 1.36253e+015
+513 340 1.359e+015
+300 265 1.35575e+015
+562 478 1.35151e+015
+127 76 1.32431e+015
+112 393 1.32152e+015
+498 82 1.30835e+015
+294 15 1.30224e+015
+140 184 1.29606e+015
+71 148 1.27887e+015
+177 260 1.24434e+015
+41 297 1.20772e+015
+48 99 1.15102e+015
+326 426 1.14798e+015
+212 183 1.13524e+015
+359 260 1.13048e+015
+11 101 1.12346e+015
+510 455 1.11815e+015
+524 20 1.10354e+015
+542 210 1.07802e+015
+471 240 1.07407e+015
+95 446 1.06738e+015
+170 19 1.02552e+015
+87 78 1.02071e+015
+138 110 1.01929e+015
+472 63 1.00089e+015
+338 473 9.88094e+014
+453 340 9.85593e+014
+28 236 9.81983e+014
+528 98 9.75657e+014
+91 291 9.62052e+014
+579 17 9.39068e+014
+208 451 9.19936e+014
+169 55 8.9628e+014
+443 23 8.93422e+014
+124 272 8.92896e+014
+18 342 8.59223e+014
+276 221 8.58515e+014
+325 88 8.57478e+014
+198 130 8.12158e+014
+474 23 8.10268e+014
+489 264 8.0679e+014
+371 82 8.06064e+014
+575 126 7.87363e+014
+576 178 7.79178e+014
+513 220 7.64604e+014
+479 179 7.64206e+014
+6 9 7.62711e+014
+441 98 7.53336e+014
+329 254 7.52521e+014
+108 324 7.26922e+014
+543 130 7.26518e+014
+561 320 7.24038e+014
+164 359 6.99401e+014
+512 295 6.88325e+014
+169 198 6.84484e+014
+100 162 6.71511e+014
+480 403 6.6693e+014
+172 449 6.62328e+014
+80 474 6.43806e+014
+112 134 6.10731e+014
+525 423 6.08629e+014
+3 382 5.64526e+014
+597 272 5.61775e+014
+598 364 5.57017e+014
+514 382 5.54372e+014
+560 81 5.42541e+014
+362 370 5.35248e+014
+265 260 5.33127e+014
+9 476 5.3242e+014
+467 125 5.30285e+014
+3 155 5.27468e+014
+396 104 5.26868e+014
+568 383 5.24277e+014
+45 407 5.21159e+014
+572 449 5.17165e+014
+390 420 5.16423e+014
+479 451 5.16076e+014
+293 334 5.11777e+014
+559 271 4.85557e+014
+133 427 4.85272e+014
+391 324 4.83554e+014
+33 268 4.81324e+014
+83 404 4.74548e+014
+148 396 4.65046e+014
+388 282 4.53596e+014
+13 206 4.34325e+014
+618 181 4.252e+014
+132 477 4.20909e+014
+44 476 4.08518e+014
+295 296 3.98387e+014
+234 261 3.88788e+014
+181 291 3.81682e+014
+440 468 3.80048e+014
+86 370 3.64083e+014
+385 450 3.48056e+014
+245 385 3.36053e+014
+358 52 3.2548e+014
+64 448 2.90273e+014
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_5_5.txt b/test_data/harriscorners/hc_msc_30.00_0.10_5_5.txt
new file mode 100644
index 0000000..74ccef0
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_5_5.txt
@@ -0,0 +1,174 @@
+173
+244 94 3.12284e+016
+273 365 2.67744e+016
+237 19 2.15604e+016
+423 178 1.91173e+016
+362 401 1.84978e+016
+76 257 1.69449e+016
+122 43 1.6497e+016
+261 297 1.60001e+016
+281 113 1.5962e+016
+543 365 1.59453e+016
+200 17 1.56676e+016
+448 297 1.54245e+016
+82 28 1.53752e+016
+427 320 1.50018e+016
+65 343 1.48337e+016
+465 393 1.44678e+016
+320 224 1.37774e+016
+343 9 1.37771e+016
+553 40 1.36802e+016
+300 52 1.35633e+016
+214 72 1.34989e+016
+360 295 1.32124e+016
+35 138 1.31018e+016
+507 122 1.30704e+016
+27 9 1.29558e+016
+59 218 1.26822e+016
+128 2 1.26592e+016
+37 62 1.23452e+016
+134 214 1.22783e+016
+387 178 1.21713e+016
+294 15 1.1689e+016
+303 182 1.11431e+016
+125 364 1.10597e+016
+387 10 1.08676e+016
+448 262 1.08133e+016
+33 99 1.07904e+016
+84 78 1.05559e+016
+263 441 1.05487e+016
+484 338 1.05019e+016
+435 67 1.02872e+016
+127 165 1.01312e+016
+544 168 1.00891e+016
+243 202 1.00882e+016
+124 254 9.82909e+015
+101 222 9.79359e+015
+390 58 9.66299e+015
+225 420 9.50941e+015
+452 339 9.42374e+015
+426 119 9.39205e+015
+329 128 9.33812e+015
+343 338 9.24954e+015
+418 440 9.19639e+015
+412 256 9.09439e+015
+511 167 8.94628e+015
+308 371 8.82072e+015
+253 139 8.75676e+015
+485 59 8.72079e+015
+138 110 8.51002e+015
+144 310 8.43191e+015
+183 400 8.34549e+015
+320 313 8.30478e+015
+480 297 8.25996e+015
+519 61 8.17303e+015
+363 251 8.07731e+015
+470 239 7.97608e+015
+361 131 7.96147e+015
+177 106 7.83729e+015
+2 47 7.78356e+015
+216 279 7.61522e+015
+57 5 7.42726e+015
+391 144 7.2543e+015
+207 450 7.22425e+015
+418 8 7.20432e+015
+160 143 7.18947e+015
+386 220 7.17099e+015
+88 148 7.16867e+015
+112 392 7.08718e+015
+542 210 7.06042e+015
+348 179 6.99798e+015
+163 277 6.99664e+015
+508 18 6.9895e+015
+234 346 6.98009e+015
+509 455 6.97439e+015
+283 403 6.83942e+015
+527 99 6.76557e+015
+480 179 6.68462e+015
+356 220 6.67538e+015
+579 16 6.67048e+015
+96 446 6.62884e+015
+410 353 6.55117e+015
+221 180 6.5489e+015
+169 57 6.49817e+015
+60 183 6.43825e+015
+207 224 6.40102e+015
+55 290 6.33692e+015
+170 18 6.14503e+015
+313 84 6.04247e+015
+390 295 5.93483e+015
+453 204 5.82492e+015
+31 270 5.72702e+015
+434 398 5.67552e+015
+174 312 5.66837e+015
+476 21 5.63224e+015
+271 166 5.63045e+015
+522 264 5.54508e+015
+300 265 5.49744e+015
+95 477 5.48893e+015
+326 425 5.48215e+015
+515 347 5.46224e+015
+511 220 5.41766e+015
+92 292 5.35542e+015
+265 31 4.9139e+015
+544 4 4.86873e+015
+168 197 4.85856e+015
+18 343 4.82591e+015
+165 243 4.75923e+015
+110 95 4.72152e+015
+220 150 4.68263e+015
+488 263 4.65369e+015
+542 132 4.6365e+015
+164 358 4.63509e+015
+13 218 4.57959e+015
+259 237 4.52962e+015
+371 90 4.49466e+015
+270 71 4.30133e+015
+338 473 4.2814e+015
+328 253 3.94975e+015
+576 179 3.93781e+015
+525 423 3.86885e+015
+449 445 3.79695e+015
+571 450 3.73902e+015
+275 329 3.71808e+015
+386 326 3.69908e+015
+573 141 3.695e+015
+307 449 3.69414e+015
+287 210 3.64645e+015
+453 102 3.49293e+015
+512 296 3.38459e+015
+361 369 3.37581e+015
+539 458 3.36213e+015
+559 80 3.33063e+015
+118 425 3.2767e+015
+561 320 3.2557e+015
+69 420 3.20581e+015
+130 72 3.18487e+015
+58 373 3.18351e+015
+573 405 3.09048e+015
+44 474 3.01288e+015
+449 139 2.96233e+015
+131 476 2.9622e+015
+560 272 2.87883e+015
+514 382 2.82588e+015
+148 397 2.77083e+015
+359 53 2.76548e+015
+599 364 2.72564e+015
+483 143 2.67701e+015
+192 172 2.64181e+015
+3 155 2.59365e+015
+16 434 2.50091e+015
+9 476 2.49165e+015
+445 23 2.48847e+015
+482 440 2.36466e+015
+3 382 2.29088e+015
+429 223 2.27912e+015
+220 114 2.2588e+015
+109 325 2.17048e+015
+242 58 2.16653e+015
+597 272 2.16014e+015
+172 450 2.15395e+015
+200 330 2.13505e+015
+411 471 2.06325e+015
+388 420 2.00804e+015
+248 395 2.00317e+015
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_5_7.txt b/test_data/harriscorners/hc_msc_30.00_0.10_5_7.txt
new file mode 100644
index 0000000..a795b93
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_5_7.txt
@@ -0,0 +1,173 @@
+172
+245 94 9.30136e+016
+81 29 6.39569e+016
+421 180 6.35066e+016
+237 20 6.12891e+016
+130 26 5.73559e+016
+272 366 5.60848e+016
+75 257 4.55084e+016
+282 113 4.4202e+016
+261 297 4.24644e+016
+510 124 4.10031e+016
+299 53 3.96282e+016
+424 322 3.88484e+016
+30 8 3.86084e+016
+152 223 3.77959e+016
+199 18 3.74576e+016
+542 14 3.67458e+016
+342 9 3.62215e+016
+83 77 3.54128e+016
+330 128 3.5085e+016
+213 57 3.34705e+016
+34 139 3.32223e+016
+483 178 3.29954e+016
+485 338 3.29582e+016
+543 365 3.27416e+016
+458 279 3.27386e+016
+361 294 3.25213e+016
+363 400 3.25103e+016
+37 63 3.24126e+016
+102 222 3.23121e+016
+302 184 3.14964e+016
+385 10 3.07737e+016
+156 1 3.0623e+016
+293 16 3.01497e+016
+64 344 2.92337e+016
+400 263 2.82456e+016
+464 394 2.80297e+016
+175 110 2.75711e+016
+320 225 2.73619e+016
+320 314 2.71163e+016
+127 165 2.7098e+016
+61 217 2.70366e+016
+391 294 2.69023e+016
+436 68 2.65869e+016
+211 436 2.55881e+016
+451 338 2.5293e+016
+33 100 2.49712e+016
+12 217 2.48797e+016
+359 334 2.46719e+016
+518 59 2.40168e+016
+125 254 2.369e+016
+389 59 2.35751e+016
+403 120 2.34558e+016
+364 250 2.34187e+016
+263 442 2.3375e+016
+55 290 2.21761e+016
+225 181 2.20219e+016
+386 178 2.1468e+016
+416 8 2.13462e+016
+143 324 2.13032e+016
+158 74 2.11156e+016
+4 46 2.08828e+016
+486 58 2.07952e+016
+543 167 2.07451e+016
+418 438 2.0726e+016
+434 112 2.06287e+016
+126 364 2.05811e+016
+580 16 2.05673e+016
+182 398 2.02828e+016
+562 478 2.01909e+016
+453 204 1.97713e+016
+367 144 1.97629e+016
+477 19 1.96866e+016
+387 220 1.9643e+016
+470 238 1.95766e+016
+255 139 1.94059e+016
+123 197 1.9089e+016
+509 16 1.89143e+016
+208 222 1.87786e+016
+174 40 1.85675e+016
+329 258 1.84798e+016
+284 402 1.83154e+016
+139 109 1.82733e+016
+36 174 1.82187e+016
+508 454 1.81163e+016
+410 353 1.79892e+016
+32 270 1.78714e+016
+260 220 1.77797e+016
+514 346 1.75476e+016
+112 392 1.72763e+016
+235 347 1.71679e+016
+313 84 1.70739e+016
+83 134 1.69535e+016
+512 221 1.69474e+016
+104 3 1.69319e+016
+160 144 1.67898e+016
+432 147 1.64791e+016
+69 476 1.61653e+016
+309 370 1.60094e+016
+228 291 1.56864e+016
+305 439 1.53322e+016
+541 124 1.53126e+016
+481 299 1.50173e+016
+176 260 1.48965e+016
+248 399 1.48426e+016
+513 262 1.45768e+016
+97 448 1.44723e+016
+168 196 1.44462e+016
+365 105 1.4427e+016
+202 313 1.42053e+016
+217 147 1.36115e+016
+326 165 1.3493e+016
+561 225 1.32925e+016
+165 357 1.31517e+016
+296 332 1.26306e+016
+539 457 1.25132e+016
+298 274 1.24295e+016
+110 94 1.23388e+016
+446 8 1.22644e+016
+142 393 1.19491e+016
+269 53 1.19068e+016
+271 168 1.1779e+016
+575 178 1.17222e+016
+88 368 1.12599e+016
+538 406 1.11642e+016
+470 121 1.10985e+016
+448 444 1.08038e+016
+436 379 1.05192e+016
+91 290 1.04978e+016
+358 66 1.02913e+016
+335 436 1.01094e+016
+457 42 1.00353e+016
+389 325 9.24795e+015
+437 240 9.09412e+015
+550 58 8.97728e+015
+68 419 8.95396e+015
+572 405 8.83541e+015
+11 78 8.78306e+015
+563 323 8.7427e+015
+480 440 8.50823e+015
+18 343 8.17387e+015
+572 446 8.00995e+015
+537 93 7.97801e+015
+171 312 7.84861e+015
+72 165 7.81826e+015
+110 58 7.7007e+015
+222 116 7.63441e+015
+339 473 7.59933e+015
+147 449 7.52809e+015
+360 368 7.45275e+015
+39 238 7.09463e+015
+110 326 6.91597e+015
+514 381 6.9145e+015
+574 140 6.91413e+015
+130 478 6.89567e+015
+578 81 6.85031e+015
+17 434 6.82353e+015
+513 298 6.73612e+015
+343 200 6.68869e+015
+179 168 6.58637e+015
+1 383 6.4724e+015
+195 84 6.15592e+015
+541 248 5.67929e+015
+115 130 5.57412e+015
+597 364 5.55856e+015
+559 272 5.44413e+015
+412 471 5.24667e+015
+248 260 5.23439e+015
+513 182 5.1868e+015
+294 141 5.12272e+015
+389 450 5.03246e+015
+213 398 4.77931e+015
+201 345 4.68516e+015
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_7_3.txt b/test_data/harriscorners/hc_msc_30.00_0.10_7_3.txt
new file mode 100644
index 0000000..696812f
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_7_3.txt
@@ -0,0 +1,172 @@
+171
+245 95 1.26647e+020
+499 1 1.10239e+020
+274 366 1.00414e+020
+363 401 9.63726e+019
+251 13 7.04474e+019
+282 115 6.25569e+019
+65 343 5.93703e+019
+507 122 5.80434e+019
+449 298 5.79116e+019
+131 36 5.78775e+019
+261 297 5.22611e+019
+426 320 4.90999e+019
+465 394 4.89398e+019
+344 10 4.75053e+019
+200 16 4.6941e+019
+520 61 4.67532e+019
+130 2 4.54327e+019
+37 62 4.46205e+019
+418 440 4.42616e+019
+421 182 4.41514e+019
+28 8 4.4031e+019
+387 10 4.40002e+019
+59 219 4.35944e+019
+480 298 4.32664e+019
+387 178 4.30534e+019
+553 40 4.24744e+019
+110 238 4.02671e+019
+213 72 3.98399e+019
+72 24 3.97202e+019
+435 68 3.96913e+019
+448 263 3.96281e+019
+543 364 3.91426e+019
+183 401 3.76931e+019
+271 166 3.7312e+019
+144 309 3.72145e+019
+390 58 3.6718e+019
+125 199 3.6717e+019
+299 52 3.62835e+019
+223 38 3.58624e+019
+303 183 3.54916e+019
+34 137 3.5007e+019
+77 257 3.45623e+019
+271 71 3.40639e+019
+355 220 3.39964e+019
+321 313 3.38621e+019
+411 354 3.37996e+019
+320 224 3.37215e+019
+4 66 3.36766e+019
+348 179 3.35514e+019
+512 167 3.32859e+019
+264 440 3.26804e+019
+224 419 3.2526e+019
+482 365 3.23301e+019
+359 260 3.12525e+019
+385 221 3.11562e+019
+412 256 3.08576e+019
+432 146 3.07215e+019
+402 122 3.06544e+019
+101 58 3.05752e+019
+177 106 3.05161e+019
+92 198 3.01773e+019
+545 168 2.9121e+019
+58 183 2.91056e+019
+111 393 2.88103e+019
+512 341 2.87275e+019
+498 82 2.85646e+019
+308 372 2.84741e+019
+228 292 2.79042e+019
+361 131 2.78118e+019
+239 349 2.77336e+019
+41 297 2.76886e+019
+563 478 2.73574e+019
+300 265 2.69052e+019
+359 294 2.68634e+019
+293 15 2.68558e+019
+360 336 2.67743e+019
+524 20 2.65096e+019
+453 340 2.61181e+019
+246 143 2.59615e+019
+283 403 2.57248e+019
+138 110 2.55284e+019
+225 221 2.46766e+019
+124 362 2.46528e+019
+167 286 2.46462e+019
+434 398 2.46313e+019
+127 76 2.43396e+019
+12 101 2.43218e+019
+430 1 2.40024e+019
+128 164 2.39223e+019
+312 149 2.38891e+019
+510 455 2.38544e+019
+528 98 2.32447e+019
+192 331 2.30993e+019
+170 57 2.24253e+019
+334 436 2.17917e+019
+95 446 2.16059e+019
+329 254 2.12142e+019
+481 179 2.11707e+019
+87 148 2.11022e+019
+577 15 2.07589e+019
+475 22 2.0723e+019
+158 143 2.04611e+019
+514 223 2.01903e+019
+123 272 1.99002e+019
+449 219 1.98652e+019
+208 451 1.98355e+019
+472 63 1.97822e+019
+48 100 1.968e+019
+162 214 1.96612e+019
+542 210 1.95717e+019
+212 182 1.88578e+019
+279 222 1.84016e+019
+170 18 1.8327e+019
+91 292 1.79296e+019
+328 66 1.78835e+019
+192 219 1.7703e+019
+512 295 1.76228e+019
+478 263 1.65405e+019
+433 110 1.65266e+019
+15 219 1.62868e+019
+482 331 1.49298e+019
+542 130 1.4861e+019
+18 342 1.48257e+019
+525 424 1.46825e+019
+576 178 1.43924e+019
+358 64 1.40789e+019
+390 296 1.39683e+019
+342 106 1.37709e+019
+141 394 1.37326e+019
+166 244 1.37241e+019
+84 476 1.35052e+019
+198 130 1.24117e+019
+243 190 1.23516e+019
+597 272 1.2338e+019
+571 448 1.22961e+019
+520 263 1.21964e+019
+568 382 1.19237e+019
+338 473 1.18158e+019
+561 320 1.1614e+019
+514 382 1.15902e+019
+131 476 1.15556e+019
+163 358 1.12512e+019
+560 81 1.10934e+019
+598 364 1.08584e+019
+297 331 1.06851e+019
+45 407 1.02578e+019
+449 446 1.01715e+019
+78 79 9.37205e+018
+160 183 9.22645e+018
+469 140 9.17013e+018
+56 373 9.03967e+018
+172 449 9.02978e+018
+363 370 8.78994e+018
+3 155 8.73865e+018
+108 324 8.63749e+018
+3 382 8.57887e+018
+265 260 8.54051e+018
+479 451 8.49716e+018
+43 474 8.47875e+018
+83 404 7.97955e+018
+559 271 7.96202e+018
+575 126 7.89151e+018
+88 369 7.78714e+018
+247 394 7.31932e+018
+9 476 7.27112e+018
+390 420 7.08812e+018
+2 435 6.97494e+018
+33 268 6.94687e+018
+466 102 6.93159e+018
+377 461 6.80531e+018
+390 332 6.48138e+018
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_7_5.txt b/test_data/harriscorners/hc_msc_30.00_0.10_7_5.txt
new file mode 100644
index 0000000..f16751f
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_7_5.txt
@@ -0,0 +1,170 @@
+169
+245 94 7.93833e+020
+273 365 6.16873e+020
+237 20 5.39745e+020
+261 297 5.06198e+020
+423 178 5.03014e+020
+362 401 4.91781e+020
+543 365 4.52516e+020
+27 9 4.41432e+020
+65 343 4.3046e+020
+281 113 4.27048e+020
+76 257 4.23405e+020
+465 393 3.94011e+020
+82 28 3.90413e+020
+131 26 3.88975e+020
+195 58 3.73473e+020
+37 62 3.6955e+020
+59 218 3.44381e+020
+343 9 3.41501e+020
+320 224 3.29754e+020
+387 10 3.28647e+020
+448 297 3.24214e+020
+427 320 3.17554e+020
+127 165 3.13923e+020
+360 295 3.03239e+020
+33 99 3.00169e+020
+200 17 2.99985e+020
+510 124 2.93241e+020
+418 439 2.773e+020
+552 40 2.67768e+020
+452 339 2.62689e+020
+519 61 2.62595e+020
+358 260 2.61695e+020
+138 203 2.61145e+020
+484 338 2.60904e+020
+448 262 2.59614e+020
+294 15 2.575e+020
+225 420 2.56769e+020
+387 178 2.52336e+020
+35 137 2.45925e+020
+263 441 2.44208e+020
+511 167 2.43027e+020
+525 24 2.42538e+020
+302 185 2.38449e+020
+300 52 2.36035e+020
+390 61 2.34325e+020
+320 313 2.26042e+020
+101 222 2.26017e+020
+181 111 2.21448e+020
+138 110 2.19841e+020
+243 202 2.1218e+020
+183 400 2.11385e+020
+544 168 2.11351e+020
+433 112 2.09463e+020
+356 220 2.08432e+020
+483 178 2.06598e+020
+343 338 2.0451e+020
+4 66 2.03043e+020
+216 279 1.99103e+020
+102 59 1.98212e+020
+480 297 1.95933e+020
+55 290 1.94617e+020
+435 69 1.92385e+020
+361 131 1.92312e+020
+411 354 1.86562e+020
+112 393 1.85688e+020
+57 4 1.84723e+020
+125 364 1.83788e+020
+404 121 1.81888e+020
+283 403 1.81108e+020
+142 324 1.80529e+020
+390 295 1.78087e+020
+509 455 1.75504e+020
+476 21 1.74646e+020
+125 254 1.72286e+020
+412 256 1.70388e+020
+308 372 1.70202e+020
+234 346 1.69292e+020
+261 165 1.68815e+020
+386 220 1.65449e+020
+207 450 1.64043e+020
+431 147 1.63523e+020
+434 398 1.627e+020
+327 142 1.62461e+020
+579 16 1.61121e+020
+88 148 1.60012e+020
+13 218 1.59909e+020
+167 286 1.58795e+020
+36 173 1.566e+020
+542 210 1.49771e+020
+417 23 1.49343e+020
+334 436 1.4714e+020
+95 477 1.46347e+020
+168 197 1.45225e+020
+527 99 1.42106e+020
+515 347 1.4007e+020
+300 265 1.37495e+020
+348 179 1.37346e+020
+159 138 1.37309e+020
+479 262 1.34239e+020
+328 253 1.33166e+020
+453 206 1.31157e+020
+96 447 1.29216e+020
+104 4 1.27387e+020
+78 79 1.26576e+020
+192 219 1.21199e+020
+512 262 1.21178e+020
+212 182 1.20942e+020
+270 71 1.18357e+020
+163 74 1.18148e+020
+313 84 1.15993e+020
+18 343 1.15407e+020
+170 18 1.1529e+020
+484 59 1.11525e+020
+265 31 1.09035e+020
+512 296 1.07632e+020
+92 292 1.07421e+020
+449 445 1.07357e+020
+164 358 1.05631e+020
+247 399 1.03204e+020
+371 90 1.0299e+020
+31 270 1.02251e+020
+278 222 1.01921e+020
+165 244 1.01598e+020
+512 220 9.7136e+019
+192 330 9.6393e+019
+275 329 9.511e+019
+539 405 9.22603e+019
+109 96 9.08475e+019
+57 373 9.00665e+019
+542 132 8.87235e+019
+543 457 8.62426e+019
+342 107 8.39044e+019
+231 125 8.37665e+019
+69 420 8.3625e+019
+568 382 7.89531e+019
+514 382 7.70732e+019
+469 140 7.65286e+019
+386 327 7.63425e+019
+130 476 7.59267e+019
+535 241 7.54362e+019
+559 80 7.40476e+019
+118 425 7.3788e+019
+338 473 7.17214e+019
+191 146 7.16245e+019
+130 72 6.66598e+019
+359 53 6.52323e+019
+362 370 6.51085e+019
+445 8 6.49224e+019
+576 179 6.43547e+019
+569 422 6.25782e+019
+597 272 6.12876e+019
+50 453 6.03793e+019
+561 320 5.98814e+019
+88 369 5.82259e+019
+574 459 5.81294e+019
+16 434 5.63148e+019
+599 364 5.53374e+019
+220 317 5.38516e+019
+482 440 5.32786e+019
+148 397 5.31098e+019
+560 272 4.89826e+019
+257 250 4.76841e+019
+74 186 4.70505e+019
+172 450 4.70224e+019
+225 50 4.67924e+019
+9 476 4.51146e+019
+214 93 4.42701e+019
+387 450 4.2368e+019
+580 245 4.20439e+019
diff --git a/test_data/harriscorners/hc_msc_30.00_0.10_7_7.txt b/test_data/harriscorners/hc_msc_30.00_0.10_7_7.txt
new file mode 100644
index 0000000..94effd7
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.10_7_7.txt
@@ -0,0 +1,165 @@
+164
+245 94 2.23905e+021
+81 29 1.94901e+021
+130 26 1.74076e+021
+237 20 1.65854e+021
+421 180 1.49323e+021
+261 298 1.35648e+021
+26 9 1.21566e+021
+272 366 1.20353e+021
+195 58 1.12412e+021
+76 257 1.11254e+021
+543 365 1.02632e+021
+525 24 9.99859e+020
+37 63 9.79255e+020
+282 113 9.74533e+020
+152 223 9.60171e+020
+510 124 9.51656e+020
+65 344 9.34467e+020
+385 10 9.23402e+020
+343 9 9.01463e+020
+363 400 8.39108e+020
+424 322 8.1715e+020
+483 178 7.95869e+020
+476 262 7.77446e+020
+485 338 7.77262e+020
+127 165 7.72098e+020
+302 185 7.6577e+020
+102 222 7.48982e+020
+12 218 7.32633e+020
+34 139 7.26751e+020
+60 217 7.20979e+020
+357 259 7.20897e+020
+464 393 7.20489e+020
+359 294 7.18986e+020
+33 100 7.15869e+020
+293 16 7.08559e+020
+451 339 7.04368e+020
+175 110 6.98635e+020
+199 18 6.97467e+020
+320 225 6.91753e+020
+320 314 6.84618e+020
+299 53 6.82309e+020
+391 294 6.80906e+020
+519 60 6.79072e+020
+418 438 6.67935e+020
+428 2 6.60889e+020
+330 128 6.42916e+020
+434 112 6.19958e+020
+83 77 5.92547e+020
+389 60 5.91158e+020
+359 334 5.9048e+020
+210 450 5.83259e+020
+224 420 5.78007e+020
+55 290 5.76472e+020
+403 121 5.7631e+020
+359 220 5.62752e+020
+533 185 5.62184e+020
+448 299 5.56231e+020
+554 40 5.55595e+020
+263 442 5.4304e+020
+182 398 5.40576e+020
+476 21 5.38215e+020
+580 16 5.19542e+020
+139 109 5.05762e+020
+284 402 5.01282e+020
+449 204 4.93976e+020
+399 263 4.91906e+020
+85 148 4.91857e+020
+386 178 4.91392e+020
+410 353 4.89393e+020
+364 143 4.87368e+020
+150 306 4.82739e+020
+232 125 4.82054e+020
+248 399 4.7858e+020
+436 68 4.76904e+020
+243 202 4.75498e+020
+126 254 4.68323e+020
+36 173 4.66421e+020
+3 65 4.5624e+020
+513 262 4.56026e+020
+159 75 4.51806e+020
+112 392 4.50994e+020
+514 346 4.48706e+020
+69 476 4.40382e+020
+448 166 4.37743e+020
+259 165 4.25687e+020
+509 454 4.25484e+020
+165 182 4.23116e+020
+57 4 4.23036e+020
+104 3 4.23015e+020
+211 185 4.22781e+020
+562 461 4.16043e+020
+215 280 4.14565e+020
+129 74 3.92324e+020
+541 124 3.84231e+020
+176 260 3.77985e+020
+235 346 3.76178e+020
+123 197 3.73433e+020
+479 296 3.68434e+020
+32 270 3.65171e+020
+335 436 3.54853e+020
+498 225 3.54395e+020
+365 105 3.47933e+020
+125 364 3.47528e+020
+313 84 3.42675e+020
+278 220 3.4075e+020
+392 218 3.29967e+020
+165 357 3.26251e+020
+193 218 3.22435e+020
+448 444 3.21e+020
+300 264 3.17566e+020
+309 371 3.16411e+020
+358 66 3.16303e+020
+96 448 3.16098e+020
+186 289 3.14667e+020
+486 58 2.98863e+020
+436 379 2.95301e+020
+305 439 2.93419e+020
+160 139 2.91805e+020
+348 181 2.83286e+020
+169 18 2.80254e+020
+270 73 2.75943e+020
+88 368 2.70827e+020
+538 406 2.67067e+020
+484 142 2.61764e+020
+117 426 2.5173e+020
+296 332 2.51666e+020
+86 311 2.45187e+020
+142 393 2.34554e+020
+68 419 2.33123e+020
+574 178 2.16241e+020
+569 382 2.11356e+020
+389 326 2.05193e+020
+18 343 2.02527e+020
+437 240 1.96387e+020
+577 245 1.96329e+020
+215 96 1.94538e+020
+192 144 1.9284e+020
+528 222 1.87144e+020
+563 323 1.8458e+020
+57 373 1.84569e+020
+514 381 1.80905e+020
+512 297 1.77627e+020
+482 440 1.77294e+020
+130 478 1.75946e+020
+191 329 1.74005e+020
+575 100 1.72744e+020
+569 422 1.72174e+020
+107 108 1.71646e+020
+432 270 1.66191e+020
+17 434 1.59101e+020
+146 449 1.57715e+020
+220 315 1.5295e+020
+597 364 1.5085e+020
+65 182 1.49251e+020
+360 369 1.46844e+020
+537 93 1.43765e+020
+339 473 1.404e+020
+1 156 1.34937e+020
+562 149 1.30796e+020
+294 141 1.2345e+020
+389 449 1.23249e+020
+225 51 1.16419e+020
+597 273 1.14987e+020
+266 258 1.12508e+020
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_3_3.txt b/test_data/harriscorners/hc_msc_30.00_0.15_3_3.txt
new file mode 100644
index 0000000..8e20cf8
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_3_3.txt
@@ -0,0 +1,177 @@
+176
+449 298 3.32013e+011
+329 127 2.40479e+011
+499 1 2.3572e+011
+388 178 2.22672e+011
+421 183 2.15372e+011
+401 261 2.13482e+011
+213 72 1.93722e+011
+66 320 1.81165e+011
+321 313 1.79205e+011
+544 170 1.78251e+011
+363 401 1.74675e+011
+121 44 1.72328e+011
+365 200 1.66654e+011
+553 40 1.65255e+011
+75 236 1.60659e+011
+135 215 1.603e+011
+449 219 1.59546e+011
+159 143 1.52973e+011
+514 77 1.44856e+011
+89 197 1.42311e+011
+45 26 1.39432e+011
+447 397 1.39158e+011
+223 38 1.35886e+011
+285 297 1.35718e+011
+125 255 1.35631e+011
+436 68 1.34254e+011
+282 115 1.34177e+011
+296 420 1.31746e+011
+396 319 1.30232e+011
+144 309 1.30226e+011
+344 10 1.27771e+011
+173 94 1.27765e+011
+256 386 1.24699e+011
+246 143 1.23946e+011
+184 35 1.23258e+011
+299 54 1.23249e+011
+124 362 1.21894e+011
+522 263 1.20143e+011
+59 185 1.19992e+011
+417 7 1.19915e+011
+34 137 1.18269e+011
+177 260 1.18138e+011
+426 320 1.16482e+011
+58 74 1.16247e+011
+140 184 1.15883e+011
+242 203 1.14681e+011
+545 217 1.13457e+011
+317 385 1.1145e+011
+480 298 1.11068e+011
+245 95 1.08943e+011
+71 148 1.02865e+011
+507 122 1.02318e+011
+3 47 1.02278e+011
+46 219 1.00061e+011
+301 175 9.96735e+010
+206 223 9.87767e+010
+484 59 9.8545e+010
+380 68 9.75023e+010
+270 241 9.47397e+010
+364 298 9.31987e+010
+82 27 9.31434e+010
+489 264 9.16105e+010
+448 263 9.09534e+010
+112 4 8.94971e+010
+183 401 8.90444e+010
+287 344 8.71933e+010
+406 375 8.67871e+010
+511 342 8.38851e+010
+467 123 8.37288e+010
+359 168 8.36512e+010
+360 335 8.35301e+010
+507 164 8.33022e+010
+208 434 8.3186e+010
+572 142 8.3011e+010
+272 166 8.22367e+010
+10 102 8.18657e+010
+251 13 8.14815e+010
+324 88 8.08953e+010
+455 3 7.82006e+010
+433 146 7.75953e+010
+392 144 7.50462e+010
+543 364 7.49456e+010
+64 371 7.38101e+010
+382 8 7.29965e+010
+35 300 7.23838e+010
+240 349 7.0726e+010
+562 478 7.07163e+010
+192 331 7.05062e+010
+373 116 6.90968e+010
+479 181 6.74053e+010
+260 273 6.70827e+010
+313 222 6.70554e+010
+338 473 6.64691e+010
+326 427 6.64265e+010
+556 245 6.57224e+010
+221 181 6.50149e+010
+364 255 6.44384e+010
+461 340 6.31388e+010
+538 95 6.16153e+010
+266 53 6.07627e+010
+110 96 6.04995e+010
+300 265 6.00032e+010
+230 267 5.83829e+010
+264 440 5.63203e+010
+579 18 5.4104e+010
+13 206 5.3914e+010
+510 456 5.27146e+010
+148 396 5.24387e+010
+79 474 5.05485e+010
+561 321 5.0382e+010
+150 114 5.02088e+010
+36 268 5.00971e+010
+215 144 4.98261e+010
+221 114 4.97901e+010
+96 125 4.93265e+010
+71 410 4.9117e+010
+189 180 4.90307e+010
+108 325 4.88593e+010
+292 15 4.86476e+010
+172 449 4.84895e+010
+97 447 4.81475e+010
+524 20 4.80395e+010
+112 393 4.66266e+010
+441 98 4.64145e+010
+510 300 4.59435e+010
+91 291 4.58293e+010
+484 361 4.53839e+010
+250 313 4.51898e+010
+18 342 4.4631e+010
+536 138 4.46003e+010
+134 72 4.4342e+010
+479 451 4.32558e+010
+361 369 4.23308e+010
+445 453 4.22977e+010
+192 123 4.21697e+010
+175 2 4.1106e+010
+6 9 3.91992e+010
+511 205 3.90671e+010
+164 359 3.90655e+010
+579 79 3.79667e+010
+274 206 3.66128e+010
+411 45 3.64242e+010
+589 309 3.64136e+010
+398 412 3.6334e+010
+133 427 3.62958e+010
+604 121 3.61506e+010
+64 448 3.50251e+010
+410 99 3.45742e+010
+567 423 3.4525e+010
+2 155 3.39925e+010
+148 21 3.37901e+010
+598 364 3.2829e+010
+577 178 3.27128e+010
+480 402 3.14244e+010
+618 181 3.02249e+010
+9 476 3.00409e+010
+110 168 2.97306e+010
+206 293 2.93707e+010
+44 476 2.7867e+010
+412 221 2.74471e+010
+219 387 2.73313e+010
+513 402 2.54673e+010
+84 59 2.53428e+010
+597 272 2.50876e+010
+485 221 2.45802e+010
+337 240 2.42433e+010
+361 449 2.37025e+010
+336 50 2.31582e+010
+568 383 2.2859e+010
+391 449 2.12083e+010
+132 477 2.08219e+010
+13 236 2.06532e+010
+302 141 1.95888e+010
+165 208 1.9313e+010
+41 395 1.83098e+010
+549 281 1.81198e+010
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_3_5.txt b/test_data/harriscorners/hc_msc_30.00_0.15_3_5.txt
new file mode 100644
index 0000000..cc29fad
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_3_5.txt
@@ -0,0 +1,191 @@
+190
+273 366 1.03858e+012
+122 43 9.43959e+011
+330 128 7.81711e+011
+420 181 7.62046e+011
+84 78 7.4066e+011
+448 297 7.33463e+011
+298 53 7.27697e+011
+214 73 6.97482e+011
+237 19 6.86312e+011
+134 214 6.70817e+011
+272 291 6.68358e+011
+199 18 6.67754e+011
+246 94 6.65694e+011
+485 59 6.49721e+011
+436 67 6.48386e+011
+553 40 6.47487e+011
+175 94 6.43601e+011
+387 178 6.25761e+011
+125 364 6.1605e+011
+507 122 6.13473e+011
+395 318 6.08429e+011
+544 168 6.07178e+011
+447 397 6.00073e+011
+400 262 5.93597e+011
+124 254 5.91885e+011
+425 321 5.8891e+011
+303 182 5.86818e+011
+33 137 5.83375e+011
+253 139 5.58292e+011
+65 235 5.50484e+011
+262 441 5.3871e+011
+160 143 5.17429e+011
+90 198 5.12305e+011
+48 27 5.11262e+011
+393 143 5.0707e+011
+242 203 5.05173e+011
+207 224 5.03916e+011
+294 15 4.96819e+011
+363 401 4.96682e+011
+344 9 4.86838e+011
+325 88 4.86587e+011
+360 295 4.83138e+011
+543 365 4.80161e+011
+82 28 4.78084e+011
+418 8 4.75979e+011
+207 435 4.6989e+011
+514 76 4.67605e+011
+523 264 4.66568e+011
+344 338 4.64985e+011
+449 218 4.5769e+011
+390 58 4.54325e+011
+282 117 4.52687e+011
+447 263 4.43206e+011
+65 319 4.34407e+011
+166 241 4.31838e+011
+48 98 4.31676e+011
+174 312 4.21507e+011
+141 183 4.1557e+011
+498 159 4.08252e+011
+427 118 4.04419e+011
+508 18 3.98737e+011
+512 342 3.97353e+011
+143 310 3.97089e+011
+359 167 3.91162e+011
+542 209 3.88336e+011
+5 46 3.7286e+011
+268 53 3.71127e+011
+221 181 3.66146e+011
+60 184 3.63558e+011
+451 339 3.56297e+011
+37 63 3.45124e+011
+364 200 3.43142e+011
+364 251 3.41754e+011
+83 135 3.39823e+011
+320 225 3.36827e+011
+482 338 3.3627e+011
+163 277 3.31134e+011
+308 371 3.26095e+011
+509 455 3.21147e+011
+31 270 3.20023e+011
+138 110 3.19824e+011
+386 221 3.1865e+011
+164 20 3.16136e+011
+467 124 3.09602e+011
+511 220 3.08225e+011
+382 5 3.05338e+011
+372 83 3.02607e+011
+573 141 2.98537e+011
+283 402 2.9724e+011
+321 313 2.96154e+011
+113 392 2.91688e+011
+488 265 2.89662e+011
+478 15 2.84978e+011
+113 3 2.83074e+011
+221 150 2.81971e+011
+10 102 2.78064e+011
+30 237 2.77724e+011
+407 352 2.73863e+011
+544 3 2.73506e+011
+188 181 2.66254e+011
+260 235 2.60261e+011
+372 117 2.60218e+011
+183 401 2.52683e+011
+79 270 2.51858e+011
+62 371 2.50521e+011
+222 115 2.492e+011
+480 299 2.43989e+011
+164 208 2.38266e+011
+272 167 2.37981e+011
+191 145 2.37093e+011
+326 427 2.37061e+011
+133 74 2.36897e+011
+541 123 2.34776e+011
+418 439 2.30854e+011
+225 295 2.2833e+011
+445 22 2.28238e+011
+148 397 2.25773e+011
+579 16 2.24883e+011
+539 458 2.18791e+011
+164 358 2.1789e+011
+78 474 2.17321e+011
+235 346 2.14947e+011
+339 473 2.12906e+011
+249 313 2.10437e+011
+576 179 2.0854e+011
+25 200 2.0702e+011
+96 449 2.05814e+011
+557 246 2.01814e+011
+561 321 1.97841e+011
+233 261 1.91459e+011
+580 80 1.90309e+011
+301 264 1.87959e+011
+109 98 1.8731e+011
+479 451 1.87e+011
+3 155 1.84921e+011
+168 56 1.80371e+011
+297 331 1.80217e+011
+517 184 1.77266e+011
+130 428 1.74728e+011
+44 474 1.72145e+011
+5 9 1.71002e+011
+408 82 1.66923e+011
+321 29 1.63095e+011
+452 162 1.62116e+011
+571 450 1.60236e+011
+449 445 1.57725e+011
+329 166 1.54399e+011
+573 405 1.52081e+011
+539 405 1.48029e+011
+18 342 1.44682e+011
+471 421 1.41338e+011
+361 370 1.39801e+011
+71 409 1.39222e+011
+411 471 1.39163e+011
+388 420 1.38651e+011
+485 377 1.37903e+011
+171 448 1.33044e+011
+3 382 1.32873e+011
+111 169 1.32458e+011
+599 364 1.32131e+011
+109 325 1.31765e+011
+249 387 1.22235e+011
+359 53 1.20144e+011
+200 327 1.19442e+011
+545 91 1.1901e+011
+478 205 1.17511e+011
+274 206 1.1267e+011
+12 433 1.12236e+011
+485 235 1.06295e+011
+618 181 9.99343e+010
+605 121 9.97144e+010
+114 132 9.86911e+010
+10 475 9.69356e+010
+302 141 9.52827e+010
+359 448 9.05358e+010
+116 289 8.99796e+010
+42 298 8.97637e+010
+131 476 8.76328e+010
+547 283 8.52798e+010
+279 87 8.1735e+010
+216 403 8.14718e+010
+197 466 7.82501e+010
+63 448 7.72254e+010
+95 367 6.98138e+010
+332 395 6.95871e+010
+301 444 6.3781e+010
+602 275 6.37149e+010
+579 214 6.28995e+010
+511 297 6.16229e+010
+502 419 6.11078e+010
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_3_7.txt b/test_data/harriscorners/hc_msc_30.00_0.15_3_7.txt
new file mode 100644
index 0000000..fb6c5c3
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_3_7.txt
@@ -0,0 +1,187 @@
+186
+121 44 3.00111e+012
+274 367 2.74009e+012
+421 180 2.53537e+012
+401 263 2.3162e+012
+331 128 2.28505e+012
+135 214 2.15244e+012
+299 53 2.04517e+012
+246 94 2.01927e+012
+83 77 1.97487e+012
+424 322 1.9503e+012
+238 19 1.94856e+012
+81 29 1.92336e+012
+271 291 1.92071e+012
+199 18 1.75559e+012
+437 68 1.73882e+012
+75 257 1.7191e+012
+458 279 1.7175e+012
+542 14 1.70482e+012
+282 113 1.68526e+012
+165 240 1.59462e+012
+510 124 1.57588e+012
+210 436 1.54354e+012
+361 294 1.52489e+012
+482 178 1.47515e+012
+302 184 1.44458e+012
+512 78 1.4284e+012
+213 58 1.4021e+012
+390 142 1.39784e+012
+345 339 1.36153e+012
+561 225 1.35675e+012
+160 144 1.35424e+012
+394 317 1.33599e+012
+484 58 1.32695e+012
+510 166 1.32636e+012
+293 16 1.32167e+012
+174 95 1.32066e+012
+543 167 1.31259e+012
+343 8 1.30545e+012
+224 181 1.30253e+012
+208 222 1.29339e+012
+125 255 1.29313e+012
+34 138 1.29025e+012
+102 222 1.28989e+012
+361 395 1.25263e+012
+484 338 1.21752e+012
+419 8 1.19542e+012
+124 185 1.19175e+012
+263 442 1.15975e+012
+544 58 1.15505e+012
+30 8 1.15454e+012
+126 364 1.1271e+012
+359 166 1.11153e+012
+448 399 1.10582e+012
+4 46 1.09981e+012
+326 165 1.08554e+012
+450 338 1.07609e+012
+47 98 1.07151e+012
+390 59 1.0699e+012
+252 139 1.06766e+012
+326 89 1.05807e+012
+34 267 1.0526e+012
+450 204 1.04345e+012
+319 225 1.04285e+012
+542 365 1.04225e+012
+507 19 1.03728e+012
+202 313 1.01172e+012
+383 5 1.00903e+012
+319 314 1.00862e+012
+388 177 9.94198e+011
+373 84 9.8561e+011
+83 136 9.82918e+011
+467 238 9.72139e+011
+269 53 9.64672e+011
+362 258 9.62916e+011
+432 147 9.566e+011
+55 290 9.43352e+011
+144 311 9.4138e+011
+132 74 9.33892e+011
+387 220 9.31659e+011
+428 117 9.31422e+011
+46 221 9.226e+011
+283 402 9.21484e+011
+260 220 9.20784e+011
+64 342 9.19693e+011
+469 123 9.19459e+011
+60 184 8.90961e+011
+174 41 8.89402e+011
+112 391 8.67389e+011
+562 478 8.43036e+011
+156 1 8.42127e+011
+508 454 8.31995e+011
+512 219 8.25834e+011
+12 217 8.20592e+011
+217 145 8.16945e+011
+36 63 8.08903e+011
+523 265 8.03313e+011
+329 258 7.97306e+011
+236 347 7.94361e+011
+538 457 7.87947e+011
+229 293 7.47533e+011
+477 19 7.44135e+011
+190 171 7.35927e+011
+191 278 7.28685e+011
+409 354 7.23223e+011
+145 392 6.97663e+011
+580 16 6.93764e+011
+131 132 6.84078e+011
+514 346 6.82689e+011
+298 274 6.77563e+011
+541 124 6.56386e+011
+471 421 6.54279e+011
+487 263 6.52939e+011
+159 181 6.45858e+011
+108 98 6.30298e+011
+104 3 6.28973e+011
+190 360 6.26917e+011
+97 449 6.2525e+011
+232 263 6.23922e+011
+362 130 6.07766e+011
+579 81 6.0182e+011
+184 399 5.99629e+011
+573 140 5.95986e+011
+575 178 5.66933e+011
+310 370 5.612e+011
+218 105 5.57806e+011
+418 438 5.54446e+011
+247 386 5.53344e+011
+356 219 5.52676e+011
+273 166 5.41879e+011
+299 140 5.39366e+011
+276 331 5.36093e+011
+305 439 5.32358e+011
+78 474 5.23458e+011
+563 323 5.13471e+011
+540 406 5.03926e+011
+480 300 5.00297e+011
+11 81 4.98868e+011
+91 290 4.89905e+011
+572 405 4.86631e+011
+148 449 4.75845e+011
+102 164 4.73489e+011
+484 375 4.67916e+011
+117 425 4.59663e+011
+4 154 4.58207e+011
+88 368 4.57298e+011
+182 201 4.52735e+011
+1 383 4.52134e+011
+437 240 4.43165e+011
+12 114 4.16975e+011
+399 106 4.13281e+011
+346 45 4.12032e+011
+448 444 4.08799e+011
+512 299 3.9736e+011
+344 463 3.93455e+011
+375 352 3.93354e+011
+110 326 3.84008e+011
+285 241 3.83567e+011
+561 271 3.81105e+011
+338 428 3.73711e+011
+45 475 3.68318e+011
+320 30 3.60802e+011
+18 342 3.41765e+011
+388 419 3.3241e+011
+542 93 3.30213e+011
+12 421 3.08615e+011
+515 380 3.08283e+011
+68 419 3.03004e+011
+412 472 2.92605e+011
+214 400 2.92064e+011
+191 122 2.82919e+011
+587 347 2.51647e+011
+389 450 2.48435e+011
+574 445 2.46081e+011
+50 375 2.35057e+011
+176 330 2.20541e+011
+196 466 2.18059e+011
+133 477 2.09285e+011
+27 190 2.02255e+011
+501 421 2.00089e+011
+9 475 1.88354e+011
+606 122 1.76879e+011
+159 278 1.76752e+011
+600 274 1.67377e+011
+422 292 1.65723e+011
+317 403 1.54627e+011
+619 183 1.51922e+011
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_5_3.txt b/test_data/harriscorners/hc_msc_30.00_0.15_5_3.txt
new file mode 100644
index 0000000..3115c29
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_5_3.txt
@@ -0,0 +1,181 @@
+180
+245 95 2.98677e+015
+363 401 2.95346e+015
+499 1 2.82848e+015
+449 298 2.63708e+015
+274 366 2.48547e+015
+122 44 2.14697e+015
+282 115 2.0924e+015
+507 122 2.08827e+015
+421 182 1.98758e+015
+251 13 1.89287e+015
+387 178 1.88994e+015
+553 40 1.86006e+015
+426 320 1.79558e+015
+446 396 1.68018e+015
+213 72 1.67913e+015
+344 10 1.6497e+015
+65 343 1.5712e+015
+144 309 1.54037e+015
+435 68 1.46886e+015
+480 298 1.46864e+015
+200 16 1.45036e+015
+223 38 1.4029e+015
+348 179 1.33634e+015
+34 137 1.31714e+015
+321 313 1.29722e+015
+183 401 1.29677e+015
+135 215 1.29e+015
+303 183 1.28845e+015
+45 27 1.25028e+015
+299 53 1.23077e+015
+59 219 1.22992e+015
+412 256 1.21004e+015
+125 255 1.20506e+015
+448 262 1.19894e+015
+246 143 1.19774e+015
+312 149 1.15598e+015
+390 58 1.13224e+015
+261 297 1.10977e+015
+385 221 1.09017e+015
+308 372 1.08611e+015
+124 362 1.08176e+015
+102 4 1.05702e+015
+224 419 1.05474e+015
+418 440 1.04116e+015
+239 349 1.03002e+015
+449 219 1.02949e+015
+382 8 1.02203e+015
+392 144 1.01834e+015
+271 166 1.01105e+015
+510 173 1.01086e+015
+355 220 9.99554e+014
+37 62 9.91071e+014
+59 185 9.8322e+014
+411 355 9.66312e+014
+432 146 9.61176e+014
+417 7 9.5779e+014
+177 107 9.31974e+014
+282 403 9.15323e+014
+360 336 9.12485e+014
+192 331 9.10641e+014
+300 265 9.00171e+014
+158 143 8.67029e+014
+514 76 8.56354e+014
+545 168 8.56139e+014
+92 198 8.44485e+014
+77 257 8.29217e+014
+263 441 8.19425e+014
+71 148 8.1911e+014
+294 15 8.11008e+014
+545 217 8.049e+014
+543 364 8.04369e+014
+177 260 8.00515e+014
+271 71 7.90522e+014
+209 223 7.80318e+014
+140 184 7.71869e+014
+126 76 7.57558e+014
+41 297 7.55281e+014
+229 292 7.36899e+014
+111 393 7.3385e+014
+483 339 7.29307e+014
+513 340 7.26349e+014
+563 478 7.01085e+014
+522 263 6.93909e+014
+359 294 6.89776e+014
+359 260 6.89285e+014
+304 216 6.77292e+014
+510 455 6.70867e+014
+12 101 6.6265e+014
+484 59 6.5865e+014
+138 110 6.5559e+014
+326 426 6.53224e+014
+453 340 6.52104e+014
+224 183 6.3501e+014
+361 131 6.29618e+014
+87 78 6.24912e+014
+97 447 6.21691e+014
+48 100 6.13825e+014
+91 292 6.11823e+014
+264 201 6.08449e+014
+5 66 5.86816e+014
+338 473 5.76503e+014
+514 223 5.48835e+014
+170 18 5.42835e+014
+524 20 5.37929e+014
+18 342 5.28234e+014
+577 15 5.07958e+014
+333 89 5.02864e+014
+479 179 4.96514e+014
+198 130 4.87388e+014
+169 57 4.85231e+014
+371 82 4.81556e+014
+82 28 4.80883e+014
+441 98 4.77747e+014
+538 95 4.76158e+014
+575 126 4.69281e+014
+542 130 4.54879e+014
+512 295 4.53023e+014
+561 320 4.42195e+014
+208 451 4.41454e+014
+6 9 4.20309e+014
+29 236 4.19369e+014
+169 198 4.17637e+014
+172 449 4.17173e+014
+108 324 4.1565e+014
+206 159 4.08511e+014
+480 403 4.00442e+014
+576 178 3.98574e+014
+474 23 3.97958e+014
+141 394 3.82827e+014
+597 272 3.73915e+014
+259 236 3.72932e+014
+112 134 3.69318e+014
+444 23 3.65065e+014
+141 2 3.61118e+014
+85 475 3.59961e+014
+598 364 3.59021e+014
+164 359 3.58269e+014
+514 382 3.48957e+014
+568 383 3.43365e+014
+571 448 3.39689e+014
+3 382 3.35989e+014
+467 125 3.3097e+014
+479 451 3.2793e+014
+100 162 3.18637e+014
+559 271 3.16455e+014
+45 407 3.13596e+014
+293 334 3.13421e+014
+391 324 3.07954e+014
+396 104 3.06154e+014
+3 155 3.03876e+014
+83 404 2.99397e+014
+388 282 2.97753e+014
+320 119 2.94321e+014
+487 261 2.85454e+014
+618 181 2.78862e+014
+525 424 2.76928e+014
+132 477 2.64393e+014
+13 206 2.61788e+014
+44 476 2.59551e+014
+390 420 2.48641e+014
+181 291 2.45511e+014
+133 427 2.36537e+014
+9 476 2.21028e+014
+579 78 2.19681e+014
+234 261 2.19472e+014
+88 370 2.13826e+014
+361 369 2.10821e+014
+301 86 2.04969e+014
+33 268 1.95621e+014
+329 255 1.91705e+014
+64 448 1.91524e+014
+245 385 1.88121e+014
+56 373 1.86083e+014
+446 455 1.85177e+014
+361 450 1.71291e+014
+2 286 1.61536e+014
+409 473 1.59461e+014
+359 53 1.58055e+014
+3 435 1.51919e+014
+109 101 1.51689e+014
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_5_5.txt b/test_data/harriscorners/hc_msc_30.00_0.15_5_5.txt
new file mode 100644
index 0000000..498916b
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_5_5.txt
@@ -0,0 +1,174 @@
+173
+273 366 1.41455e+016
+246 94 1.25357e+016
+237 20 1.207e+016
+77 257 1.08258e+016
+261 297 1.0637e+016
+122 43 1.04572e+016
+543 365 1.03719e+016
+362 401 1.0133e+016
+423 178 1.00259e+016
+427 320 9.7695e+015
+281 113 9.47644e+015
+465 393 9.28011e+015
+448 297 9.27192e+015
+199 18 9.20115e+015
+65 343 8.92524e+015
+507 122 8.65586e+015
+344 9 8.58562e+015
+300 52 8.28395e+015
+27 9 8.25503e+015
+552 40 8.23189e+015
+37 62 8.02744e+015
+387 178 7.64888e+015
+59 218 7.52096e+015
+360 295 7.48827e+015
+81 4 7.45358e+015
+33 138 7.33314e+015
+320 225 7.19594e+015
+294 15 7.12376e+015
+134 214 6.9861e+015
+303 182 6.96362e+015
+125 364 6.83648e+015
+33 99 6.74504e+015
+388 10 6.73787e+015
+484 338 6.71487e+015
+195 58 6.60689e+015
+435 67 6.54987e+015
+84 78 6.44761e+015
+124 254 6.37078e+015
+128 1 6.34468e+015
+390 58 6.31354e+015
+225 420 6.1763e+015
+544 168 6.17368e+015
+263 441 6.16764e+015
+343 338 6.1205e+015
+448 262 6.09661e+015
+452 339 5.88751e+015
+101 222 5.85967e+015
+127 165 5.84557e+015
+412 256 5.82457e+015
+404 121 5.44631e+015
+55 29 5.42311e+015
+253 139 5.35422e+015
+138 110 5.30734e+015
+329 128 5.25429e+015
+510 173 5.24113e+015
+144 310 5.22575e+015
+418 440 5.22493e+015
+183 400 5.19184e+015
+177 106 4.97756e+015
+484 59 4.93854e+015
+261 222 4.85048e+015
+359 260 4.71142e+015
+225 182 4.56466e+015
+509 455 4.52485e+015
+207 450 4.48665e+015
+480 179 4.38945e+015
+163 277 4.38014e+015
+308 372 4.34127e+015
+361 131 4.31417e+015
+542 210 4.30168e+015
+433 147 4.25194e+015
+60 183 4.24068e+015
+348 179 4.17456e+015
+235 346 4.13791e+015
+527 99 4.05439e+015
+216 279 4.0417e+015
+113 392 4.00162e+015
+418 8 3.96688e+015
+207 224 3.94376e+015
+71 148 3.90499e+015
+578 16 3.86369e+015
+357 220 3.81816e+015
+283 403 3.80254e+015
+4 65 3.74284e+015
+453 204 3.7131e+015
+313 84 3.70831e+015
+522 264 3.66947e+015
+434 398 3.63598e+015
+321 313 3.63071e+015
+300 265 3.60148e+015
+511 220 3.53189e+015
+55 289 3.53043e+015
+480 299 3.52843e+015
+92 292 3.45667e+015
+390 297 3.44561e+015
+515 347 3.31927e+015
+470 238 3.30409e+015
+508 19 3.27638e+015
+326 427 3.18638e+015
+169 197 3.17292e+015
+265 31 3.15656e+015
+163 74 3.13742e+015
+165 241 3.11902e+015
+110 95 3.08418e+015
+433 111 3.08298e+015
+95 477 3.08023e+015
+544 4 3.07975e+015
+478 18 3.06574e+015
+18 343 3.03652e+015
+31 270 3.02607e+015
+164 358 3.00136e+015
+371 90 2.9916e+015
+220 150 2.9915e+015
+411 353 2.94888e+015
+542 132 2.94661e+015
+202 315 2.70225e+015
+272 167 2.67138e+015
+522 62 2.65962e+015
+160 143 2.59716e+015
+338 473 2.52483e+015
+168 18 2.39093e+015
+297 331 2.39002e+015
+96 447 2.38167e+015
+571 450 2.33661e+015
+393 218 2.33189e+015
+449 445 2.25684e+015
+110 137 2.23587e+015
+12 218 2.22213e+015
+539 458 2.17126e+015
+539 405 2.1323e+015
+559 80 2.09587e+015
+118 425 2.06238e+015
+470 122 2.06216e+015
+378 340 2.05015e+015
+576 179 2.03862e+015
+69 420 2.03684e+015
+573 405 2.01567e+015
+573 141 2.00995e+015
+272 72 1.97219e+015
+488 262 1.92221e+015
+131 476 1.89372e+015
+130 72 1.88106e+015
+222 114 1.80295e+015
+514 382 1.76439e+015
+44 474 1.74744e+015
+148 397 1.7385e+015
+250 403 1.736e+015
+58 373 1.7188e+015
+192 172 1.70897e+015
+561 320 1.68602e+015
+3 155 1.65242e+015
+359 53 1.61911e+015
+482 440 1.50376e+015
+16 434 1.489e+015
+560 272 1.4482e+015
+172 450 1.4272e+015
+512 295 1.42431e+015
+225 52 1.4121e+015
+3 382 1.39722e+015
+360 369 1.31672e+015
+599 365 1.31536e+015
+445 22 1.30512e+015
+388 420 1.25996e+015
+597 272 1.21664e+015
+9 475 1.17539e+015
+202 346 1.11698e+015
+618 181 1.07785e+015
+246 256 1.07742e+015
+260 329 1.07542e+015
+333 281 9.55499e+014
+581 245 9.47048e+014
+363 455 8.81823e+014
+107 325 8.77177e+014
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_5_7.txt b/test_data/harriscorners/hc_msc_30.00_0.15_5_7.txt
new file mode 100644
index 0000000..105a85d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_5_7.txt
@@ -0,0 +1,176 @@
+175
+81 29 4.02032e+016
+246 94 3.87072e+016
+421 180 3.83742e+016
+238 20 3.80821e+016
+274 367 3.38325e+016
+131 26 3.09709e+016
+282 113 2.84256e+016
+75 257 2.83902e+016
+261 297 2.81707e+016
+510 124 2.61816e+016
+424 322 2.47883e+016
+30 8 2.42082e+016
+542 14 2.35507e+016
+199 18 2.32623e+016
+299 53 2.28522e+016
+152 223 2.18569e+016
+330 128 2.15327e+016
+458 279 2.13623e+016
+544 366 2.08709e+016
+343 8 2.07863e+016
+102 222 2.03723e+016
+213 57 2.01506e+016
+34 139 1.99213e+016
+483 178 1.98886e+016
+359 294 1.98468e+016
+292 16 1.97653e+016
+302 184 1.97284e+016
+84 77 1.95378e+016
+37 63 1.94078e+016
+485 338 1.89733e+016
+361 395 1.8714e+016
+156 1 1.85472e+016
+385 10 1.8229e+016
+400 263 1.79925e+016
+391 296 1.76447e+016
+464 395 1.75798e+016
+64 344 1.75593e+016
+436 68 1.73337e+016
+60 217 1.69708e+016
+319 225 1.64007e+016
+451 338 1.63895e+016
+12 217 1.61594e+016
+211 436 1.61454e+016
+34 100 1.61401e+016
+359 334 1.56331e+016
+328 296 1.52377e+016
+389 59 1.52043e+016
+403 120 1.51288e+016
+122 186 1.47938e+016
+225 181 1.45681e+016
+364 251 1.40627e+016
+503 1 1.40209e+016
+125 253 1.39923e+016
+263 442 1.3929e+016
+386 178 1.38975e+016
+158 74 1.37705e+016
+175 110 1.35755e+016
+545 59 1.3484e+016
+419 8 1.3415e+016
+143 323 1.31218e+016
+562 478 1.3084e+016
+486 58 1.25765e+016
+418 438 1.25268e+016
+56 290 1.24512e+016
+4 45 1.23828e+016
+359 220 1.22121e+016
+580 16 1.212e+016
+508 454 1.20309e+016
+528 186 1.1913e+016
+246 144 1.18636e+016
+284 402 1.18227e+016
+182 398 1.16467e+016
+449 204 1.15692e+016
+126 364 1.15435e+016
+260 220 1.14349e+016
+329 258 1.12594e+016
+139 109 1.11739e+016
+60 184 1.11722e+016
+104 3 1.11212e+016
+313 84 1.10407e+016
+392 218 1.07636e+016
+208 222 1.07542e+016
+174 41 1.06813e+016
+235 347 1.06786e+016
+433 147 1.06577e+016
+548 162 1.06048e+016
+434 112 1.05058e+016
+410 353 1.02434e+016
+541 124 1.01852e+016
+83 134 1.01336e+016
+176 260 9.79373e+015
+112 391 9.73351e+015
+32 269 9.69788e+015
+325 341 9.64706e+015
+477 18 9.60804e+015
+512 221 9.25604e+015
+168 196 9.14782e+015
+513 262 8.98138e+015
+160 144 8.9765e+015
+217 280 8.81252e+015
+357 166 8.47488e+015
+482 299 8.40801e+015
+363 130 8.37969e+015
+296 332 8.33559e+015
+165 357 8.21315e+015
+110 94 8.01879e+015
+539 457 8.01409e+015
+142 393 7.88133e+015
+218 105 7.78855e+015
+70 477 7.76312e+015
+97 448 7.7568e+015
+561 226 7.73436e+015
+248 399 7.25174e+015
+540 406 7.11184e+015
+305 439 7.07185e+015
+470 121 7.05905e+015
+174 312 7.04755e+015
+271 168 6.97705e+015
+272 73 6.88214e+015
+192 143 6.78352e+015
+436 379 6.77494e+015
+358 66 6.66834e+015
+574 178 6.6632e+015
+523 344 6.59443e+015
+474 247 6.57542e+015
+448 444 6.5024e+015
+298 274 6.28911e+015
+326 165 6.27908e+015
+91 290 6.23622e+015
+309 373 6.2092e+015
+512 78 6.11581e+015
+205 308 6.10623e+015
+68 419 5.81993e+015
+88 368 5.80221e+015
+572 406 5.7781e+015
+442 240 5.7584e+015
+11 78 5.47692e+015
+17 343 5.30282e+015
+480 440 5.27008e+015
+563 323 5.23664e+015
+335 435 4.97337e+015
+571 446 4.85498e+015
+110 58 4.79051e+015
+516 42 4.73231e+015
+147 449 4.63169e+015
+340 474 4.57743e+015
+102 162 4.41928e+015
+130 477 4.19719e+015
+487 375 4.09374e+015
+17 434 3.94585e+015
+51 453 3.8362e+015
+110 326 3.79766e+015
+576 125 3.75977e+015
+8 115 3.56335e+015
+115 130 3.51598e+015
+1 383 3.47108e+015
+596 363 3.46935e+015
+594 101 3.23293e+015
+213 396 3.1874e+015
+387 451 3.11988e+015
+559 272 3.11966e+015
+385 91 3.11141e+015
+248 260 2.98143e+015
+577 53 2.97216e+015
+194 84 2.90609e+015
+298 140 2.87194e+015
+286 246 2.7722e+015
+201 345 2.62993e+015
+261 327 2.62314e+015
+387 419 2.60973e+015
+5 150 2.38224e+015
+198 466 2.23722e+015
+343 370 2.16777e+015
+513 303 2.15521e+015
+600 274 2.14138e+015
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_7_3.txt b/test_data/harriscorners/hc_msc_30.00_0.15_7_3.txt
new file mode 100644
index 0000000..049c6a4
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_7_3.txt
@@ -0,0 +1,161 @@
+160
+245 95 8.29987e+019
+363 401 6.31582e+019
+274 366 6.21795e+019
+499 1 5.06707e+019
+251 13 4.65892e+019
+122 44 3.67023e+019
+507 122 3.63828e+019
+449 298 3.33565e+019
+65 343 3.30421e+019
+261 297 3.15072e+019
+344 10 3.1281e+019
+465 394 2.93093e+019
+200 16 2.89419e+019
+59 219 2.88975e+019
+282 115 2.87339e+019
+418 440 2.87042e+019
+130 2 2.75483e+019
+480 298 2.55476e+019
+110 238 2.5223e+019
+427 320 2.4938e+019
+387 10 2.46049e+019
+387 178 2.42342e+019
+125 199 2.41836e+019
+553 40 2.40732e+019
+271 166 2.4e+019
+37 62 2.3961e+019
+448 262 2.38667e+019
+144 309 2.3349e+019
+213 72 2.22864e+019
+435 68 2.22013e+019
+520 61 2.21936e+019
+72 24 2.21809e+019
+183 400 2.20096e+019
+411 354 2.1967e+019
+355 220 2.19571e+019
+423 181 2.16989e+019
+77 257 2.14745e+019
+271 71 2.12549e+019
+543 365 2.12376e+019
+303 183 1.99147e+019
+512 167 1.97006e+019
+35 146 1.95473e+019
+432 146 1.93837e+019
+263 441 1.9352e+019
+392 144 1.93377e+019
+300 52 1.92231e+019
+224 419 1.89032e+019
+111 393 1.87212e+019
+58 183 1.86452e+019
+4 66 1.84871e+019
+29 8 1.84801e+019
+309 372 1.83732e+019
+177 106 1.83031e+019
+390 58 1.82258e+019
+348 179 1.78916e+019
+512 341 1.77754e+019
+41 297 1.77753e+019
+498 82 1.75934e+019
+304 216 1.74912e+019
+239 349 1.72909e+019
+482 365 1.71904e+019
+300 265 1.70241e+019
+385 221 1.67419e+019
+293 15 1.65908e+019
+453 340 1.65294e+019
+358 260 1.6438e+019
+138 110 1.56045e+019
+124 362 1.55557e+019
+192 331 1.53381e+019
+324 341 1.53067e+019
+167 286 1.52911e+019
+245 143 1.51277e+019
+412 256 1.48233e+019
+545 168 1.48086e+019
+327 127 1.42767e+019
+334 436 1.42445e+019
+378 353 1.40935e+019
+434 398 1.38655e+019
+92 197 1.38388e+019
+360 131 1.36976e+019
+170 57 1.36779e+019
+577 15 1.3483e+019
+282 403 1.31653e+019
+510 455 1.31389e+019
+360 294 1.30786e+019
+228 292 1.30431e+019
+127 75 1.30325e+019
+542 210 1.28154e+019
+514 223 1.27219e+019
+206 224 1.26706e+019
+481 179 1.23634e+019
+528 98 1.23197e+019
+416 23 1.20866e+019
+12 101 1.20216e+019
+449 219 1.19809e+019
+68 149 1.18293e+019
+123 272 1.18002e+019
+162 214 1.17908e+019
+223 38 1.17801e+019
+328 66 1.17155e+019
+475 22 1.1711e+019
+512 295 1.1625e+019
+48 100 1.15341e+019
+97 447 1.13821e+019
+472 63 1.12629e+019
+91 292 1.10304e+019
+524 20 1.09808e+019
+220 178 1.08538e+019
+132 148 9.96132e+018
+263 201 9.92195e+018
+433 110 9.66629e+018
+15 219 9.60826e+018
+542 130 9.29466e+018
+358 64 8.92242e+018
+141 394 8.77839e+018
+208 451 8.75751e+018
+100 162 8.52508e+018
+18 343 8.27106e+018
+328 253 8.26364e+018
+170 18 8.25974e+018
+597 272 8.17663e+018
+390 296 7.98428e+018
+571 448 7.51864e+018
+568 383 7.45102e+018
+576 178 7.39841e+018
+292 311 7.24247e+018
+521 263 7.20492e+018
+598 364 7.16063e+018
+561 320 7.09749e+018
+84 476 7.07352e+018
+514 382 7.00906e+018
+525 425 6.89477e+018
+198 131 6.87786e+018
+560 81 6.73692e+018
+488 262 6.64421e+018
+338 473 6.6414e+018
+97 79 6.5987e+018
+482 331 6.50157e+018
+449 446 6.48873e+018
+131 476 6.47187e+018
+188 264 5.75556e+018
+164 358 5.67247e+018
+236 221 5.58958e+018
+328 288 5.56049e+018
+395 105 5.44622e+018
+56 373 5.38488e+018
+469 139 5.35293e+018
+45 407 5.33067e+018
+83 404 5.31617e+018
+3 155 5.19445e+018
+50 452 5.18844e+018
+160 183 5.18355e+018
+479 451 5.12978e+018
+559 271 4.93177e+018
+108 324 4.80803e+018
+575 126 4.67829e+018
+466 102 4.58914e+018
+88 369 4.29166e+018
+172 449 4.2802e+018
+377 461 4.27793e+018
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_7_5.txt b/test_data/harriscorners/hc_msc_30.00_0.15_7_5.txt
new file mode 100644
index 0000000..2247f17
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_7_5.txt
@@ -0,0 +1,171 @@
+170
+273 365 3.59215e+020
+261 297 3.36972e+020
+237 20 3.11225e+020
+246 95 2.98616e+020
+543 365 2.85984e+020
+362 401 2.83266e+020
+27 9 2.80065e+020
+281 113 2.72669e+020
+65 343 2.67265e+020
+77 257 2.65123e+020
+465 393 2.52392e+020
+423 178 2.41726e+020
+82 29 2.36819e+020
+37 62 2.36681e+020
+195 58 2.13449e+020
+427 320 2.07029e+020
+344 9 2.05175e+020
+59 218 2.03209e+020
+131 26 1.99713e+020
+388 10 1.98142e+020
+448 297 1.93475e+020
+510 124 1.85929e+020
+320 225 1.82441e+020
+33 99 1.81181e+020
+127 165 1.77555e+020
+200 17 1.74464e+020
+418 440 1.69567e+020
+358 260 1.6869e+020
+225 420 1.68613e+020
+360 295 1.66627e+020
+552 40 1.64556e+020
+484 338 1.63559e+020
+452 339 1.61635e+020
+153 223 1.57368e+020
+390 60 1.53679e+020
+387 178 1.50331e+020
+448 262 1.47583e+020
+294 15 1.4582e+020
+300 52 1.39634e+020
+138 110 1.39341e+020
+263 441 1.37057e+020
+33 138 1.3576e+020
+343 338 1.35264e+020
+356 220 1.33461e+020
+511 167 1.32498e+020
+302 182 1.31624e+020
+181 111 1.30632e+020
+101 222 1.30516e+020
+183 400 1.29627e+020
+483 179 1.28258e+020
+4 65 1.2631e+020
+519 61 1.23756e+020
+404 121 1.20971e+020
+544 168 1.20893e+020
+57 4 1.20848e+020
+509 455 1.14935e+020
+435 67 1.1415e+020
+112 393 1.12672e+020
+55 289 1.12168e+020
+144 310 1.11698e+020
+125 254 1.10717e+020
+216 280 1.107e+020
+261 165 1.08813e+020
+412 256 1.06937e+020
+207 450 1.06847e+020
+434 398 1.05063e+020
+283 403 1.03552e+020
+411 354 1.03241e+020
+327 141 1.02211e+020
+361 131 1.01916e+020
+261 222 9.94178e+019
+235 346 9.93112e+019
+578 16 9.86208e+019
+125 363 9.85348e+019
+124 198 9.84848e+019
+386 220 9.77967e+019
+390 295 9.48938e+019
+320 312 9.48049e+019
+177 260 9.39658e+019
+57 183 9.28051e+019
+168 197 9.2488e+019
+84 78 9.19512e+019
+542 210 9.10454e+019
+524 25 9.09906e+019
+431 147 9.0181e+019
+300 265 9.01508e+019
+417 23 9.00212e+019
+515 347 8.6512e+019
+334 436 8.62147e+019
+433 111 8.57385e+019
+541 124 8.54039e+019
+453 206 8.30085e+019
+104 4 8.07644e+019
+308 372 7.93847e+019
+13 218 7.90514e+019
+95 476 7.75541e+019
+478 18 7.70854e+019
+71 148 7.67606e+019
+512 262 7.54705e+019
+18 343 7.53465e+019
+225 182 7.4911e+019
+159 138 7.29323e+019
+480 299 7.27758e+019
+313 84 7.19745e+019
+92 292 7.07276e+019
+348 179 7.06644e+019
+163 74 6.93581e+019
+265 31 6.87986e+019
+164 358 6.85178e+019
+371 90 6.80174e+019
+192 219 6.75702e+019
+512 220 6.24798e+019
+449 445 6.00971e+019
+110 96 5.99321e+019
+484 59 5.88869e+019
+120 447 5.68156e+019
+512 295 5.58282e+019
+250 403 5.55942e+019
+480 262 5.43322e+019
+223 218 5.30381e+019
+192 330 5.19132e+019
+69 420 5.15539e+019
+571 451 4.98809e+019
+130 476 4.93057e+019
+539 405 4.87066e+019
+568 382 4.8701e+019
+271 72 4.82839e+019
+220 150 4.82123e+019
+170 17 4.70101e+019
+559 80 4.6604e+019
+296 331 4.62583e+019
+514 382 4.61302e+019
+31 270 4.57353e+019
+386 327 4.52195e+019
+483 143 4.33929e+019
+338 473 4.26093e+019
+57 373 4.21543e+019
+446 8 4.05901e+019
+539 458 3.99077e+019
+50 453 3.98855e+019
+109 137 3.84747e+019
+597 272 3.74629e+019
+130 72 3.70207e+019
+359 53 3.5862e+019
+220 317 3.54314e+019
+482 440 3.44261e+019
+148 397 3.21235e+019
+180 164 3.20586e+019
+572 326 3.19077e+019
+16 435 3.17787e+019
+87 372 3.12418e+019
+172 450 3.02637e+019
+88 183 2.97999e+019
+342 106 2.90788e+019
+575 179 2.81999e+019
+215 96 2.79092e+019
+580 245 2.62527e+019
+361 369 2.62304e+019
+387 449 2.60111e+019
+596 364 2.60092e+019
+3 155 2.50609e+019
+255 129 2.50119e+019
+225 50 2.46231e+019
+3 382 2.39827e+019
+294 431 2.33228e+019
+182 292 2.28526e+019
+7 116 2.18e+019
+558 271 2.16953e+019
+576 125 2.02913e+019
+9 475 2.02008e+019
diff --git a/test_data/harriscorners/hc_msc_30.00_0.15_7_7.txt b/test_data/harriscorners/hc_msc_30.00_0.15_7_7.txt
new file mode 100644
index 0000000..9e9e4c6
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_30.00_0.15_7_7.txt
@@ -0,0 +1,164 @@
+163
+81 29 1.19845e+021
+238 20 1.0467e+021
+131 26 9.62539e+020
+260 297 8.86736e+020
+246 93 8.64866e+020
+421 180 8.32933e+020
+26 9 7.60316e+020
+272 366 7.3704e+020
+76 257 6.80966e+020
+195 58 6.80484e+020
+543 366 6.60423e+020
+282 113 6.43644e+020
+510 124 5.88561e+020
+37 63 5.81732e+020
+525 25 5.68797e+020
+385 10 5.5797e+020
+64 344 5.54219e+020
+152 223 5.49106e+020
+424 321 5.28618e+020
+343 8 5.00771e+020
+302 185 4.8929e+020
+12 218 4.66859e+020
+361 395 4.65695e+020
+359 294 4.64645e+020
+102 222 4.57956e+020
+60 217 4.57565e+020
+293 16 4.51322e+020
+482 178 4.51246e+020
+33 100 4.50317e+020
+451 339 4.49869e+020
+391 294 4.46401e+020
+465 392 4.40418e+020
+485 338 4.39441e+020
+458 279 4.34732e+020
+199 18 4.26798e+020
+356 259 4.26793e+020
+418 438 4.17748e+020
+34 139 4.11601e+020
+330 128 3.9767e+020
+127 165 3.96349e+020
+320 226 3.96211e+020
+328 296 3.92094e+020
+299 53 3.90175e+020
+519 60 3.83963e+020
+224 420 3.81434e+020
+533 185 3.70168e+020
+359 334 3.68648e+020
+389 59 3.66767e+020
+403 120 3.60231e+020
+359 220 3.58415e+020
+175 109 3.47371e+020
+265 446 3.28265e+020
+56 290 3.27942e+020
+284 402 3.25884e+020
+209 450 3.23229e+020
+83 77 3.22395e+020
+428 1 3.22026e+020
+139 109 3.14663e+020
+580 16 3.13191e+020
+435 397 3.10926e+020
+399 263 3.0891e+020
+150 306 3.084e+020
+386 178 3.07982e+020
+325 341 3.0622e+020
+449 204 3.05765e+020
+182 398 3.0408e+020
+436 67 2.9996e+020
+159 75 2.99716e+020
+552 41 2.98438e+020
+434 112 2.94659e+020
+410 353 2.9186e+020
+84 148 2.87761e+020
+509 454 2.83331e+020
+36 173 2.82845e+020
+513 262 2.81318e+020
+104 3 2.81065e+020
+514 346 2.7794e+020
+563 478 2.77565e+020
+125 254 2.7726e+020
+448 166 2.76322e+020
+57 4 2.71506e+020
+470 422 2.71155e+020
+168 196 2.71154e+020
+232 125 2.69865e+020
+112 392 2.68473e+020
+479 15 2.67148e+020
+225 181 2.60887e+020
+259 165 2.58191e+020
+96 477 2.55109e+020
+176 260 2.51531e+020
+541 124 2.48003e+020
+215 280 2.43115e+020
+3 64 2.33219e+020
+248 399 2.3281e+020
+235 346 2.29572e+020
+102 360 2.23966e+020
+313 84 2.23339e+020
+364 142 2.21997e+020
+260 220 2.16861e+020
+512 221 2.06955e+020
+358 66 2.06924e+020
+482 299 2.06716e+020
+165 357 2.05673e+020
+488 44 2.04845e+020
+448 445 2.00375e+020
+335 435 2.00169e+020
+300 264 1.99608e+020
+392 218 1.94253e+020
+129 74 1.89059e+020
+32 269 1.87388e+020
+475 247 1.83451e+020
+185 289 1.83308e+020
+193 218 1.76975e+020
+123 199 1.72802e+020
+349 181 1.66988e+020
+571 446 1.65559e+020
+296 332 1.65162e+020
+223 218 1.63853e+020
+493 81 1.62957e+020
+540 406 1.57755e+020
+117 426 1.54626e+020
+483 142 1.54607e+020
+86 311 1.54591e+020
+142 393 1.52829e+020
+539 457 1.52626e+020
+271 73 1.52053e+020
+68 419 1.49863e+020
+365 105 1.4897e+020
+160 137 1.45447e+020
+18 343 1.33683e+020
+305 440 1.32306e+020
+215 96 1.28718e+020
+572 406 1.28174e+020
+577 246 1.24388e+020
+574 178 1.24387e+020
+191 143 1.23074e+020
+169 17 1.16632e+020
+309 373 1.15803e+020
+530 96 1.15035e+020
+575 100 1.13144e+020
+130 477 1.11847e+020
+437 240 1.103e+020
+563 323 1.07971e+020
+92 444 1.05172e+020
+146 449 9.85125e+019
+596 363 9.56622e+019
+65 182 9.49448e+019
+220 315 9.31856e+019
+56 374 9.25133e+019
+389 325 9.05739e+019
+17 434 9.00394e+019
+340 473 8.86098e+019
+542 246 8.85609e+019
+190 329 8.82378e+019
+106 106 8.32006e+019
+516 381 8.30001e+019
+51 453 8.2975e+019
+387 450 7.71389e+019
+2 156 7.53395e+019
+225 51 6.90345e+019
+597 273 6.58592e+019
+596 313 6.35406e+019
+563 145 6.34359e+019
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_3_3.txt b/test_data/harriscorners/hc_msc_5.00_0.04_3_3.txt
new file mode 100644
index 0000000..6cdf8f6
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_3_3.txt
@@ -0,0 +1,1745 @@
+1744
+449 298 7.11603e+011
+499 1 6.14136e+011
+535 242 5.50429e+011
+329 127 5.373e+011
+274 366 5.00877e+011
+421 183 4.81895e+011
+401 261 4.8154e+011
+388 178 4.73174e+011
+76 236 4.55167e+011
+553 41 4.41546e+011
+213 73 4.38065e+011
+200 18 4.32789e+011
+321 313 4.21361e+011
+385 221 4.18499e+011
+436 68 4.12777e+011
+66 320 4.11039e+011
+447 397 4.07071e+011
+89 197 4.04961e+011
+121 44 4.04891e+011
+173 312 4.01539e+011
+544 170 3.93932e+011
+286 296 3.92621e+011
+135 215 3.87618e+011
+456 281 3.8236e+011
+45 26 3.74365e+011
+159 143 3.72284e+011
+363 401 3.71432e+011
+471 240 3.66628e+011
+545 217 3.66514e+011
+273 289 3.57933e+011
+449 219 3.57373e+011
+486 22 3.55373e+011
+245 94 3.54639e+011
+365 200 3.52418e+011
+515 77 3.5205e+011
+110 239 3.46322e+011
+301 175 3.46175e+011
+34 138 3.45836e+011
+448 263 3.44597e+011
+364 298 3.36092e+011
+455 3 3.34436e+011
+407 64 3.31906e+011
+174 238 3.28586e+011
+378 317 3.27893e+011
+3 47 3.21677e+011
+256 386 3.21376e+011
+137 208 3.20548e+011
+210 54 3.19496e+011
+144 309 3.16408e+011
+299 53 3.14265e+011
+296 420 3.12681e+011
+221 16 3.08559e+011
+36 269 3.08535e+011
+412 256 3.08137e+011
+223 38 3.06453e+011
+282 115 3.06092e+011
+317 336 3.0581e+011
+59 185 3.00251e+011
+449 403 2.99991e+011
+508 18 2.9945e+011
+82 27 2.98989e+011
+66 344 2.98062e+011
+524 263 2.96509e+011
+312 149 2.96108e+011
+396 319 2.93987e+011
+125 255 2.91872e+011
+126 162 2.91522e+011
+317 385 2.91386e+011
+120 4 2.90357e+011
+344 10 2.85939e+011
+242 203 2.82159e+011
+175 94 2.81316e+011
+197 57 2.79765e+011
+253 138 2.78104e+011
+419 7 2.74974e+011
+92 214 2.74678e+011
+507 165 2.72862e+011
+293 120 2.72409e+011
+412 162 2.71107e+011
+489 264 2.71049e+011
+59 74 2.7104e+011
+124 363 2.67523e+011
+426 320 2.66975e+011
+207 223 2.65415e+011
+382 8 2.65404e+011
+246 143 2.64206e+011
+480 298 2.63568e+011
+422 178 2.63002e+011
+82 77 2.61869e+011
+236 74 2.61067e+011
+177 260 2.60806e+011
+184 35 2.60553e+011
+380 68 2.57742e+011
+508 122 2.56886e+011
+236 19 2.56049e+011
+464 241 2.54188e+011
+419 163 2.53764e+011
+360 315 2.52885e+011
+112 213 2.51371e+011
+236 163 2.49906e+011
+240 90 2.48659e+011
+230 266 2.47889e+011
+479 21 2.47441e+011
+530 61 2.47167e+011
+287 342 2.47008e+011
+64 234 2.46691e+011
+303 184 2.45944e+011
+140 184 2.44138e+011
+359 168 2.43987e+011
+303 207 2.42507e+011
+348 179 2.41435e+011
+28 236 2.39823e+011
+112 4 2.38769e+011
+263 202 2.38225e+011
+281 296 2.37883e+011
+556 182 2.36169e+011
+526 223 2.359e+011
+407 337 2.35793e+011
+49 99 2.35373e+011
+103 61 2.34769e+011
+203 311 2.34468e+011
+177 166 2.32881e+011
+124 199 2.32514e+011
+279 369 2.32499e+011
+251 13 2.30285e+011
+48 219 2.29656e+011
+524 199 2.27565e+011
+370 107 2.27089e+011
+422 323 2.26376e+011
+425 262 2.26308e+011
+275 181 2.24395e+011
+387 294 2.24322e+011
+415 251 2.21234e+011
+71 148 2.20707e+011
+282 403 2.20115e+011
+569 40 2.18207e+011
+301 164 2.17556e+011
+79 3 2.16608e+011
+308 371 2.15971e+011
+167 238 2.15416e+011
+270 241 2.14214e+011
+484 59 2.13514e+011
+330 164 2.12962e+011
+102 5 2.11026e+011
+271 166 2.11024e+011
+406 375 2.10999e+011
+155 235 2.1087e+011
+373 116 2.09855e+011
+262 165 2.09022e+011
+240 366 2.08406e+011
+382 162 2.07044e+011
+170 19 2.06809e+011
+199 86 2.06783e+011
+153 217 2.06757e+011
+313 75 2.06749e+011
+543 364 2.05938e+011
+521 61 2.05412e+011
+335 105 2.05218e+011
+183 401 2.05129e+011
+365 7 2.05046e+011
+386 126 2.04596e+011
+125 261 2.04527e+011
+539 62 2.04443e+011
+224 221 2.0234e+011
+185 19 2.0226e+011
+530 184 2.02188e+011
+263 440 2.01914e+011
+511 342 2.01603e+011
+455 83 2.01138e+011
+473 63 2.00896e+011
+192 124 2.00475e+011
+561 60 1.99979e+011
+326 87 1.9944e+011
+205 202 1.99065e+011
+359 294 1.98079e+011
+562 148 1.97233e+011
+270 60 1.9638e+011
+114 344 1.95844e+011
+192 276 1.95691e+011
+465 198 1.95328e+011
+139 58 1.94676e+011
+287 165 1.9386e+011
+173 75 1.93826e+011
+276 222 1.93512e+011
+88 256 1.93469e+011
+371 82 1.93216e+011
+543 58 1.92945e+011
+239 349 1.92191e+011
+38 296 1.91838e+011
+445 23 1.91334e+011
+510 172 1.91067e+011
+391 47 1.90012e+011
+467 123 1.89929e+011
+572 142 1.89129e+011
+10 102 1.88404e+011
+360 335 1.8802e+011
+80 474 1.87547e+011
+161 238 1.87481e+011
+538 95 1.87258e+011
+387 167 1.87223e+011
+575 126 1.86488e+011
+526 101 1.86459e+011
+307 439 1.86365e+011
+518 183 1.85775e+011
+416 44 1.85724e+011
+365 259 1.85173e+011
+338 473 1.84708e+011
+512 201 1.84572e+011
+402 276 1.83593e+011
+208 434 1.83225e+011
+323 223 1.83036e+011
+57 29 1.82532e+011
+22 219 1.82195e+011
+212 17 1.81629e+011
+257 88 1.80368e+011
+433 319 1.8007e+011
+35 176 1.79976e+011
+324 165 1.79684e+011
+392 144 1.77674e+011
+553 383 1.77614e+011
+87 78 1.77346e+011
+387 319 1.76448e+011
+390 58 1.76366e+011
+192 331 1.75947e+011
+266 53 1.75916e+011
+401 184 1.75483e+011
+88 148 1.75362e+011
+101 78 1.75323e+011
+271 278 1.74727e+011
+529 193 1.74033e+011
+487 3 1.73876e+011
+278 352 1.73539e+011
+352 146 1.73308e+011
+513 93 1.73276e+011
+380 26 1.73103e+011
+496 119 1.72817e+011
+112 56 1.72733e+011
+64 371 1.72464e+011
+111 134 1.72178e+011
+461 267 1.71962e+011
+160 112 1.71933e+011
+507 60 1.71802e+011
+161 256 1.71786e+011
+293 25 1.71392e+011
+512 99 1.70887e+011
+319 202 1.70792e+011
+558 19 1.70434e+011
+525 346 1.6944e+011
+363 250 1.69243e+011
+127 76 1.69015e+011
+341 337 1.68035e+011
+479 81 1.6756e+011
+478 16 1.67489e+011
+508 82 1.6721e+011
+284 222 1.66901e+011
+211 183 1.6665e+011
+138 201 1.66338e+011
+560 229 1.66294e+011
+67 46 1.66167e+011
+484 375 1.66128e+011
+313 222 1.65955e+011
+68 27 1.65771e+011
+353 127 1.65767e+011
+62 60 1.65742e+011
+433 146 1.65209e+011
+355 320 1.65036e+011
+342 38 1.64931e+011
+250 364 1.64562e+011
+286 210 1.64184e+011
+230 36 1.64177e+011
+424 47 1.63979e+011
+529 143 1.63973e+011
+131 36 1.63468e+011
+163 208 1.63409e+011
+128 1 1.63197e+011
+361 131 1.63017e+011
+163 276 1.62543e+011
+96 447 1.61968e+011
+490 342 1.61551e+011
+338 10 1.61216e+011
+512 165 1.60542e+011
+515 17 1.60432e+011
+424 376 1.60095e+011
+562 478 1.60052e+011
+141 22 1.60025e+011
+528 361 1.59888e+011
+556 244 1.5945e+011
+426 119 1.59323e+011
+411 355 1.58329e+011
+498 158 1.58278e+011
+249 33 1.57947e+011
+212 437 1.57875e+011
+411 5 1.57515e+011
+187 216 1.57353e+011
+366 66 1.57286e+011
+355 220 1.56944e+011
+376 84 1.56933e+011
+524 21 1.56872e+011
+46 90 1.56322e+011
+277 332 1.56018e+011
+461 340 1.55891e+011
+273 130 1.55611e+011
+35 300 1.55536e+011
+28 8 1.55505e+011
+299 70 1.55299e+011
+461 279 1.55084e+011
+140 173 1.55081e+011
+497 80 1.55039e+011
+381 411 1.54707e+011
+571 160 1.54629e+011
+275 216 1.54619e+011
+224 183 1.54143e+011
+546 42 1.53896e+011
+260 273 1.53648e+011
+419 440 1.53237e+011
+482 365 1.52827e+011
+166 96 1.52706e+011
+342 123 1.52645e+011
+108 44 1.52086e+011
+228 289 1.51516e+011
+108 325 1.51192e+011
+27 220 1.50742e+011
+220 100 1.50672e+011
+392 353 1.5065e+011
+162 213 1.50487e+011
+77 256 1.50357e+011
+579 18 1.50301e+011
+314 86 1.50011e+011
+315 165 1.4988e+011
+326 427 1.49601e+011
+112 393 1.48873e+011
+166 287 1.48182e+011
+497 64 1.48131e+011
+312 81 1.4796e+011
+527 40 1.47898e+011
+259 236 1.47456e+011
+413 100 1.46809e+011
+244 164 1.46738e+011
+477 182 1.46697e+011
+532 268 1.46676e+011
+376 7 1.46479e+011
+347 350 1.4632e+011
+554 201 1.46254e+011
+383 146 1.46061e+011
+297 296 1.45866e+011
+226 295 1.45405e+011
+244 72 1.45395e+011
+448 138 1.44968e+011
+225 72 1.44964e+011
+342 464 1.44826e+011
+404 122 1.44734e+011
+362 370 1.44585e+011
+276 393 1.43838e+011
+260 250 1.43665e+011
+110 96 1.43555e+011
+509 455 1.43259e+011
+250 313 1.42978e+011
+497 228 1.42808e+011
+177 106 1.42658e+011
+160 183 1.42483e+011
+116 43 1.42354e+011
+352 161 1.4232e+011
+486 84 1.41806e+011
+36 147 1.41491e+011
+109 340 1.40843e+011
+234 346 1.40825e+011
+55 66 1.40815e+011
+174 57 1.40157e+011
+503 265 1.39969e+011
+215 144 1.39905e+011
+281 51 1.39657e+011
+13 206 1.39444e+011
+180 394 1.39049e+011
+148 396 1.39003e+011
+283 71 1.38832e+011
+373 163 1.3821e+011
+300 265 1.38172e+011
+382 338 1.37702e+011
+580 52 1.37677e+011
+77 81 1.37523e+011
+49 159 1.37353e+011
+165 202 1.37231e+011
+483 339 1.37208e+011
+91 389 1.3638e+011
+59 219 1.36105e+011
+389 139 1.35968e+011
+522 122 1.35804e+011
+371 393 1.35798e+011
+537 267 1.35672e+011
+395 260 1.35295e+011
+363 181 1.34702e+011
+138 111 1.34667e+011
+542 18 1.34515e+011
+435 182 1.34007e+011
+224 419 1.33494e+011
+412 23 1.33427e+011
+537 459 1.33297e+011
+305 107 1.33289e+011
+54 6 1.32308e+011
+315 160 1.32301e+011
+228 129 1.32233e+011
+174 114 1.32211e+011
+76 7 1.32077e+011
+151 447 1.31469e+011
+451 101 1.31451e+011
+184 138 1.3127e+011
+176 39 1.3091e+011
+214 57 1.30903e+011
+329 9 1.30174e+011
+432 112 1.30159e+011
+22 60 1.30079e+011
+381 356 1.29988e+011
+396 161 1.29353e+011
+494 22 1.29172e+011
+351 339 1.29168e+011
+474 262 1.28794e+011
+285 240 1.28719e+011
+561 321 1.28712e+011
+389 327 1.28457e+011
+35 10 1.28393e+011
+509 361 1.28348e+011
+270 67 1.28313e+011
+266 14 1.27666e+011
+478 4 1.27633e+011
+452 205 1.27338e+011
+304 193 1.27195e+011
+339 164 1.27054e+011
+572 121 1.26988e+011
+223 114 1.2677e+011
+192 359 1.26769e+011
+169 55 1.26527e+011
+292 16 1.26515e+011
+264 445 1.26444e+011
+243 189 1.26101e+011
+334 89 1.2581e+011
+300 245 1.25767e+011
+441 98 1.25347e+011
+440 64 1.25271e+011
+164 243 1.25214e+011
+438 339 1.25088e+011
+424 397 1.24762e+011
+359 162 1.24467e+011
+538 185 1.24398e+011
+371 67 1.2404e+011
+237 131 1.24015e+011
+465 394 1.23659e+011
+264 298 1.23524e+011
+508 5 1.23268e+011
+454 339 1.23149e+011
+220 178 1.23094e+011
+494 456 1.22998e+011
+34 236 1.22933e+011
+48 133 1.22555e+011
+355 106 1.22194e+011
+539 40 1.22175e+011
+141 325 1.22103e+011
+507 204 1.2203e+011
+217 279 1.21878e+011
+109 60 1.21774e+011
+163 108 1.21648e+011
+466 40 1.21538e+011
+182 110 1.2147e+011
+433 339 1.21342e+011
+387 242 1.21331e+011
+503 360 1.21181e+011
+303 156 1.20938e+011
+549 183 1.20818e+011
+436 390 1.20612e+011
+85 476 1.20612e+011
+484 181 1.20293e+011
+186 342 1.20057e+011
+65 213 1.20049e+011
+52 290 1.19991e+011
+73 185 1.19902e+011
+118 61 1.19875e+011
+170 117 1.19795e+011
+162 128 1.1962e+011
+153 301 1.19532e+011
+277 137 1.1943e+011
+435 88 1.19393e+011
+49 152 1.19309e+011
+179 18 1.19265e+011
+259 142 1.19254e+011
+474 202 1.19252e+011
+115 76 1.18901e+011
+255 182 1.18718e+011
+338 391 1.18611e+011
+302 103 1.18381e+011
+43 62 1.18193e+011
+239 421 1.18115e+011
+219 291 1.18042e+011
+336 426 1.17996e+011
+529 32 1.17946e+011
+135 172 1.17922e+011
+5 13 1.17834e+011
+445 126 1.17717e+011
+126 189 1.17581e+011
+452 375 1.1754e+011
+118 96 1.17397e+011
+329 107 1.17395e+011
+548 222 1.17269e+011
+467 237 1.16798e+011
+102 358 1.16643e+011
+290 183 1.16641e+011
+324 143 1.16472e+011
+162 20 1.16278e+011
+507 178 1.16011e+011
+266 259 1.15904e+011
+91 291 1.15568e+011
+541 209 1.15541e+011
+271 52 1.15414e+011
+133 427 1.15084e+011
+510 223 1.15016e+011
+424 336 1.14661e+011
+428 181 1.14646e+011
+258 34 1.14383e+011
+513 122 1.14282e+011
+163 168 1.14072e+011
+24 65 1.13955e+011
+537 140 1.1394e+011
+92 21 1.13626e+011
+446 352 1.13537e+011
+150 114 1.13394e+011
+436 385 1.13391e+011
+434 398 1.13274e+011
+439 149 1.13219e+011
+241 58 1.13026e+011
+234 261 1.12956e+011
+487 357 1.12891e+011
+411 46 1.12174e+011
+132 130 1.12044e+011
+265 72 1.11796e+011
+189 180 1.11695e+011
+203 257 1.11621e+011
+82 134 1.11587e+011
+223 239 1.11458e+011
+272 296 1.11165e+011
+29 28 1.10899e+011
+367 144 1.10701e+011
+278 189 1.10499e+011
+137 98 1.104e+011
+363 355 1.10324e+011
+390 161 1.10106e+011
+120 51 1.09967e+011
+438 123 1.09734e+011
+96 125 1.09634e+011
+150 151 1.09514e+011
+210 153 1.09409e+011
+479 263 1.09247e+011
+508 141 1.09166e+011
+137 145 1.09124e+011
+157 93 1.09013e+011
+356 267 1.09004e+011
+233 200 1.08804e+011
+394 222 1.08455e+011
+287 34 1.08434e+011
+63 9 1.08384e+011
+500 42 1.0834e+011
+57 331 1.08328e+011
+387 10 1.08108e+011
+350 323 1.08014e+011
+37 61 1.07944e+011
+110 265 1.07929e+011
+113 356 1.07908e+011
+348 240 1.07893e+011
+306 88 1.07839e+011
+134 72 1.07753e+011
+184 184 1.0767e+011
+379 107 1.07628e+011
+330 202 1.07535e+011
+205 162 1.07386e+011
+58 254 1.0738e+011
+430 2 1.07319e+011
+32 218 1.07104e+011
+511 128 1.068e+011
+347 392 1.061e+011
+116 220 1.06079e+011
+484 154 1.06077e+011
+515 2 1.06024e+011
+332 255 1.05977e+011
+474 23 1.05867e+011
+172 449 1.0573e+011
+541 13 1.05281e+011
+71 410 1.05227e+011
+335 240 1.05116e+011
+253 74 1.05044e+011
+135 236 1.04888e+011
+514 44 1.04383e+011
+100 221 1.04329e+011
+309 33 1.04294e+011
+78 196 1.04289e+011
+398 357 1.04208e+011
+543 130 1.04124e+011
+358 143 1.0391e+011
+166 114 1.03744e+011
+244 217 1.03725e+011
+3 381 1.03643e+011
+72 97 1.03609e+011
+267 131 1.03542e+011
+545 5 1.03471e+011
+96 148 1.02697e+011
+526 171 1.02693e+011
+292 147 1.02646e+011
+573 333 1.02594e+011
+292 311 1.02589e+011
+327 320 1.02466e+011
+279 126 1.02401e+011
+209 136 1.02321e+011
+354 26 1.02088e+011
+164 359 1.02066e+011
+480 128 1.01805e+011
+448 340 1.01451e+011
+187 109 1.0132e+011
+304 363 1.01194e+011
+192 139 1.01191e+011
+518 163 1.01187e+011
+543 252 1.01049e+011
+197 130 1.01035e+011
+274 206 1.00834e+011
+205 127 1.00787e+011
+172 108 1.00715e+011
+59 289 1.00709e+011
+388 282 1.00694e+011
+217 208 1.0059e+011
+577 178 1.00506e+011
+459 123 1.00467e+011
+479 451 1.00465e+011
+262 393 1.0042e+011
+102 234 9.99555e+010
+237 221 9.99489e+010
+423 203 9.98984e+010
+25 200 9.98235e+010
+494 164 9.97998e+010
+155 197 9.97372e+010
+317 107 9.96472e+010
+158 1 9.94626e+010
+2 155 9.8956e+010
+470 419 9.88302e+010
+207 417 9.87572e+010
+108 183 9.87055e+010
+449 178 9.81639e+010
+267 31 9.81348e+010
+390 19 9.8077e+010
+220 149 9.80307e+010
+510 300 9.79638e+010
+375 299 9.78488e+010
+191 56 9.78339e+010
+477 402 9.76679e+010
+5 66 9.7277e+010
+269 105 9.72484e+010
+474 245 9.70966e+010
+137 128 9.70703e+010
+594 19 9.69695e+010
+277 145 9.68864e+010
+126 113 9.68778e+010
+369 338 9.68369e+010
+445 6 9.67557e+010
+454 263 9.66188e+010
+493 102 9.65791e+010
+367 85 9.65347e+010
+256 150 9.65294e+010
+544 91 9.64574e+010
+58 103 9.62071e+010
+364 407 9.60834e+010
+139 2 9.60435e+010
+196 192 9.56917e+010
+172 202 9.56913e+010
+40 217 9.54403e+010
+360 216 9.5284e+010
+70 131 9.52624e+010
+535 18 9.52578e+010
+18 342 9.51953e+010
+104 199 9.51292e+010
+492 182 9.5078e+010
+418 85 9.5014e+010
+434 156 9.49881e+010
+194 110 9.47035e+010
+498 70 9.46886e+010
+540 165 9.46589e+010
+281 142 9.45623e+010
+259 221 9.43936e+010
+281 35 9.4297e+010
+63 132 9.42759e+010
+219 126 9.4148e+010
+460 395 9.41344e+010
+445 453 9.40267e+010
+183 133 9.40104e+010
+182 201 9.37493e+010
+252 153 9.35187e+010
+121 128 9.34021e+010
+443 319 9.33475e+010
+515 142 9.32618e+010
+513 295 9.3171e+010
+326 296 9.31672e+010
+604 121 9.30464e+010
+39 309 9.30203e+010
+184 118 9.2932e+010
+572 449 9.29218e+010
+261 329 9.28972e+010
+276 52 9.26863e+010
+161 133 9.26703e+010
+432 83 9.24122e+010
+90 321 9.24075e+010
+502 143 9.18062e+010
+304 216 9.17792e+010
+246 294 9.16265e+010
+87 209 9.13882e+010
+306 354 9.12603e+010
+135 139 9.12228e+010
+187 99 9.11368e+010
+152 308 9.08942e+010
+149 39 9.08751e+010
+446 145 9.08515e+010
+353 424 9.08149e+010
+245 402 9.05576e+010
+452 161 9.05023e+010
+569 203 9.04615e+010
+460 40 9.04555e+010
+450 442 9.03468e+010
+208 449 9.03304e+010
+512 349 9.01837e+010
+179 274 9.01238e+010
+449 82 9.00669e+010
+374 241 9.00471e+010
+296 49 8.99514e+010
+464 26 8.98612e+010
+453 358 8.98574e+010
+175 189 8.97828e+010
+514 335 8.97522e+010
+497 342 8.96716e+010
+523 182 8.96496e+010
+203 347 8.9403e+010
+173 2 8.93128e+010
+160 98 8.9308e+010
+95 340 8.90217e+010
+60 148 8.88971e+010
+479 176 8.88939e+010
+396 104 8.88402e+010
+193 171 8.88225e+010
+380 122 8.87837e+010
+345 109 8.87248e+010
+247 205 8.87244e+010
+124 272 8.86899e+010
+263 403 8.86893e+010
+418 414 8.85754e+010
+286 53 8.85543e+010
+188 146 8.85221e+010
+533 161 8.83333e+010
+541 122 8.82635e+010
+335 49 8.82568e+010
+293 333 8.82435e+010
+511 211 8.81617e+010
+565 18 8.79903e+010
+360 260 8.7966e+010
+48 256 8.79384e+010
+473 355 8.76904e+010
+263 311 8.73415e+010
+482 333 8.71859e+010
+344 166 8.71216e+010
+36 201 8.70125e+010
+246 327 8.69789e+010
+50 11 8.69285e+010
+202 392 8.67979e+010
+67 337 8.67686e+010
+270 221 8.67361e+010
+129 168 8.66936e+010
+526 422 8.64998e+010
+281 386 8.64898e+010
+242 100 8.64849e+010
+232 15 8.64339e+010
+439 394 8.63954e+010
+129 217 8.63787e+010
+148 163 8.63126e+010
+29 254 8.62988e+010
+93 255 8.62242e+010
+355 13 8.58583e+010
+213 123 8.58312e+010
+400 271 8.57918e+010
+389 333 8.5704e+010
+167 325 8.56305e+010
+432 122 8.56161e+010
+189 206 8.54465e+010
+398 412 8.54246e+010
+127 40 8.54223e+010
+518 203 8.52971e+010
+560 272 8.52673e+010
+403 7 8.52403e+010
+562 223 8.51734e+010
+373 76 8.50496e+010
+247 258 8.48408e+010
+248 191 8.47514e+010
+297 275 8.44868e+010
+156 74 8.42721e+010
+318 147 8.41873e+010
+266 139 8.39524e+010
+105 39 8.39002e+010
+489 42 8.38973e+010
+279 198 8.38115e+010
+579 79 8.378e+010
+148 21 8.37732e+010
+548 59 8.36497e+010
+487 205 8.36033e+010
+94 5 8.34962e+010
+113 176 8.33992e+010
+438 162 8.3372e+010
+167 150 8.33187e+010
+226 15 8.31878e+010
+285 263 8.31585e+010
+47 79 8.31333e+010
+195 17 8.3096e+010
+259 71 8.30867e+010
+533 341 8.30861e+010
+463 100 8.30579e+010
+200 416 8.2868e+010
+589 309 8.28037e+010
+446 377 8.27945e+010
+124 94 8.27651e+010
+311 334 8.27518e+010
+165 217 8.22652e+010
+60 110 8.2156e+010
+132 25 8.21249e+010
+84 237 8.21088e+010
+463 161 8.20016e+010
+44 10 8.18636e+010
+100 162 8.17092e+010
+284 370 8.16125e+010
+280 166 8.16112e+010
+334 368 8.13552e+010
+163 147 8.13365e+010
+321 103 8.118e+010
+562 70 8.1149e+010
+219 109 8.10174e+010
+297 138 8.09339e+010
+565 161 8.08878e+010
+475 340 8.03586e+010
+344 197 8.01278e+010
+488 120 7.9995e+010
+325 149 7.99881e+010
+330 212 7.99818e+010
+535 121 7.97212e+010
+389 420 7.96921e+010
+298 108 7.95318e+010
+397 25 7.94727e+010
+99 426 7.94655e+010
+198 75 7.94052e+010
+9 476 7.93657e+010
+64 448 7.90233e+010
+95 79 7.89737e+010
+299 397 7.8933e+010
+388 97 7.87004e+010
+305 54 7.85127e+010
+46 147 7.83588e+010
+538 79 7.82614e+010
+95 452 7.82438e+010
+42 353 7.82408e+010
+344 276 7.82195e+010
+413 66 7.81968e+010
+321 119 7.81311e+010
+598 363 7.81109e+010
+429 88 7.7898e+010
+65 363 7.77154e+010
+179 359 7.76751e+010
+298 191 7.76697e+010
+456 201 7.76548e+010
+421 315 7.76062e+010
+12 80 7.75028e+010
+332 295 7.72885e+010
+86 370 7.72798e+010
+179 75 7.72492e+010
+390 133 7.71521e+010
+505 159 7.71097e+010
+254 404 7.68351e+010
+357 240 7.68052e+010
+206 293 7.67585e+010
+567 423 7.674e+010
+413 262 7.67001e+010
+531 103 7.66894e+010
+618 181 7.64906e+010
+161 31 7.63716e+010
+153 227 7.63613e+010
+32 100 7.63066e+010
+461 357 7.63004e+010
+65 252 7.62788e+010
+129 309 7.61354e+010
+452 43 7.60635e+010
+125 329 7.59957e+010
+44 121 7.59828e+010
+407 81 7.58431e+010
+55 303 7.58348e+010
+433 240 7.57233e+010
+283 80 7.54417e+010
+141 391 7.53469e+010
+19 65 7.53316e+010
+228 92 7.53156e+010
+525 381 7.52686e+010
+412 469 7.52323e+010
+303 406 7.52176e+010
+547 246 7.52118e+010
+75 375 7.51493e+010
+406 199 7.50911e+010
+247 346 7.49366e+010
+252 222 7.48965e+010
+342 136 7.48438e+010
+349 9 7.48053e+010
+63 206 7.47984e+010
+317 230 7.47796e+010
+102 294 7.45278e+010
+342 314 7.44466e+010
+38 170 7.44278e+010
+557 302 7.442e+010
+172 166 7.43761e+010
+267 294 7.41441e+010
+351 363 7.40439e+010
+433 303 7.38987e+010
+389 203 7.3748e+010
+246 106 7.36438e+010
+338 220 7.34969e+010
+378 182 7.34467e+010
+290 264 7.33946e+010
+117 132 7.33803e+010
+362 360 7.32024e+010
+473 120 7.31668e+010
+93 477 7.31444e+010
+346 47 7.30308e+010
+469 262 7.29867e+010
+128 238 7.29213e+010
+358 282 7.28263e+010
+49 164 7.28015e+010
+127 26 7.27728e+010
+39 406 7.27112e+010
+513 261 7.254e+010
+133 78 7.25179e+010
+108 109 7.23985e+010
+196 343 7.22945e+010
+94 198 7.22694e+010
+385 450 7.21421e+010
+592 107 7.21207e+010
+281 394 7.2114e+010
+571 269 7.19883e+010
+303 443 7.19748e+010
+217 165 7.19404e+010
+145 255 7.18153e+010
+305 148 7.17604e+010
+201 317 7.16925e+010
+530 24 7.16807e+010
+154 57 7.16429e+010
+113 204 7.15739e+010
+485 236 7.15558e+010
+131 149 7.15027e+010
+191 130 7.14912e+010
+495 141 7.14512e+010
+108 427 7.13649e+010
+484 161 7.12609e+010
+329 102 7.12524e+010
+327 341 7.11634e+010
+412 220 7.11343e+010
+200 111 7.10476e+010
+83 404 7.09183e+010
+230 148 7.0886e+010
+320 30 7.0872e+010
+344 341 7.08448e+010
+216 172 7.06949e+010
+448 64 7.06319e+010
+367 2 7.05983e+010
+201 166 7.05925e+010
+191 314 7.05841e+010
+574 39 7.05131e+010
+381 47 7.04649e+010
+85 180 7.03697e+010
+311 298 7.03321e+010
+259 228 7.03046e+010
+211 33 7.02394e+010
+286 158 7.0197e+010
+252 422 7.01632e+010
+274 76 7.00926e+010
+88 230 7.00668e+010
+528 161 6.9985e+010
+383 89 6.99696e+010
+461 221 6.99306e+010
+398 142 6.99065e+010
+366 95 6.98747e+010
+501 21 6.98292e+010
+224 154 6.97935e+010
+245 88 6.97839e+010
+80 39 6.97406e+010
+245 385 6.97102e+010
+210 422 6.9705e+010
+42 97 6.96706e+010
+163 249 6.9642e+010
+347 297 6.96285e+010
+136 93 6.96224e+010
+227 258 6.95708e+010
+90 377 6.94728e+010
+44 476 6.92221e+010
+270 91 6.90934e+010
+383 325 6.9038e+010
+282 135 6.89614e+010
+438 42 6.88249e+010
+422 328 6.87687e+010
+107 220 6.87374e+010
+146 452 6.87314e+010
+408 98 6.83731e+010
+469 142 6.83553e+010
+273 353 6.83154e+010
+192 326 6.82777e+010
+292 348 6.82312e+010
+158 164 6.81897e+010
+510 253 6.81323e+010
+375 225 6.81312e+010
+328 66 6.81147e+010
+76 268 6.80908e+010
+502 62 6.79646e+010
+298 332 6.78536e+010
+18 118 6.7839e+010
+133 376 6.78341e+010
+435 279 6.78011e+010
+222 214 6.77973e+010
+406 142 6.77864e+010
+280 109 6.77856e+010
+491 470 6.77476e+010
+505 382 6.76882e+010
+64 276 6.75823e+010
+182 239 6.73334e+010
+288 87 6.72341e+010
+350 86 6.72085e+010
+182 381 6.71926e+010
+355 334 6.70766e+010
+258 200 6.7058e+010
+232 399 6.70502e+010
+237 149 6.70223e+010
+409 281 6.70084e+010
+196 310 6.67825e+010
+441 355 6.67674e+010
+522 141 6.66605e+010
+38 182 6.66474e+010
+392 243 6.65723e+010
+324 370 6.65334e+010
+383 181 6.65097e+010
+451 91 6.64498e+010
+219 387 6.64466e+010
+188 104 6.64215e+010
+365 104 6.62563e+010
+110 168 6.62084e+010
+241 68 6.61912e+010
+186 374 6.61833e+010
+85 59 6.61658e+010
+575 54 6.60678e+010
+191 364 6.60555e+010
+447 245 6.60306e+010
+260 383 6.6021e+010
+301 86 6.60001e+010
+63 439 6.59957e+010
+520 362 6.59534e+010
+326 180 6.57814e+010
+425 124 6.56309e+010
+527 398 6.55959e+010
+30 134 6.5503e+010
+267 146 6.54587e+010
+361 101 6.54349e+010
+199 328 6.54214e+010
+560 81 6.53176e+010
+124 184 6.53077e+010
+399 66 6.50225e+010
+11 72 6.49236e+010
+109 27 6.48219e+010
+307 448 6.48117e+010
+95 59 6.47978e+010
+373 103 6.47141e+010
+520 77 6.46823e+010
+588 18 6.46577e+010
+174 418 6.4616e+010
+92 112 6.44023e+010
+51 377 6.43602e+010
+344 262 6.43209e+010
+513 180 6.41169e+010
+282 206 6.4101e+010
+54 358 6.39322e+010
+175 342 6.36765e+010
+203 397 6.35807e+010
+358 393 6.35567e+010
+297 126 6.35527e+010
+82 104 6.34171e+010
+308 8 6.33137e+010
+185 171 6.32477e+010
+57 364 6.3215e+010
+320 96 6.31811e+010
+303 170 6.31452e+010
+95 284 6.30472e+010
+13 236 6.30382e+010
+586 141 6.30327e+010
+497 283 6.29909e+010
+483 327 6.29736e+010
+347 144 6.29554e+010
+427 63 6.29155e+010
+15 215 6.28515e+010
+388 83 6.28489e+010
+278 363 6.28465e+010
+393 66 6.28422e+010
+398 94 6.27667e+010
+577 90 6.27549e+010
+443 120 6.27239e+010
+158 169 6.26538e+010
+450 23 6.2623e+010
+561 153 6.25712e+010
+229 347 6.25551e+010
+215 248 6.23776e+010
+345 306 6.23045e+010
+480 171 6.22893e+010
+107 78 6.21291e+010
+546 261 6.20375e+010
+278 417 6.20319e+010
+151 133 6.20287e+010
+308 183 6.20212e+010
+86 356 6.19536e+010
+32 112 6.18688e+010
+422 63 6.1836e+010
+224 51 6.16274e+010
+424 164 6.14851e+010
+228 198 6.14371e+010
+479 241 6.14214e+010
+39 241 6.13667e+010
+539 220 6.13381e+010
+54 220 6.12752e+010
+145 220 6.11127e+010
+562 264 6.11059e+010
+358 52 6.10994e+010
+525 79 6.10245e+010
+128 97 6.09889e+010
+393 217 6.09764e+010
+450 418 6.09485e+010
+310 259 6.08874e+010
+333 140 6.08487e+010
+424 102 6.06611e+010
+506 198 6.06094e+010
+545 438 6.05137e+010
+295 164 6.03099e+010
+139 319 6.0257e+010
+59 98 6.00835e+010
+37 288 6.00117e+010
+483 123 6.0007e+010
+90 339 5.99861e+010
+164 36 5.99742e+010
+132 255 5.98895e+010
+374 353 5.98471e+010
+175 121 5.97858e+010
+394 335 5.94153e+010
+328 325 5.92519e+010
+265 249 5.91033e+010
+417 259 5.90956e+010
+297 99 5.90865e+010
+161 430 5.89803e+010
+48 458 5.8933e+010
+472 4 5.88936e+010
+589 162 5.86945e+010
+328 288 5.86917e+010
+572 328 5.86783e+010
+79 273 5.86256e+010
+334 435 5.86115e+010
+180 123 5.85495e+010
+289 110 5.84219e+010
+500 223 5.83407e+010
+2 166 5.82498e+010
+46 420 5.82476e+010
+550 121 5.81755e+010
+218 38 5.81492e+010
+472 82 5.81322e+010
+125 413 5.80982e+010
+433 63 5.8084e+010
+362 449 5.80418e+010
+296 89 5.8015e+010
+440 468 5.79308e+010
+206 157 5.78311e+010
+534 393 5.78151e+010
+576 164 5.77862e+010
+559 462 5.77636e+010
+509 114 5.76845e+010
+388 91 5.75414e+010
+441 240 5.75302e+010
+44 153 5.74704e+010
+212 164 5.74528e+010
+146 325 5.73674e+010
+188 200 5.73504e+010
+95 95 5.73485e+010
+240 194 5.73219e+010
+563 40 5.72358e+010
+464 82 5.72289e+010
+216 235 5.72159e+010
+311 265 5.71799e+010
+162 74 5.70914e+010
+119 423 5.70464e+010
+317 370 5.70343e+010
+41 116 5.70053e+010
+501 102 5.69957e+010
+113 349 5.69185e+010
+54 449 5.688e+010
+68 304 5.68612e+010
+426 470 5.68257e+010
+377 453 5.66726e+010
+261 15 5.66004e+010
+481 166 5.65754e+010
+261 108 5.64551e+010
+289 397 5.64513e+010
+161 121 5.64044e+010
+579 42 5.63696e+010
+122 220 5.62097e+010
+414 299 5.61052e+010
+211 94 5.60261e+010
+313 132 5.59967e+010
+315 238 5.5955e+010
+401 429 5.59395e+010
+146 86 5.59153e+010
+247 419 5.58763e+010
+114 428 5.58663e+010
+150 2 5.58146e+010
+597 58 5.5662e+010
+469 22 5.56613e+010
+580 215 5.56159e+010
+266 118 5.56073e+010
+416 377 5.55699e+010
+367 247 5.55622e+010
+580 138 5.54929e+010
+94 422 5.5389e+010
+130 396 5.5329e+010
+565 462 5.53182e+010
+513 402 5.52793e+010
+420 132 5.52521e+010
+529 366 5.52484e+010
+59 372 5.52209e+010
+215 427 5.52095e+010
+484 174 5.51663e+010
+176 180 5.51564e+010
+202 7 5.51059e+010
+289 441 5.50683e+010
+317 125 5.50145e+010
+410 413 5.49371e+010
+537 103 5.49355e+010
+472 42 5.48764e+010
+597 272 5.48273e+010
+262 217 5.47819e+010
+430 222 5.47741e+010
+561 201 5.46677e+010
+167 180 5.46544e+010
+458 241 5.45582e+010
+407 262 5.45437e+010
+121 239 5.44904e+010
+450 324 5.44699e+010
+294 271 5.44527e+010
+187 257 5.41783e+010
+247 172 5.41584e+010
+90 277 5.41515e+010
+124 82 5.41302e+010
+347 370 5.41161e+010
+69 417 5.41073e+010
+378 261 5.39991e+010
+177 331 5.39982e+010
+55 294 5.37497e+010
+554 80 5.36328e+010
+351 353 5.34308e+010
+474 143 5.33727e+010
+64 218 5.33328e+010
+155 396 5.31987e+010
+418 79 5.30591e+010
+166 309 5.30324e+010
+333 415 5.30095e+010
+152 370 5.29938e+010
+106 2 5.29131e+010
+117 360 5.28921e+010
+405 221 5.28189e+010
+185 310 5.27425e+010
+173 274 5.26838e+010
+485 221 5.26505e+010
+41 136 5.26492e+010
+230 178 5.26423e+010
+515 381 5.25895e+010
+407 106 5.25284e+010
+403 189 5.25137e+010
+28 271 5.24863e+010
+407 431 5.24213e+010
+393 184 5.23559e+010
+103 392 5.23492e+010
+180 56 5.23323e+010
+420 362 5.22483e+010
+72 4 5.2225e+010
+549 283 5.22028e+010
+290 249 5.21878e+010
+83 65 5.21692e+010
+450 166 5.21494e+010
+108 260 5.21324e+010
+540 263 5.20391e+010
+200 293 5.19095e+010
+58 79 5.17823e+010
+513 376 5.17118e+010
+512 109 5.16753e+010
+483 286 5.16738e+010
+164 190 5.16677e+010
+119 116 5.15488e+010
+154 21 5.15443e+010
+304 298 5.14905e+010
+524 289 5.14437e+010
+108 148 5.14396e+010
+40 79 5.14206e+010
+266 286 5.13785e+010
+208 308 5.13705e+010
+152 401 5.12789e+010
+296 410 5.12366e+010
+250 85 5.12167e+010
+555 264 5.11913e+010
+420 116 5.11394e+010
+164 379 5.10794e+010
+81 219 5.10072e+010
+572 364 5.10049e+010
+341 257 5.09946e+010
+340 89 5.0931e+010
+262 319 5.08621e+010
+24 185 5.08236e+010
+432 268 5.07882e+010
+568 383 5.07474e+010
+296 442 5.07024e+010
+133 411 5.06915e+010
+419 92 5.06361e+010
+212 219 5.05167e+010
+234 158 5.03785e+010
+157 103 5.03582e+010
+525 278 5.02944e+010
+198 10 5.02597e+010
+329 57 5.02089e+010
+11 114 5.01897e+010
+304 292 5.0171e+010
+465 354 5.00858e+010
+391 448 5.00657e+010
+41 395 5.00496e+010
+3 109 4.99908e+010
+569 183 4.99846e+010
+259 159 4.99694e+010
+416 282 4.99476e+010
+11 45 4.97515e+010
+375 126 4.97345e+010
+533 346 4.97045e+010
+530 98 4.96998e+010
+539 382 4.96068e+010
+475 255 4.95995e+010
+149 138 4.95773e+010
+499 261 4.95082e+010
+402 217 4.94627e+010
+392 296 4.94297e+010
+221 84 4.94142e+010
+255 80 4.93758e+010
+458 140 4.93334e+010
+194 201 4.91689e+010
+424 197 4.91669e+010
+493 1 4.91607e+010
+374 366 4.91259e+010
+19 318 4.91026e+010
+316 101 4.90959e+010
+161 397 4.90769e+010
+570 408 4.90171e+010
+465 4 4.90053e+010
+142 238 4.89827e+010
+464 140 4.89473e+010
+496 462 4.89297e+010
+274 313 4.88306e+010
+102 308 4.88205e+010
+401 169 4.88116e+010
+433 25 4.87795e+010
+533 93 4.86478e+010
+366 29 4.85842e+010
+114 374 4.85322e+010
+486 242 4.84289e+010
+530 134 4.82756e+010
+347 119 4.82e+010
+219 315 4.8188e+010
+327 25 4.81497e+010
+209 315 4.81387e+010
+119 265 4.80935e+010
+417 450 4.80852e+010
+450 117 4.80544e+010
+545 160 4.79999e+010
+274 64 4.79947e+010
+480 135 4.79796e+010
+297 257 4.79671e+010
+344 329 4.78889e+010
+33 39 4.78649e+010
+25 133 4.7808e+010
+54 44 4.77899e+010
+588 345 4.77739e+010
+297 182 4.77173e+010
+214 132 4.76427e+010
+414 143 4.76417e+010
+144 432 4.74619e+010
+189 135 4.74113e+010
+545 141 4.72949e+010
+344 186 4.72589e+010
+329 390 4.72108e+010
+154 345 4.72097e+010
+408 14 4.71918e+010
+78 59 4.71773e+010
+530 430 4.71283e+010
+152 184 4.71265e+010
+462 45 4.70263e+010
+194 212 4.70108e+010
+215 149 4.70036e+010
+63 201 4.69926e+010
+499 475 4.69818e+010
+284 46 4.69334e+010
+325 17 4.68492e+010
+6 151 4.6848e+010
+240 383 4.68433e+010
+147 344 4.67935e+010
+426 24 4.67906e+010
+371 190 4.6758e+010
+356 447 4.67164e+010
+332 397 4.66759e+010
+251 247 4.66745e+010
+70 255 4.66483e+010
+101 112 4.66424e+010
+392 24 4.66035e+010
+412 245 4.66027e+010
+247 180 4.65947e+010
+353 297 4.65836e+010
+333 28 4.65791e+010
+207 74 4.65585e+010
+521 426 4.6537e+010
+73 46 4.65233e+010
+544 339 4.65099e+010
+132 477 4.65099e+010
+369 464 4.64927e+010
+361 157 4.64474e+010
+137 19 4.6444e+010
+306 161 4.63476e+010
+472 453 4.63193e+010
+54 389 4.62728e+010
+577 403 4.62232e+010
+465 379 4.61987e+010
+386 64 4.61837e+010
+41 337 4.6054e+010
+44 83 4.60409e+010
+331 133 4.60135e+010
+467 118 4.59992e+010
+274 318 4.59556e+010
+450 129 4.59452e+010
+384 111 4.58875e+010
+200 126 4.58389e+010
+189 303 4.57711e+010
+573 423 4.5657e+010
+420 52 4.55646e+010
+301 254 4.55434e+010
+340 28 4.54172e+010
+427 433 4.54022e+010
+464 226 4.53967e+010
+411 29 4.53852e+010
+85 310 4.53499e+010
+468 162 4.52986e+010
+133 392 4.5227e+010
+281 311 4.52166e+010
+14 434 4.51996e+010
+480 290 4.5192e+010
+325 260 4.51845e+010
+405 164 4.5184e+010
+543 82 4.51661e+010
+104 255 4.51655e+010
+387 15 4.51479e+010
+132 65 4.51298e+010
+374 144 4.51278e+010
+77 29 4.51201e+010
+302 141 4.5e+010
+300 326 4.49116e+010
+144 179 4.48735e+010
+289 136 4.48538e+010
+123 343 4.48423e+010
+72 165 4.4821e+010
+280 440 4.48049e+010
+88 261 4.47362e+010
+232 183 4.46626e+010
+22 285 4.46605e+010
+22 477 4.46346e+010
+90 8 4.45653e+010
+480 142 4.45574e+010
+84 289 4.45302e+010
+315 28 4.44514e+010
+179 153 4.43975e+010
+73 60 4.43662e+010
+559 422 4.43582e+010
+204 53 4.43579e+010
+332 336 4.43071e+010
+534 303 4.42484e+010
+519 43 4.42422e+010
+193 145 4.42323e+010
+333 463 4.42212e+010
+461 260 4.41844e+010
+449 283 4.41576e+010
+240 295 4.41219e+010
+95 359 4.41021e+010
+420 138 4.40851e+010
+193 255 4.40423e+010
+215 402 4.40395e+010
+355 475 4.39274e+010
+187 263 4.38939e+010
+252 238 4.38382e+010
+411 183 4.37936e+010
+258 349 4.37325e+010
+433 376 4.36805e+010
+418 290 4.36628e+010
+351 140 4.36278e+010
+542 457 4.3561e+010
+356 252 4.35376e+010
+136 123 4.34706e+010
+507 281 4.3391e+010
+19 351 4.33766e+010
+384 258 4.3359e+010
+243 255 4.32274e+010
+170 131 4.3215e+010
+76 127 4.3138e+010
+63 304 4.2921e+010
+254 193 4.2914e+010
+31 81 4.28513e+010
+447 183 4.28331e+010
+470 181 4.27883e+010
+141 116 4.26988e+010
+399 131 4.25073e+010
+265 78 4.24998e+010
+7 201 4.24928e+010
+259 370 4.24763e+010
+326 353 4.23437e+010
+515 54 4.23431e+010
+63 182 4.23011e+010
+573 6 4.22801e+010
+404 117 4.21893e+010
+244 430 4.21587e+010
+86 365 4.21189e+010
+218 284 4.2118e+010
+362 365 4.21086e+010
+53 148 4.2083e+010
+570 375 4.20693e+010
+45 407 4.20451e+010
+472 104 4.20425e+010
+469 302 4.20367e+010
+271 414 4.20097e+010
+243 17 4.19891e+010
+184 347 4.19778e+010
+551 141 4.19651e+010
+490 77 4.19191e+010
+398 298 4.18993e+010
+202 219 4.18668e+010
+433 47 4.17324e+010
+127 374 4.17291e+010
+32 65 4.16687e+010
+146 15 4.16653e+010
+492 58 4.15919e+010
+392 405 4.15892e+010
+490 301 4.15431e+010
+217 20 4.14908e+010
+175 139 4.14575e+010
+82 97 4.14568e+010
+589 350 4.14386e+010
+50 169 4.14365e+010
+277 238 4.14347e+010
+23 254 4.14181e+010
+221 432 4.13741e+010
+33 337 4.12989e+010
+514 364 4.12933e+010
+146 80 4.12782e+010
+167 414 4.12487e+010
+211 376 4.11892e+010
+479 458 4.11625e+010
+584 37 4.10615e+010
+486 141 4.10062e+010
+123 179 4.09891e+010
+544 175 4.0942e+010
+183 95 4.09264e+010
+316 260 4.08626e+010
+187 326 4.08329e+010
+436 105 4.08244e+010
+570 59 4.07702e+010
+337 60 4.07157e+010
+457 375 4.06823e+010
+40 25 4.06687e+010
+316 460 4.06661e+010
+310 138 4.06231e+010
+567 223 4.06072e+010
+409 452 4.05445e+010
+70 390 4.04502e+010
+300 346 4.03975e+010
+66 378 4.03821e+010
+42 305 4.0339e+010
+391 475 4.03108e+010
+210 258 4.02659e+010
+549 79 4.01676e+010
+399 17 4.00746e+010
+158 252 4.003e+010
+59 41 4.00184e+010
+477 221 3.99351e+010
+12 30 3.98981e+010
+235 436 3.9851e+010
+602 274 3.98443e+010
+458 180 3.98418e+010
+266 368 3.98002e+010
+33 143 3.97833e+010
+481 48 3.97456e+010
+575 98 3.97316e+010
+437 456 3.97223e+010
+514 61 3.97072e+010
+554 221 3.96634e+010
+62 164 3.96541e+010
+250 163 3.96455e+010
+342 297 3.96453e+010
+62 422 3.95954e+010
+64 283 3.95799e+010
+195 217 3.9523e+010
+432 163 3.94373e+010
+282 92 3.94259e+010
+125 149 3.94169e+010
+232 101 3.9388e+010
+198 28 3.93593e+010
+4 266 3.93369e+010
+183 315 3.93133e+010
+152 77 3.93101e+010
+36 470 3.93051e+010
+579 324 3.92071e+010
+316 453 3.90896e+010
+22 7 3.90379e+010
+48 320 3.9021e+010
+479 206 3.89586e+010
+155 129 3.89374e+010
+234 137 3.89309e+010
+460 302 3.89191e+010
+172 147 3.89182e+010
+253 110 3.89072e+010
+56 235 3.88996e+010
+116 181 3.88691e+010
+479 475 3.88335e+010
+333 282 3.88303e+010
+174 87 3.88271e+010
+157 316 3.88165e+010
+423 82 3.87594e+010
+123 59 3.86972e+010
+90 399 3.86799e+010
+505 418 3.86728e+010
+379 131 3.86457e+010
+487 199 3.86177e+010
+156 88 3.85945e+010
+10 219 3.85834e+010
+16 151 3.85692e+010
+289 123 3.85345e+010
+335 260 3.8481e+010
+379 419 3.84684e+010
+224 123 3.84672e+010
+487 52 3.84124e+010
+140 428 3.83569e+010
+269 313 3.83025e+010
+53 60 3.82979e+010
+472 211 3.82852e+010
+326 49 3.82835e+010
+150 202 3.82359e+010
+325 124 3.81836e+010
+273 361 3.81605e+010
+377 461 3.81462e+010
+230 189 3.81382e+010
+350 412 3.80559e+010
+87 395 3.79578e+010
+232 272 3.79311e+010
+94 261 3.79288e+010
+287 422 3.78818e+010
+542 275 3.78465e+010
+243 210 3.78309e+010
+206 93 3.78192e+010
+260 457 3.77484e+010
+465 190 3.77477e+010
+406 181 3.77166e+010
+2 201 3.77016e+010
+264 123 3.76835e+010
+419 143 3.76722e+010
+149 231 3.76098e+010
+230 112 3.75836e+010
+20 201 3.75507e+010
+305 411 3.75439e+010
+297 144 3.75341e+010
+38 254 3.75042e+010
+119 88 3.74451e+010
+290 221 3.73466e+010
+187 291 3.73356e+010
+181 220 3.72928e+010
+32 17 3.72828e+010
+112 308 3.72126e+010
+120 149 3.71639e+010
+266 111 3.71606e+010
+208 20 3.71151e+010
+457 161 3.71144e+010
+360 177 3.71111e+010
+362 124 3.71098e+010
+27 118 3.70717e+010
+66 474 3.70713e+010
+196 239 3.70349e+010
+5 231 3.70328e+010
+210 395 3.69678e+010
+373 152 3.69142e+010
+576 169 3.69051e+010
+565 178 3.69008e+010
+375 282 3.68974e+010
+376 390 3.68818e+010
+432 297 3.68763e+010
+88 244 3.68582e+010
+172 292 3.68569e+010
+71 261 3.68335e+010
+509 440 3.67983e+010
+268 205 3.67615e+010
+118 391 3.67281e+010
+290 202 3.66782e+010
+343 239 3.66778e+010
+578 340 3.66732e+010
+49 237 3.66035e+010
+181 291 3.65873e+010
+169 359 3.6584e+010
+215 99 3.65633e+010
+65 151 3.65611e+010
+513 117 3.65073e+010
+498 430 3.64446e+010
+207 148 3.63815e+010
+122 446 3.63544e+010
+157 154 3.63478e+010
+162 312 3.63209e+010
+400 199 3.62676e+010
+119 109 3.62196e+010
+49 286 3.62015e+010
+253 273 3.61572e+010
+521 97 3.6086e+010
+529 119 3.60714e+010
+263 224 3.60037e+010
+337 65 3.60035e+010
+539 225 3.58905e+010
+551 216 3.58841e+010
+596 141 3.58556e+010
+194 165 3.58162e+010
+174 152 3.5781e+010
+105 408 3.57735e+010
+86 94 3.57599e+010
+364 116 3.57409e+010
+116 275 3.57313e+010
+512 323 3.5717e+010
+211 293 3.56961e+010
+576 311 3.56232e+010
+5 236 3.56131e+010
+520 239 3.56116e+010
+451 447 3.5598e+010
+117 164 3.55806e+010
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_3_5.txt b/test_data/harriscorners/hc_msc_5.00_0.04_3_5.txt
new file mode 100644
index 0000000..72ea60d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_3_5.txt
@@ -0,0 +1,1424 @@
+1423
+244 94 3.10864e+012
+273 366 2.99939e+012
+122 43 2.38424e+012
+330 127 2.00645e+012
+298 52 1.99983e+012
+422 181 1.93221e+012
+84 78 1.83694e+012
+200 17 1.81141e+012
+237 19 1.78538e+012
+214 72 1.76632e+012
+448 297 1.75554e+012
+134 214 1.72973e+012
+362 400 1.61958e+012
+485 59 1.59539e+012
+484 23 1.57647e+012
+395 318 1.54446e+012
+124 198 1.54106e+012
+553 40 1.53717e+012
+210 55 1.53346e+012
+286 297 1.5281e+012
+272 290 1.48372e+012
+47 27 1.47111e+012
+436 67 1.46911e+012
+317 335 1.43848e+012
+401 262 1.4377e+012
+447 397 1.42966e+012
+35 138 1.41639e+012
+175 94 1.40562e+012
+160 143 1.40173e+012
+128 2 1.39903e+012
+303 183 1.37005e+012
+92 214 1.36373e+012
+507 122 1.36282e+012
+243 203 1.35305e+012
+544 168 1.34444e+012
+387 177 1.33373e+012
+82 28 1.33187e+012
+425 321 1.32295e+012
+343 9 1.31682e+012
+184 36 1.31314e+012
+124 254 1.31092e+012
+542 59 1.30942e+012
+125 364 1.30847e+012
+302 176 1.30532e+012
+535 241 1.29169e+012
+407 65 1.28854e+012
+195 125 1.28548e+012
+110 240 1.27177e+012
+253 139 1.26585e+012
+470 239 1.25814e+012
+418 8 1.25337e+012
+76 256 1.24239e+012
+2 46 1.24145e+012
+240 91 1.23899e+012
+104 62 1.23442e+012
+116 44 1.2334e+012
+508 17 1.23301e+012
+466 197 1.22631e+012
+65 235 1.22072e+012
+54 29 1.21998e+012
+154 236 1.21883e+012
+360 295 1.21782e+012
+90 198 1.21376e+012
+222 38 1.21253e+012
+45 218 1.19727e+012
+456 282 1.19213e+012
+48 98 1.1854e+012
+393 143 1.17965e+012
+252 13 1.17883e+012
+262 440 1.1716e+012
+137 209 1.16767e+012
+320 224 1.15885e+012
+282 114 1.15073e+012
+257 385 1.14991e+012
+294 15 1.149e+012
+235 72 1.14296e+012
+174 312 1.12774e+012
+341 337 1.12667e+012
+480 297 1.12655e+012
+447 263 1.12635e+012
+386 221 1.12138e+012
+138 203 1.11842e+012
+78 2 1.11577e+012
+411 163 1.11011e+012
+65 319 1.10893e+012
+65 343 1.09816e+012
+262 201 1.09685e+012
+509 164 1.09e+012
+207 224 1.08992e+012
+515 76 1.08472e+012
+325 88 1.08147e+012
+423 45 1.08037e+012
+543 216 1.06605e+012
+465 240 1.0628e+012
+110 135 1.06043e+012
+235 162 1.05206e+012
+202 313 1.04445e+012
+442 24 1.0363e+012
+301 165 1.03304e+012
+207 435 1.02984e+012
+456 4 1.0296e+012
+427 119 1.02783e+012
+523 264 1.02705e+012
+70 27 1.02489e+012
+543 365 1.02014e+012
+461 267 1.01522e+012
+131 36 1.00987e+012
+280 370 1.00688e+012
+145 310 1.00359e+012
+543 15 1.00128e+012
+308 371 1.00087e+012
+412 256 9.95905e+011
+100 79 9.95742e+011
+82 135 9.95473e+011
+276 180 9.95207e+011
+313 76 9.94299e+011
+76 237 9.9302e+011
+196 57 9.92436e+011
+449 218 9.91408e+011
+390 58 9.88456e+011
+36 145 9.82922e+011
+320 315 9.81877e+011
+101 222 9.79527e+011
+224 182 9.76695e+011
+372 81 9.7043e+011
+171 18 9.64019e+011
+462 278 9.62498e+011
+334 106 9.62459e+011
+174 238 9.59076e+011
+220 16 9.58172e+011
+30 8 9.56507e+011
+498 159 9.55625e+011
+138 173 9.55318e+011
+382 6 9.51401e+011
+166 241 9.46903e+011
+401 276 9.45027e+011
+512 98 9.42574e+011
+361 335 9.39762e+011
+418 164 9.38584e+011
+562 224 9.37132e+011
+379 68 9.33379e+011
+59 75 9.3309e+011
+127 164 9.32304e+011
+35 9 9.29349e+011
+325 164 9.28054e+011
+287 210 9.21012e+011
+477 5 9.19881e+011
+377 318 9.14376e+011
+545 41 9.13811e+011
+383 162 9.12803e+011
+244 165 9.12302e+011
+175 112 9.10187e+011
+512 343 9.0782e+011
+564 61 9.07663e+011
+130 26 9.07503e+011
+29 237 9.07136e+011
+60 184 9.06301e+011
+152 222 9.04782e+011
+542 209 9.02677e+011
+41 63 9.00652e+011
+124 185 9.00207e+011
+465 393 8.99974e+011
+86 255 8.89477e+011
+10 101 8.89154e+011
+88 148 8.85947e+011
+380 354 8.85267e+011
+68 45 8.81568e+011
+311 150 8.78523e+011
+261 297 8.7767e+011
+519 60 8.76779e+011
+141 183 8.76659e+011
+525 20 8.76428e+011
+510 173 8.71523e+011
+230 36 8.69769e+011
+186 217 8.6421e+011
+354 126 8.62589e+011
+334 90 8.62397e+011
+59 218 8.60358e+011
+486 358 8.55373e+011
+390 48 8.54445e+011
+287 165 8.53283e+011
+62 60 8.52742e+011
+571 161 8.4817e+011
+167 96 8.44933e+011
+366 7 8.44894e+011
+359 167 8.44843e+011
+363 251 8.43257e+011
+245 143 8.43208e+011
+551 382 8.41652e+011
+389 140 8.41632e+011
+453 203 8.41051e+011
+531 61 8.38714e+011
+78 80 8.38135e+011
+509 1 8.36274e+011
+163 216 8.35048e+011
+71 147 8.31426e+011
+528 102 8.30641e+011
+284 403 8.2932e+011
+268 53 8.28012e+011
+388 294 8.23508e+011
+209 20 8.20419e+011
+347 178 8.18555e+011
+260 237 8.18497e+011
+433 147 8.17273e+011
+528 193 8.14334e+011
+271 242 8.1215e+011
+177 165 8.10396e+011
+35 175 8.06646e+011
+260 222 8.0579e+011
+242 71 8.0485e+011
+314 85 8.04229e+011
+484 338 8.03648e+011
+404 121 7.99939e+011
+233 200 7.99144e+011
+33 99 7.95473e+011
+228 292 7.92834e+011
+96 446 7.91173e+011
+113 345 7.91125e+011
+39 296 7.90945e+011
+211 185 7.90389e+011
+301 103 7.85846e+011
+410 353 7.84769e+011
+529 24 7.83878e+011
+102 360 7.83495e+011
+207 450 7.81773e+011
+138 110 7.80869e+011
+48 133 7.77534e+011
+528 39 7.7703e+011
+250 365 7.7697e+011
+488 264 7.76166e+011
+160 113 7.7427e+011
+573 141 7.74005e+011
+478 181 7.72726e+011
+113 3 7.72336e+011
+451 339 7.64617e+011
+31 270 7.62602e+011
+529 183 7.61122e+011
+369 106 7.60955e+011
+495 119 7.60535e+011
+366 144 7.59171e+011
+293 25 7.57146e+011
+482 82 7.56125e+011
+185 20 7.52237e+011
+139 57 7.50325e+011
+142 324 7.47812e+011
+423 398 7.45937e+011
+418 440 7.45097e+011
+163 277 7.44883e+011
+364 200 7.44387e+011
+113 392 7.42416e+011
+272 279 7.41694e+011
+511 222 7.39639e+011
+579 19 7.36972e+011
+524 346 7.36449e+011
+109 43 7.35532e+011
+364 258 7.35479e+011
+569 39 7.34418e+011
+501 143 7.33381e+011
+548 182 7.33341e+011
+498 81 7.31929e+011
+423 335 7.31367e+011
+509 83 7.31315e+011
+374 117 7.3108e+011
+297 275 7.29944e+011
+555 181 7.28321e+011
+156 198 7.2697e+011
+125 260 7.26961e+011
+559 18 7.25191e+011
+48 151 7.24214e+011
+222 419 7.23236e+011
+106 39 7.22101e+011
+271 166 7.21237e+011
+262 165 7.19781e+011
+130 217 7.15027e+011
+287 343 7.1458e+011
+164 20 7.14221e+011
+437 339 7.14066e+011
+407 338 7.14049e+011
+480 19 7.13805e+011
+130 76 7.13431e+011
+354 320 7.12562e+011
+396 261 7.11977e+011
+525 199 7.10441e+011
+121 3 7.09581e+011
+156 94 7.0939e+011
+280 50 7.05087e+011
+233 16 7.04224e+011
+473 63 7.03312e+011
+468 124 7.02888e+011
+387 10 7.02791e+011
+140 22 7.02444e+011
+266 295 7.00933e+011
+416 44 7.00765e+011
+177 106 6.9803e+011
+529 142 6.97904e+011
+112 213 6.97804e+011
+318 385 6.97271e+011
+512 202 6.96855e+011
+63 133 6.93984e+011
+361 316 6.92814e+011
+456 84 6.92703e+011
+523 123 6.92522e+011
+346 350 6.90276e+011
+509 455 6.8936e+011
+225 221 6.89223e+011
+5 11 6.87874e+011
+305 106 6.86836e+011
+217 208 6.85101e+011
+361 130 6.84294e+011
+476 262 6.81058e+011
+348 338 6.78575e+011
+380 337 6.76306e+011
+159 183 6.76196e+011
+175 40 6.75153e+011
+273 71 6.72844e+011
+221 150 6.70805e+011
+491 23 6.69765e+011
+385 125 6.69642e+011
+274 53 6.67886e+011
+230 265 6.66698e+011
+537 393 6.64874e+011
+331 164 6.64858e+011
+109 59 6.6287e+011
+294 297 6.62631e+011
+527 360 6.58536e+011
+446 7 6.57777e+011
+412 5 6.5644e+011
+102 4 6.54879e+011
+280 297 6.52778e+011
+172 57 6.52687e+011
+520 182 6.52266e+011
+273 131 6.51679e+011
+485 180 6.49471e+011
+177 261 6.48776e+011
+527 222 6.47993e+011
+24 62 6.46729e+011
+325 142 6.45649e+011
+283 72 6.44056e+011
+317 165 6.43805e+011
+276 221 6.4328e+011
+305 193 6.43076e+011
+381 26 6.42145e+011
+352 145 6.41895e+011
+482 366 6.39752e+011
+417 84 6.38788e+011
+306 440 6.3843e+011
+191 277 6.37791e+011
+405 375 6.36915e+011
+525 172 6.35181e+011
+424 261 6.35172e+011
+278 144 6.34268e+011
+228 185 6.3299e+011
+183 401 6.32131e+011
+79 474 6.30142e+011
+382 411 6.29796e+011
+302 208 6.28141e+011
+253 75 6.25502e+011
+277 138 6.24852e+011
+283 221 6.23927e+011
+442 239 6.238e+011
+371 162 6.23136e+011
+151 307 6.2134e+011
+562 149 6.21327e+011
+502 361 6.21193e+011
+276 352 6.20875e+011
+511 139 6.16806e+011
+278 392 6.16308e+011
+75 6 6.13977e+011
+183 138 6.13539e+011
+256 148 6.13444e+011
+537 139 6.11577e+011
+425 376 6.11406e+011
+478 402 6.10644e+011
+452 375 6.09901e+011
+306 363 6.09715e+011
+436 182 6.085e+011
+449 139 6.08128e+011
+544 3 6.07441e+011
+455 264 6.0707e+011
+162 134 6.06695e+011
+363 181 6.04479e+011
+504 61 6.04268e+011
+432 111 6.03939e+011
+376 85 6.03897e+011
+342 38 6.03511e+011
+250 34 6.02431e+011
+22 219 6.0229e+011
+325 425 6.01513e+011
+303 215 5.9955e+011
+516 17 5.96525e+011
+354 25 5.95523e+011
+379 106 5.95159e+011
+102 235 5.94216e+011
+242 57 5.94125e+011
+437 391 5.93742e+011
+157 73 5.9267e+011
+429 1 5.91455e+011
+393 66 5.90953e+011
+565 160 5.9088e+011
+176 76 5.90032e+011
+418 258 5.89037e+011
+449 402 5.88449e+011
+57 4 5.86828e+011
+450 82 5.86721e+011
+120 51 5.8594e+011
+297 420 5.82811e+011
+221 177 5.82254e+011
+222 115 5.8134e+011
+534 267 5.80026e+011
+109 95 5.78151e+011
+249 219 5.78107e+011
+453 44 5.77958e+011
+488 3 5.77616e+011
+343 122 5.77277e+011
+167 325 5.7533e+011
+62 371 5.69804e+011
+216 145 5.69796e+011
+192 172 5.68785e+011
+188 181 5.67987e+011
+161 238 5.67977e+011
+338 473 5.67163e+011
+133 72 5.67022e+011
+578 50 5.6548e+011
+183 110 5.6256e+011
+160 126 5.6204e+011
+78 25 5.6128e+011
+511 128 5.611e+011
+240 366 5.59323e+011
+498 65 5.58007e+011
+28 29 5.57815e+011
+362 369 5.57522e+011
+292 121 5.56945e+011
+356 220 5.56263e+011
+267 15 5.55886e+011
+1 156 5.55162e+011
+489 140 5.53195e+011
+79 270 5.51869e+011
+470 420 5.51799e+011
+234 346 5.5165e+011
+252 423 5.51627e+011
+395 162 5.51062e+011
+576 177 5.50365e+011
+198 83 5.50204e+011
+152 448 5.50055e+011
+55 291 5.49982e+011
+259 35 5.49344e+011
+345 275 5.49108e+011
+332 295 5.48851e+011
+483 374 5.47422e+011
+575 126 5.47306e+011
+147 397 5.45605e+011
+309 32 5.45516e+011
+95 148 5.43788e+011
+264 446 5.43252e+011
+151 113 5.42615e+011
+500 22 5.42594e+011
+401 183 5.42483e+011
+427 182 5.42347e+011
+330 9 5.42103e+011
+258 89 5.4069e+011
+386 243 5.40687e+011
+126 95 5.40512e+011
+373 68 5.4036e+011
+424 4 5.40079e+011
+229 128 5.39813e+011
+325 297 5.39196e+011
+164 208 5.39025e+011
+489 342 5.38446e+011
+57 67 5.38131e+011
+374 240 5.37524e+011
+463 27 5.3588e+011
+134 237 5.34696e+011
+355 268 5.34615e+011
+301 263 5.34501e+011
+146 160 5.33857e+011
+344 165 5.33654e+011
+209 154 5.32366e+011
+57 254 5.32026e+011
+216 279 5.31709e+011
+260 250 5.31086e+011
+387 326 5.29773e+011
+481 173 5.28334e+011
+476 22 5.28263e+011
+526 423 5.28144e+011
+324 148 5.27935e+011
+93 6 5.27637e+011
+430 320 5.25069e+011
+24 200 5.24521e+011
+260 71 5.24063e+011
+490 59 5.23794e+011
+186 98 5.23188e+011
+161 168 5.23115e+011
+518 202 5.2231e+011
+169 115 5.21372e+011
+237 130 5.20376e+011
+92 290 5.20337e+011
+386 319 5.20173e+011
+431 85 5.20091e+011
+205 160 5.19847e+011
+167 288 5.19394e+011
+266 30 5.18744e+011
+434 397 5.17284e+011
+192 330 5.17199e+011
+548 222 5.15994e+011
+571 121 5.15967e+011
+283 54 5.15693e+011
+554 201 5.14732e+011
+445 352 5.14049e+011
+298 69 5.13593e+011
+341 109 5.12189e+011
+37 218 5.09971e+011
+292 30 5.08634e+011
+542 132 5.08397e+011
+269 61 5.08331e+011
+317 147 5.08009e+011
+84 2 5.07847e+011
+191 146 5.06646e+011
+85 181 5.0583e+011
+184 344 5.02659e+011
+4 65 5.02489e+011
+436 304 5.02299e+011
+31 135 5.02272e+011
+538 96 5.00658e+011
+547 161 4.99413e+011
+75 96 4.99336e+011
+541 123 4.9897e+011
+542 253 4.98625e+011
+267 130 4.96065e+011
+181 394 4.95494e+011
+512 92 4.94878e+011
+435 90 4.92907e+011
+495 456 4.92323e+011
+189 109 4.92106e+011
+372 393 4.9154e+011
+329 255 4.90912e+011
+380 122 4.90693e+011
+66 213 4.90552e+011
+390 161 4.89614e+011
+539 458 4.89128e+011
+476 341 4.88804e+011
+327 182 4.88647e+011
+239 349 4.88499e+011
+84 477 4.88444e+011
+130 428 4.8808e+011
+197 131 4.87571e+011
+478 13 4.87005e+011
+164 358 4.84803e+011
+279 129 4.83793e+011
+474 243 4.83686e+011
+488 43 4.83227e+011
+79 195 4.82723e+011
+580 80 4.82353e+011
+249 313 4.82284e+011
+216 106 4.82188e+011
+516 347 4.81962e+011
+108 183 4.81851e+011
+464 355 4.81661e+011
+339 391 4.79297e+011
+500 264 4.79172e+011
+324 341 4.78903e+011
+278 333 4.78896e+011
+405 199 4.78557e+011
+298 137 4.78202e+011
+438 162 4.77457e+011
+393 354 4.77456e+011
+49 255 4.77116e+011
+176 186 4.75964e+011
+410 24 4.75648e+011
+169 200 4.75578e+011
+246 403 4.75432e+011
+30 219 4.7504e+011
+535 18 4.74197e+011
+358 161 4.74e+011
+557 246 4.73864e+011
+561 321 4.71529e+011
+298 398 4.71122e+011
+314 161 4.70944e+011
+412 65 4.7035e+011
+448 24 4.70164e+011
+332 202 4.69206e+011
+414 250 4.68795e+011
+36 201 4.68746e+011
+226 72 4.68003e+011
+108 27 4.67365e+011
+318 202 4.6695e+011
+538 185 4.66322e+011
+287 396 4.66274e+011
+76 375 4.65844e+011
+163 74 4.65451e+011
+161 255 4.6354e+011
+266 71 4.62706e+011
+130 148 4.61674e+011
+190 205 4.60748e+011
+468 141 4.5989e+011
+307 89 4.59758e+011
+383 146 4.59645e+011
+205 203 4.58759e+011
+279 196 4.58723e+011
+109 325 4.58477e+011
+413 99 4.5769e+011
+358 241 4.57057e+011
+395 22 4.56351e+011
+343 463 4.55183e+011
+138 98 4.5503e+011
+129 128 4.51758e+011
+441 98 4.51742e+011
+135 129 4.50792e+011
+534 160 4.5038e+011
+513 120 4.50013e+011
+460 339 4.48641e+011
+560 272 4.48263e+011
+475 203 4.48251e+011
+152 1 4.47967e+011
+214 124 4.47826e+011
+562 71 4.47139e+011
+354 106 4.47078e+011
+116 76 4.46785e+011
+258 161 4.46106e+011
+162 148 4.45835e+011
+387 167 4.45552e+011
+376 6 4.44973e+011
+380 181 4.44961e+011
+44 474 4.44416e+011
+178 19 4.44208e+011
+55 302 4.4368e+011
+246 293 4.42587e+011
+352 163 4.42531e+011
+513 43 4.42406e+011
+191 140 4.42109e+011
+418 283 4.41752e+011
+43 82 4.40934e+011
+444 452 4.40651e+011
+482 328 4.40508e+011
+49 12 4.40488e+011
+374 299 4.39773e+011
+96 256 4.3967e+011
+406 81 4.39086e+011
+162 107 4.38614e+011
+347 240 4.38165e+011
+293 147 4.37482e+011
+186 170 4.37168e+011
+359 143 4.36822e+011
+408 182 4.36661e+011
+364 354 4.34674e+011
+275 215 4.34221e+011
+480 165 4.34196e+011
+539 40 4.33343e+011
+263 402 4.3155e+011
+262 392 4.3053e+011
+572 332 4.30448e+011
+148 21 4.30242e+011
+119 95 4.29772e+011
+278 190 4.29275e+011
+69 131 4.28585e+011
+249 192 4.27962e+011
+293 312 4.27125e+011
+502 164 4.26776e+011
+488 83 4.26408e+011
+244 190 4.25384e+011
+507 142 4.24595e+011
+111 168 4.24472e+011
+138 146 4.24355e+011
+163 313 4.23289e+011
+150 150 4.2319e+011
+414 21 4.22938e+011
+203 294 4.22895e+011
+193 16 4.22775e+011
+542 100 4.22229e+011
+446 377 4.20538e+011
+269 93 4.20474e+011
+95 477 4.19746e+011
+329 65 4.18234e+011
+49 159 4.18008e+011
+80 40 4.17907e+011
+536 121 4.17528e+011
+162 202 4.17498e+011
+462 162 4.16569e+011
+236 220 4.16489e+011
+109 147 4.16457e+011
+204 128 4.15873e+011
+349 87 4.15651e+011
+373 75 4.15452e+011
+61 111 4.14215e+011
+59 40 4.13703e+011
+260 329 4.13246e+011
+363 407 4.13146e+011
+498 227 4.131e+011
+101 198 4.12887e+011
+304 53 4.12217e+011
+478 451 4.11677e+011
+290 348 4.11559e+011
+136 139 4.11246e+011
+219 126 4.1087e+011
+110 264 4.10718e+011
+43 9 4.1025e+011
+284 241 4.09189e+011
+358 10 4.0907e+011
+106 77 4.0906e+011
+53 357 4.08634e+011
+183 184 4.07897e+011
+510 362 4.06978e+011
+260 141 4.06602e+011
+304 157 4.06582e+011
+38 168 4.06534e+011
+387 97 4.06467e+011
+88 209 4.06333e+011
+182 133 4.06029e+011
+462 101 4.05315e+011
+110 341 4.04925e+011
+537 80 4.04288e+011
+220 290 4.0408e+011
+297 331 4.04068e+011
+141 394 4.03128e+011
+314 222 4.03007e+011
+346 48 4.02892e+011
+230 149 4.01519e+011
+238 422 4.01061e+011
+64 7 4.00631e+011
+181 202 4.00568e+011
+467 41 4.00193e+011
+194 110 3.99485e+011
+549 58 3.99354e+011
+209 420 3.99199e+011
+265 140 3.9855e+011
+168 149 3.98497e+011
+541 164 3.98241e+011
+434 225 3.98067e+011
+251 153 3.98056e+011
+434 156 3.9785e+011
+424 203 3.97589e+011
+122 127 3.96619e+011
+445 126 3.95247e+011
+123 272 3.95082e+011
+142 2 3.94092e+011
+338 164 3.94059e+011
+393 216 3.94018e+011
+62 203 3.93817e+011
+334 240 3.93656e+011
+225 51 3.93214e+011
+494 163 3.92793e+011
+119 60 3.92512e+011
+200 110 3.92363e+011
+13 81 3.92241e+011
+285 262 3.91997e+011
+594 18 3.91428e+011
+578 43 3.91255e+011
+222 239 3.90678e+011
+460 44 3.90651e+011
+421 81 3.8975e+011
+217 36 3.89415e+011
+270 104 3.89406e+011
+66 252 3.88494e+011
+217 55 3.88379e+011
+337 426 3.87901e+011
+150 232 3.87168e+011
+387 283 3.87054e+011
+362 102 3.86268e+011
+557 303 3.85532e+011
+387 15 3.85316e+011
+144 16 3.84555e+011
+559 80 3.84212e+011
+153 300 3.84154e+011
+115 219 3.83147e+011
+38 239 3.82269e+011
+519 79 3.82079e+011
+411 470 3.81516e+011
+346 298 3.81188e+011
+316 238 3.79681e+011
+289 183 3.79481e+011
+344 263 3.79392e+011
+16 216 3.7919e+011
+528 161 3.7892e+011
+41 355 3.78825e+011
+266 145 3.78215e+011
+200 167 3.78209e+011
+193 219 3.78201e+011
+39 309 3.77546e+011
+506 177 3.77389e+011
+440 122 3.77212e+011
+191 358 3.77042e+011
+156 56 3.76854e+011
+180 274 3.76635e+011
+221 101 3.76562e+011
+259 274 3.76514e+011
+365 66 3.76434e+011
+493 181 3.74904e+011
+423 62 3.74619e+011
+334 369 3.74257e+011
+452 102 3.74036e+011
+101 162 3.73828e+011
+18 343 3.73719e+011
+539 405 3.7362e+011
+178 122 3.72551e+011
+196 76 3.72168e+011
+365 85 3.72041e+011
+461 123 3.70552e+011
+281 35 3.70166e+011
+90 78 3.69873e+011
+413 299 3.69769e+011
+90 376 3.69075e+011
+247 326 3.68923e+011
+129 238 3.68857e+011
+436 280 3.68038e+011
+130 254 3.68019e+011
+94 94 3.67852e+011
+194 311 3.66461e+011
+571 450 3.66069e+011
+368 1 3.66052e+011
+113 175 3.65925e+011
+129 113 3.65834e+011
+50 62 3.65825e+011
+53 43 3.65623e+011
+187 201 3.65547e+011
+14 203 3.64866e+011
+465 4 3.64476e+011
+360 217 3.64415e+011
+422 315 3.63977e+011
+32 66 3.6345e+011
+321 29 3.63327e+011
+529 365 3.62268e+011
+357 282 3.60659e+011
+280 386 3.60578e+011
+509 301 3.60388e+011
+368 337 3.60185e+011
+402 167 3.5972e+011
+53 221 3.59173e+011
+203 257 3.57255e+011
+310 7 3.56322e+011
+307 448 3.55959e+011
+57 146 3.55656e+011
+398 143 3.5489e+011
+33 111 3.54329e+011
+118 110 3.54306e+011
+478 240 3.54278e+011
+147 89 3.53715e+011
+65 275 3.53134e+011
+289 88 3.53072e+011
+49 80 3.52767e+011
+449 445 3.52554e+011
+452 162 3.50792e+011
+182 380 3.50637e+011
+420 143 3.49499e+011
+57 364 3.46959e+011
+513 262 3.46883e+011
+548 245 3.46784e+011
+186 309 3.46731e+011
+63 26 3.46343e+011
+245 385 3.46248e+011
+3 382 3.46241e+011
+68 336 3.45702e+011
+349 323 3.45135e+011
+91 23 3.44755e+011
+498 59 3.4435e+011
+565 18 3.43843e+011
+210 137 3.42515e+011
+389 420 3.42376e+011
+72 409 3.41125e+011
+371 90 3.40683e+011
+307 354 3.39923e+011
+30 255 3.39408e+011
+148 39 3.38696e+011
+286 34 3.38187e+011
+226 91 3.376e+011
+107 109 3.37439e+011
+197 193 3.37089e+011
+544 91 3.37067e+011
+331 141 3.3699e+011
+85 60 3.36518e+011
+183 238 3.36171e+011
+526 382 3.35901e+011
+469 201 3.35599e+011
+510 180 3.35586e+011
+96 197 3.35065e+011
+260 106 3.35032e+011
+599 364 3.35011e+011
+26 132 3.34746e+011
+573 405 3.33955e+011
+265 260 3.3389e+011
+443 320 3.33881e+011
+352 10 3.33852e+011
+95 422 3.33468e+011
+190 325 3.33126e+011
+537 261 3.33098e+011
+211 163 3.32988e+011
+390 203 3.32963e+011
+483 122 3.32884e+011
+116 428 3.32712e+011
+384 87 3.32079e+011
+408 430 3.3194e+011
+534 340 3.31265e+011
+87 369 3.31144e+011
+390 134 3.30834e+011
+419 89 3.29967e+011
+399 104 3.29957e+011
+126 329 3.29714e+011
+529 31 3.2968e+011
+133 93 3.29648e+011
+585 18 3.29007e+011
+328 320 3.28927e+011
+322 119 3.28838e+011
+107 428 3.28785e+011
+449 167 3.28748e+011
+484 155 3.28694e+011
+455 359 3.28308e+011
+498 70 3.28203e+011
+471 83 3.27773e+011
+362 448 3.27618e+011
+275 319 3.27602e+011
+73 186 3.26911e+011
+433 241 3.26817e+011
+346 392 3.26721e+011
+116 129 3.26263e+011
+104 304 3.25799e+011
+244 197 3.25183e+011
+408 14 3.25104e+011
+58 99 3.24976e+011
+120 446 3.24812e+011
+569 382 3.23523e+011
+448 63 3.22719e+011
+462 221 3.21939e+011
+362 361 3.21882e+011
+358 393 3.21666e+011
+499 42 3.21561e+011
+506 381 3.21432e+011
+95 59 3.21011e+011
+247 347 3.20125e+011
+354 16 3.19749e+011
+290 263 3.19719e+011
+87 340 3.19701e+011
+149 131 3.19495e+011
+334 28 3.19232e+011
+317 106 3.18777e+011
+584 38 3.18422e+011
+444 119 3.17689e+011
+146 79 3.17568e+011
+254 181 3.17224e+011
+332 415 3.17121e+011
+385 258 3.1705e+011
+573 422 3.16928e+011
+497 341 3.16788e+011
+512 297 3.16459e+011
+213 149 3.16258e+011
+449 177 3.16238e+011
+303 444 3.16036e+011
+260 229 3.15126e+011
+27 66 3.14996e+011
+343 198 3.14648e+011
+562 143 3.14243e+011
+333 356 3.14237e+011
+240 134 3.14097e+011
+424 103 3.13891e+011
+278 165 3.13858e+011
+203 346 3.13785e+011
+570 182 3.13359e+011
+280 439 3.12799e+011
+215 174 3.10829e+011
+264 310 3.10437e+011
+34 31 3.09626e+011
+92 253 3.09462e+011
+174 201 3.09119e+011
+274 205 3.09016e+011
+129 309 3.08963e+011
+391 221 3.089e+011
+401 319 3.08814e+011
+85 214 3.08746e+011
+359 52 3.08323e+011
+66 477 3.07866e+011
+331 212 3.07805e+011
+86 310 3.07573e+011
+163 37 3.07523e+011
+123 219 3.07288e+011
+373 354 3.06998e+011
+275 329 3.06537e+011
+157 306 3.06079e+011
+218 351 3.05323e+011
+242 419 3.05321e+011
+558 462 3.0482e+011
+411 415 3.04408e+011
+299 190 3.0405e+011
+227 259 3.03967e+011
+188 304 3.03836e+011
+57 331 3.03782e+011
+299 180 3.03623e+011
+488 119 3.03374e+011
+525 278 3.03192e+011
+496 101 3.02902e+011
+300 246 3.01877e+011
+392 241 3.01739e+011
+519 164 3.01699e+011
+285 158 3.01182e+011
+171 448 3.0106e+011
+407 142 3.00951e+011
+332 392 3.00811e+011
+10 476 2.99369e+011
+340 88 2.98831e+011
+244 212 2.97907e+011
+501 102 2.97702e+011
+184 118 2.97239e+011
+9 44 2.96129e+011
+364 125 2.95765e+011
+408 260 2.95517e+011
+366 95 2.95455e+011
+222 434 2.95446e+011
+356 254 2.95105e+011
+430 45 2.94802e+011
+210 445 2.94475e+011
+49 166 2.94378e+011
+253 249 2.94346e+011
+261 368 2.94014e+011
+78 60 2.93863e+011
+330 103 2.93857e+011
+205 416 2.93662e+011
+167 130 2.93295e+011
+217 97 2.93201e+011
+592 104 2.93024e+011
+119 223 2.93005e+011
+281 419 2.92977e+011
+44 407 2.92967e+011
+334 436 2.92836e+011
+169 179 2.9232e+011
+370 466 2.91889e+011
+199 29 2.91747e+011
+240 194 2.91512e+011
+200 89 2.9118e+011
+497 283 2.91102e+011
+354 424 2.90957e+011
+430 339 2.90873e+011
+302 134 2.90758e+011
+102 295 2.90287e+011
+69 304 2.9027e+011
+43 122 2.90029e+011
+246 181 2.89789e+011
+45 90 2.89337e+011
+90 388 2.89128e+011
+402 220 2.89047e+011
+188 264 2.88546e+011
+483 288 2.87897e+011
+56 171 2.87813e+011
+525 79 2.87147e+011
+280 134 2.86994e+011
+436 320 2.86867e+011
+194 136 2.86324e+011
+375 125 2.85702e+011
+472 43 2.85632e+011
+110 358 2.85455e+011
+482 46 2.85395e+011
+191 364 2.85277e+011
+196 342 2.84326e+011
+388 334 2.8423e+011
+236 150 2.8399e+011
+73 166 2.83459e+011
+372 146 2.83365e+011
+49 235 2.83285e+011
+13 433 2.82567e+011
+341 314 2.82503e+011
+286 443 2.82108e+011
+433 381 2.81631e+011
+448 285 2.81395e+011
+528 397 2.80709e+011
+296 125 2.80586e+011
+514 381 2.80582e+011
+247 106 2.80245e+011
+496 475 2.80061e+011
+81 236 2.79933e+011
+553 79 2.79923e+011
+88 230 2.79821e+011
+588 161 2.79098e+011
+212 32 2.7901e+011
+563 40 2.78874e+011
+191 254 2.78827e+011
+151 400 2.78645e+011
+502 420 2.78502e+011
+302 142 2.78495e+011
+396 46 2.78026e+011
+548 283 2.77901e+011
+310 260 2.77702e+011
+520 425 2.7714e+011
+579 214 2.76216e+011
+525 189 2.75489e+011
+542 140 2.75096e+011
+302 405 2.74902e+011
+287 111 2.74449e+011
+325 14 2.74145e+011
+446 243 2.73985e+011
+391 322 2.73732e+011
+16 117 2.73725e+011
+246 172 2.7312e+011
+91 320 2.73049e+011
+194 164 2.73003e+011
+449 324 2.72725e+011
+332 334 2.72303e+011
+367 30 2.7213e+011
+245 15 2.72103e+011
+118 117 2.7195e+011
+510 114 2.71389e+011
+91 276 2.71251e+011
+251 163 2.70883e+011
+401 430 2.70642e+011
+511 211 2.70506e+011
+139 318 2.70235e+011
+156 317 2.69939e+011
+4 235 2.69851e+011
+347 371 2.69582e+011
+115 180 2.69558e+011
+294 163 2.69548e+011
+95 124 2.69455e+011
+471 212 2.69216e+011
+188 136 2.69064e+011
+575 39 2.69036e+011
+402 6 2.68688e+011
+339 221 2.68643e+011
+583 140 2.68411e+011
+454 118 2.67731e+011
+393 183 2.67697e+011
+136 323 2.6765e+011
+420 290 2.66714e+011
+143 237 2.66712e+011
+41 339 2.66549e+011
+411 220 2.66447e+011
+202 393 2.65737e+011
+417 414 2.65562e+011
+160 98 2.64389e+011
+382 46 2.64374e+011
+3 165 2.63557e+011
+367 303 2.63552e+011
+107 220 2.6346e+011
+200 327 2.63225e+011
+143 113 2.63115e+011
+275 360 2.63099e+011
+151 57 2.63021e+011
+96 453 2.62921e+011
+375 281 2.62553e+011
+335 48 2.61883e+011
+39 24 2.61628e+011
+310 299 2.61139e+011
+64 153 2.60716e+011
+315 28 2.60692e+011
+123 83 2.60556e+011
+179 57 2.60406e+011
+351 364 2.60142e+011
+247 259 2.59958e+011
+451 417 2.5995e+011
+354 296 2.59303e+011
+216 164 2.59284e+011
+417 471 2.58973e+011
+190 349 2.58905e+011
+565 463 2.58897e+011
+197 148 2.5876e+011
+5 151 2.58719e+011
+42 135 2.58588e+011
+272 146 2.57617e+011
+221 215 2.5732e+011
+165 379 2.5697e+011
+227 122 2.56852e+011
+166 309 2.56783e+011
+378 452 2.56419e+011
+359 177 2.56271e+011
+437 43 2.55736e+011
+162 31 2.55205e+011
+255 405 2.55168e+011
+37 288 2.54938e+011
+470 23 2.54933e+011
+391 125 2.53851e+011
+65 362 2.5379e+011
+84 145 2.53646e+011
+485 235 2.53448e+011
+481 128 2.53336e+011
+412 263 2.53179e+011
+251 87 2.52799e+011
+53 450 2.52025e+011
+177 329 2.51588e+011
+75 128 2.51404e+011
+176 341 2.5111e+011
+160 431 2.50939e+011
+446 144 2.50871e+011
+572 59 2.50556e+011
+134 411 2.50491e+011
+509 252 2.50406e+011
+233 90 2.50315e+011
+310 335 2.49984e+011
+99 425 2.49902e+011
+323 126 2.49732e+011
+82 64 2.49563e+011
+428 64 2.49226e+011
+183 316 2.49223e+011
+12 113 2.49115e+011
+211 95 2.48947e+011
+385 66 2.48366e+011
+89 9 2.48303e+011
+157 163 2.48181e+011
+50 376 2.48161e+011
+18 236 2.48026e+011
+546 438 2.47679e+011
+398 66 2.47532e+011
+20 317 2.47415e+011
+83 102 2.47282e+011
+327 26 2.46659e+011
+302 87 2.4588e+011
+458 140 2.45808e+011
+375 224 2.45643e+011
+32 38 2.4526e+011
+529 135 2.45047e+011
+540 221 2.44858e+011
+326 221 2.43981e+011
+255 80 2.43889e+011
+235 261 2.43366e+011
+430 162 2.43223e+011
+589 309 2.43211e+011
+335 444 2.42803e+011
+324 259 2.42621e+011
+511 350 2.42566e+011
+41 98 2.42367e+011
+569 203 2.41758e+011
+479 439 2.41652e+011
+11 73 2.41291e+011
+420 363 2.40955e+011
+487 204 2.40909e+011
+497 462 2.40771e+011
+63 423 2.40331e+011
+433 26 2.40317e+011
+301 253 2.40228e+011
+76 111 2.39415e+011
+201 144 2.3892e+011
+450 197 2.3864e+011
+408 107 2.38639e+011
+556 265 2.38163e+011
+214 425 2.38129e+011
+438 455 2.37815e+011
+386 450 2.3744e+011
+141 163 2.37206e+011
+113 205 2.37158e+011
+334 281 2.37044e+011
+320 95 2.37008e+011
+63 440 2.36171e+011
+121 148 2.36056e+011
+394 336 2.35512e+011
+450 437 2.35082e+011
+204 398 2.34566e+011
+351 354 2.34345e+011
+85 110 2.34335e+011
+374 151 2.34207e+011
+131 393 2.33754e+011
+234 32 2.33718e+011
+328 353 2.33236e+011
+450 90 2.33224e+011
+254 108 2.33142e+011
+90 113 2.3309e+011
+605 121 2.32699e+011
+576 165 2.32313e+011
+135 102 2.32292e+011
+582 344 2.32034e+011
+114 164 2.3167e+011
+274 77 2.31663e+011
+544 81 2.3152e+011
+218 315 2.31435e+011
+416 26 2.30824e+011
+173 147 2.30814e+011
+521 362 2.30352e+011
+465 115 2.30314e+011
+161 326 2.30248e+011
+399 200 2.30115e+011
+87 355 2.29929e+011
+190 131 2.29929e+011
+163 349 2.29824e+011
+484 222 2.29688e+011
+387 21 2.29196e+011
+432 269 2.28603e+011
+147 326 2.28508e+011
+265 286 2.28346e+011
+388 83 2.28044e+011
+483 143 2.28007e+011
+39 78 2.27906e+011
+441 378 2.27763e+011
+119 162 2.27643e+011
+303 295 2.27519e+011
+574 7 2.27489e+011
+319 186 2.2693e+011
+107 259 2.26554e+011
+294 269 2.26532e+011
+414 245 2.26439e+011
+131 476 2.26423e+011
+275 109 2.26207e+011
+463 143 2.26158e+011
+69 419 2.26061e+011
+173 417 2.25925e+011
+122 24 2.25825e+011
+323 134 2.25813e+011
+391 449 2.25202e+011
+514 334 2.24386e+011
+414 144 2.24089e+011
+82 218 2.24079e+011
+333 181 2.23853e+011
+113 307 2.23485e+011
+425 25 2.23387e+011
+507 41 2.23066e+011
+356 448 2.22789e+011
+358 63 2.22729e+011
+576 90 2.22004e+011
+146 451 2.2172e+011
+420 123 2.21115e+011
+146 255 2.20521e+011
+533 346 2.20484e+011
+154 130 2.20064e+011
+233 295 2.20032e+011
+420 96 2.19281e+011
+42 441 2.19216e+011
+404 104 2.19103e+011
+347 201 2.19076e+011
+291 11 2.18925e+011
+348 128 2.18618e+011
+532 173 2.18257e+011
+295 258 2.18128e+011
+370 139 2.17911e+011
+468 262 2.17684e+011
+618 181 2.17402e+011
+148 137 2.17158e+011
+207 315 2.16449e+011
+150 195 2.16198e+011
+40 183 2.16116e+011
+400 270 2.15958e+011
+36 470 2.15774e+011
+473 103 2.15713e+011
+126 412 2.1569e+011
+396 119 2.15303e+011
+444 204 2.1503e+011
+181 292 2.1502e+011
+455 59 2.1483e+011
+596 59 2.14823e+011
+351 448 2.14538e+011
+412 339 2.14268e+011
+291 50 2.13912e+011
+577 135 2.13654e+011
+547 261 2.13413e+011
+321 11 2.13351e+011
+287 370 2.13351e+011
+132 376 2.13004e+011
+426 125 2.12694e+011
+161 61 2.12589e+011
+473 356 2.11899e+011
+573 19 2.11577e+011
+523 141 2.11547e+011
+54 150 2.11516e+011
+185 373 2.11424e+011
+13 237 2.11407e+011
+570 269 2.11209e+011
+421 298 2.10994e+011
+261 456 2.10708e+011
+214 450 2.10639e+011
+102 339 2.10504e+011
+529 119 2.10389e+011
+65 307 2.10369e+011
+90 365 2.1031e+011
+143 143 2.10207e+011
+419 53 2.09816e+011
+440 468 2.09449e+011
+243 31 2.09301e+011
+149 201 2.09195e+011
+231 177 2.08802e+011
+147 125 2.07855e+011
+513 324 2.07761e+011
+284 199 2.07348e+011
+107 162 2.07288e+011
+540 443 2.07097e+011
+422 327 2.06953e+011
+88 95 2.06923e+011
+86 288 2.06905e+011
+51 336 2.06761e+011
+44 251 2.06719e+011
+270 414 2.06701e+011
+345 140 2.06674e+011
+68 57 2.06602e+011
+187 290 2.06543e+011
+130 171 2.06488e+011
+303 331 2.06302e+011
+482 455 2.06265e+011
+404 99 2.06257e+011
+551 120 2.0604e+011
+473 453 2.05805e+011
+73 59 2.05798e+011
+309 266 2.05613e+011
+276 426 2.05607e+011
+173 291 2.05383e+011
+541 380 2.05296e+011
+514 401 2.04883e+011
+282 81 2.04789e+011
+469 163 2.04787e+011
+243 273 2.04499e+011
+330 217 2.04111e+011
+208 144 2.03701e+011
+297 410 2.03661e+011
+323 370 2.03603e+011
+133 66 2.03569e+011
+95 285 2.03553e+011
+165 364 2.03435e+011
+100 95 2.03392e+011
+478 221 2.03251e+011
+208 73 2.03077e+011
+49 458 2.02704e+011
+186 257 2.02507e+011
+290 137 2.02424e+011
+171 87 2.01877e+011
+553 18 2.01748e+011
+580 202 2.01552e+011
+28 119 2.01466e+011
+163 190 2.01384e+011
+399 92 2.01374e+011
+420 132 2.01266e+011
+118 263 2.0105e+011
+220 84 2.00534e+011
+159 154 2.0035e+011
+232 273 2.00087e+011
+191 188 1.99806e+011
+390 119 1.99664e+011
+139 311 1.99591e+011
+498 154 1.99387e+011
+316 100 1.9914e+011
+56 234 1.98956e+011
+314 448 1.98648e+011
+398 298 1.98439e+011
+337 331 1.98232e+011
+180 221 1.97659e+011
+124 58 1.97649e+011
+27 45 1.97435e+011
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_3_7.txt b/test_data/harriscorners/hc_msc_5.00_0.04_3_7.txt
new file mode 100644
index 0000000..0a6f717
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_3_7.txt
@@ -0,0 +1,1793 @@
+1792
+244 94 7.52428e+012
+498 1 7.16173e+012
+121 44 7.06738e+012
+274 367 6.72401e+012
+421 180 5.97555e+012
+331 128 5.59613e+012
+83 77 5.49709e+012
+299 53 5.1256e+012
+401 263 5.00272e+012
+135 214 4.85851e+012
+238 20 4.68279e+012
+80 28 4.50504e+012
+271 291 4.38534e+012
+424 322 4.35505e+012
+129 26 4.26936e+012
+202 18 4.21799e+012
+467 238 4.18864e+012
+342 8 4.0838e+012
+282 113 4.0347e+012
+75 257 3.83362e+012
+542 14 3.80761e+012
+460 264 3.80225e+012
+438 68 3.79286e+012
+165 240 3.64222e+012
+458 279 3.63846e+012
+510 166 3.56818e+012
+55 30 3.52485e+012
+301 105 3.52344e+012
+151 223 3.52252e+012
+137 204 3.51914e+012
+80 4 3.50895e+012
+543 167 3.49089e+012
+510 124 3.48188e+012
+103 61 3.47697e+012
+361 294 3.4587e+012
+394 142 3.41918e+012
+413 255 3.40136e+012
+155 235 3.39326e+012
+394 317 3.39077e+012
+129 1 3.35154e+012
+210 436 3.33879e+012
+213 57 3.33636e+012
+183 35 3.32129e+012
+302 184 3.31753e+012
+243 203 3.25817e+012
+196 126 3.25617e+012
+280 368 3.24946e+012
+486 58 3.21708e+012
+160 144 3.19407e+012
+483 178 3.18965e+012
+126 255 3.13634e+012
+363 400 3.12808e+012
+513 78 3.09592e+012
+83 134 3.09292e+012
+175 95 3.06776e+012
+486 22 3.06083e+012
+416 8 3.05636e+012
+138 210 3.05338e+012
+541 59 3.03744e+012
+562 225 2.97595e+012
+175 111 2.95307e+012
+554 39 2.95207e+012
+202 313 2.94425e+012
+287 298 2.9424e+012
+506 17 2.93799e+012
+221 36 2.92393e+012
+485 338 2.92333e+012
+361 395 2.90425e+012
+34 138 2.90041e+012
+345 339 2.89994e+012
+528 102 2.89881e+012
+209 20 2.88699e+012
+46 26 2.86609e+012
+208 221 2.86547e+012
+137 174 2.84981e+012
+164 215 2.83243e+012
+222 181 2.82964e+012
+293 16 2.82323e+012
+319 314 2.82133e+012
+102 222 2.81186e+012
+261 202 2.80287e+012
+125 186 2.78238e+012
+115 43 2.78101e+012
+36 145 2.77764e+012
+528 23 2.77185e+012
+215 71 2.76648e+012
+424 45 2.75164e+012
+511 16 2.7421e+012
+260 297 2.73407e+012
+34 8 2.73096e+012
+359 129 2.71319e+012
+497 160 2.70355e+012
+258 384 2.68848e+012
+244 166 2.68078e+012
+34 267 2.66058e+012
+66 235 2.65514e+012
+126 164 2.65333e+012
+41 217 2.64485e+012
+158 74 2.6446e+012
+302 176 2.64299e+012
+92 214 2.62896e+012
+46 219 2.62528e+012
+263 441 2.61718e+012
+189 218 2.61297e+012
+421 165 2.61235e+012
+326 165 2.61199e+012
+542 217 2.59449e+012
+234 161 2.58677e+012
+130 37 2.585e+012
+253 12 2.5782e+012
+378 67 2.57218e+012
+480 19 2.55265e+012
+367 143 2.54951e+012
+90 197 2.54835e+012
+383 5 2.54663e+012
+413 45 2.54467e+012
+255 139 2.54046e+012
+442 24 2.53679e+012
+48 98 2.52796e+012
+4 46 2.5196e+012
+286 209 2.51395e+012
+454 204 2.51109e+012
+124 197 2.50237e+012
+126 364 2.50103e+012
+511 2 2.50079e+012
+448 399 2.49276e+012
+485 358 2.49095e+012
+276 182 2.48829e+012
+552 381 2.47733e+012
+477 5 2.47022e+012
+111 240 2.4669e+012
+299 165 2.45866e+012
+533 241 2.45809e+012
+236 72 2.44535e+012
+195 56 2.43921e+012
+449 299 2.43853e+012
+64 319 2.43784e+012
+512 221 2.42582e+012
+247 206 2.42091e+012
+319 225 2.42042e+012
+71 26 2.41211e+012
+473 243 2.41046e+012
+390 59 2.41039e+012
+384 10 2.40669e+012
+465 196 2.40538e+012
+387 220 2.39955e+012
+359 166 2.39344e+012
+512 342 2.38838e+012
+359 334 2.38367e+012
+326 89 2.38184e+012
+313 148 2.37917e+012
+428 2 2.37256e+012
+129 75 2.36051e+012
+174 311 2.35509e+012
+333 105 2.35457e+012
+542 365 2.35337e+012
+112 344 2.35142e+012
+518 59 2.34554e+012
+365 300 2.34219e+012
+476 261 2.34134e+012
+157 1 2.33671e+012
+450 338 2.33354e+012
+448 261 2.33027e+012
+223 420 2.32533e+012
+269 53 2.32396e+012
+101 79 2.31727e+012
+281 49 2.30491e+012
+317 336 2.30226e+012
+241 70 2.30128e+012
+373 82 2.30021e+012
+272 68 2.2991e+012
+523 61 2.29701e+012
+386 178 2.29101e+012
+408 64 2.28614e+012
+109 42 2.28581e+012
+64 344 2.28267e+012
+261 238 2.27879e+012
+428 118 2.26566e+012
+340 336 2.26403e+012
+31 235 2.26007e+012
+563 62 2.259e+012
+166 96 2.25354e+012
+410 162 2.25074e+012
+335 90 2.24493e+012
+37 298 2.24257e+012
+391 296 2.24065e+012
+238 201 2.2406e+012
+383 163 2.23997e+012
+162 110 2.23339e+012
+362 258 2.23023e+012
+575 16 2.22989e+012
+358 319 2.2231e+012
+298 274 2.2205e+012
+175 165 2.2142e+012
+364 253 2.21272e+012
+206 449 2.20575e+012
+481 83 2.20499e+012
+55 290 2.2045e+012
+403 120 2.19461e+012
+352 321 2.19085e+012
+47 151 2.18484e+012
+173 237 2.18377e+012
+227 293 2.18243e+012
+111 169 2.17598e+012
+326 141 2.17112e+012
+464 394 2.1597e+012
+110 134 2.15304e+012
+220 148 2.14767e+012
+38 63 2.14043e+012
+294 27 2.13189e+012
+547 162 2.1267e+012
+265 296 2.12603e+012
+527 195 2.12482e+012
+432 147 2.12351e+012
+169 19 2.12256e+012
+87 254 2.11864e+012
+274 132 2.11487e+012
+512 100 2.11373e+012
+174 41 2.10054e+012
+144 311 2.0971e+012
+260 222 2.09666e+012
+143 324 2.09616e+012
+580 17 2.09072e+012
+60 184 2.07585e+012
+546 41 2.0747e+012
+404 183 2.07213e+012
+7 10 2.0711e+012
+314 84 2.06202e+012
+469 123 2.0588e+012
+365 6 2.05304e+012
+283 402 2.05301e+012
+312 77 2.05104e+012
+272 280 2.04828e+012
+56 7 2.04795e+012
+403 277 2.03967e+012
+288 164 2.03713e+012
+112 392 2.03673e+012
+232 199 2.03226e+012
+389 11 2.02826e+012
+381 353 2.02815e+012
+423 336 2.02561e+012
+490 1 2.01317e+012
+523 346 2.01168e+012
+58 218 2.00442e+012
+384 124 1.99777e+012
+211 184 1.99487e+012
+528 183 1.98773e+012
+251 364 1.98359e+012
+232 263 1.97856e+012
+329 258 1.97581e+012
+36 174 1.97166e+012
+490 139 1.97138e+012
+34 100 1.96841e+012
+309 370 1.96569e+012
+529 39 1.96197e+012
+152 307 1.95885e+012
+247 219 1.95481e+012
+66 26 1.94763e+012
+131 218 1.94763e+012
+391 48 1.93969e+012
+528 61 1.93789e+012
+484 363 1.93385e+012
+480 296 1.92938e+012
+10 101 1.92885e+012
+139 21 1.92422e+012
+89 149 1.92275e+012
+514 203 1.9216e+012
+249 143 1.91728e+012
+278 220 1.9165e+012
+172 56 1.91124e+012
+394 65 1.90792e+012
+394 161 1.9047e+012
+153 197 1.90407e+012
+437 339 1.90271e+012
+141 182 1.90144e+012
+132 71 1.89829e+012
+220 17 1.89618e+012
+328 296 1.8945e+012
+256 152 1.8907e+012
+436 396 1.88651e+012
+305 439 1.88412e+012
+361 142 1.88343e+012
+229 37 1.88317e+012
+58 75 1.87718e+012
+509 203 1.87609e+012
+495 118 1.87222e+012
+131 132 1.86534e+012
+317 165 1.8583e+012
+46 134 1.85012e+012
+24 62 1.84292e+012
+68 45 1.83819e+012
+482 173 1.83613e+012
+110 58 1.83394e+012
+521 183 1.82008e+012
+409 354 1.81559e+012
+343 108 1.81157e+012
+547 219 1.81095e+012
+253 74 1.80994e+012
+456 44 1.80844e+012
+522 264 1.80594e+012
+236 347 1.80581e+012
+431 318 1.80381e+012
+273 220 1.80206e+012
+562 478 1.79848e+012
+294 122 1.7982e+012
+501 361 1.79395e+012
+467 140 1.79389e+012
+366 105 1.79e+012
+302 215 1.78191e+012
+388 164 1.77924e+012
+469 421 1.77468e+012
+12 217 1.77105e+012
+512 140 1.76621e+012
+50 288 1.76238e+012
+26 9 1.76211e+012
+277 143 1.76159e+012
+162 127 1.7596e+012
+168 115 1.75678e+012
+548 182 1.7564e+012
+168 326 1.75611e+012
+452 374 1.75172e+012
+508 454 1.74826e+012
+569 161 1.73783e+012
+376 316 1.73523e+012
+385 295 1.73489e+012
+158 96 1.73088e+012
+462 43 1.73074e+012
+455 85 1.72888e+012
+75 7 1.72839e+012
+457 3 1.72661e+012
+568 40 1.72572e+012
+543 211 1.72242e+012
+190 108 1.72059e+012
+442 239 1.71828e+012
+145 161 1.71785e+012
+197 84 1.70722e+012
+275 52 1.70494e+012
+544 2 1.6977e+012
+222 218 1.69063e+012
+534 20 1.68866e+012
+379 338 1.67762e+012
+501 143 1.67548e+012
+477 204 1.67498e+012
+450 217 1.67414e+012
+487 263 1.67352e+012
+101 360 1.67332e+012
+94 6 1.67321e+012
+405 82 1.67307e+012
+97 448 1.67181e+012
+538 457 1.6709e+012
+29 30 1.66703e+012
+107 28 1.66464e+012
+192 143 1.66225e+012
+535 266 1.65495e+012
+230 127 1.65419e+012
+510 84 1.65285e+012
+69 149 1.65253e+012
+389 65 1.65207e+012
+499 62 1.6515e+012
+61 134 1.64939e+012
+276 353 1.64907e+012
+432 112 1.64595e+012
+392 218 1.64232e+012
+191 278 1.63402e+012
+139 111 1.63277e+012
+422 141 1.63127e+012
+102 164 1.63036e+012
+251 423 1.62706e+012
+263 402 1.62532e+012
+222 112 1.62528e+012
+433 86 1.62103e+012
+574 140 1.61255e+012
+324 146 1.61202e+012
+346 349 1.60711e+012
+414 23 1.60681e+012
+160 166 1.60523e+012
+77 236 1.60102e+012
+530 141 1.59561e+012
+182 137 1.5914e+012
+375 117 1.59051e+012
+578 53 1.58979e+012
+418 85 1.58952e+012
+558 19 1.58825e+012
+509 174 1.58335e+012
+528 360 1.58217e+012
+389 323 1.58049e+012
+190 171 1.57871e+012
+303 169 1.56986e+012
+90 258 1.56455e+012
+250 194 1.56332e+012
+174 187 1.56284e+012
+271 166 1.56102e+012
+526 221 1.56076e+012
+393 21 1.5578e+012
+61 204 1.55699e+012
+564 160 1.55289e+012
+405 339 1.55219e+012
+417 438 1.5495e+012
+435 182 1.54189e+012
+438 391 1.53953e+012
+520 201 1.53798e+012
+277 390 1.53679e+012
+538 138 1.53479e+012
+462 27 1.52969e+012
+363 180 1.52897e+012
+523 122 1.52726e+012
+340 163 1.5272e+012
+227 186 1.5262e+012
+406 198 1.52487e+012
+369 86 1.52463e+012
+485 44 1.52433e+012
+498 225 1.52302e+012
+256 147 1.51866e+012
+344 125 1.51851e+012
+162 277 1.51791e+012
+184 110 1.51491e+012
+380 107 1.51346e+012
+164 206 1.51253e+012
+186 19 1.51053e+012
+575 178 1.50833e+012
+358 219 1.50737e+012
+541 41 1.50664e+012
+160 137 1.50526e+012
+183 399 1.50447e+012
+145 392 1.50261e+012
+275 137 1.50034e+012
+83 476 1.49994e+012
+218 106 1.49758e+012
+492 21 1.4968e+012
+388 16 1.49641e+012
+371 105 1.49542e+012
+260 165 1.49299e+012
+446 8 1.49203e+012
+108 98 1.49076e+012
+134 97 1.48974e+012
+159 239 1.48821e+012
+261 141 1.48752e+012
+506 61 1.48733e+012
+68 476 1.48455e+012
+211 144 1.48398e+012
+63 59 1.48072e+012
+445 123 1.4801e+012
+371 161 1.47962e+012
+102 236 1.4796e+012
+25 221 1.47801e+012
+175 260 1.47665e+012
+157 91 1.47547e+012
+437 305 1.46935e+012
+357 259 1.46145e+012
+445 354 1.45851e+012
+498 459 1.45845e+012
+36 219 1.45665e+012
+91 23 1.45466e+012
+190 360 1.45355e+012
+218 207 1.44853e+012
+188 182 1.44731e+012
+215 125 1.44408e+012
+540 98 1.4426e+012
+114 216 1.44192e+012
+388 21 1.43945e+012
+186 202 1.43125e+012
+208 15 1.42986e+012
+372 69 1.4298e+012
+170 200 1.42774e+012
+579 81 1.42562e+012
+349 144 1.42509e+012
+280 195 1.42473e+012
+536 394 1.42297e+012
+166 107 1.42262e+012
+42 81 1.42175e+012
+404 376 1.41887e+012
+482 375 1.41857e+012
+534 184 1.41407e+012
+438 160 1.41337e+012
+289 345 1.41258e+012
+346 276 1.41185e+012
+266 14 1.40748e+012
+175 19 1.40737e+012
+353 337 1.40718e+012
+299 138 1.40643e+012
+333 296 1.40582e+012
+59 253 1.40487e+012
+378 121 1.4029e+012
+540 124 1.40113e+012
+104 3 1.40101e+012
+346 179 1.3948e+012
+160 181 1.39389e+012
+268 242 1.39389e+012
+66 216 1.39285e+012
+301 205 1.39228e+012
+77 269 1.39159e+012
+210 153 1.39056e+012
+483 329 1.38925e+012
+543 8 1.38671e+012
+145 6 1.38671e+012
+223 433 1.38602e+012
+205 163 1.38395e+012
+265 30 1.3789e+012
+114 1 1.37748e+012
+78 475 1.3765e+012
+112 179 1.37624e+012
+365 336 1.37513e+012
+310 9 1.3732e+012
+185 344 1.37033e+012
+123 263 1.36964e+012
+228 288 1.36767e+012
+377 85 1.36553e+012
+85 1 1.36492e+012
+282 72 1.36481e+012
+57 70 1.36458e+012
+276 331 1.36451e+012
+345 166 1.36405e+012
+191 204 1.36363e+012
+480 165 1.36171e+012
+355 26 1.36027e+012
+21 218 1.3599e+012
+533 61 1.35934e+012
+164 313 1.35873e+012
+449 138 1.35491e+012
+238 134 1.35478e+012
+296 421 1.35169e+012
+175 75 1.35029e+012
+293 297 1.35027e+012
+31 66 1.35016e+012
+50 254 1.34907e+012
+503 164 1.34629e+012
+493 81 1.34463e+012
+95 149 1.34458e+012
+329 10 1.34453e+012
+100 198 1.34449e+012
+206 295 1.3433e+012
+436 124 1.34178e+012
+150 112 1.33855e+012
+95 257 1.33815e+012
+48 10 1.33595e+012
+134 127 1.3347e+012
+373 392 1.33116e+012
+501 263 1.33042e+012
+364 201 1.33013e+012
+544 457 1.32984e+012
+147 397 1.32967e+012
+277 187 1.32933e+012
+165 357 1.32686e+012
+340 264 1.32506e+012
+79 40 1.32341e+012
+181 20 1.32313e+012
+85 61 1.32292e+012
+306 364 1.32117e+012
+195 132 1.31799e+012
+248 314 1.31706e+012
+502 21 1.31644e+012
+527 189 1.31416e+012
+41 26 1.31232e+012
+283 394 1.30996e+012
+54 222 1.30921e+012
+151 229 1.29747e+012
+506 143 1.29724e+012
+512 363 1.29559e+012
+241 57 1.29304e+012
+135 147 1.29233e+012
+269 132 1.28825e+012
+247 402 1.28811e+012
+340 122 1.28796e+012
+126 95 1.28763e+012
+385 244 1.28752e+012
+206 157 1.28652e+012
+120 115 1.28613e+012
+514 119 1.28561e+012
+255 89 1.28548e+012
+517 346 1.28302e+012
+300 264 1.27992e+012
+247 386 1.27953e+012
+168 289 1.27778e+012
+463 101 1.27655e+012
+118 5 1.27433e+012
+52 358 1.27423e+012
+138 58 1.2724e+012
+91 290 1.27204e+012
+296 331 1.27086e+012
+190 137 1.27031e+012
+514 42 1.2701e+012
+357 11 1.26927e+012
+499 80 1.26886e+012
+461 162 1.26838e+012
+445 243 1.26834e+012
+119 128 1.26673e+012
+124 2 1.26589e+012
+37 239 1.2652e+012
+561 146 1.26348e+012
+382 26 1.2622e+012
+86 181 1.25558e+012
+513 298 1.2544e+012
+325 426 1.25311e+012
+209 419 1.25253e+012
+449 166 1.24997e+012
+121 52 1.24989e+012
+289 124 1.24883e+012
+304 189 1.24692e+012
+242 192 1.24444e+012
+527 424 1.24303e+012
+423 261 1.24226e+012
+33 110 1.24195e+012
+556 181 1.23763e+012
+424 62 1.23519e+012
+474 62 1.23432e+012
+106 182 1.23245e+012
+563 323 1.22984e+012
+464 356 1.22928e+012
+426 375 1.22678e+012
+250 35 1.22566e+012
+162 252 1.22556e+012
+35 30 1.22432e+012
+5 64 1.22292e+012
+320 105 1.22199e+012
+61 370 1.21968e+012
+281 438 1.21911e+012
+487 81 1.2191e+012
+542 254 1.21831e+012
+394 355 1.2182e+012
+493 60 1.21712e+012
+354 144 1.21698e+012
+261 249 1.2165e+012
+287 262 1.2165e+012
+145 17 1.21489e+012
+190 328 1.21386e+012
+72 130 1.21311e+012
+218 98 1.21252e+012
+360 368 1.20924e+012
+345 47 1.20921e+012
+292 88 1.2083e+012
+145 1 1.20704e+012
+418 284 1.20612e+012
+412 98 1.20549e+012
+351 11 1.20474e+012
+530 160 1.20401e+012
+147 78 1.20277e+012
+56 145 1.20261e+012
+306 90 1.20142e+012
+524 171 1.19844e+012
+272 145 1.19818e+012
+570 121 1.19441e+012
+42 10 1.19371e+012
+67 253 1.18951e+012
+305 146 1.18677e+012
+541 133 1.18629e+012
+576 127 1.1839e+012
+118 222 1.18365e+012
+331 202 1.18268e+012
+178 272 1.18236e+012
+37 169 1.18198e+012
+297 69 1.18144e+012
+385 88 1.17863e+012
+277 295 1.17737e+012
+423 398 1.17646e+012
+390 242 1.17361e+012
+199 167 1.17094e+012
+42 118 1.17008e+012
+88 369 1.16897e+012
+412 470 1.16716e+012
+327 105 1.16697e+012
+186 97 1.16629e+012
+40 355 1.16594e+012
+228 260 1.16521e+012
+471 202 1.16389e+012
+180 395 1.16286e+012
+30 218 1.1625e+012
+256 249 1.15993e+012
+510 129 1.15981e+012
+264 71 1.15871e+012
+308 31 1.1586e+012
+363 357 1.15758e+012
+358 241 1.15621e+012
+11 204 1.15514e+012
+148 449 1.15479e+012
+60 40 1.15339e+012
+207 203 1.1516e+012
+374 240 1.1515e+012
+259 34 1.15142e+012
+516 16 1.15074e+012
+148 88 1.15044e+012
+347 239 1.14986e+012
+536 94 1.14954e+012
+117 426 1.14771e+012
+125 270 1.14553e+012
+193 312 1.14389e+012
+328 181 1.14229e+012
+148 130 1.14194e+012
+101 28 1.13961e+012
+191 350 1.13952e+012
+388 96 1.13838e+012
+494 456 1.13787e+012
+305 53 1.13733e+012
+166 150 1.13701e+012
+132 237 1.13404e+012
+267 144 1.13373e+012
+354 269 1.13372e+012
+155 57 1.13007e+012
+381 181 1.12999e+012
+49 62 1.12832e+012
+472 23 1.12677e+012
+248 293 1.12673e+012
+26 131 1.12406e+012
+478 403 1.12306e+012
+341 39 1.12246e+012
+349 125 1.12006e+012
+299 296 1.1178e+012
+1 383 1.11675e+012
+126 219 1.11624e+012
+509 179 1.11538e+012
+448 127 1.1153e+012
+449 24 1.11474e+012
+116 169 1.11383e+012
+115 131 1.11147e+012
+201 88 1.11102e+012
+23 201 1.11099e+012
+298 398 1.10968e+012
+128 127 1.10862e+012
+538 406 1.10795e+012
+153 131 1.10713e+012
+355 254 1.1062e+012
+264 389 1.10559e+012
+306 194 1.10508e+012
+139 99 1.10419e+012
+534 79 1.10261e+012
+302 160 1.10209e+012
+325 341 1.09892e+012
+12 81 1.09832e+012
+189 2 1.09684e+012
+319 386 1.09606e+012
+210 35 1.09581e+012
+408 26 1.09379e+012
+269 58 1.09188e+012
+163 201 1.08227e+012
+196 111 1.082e+012
+429 44 1.08065e+012
+345 297 1.07835e+012
+374 76 1.07822e+012
+118 77 1.0776e+012
+270 91 1.07718e+012
+572 405 1.07498e+012
+477 341 1.07419e+012
+130 428 1.07279e+012
+223 87 1.07246e+012
+96 423 1.07184e+012
+271 108 1.07177e+012
+400 144 1.07081e+012
+4 154 1.0705e+012
+277 110 1.06999e+012
+220 212 1.06821e+012
+185 308 1.06762e+012
+286 220 1.0674e+012
+80 195 1.06497e+012
+523 79 1.06441e+012
+370 300 1.0632e+012
+506 361 1.06268e+012
+445 118 1.06138e+012
+362 407 1.05895e+012
+107 429 1.05857e+012
+38 270 1.0575e+012
+540 182 1.05559e+012
+335 369 1.05425e+012
+573 330 1.05269e+012
+113 211 1.05219e+012
+451 6 1.05105e+012
+242 367 1.05048e+012
+408 102 1.04992e+012
+60 109 1.04992e+012
+401 166 1.04951e+012
+490 183 1.04769e+012
+452 103 1.04638e+012
+437 240 1.04597e+012
+545 248 1.04417e+012
+95 197 1.04378e+012
+310 446 1.04287e+012
+130 168 1.04251e+012
+449 84 1.04241e+012
+118 95 1.04191e+012
+136 182 1.04117e+012
+321 121 1.04052e+012
+217 280 1.03846e+012
+273 316 1.03804e+012
+468 42 1.03787e+012
+57 365 1.03623e+012
+416 298 1.03547e+012
+129 112 1.03457e+012
+73 96 1.03444e+012
+592 19 1.03399e+012
+90 376 1.0324e+012
+352 163 1.03189e+012
+227 123 1.03101e+012
+237 417 1.03088e+012
+277 204 1.03077e+012
+328 64 1.02801e+012
+557 463 1.02763e+012
+407 430 1.02657e+012
+360 160 1.02628e+012
+259 107 1.02624e+012
+66 372 1.02568e+012
+552 78 1.02537e+012
+196 90 1.02344e+012
+550 57 1.02331e+012
+66 276 1.02196e+012
+432 225 1.02051e+012
+451 438 1.01909e+012
+241 420 1.01689e+012
+578 43 1.01667e+012
+108 146 1.01645e+012
+535 121 1.014e+012
+308 353 1.01387e+012
+13 114 1.01324e+012
+586 17 1.00751e+012
+191 211 1.00694e+012
+462 142 1.00682e+012
+399 182 1.00587e+012
+296 260 1.00541e+012
+514 262 1.00318e+012
+542 262 1.00288e+012
+363 65 1.00199e+012
+301 133 1.00157e+012
+434 92 1.00059e+012
+340 392 1.00047e+012
+178 57 9.98715e+011
+192 17 9.98218e+011
+325 15 9.95686e+011
+294 146 9.90898e+011
+72 373 9.88743e+011
+480 451 9.88459e+011
+213 163 9.88275e+011
+110 326 9.87584e+011
+150 151 9.87571e+011
+52 42 9.87519e+011
+57 100 9.86553e+011
+165 178 9.85257e+011
+222 153 9.8484e+011
+459 340 9.83743e+011
+229 14 9.82995e+011
+46 355 9.82591e+011
+333 241 9.81458e+011
+334 391 9.8142e+011
+413 82 9.80195e+011
+184 132 9.7794e+011
+483 288 9.75967e+011
+484 121 9.74275e+011
+343 463 9.73684e+011
+9 46 9.71138e+011
+196 190 9.69982e+011
+339 473 9.68675e+011
+562 272 9.6409e+011
+402 104 9.63476e+011
+434 379 9.62618e+011
+437 280 9.60483e+011
+390 135 9.60398e+011
+333 335 9.59896e+011
+455 162 9.59391e+011
+204 127 9.57697e+011
+111 263 9.56816e+011
+291 335 9.55522e+011
+463 224 9.50922e+011
+360 448 9.49746e+011
+249 260 9.48393e+011
+100 257 9.46487e+011
+434 45 9.42447e+011
+382 146 9.40345e+011
+121 57 9.40223e+011
+239 219 9.40211e+011
+375 5 9.39626e+011
+542 93 9.39202e+011
+345 391 9.38971e+011
+381 413 9.36354e+011
+65 211 9.36252e+011
+480 440 9.36023e+011
+91 79 9.35607e+011
+338 427 9.35238e+011
+91 60 9.34929e+011
+375 299 9.34901e+011
+559 243 9.3475e+011
+201 109 9.3434e+011
+250 164 9.3381e+011
+62 148 9.32934e+011
+448 444 9.32413e+011
+371 338 9.32253e+011
+182 121 9.31931e+011
+58 170 9.30539e+011
+148 21 9.29594e+011
+217 352 9.28568e+011
+226 91 9.28448e+011
+93 93 9.26889e+011
+42 308 9.26681e+011
+253 182 9.26236e+011
+187 313 9.25025e+011
+293 164 9.24918e+011
+502 43 9.24356e+011
+113 94 9.22032e+011
+216 174 9.21305e+011
+283 124 9.1898e+011
+177 122 9.16411e+011
+547 139 9.15958e+011
+455 58 9.15051e+011
+52 4 9.13321e+011
+161 152 9.10209e+011
+136 136 9.0665e+011
+43 473 9.04293e+011
+130 306 9.03378e+011
+330 213 9.03351e+011
+218 290 9.03279e+011
+86 364 9.03118e+011
+514 380 9.02377e+011
+332 355 9.01988e+011
+138 311 9.00924e+011
+315 238 8.99511e+011
+10 32 8.99502e+011
+573 421 8.99131e+011
+306 359 8.9823e+011
+529 177 8.98003e+011
+190 132 8.96583e+011
+232 150 8.95981e+011
+97 363 8.95573e+011
+284 240 8.94297e+011
+211 135 8.93794e+011
+201 345 8.92512e+011
+526 383 8.92233e+011
+72 166 8.92186e+011
+55 62 8.91859e+011
+450 198 8.91228e+011
+555 303 8.91016e+011
+195 75 8.90795e+011
+270 103 8.90595e+011
+302 243 8.87982e+011
+65 6 8.86464e+011
+173 119 8.86354e+011
+360 362 8.84177e+011
+87 311 8.83799e+011
+222 125 8.83769e+011
+408 143 8.82829e+011
+227 72 8.81266e+011
+110 110 8.79489e+011
+377 128 8.78058e+011
+390 204 8.77923e+011
+112 174 8.77873e+011
+400 199 8.76134e+011
+91 276 8.76022e+011
+30 256 8.7555e+011
+281 33 8.75058e+011
+245 213 8.74855e+011
+390 335 8.73758e+011
+196 146 8.73545e+011
+433 277 8.72554e+011
+194 165 8.69737e+011
+391 118 8.692e+011
+169 182 8.69169e+011
+290 311 8.68704e+011
+402 220 8.68135e+011
+214 451 8.67715e+011
+258 368 8.6746e+011
+259 328 8.66575e+011
+333 415 8.66057e+011
+41 182 8.6556e+011
+386 282 8.6314e+011
+77 129 8.62934e+011
+569 382 8.61697e+011
+178 183 8.59661e+011
+450 416 8.58991e+011
+37 202 8.57651e+011
+224 51 8.55069e+011
+120 447 8.53083e+011
+84 215 8.52086e+011
+47 162 8.51876e+011
+452 62 8.51812e+011
+479 11 8.51399e+011
+290 183 8.50612e+011
+442 97 8.50447e+011
+269 416 8.50237e+011
+310 265 8.48894e+011
+222 102 8.48657e+011
+335 218 8.47922e+011
+180 201 8.46434e+011
+412 416 8.4591e+011
+484 142 8.456e+011
+323 29 8.45388e+011
+89 340 8.45131e+011
+44 339 8.41545e+011
+522 426 8.41542e+011
+444 452 8.41237e+011
+453 119 8.39488e+011
+489 118 8.38325e+011
+200 30 8.37771e+011
+495 100 8.34601e+011
+104 306 8.34265e+011
+495 474 8.33173e+011
+188 301 8.33083e+011
+445 204 8.32292e+011
+218 423 8.32239e+011
+181 312 8.30077e+011
+72 187 8.2849e+011
+345 140 8.28035e+011
+461 121 8.27796e+011
+500 102 8.27158e+011
+179 344 8.26442e+011
+96 22 8.25945e+011
+536 260 8.23957e+011
+354 15 8.23414e+011
+490 340 8.22894e+011
+390 130 8.21202e+011
+532 344 8.20519e+011
+524 399 8.19817e+011
+250 154 8.19614e+011
+119 110 8.19233e+011
+464 115 8.19028e+011
+155 299 8.18212e+011
+166 363 8.179e+011
+157 171 8.16739e+011
+370 465 8.16502e+011
+264 309 8.14549e+011
+416 244 8.14019e+011
+425 201 8.13829e+011
+529 270 8.11675e+011
+355 105 8.11249e+011
+407 14 8.11185e+011
+151 94 8.09772e+011
+147 196 8.08814e+011
+580 343 8.08338e+011
+563 71 8.07455e+011
+558 79 8.06784e+011
+385 258 8.06502e+011
+334 10 8.06055e+011
+318 30 8.05552e+011
+566 145 8.05333e+011
+158 310 8.05022e+011
+88 207 8.04597e+011
+359 50 8.04321e+011
+336 443 8.02654e+011
+411 263 8.02392e+011
+516 162 7.99823e+011
+375 463 7.9748e+011
+111 358 7.97027e+011
+125 306 7.96944e+011
+106 257 7.96674e+011
+572 451 7.96241e+011
+204 394 7.96037e+011
+119 161 7.95829e+011
+357 282 7.95397e+011
+352 426 7.95246e+011
+576 134 7.94946e+011
+111 338 7.94814e+011
+348 87 7.93797e+011
+48 236 7.93139e+011
+562 462 7.91206e+011
+93 387 7.88296e+011
+121 180 7.87606e+011
+555 201 7.87216e+011
+388 419 7.85637e+011
+160 61 7.85037e+011
+421 290 7.82787e+011
+85 38 7.82627e+011
+69 338 7.82345e+011
+468 208 7.81719e+011
+245 180 7.80928e+011
+56 303 7.80846e+011
+247 107 7.80379e+011
+185 167 7.80077e+011
+50 167 7.79827e+011
+299 256 7.78799e+011
+213 94 7.78561e+011
+72 408 7.78136e+011
+470 117 7.7733e+011
+183 381 7.75872e+011
+357 66 7.75581e+011
+158 258 7.75503e+011
+479 44 7.73369e+011
+178 329 7.72524e+011
+397 46 7.72317e+011
+163 118 7.71212e+011
+592 105 7.71092e+011
+149 40 7.70991e+011
+279 164 7.70369e+011
+566 18 7.68188e+011
+300 444 7.67004e+011
+345 200 7.64697e+011
+298 88 7.64197e+011
+435 62 7.63298e+011
+291 139 7.62616e+011
+543 440 7.62509e+011
+248 326 7.62397e+011
+401 271 7.62361e+011
+282 418 7.61567e+011
+174 291 7.61193e+011
+268 219 7.61163e+011
+426 103 7.60733e+011
+163 34 7.5845e+011
+172 416 7.58106e+011
+455 360 7.57999e+011
+247 418 7.57736e+011
+511 134 7.57313e+011
+329 322 7.57283e+011
+164 350 7.55651e+011
+219 314 7.5475e+011
+311 221 7.54572e+011
+329 25 7.53971e+011
+135 322 7.53844e+011
+369 92 7.53549e+011
+84 110 7.51289e+011
+353 297 7.51172e+011
+343 260 7.50061e+011
+584 140 7.48737e+011
+248 346 7.48518e+011
+8 114 7.48058e+011
+318 187 7.47427e+011
+64 424 7.46445e+011
+332 29 7.43873e+011
+346 372 7.43665e+011
+204 418 7.43062e+011
+105 201 7.42601e+011
+528 30 7.42138e+011
+18 342 7.4175e+011
+3 234 7.41686e+011
+223 239 7.41493e+011
+189 290 7.40751e+011
+391 53 7.40733e+011
+153 192 7.34121e+011
+366 245 7.34078e+011
+277 210 7.33183e+011
+81 101 7.32775e+011
+74 61 7.32008e+011
+132 394 7.31592e+011
+173 148 7.30408e+011
+186 376 7.2934e+011
+325 133 7.2804e+011
+573 57 7.27747e+011
+116 58 7.26112e+011
+345 333 7.25944e+011
+43 408 7.24471e+011
+583 39 7.24076e+011
+400 427 7.2376e+011
+91 285 7.23065e+011
+76 110 7.20989e+011
+287 442 7.20558e+011
+22 48 7.2051e+011
+376 224 7.20378e+011
+579 140 7.18158e+011
+52 451 7.15572e+011
+165 308 7.15399e+011
+505 380 7.12884e+011
+497 282 7.12101e+011
+7 16 7.11726e+011
+289 118 7.1171e+011
+296 200 7.11182e+011
+427 142 7.09743e+011
+12 421 7.09176e+011
+66 306 7.06967e+011
+520 165 7.06181e+011
+343 312 7.06104e+011
+143 177 7.0521e+011
+335 437 7.05097e+011
+342 196 7.04332e+011
+450 324 7.04252e+011
+541 381 7.03656e+011
+122 82 7.0171e+011
+318 99 7.01256e+011
+420 363 6.99772e+011
+566 180 6.98935e+011
+529 397 6.9873e+011
+183 237 6.98532e+011
+508 254 6.97155e+011
+212 424 6.97014e+011
+11 76 6.96949e+011
+122 169 6.96345e+011
+525 277 6.95941e+011
+430 81 6.95658e+011
+95 39 6.94379e+011
+260 274 6.93288e+011
+260 457 6.92431e+011
+158 101 6.91984e+011
+27 118 6.88585e+011
+479 283 6.88479e+011
+204 256 6.88366e+011
+150 301 6.87199e+011
+518 142 6.86956e+011
+110 76 6.86535e+011
+507 42 6.84607e+011
+55 333 6.84427e+011
+272 207 6.82804e+011
+84 95 6.818e+011
+455 141 6.80495e+011
+449 285 6.7675e+011
+65 11 6.76736e+011
+276 320 6.76234e+011
+424 174 6.7537e+011
+580 216 6.75259e+011
+44 253 6.74063e+011
+502 122 6.73839e+011
+421 297 6.73474e+011
+144 142 6.73392e+011
+292 51 6.73322e+011
+9 233 6.72321e+011
+117 290 6.71782e+011
+440 379 6.70796e+011
+173 343 6.7072e+011
+532 173 6.70233e+011
+379 453 6.69455e+011
+264 259 6.69305e+011
+116 182 6.69161e+011
+202 144 6.6857e+011
+155 316 6.67773e+011
+38 113 6.67726e+011
+248 184 6.67725e+011
+322 11 6.67674e+011
+245 257 6.67463e+011
+478 125 6.66918e+011
+192 186 6.6563e+011
+302 408 6.64831e+011
+545 82 6.64234e+011
+233 31 6.63532e+011
+4 164 6.6329e+011
+471 212 6.63288e+011
+17 434 6.6293e+011
+466 5 6.6242e+011
+323 186 6.61277e+011
+409 108 6.60145e+011
+520 97 6.59083e+011
+115 277 6.59082e+011
+346 117 6.58809e+011
+385 356 6.57936e+011
+125 327 6.57469e+011
+501 420 6.57193e+011
+244 103 6.56916e+011
+438 469 6.55835e+011
+538 222 6.55294e+011
+498 342 6.55253e+011
+394 104 6.54193e+011
+355 449 6.52333e+011
+433 155 6.52135e+011
+336 144 6.51524e+011
+188 265 6.51287e+011
+330 136 6.5034e+011
+276 124 6.50204e+011
+430 62 6.50129e+011
+600 365 6.49877e+011
+140 239 6.49751e+011
+401 126 6.49116e+011
+296 269 6.48798e+011
+68 419 6.47763e+011
+99 96 6.47734e+011
+560 266 6.47203e+011
+66 203 6.46724e+011
+449 176 6.46541e+011
+263 284 6.45479e+011
+126 132 6.4544e+011
+121 147 6.44445e+011
+572 446 6.43828e+011
+243 134 6.42738e+011
+44 88 6.42682e+011
+232 133 6.4257e+011
+262 397 6.42027e+011
+154 445 6.41703e+011
+547 281 6.39215e+011
+208 405 6.39195e+011
+121 216 6.38846e+011
+147 136 6.38279e+011
+330 218 6.38247e+011
+163 431 6.37963e+011
+214 400 6.37703e+011
+125 341 6.3706e+011
+512 113 6.37055e+011
+318 202 6.36391e+011
+400 27 6.36332e+011
+533 339 6.36259e+011
+315 9 6.35942e+011
+418 448 6.35889e+011
+576 166 6.35758e+011
+419 412 6.33502e+011
+191 239 6.31775e+011
+522 361 6.31534e+011
+402 44 6.30888e+011
+184 116 6.3011e+011
+419 95 6.29356e+011
+83 170 6.28493e+011
+468 100 6.27374e+011
+329 99 6.26943e+011
+51 229 6.25718e+011
+264 304 6.24659e+011
+26 44 6.23398e+011
+64 313 6.21569e+011
+546 340 6.21091e+011
+101 296 6.20832e+011
+231 364 6.20643e+011
+48 407 6.19532e+011
+50 375 6.19291e+011
+375 156 6.18712e+011
+170 124 6.18541e+011
+242 281 6.18269e+011
+209 125 6.16495e+011
+130 411 6.1444e+011
+200 391 6.14308e+011
+88 389 6.13262e+011
+278 88 6.12629e+011
+85 239 6.12271e+011
+433 295 6.12134e+011
+377 145 6.11743e+011
+414 222 6.11701e+011
+266 20 6.10636e+011
+130 477 6.10457e+011
+402 6 6.10275e+011
+240 147 6.09918e+011
+32 45 6.09421e+011
+117 306 6.09384e+011
+337 29 6.07232e+011
+311 299 6.06395e+011
+508 441 6.0628e+011
+114 163 6.052e+011
+85 234 6.05078e+011
+349 448 6.04947e+011
+190 255 6.04703e+011
+170 451 6.0419e+011
+481 456 6.03738e+011
+20 286 6.03682e+011
+483 241 6.02539e+011
+515 325 6.02486e+011
+242 108 6.01689e+011
+20 317 6.00533e+011
+315 127 6.00014e+011
+336 49 5.99934e+011
+389 450 5.99908e+011
+199 327 5.98548e+011
+130 374 5.98163e+011
+281 261 5.98151e+011
+391 89 5.9808e+011
+166 380 5.97985e+011
+81 406 5.9776e+011
+406 96 5.97642e+011
+198 198 5.9755e+011
+413 144 5.97243e+011
+41 287 5.96885e+011
+254 191 5.96778e+011
+368 30 5.96704e+011
+195 344 5.96147e+011
+377 101 5.95937e+011
+124 412 5.9516e+011
+337 259 5.94721e+011
+478 143 5.94545e+011
+142 429 5.94445e+011
+510 376 5.91282e+011
+256 157 5.91175e+011
+586 346 5.91088e+011
+364 443 5.90286e+011
+63 287 5.89857e+011
+373 150 5.89344e+011
+473 102 5.89152e+011
+428 163 5.88866e+011
+186 349 5.88442e+011
+131 187 5.88139e+011
+117 263 5.88075e+011
+258 133 5.87799e+011
+205 399 5.85725e+011
+440 83 5.85218e+011
+239 243 5.84767e+011
+114 252 5.84553e+011
+47 203 5.84116e+011
+579 245 5.84085e+011
+59 164 5.83997e+011
+575 459 5.83865e+011
+102 338 5.83437e+011
+277 426 5.8179e+011
+207 91 5.81295e+011
+94 367 5.81243e+011
+232 155 5.80536e+011
+282 215 5.80053e+011
+81 375 5.79675e+011
+579 309 5.79674e+011
+181 155 5.79629e+011
+112 307 5.78574e+011
+141 117 5.78296e+011
+157 225 5.77135e+011
+213 204 5.76443e+011
+34 164 5.76336e+011
+337 64 5.75397e+011
+174 130 5.75212e+011
+185 72 5.73761e+011
+194 292 5.73513e+011
+382 47 5.72885e+011
+552 19 5.72476e+011
+585 309 5.72427e+011
+193 307 5.71866e+011
+25 255 5.7144e+011
+17 237 5.70701e+011
+195 254 5.70214e+011
+1 10 5.68308e+011
+304 332 5.67801e+011
+374 451 5.66772e+011
+518 83 5.64265e+011
+217 169 5.63759e+011
+442 320 5.63307e+011
+397 120 5.63294e+011
+283 84 5.62557e+011
+100 426 5.62344e+011
+11 478 5.62084e+011
+434 25 5.61926e+011
+512 210 5.60228e+011
+218 237 5.59823e+011
+289 199 5.59263e+011
+413 284 5.58592e+011
+567 201 5.58061e+011
+94 124 5.57719e+011
+472 82 5.57486e+011
+62 441 5.57365e+011
+330 286 5.56e+011
+447 132 5.55207e+011
+226 202 5.55133e+011
+357 249 5.53574e+011
+92 320 5.52935e+011
+63 365 5.52813e+011
+389 2 5.52338e+011
+475 451 5.5224e+011
+407 77 5.51566e+011
+462 183 5.51368e+011
+394 182 5.50266e+011
+142 284 5.50209e+011
+485 202 5.48842e+011
+509 283 5.48645e+011
+512 50 5.48245e+011
+35 337 5.46865e+011
+37 292 5.46476e+011
+175 142 5.46379e+011
+190 71 5.4521e+011
+297 130 5.45099e+011
+54 234 5.44598e+011
+9 69 5.44573e+011
+89 354 5.44515e+011
+562 39 5.44214e+011
+4 32 5.43681e+011
+365 165 5.43118e+011
+49 335 5.41065e+011
+587 161 5.40655e+011
+548 265 5.40234e+011
+205 33 5.38327e+011
+202 366 5.37681e+011
+306 259 5.37489e+011
+283 332 5.37488e+011
+328 51 5.36961e+011
+159 176 5.36097e+011
+206 38 5.36024e+011
+527 437 5.34945e+011
+202 404 5.34853e+011
+550 302 5.34754e+011
+138 317 5.34577e+011
+185 161 5.33413e+011
+301 66 5.33265e+011
+568 324 5.32144e+011
+519 242 5.32042e+011
+563 154 5.31051e+011
+147 191 5.30532e+011
+497 242 5.3034e+011
+461 304 5.29541e+011
+515 400 5.2884e+011
+1 378 5.27146e+011
+33 37 5.25563e+011
+209 317 5.25438e+011
+266 186 5.24756e+011
+376 281 5.24491e+011
+541 244 5.24079e+011
+180 292 5.23719e+011
+114 205 5.22784e+011
+436 464 5.22693e+011
+531 112 5.22405e+011
+352 365 5.22067e+011
+226 162 5.21597e+011
+77 165 5.205e+011
+264 89 5.19542e+011
+207 236 5.18614e+011
+48 422 5.17061e+011
+268 119 5.16543e+011
+63 44 5.1651e+011
+458 115 5.1605e+011
+469 163 5.15371e+011
+286 246 5.14148e+011
+488 301 5.1401e+011
+191 420 5.13626e+011
+470 433 5.13426e+011
+475 380 5.13059e+011
+101 185 5.13021e+011
+152 215 5.12772e+011
+181 259 5.12488e+011
+147 255 5.1238e+011
+5 198 5.11144e+011
+18 274 5.10364e+011
+263 453 5.10088e+011
+199 96 5.09863e+011
+571 239 5.09636e+011
+273 176 5.09355e+011
+292 110 5.09228e+011
+439 454 5.08425e+011
+308 164 5.07683e+011
+272 253 5.07588e+011
+159 434 5.07512e+011
+432 270 5.06105e+011
+444 341 5.05143e+011
+136 187 5.05131e+011
+279 237 5.03778e+011
+567 271 5.03012e+011
+133 64 5.01691e+011
+437 228 5.01602e+011
+105 227 5.01484e+011
+324 351 5.00332e+011
+230 332 4.99793e+011
+449 90 4.99613e+011
+383 449 4.9917e+011
+30 79 4.97518e+011
+223 384 4.96719e+011
+567 248 4.96653e+011
+451 181 4.95874e+011
+291 439 4.9585e+011
+89 113 4.95845e+011
+255 406 4.9546e+011
+253 435 4.94853e+011
+493 469 4.94323e+011
+126 237 4.94313e+011
+541 177 4.9422e+011
+39 314 4.9411e+011
+467 109 4.94071e+011
+27 188 4.93341e+011
+463 84 4.93203e+011
+29 169 4.92833e+011
+474 162 4.92803e+011
+20 119 4.91807e+011
+144 41 4.91496e+011
+174 326 4.91017e+011
+485 235 4.90402e+011
+281 78 4.89196e+011
+198 466 4.89001e+011
+84 357 4.88921e+011
+69 377 4.88566e+011
+148 326 4.88565e+011
+250 246 4.88147e+011
+108 161 4.87901e+011
+343 29 4.87386e+011
+112 427 4.87292e+011
+75 199 4.86737e+011
+200 8 4.86439e+011
+399 93 4.8595e+011
+307 129 4.85601e+011
+226 364 4.85376e+011
+188 260 4.83482e+011
+313 423 4.8277e+011
+552 119 4.82647e+011
+403 115 4.82646e+011
+281 312 4.82088e+011
+54 352 4.8156e+011
+296 439 4.8078e+011
+349 106 4.7818e+011
+146 235 4.78171e+011
+580 327 4.77975e+011
+219 398 4.77967e+011
+157 23 4.77749e+011
+399 297 4.77737e+011
+221 165 4.77489e+011
+264 109 4.7734e+011
+483 221 4.7732e+011
+292 373 4.76935e+011
+178 220 4.76806e+011
+71 389 4.76599e+011
+213 326 4.76556e+011
+574 8 4.76403e+011
+238 294 4.7568e+011
+98 457 4.75037e+011
+468 301 4.7406e+011
+27 438 4.73575e+011
+446 437 4.73381e+011
+232 270 4.72626e+011
+174 378 4.72469e+011
+268 137 4.72081e+011
+95 282 4.71818e+011
+335 280 4.71738e+011
+186 321 4.70899e+011
+471 269 4.70581e+011
+146 343 4.70523e+011
+154 161 4.70518e+011
+205 28 4.70341e+011
+509 244 4.7007e+011
+268 192 4.69705e+011
+565 239 4.69254e+011
+343 307 4.69253e+011
+303 252 4.68255e+011
+385 118 4.67776e+011
+582 203 4.67535e+011
+29 40 4.67312e+011
+276 78 4.67142e+011
+258 347 4.66501e+011
+135 165 4.66137e+011
+41 440 4.66087e+011
+484 155 4.65307e+011
+36 76 4.65043e+011
+89 29 4.64642e+011
+284 184 4.62616e+011
+318 426 4.61258e+011
+493 225 4.61249e+011
+206 75 4.60987e+011
+505 403 4.60267e+011
+86 244 4.59448e+011
+154 186 4.59384e+011
+221 326 4.58848e+011
+169 3 4.58529e+011
+373 414 4.57867e+011
+231 193 4.57804e+011
+142 253 4.57543e+011
+431 374 4.57258e+011
+235 403 4.56607e+011
+409 279 4.55313e+011
+298 97 4.55227e+011
+248 392 4.55118e+011
+535 178 4.54989e+011
+377 468 4.53957e+011
+167 187 4.53869e+011
+104 262 4.53349e+011
+477 221 4.53143e+011
+318 461 4.52902e+011
+424 25 4.52829e+011
+72 413 4.52261e+011
+293 398 4.50433e+011
+233 275 4.504e+011
+327 58 4.49999e+011
+22 26 4.49654e+011
+426 112 4.49592e+011
+512 370 4.48164e+011
+395 201 4.47565e+011
+296 311 4.47048e+011
+152 255 4.46898e+011
+466 377 4.46701e+011
+16 150 4.4612e+011
+120 341 4.4573e+011
+350 273 4.4481e+011
+426 472 4.44518e+011
+563 79 4.42647e+011
+217 357 4.4228e+011
+574 100 4.40965e+011
+179 266 4.40613e+011
+480 130 4.40526e+011
+94 113 4.40483e+011
+373 46 4.40246e+011
+105 391 4.40028e+011
+500 181 4.39886e+011
+183 56 4.38885e+011
+400 132 4.37533e+011
+456 182 4.37387e+011
+524 241 4.37089e+011
+305 298 4.36976e+011
+243 433 4.36774e+011
+344 321 4.3634e+011
+516 303 4.36162e+011
+556 366 4.35248e+011
+123 175 4.35109e+011
+144 378 4.34947e+011
+488 133 4.341e+011
+165 413 4.33171e+011
+210 443 4.33039e+011
+117 90 4.32687e+011
+68 358 4.32656e+011
+207 260 4.3253e+011
+253 253 4.31938e+011
+68 404 4.31132e+011
+284 90 4.31013e+011
+211 395 4.30068e+011
+469 356 4.29917e+011
+597 59 4.28657e+011
+34 401 4.28602e+011
+442 44 4.28315e+011
+458 64 4.27711e+011
+319 234 4.26406e+011
+97 338 4.26248e+011
+468 318 4.26232e+011
+437 140 4.25202e+011
+132 121 4.24499e+011
+263 244 4.23883e+011
+154 431 4.23421e+011
+425 411 4.23284e+011
+37 470 4.23047e+011
+23 236 4.213e+011
+17 246 4.21198e+011
+428 280 4.20741e+011
+470 452 4.20106e+011
+179 287 4.18612e+011
+35 389 4.18546e+011
+395 130 4.18083e+011
+42 275 4.17609e+011
+83 115 4.15792e+011
+334 162 4.15636e+011
+361 89 4.15499e+011
+334 465 4.14892e+011
+407 6 4.14796e+011
+457 240 4.14591e+011
+310 183 4.14311e+011
+480 473 4.14231e+011
+481 101 4.13905e+011
+247 428 4.13504e+011
+577 90 4.13421e+011
+232 113 4.13236e+011
+50 456 4.12808e+011
+420 201 4.12413e+011
+506 156 4.12348e+011
+73 154 4.12214e+011
+160 354 4.12198e+011
+116 258 4.11687e+011
+246 149 4.11487e+011
+474 280 4.11464e+011
+122 23 4.11422e+011
+396 87 4.10826e+011
+157 39 4.09917e+011
+299 282 4.09568e+011
+243 30 4.08237e+011
+198 363 4.07891e+011
+14 46 4.07679e+011
+60 176 4.07355e+011
+95 408 4.06772e+011
+247 53 4.06536e+011
+61 453 4.06171e+011
+574 363 4.0617e+011
+439 108 4.05918e+011
+553 276 4.05407e+011
+82 164 4.04595e+011
+566 358 4.04404e+011
+155 153 4.03103e+011
+332 208 4.03037e+011
+199 240 4.02996e+011
+311 136 4.02763e+011
+513 106 4.02727e+011
+238 33 4.02644e+011
+354 87 4.01644e+011
+595 33 4.01327e+011
+148 145 4.01039e+011
+511 288 4.00161e+011
+498 320 3.99814e+011
+188 285 3.99266e+011
+467 183 3.99053e+011
+602 276 3.98583e+011
+531 384 3.9834e+011
+323 96 3.9828e+011
+134 253 3.97888e+011
+77 115 3.97567e+011
+313 441 3.97029e+011
+5 134 3.96853e+011
+196 431 3.96453e+011
+206 370 3.96413e+011
+212 217 3.96346e+011
+305 238 3.95567e+011
+113 245 3.95223e+011
+129 398 3.95188e+011
+95 357 3.95141e+011
+391 408 3.94989e+011
+367 449 3.93822e+011
+413 433 3.93607e+011
+341 241 3.9351e+011
+230 50 3.93468e+011
+307 431 3.9295e+011
+606 122 3.92434e+011
+544 275 3.91626e+011
+255 206 3.9159e+011
+311 101 3.90929e+011
+220 389 3.90722e+011
+285 257 3.906e+011
+119 240 3.89693e+011
+446 186 3.89489e+011
+184 272 3.88955e+011
+344 187 3.88756e+011
+564 118 3.88621e+011
+378 260 3.88541e+011
+373 201 3.87936e+011
+243 357 3.87756e+011
+61 339 3.87733e+011
+140 355 3.87402e+011
+553 140 3.87375e+011
+466 213 3.8735e+011
+146 415 3.86677e+011
+497 305 3.85766e+011
+11 138 3.85293e+011
+127 407 3.85195e+011
+370 316 3.85114e+011
+21 439 3.84961e+011
+169 433 3.83546e+011
+70 199 3.82956e+011
+521 92 3.82457e+011
+436 458 3.82339e+011
+36 255 3.82333e+011
+505 104 3.81649e+011
+418 376 3.81594e+011
+330 329 3.80737e+011
+6 300 3.80264e+011
+247 277 3.79725e+011
+365 118 3.7895e+011
+208 326 3.78563e+011
+558 160 3.77636e+011
+455 177 3.76616e+011
+294 444 3.7645e+011
+285 338 3.76408e+011
+23 184 3.76259e+011
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_5_3.txt b/test_data/harriscorners/hc_msc_5.00_0.04_5_3.txt
new file mode 100644
index 0000000..d19ce5d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_5_3.txt
@@ -0,0 +1,1246 @@
+1245
+499 1 8.85626e+015
+245 94 7.79632e+015
+274 366 7.4044e+015
+363 401 6.2812e+015
+449 298 5.84133e+015
+282 115 5.33863e+015
+122 44 5.01352e+015
+553 41 4.97071e+015
+421 182 4.9305e+015
+388 178 4.57141e+015
+240 90 4.55083e+015
+507 122 4.49498e+015
+456 281 4.45432e+015
+426 320 4.41292e+015
+251 13 4.34456e+015
+447 397 4.34141e+015
+200 18 4.25439e+015
+34 138 4.25086e+015
+237 19 4.22823e+015
+535 242 4.21206e+015
+213 72 3.98506e+015
+2 47 3.96422e+015
+543 364 3.95454e+015
+448 263 3.91894e+015
+221 16 3.85601e+015
+82 27 3.8559e+015
+321 313 3.80093e+015
+65 343 3.76516e+015
+435 68 3.72402e+015
+256 386 3.66951e+015
+135 215 3.64225e+015
+223 38 3.64116e+015
+299 52 3.63192e+015
+196 57 3.63102e+015
+344 10 3.52405e+015
+480 298 3.49708e+015
+131 36 3.48345e+015
+110 238 3.48133e+015
+45 27 3.37399e+015
+144 309 3.32802e+015
+520 61 3.28465e+015
+320 223 3.25035e+015
+124 198 3.2467e+015
+303 183 3.20581e+015
+385 221 3.20356e+015
+471 240 3.17227e+015
+183 401 3.14552e+015
+484 23 3.08465e+015
+412 256 3.08445e+015
+412 162 3.0289e+015
+79 2 3.01929e+015
+348 179 3.01849e+015
+28 8 3.01516e+015
+173 312 2.99728e+015
+242 203 2.9477e+015
+92 214 2.93427e+015
+407 64 2.92892e+015
+159 143 2.88926e+015
+329 127 2.86907e+015
+246 143 2.86032e+015
+271 166 2.85994e+015
+508 18 2.84962e+015
+525 60 2.80629e+015
+130 2 2.79342e+015
+77 256 2.78079e+015
+364 297 2.75834e+015
+465 394 2.73603e+015
+184 35 2.72846e+015
+91 198 2.71993e+015
+264 440 2.68626e+015
+125 255 2.68051e+015
+37 61 2.6707e+015
+390 58 2.66331e+015
+59 219 2.64803e+015
+515 77 2.61714e+015
+361 131 2.61004e+015
+286 296 2.59294e+015
+116 43 2.59176e+015
+64 235 2.58552e+015
+387 294 2.57846e+015
+102 4 2.57318e+015
+312 149 2.55286e+015
+174 238 2.47139e+015
+261 297 2.45723e+015
+359 294 2.45568e+015
+510 172 2.45154e+015
+482 365 2.44817e+015
+308 372 2.43899e+015
+483 339 2.42585e+015
+360 336 2.42068e+015
+253 138 2.40141e+015
+101 78 2.39868e+015
+387 10 2.37175e+015
+125 363 2.36895e+015
+474 262 2.33713e+015
+127 76 2.33553e+015
+101 59 2.32711e+015
+426 119 2.32414e+015
+66 320 2.31873e+015
+225 221 2.31005e+015
+224 419 2.30238e+015
+228 292 2.29973e+015
+417 7 2.28259e+015
+449 219 2.28178e+015
+239 349 2.2748e+015
+355 220 2.27038e+015
+419 440 2.24988e+015
+170 19 2.23752e+015
+209 223 2.23404e+015
+425 376 2.22293e+015
+562 478 2.21442e+015
+382 8 2.21328e+015
+392 144 2.19059e+015
+250 363 2.18439e+015
+49 99 2.18376e+015
+411 355 2.1683e+015
+262 165 2.13943e+015
+378 354 2.13842e+015
+271 278 2.131e+015
+545 168 2.13006e+015
+282 403 2.11864e+015
+513 340 2.11819e+015
+212 183 2.11106e+015
+137 208 2.10896e+015
+432 146 2.09921e+015
+271 71 2.09638e+015
+112 393 2.09605e+015
+177 106 2.09252e+015
+59 185 2.084e+015
+377 7 2.0813e+015
+462 279 2.08053e+015
+243 72 2.03376e+015
+402 122 2.03097e+015
+233 15 2.01573e+015
+72 24 2.00665e+015
+214 57 2.00418e+015
+166 96 1.99505e+015
+105 62 1.99468e+015
+498 82 1.99341e+015
+275 181 1.99334e+015
+140 203 1.98134e+015
+542 18 1.97989e+015
+233 162 1.97635e+015
+192 331 1.95503e+015
+365 7 1.95376e+015
+108 45 1.95083e+015
+88 148 1.93985e+015
+36 269 1.93257e+015
+36 174 1.92889e+015
+140 184 1.9251e+015
+234 72 1.91916e+015
+4 66 1.91676e+015
+216 279 1.91453e+015
+300 177 1.90891e+015
+562 147 1.90276e+015
+300 265 1.90244e+015
+294 15 1.89172e+015
+283 71 1.8865e+015
+456 83 1.87935e+015
+35 10 1.87677e+015
+192 124 1.87474e+015
+95 446 1.87419e+015
+158 1 1.86834e+015
+203 310 1.86756e+015
+366 144 1.86433e+015
+75 236 1.86401e+015
+138 111 1.8601e+015
+432 112 1.85735e+015
+355 320 1.8427e+015
+545 217 1.83712e+015
+234 346 1.83684e+015
+167 287 1.83654e+015
+132 26 1.83428e+015
+71 148 1.83057e+015
+359 168 1.82777e+015
+182 111 1.82613e+015
+438 339 1.82312e+015
+296 420 1.81876e+015
+524 21 1.81758e+015
+28 236 1.81694e+015
+176 39 1.81687e+015
+406 375 1.81464e+015
+362 251 1.81331e+015
+402 261 1.80651e+015
+120 51 1.8056e+015
+526 223 1.80474e+015
+307 439 1.80472e+015
+372 163 1.80009e+015
+479 20 1.79601e+015
+38 296 1.79073e+015
+55 31 1.78776e+015
+230 36 1.78762e+015
+527 40 1.78681e+015
+177 260 1.77692e+015
+343 337 1.77271e+015
+151 307 1.77123e+015
+302 206 1.77076e+015
+141 325 1.76465e+015
+35 146 1.76166e+015
+430 1 1.75939e+015
+490 342 1.75657e+015
+165 217 1.74772e+015
+209 54 1.74185e+015
+326 426 1.74169e+015
+100 221 1.74036e+015
+210 445 1.7341e+015
+528 361 1.7312e+015
+455 3 1.72977e+015
+273 130 1.71505e+015
+163 276 1.70678e+015
+11 101 1.7065e+015
+177 93 1.705e+015
+33 98 1.70403e+015
+54 6 1.7017e+015
+512 165 1.69963e+015
+477 12 1.69808e+015
+278 352 1.69525e+015
+113 213 1.69048e+015
+304 216 1.68633e+015
+250 33 1.68506e+015
+434 398 1.67786e+015
+464 241 1.67422e+015
+452 337 1.67292e+015
+416 44 1.66374e+015
+503 360 1.6624e+015
+359 260 1.65991e+015
+510 455 1.65489e+015
+46 219 1.65454e+015
+550 379 1.65447e+015
+219 291 1.65391e+015
+475 4 1.65196e+015
+489 264 1.64834e+015
+64 371 1.64763e+015
+346 392 1.64296e+015
+55 66 1.64119e+015
+239 421 1.63408e+015
+465 197 1.62451e+015
+230 266 1.62311e+015
+86 77 1.6209e+015
+522 122 1.61501e+015
+513 223 1.61344e+015
+293 25 1.6108e+015
+422 44 1.60734e+015
+395 260 1.6063e+015
+567 161 1.60101e+015
+527 99 1.59517e+015
+263 202 1.59454e+015
+141 22 1.59006e+015
+472 63 1.58234e+015
+579 18 1.57777e+015
+65 213 1.57713e+015
+452 376 1.57031e+015
+520 183 1.56825e+015
+421 334 1.56712e+015
+443 23 1.56374e+015
+452 205 1.55947e+015
+128 164 1.55427e+015
+164 243 1.55349e+015
+114 344 1.55315e+015
+281 51 1.55299e+015
+538 95 1.55263e+015
+112 4 1.54811e+015
+365 200 1.54637e+015
+339 164 1.54621e+015
+387 242 1.54548e+015
+355 267 1.54361e+015
+317 385 1.53762e+015
+422 323 1.53485e+015
+530 184 1.53383e+015
+286 166 1.52795e+015
+329 253 1.52246e+015
+546 41 1.52025e+015
+525 345 1.51771e+015
+542 210 1.51143e+015
+256 149 1.50782e+015
+382 411 1.50172e+015
+491 1 1.49978e+015
+224 183 1.49544e+015
+208 451 1.49411e+015
+338 391 1.49388e+015
+285 211 1.48982e+015
+59 74 1.48867e+015
+276 222 1.4854e+015
+516 17 1.48473e+015
+485 179 1.48312e+015
+338 473 1.482e+015
+484 59 1.47761e+015
+244 164 1.47435e+015
+522 263 1.47027e+015
+220 178 1.45902e+015
+162 213 1.4547e+015
+379 68 1.45224e+015
+169 55 1.44969e+015
+91 291 1.44798e+015
+22 61 1.44687e+015
+120 4 1.44574e+015
+512 99 1.44119e+015
+513 296 1.433e+015
+378 317 1.42609e+015
+180 394 1.42059e+015
+187 99 1.41992e+015
+352 147 1.41982e+015
+301 165 1.4156e+015
+511 128 1.41075e+015
+345 109 1.41019e+015
+449 403 1.40831e+015
+220 100 1.39821e+015
+327 341 1.39723e+015
+110 96 1.39315e+015
+212 437 1.39279e+015
+49 153 1.39222e+015
+124 272 1.38423e+015
+380 26 1.37729e+015
+541 13 1.37711e+015
+370 107 1.36835e+015
+348 240 1.36431e+015
+110 136 1.36284e+015
+316 336 1.35988e+015
+546 57 1.35566e+015
+46 147 1.35321e+015
+530 62 1.35167e+015
+507 165 1.3506e+015
+543 130 1.34706e+015
+383 354 1.34683e+015
+74 6 1.34475e+015
+402 276 1.34457e+015
+497 228 1.33568e+015
+264 445 1.33362e+015
+72 97 1.33278e+015
+566 43 1.33277e+015
+197 82 1.33148e+015
+78 196 1.32119e+015
+128 95 1.31612e+015
+255 182 1.31433e+015
+167 325 1.31317e+015
+510 344 1.31076e+015
+32 218 1.30979e+015
+474 23 1.30504e+015
+470 418 1.29904e+015
+87 209 1.2975e+015
+232 200 1.29613e+015
+192 359 1.29444e+015
+537 459 1.29323e+015
+177 166 1.29218e+015
+325 88 1.28912e+015
+248 403 1.28663e+015
+139 173 1.28413e+015
+482 331 1.2822e+015
+147 21 1.28109e+015
+363 181 1.28082e+015
+153 1 1.28e+015
+444 452 1.27854e+015
+278 145 1.27818e+015
+527 422 1.27532e+015
+324 164 1.27456e+015
+498 158 1.27138e+015
+162 168 1.27037e+015
+259 221 1.26719e+015
+63 60 1.26524e+015
+44 81 1.26446e+015
+479 263 1.26227e+015
+92 7 1.26106e+015
+88 256 1.26099e+015
+18 342 1.25641e+015
+40 217 1.255e+015
+329 66 1.25288e+015
+401 184 1.25253e+015
+57 364 1.25172e+015
+137 98 1.24787e+015
+357 126 1.24054e+015
+576 178 1.2359e+015
+260 273 1.23183e+015
+329 9 1.23071e+015
+125 261 1.22951e+015
+386 126 1.22739e+015
+560 229 1.22372e+015
+36 201 1.21894e+015
+179 18 1.21856e+015
+49 11 1.21809e+015
+362 370 1.21772e+015
+436 91 1.21769e+015
+243 190 1.21743e+015
+342 123 1.21616e+015
+541 62 1.21458e+015
+406 199 1.21418e+015
+302 103 1.21244e+015
+84 3 1.21036e+015
+342 464 1.21026e+015
+492 140 1.20488e+015
+198 130 1.20188e+015
+572 142 1.19689e+015
+191 56 1.19589e+015
+371 82 1.19547e+015
+102 358 1.19461e+015
+149 39 1.19416e+015
+419 163 1.19363e+015
+131 148 1.18848e+015
+299 70 1.18777e+015
+207 436 1.18474e+015
+449 178 1.18172e+015
+163 207 1.18068e+015
+539 40 1.17895e+015
+6 9 1.17359e+015
+575 126 1.16906e+015
+371 393 1.16803e+015
+117 96 1.16751e+015
+513 122 1.16698e+015
+422 397 1.16089e+015
+324 142 1.16035e+015
+183 133 1.15749e+015
+228 129 1.15587e+015
+246 294 1.15552e+015
+108 183 1.15518e+015
+432 83 1.15483e+015
+313 83 1.15138e+015
+287 342 1.15096e+015
+483 83 1.14846e+015
+240 366 1.14764e+015
+153 222 1.14674e+015
+80 474 1.14279e+015
+236 130 1.14093e+015
+290 264 1.14057e+015
+277 370 1.13856e+015
+347 350 1.1373e+015
+545 5 1.13705e+015
+167 238 1.13418e+015
+107 40 1.13088e+015
+387 167 1.12986e+015
+270 62 1.12843e+015
+388 97 1.12838e+015
+138 57 1.12656e+015
+334 435 1.12461e+015
+39 406 1.12285e+015
+365 259 1.12165e+015
+146 160 1.11846e+015
+23 219 1.11827e+015
+260 142 1.11605e+015
+144 187 1.11536e+015
+508 7 1.1151e+015
+487 4 1.11449e+015
+433 319 1.11039e+015
+164 359 1.10876e+015
+37 288 1.10661e+015
+561 60 1.10446e+015
+108 324 1.10045e+015
+64 218 1.09996e+015
+358 143 1.09746e+015
+331 107 1.0971e+015
+109 340 1.096e+015
+55 294 1.09502e+015
+100 162 1.09496e+015
+132 130 1.0942e+015
+271 289 1.0933e+015
+572 449 1.09216e+015
+205 162 1.09171e+015
+297 296 1.09069e+015
+82 136 1.08976e+015
+360 216 1.08746e+015
+174 57 1.0862e+015
+479 179 1.08544e+015
+441 98 1.08404e+015
+331 295 1.08305e+015
+344 263 1.08218e+015
+273 297 1.08142e+015
+257 250 1.0808e+015
+516 348 1.07989e+015
+53 43 1.07541e+015
+282 200 1.07197e+015
+358 10 1.07014e+015
+391 47 1.07004e+015
+259 71 1.06456e+015
+271 52 1.06367e+015
+561 320 1.06225e+015
+333 89 1.06125e+015
+115 76 1.05515e+015
+185 19 1.05446e+015
+448 138 1.05377e+015
+242 100 1.05317e+015
+105 199 1.05104e+015
+91 389 1.04779e+015
+531 22 1.04547e+015
+436 390 1.04331e+015
+358 393 1.04013e+015
+507 59 1.03938e+015
+556 182 1.03912e+015
+513 261 1.03869e+015
+528 142 1.0372e+015
+306 192 1.03668e+015
+254 422 1.03582e+015
+112 165 1.03433e+015
+344 197 1.03279e+015
+351 323 1.02964e+015
+440 64 1.02899e+015
+29 28 1.02755e+015
+256 35 1.02101e+015
+528 104 1.02094e+015
+307 448 1.01719e+015
+259 236 1.01685e+015
+468 423 1.01623e+015
+280 128 1.01552e+015
+217 126 1.01502e+015
+219 108 1.01464e+015
+189 214 1.01462e+015
+403 6 1.01275e+015
+153 217 1.00856e+015
+182 381 1.00854e+015
+417 24 1.00839e+015
+390 161 1.00575e+015
+389 139 1.00548e+015
+169 198 1.0047e+015
+267 296 1.0038e+015
+378 339 1.00071e+015
+196 192 1.00029e+015
+48 257 9.99994e+014
+338 10 9.96857e+014
+195 17 9.9673e+014
+267 30 9.96625e+014
+262 391 9.95691e+014
+310 33 9.93723e+014
+407 162 9.9311e+014
+109 27 9.92268e+014
+203 257 9.87867e+014
+162 74 9.87844e+014
+429 88 9.87379e+014
+480 403 9.86716e+014
+248 219 9.83226e+014
+108 109 9.73644e+014
+220 149 9.72691e+014
+537 186 9.70764e+014
+292 311 9.65007e+014
+143 2 9.6469e+014
+428 181 9.61661e+014
+556 244 9.61065e+014
+49 159 9.59047e+014
+253 74 9.58426e+014
+413 4 9.58343e+014
+172 449 9.56514e+014
+67 337 9.55049e+014
+414 299 9.53218e+014
+502 142 9.51728e+014
+137 138 9.51438e+014
+412 23 9.49494e+014
+282 221 9.48902e+014
+58 372 9.46826e+014
+153 447 9.46503e+014
+161 256 9.4642e+014
+34 236 9.45444e+014
+436 385 9.44655e+014
+210 153 9.44324e+014
+94 477 9.42838e+014
+396 161 9.42329e+014
+390 19 9.39809e+014
+114 428 9.39744e+014
+160 112 9.38437e+014
+509 361 9.37808e+014
+374 241 9.37531e+014
+167 180 9.3614e+014
+221 114 9.35183e+014
+308 8 9.34414e+014
+393 217 9.34182e+014
+250 313 9.34047e+014
+544 91 9.33221e+014
+93 254 9.3062e+014
+358 282 9.28724e+014
+325 295 9.27924e+014
+67 47 9.2784e+014
+506 203 9.27257e+014
+151 114 9.27107e+014
+248 205 9.26398e+014
+435 281 9.23283e+014
+265 53 9.18655e+014
+44 10 9.18446e+014
+466 40 9.16199e+014
+189 205 9.15912e+014
+538 121 9.1528e+014
+261 34 9.10469e+014
+376 119 9.08994e+014
+63 8 9.0828e+014
+211 33 9.07468e+014
+9 476 9.06089e+014
+236 221 9.04759e+014
+366 66 9.04191e+014
+80 39 9.03462e+014
+54 289 9.02821e+014
+474 202 9.02539e+014
+44 121 9.02411e+014
+275 319 9.02034e+014
+474 245 9.00938e+014
+423 203 9.00218e+014
+376 84 8.96735e+014
+535 393 8.96395e+014
+103 392 8.96237e+014
+393 66 8.96047e+014
+313 75 8.9525e+014
+160 183 8.93393e+014
+317 148 8.91201e+014
+458 265 8.91124e+014
+278 189 8.88606e+014
+73 185 8.88013e+014
+263 311 8.87974e+014
+461 221 8.86318e+014
+134 238 8.83015e+014
+365 104 8.82664e+014
+275 216 8.81347e+014
+201 317 8.80738e+014
+85 59 8.79619e+014
+213 123 8.79223e+014
+392 296 8.76696e+014
+190 146 8.75671e+014
+158 56 8.73402e+014
+141 394 8.72706e+014
+367 247 8.71118e+014
+126 189 8.70965e+014
+423 6 8.70358e+014
+457 375 8.70229e+014
+191 219 8.67957e+014
+245 88 8.67405e+014
+110 265 8.6572e+014
+512 44 8.64914e+014
+346 297 8.63393e+014
+489 42 8.62483e+014
+272 241 8.61643e+014
+503 265 8.60769e+014
+282 135 8.59943e+014
+161 238 8.5728e+014
+241 59 8.56945e+014
+420 81 8.56249e+014
+45 132 8.55073e+014
+163 20 8.53826e+014
+407 337 8.53553e+014
+212 17 8.52294e+014
+265 260 8.50623e+014
+336 426 8.49475e+014
+11 80 8.48627e+014
+546 182 8.48223e+014
+362 360 8.46515e+014
+494 455 8.44594e+014
+307 362 8.44163e+014
+343 37 8.43569e+014
+445 7 8.43551e+014
+207 417 8.4242e+014
+42 339 8.41827e+014
+541 165 8.41816e+014
+274 206 8.4072e+014
+58 253 8.40438e+014
+329 212 8.40342e+014
+69 478 8.39856e+014
+65 252 8.3886e+014
+3 382 8.38772e+014
+125 40 8.38085e+014
+390 420 8.37761e+014
+279 362 8.36293e+014
+61 133 8.35388e+014
+153 233 8.34627e+014
+580 52 8.337e+014
+179 274 8.32731e+014
+287 34 8.30421e+014
+406 142 8.29118e+014
+492 182 8.29093e+014
+429 223 8.28661e+014
+434 156 8.28633e+014
+44 62 8.26269e+014
+156 93 8.25755e+014
+96 125 8.24943e+014
+436 43 8.22462e+014
+528 160 8.22226e+014
+489 22 8.21494e+014
+193 171 8.20124e+014
+77 81 8.19828e+014
+526 398 8.19817e+014
+187 263 8.19779e+014
+565 462 8.18647e+014
+19 65 8.18341e+014
+274 76 8.17038e+014
+533 341 8.1692e+014
+39 143 8.14628e+014
+574 39 8.12884e+014
+57 331 8.12357e+014
+133 78 8.12096e+014
+500 21 8.11905e+014
+383 146 8.1094e+014
+561 71 8.10545e+014
+298 332 8.10145e+014
+86 214 8.09804e+014
+59 28 8.09058e+014
+433 240 8.09026e+014
+579 42 8.08558e+014
+445 353 8.07035e+014
+85 197 8.05988e+014
+432 268 8.05975e+014
+398 358 8.05768e+014
+560 81 8.04664e+014
+113 356 8.04379e+014
+451 101 8.04169e+014
+507 2 8.04122e+014
+514 382 8.0087e+014
+59 41 7.98714e+014
+437 303 7.9861e+014
+471 82 7.97751e+014
+419 52 7.96538e+014
+558 19 7.95832e+014
+3 155 7.9578e+014
+598 364 7.94613e+014
+553 383 7.93489e+014
+64 276 7.92846e+014
+156 307 7.92135e+014
+446 340 7.91997e+014
+525 381 7.91926e+014
+396 104 7.91725e+014
+288 396 7.9046e+014
+317 107 7.87927e+014
+597 272 7.87207e+014
+398 169 7.86994e+014
+573 423 7.86973e+014
+133 427 7.83753e+014
+277 137 7.83736e+014
+324 260 7.83489e+014
+113 176 7.82925e+014
+150 151 7.82729e+014
+41 136 7.82473e+014
+328 288 7.81918e+014
+313 222 7.81848e+014
+572 328 7.77887e+014
+281 394 7.76883e+014
+408 44 7.76755e+014
+391 448 7.76619e+014
+433 339 7.76399e+014
+71 410 7.7623e+014
+279 296 7.75716e+014
+464 161 7.75584e+014
+163 108 7.75171e+014
+245 14 7.72713e+014
+172 108 7.72309e+014
+384 162 7.72173e+014
+174 115 7.71609e+014
+45 407 7.70234e+014
+467 125 7.69463e+014
+226 15 7.69236e+014
+151 196 7.69181e+014
+484 375 7.68379e+014
+508 82 7.68298e+014
+158 138 7.67624e+014
+366 2 7.6758e+014
+299 399 7.67534e+014
+131 255 7.65432e+014
+39 83 7.65377e+014
+15 219 7.64969e+014
+505 381 7.60676e+014
+500 42 7.60398e+014
+415 251 7.60045e+014
+289 136 7.59813e+014
+266 14 7.56772e+014
+380 122 7.55095e+014
+516 202 7.54849e+014
+129 309 7.53223e+014
+131 73 7.53216e+014
+65 363 7.53136e+014
+394 222 7.52975e+014
+354 26 7.51422e+014
+460 40 7.5012e+014
+293 334 7.49805e+014
+70 130 7.49024e+014
+445 126 7.48493e+014
+360 315 7.47047e+014
+387 327 7.46803e+014
+92 20 7.45966e+014
+62 205 7.45684e+014
+160 98 7.44785e+014
+101 236 7.43641e+014
+479 451 7.41852e+014
+440 468 7.41737e+014
+568 383 7.41371e+014
+187 109 7.3904e+014
+49 80 7.35747e+014
+394 317 7.34824e+014
+112 56 7.33327e+014
+46 90 7.33227e+014
+157 200 7.31025e+014
+136 93 7.29223e+014
+199 111 7.28546e+014
+190 322 7.28353e+014
+38 167 7.27892e+014
+297 410 7.27338e+014
+368 337 7.27135e+014
+560 272 7.22789e+014
+219 316 7.22139e+014
+425 262 7.21872e+014
+321 119 7.21826e+014
+412 220 7.20915e+014
+95 452 7.18585e+014
+104 430 7.18267e+014
+278 418 7.18075e+014
+451 91 7.15835e+014
+229 347 7.15713e+014
+220 210 7.14165e+014
+382 336 7.13728e+014
+269 105 7.11299e+014
+341 88 7.11213e+014
+327 320 7.10895e+014
+157 318 7.10796e+014
+306 355 7.09129e+014
+463 100 7.08942e+014
+121 239 7.08909e+014
+561 223 7.08248e+014
+177 75 7.06684e+014
+168 309 7.05977e+014
+246 106 7.04682e+014
+221 432 7.04667e+014
+257 88 7.03306e+014
+533 122 7.0275e+014
+49 164 7.01762e+014
+252 152 7.01092e+014
+148 3 7.01063e+014
+524 172 7.00815e+014
+330 202 7.00552e+014
+365 85 7.00247e+014
+472 42 6.99815e+014
+418 68 6.9881e+014
+190 276 6.98163e+014
+449 23 6.96816e+014
+177 331 6.96811e+014
+262 217 6.9676e+014
+529 32 6.95275e+014
+391 324 6.94276e+014
+164 202 6.94175e+014
+86 365 6.93889e+014
+205 202 6.91496e+014
+51 61 6.91476e+014
+391 52 6.91244e+014
+215 144 6.90795e+014
+417 450 6.89663e+014
+168 150 6.89289e+014
+326 180 6.87574e+014
+371 89 6.85637e+014
+116 219 6.85286e+014
+83 404 6.8473e+014
+30 134 6.84702e+014
+535 18 6.84512e+014
+315 159 6.83301e+014
+393 165 6.81464e+014
+546 261 6.7959e+014
+353 424 6.79364e+014
+246 327 6.79142e+014
+513 401 6.78729e+014
+361 222 6.78213e+014
+86 371 6.77748e+014
+450 442 6.774e+014
+40 355 6.76424e+014
+148 396 6.75892e+014
+540 141 6.75881e+014
+293 120 6.75406e+014
+359 161 6.75338e+014
+121 187 6.74411e+014
+464 24 6.7432e+014
+157 76 6.74318e+014
+97 147 6.74182e+014
+408 182 6.72773e+014
+537 103 6.70566e+014
+573 17 6.6956e+014
+166 114 6.68345e+014
+475 342 6.68284e+014
+412 245 6.67761e+014
+564 17 6.6664e+014
+68 304 6.65563e+014
+318 201 6.64895e+014
+472 119 6.64479e+014
+559 462 6.64337e+014
+263 403 6.61857e+014
+358 52 6.61196e+014
+290 49 6.60744e+014
+462 45 6.59706e+014
+117 184 6.57959e+014
+421 315 6.57787e+014
+449 83 6.56989e+014
+473 211 6.56882e+014
+133 65 6.54533e+014
+222 239 6.5422e+014
+496 120 6.53481e+014
+550 222 6.52047e+014
+224 72 6.51972e+014
+584 38 6.5196e+014
+385 450 6.51661e+014
+78 271 6.51318e+014
+449 168 6.51318e+014
+407 81 6.51003e+014
+513 93 6.50954e+014
+128 238 6.50805e+014
+350 86 6.50476e+014
+146 452 6.50457e+014
+485 327 6.50252e+014
+89 376 6.48558e+014
+530 366 6.47455e+014
+441 321 6.46568e+014
+261 329 6.4655e+014
+180 292 6.46369e+014
+160 430 6.41768e+014
+13 206 6.41369e+014
+542 457 6.40821e+014
+388 282 6.40607e+014
+446 376 6.40419e+014
+530 193 6.40159e+014
+85 178 6.38917e+014
+496 462 6.3709e+014
+260 382 6.36581e+014
+569 203 6.36569e+014
+333 415 6.34184e+014
+296 89 6.33843e+014
+266 139 6.32948e+014
+300 246 6.32457e+014
+247 346 6.29975e+014
+410 99 6.29711e+014
+547 162 6.2798e+014
+352 161 6.27811e+014
+84 310 6.27547e+014
+297 99 6.25261e+014
+315 165 6.24555e+014
+358 64 6.23835e+014
+121 128 6.22982e+014
+262 319 6.2124e+014
+412 469 6.20915e+014
+131 477 6.2025e+014
+332 333 6.19597e+014
+275 329 6.19512e+014
+583 345 6.19134e+014
+545 438 6.17411e+014
+187 182 6.17016e+014
+433 25 6.16763e+014
+524 199 6.15607e+014
+354 18 6.14699e+014
+187 291 6.14017e+014
+286 53 6.13949e+014
+33 65 6.12948e+014
+500 224 6.10939e+014
+211 94 6.10834e+014
+404 13 6.10764e+014
+361 331 6.10354e+014
+415 83 6.08914e+014
+91 79 6.06896e+014
+351 271 6.05186e+014
+571 333 6.0459e+014
+447 145 6.03586e+014
+279 86 6.031e+014
+267 132 6.01555e+014
+424 163 6.01462e+014
+70 255 6.0116e+014
+383 260 6.01e+014
+618 181 6.00806e+014
+289 349 6.00512e+014
+58 79 6.00197e+014
+485 236 5.9839e+014
+31 271 5.98383e+014
+102 294 5.97033e+014
+176 180 5.96347e+014
+379 107 5.9612e+014
+400 266 5.95624e+014
+310 259 5.95583e+014
+522 141 5.95545e+014
+210 395 5.95016e+014
+498 68 5.93928e+014
+215 426 5.93117e+014
+156 237 5.92126e+014
+234 261 5.91968e+014
+72 165 5.89881e+014
+439 149 5.89687e+014
+117 360 5.88781e+014
+182 201 5.88644e+014
+349 337 5.88061e+014
+297 182 5.87533e+014
+247 317 5.87523e+014
+44 476 5.87279e+014
+381 128 5.85425e+014
+400 319 5.85045e+014
+545 141 5.84704e+014
+203 396 5.84627e+014
+53 221 5.84023e+014
+69 417 5.82031e+014
+117 132 5.81406e+014
+153 301 5.81138e+014
+122 446 5.80806e+014
+191 130 5.80116e+014
+570 408 5.79873e+014
+119 25 5.79028e+014
+536 81 5.78132e+014
+175 2 5.76527e+014
+162 128 5.763e+014
+83 101 5.76256e+014
+327 25 5.7524e+014
+499 475 5.74836e+014
+399 67 5.74264e+014
+84 289 5.72463e+014
+256 405 5.7199e+014
+18 236 5.71855e+014
+380 180 5.71246e+014
+243 210 5.70915e+014
+447 244 5.7085e+014
+316 427 5.69075e+014
+272 91 5.6893e+014
+100 95 5.68928e+014
+126 329 5.68224e+014
+14 30 5.67994e+014
+84 145 5.67504e+014
+518 164 5.66777e+014
+272 414 5.65592e+014
+511 211 5.65154e+014
+439 455 5.64713e+014
+333 240 5.64699e+014
+321 10 5.6352e+014
+88 354 5.62832e+014
+126 113 5.62826e+014
+260 231 5.61942e+014
+357 240 5.61606e+014
+477 240 5.61517e+014
+281 35 5.60839e+014
+535 141 5.59876e+014
+341 257 5.59862e+014
+146 97 5.59799e+014
+58 103 5.59536e+014
+310 334 5.57476e+014
+469 141 5.57059e+014
+203 293 5.56579e+014
+520 362 5.56467e+014
+503 179 5.55956e+014
+475 255 5.55436e+014
+579 79 5.53754e+014
+435 181 5.53125e+014
+209 136 5.52711e+014
+193 290 5.5234e+014
+50 452 5.5081e+014
+197 148 5.50679e+014
+243 32 5.50086e+014
+94 95 5.49313e+014
+591 103 5.49094e+014
+124 82 5.48863e+014
+311 298 5.48714e+014
+106 77 5.48184e+014
+240 194 5.47964e+014
+317 125 5.47786e+014
+259 370 5.44553e+014
+283 80 5.43825e+014
+401 429 5.42719e+014
+32 103 5.41895e+014
+331 133 5.41813e+014
+484 154 5.4125e+014
+500 318 5.4088e+014
+540 405 5.40799e+014
+569 183 5.40204e+014
+500 420 5.40092e+014
+175 189 5.39971e+014
+503 161 5.38919e+014
+326 353 5.36452e+014
+310 90 5.35035e+014
+198 75 5.34171e+014
+48 458 5.34139e+014
+163 316 5.33833e+014
+99 195 5.33796e+014
+203 347 5.33301e+014
+213 62 5.33261e+014
+344 274 5.31321e+014
+88 261 5.312e+014
+388 202 5.30879e+014
+475 161 5.30701e+014
+63 315 5.29863e+014
+275 197 5.29785e+014
+330 164 5.29447e+014
+282 369 5.29319e+014
+575 98 5.27115e+014
+387 319 5.27104e+014
+289 89 5.25479e+014
+142 238 5.25134e+014
+482 360 5.25082e+014
+532 268 5.24911e+014
+418 282 5.24813e+014
+164 190 5.22602e+014
+108 427 5.22179e+014
+57 168 5.22176e+014
+191 314 5.22038e+014
+458 180 5.19605e+014
+12 214 5.18354e+014
+165 378 5.17858e+014
+494 164 5.17082e+014
+66 474 5.16638e+014
+148 131 5.15717e+014
+427 44 5.15544e+014
+88 183 5.15387e+014
+298 274 5.14737e+014
+182 341 5.14275e+014
+245 385 5.1357e+014
+441 240 5.12951e+014
+456 201 5.12483e+014
+191 189 5.12247e+014
+221 84 5.11258e+014
+517 142 5.10999e+014
+493 102 5.10831e+014
+513 376 5.10176e+014
+179 153 5.09387e+014
+187 326 5.08547e+014
+490 82 5.08355e+014
+38 182 5.0782e+014
+90 321 5.07743e+014
+511 205 5.07503e+014
+422 116 5.0747e+014
+143 141 5.07461e+014
+573 6 5.07293e+014
+364 407 5.06944e+014
+386 63 5.06597e+014
+180 56 5.06128e+014
+414 262 5.05503e+014
+193 111 5.05436e+014
+465 355 5.04886e+014
+258 131 5.04837e+014
+527 80 5.04817e+014
+351 363 5.04753e+014
+464 139 5.03341e+014
+421 89 5.0308e+014
+188 104 5.02736e+014
+161 133 5.02263e+014
+572 121 5.01735e+014
+473 355 5.01566e+014
+32 112 5.01476e+014
+487 205 5.00893e+014
+243 273 5.00835e+014
+492 59 5.0033e+014
+296 165 4.99895e+014
+461 269 4.99671e+014
+372 74 4.98948e+014
+18 320 4.98843e+014
+292 182 4.98379e+014
+549 282 4.95729e+014
+422 63 4.94412e+014
+212 219 4.93858e+014
+155 432 4.93179e+014
+555 264 4.9308e+014
+161 31 4.92758e+014
+247 258 4.91928e+014
+336 317 4.91785e+014
+146 15 4.9133e+014
+338 221 4.90643e+014
+422 328 4.90545e+014
+341 314 4.8992e+014
+300 253 4.89588e+014
+356 251 4.87656e+014
+482 164 4.87527e+014
+298 57 4.87345e+014
+93 112 4.86706e+014
+16 118 4.85868e+014
+399 298 4.8532e+014
+392 243 4.85188e+014
+75 132 4.85088e+014
+144 432 4.84846e+014
+551 80 4.84418e+014
+443 121 4.83101e+014
+375 282 4.82795e+014
+39 241 4.82526e+014
+515 184 4.82373e+014
+333 216 4.81251e+014
+512 109 4.80861e+014
+251 163 4.8073e+014
+291 164 4.80218e+014
+146 221 4.79603e+014
+377 461 4.79158e+014
+438 123 4.78375e+014
+472 453 4.7808e+014
+329 390 4.77256e+014
+223 312 4.76462e+014
+594 19 4.75518e+014
+13 236 4.75489e+014
+286 422 4.75388e+014
+115 306 4.75105e+014
+265 72 4.7463e+014
+460 303 4.73799e+014
+531 398 4.73073e+014
+184 318 4.72247e+014
+407 262 4.71785e+014
+540 263 4.71311e+014
+266 118 4.71045e+014
+449 64 4.70145e+014
+132 410 4.70133e+014
+416 377 4.69245e+014
+152 400 4.69033e+014
+398 95 4.68769e+014
+322 29 4.68379e+014
+469 24 4.67932e+014
+346 47 4.67842e+014
+35 300 4.67319e+014
+129 217 4.67051e+014
+355 107 4.67026e+014
+103 304 4.66716e+014
+557 302 4.66043e+014
+87 342 4.65837e+014
+215 149 4.65486e+014
+534 92 4.64866e+014
+522 78 4.64758e+014
+273 146 4.6472e+014
+95 374 4.64464e+014
+94 219 4.64302e+014
+233 296 4.63739e+014
+576 311 4.63548e+014
+184 94 4.63517e+014
+210 422 4.62831e+014
+143 179 4.62161e+014
+200 415 4.61867e+014
+479 173 4.6131e+014
+60 110 4.61214e+014
+196 343 4.60832e+014
+427 63 4.60514e+014
+335 445 4.60383e+014
+420 362 4.60174e+014
+301 86 4.5996e+014
+217 164 4.59804e+014
+214 450 4.59378e+014
+456 418 4.58001e+014
+347 120 4.57392e+014
+554 201 4.57206e+014
+16 435 4.57206e+014
+248 190 4.566e+014
+366 304 4.55606e+014
+452 161 4.55556e+014
+589 350 4.55372e+014
+51 373 4.54975e+014
+281 386 4.5461e+014
+497 340 4.54541e+014
+95 59 4.54218e+014
+52 359 4.52774e+014
+497 283 4.52576e+014
+136 74 4.52187e+014
+266 287 4.52087e+014
+510 142 4.51307e+014
+395 23 4.5088e+014
+108 260 4.49638e+014
+289 440 4.49511e+014
+250 425 4.48689e+014
+410 414 4.48676e+014
+373 103 4.47774e+014
+514 335 4.47697e+014
+462 378 4.47297e+014
+514 2 4.4726e+014
+432 296 4.47245e+014
+539 220 4.47194e+014
+346 341 4.47165e+014
+202 7 4.46536e+014
+177 200 4.45998e+014
+3 166 4.45765e+014
+224 50 4.44601e+014
+334 143 4.43901e+014
+232 274 4.42824e+014
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_5_5.txt b/test_data/harriscorners/hc_msc_5.00_0.04_5_5.txt
new file mode 100644
index 0000000..d90e52d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_5_5.txt
@@ -0,0 +1,849 @@
+848
+244 94 7.0718e+016
+273 365 4.19588e+016
+237 19 3.36442e+016
+362 400 3.12716e+016
+423 178 3.00271e+016
+82 28 2.53341e+016
+76 257 2.44932e+016
+200 17 2.3797e+016
+122 43 2.37448e+016
+281 113 2.37446e+016
+240 91 2.28796e+016
+448 297 2.28076e+016
+543 365 2.26334e+016
+320 224 2.26184e+016
+261 297 2.24358e+016
+299 52 2.24339e+016
+214 72 2.19388e+016
+65 343 2.19239e+016
+343 9 2.16203e+016
+252 13 2.14356e+016
+427 320 2.12805e+016
+447 397 2.08519e+016
+35 138 2.072e+016
+465 393 2.06931e+016
+128 2 2.05662e+016
+553 40 2.05077e+016
+130 26 2.02247e+016
+360 295 2.00814e+016
+131 36 1.99837e+016
+124 198 1.98774e+016
+59 218 1.88757e+016
+134 214 1.86289e+016
+27 9 1.85968e+016
+507 122 1.83679e+016
+116 44 1.83327e+016
+38 63 1.8258e+016
+195 57 1.82277e+016
+484 23 1.76262e+016
+387 178 1.75983e+016
+138 203 1.74043e+016
+81 2 1.73436e+016
+294 15 1.71674e+016
+480 297 1.7e+016
+222 38 1.69346e+016
+256 386 1.66813e+016
+243 202 1.65612e+016
+102 59 1.65365e+016
+303 183 1.65272e+016
+456 281 1.6518e+016
+46 27 1.64923e+016
+448 262 1.64732e+016
+519 61 1.63025e+016
+127 164 1.62931e+016
+125 364 1.61276e+016
+386 10 1.60423e+016
+92 214 1.59941e+016
+435 69 1.58275e+016
+263 441 1.58061e+016
+2 47 1.57747e+016
+36 145 1.57663e+016
+308 371 1.57158e+016
+33 99 1.56448e+016
+152 222 1.54905e+016
+84 78 1.54859e+016
+484 338 1.50463e+016
+470 239 1.48046e+016
+508 17 1.4791e+016
+544 168 1.47875e+016
+320 313 1.47586e+016
+242 71 1.4677e+016
+101 222 1.45143e+016
+329 127 1.45128e+016
+426 119 1.44942e+016
+110 239 1.42893e+016
+11 101 1.41452e+016
+125 254 1.4051e+016
+70 25 1.39816e+016
+418 440 1.39622e+016
+195 125 1.39122e+016
+214 58 1.38889e+016
+511 167 1.38492e+016
+220 16 1.38343e+016
+390 58 1.36823e+016
+452 339 1.36672e+016
+513 341 1.36458e+016
+528 24 1.36308e+016
+225 420 1.35091e+016
+535 243 1.35072e+016
+485 59 1.34419e+016
+476 262 1.34202e+016
+412 162 1.32075e+016
+407 64 1.31774e+016
+462 279 1.31759e+016
+233 15 1.30885e+016
+145 310 1.30646e+016
+363 251 1.30202e+016
+412 256 1.30182e+016
+343 338 1.30044e+016
+48 99 1.29908e+016
+54 29 1.2989e+016
+337 9 1.29444e+016
+524 21 1.28414e+016
+253 139 1.28398e+016
+142 324 1.27097e+016
+160 143 1.27002e+016
+171 18 1.26948e+016
+360 131 1.24699e+016
+138 110 1.23532e+016
+210 55 1.22075e+016
+433 112 1.21616e+016
+96 446 1.21616e+016
+183 400 1.21299e+016
+88 148 1.20424e+016
+515 76 1.19951e+016
+216 279 1.19035e+016
+510 173 1.17493e+016
+64 236 1.1722e+016
+163 216 1.17035e+016
+365 143 1.16492e+016
+302 215 1.1627e+016
+35 9 1.15878e+016
+92 198 1.15797e+016
+545 41 1.15786e+016
+404 121 1.1545e+016
+210 435 1.15356e+016
+184 36 1.15124e+016
+386 221 1.14656e+016
+246 206 1.1396e+016
+410 353 1.136e+016
+480 19 1.13343e+016
+120 51 1.13323e+016
+360 335 1.13138e+016
+417 8 1.12757e+016
+422 335 1.12699e+016
+177 106 1.1269e+016
+387 294 1.12284e+016
+260 222 1.12243e+016
+301 165 1.11756e+016
+234 346 1.11488e+016
+40 296 1.11484e+016
+325 341 1.11127e+016
+65 319 1.11009e+016
+41 217 1.10835e+016
+484 179 1.10743e+016
+74 6 1.1019e+016
+286 297 1.10121e+016
+124 185 1.09998e+016
+112 392 1.0934e+016
+528 102 1.09183e+016
+181 111 1.09159e+016
+431 147 1.08503e+016
+391 144 1.08178e+016
+234 162 1.08081e+016
+543 15 1.07407e+016
+497 81 1.07406e+016
+167 287 1.07297e+016
+371 162 1.07049e+016
+359 260 1.06811e+016
+270 70 1.06782e+016
+230 36 1.0675e+016
+250 365 1.06675e+016
+154 236 1.06632e+016
+100 78 1.0604e+016
+542 209 1.0529e+016
+57 4 1.05262e+016
+71 147 1.05262e+016
+207 450 1.05094e+016
+283 403 1.04837e+016
+348 178 1.04718e+016
+245 143 1.04384e+016
+86 255 1.04243e+016
+482 366 1.0347e+016
+498 159 1.03431e+016
+4 66 1.03228e+016
+466 196 1.03105e+016
+476 22 1.02801e+016
+102 4 1.02706e+016
+108 45 1.02602e+016
+224 182 1.02061e+016
+35 173 1.01971e+016
+425 376 1.0195e+016
+65 215 1.01942e+016
+138 173 1.0183e+016
+169 57 1.01752e+016
+243 165 1.01669e+016
+283 72 1.01493e+016
+163 277 1.01364e+016
+356 220 1.01186e+016
+579 16 1.01181e+016
+202 314 1.01138e+016
+228 292 1.01014e+016
+151 307 1.00257e+016
+6 11 1.00015e+016
+545 59 9.95922e+015
+55 290 9.94618e+015
+211 184 9.93412e+015
+271 279 9.92656e+015
+424 44 9.91612e+015
+509 455 9.91383e+015
+311 150 9.87674e+015
+470 421 9.87021e+015
+476 5 9.81353e+015
+209 20 9.7676e+015
+78 25 9.71732e+015
+527 39 9.70782e+015
+62 60 9.61963e+015
+175 40 9.56947e+015
+174 312 9.53498e+015
+252 423 9.50792e+015
+533 184 9.46371e+015
+325 164 9.41696e+015
+286 210 9.35477e+015
+207 224 9.34972e+015
+78 79 9.31658e+015
+48 151 9.29069e+015
+271 166 9.28476e+015
+351 321 9.25118e+015
+526 60 9.24917e+015
+226 221 9.20281e+015
+429 3 9.18754e+015
+60 183 9.07532e+015
+511 128 9.06137e+015
+82 135 9.01579e+015
+327 142 9.01015e+015
+166 97 8.97277e+015
+31 270 8.96816e+015
+325 425 8.94868e+015
+261 165 8.93187e+015
+276 180 8.91826e+015
+314 84 8.91304e+015
+355 268 8.89495e+015
+439 339 8.88422e+015
+512 99 8.85785e+015
+492 140 8.83673e+015
+59 40 8.82952e+015
+174 238 8.81201e+015
+399 262 8.79155e+015
+347 241 8.78793e+015
+277 221 8.78722e+015
+386 243 8.77027e+015
+50 12 8.66741e+015
+127 76 8.61633e+015
+489 342 8.61296e+015
+379 354 8.61118e+015
+108 27 8.58218e+015
+287 166 8.57377e+015
+293 26 8.54783e+015
+137 209 8.5403e+015
+175 112 8.48058e+015
+393 66 8.46401e+015
+516 17 8.44652e+015
+526 423 8.43952e+015
+482 328 8.42806e+015
+55 66 8.39593e+015
+95 477 8.37936e+015
+453 204 8.35911e+015
+329 254 8.33015e+015
+177 260 8.32993e+015
+104 198 8.32581e+015
+346 350 8.32521e+015
+250 33 8.30035e+015
+378 7 8.2752e+015
+235 72 8.24102e+015
+512 222 8.23405e+015
+220 290 8.22792e+015
+363 8 8.22569e+015
+110 135 8.21488e+015
+106 39 8.21067e+015
+264 446 8.19249e+015
+332 295 8.17528e+015
+276 352 8.15905e+015
+256 149 8.14539e+015
+434 398 8.12296e+015
+449 218 8.11708e+015
+306 440 8.07003e+015
+175 94 8.06365e+015
+237 130 8.0546e+015
+344 107 8.04675e+015
+537 393 8.04374e+015
+442 23 8.0359e+015
+515 347 8.0338e+015
+140 22 8.01936e+015
+365 105 8.01446e+015
+102 360 8.01018e+015
+488 263 7.99266e+015
+59 75 7.9906e+015
+456 84 7.96724e+015
+423 398 7.946e+015
+262 201 7.94534e+015
+278 144 7.93663e+015
+167 325 7.88951e+015
+62 203 7.81198e+015
+565 160 7.80163e+015
+522 264 7.7958e+015
+325 88 7.79418e+015
+300 265 7.7726e+015
+566 43 7.74521e+015
+527 361 7.7377e+015
+266 296 7.70675e+015
+32 66 7.70396e+015
+452 376 7.6769e+015
+163 74 7.65421e+015
+330 9 7.63873e+015
+92 292 7.63393e+015
+246 400 7.6177e+015
+13 218 7.60296e+015
+393 295 7.59792e+015
+302 206 7.58601e+015
+309 7 7.58462e+015
+273 131 7.56398e+015
+233 200 7.53704e+015
+523 123 7.51076e+015
+520 182 7.50468e+015
+576 177 7.50458e+015
+334 90 7.49014e+015
+446 7 7.48859e+015
+508 5 7.46617e+015
+406 198 7.43031e+015
+29 236 7.41311e+015
+238 349 7.38122e+015
+123 272 7.38085e+015
+271 290 7.36239e+015
+541 123 7.34415e+015
+502 361 7.32541e+015
+92 7 7.3178e+015
+168 197 7.27528e+015
+562 146 7.27069e+015
+405 375 7.26305e+015
+156 198 7.26114e+015
+344 263 7.26079e+015
+404 187 7.25748e+015
+113 345 7.25447e+015
+228 185 7.25012e+015
+61 133 7.24968e+015
+530 144 7.24904e+015
+551 381 7.22638e+015
+126 95 7.20708e+015
+408 182 7.20262e+015
+177 165 7.19881e+015
+66 477 7.18186e+015
+141 394 7.17901e+015
+197 83 7.16249e+015
+157 73 7.15838e+015
+317 335 7.15393e+015
+21 61 7.13564e+015
+44 62 7.12224e+015
+501 143 7.09696e+015
+381 26 7.09215e+015
+141 183 7.07937e+015
+192 330 7.06205e+015
+265 31 7.02271e+015
+544 4 7.0155e+015
+416 23 7.00714e+015
+165 243 6.98045e+015
+358 10 6.97405e+015
+18 343 6.97317e+015
+30 219 6.95379e+015
+180 394 6.93195e+015
+313 76 6.93002e+015
+362 370 6.91764e+015
+46 82 6.91371e+015
+28 29 6.90223e+015
+53 43 6.85262e+015
+403 265 6.85097e+015
+478 402 6.85014e+015
+205 160 6.84798e+015
+378 67 6.83189e+015
+401 276 6.83032e+015
+334 436 6.82218e+015
+109 95 6.81072e+015
+279 128 6.80967e+015
+390 48 6.80366e+015
+527 222 6.76881e+015
+524 346 6.76175e+015
+228 128 6.75881e+015
+58 364 6.74251e+015
+542 129 6.72518e+015
+460 267 6.71662e+015
+161 168 6.7138e+015
+220 150 6.71198e+015
+238 421 6.71057e+015
+159 138 6.68562e+015
+171 109 6.68378e+015
+259 237 6.62416e+015
+164 358 6.59556e+015
+190 216 6.58479e+015
+41 10 6.5832e+015
+221 177 6.57832e+015
+382 412 6.56915e+015
+426 182 6.56884e+015
+444 452 6.56483e+015
+210 445 6.56294e+015
+272 53 6.55319e+015
+363 181 6.53898e+015
+338 165 6.53454e+015
+64 371 6.52289e+015
+473 63 6.52213e+015
+245 293 6.52043e+015
+275 329 6.48812e+015
+280 50 6.47718e+015
+279 368 6.47635e+015
+133 93 6.4702e+015
+489 43 6.45933e+015
+436 304 6.43255e+015
+422 324 6.4303e+015
+458 4 6.4293e+015
+135 129 6.42034e+015
+413 299 6.40755e+015
+338 473 6.38928e+015
+338 391 6.38703e+015
+68 337 6.37664e+015
+138 98 6.36342e+015
+36 201 6.36182e+015
+113 3 6.32761e+015
+513 262 6.31281e+015
+350 145 6.31023e+015
+362 395 6.30263e+015
+371 90 6.29832e+015
+329 65 6.2959e+015
+219 107 6.2933e+015
+42 339 6.27533e+015
+417 84 6.27266e+015
+448 168 6.26449e+015
+490 59 6.25085e+015
+561 224 6.24544e+015
+393 216 6.23818e+015
+71 96 6.23753e+015
+182 380 6.21679e+015
+544 218 6.21292e+015
+393 164 6.20797e+015
+47 133 6.1957e+015
+359 167 6.18128e+015
+435 90 6.16489e+015
+346 298 6.16154e+015
+297 331 6.16008e+015
+131 148 6.1465e+015
+408 45 6.14412e+015
+346 392 6.12251e+015
+416 44 6.10369e+015
+528 189 6.09957e+015
+513 296 6.09857e+015
+156 94 6.08745e+015
+301 103 6.07663e+015
+306 363 6.06247e+015
+249 219 6.05549e+015
+117 76 6.05387e+015
+357 282 6.05355e+015
+273 296 6.05265e+015
+190 205 6.01907e+015
+418 164 6.01113e+015
+302 178 6.00465e+015
+325 295 5.99925e+015
+191 358 5.99175e+015
+457 43 5.98365e+015
+341 123 5.9793e+015
+305 193 5.9665e+015
+85 214 5.96454e+015
+478 13 5.96428e+015
+142 2 5.95342e+015
+46 220 5.9396e+015
+539 405 5.93841e+015
+42 24 5.9381e+015
+298 275 5.92106e+015
+547 163 5.90955e+015
+248 316 5.90017e+015
+387 15 5.90005e+015
+389 97 5.89798e+015
+31 135 5.88467e+015
+183 19 5.86146e+015
+125 262 5.85544e+015
+373 393 5.83351e+015
+129 128 5.83093e+015
+79 197 5.82602e+015
+263 403 5.81356e+015
+360 217 5.77111e+015
+510 83 5.76006e+015
+542 100 5.75559e+015
+198 131 5.75434e+015
+298 69 5.75226e+015
+359 143 5.7363e+015
+476 341 5.73275e+015
+558 462 5.72339e+015
+573 141 5.71706e+015
+259 35 5.71149e+015
+571 161 5.70557e+015
+160 183 5.69684e+015
+101 164 5.69603e+015
+88 209 5.69244e+015
+424 203 5.68892e+015
+380 122 5.68586e+015
+46 355 5.68177e+015
+578 42 5.68138e+015
+113 212 5.67606e+015
+84 476 5.67335e+015
+275 319 5.66558e+015
+116 428 5.6478e+015
+538 96 5.64663e+015
+449 445 5.64507e+015
+480 82 5.6126e+015
+38 168 5.59914e+015
+80 40 5.59095e+015
+543 457 5.59089e+015
+260 71 5.589e+015
+372 81 5.58575e+015
+434 225 5.57885e+015
+217 36 5.57726e+015
+102 235 5.55404e+015
+221 432 5.54533e+015
+138 57 5.53708e+015
+282 394 5.53631e+015
+367 300 5.517e+015
+146 160 5.48477e+015
+471 83 5.47617e+015
+573 422 5.46666e+015
+257 250 5.44888e+015
+436 320 5.44139e+015
+376 119 5.44022e+015
+500 22 5.42999e+015
+571 450 5.4219e+015
+370 106 5.41682e+015
+364 258 5.41628e+015
+513 120 5.41486e+015
+39 355 5.40966e+015
+444 355 5.40698e+015
+193 16 5.40257e+015
+186 98 5.37598e+015
+160 111 5.37256e+015
+387 126 5.37051e+015
+475 246 5.36724e+015
+441 239 5.36025e+015
+191 146 5.34973e+015
+498 225 5.33038e+015
+430 45 5.32981e+015
+471 212 5.32974e+015
+156 317 5.32359e+015
+53 221 5.31099e+015
+151 114 5.30477e+015
+354 25 5.3026e+015
+146 21 5.29538e+015
+178 18 5.28748e+015
+525 172 5.25773e+015
+386 326 5.24971e+015
+214 124 5.21589e+015
+429 223 5.21311e+015
+433 241 5.1937e+015
+327 182 5.18875e+015
+79 474 5.18486e+015
+307 449 5.18123e+015
+106 77 5.17986e+015
+317 147 5.17931e+015
+57 372 5.17685e+015
+297 420 5.16073e+015
+385 162 5.16036e+015
+374 240 5.15436e+015
+120 446 5.14988e+015
+332 106 5.14968e+015
+470 122 5.14324e+015
+561 320 5.13931e+015
+584 38 5.13735e+015
+525 185 5.13697e+015
+379 106 5.12489e+015
+130 255 5.12209e+015
+110 168 5.11238e+015
+258 161 5.11014e+015
+163 208 5.09154e+015
+66 45 5.07835e+015
+569 39 5.07768e+015
+538 186 5.0686e+015
+57 254 5.04528e+015
+435 281 5.03255e+015
+220 100 5.02315e+015
+287 396 5.01839e+015
+430 89 5.00812e+015
+291 50 5.00633e+015
+379 337 4.9959e+015
+380 180 4.99174e+015
+108 109 4.98623e+015
+37 288 4.9826e+015
+345 274 4.97399e+015
+84 145 4.97173e+015
+358 63 4.96779e+015
+418 283 4.96108e+015
+486 4 4.9595e+015
+349 87 4.95681e+015
+39 83 4.95104e+015
+217 146 4.94985e+015
+453 102 4.94813e+015
+120 4 4.94183e+015
+107 183 4.93778e+015
+395 318 4.92616e+015
+157 56 4.92119e+015
+565 463 4.91784e+015
+90 376 4.91163e+015
+536 459 4.90909e+015
+377 318 4.90793e+015
+547 182 4.90434e+015
+161 20 4.90167e+015
+49 255 4.89205e+015
+87 369 4.88128e+015
+168 180 4.84553e+015
+188 264 4.8446e+015
+533 61 4.84303e+015
+76 237 4.82309e+015
+569 383 4.81473e+015
+559 80 4.81234e+015
+70 131 4.78943e+015
+462 221 4.77701e+015
+561 229 4.76853e+015
+196 193 4.7592e+015
+83 73 4.75284e+015
+130 72 4.74945e+015
+133 237 4.7469e+015
+449 178 4.74683e+015
+305 106 4.73931e+015
+210 36 4.73307e+015
+356 255 4.7194e+015
+263 392 4.69693e+015
+384 258 4.68125e+015
+500 265 4.67802e+015
+217 208 4.66874e+015
+50 62 4.66769e+015
+493 181 4.66751e+015
+149 2 4.65687e+015
+469 141 4.63497e+015
+517 202 4.6339e+015
+222 114 4.61319e+015
+69 420 4.60856e+015
+107 428 4.60577e+015
+291 265 4.60234e+015
+149 40 4.59826e+015
+78 270 4.5979e+015
+560 272 4.59559e+015
+402 6 4.59179e+015
+364 200 4.58259e+015
+299 398 4.58251e+015
+87 364 4.57646e+015
+424 4 4.57359e+015
+271 182 4.56689e+015
+214 449 4.56067e+015
+229 265 4.55456e+015
+73 164 4.55434e+015
+363 358 4.55024e+015
+473 202 4.54792e+015
+110 264 4.54171e+015
+44 474 4.53142e+015
+472 42 4.52815e+015
+412 470 4.49605e+015
+34 31 4.49182e+015
+599 364 4.46812e+015
+480 451 4.4648e+015
+166 115 4.46455e+015
+274 215 4.46325e+015
+444 119 4.45967e+015
+332 202 4.45758e+015
+66 252 4.45557e+015
+166 110 4.44405e+015
+187 289 4.43242e+015
+431 82 4.42878e+015
+44 407 4.40257e+015
+346 48 4.39113e+015
+437 391 4.38905e+015
+64 8 4.38783e+015
+35 235 4.38583e+015
+449 139 4.38568e+015
+573 405 4.38024e+015
+191 312 4.37099e+015
+290 137 4.37072e+015
+242 190 4.36532e+015
+168 149 4.36381e+015
+578 51 4.35895e+015
+289 349 4.35708e+015
+20 217 4.35392e+015
+182 131 4.3451e+015
+296 297 4.33779e+015
+264 311 4.31475e+015
+309 32 4.30811e+015
+163 315 4.30804e+015
+109 59 4.30643e+015
+254 75 4.28613e+015
+198 111 4.28164e+015
+246 106 4.27638e+015
+259 368 4.27209e+015
+130 428 4.26443e+015
+95 94 4.26128e+015
+104 304 4.25942e+015
+406 80 4.25875e+015
+245 14 4.25631e+015
+260 142 4.25441e+015
+85 60 4.25421e+015
+20 317 4.24759e+015
+131 476 4.24436e+015
+455 59 4.24205e+015
+384 354 4.238e+015
+71 409 4.23305e+015
+282 199 4.23039e+015
+372 116 4.22738e+015
+277 137 4.22119e+015
+215 175 4.21714e+015
+259 272 4.21187e+015
+432 269 4.21096e+015
+287 343 4.204e+015
+318 385 4.20327e+015
+399 168 4.20089e+015
+85 310 4.19876e+015
+203 257 4.19417e+015
+463 40 4.19056e+015
+570 182 4.18582e+015
+463 23 4.1766e+015
+514 381 4.17366e+015
+459 303 4.16811e+015
+265 15 4.16037e+015
+359 53 4.14111e+015
+9 476 4.13796e+015
+505 381 4.13414e+015
+486 140 4.13003e+015
+92 59 4.12632e+015
+354 295 4.1169e+015
+281 419 4.11332e+015
+535 18 4.10601e+015
+297 182 4.09889e+015
+86 197 4.09466e+015
+41 136 4.08723e+015
+486 376 4.06893e+015
+441 98 4.06203e+015
+293 312 4.0577e+015
+109 325 4.05554e+015
+342 463 4.05547e+015
+395 105 4.05134e+015
+503 164 4.05043e+015
+449 437 4.04709e+015
+186 108 4.03917e+015
+297 410 4.03555e+015
+435 163 4.03156e+015
+495 455 4.0307e+015
+391 449 4.02968e+015
+148 397 4.00963e+015
+465 356 4.0096e+015
+85 180 4.00711e+015
+328 353 3.99723e+015
+294 269 3.99324e+015
+419 53 3.99244e+015
+528 161 3.99004e+015
+179 274 3.9878e+015
+180 292 3.98684e+015
+10 79 3.98272e+015
+118 115 3.97042e+015
+398 357 3.97004e+015
+358 241 3.96829e+015
+192 189 3.96651e+015
+480 173 3.96641e+015
+592 18 3.96441e+015
+282 135 3.96149e+015
+550 223 3.95919e+015
+507 60 3.93419e+015
+451 86 3.92468e+015
+217 128 3.92416e+015
+110 341 3.92171e+015
+275 197 3.91879e+015
+271 241 3.91473e+015
+418 258 3.91123e+015
+43 122 3.90873e+015
+294 88 3.90442e+015
+338 263 3.90108e+015
+512 202 3.89934e+015
+275 360 3.88728e+015
+367 1 3.87684e+015
+562 71 3.86665e+015
+249 192 3.86653e+015
+18 236 3.86207e+015
+49 159 3.84962e+015
+383 146 3.84417e+015
+122 127 3.84045e+015
+471 268 3.83809e+015
+150 231 3.83476e+015
+464 101 3.83354e+015
+145 187 3.82291e+015
+113 176 3.82272e+015
+546 140 3.81958e+015
+36 299 3.81833e+015
+332 334 3.81537e+015
+95 20 3.81157e+015
+507 203 3.81019e+015
+544 91 3.80651e+015
+57 331 3.8016e+015
+265 260 3.80116e+015
+332 415 3.79506e+015
+2 156 3.79171e+015
+358 161 3.79009e+015
+367 337 3.78073e+015
+512 43 3.77729e+015
+343 198 3.77449e+015
+211 153 3.76534e+015
+342 37 3.76389e+015
+192 172 3.76122e+015
+225 50 3.75795e+015
+436 182 3.75688e+015
+433 381 3.74897e+015
+447 350 3.73552e+015
+178 329 3.73149e+015
+197 148 3.72702e+015
+324 259 3.72636e+015
+190 349 3.72474e+015
+25 132 3.72371e+015
+538 39 3.72128e+015
+16 434 3.7152e+015
+182 344 3.71512e+015
+528 396 3.71222e+015
+157 306 3.70505e+015
+488 83 3.70464e+015
+500 474 3.70042e+015
+406 163 3.69373e+015
+97 148 3.69277e+015
+204 435 3.69175e+015
+251 153 3.67974e+015
+187 308 3.67608e+015
+330 259 3.67331e+015
+575 126 3.67169e+015
+161 238 3.67081e+015
+334 218 3.66822e+015
+73 186 3.66551e+015
+387 167 3.66515e+015
+450 22 3.66317e+015
+90 275 3.6563e+015
+53 357 3.65066e+015
+536 120 3.64996e+015
+269 61 3.64082e+015
+50 452 3.63631e+015
+256 181 3.63148e+015
+162 134 3.62862e+015
+129 310 3.61234e+015
+329 213 3.61062e+015
+190 277 3.60986e+015
+286 443 3.60292e+015
+236 222 3.59431e+015
+434 156 3.59112e+015
+401 181 3.58915e+015
+302 189 3.58734e+015
+344 165 3.58331e+015
+190 324 3.58292e+015
+39 239 3.57791e+015
+316 166 3.55357e+015
+326 14 3.55326e+015
+118 96 3.54883e+015
+274 77 3.54561e+015
+561 61 3.54523e+015
+56 145 3.54484e+015
+533 341 3.54206e+015
+118 181 3.53874e+015
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_5_7.txt b/test_data/harriscorners/hc_msc_5.00_0.04_5_7.txt
new file mode 100644
index 0000000..61a332d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_5_7.txt
@@ -0,0 +1,950 @@
+949
+244 94 1.71634e+017
+498 1 1.18825e+017
+421 180 9.36654e+016
+81 29 9.24614e+016
+237 20 8.97759e+016
+130 26 8.90595e+016
+272 366 8.39073e+016
+121 44 7.12838e+016
+75 257 6.60503e+016
+282 113 6.31336e+016
+80 4 6.1301e+016
+342 9 6.01663e+016
+261 298 5.99472e+016
+299 53 5.97594e+016
+509 124 5.92795e+016
+152 223 5.69227e+016
+363 400 5.67849e+016
+30 8 5.58886e+016
+424 322 5.57206e+016
+130 37 5.54974e+016
+83 77 5.46018e+016
+199 18 5.44919e+016
+542 14 5.25799e+016
+129 1 5.22786e+016
+330 128 5.13478e+016
+485 338 4.97401e+016
+138 204 4.95481e+016
+213 57 4.94543e+016
+253 12 4.93647e+016
+195 58 4.92834e+016
+34 139 4.91835e+016
+483 178 4.87234e+016
+528 24 4.85752e+016
+37 63 4.80184e+016
+361 294 4.77804e+016
+543 365 4.74466e+016
+102 222 4.66399e+016
+458 279 4.63903e+016
+482 22 4.62271e+016
+385 10 4.58272e+016
+476 261 4.571e+016
+302 184 4.56179e+016
+156 1 4.5114e+016
+103 60 4.50344e+016
+320 314 4.44035e+016
+175 110 4.43659e+016
+477 22 4.41942e+016
+65 344 4.37888e+016
+55 30 4.3383e+016
+321 225 4.33318e+016
+361 395 4.31306e+016
+295 15 4.289e+016
+58 218 4.25782e+016
+135 213 4.23628e+016
+428 2 4.23333e+016
+126 164 4.22744e+016
+36 145 4.21654e+016
+196 127 4.17182e+016
+554 41 4.14181e+016
+464 393 4.09885e+016
+243 201 4.0947e+016
+510 16 4.08494e+016
+400 263 4.05493e+016
+221 37 4.02878e+016
+258 385 3.99684e+016
+519 60 3.96577e+016
+359 129 3.95288e+016
+115 43 3.89012e+016
+164 215 3.88334e+016
+391 294 3.86609e+016
+71 26 3.85257e+016
+241 70 3.81524e+016
+436 68 3.76907e+016
+43 26 3.74828e+016
+469 239 3.71014e+016
+528 102 3.70197e+016
+211 436 3.69193e+016
+576 16 3.68946e+016
+209 20 3.67787e+016
+123 186 3.66369e+016
+126 254 3.6476e+016
+451 338 3.59772e+016
+215 71 3.59507e+016
+449 299 3.57175e+016
+33 100 3.56392e+016
+512 342 3.55679e+016
+359 334 3.55184e+016
+427 118 3.54997e+016
+447 261 3.54803e+016
+413 255 3.53797e+016
+12 217 3.5344e+016
+223 420 3.52862e+016
+262 441 3.5013e+016
+364 250 3.49004e+016
+543 167 3.48545e+016
+416 8 3.48447e+016
+210 450 3.46286e+016
+389 60 3.43815e+016
+226 37 3.41833e+016
+433 112 3.39469e+016
+55 290 3.38504e+016
+64 319 3.37751e+016
+367 144 3.37161e+016
+511 166 3.35903e+016
+403 120 3.34483e+016
+345 339 3.3138e+016
+470 421 3.31276e+016
+107 44 3.30835e+016
+58 6 3.2684e+016
+41 217 3.24344e+016
+328 296 3.23828e+016
+123 197 3.22981e+016
+92 213 3.2222e+016
+390 143 3.21241e+016
+490 1 3.21222e+016
+107 27 3.19632e+016
+111 240 3.19401e+016
+490 139 3.15514e+016
+7 10 3.15054e+016
+126 364 3.14261e+016
+129 75 3.14175e+016
+4 46 3.14103e+016
+47 98 3.13656e+016
+424 45 3.13304e+016
+143 324 3.12371e+016
+357 259 3.11228e+016
+60 40 3.10946e+016
+417 438 3.10606e+016
+272 280 3.10118e+016
+480 296 3.09729e+016
+225 181 3.09665e+016
+247 206 3.09459e+016
+545 59 3.08993e+016
+409 65 3.08974e+016
+448 398 3.08935e+016
+309 370 3.08468e+016
+486 58 3.06577e+016
+182 398 3.0646e+016
+386 178 3.05527e+016
+453 204 3.02726e+016
+183 36 3.01533e+016
+158 74 2.99296e+016
+352 321 2.99017e+016
+313 148 2.97286e+016
+302 215 2.97131e+016
+387 220 2.9532e+016
+155 235 2.94357e+016
+48 151 2.94025e+016
+61 203 2.90127e+016
+145 6 2.8815e+016
+562 478 2.87192e+016
+255 139 2.86797e+016
+404 183 2.86475e+016
+211 185 2.84488e+016
+208 222 2.84078e+016
+137 174 2.83235e+016
+174 40 2.81666e+016
+32 270 2.81484e+016
+326 141 2.80129e+016
+68 476 2.80056e+016
+546 41 2.79654e+016
+302 165 2.79533e+016
+301 105 2.78838e+016
+87 254 2.78628e+016
+88 148 2.77346e+016
+394 65 2.77062e+016
+36 173 2.76491e+016
+423 332 2.73868e+016
+413 163 2.73228e+016
+410 353 2.72843e+016
+160 142 2.72624e+016
+293 26 2.7193e+016
+329 258 2.71442e+016
+359 220 2.71329e+016
+499 159 2.70501e+016
+534 185 2.70369e+016
+10 101 2.7031e+016
+73 6 2.69288e+016
+165 240 2.6876e+016
+66 216 2.68057e+016
+139 109 2.67925e+016
+265 445 2.66818e+016
+150 306 2.66371e+016
+101 198 2.64915e+016
+220 17 2.64828e+016
+223 433 2.63973e+016
+112 392 2.63582e+016
+278 220 2.63258e+016
+100 79 2.62509e+016
+512 221 2.6177e+016
+310 6 2.61487e+016
+365 300 2.61377e+016
+269 70 2.61294e+016
+343 108 2.6126e+016
+243 166 2.61097e+016
+284 402 2.61065e+016
+260 223 2.60678e+016
+246 144 2.60219e+016
+379 5 2.59923e+016
+143 311 2.55785e+016
+508 454 2.54188e+016
+305 439 2.52446e+016
+107 39 2.523e+016
+286 209 2.51697e+016
+528 186 2.51386e+016
+83 134 2.51373e+016
+361 142 2.51286e+016
+236 348 2.50892e+016
+457 43 2.49552e+016
+477 5 2.49123e+016
+169 56 2.49071e+016
+40 296 2.48844e+016
+65 235 2.48577e+016
+202 313 2.48486e+016
+128 187 2.48477e+016
+94 6 2.47917e+016
+452 374 2.47874e+016
+252 423 2.47841e+016
+430 147 2.47473e+016
+234 161 2.47292e+016
+228 291 2.47278e+016
+232 127 2.47157e+016
+3 65 2.46991e+016
+261 202 2.46181e+016
+325 341 2.45956e+016
+392 218 2.45073e+016
+516 75 2.44791e+016
+168 288 2.44609e+016
+343 264 2.44452e+016
+60 184 2.443e+016
+314 84 2.44165e+016
+220 180 2.44142e+016
+565 42 2.44007e+016
+256 151 2.43883e+016
+91 197 2.43748e+016
+389 164 2.43361e+016
+280 368 2.42916e+016
+415 22 2.42204e+016
+365 105 2.42112e+016
+526 38 2.41777e+016
+172 19 2.41458e+016
+301 205 2.40926e+016
+168 326 2.40008e+016
+163 110 2.39532e+016
+248 399 2.39517e+016
+104 3 2.39046e+016
+191 127 2.37754e+016
+131 132 2.37698e+016
+406 198 2.37033e+016
+371 161 2.35793e+016
+251 365 2.3522e+016
+436 397 2.34992e+016
+534 242 2.34408e+016
+263 402 2.3318e+016
+462 43 2.32763e+016
+48 10 2.31471e+016
+544 457 2.30159e+016
+153 196 2.29993e+016
+388 16 2.29852e+016
+441 24 2.29773e+016
+552 381 2.26706e+016
+460 267 2.25876e+016
+521 184 2.25332e+016
+97 448 2.2531e+016
+133 96 2.24876e+016
+437 304 2.23814e+016
+548 162 2.23455e+016
+111 169 2.23085e+016
+29 30 2.22542e+016
+385 295 2.21533e+016
+326 165 2.21496e+016
+483 329 2.20441e+016
+326 89 2.2035e+016
+512 100 2.1995e+016
+389 21 2.19226e+016
+24 62 2.18904e+016
+380 354 2.18655e+016
+139 21 2.18058e+016
+112 344 2.175e+016
+125 259 2.17331e+016
+174 311 2.17123e+016
+259 165 2.16716e+016
+189 218 2.16509e+016
+498 225 2.15378e+016
+45 339 2.14903e+016
+389 65 2.1475e+016
+420 48 2.14733e+016
+541 124 2.14655e+016
+528 61 2.14058e+016
+218 106 2.13802e+016
+566 160 2.13609e+016
+287 297 2.13369e+016
+545 2 2.12953e+016
+513 262 2.12913e+016
+102 360 2.12747e+016
+362 7 2.11446e+016
+346 350 2.11073e+016
+206 436 2.10771e+016
+162 277 2.10543e+016
+85 1 2.10295e+016
+273 181 2.10209e+016
+176 260 2.10199e+016
+448 166 2.09708e+016
+329 10 2.09543e+016
+479 15 2.09319e+016
+217 147 2.08788e+016
+466 197 2.08769e+016
+140 182 2.0865e+016
+270 291 2.08503e+016
+208 15 2.08433e+016
+215 280 2.08121e+016
+168 196 2.08042e+016
+166 98 2.07818e+016
+121 52 2.07054e+016
+197 84 2.06407e+016
+412 45 2.06379e+016
+404 266 2.05976e+016
+69 149 2.05741e+016
+54 222 2.04989e+016
+377 120 2.04919e+016
+431 318 2.03836e+016
+63 60 2.0321e+016
+346 240 2.02645e+016
+561 225 2.01985e+016
+533 20 2.01194e+016
+557 463 2.00953e+016
+60 134 2.00737e+016
+426 376 2.00504e+016
+164 73 2.00364e+016
+525 424 2.00218e+016
+446 7 2.0015e+016
+508 6 2.00017e+016
+210 35 1.99768e+016
+355 254 1.99522e+016
+282 72 1.99478e+016
+378 67 1.98432e+016
+110 135 1.98027e+016
+298 274 1.97979e+016
+301 179 1.97963e+016
+260 236 1.96882e+016
+488 44 1.96409e+016
+79 40 1.96377e+016
+279 129 1.95775e+016
+165 179 1.95276e+016
+276 353 1.94523e+016
+102 164 1.9429e+016
+343 122 1.93986e+016
+274 132 1.92764e+016
+455 58 1.9223e+016
+455 85 1.92031e+016
+354 269 1.91978e+016
+265 30 1.91888e+016
+42 81 1.91343e+016
+481 84 1.91264e+016
+444 118 1.90852e+016
+165 357 1.9078e+016
+483 363 1.90434e+016
+283 198 1.90378e+016
+438 339 1.9012e+016
+432 276 1.89442e+016
+56 66 1.8937e+016
+52 42 1.89119e+016
+288 165 1.88114e+016
+145 16 1.88004e+016
+385 244 1.87804e+016
+562 461 1.8746e+016
+357 166 1.86962e+016
+575 178 1.86807e+016
+334 90 1.85883e+016
+414 65 1.85872e+016
+530 144 1.85824e+016
+394 163 1.85693e+016
+236 72 1.84437e+016
+325 426 1.84202e+016
+269 53 1.83866e+016
+190 360 1.83248e+016
+134 127 1.82999e+016
+176 165 1.828e+016
+300 264 1.82069e+016
+340 163 1.81169e+016
+418 82 1.80527e+016
+164 313 1.80441e+016
+222 112 1.80104e+016
+346 179 1.79974e+016
+429 44 1.79745e+016
+539 457 1.79121e+016
+392 48 1.78906e+016
+223 218 1.78899e+016
+193 215 1.78667e+016
+434 89 1.78546e+016
+248 316 1.78498e+016
+544 7 1.78338e+016
+516 17 1.78332e+016
+498 80 1.78193e+016
+88 368 1.78092e+016
+296 332 1.77847e+016
+283 395 1.77257e+016
+46 355 1.77091e+016
+57 365 1.76875e+016
+111 110 1.76873e+016
+493 81 1.76737e+016
+50 288 1.76515e+016
+467 140 1.76111e+016
+437 319 1.76061e+016
+271 167 1.75869e+016
+273 316 1.75306e+016
+110 94 1.75228e+016
+283 51 1.74207e+016
+173 239 1.74139e+016
+292 88 1.74043e+016
+126 95 1.7385e+016
+31 235 1.73257e+016
+174 95 1.72214e+016
+501 361 1.71597e+016
+66 26 1.71261e+016
+110 179 1.7109e+016
+379 337 1.70979e+016
+273 220 1.70834e+016
+539 98 1.70758e+016
+232 199 1.70405e+016
+421 165 1.70138e+016
+304 190 1.7005e+016
+247 219 1.6952e+016
+511 174 1.69498e+016
+442 239 1.68589e+016
+162 169 1.68414e+016
+227 186 1.68394e+016
+142 393 1.68305e+016
+132 71 1.68286e+016
+578 43 1.67912e+016
+58 75 1.67392e+016
+538 405 1.6699e+016
+487 263 1.66694e+016
+335 437 1.6625e+016
+237 417 1.66031e+016
+145 161 1.65982e+016
+445 123 1.65916e+016
+528 222 1.65913e+016
+276 331 1.65812e+016
+124 271 1.657e+016
+297 69 1.65615e+016
+381 123 1.65563e+016
+218 98 1.65398e+016
+448 218 1.65375e+016
+430 85 1.65375e+016
+196 190 1.65284e+016
+412 298 1.65283e+016
+541 209 1.65214e+016
+220 290 1.65028e+016
+403 277 1.64936e+016
+241 420 1.64657e+016
+521 264 1.6461e+016
+190 350 1.64482e+016
+278 143 1.62476e+016
+118 115 1.62196e+016
+378 107 1.62103e+016
+346 297 1.62041e+016
+373 83 1.61985e+016
+46 133 1.61905e+016
+86 61 1.61751e+016
+407 45 1.6162e+016
+541 133 1.60945e+016
+117 426 1.60651e+016
+523 346 1.6024e+016
+469 121 1.59926e+016
+221 151 1.5989e+016
+448 444 1.59656e+016
+250 34 1.59415e+016
+42 10 1.59387e+016
+346 276 1.59331e+016
+523 122 1.59157e+016
+35 30 1.58405e+016
+452 62 1.583e+016
+433 158 1.58225e+016
+463 27 1.58018e+016
+157 91 1.57998e+016
+313 77 1.57587e+016
+159 182 1.56871e+016
+273 295 1.56429e+016
+91 290 1.56116e+016
+61 370 1.55923e+016
+503 164 1.55324e+016
+451 438 1.55213e+016
+449 118 1.55148e+016
+373 392 1.55002e+016
+385 324 1.54962e+016
+158 96 1.54837e+016
+83 476 1.54637e+016
+363 180 1.53654e+016
+295 421 1.53433e+016
+107 429 1.53162e+016
+49 62 1.53159e+016
+237 130 1.53125e+016
+153 112 1.53019e+016
+528 362 1.52948e+016
+276 198 1.523e+016
+405 376 1.52214e+016
+514 203 1.52146e+016
+514 119 1.51797e+016
+181 20 1.50587e+016
+186 20 1.50584e+016
+139 99 1.50444e+016
+510 82 1.50365e+016
+196 132 1.50283e+016
+436 379 1.50123e+016
+328 64 1.50075e+016
+190 206 1.50019e+016
+537 394 1.49274e+016
+501 143 1.48941e+016
+244 293 1.48695e+016
+192 145 1.48667e+016
+164 115 1.48566e+016
+484 142 1.48362e+016
+345 391 1.48272e+016
+114 1 1.48211e+016
+357 66 1.48066e+016
+474 247 1.47973e+016
+88 207 1.47863e+016
+30 218 1.47804e+016
+387 124 1.47787e+016
+547 218 1.47618e+016
+357 11 1.47501e+016
+192 312 1.47081e+016
+158 112 1.47026e+016
+164 209 1.46854e+016
+405 82 1.46438e+016
+424 398 1.46201e+016
+450 87 1.46048e+016
+215 124 1.45955e+016
+120 128 1.45901e+016
+513 298 1.45853e+016
+387 5 1.45603e+016
+396 317 1.45409e+016
+574 421 1.44261e+016
+118 76 1.44226e+016
+575 459 1.44067e+016
+443 354 1.44006e+016
+102 236 1.43757e+016
+186 289 1.43678e+016
+502 22 1.4293e+016
+242 192 1.42795e+016
+155 56 1.42468e+016
+473 203 1.41971e+016
+204 160 1.41706e+016
+281 438 1.41559e+016
+418 284 1.4141e+016
+72 165 1.41274e+016
+340 391 1.41139e+016
+131 168 1.40835e+016
+41 355 1.40431e+016
+547 139 1.40389e+016
+102 28 1.39659e+016
+192 16 1.39587e+016
+94 257 1.39308e+016
+131 147 1.39014e+016
+264 16 1.38929e+016
+259 34 1.38924e+016
+119 447 1.38655e+016
+53 150 1.38329e+016
+124 2 1.37914e+016
+264 389 1.37788e+016
+498 459 1.37571e+016
+272 285 1.37302e+016
+128 127 1.37214e+016
+457 3 1.37177e+016
+562 146 1.37049e+016
+280 390 1.37047e+016
+437 240 1.36858e+016
+59 254 1.36856e+016
+67 254 1.36566e+016
+191 329 1.36377e+016
+388 96 1.3625e+016
+94 22 1.36089e+016
+550 58 1.35976e+016
+527 195 1.35835e+016
+489 341 1.35673e+016
+333 105 1.35615e+016
+478 403 1.35529e+016
+402 44 1.35429e+016
+529 400 1.35195e+016
+155 316 1.3509e+016
+478 243 1.34733e+016
+485 81 1.34456e+016
+306 364 1.34369e+016
+433 225 1.33795e+016
+279 136 1.33709e+016
+227 123 1.3361e+016
+437 280 1.33379e+016
+182 343 1.33338e+016
+351 146 1.3333e+016
+333 66 1.3316e+016
+363 369 1.33099e+016
+357 282 1.33036e+016
+185 132 1.33025e+016
+390 242 1.3298e+016
+446 24 1.32883e+016
+269 186 1.32739e+016
+335 218 1.32608e+016
+178 273 1.32488e+016
+330 213 1.32076e+016
+317 335 1.31948e+016
+86 311 1.3161e+016
+275 52 1.31607e+016
+471 212 1.31381e+016
+174 291 1.31082e+016
+55 145 1.30908e+016
+288 51 1.30409e+016
+295 269 1.30295e+016
+569 382 1.29942e+016
+328 181 1.29918e+016
+52 358 1.29574e+016
+563 323 1.295e+016
+476 341 1.29206e+016
+26 131 1.29186e+016
+70 96 1.29155e+016
+570 451 1.28999e+016
+290 139 1.28876e+016
+443 451 1.28848e+016
+454 102 1.28687e+016
+291 264 1.28611e+016
+77 269 1.28001e+016
+11 78 1.27504e+016
+542 139 1.27475e+016
+68 46 1.27463e+016
+68 419 1.27148e+016
+572 405 1.27024e+016
+190 278 1.26977e+016
+276 320 1.26765e+016
+346 47 1.26723e+016
+413 246 1.26719e+016
+355 24 1.265e+016
+333 202 1.26449e+016
+325 15 1.26296e+016
+190 109 1.26256e+016
+50 254 1.26062e+016
+421 298 1.258e+016
+335 390 1.25747e+016
+132 237 1.25595e+016
+332 413 1.25362e+016
+383 162 1.25113e+016
+333 334 1.24964e+016
+186 96 1.24827e+016
+497 66 1.24756e+016
+33 110 1.24727e+016
+365 336 1.24701e+016
+450 140 1.24319e+016
+259 391 1.24221e+016
+494 60 1.24104e+016
+412 470 1.24035e+016
+480 440 1.2394e+016
+572 161 1.23928e+016
+571 40 1.23801e+016
+468 203 1.23422e+016
+78 199 1.23329e+016
+276 360 1.2315e+016
+506 361 1.23147e+016
+379 181 1.2314e+016
+452 45 1.22952e+016
+281 204 1.22908e+016
+261 141 1.22903e+016
+84 215 1.22153e+016
+91 60 1.22134e+016
+46 221 1.21901e+016
+503 262 1.21794e+016
+421 141 1.21462e+016
+516 42 1.2137e+016
+91 376 1.21272e+016
+256 200 1.21256e+016
+481 451 1.21088e+016
+425 201 1.21061e+016
+385 260 1.2106e+016
+162 127 1.20603e+016
+371 89 1.20483e+016
+353 294 1.2047e+016
+543 440 1.2024e+016
+418 87 1.1989e+016
+437 391 1.19871e+016
+248 194 1.19848e+016
+537 93 1.19818e+016
+191 291 1.19281e+016
+91 276 1.19086e+016
+174 187 1.18974e+016
+183 381 1.1881e+016
+472 63 1.18468e+016
+524 399 1.18385e+016
+508 202 1.18071e+016
+572 446 1.18016e+016
+525 173 1.17616e+016
+189 324 1.17169e+016
+70 130 1.17105e+016
+371 105 1.17075e+016
+583 38 1.17062e+016
+111 262 1.16858e+016
+363 357 1.16741e+016
+104 306 1.16555e+016
+391 53 1.16511e+016
+18 343 1.16253e+016
+19 65 1.15973e+016
+578 81 1.1589e+016
+445 204 1.15612e+016
+382 26 1.15523e+016
+319 165 1.15096e+016
+337 367 1.15067e+016
+161 61 1.15029e+016
+513 380 1.15e+016
+486 375 1.14765e+016
+349 88 1.14708e+016
+85 38 1.13744e+016
+339 473 1.13742e+016
+574 140 1.13733e+016
+540 41 1.13713e+016
+216 175 1.13629e+016
+464 101 1.13447e+016
+529 160 1.12812e+016
+75 474 1.12735e+016
+100 257 1.12469e+016
+438 162 1.12469e+016
+136 136 1.12386e+016
+580 345 1.12374e+016
+258 250 1.12316e+016
+454 117 1.12264e+016
+199 111 1.12142e+016
+48 162 1.11961e+016
+578 52 1.11942e+016
+110 58 1.11929e+016
+222 87 1.11551e+016
+138 58 1.11157e+016
+106 182 1.11041e+016
+55 170 1.10797e+016
+298 398 1.10725e+016
+232 263 1.10544e+016
+258 107 1.1047e+016
+438 468 1.10372e+016
+160 21 1.10334e+016
+591 18 1.10295e+016
+340 446 1.10137e+016
+147 449 1.10038e+016
+574 330 1.09826e+016
+48 234 1.0958e+016
+77 234 1.09545e+016
+214 94 1.0946e+016
+37 200 1.09404e+016
+359 53 1.09376e+016
+358 241 1.09278e+016
+280 124 1.09245e+016
+97 28 1.09144e+016
+524 190 1.0898e+016
+569 422 1.08933e+016
+577 245 1.08792e+016
+400 168 1.08602e+016
+299 296 1.08584e+016
+534 79 1.08413e+016
+36 237 1.08363e+016
+118 4 1.08179e+016
+130 306 1.08078e+016
+328 105 1.08064e+016
+149 40 1.07893e+016
+258 368 1.07563e+016
+337 264 1.0745e+016
+209 419 1.07395e+016
+548 182 1.07222e+016
+473 42 1.07209e+016
+183 137 1.07132e+016
+264 310 1.07124e+016
+468 208 1.06964e+016
+506 61 1.06911e+016
+319 187 1.06633e+016
+110 326 1.06579e+016
+306 449 1.06524e+016
+419 258 1.0637e+016
+293 31 1.06357e+016
+253 74 1.06212e+016
+424 63 1.06075e+016
+455 162 1.05992e+016
+186 142 1.05942e+016
+289 348 1.05831e+016
+20 286 1.05772e+016
+189 307 1.05418e+016
+292 335 1.0533e+016
+310 446 1.05329e+016
+380 319 1.04915e+016
+566 180 1.04721e+016
+159 239 1.04625e+016
+163 252 1.04616e+016
+124 218 1.04595e+016
+353 338 1.0449e+016
+130 428 1.04274e+016
+282 419 1.04149e+016
+362 65 1.04098e+016
+533 342 1.04063e+016
+195 255 1.03992e+016
+220 212 1.03891e+016
+38 287 1.03802e+016
+130 478 1.03737e+016
+212 150 1.03529e+016
+178 330 1.03317e+016
+419 66 1.03166e+016
+17 434 1.02767e+016
+86 181 1.02732e+016
+22 48 1.02494e+016
+118 95 1.02443e+016
+462 224 1.02372e+016
+484 5 1.02325e+016
+483 204 1.02302e+016
+372 117 1.02241e+016
+362 244 1.02206e+016
+9 233 1.02166e+016
+20 317 1.02041e+016
+275 204 1.0185e+016
+459 304 1.01676e+016
+114 216 1.01356e+016
+86 374 1.01326e+016
+512 363 1.01201e+016
+28 66 1.00948e+016
+7 15 1.0088e+016
+1 383 1.0074e+016
+167 150 1.0008e+016
+83 171 9.98799e+015
+376 316 9.97966e+015
+43 406 9.97672e+015
+586 17 9.95991e+015
+306 259 9.95204e+015
+91 79 9.93994e+015
+150 398 9.92229e+015
+435 182 9.91894e+015
+217 425 9.89298e+015
+325 131 9.88565e+015
+383 413 9.8607e+015
+364 201 9.83388e+015
+471 269 9.82222e+015
+439 122 9.80215e+015
+402 143 9.79817e+015
+33 164 9.75871e+015
+432 270 9.74861e+015
+161 152 9.74792e+015
+302 330 9.74539e+015
+186 202 9.7435e+015
+169 105 9.73832e+015
+464 356 9.72644e+015
+445 243 9.72457e+015
+201 88 9.68337e+015
+218 128 9.67362e+015
+117 306 9.63725e+015
+172 272 9.63147e+015
+187 265 9.6132e+015
+220 315 9.61193e+015
+480 165 9.60704e+015
+9 32 9.59701e+015
+321 121 9.59123e+015
+368 109 9.58601e+015
+405 10 9.58241e+015
+190 132 9.56313e+015
+242 281 9.55708e+015
+247 107 9.55463e+015
+563 61 9.549e+015
+277 187 9.54437e+015
+371 338 9.53928e+015
+180 292 9.52544e+015
+343 463 9.52533e+015
+528 79 9.52483e+015
+154 295 9.49742e+015
+25 221 9.48946e+015
+72 408 9.47775e+015
+536 265 9.46159e+015
+109 146 9.44403e+015
+276 214 9.43642e+015
+343 200 9.3955e+015
+38 270 9.38897e+015
+523 78 9.37541e+015
+450 177 9.37236e+015
+527 429 9.36777e+015
+373 241 9.35479e+015
+261 71 9.32272e+015
+77 165 9.32182e+015
+268 242 9.30336e+015
+438 45 9.29372e+015
+479 286 9.2819e+015
+394 107 9.27468e+015
+533 397 9.27092e+015
+12 204 9.22523e+015
+421 291 9.21042e+015
+494 456 9.19596e+015
+235 220 9.18694e+015
+115 359 9.17031e+015
+447 376 9.16225e+015
+96 93 9.16066e+015
+28 136 9.15711e+015
+181 155 9.14541e+015
+329 25 9.14522e+015
+471 84 9.13127e+015
+534 97 9.12946e+015
+269 89 9.11953e+015
+461 162 9.11099e+015
+178 57 9.10686e+015
+309 32 9.09837e+015
+64 11 9.06259e+015
+345 166 9.04819e+015
+329 354 9.04305e+015
+463 219 9.0348e+015
+298 88 9.02812e+015
+336 443 9.0277e+015
+542 262 9.02566e+015
+272 145 9.0242e+015
+375 463 9.02056e+015
+42 122 9.01542e+015
+262 284 9.0154e+015
+534 121 8.98054e+015
+187 313 8.97814e+015
+242 58 8.97512e+015
+535 460 8.96452e+015
+336 62 8.95726e+015
+166 379 8.93831e+015
+309 54 8.93031e+015
+116 169 8.91012e+015
+270 108 8.90916e+015
+306 359 8.90687e+015
+258 133 8.90565e+015
+382 102 8.89639e+015
+154 447 8.89588e+015
+511 348 8.87586e+015
+481 373 8.86409e+015
+558 80 8.81929e+015
+552 78 8.79271e+015
+209 161 8.78675e+015
+142 449 8.7807e+015
+204 294 8.77985e+015
+321 11 8.77425e+015
+407 430 8.77181e+015
+549 223 8.75715e+015
+450 198 8.75281e+015
+455 141 8.7496e+015
+542 253 8.74436e+015
+119 161 8.73111e+015
+147 78 8.71789e+015
+51 453 8.71461e+015
+97 39 8.71109e+015
+408 140 8.704e+015
+262 397 8.70005e+015
+243 33 8.69318e+015
+158 310 8.69294e+015
+504 459 8.69231e+015
+495 474 8.692e+015
+562 18 8.69134e+015
+118 221 8.65786e+015
+66 306 8.64616e+015
+506 380 8.64613e+015
+291 311 8.62874e+015
+338 427 8.61482e+015
+111 338 8.58692e+015
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_7_3.txt b/test_data/harriscorners/hc_msc_5.00_0.04_7_3.txt
new file mode 100644
index 0000000..514c4b0
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_7_3.txt
@@ -0,0 +1,1018 @@
+1017
+245 94 1.94856e+020
+499 1 1.81721e+020
+273 366 1.51415e+020
+363 401 1.3623e+020
+282 115 1.03145e+020
+240 90 1.01341e+020
+251 13 9.90773e+019
+423 179 9.71754e+019
+65 343 9.09641e+019
+543 364 8.86213e+019
+449 298 8.73777e+019
+237 19 8.63556e+019
+507 122 8.40362e+019
+131 36 8.35743e+019
+122 44 8.19365e+019
+553 41 7.95278e+019
+426 320 7.85005e+019
+261 297 7.71658e+019
+520 61 7.62246e+019
+28 8 7.58288e+019
+196 57 7.50088e+019
+320 224 7.26692e+019
+465 394 7.24963e+019
+446 396 7.15217e+019
+37 61 7.10939e+019
+448 263 7.10212e+019
+200 17 7.06644e+019
+456 281 6.94799e+019
+82 27 6.91503e+019
+388 178 6.78018e+019
+233 15 6.74224e+019
+387 10 6.72745e+019
+344 10 6.69744e+019
+130 2 6.68939e+019
+223 38 6.47611e+019
+480 298 6.45288e+019
+2 47 6.38296e+019
+45 27 6.35654e+019
+34 138 6.3416e+019
+77 256 6.30893e+019
+418 440 6.29304e+019
+321 313 6.26197e+019
+526 60 6.201e+019
+183 401 6.15912e+019
+221 16 6.13466e+019
+59 219 6.12306e+019
+213 72 6.09042e+019
+72 24 6.07674e+019
+435 68 6.06794e+019
+299 52 6.02479e+019
+102 59 5.97668e+019
+483 24 5.92922e+019
+256 386 5.91818e+019
+390 58 5.89087e+019
+110 238 5.832e+019
+124 199 5.71215e+019
+264 440 5.64331e+019
+116 43 5.60986e+019
+361 131 5.46241e+019
+303 183 5.41839e+019
+144 309 5.38532e+019
+271 166 5.32864e+019
+242 203 5.31421e+019
+135 215 5.30437e+019
+132 26 5.29583e+019
+348 179 5.23431e+019
+462 279 5.19375e+019
+79 2 5.19137e+019
+4 66 5.19039e+019
+474 262 5.13483e+019
+483 339 5.13205e+019
+128 164 5.1119e+019
+92 198 5.09284e+019
+482 365 5.04977e+019
+479 19 5.032e+019
+412 256 5.00988e+019
+513 340 4.99645e+019
+412 162 4.96772e+019
+512 167 4.95884e+019
+359 260 4.95375e+019
+271 71 4.94348e+019
+425 376 4.90856e+019
+224 419 4.88734e+019
+385 221 4.84534e+019
+355 220 4.84436e+019
+102 4 4.82063e+019
+33 98 4.81932e+019
+411 355 4.80242e+019
+359 294 4.76875e+019
+535 242 4.76597e+019
+439 339 4.75628e+019
+378 354 4.74598e+019
+562 478 4.70332e+019
+136 202 4.68335e+019
+430 1 4.6789e+019
+360 336 4.65881e+019
+515 76 4.63677e+019
+545 168 4.6296e+019
+177 107 4.58436e+019
+228 292 4.57375e+019
+426 119 4.55122e+019
+167 287 4.52392e+019
+216 279 4.5157e+019
+524 20 4.51441e+019
+402 122 4.48561e+019
+127 76 4.45495e+019
+432 146 4.43269e+019
+250 363 4.4197e+019
+471 240 4.40441e+019
+509 18 4.40344e+019
+243 72 4.39746e+019
+182 111 4.34892e+019
+421 334 4.34852e+019
+407 64 4.33433e+019
+510 173 4.32916e+019
+310 371 4.30741e+019
+283 403 4.29906e+019
+214 56 4.24149e+019
+246 143 4.22138e+019
+92 214 4.19097e+019
+210 445 4.18543e+019
+498 82 4.173e+019
+58 183 4.1658e+019
+165 217 4.13433e+019
+392 144 4.13077e+019
+74 6 4.12429e+019
+184 35 4.12403e+019
+329 253 4.11889e+019
+35 146 4.11134e+019
+261 165 4.10435e+019
+432 112 4.10214e+019
+111 393 4.09173e+019
+151 307 4.08932e+019
+239 349 4.02648e+019
+41 297 3.95847e+019
+362 251 3.95439e+019
+100 221 3.95414e+019
+387 294 3.94515e+019
+101 78 3.93848e+019
+234 346 3.93784e+019
+225 221 3.92992e+019
+11 101 3.92351e+019
+293 15 3.91739e+019
+158 1 3.9056e+019
+138 111 3.90553e+019
+300 265 3.87624e+019
+366 144 3.81587e+019
+304 216 3.81405e+019
+271 279 3.8071e+019
+125 255 3.80255e+019
+452 337 3.80105e+019
+567 161 3.7836e+019
+87 148 3.7831e+019
+212 183 3.77927e+019
+64 235 3.77708e+019
+377 7 3.76633e+019
+434 398 3.75503e+019
+283 71 3.75226e+019
+382 8 3.73602e+019
+125 364 3.73587e+019
+566 43 3.72565e+019
+108 45 3.70119e+019
+65 214 3.67647e+019
+36 174 3.67405e+019
+510 455 3.67131e+019
+153 1 3.65993e+019
+528 98 3.63548e+019
+120 51 3.633e+019
+254 139 3.63272e+019
+327 341 3.63006e+019
+550 379 3.62741e+019
+527 24 3.61749e+019
+95 446 3.6086e+019
+542 18 3.60311e+019
+355 267 3.58569e+019
+452 376 3.58568e+019
+516 17 3.5847e+019
+346 392 3.58179e+019
+343 337 3.56667e+019
+312 149 3.54501e+019
+383 354 3.54127e+019
+158 143 3.53851e+019
+562 147 3.51238e+019
+326 426 3.50744e+019
+372 163 3.49535e+019
+417 7 3.48222e+019
+55 66 3.44946e+019
+474 23 3.42676e+019
+302 206 3.41174e+019
+170 19 3.40191e+019
+492 140 3.39903e+019
+287 296 3.39593e+019
+141 324 3.39078e+019
+475 4 3.37393e+019
+209 223 3.36698e+019
+364 297 3.3592e+019
+328 127 3.3553e+019
+422 44 3.32769e+019
+345 109 3.32229e+019
+208 451 3.31291e+019
+55 31 3.30921e+019
+250 33 3.30853e+019
+513 296 3.30266e+019
+153 222 3.29652e+019
+170 57 3.29221e+019
+176 39 3.28429e+019
+533 184 3.26476e+019
+395 260 3.26243e+019
+192 331 3.24127e+019
+348 241 3.22015e+019
+456 83 3.2199e+019
+219 291 3.21634e+019
+546 41 3.19852e+019
+236 130 3.19408e+019
+355 320 3.19379e+019
+513 223 3.17903e+019
+481 179 3.17394e+019
+465 197 3.16184e+019
+520 183 3.15075e+019
+239 421 3.14357e+019
+64 60 3.14165e+019
+166 96 3.1335e+019
+48 99 3.11993e+019
+338 164 3.11623e+019
+489 342 3.10851e+019
+66 321 3.1061e+019
+334 436 3.08483e+019
+173 312 3.07952e+019
+109 27 3.07937e+019
+503 360 3.06181e+019
+452 205 3.01259e+019
+248 403 3.00755e+019
+203 310 3.00152e+019
+472 63 3.00053e+019
+139 173 2.99438e+019
+417 24 2.99407e+019
+379 66 2.99317e+019
+512 125 2.99237e+019
+128 95 2.98739e+019
+70 147 2.9873e+019
+233 162 2.98399e+019
+57 364 2.97784e+019
+123 272 2.96202e+019
+577 15 2.949e+019
+329 66 2.94363e+019
+87 209 2.94337e+019
+449 219 2.93262e+019
+491 1 2.92892e+019
+482 327 2.92135e+019
+230 36 2.92039e+019
+277 352 2.91873e+019
+327 142 2.91603e+019
+56 5 2.91494e+019
+86 255 2.91236e+019
+540 13 2.89598e+019
+53 43 2.89096e+019
+49 153 2.88444e+019
+256 149 2.87722e+019
+546 57 2.86797e+019
+522 122 2.86614e+019
+47 10 2.8492e+019
+54 289 2.82999e+019
+527 39 2.82739e+019
+275 181 2.81526e+019
+219 35 2.81396e+019
+31 219 2.81289e+019
+406 375 2.80994e+019
+187 99 2.78989e+019
+147 21 2.78944e+019
+167 325 2.78555e+019
+344 263 2.77161e+019
+273 130 2.77005e+019
+477 12 2.76961e+019
+542 210 2.76792e+019
+86 77 2.76759e+019
+55 294 2.74568e+019
+163 276 2.725e+019
+22 61 2.71153e+019
+306 439 2.71022e+019
+264 445 2.69666e+019
+169 198 2.68987e+019
+545 4 2.68813e+019
+436 91 2.67232e+019
+174 238 2.67e+019
+387 243 2.66492e+019
+359 393 2.66404e+019
+480 261 2.65789e+019
+177 260 2.63712e+019
+64 371 2.629e+019
+508 7 2.62729e+019
+279 222 2.62591e+019
+91 292 2.62086e+019
+131 148 2.61995e+019
+294 25 2.61785e+019
+192 124 2.60632e+019
+46 147 2.60513e+019
+358 10 2.58769e+019
+158 56 2.57538e+019
+210 437 2.57076e+019
+582 17 2.56182e+019
+527 422 2.55542e+019
+403 188 2.54734e+019
+338 391 2.53063e+019
+191 359 2.51581e+019
+528 361 2.51344e+019
+37 288 2.50941e+019
+298 70 2.4992e+019
+331 295 2.49215e+019
+220 178 2.48895e+019
+192 219 2.48715e+019
+312 7 2.48706e+019
+69 478 2.48119e+019
+107 40 2.48005e+019
+497 228 2.47954e+019
+72 97 2.47663e+019
+197 82 2.4758e+019
+108 183 2.46777e+019
+105 199 2.464e+019
+512 98 2.45975e+019
+68 337 2.4439e+019
+365 7 2.44304e+019
+44 81 2.44074e+019
+42 339 2.43885e+019
+114 345 2.43358e+019
+286 209 2.43163e+019
+15 219 2.43011e+019
+220 100 2.42503e+019
+141 22 2.42496e+019
+360 217 2.41891e+019
+470 418 2.41609e+019
+376 119 2.40172e+019
+86 214 2.39753e+019
+259 201 2.39432e+019
+435 281 2.3935e+019
+164 242 2.39254e+019
+275 319 2.39004e+019
+36 269 2.37691e+019
+516 347 2.3719e+019
+314 82 2.36977e+019
+255 182 2.36956e+019
+356 128 2.36612e+019
+35 10 2.36284e+019
+28 236 2.35583e+019
+443 23 2.35481e+019
+158 138 2.35376e+019
+112 165 2.34711e+019
+18 342 2.33975e+019
+246 294 2.33834e+019
+301 166 2.3359e+019
+36 200 2.32994e+019
+525 345 2.32328e+019
+162 168 2.32036e+019
+256 35 2.31871e+019
+280 128 2.30157e+019
+224 183 2.2965e+019
+286 166 2.2952e+019
+244 164 2.29233e+019
+95 476 2.29222e+019
+140 184 2.2899e+019
+232 200 2.28944e+019
+39 406 2.28748e+019
+513 261 2.28718e+019
+576 178 2.27851e+019
+7 11 2.27115e+019
+259 221 2.26606e+019
+93 6 2.26516e+019
+345 351 2.26182e+019
+458 3 2.26119e+019
+254 422 2.25486e+019
+84 3 2.25239e+019
+488 263 2.25106e+019
+180 394 2.24831e+019
+541 99 2.24686e+019
+78 196 2.24327e+019
+103 359 2.23296e+019
+448 168 2.22667e+019
+358 143 2.22217e+019
+234 72 2.22217e+019
+422 397 2.22128e+019
+457 375 2.22113e+019
+389 97 2.21958e+019
+40 217 2.21407e+019
+41 10 2.21367e+019
+444 452 2.20384e+019
+278 145 2.19785e+019
+59 41 2.19572e+019
+367 247 2.18738e+019
+402 6 2.18221e+019
+486 182 2.18081e+019
+406 199 2.1804e+019
+290 264 2.17428e+019
+141 2 2.1739e+019
+542 130 2.15406e+019
+413 299 2.14876e+019
+526 223 2.14717e+019
+282 200 2.14365e+019
+382 411 2.14248e+019
+351 323 2.13942e+019
+317 148 2.13345e+019
+449 178 2.12753e+019
+84 476 2.12232e+019
+541 123 2.12197e+019
+558 40 2.12018e+019
+59 76 2.11898e+019
+352 147 2.11396e+019
+296 420 2.10393e+019
+100 199 2.10357e+019
+432 83 2.09874e+019
+178 164 2.09789e+019
+245 14 2.09522e+019
+113 213 2.09235e+019
+156 318 2.09144e+019
+157 73 2.08859e+019
+177 93 2.08395e+019
+528 142 2.08147e+019
+281 51 2.08037e+019
+300 177 2.07855e+019
+392 295 2.07508e+019
+272 53 2.07025e+019
+528 188 2.06338e+019
+110 96 2.05597e+019
+346 297 2.0503e+019
+273 297 2.04768e+019
+101 163 2.04655e+019
+146 160 2.04533e+019
+365 105 2.0401e+019
+183 19 2.03968e+019
+163 358 2.03648e+019
+429 223 2.03223e+019
+358 64 2.02666e+019
+289 137 2.01827e+019
+538 95 2.01378e+019
+136 128 2.01376e+019
+392 66 2.01336e+019
+162 74 2.00755e+019
+422 323 2.00717e+019
+46 219 2.00576e+019
+325 165 1.99911e+019
+137 208 1.9966e+019
+408 182 1.99654e+019
+81 77 1.99359e+019
+181 380 1.99164e+019
+136 21 1.99086e+019
+137 98 1.98352e+019
+114 428 1.97669e+019
+141 394 1.96775e+019
+230 266 1.96409e+019
+307 448 1.95651e+019
+484 59 1.95152e+019
+363 182 1.94975e+019
+82 136 1.94678e+019
+507 165 1.94388e+019
+57 372 1.93897e+019
+257 250 1.93449e+019
+198 130 1.9344e+019
+33 65 1.9285e+019
+528 104 1.92683e+019
+378 339 1.9256e+019
+205 162 1.92014e+019
+371 393 1.91203e+019
+221 432 1.91012e+019
+209 54 1.90748e+019
+267 30 1.90658e+019
+103 392 1.90461e+019
+306 192 1.89845e+019
+393 217 1.89574e+019
+331 131 1.8954e+019
+275 329 1.89447e+019
+520 263 1.89097e+019
+536 393 1.89076e+019
+389 140 1.89075e+019
+537 459 1.88861e+019
+187 263 1.88801e+019
+219 108 1.88509e+019
+428 181 1.88325e+019
+325 295 1.878e+019
+416 44 1.87574e+019
+260 142 1.87226e+019
+297 410 1.871e+019
+339 473 1.86776e+019
+191 56 1.86004e+019
+429 88 1.84915e+019
+259 71 1.84842e+019
+471 82 1.84435e+019
+413 4 1.83948e+019
+243 190 1.83398e+019
+362 370 1.8305e+019
+403 265 1.83027e+019
+381 26 1.82792e+019
+267 296 1.82741e+019
+167 180 1.82606e+019
+361 222 1.82564e+019
+584 38 1.8207e+019
+190 205 1.81692e+019
+149 39 1.81466e+019
+127 186 1.81457e+019
+303 103 1.81299e+019
+358 168 1.81266e+019
+290 49 1.81252e+019
+547 163 1.81172e+019
+116 184 1.81145e+019
+48 257 1.8095e+019
+329 9 1.80918e+019
+163 328 1.80849e+019
+344 197 1.80778e+019
+480 403 1.80437e+019
+571 448 1.80292e+019
+419 52 1.80241e+019
+568 382 1.80132e+019
+277 370 1.78965e+019
+80 38 1.78784e+019
+324 260 1.78652e+019
+351 271 1.78496e+019
+328 289 1.78269e+019
+163 207 1.77986e+019
+93 254 1.77939e+019
+306 362 1.77688e+019
+212 33 1.77529e+019
+248 205 1.77519e+019
+358 282 1.77516e+019
+109 136 1.77504e+019
+190 322 1.76647e+019
+131 476 1.7656e+019
+362 360 1.76275e+019
+418 68 1.74706e+019
+195 16 1.74668e+019
+342 123 1.74411e+019
+180 292 1.74382e+019
+39 83 1.74001e+019
+333 89 1.7373e+019
+117 76 1.73663e+019
+117 96 1.73331e+019
+597 272 1.73316e+019
+112 4 1.73061e+019
+565 463 1.72969e+019
+62 204 1.72512e+019
+506 203 1.71985e+019
+472 42 1.70951e+019
+514 382 1.70875e+019
+187 291 1.70767e+019
+341 88 1.70754e+019
+561 320 1.70338e+019
+336 8 1.69471e+019
+432 268 1.69131e+019
+371 89 1.68395e+019
+122 185 1.67004e+019
+436 390 1.66537e+019
+472 211 1.66327e+019
+475 342 1.66318e+019
+75 236 1.6553e+019
+110 264 1.65277e+019
+502 143 1.64805e+019
+391 448 1.64686e+019
+282 135 1.6466e+019
+408 45 1.64658e+019
+153 233 1.64612e+019
+155 196 1.64562e+019
+366 2 1.64322e+019
+398 169 1.64183e+019
+498 158 1.63803e+019
+438 303 1.63614e+019
+120 239 1.63364e+019
+560 81 1.63211e+019
+124 190 1.62594e+019
+500 224 1.61916e+019
+246 88 1.61895e+019
+45 407 1.61704e+019
+391 324 1.61583e+019
+390 19 1.61372e+019
+393 46 1.61363e+019
+420 81 1.61331e+019
+154 114 1.61078e+019
+374 241 1.60894e+019
+41 136 1.60836e+019
+62 133 1.60764e+019
+384 259 1.60656e+019
+51 61 1.6055e+019
+163 315 1.60167e+019
+120 4 1.59884e+019
+85 59 1.59864e+019
+292 311 1.59834e+019
+271 184 1.59796e+019
+483 83 1.5959e+019
+144 187 1.59407e+019
+28 28 1.59312e+019
+183 133 1.59056e+019
+573 423 1.58994e+019
+492 181 1.58969e+019
+279 362 1.58856e+019
+268 288 1.58586e+019
+461 221 1.5816e+019
+263 311 1.58151e+019
+275 197 1.57991e+019
+413 21 1.57903e+019
+216 175 1.57832e+019
+392 165 1.57732e+019
+489 42 1.57605e+019
+196 192 1.56958e+019
+262 391 1.56904e+019
+419 300 1.56714e+019
+424 203 1.56546e+019
+31 269 1.56078e+019
+138 57 1.56031e+019
+179 329 1.55457e+019
+131 255 1.55388e+019
+560 229 1.55257e+019
+236 221 1.54992e+019
+458 266 1.54957e+019
+297 331 1.54772e+019
+404 13 1.54721e+019
+260 273 1.54654e+019
+177 18 1.54568e+019
+579 41 1.54461e+019
+449 445 1.5444e+019
+470 4 1.54411e+019
+248 218 1.54298e+019
+507 59 1.54073e+019
+469 140 1.54038e+019
+430 44 1.53615e+019
+540 405 1.53531e+019
+316 428 1.53151e+019
+598 364 1.52957e+019
+247 317 1.52841e+019
+433 240 1.52337e+019
+342 464 1.52209e+019
+9 76 1.52036e+019
+203 257 1.51942e+019
+108 109 1.5189e+019
+137 138 1.51601e+019
+468 423 1.5158e+019
+156 93 1.51151e+019
+265 260 1.51033e+019
+172 112 1.50964e+019
+94 219 1.50623e+019
+45 62 1.50065e+019
+266 403 1.49938e+019
+124 261 1.49439e+019
+416 450 1.49138e+019
+539 40 1.48876e+019
+288 395 1.48859e+019
+333 412 1.48141e+019
+445 7 1.4803e+019
+370 107 1.47955e+019
+324 90 1.47324e+019
+172 449 1.47293e+019
+528 160 1.4729e+019
+287 33 1.47215e+019
+9 476 1.47021e+019
+545 217 1.46827e+019
+210 395 1.46525e+019
+542 457 1.46484e+019
+278 418 1.46466e+019
+119 25 1.45441e+019
+379 125 1.45383e+019
+219 316 1.44759e+019
+329 212 1.44256e+019
+261 34 1.43917e+019
+475 245 1.43394e+019
+475 161 1.43347e+019
+490 82 1.42849e+019
+91 389 1.42714e+019
+561 71 1.42649e+019
+441 98 1.42537e+019
+282 393 1.42287e+019
+450 91 1.421e+019
+464 24 1.41821e+019
+436 385 1.4166e+019
+204 435 1.41367e+019
+386 162 1.41155e+019
+210 16 1.40813e+019
+160 183 1.40779e+019
+471 268 1.40725e+019
+332 333 1.40448e+019
+583 345 1.40434e+019
+530 366 1.40071e+019
+439 455 1.40008e+019
+45 131 1.39916e+019
+505 381 1.3991e+019
+3 382 1.39825e+019
+511 43 1.39644e+019
+289 349 1.39559e+019
+446 340 1.39232e+019
+386 327 1.39025e+019
+39 355 1.38983e+019
+12 214 1.38982e+019
+44 121 1.38976e+019
+326 181 1.3856e+019
+440 64 1.38472e+019
+475 202 1.38082e+019
+336 317 1.37981e+019
+133 93 1.3786e+019
+168 309 1.37716e+019
+436 43 1.37584e+019
+526 398 1.37552e+019
+516 202 1.3724e+019
+190 146 1.36768e+019
+84 310 1.36676e+019
+270 62 1.36613e+019
+134 238 1.36324e+019
+260 368 1.36237e+019
+331 107 1.36158e+019
+213 123 1.35874e+019
+86 365 1.35812e+019
+217 126 1.35732e+019
+227 129 1.35432e+019
+407 162 1.35167e+019
+572 328 1.35156e+019
+406 142 1.34825e+019
+68 304 1.34819e+019
+75 132 1.34504e+019
+463 39 1.33977e+019
+574 39 1.33903e+019
+496 462 1.33632e+019
+243 210 1.33341e+019
+450 22 1.33271e+019
+231 126 1.33025e+019
+197 125 1.32808e+019
+46 354 1.32764e+019
+299 398 1.32726e+019
+513 402 1.32579e+019
+202 316 1.32541e+019
+365 200 1.32493e+019
+108 324 1.32328e+019
+210 154 1.32126e+019
+500 420 1.32111e+019
+464 161 1.32106e+019
+199 110 1.32053e+019
+103 305 1.3202e+019
+475 255 1.3192e+019
+391 52 1.3191e+019
+492 59 1.31658e+019
+321 10 1.31643e+019
+443 355 1.31615e+019
+127 27 1.31567e+019
+533 61 1.31535e+019
+316 107 1.31206e+019
+240 15 1.31174e+019
+500 23 1.31123e+019
+14 30 1.31119e+019
+398 358 1.31072e+019
+218 146 1.31013e+019
+133 78 1.30886e+019
+445 127 1.30629e+019
+382 336 1.3044e+019
+537 103 1.30411e+019
+30 135 1.30209e+019
+189 107 1.30056e+019
+73 164 1.30039e+019
+412 245 1.30027e+019
+3 155 1.29917e+019
+101 236 1.29669e+019
+326 13 1.29535e+019
+38 167 1.294e+019
+146 97 1.2929e+019
+70 255 1.2907e+019
+253 74 1.28803e+019
+287 342 1.28156e+019
+440 468 1.28148e+019
+129 309 1.27783e+019
+53 221 1.27492e+019
+274 76 1.27462e+019
+191 189 1.27461e+019
+396 104 1.27296e+019
+39 143 1.27085e+019
+106 77 1.26768e+019
+221 114 1.26652e+019
+115 306 1.26544e+019
+58 253 1.26431e+019
+100 95 1.26411e+019
+485 4 1.26394e+019
+569 39 1.26217e+019
+441 321 1.26192e+019
+558 462 1.26037e+019
+309 33 1.25994e+019
+492 456 1.2597e+019
+74 186 1.25956e+019
+500 264 1.25884e+019
+288 439 1.25671e+019
+148 131 1.25605e+019
+65 252 1.25593e+019
+398 265 1.25485e+019
+291 30 1.25413e+019
+479 451 1.2538e+019
+304 162 1.25333e+019
+371 82 1.25329e+019
+43 474 1.25303e+019
+189 214 1.2501e+019
+274 216 1.24983e+019
+127 41 1.24839e+019
+356 251 1.24685e+019
+296 89 1.24488e+019
+282 351 1.24364e+019
+124 161 1.24269e+019
+89 376 1.24214e+019
+168 150 1.24038e+019
+274 206 1.2391e+019
+358 53 1.23484e+019
+575 98 1.23216e+019
+246 106 1.23123e+019
+339 263 1.2309e+019
+500 318 1.22942e+019
+279 86 1.22876e+019
+122 216 1.2272e+019
+193 290 1.22622e+019
+378 316 1.22579e+019
+247 394 1.22272e+019
+240 196 1.22257e+019
+364 256 1.22102e+019
+18 236 1.21946e+019
+368 337 1.21625e+019
+404 260 1.21441e+019
+166 117 1.2137e+019
+85 197 1.2088e+019
+121 446 1.20835e+019
+65 363 1.20689e+019
+35 236 1.20405e+019
+184 318 1.20353e+019
+214 450 1.20326e+019
+532 19 1.20231e+019
+109 428 1.20221e+019
+57 168 1.20218e+019
+197 148 1.20046e+019
+335 445 1.20038e+019
+525 381 1.19939e+019
+184 94 1.19781e+019
+160 430 1.1963e+019
+258 131 1.19484e+019
+350 86 1.19174e+019
+531 398 1.19083e+019
+541 62 1.19053e+019
+433 303 1.18936e+019
+251 152 1.18651e+019
+533 340 1.18519e+019
+462 45 1.1842e+019
+64 276 1.18399e+019
+267 52 1.18311e+019
+20 219 1.18142e+019
+380 180 1.1813e+019
+317 385 1.18054e+019
+133 65 1.1789e+019
+390 420 1.17656e+019
+362 101 1.17617e+019
+575 126 1.17474e+019
+412 220 1.17184e+019
+320 119 1.1706e+019
+59 60 1.17022e+019
+88 354 1.16575e+019
+128 128 1.16566e+019
+104 430 1.16467e+019
+70 130 1.16366e+019
+546 261 1.16322e+019
+386 126 1.1614e+019
+559 271 1.15983e+019
+113 356 1.15833e+019
+109 340 1.15689e+019
+402 276 1.1565e+019
+256 405 1.15631e+019
+193 171 1.1537e+019
+49 453 1.15251e+019
+516 120 1.15216e+019
+375 1 1.14978e+019
+533 122 1.14958e+019
+157 40 1.14825e+019
+384 146 1.14512e+019
+449 403 1.14476e+019
+272 241 1.14269e+019
+434 156 1.14248e+019
+293 334 1.14244e+019
+387 167 1.14183e+019
+148 3 1.13924e+019
+159 112 1.13913e+019
+261 287 1.13881e+019
+142 179 1.138e+019
+297 181 1.13773e+019
+399 298 1.13731e+019
+551 385 1.1357e+019
+243 32 1.13337e+019
+241 59 1.1274e+019
+544 91 1.12612e+019
+95 20 1.12445e+019
+117 360 1.12293e+019
+540 140 1.12137e+019
+203 293 1.11798e+019
+83 404 1.11756e+019
+314 75 1.11265e+019
+156 307 1.11196e+019
+561 60 1.1113e+019
+386 63 1.10985e+019
+57 332 1.10643e+019
+447 351 1.10594e+019
+333 216 1.10524e+019
+67 47 1.10421e+019
+361 331 1.10349e+019
+440 121 1.10267e+019
+131 73 1.1021e+019
+21 132 1.10101e+019
+39 24 1.1006e+019
+260 231 1.09988e+019
+71 410 1.09823e+019
+316 167 1.09607e+019
+396 161 1.09529e+019
+429 340 1.09507e+019
+113 175 1.09414e+019
+232 177 1.09245e+019
+571 456 1.09065e+019
+94 94 1.08954e+019
+527 80 1.08925e+019
+16 435 1.08902e+019
+49 159 1.0887e+019
+220 210 1.08846e+019
+232 274 1.08846e+019
+569 420 1.08817e+019
+211 21 1.088e+019
+356 256 1.08683e+019
+449 437 1.08555e+019
+95 374 1.08547e+019
+85 178 1.08499e+019
+207 417 1.08315e+019
+394 222 1.08264e+019
+347 120 1.08254e+019
+84 289 1.08175e+019
+448 138 1.08145e+019
+153 217 1.07972e+019
+179 274 1.07796e+019
+220 151 1.07688e+019
+572 142 1.07606e+019
+447 244 1.07449e+019
+229 347 1.0741e+019
+346 341 1.07232e+019
+297 296 1.07108e+019
+215 426 1.0706e+019
+223 312 1.07034e+019
+224 398 1.06999e+019
+538 263 1.06981e+019
+400 319 1.06798e+019
+438 239 1.06779e+019
+530 426 1.06572e+019
+18 319 1.06497e+019
+222 239 1.06472e+019
+211 94 1.06322e+019
+258 237 1.06241e+019
+250 313 1.06104e+019
+247 346 1.0606e+019
+416 86 1.06023e+019
+399 67 1.05783e+019
+268 19 1.0519e+019
+403 180 1.05059e+019
+262 216 1.04933e+019
+160 98 1.0473e+019
+433 319 1.04534e+019
+164 202 1.04526e+019
+2 435 1.04478e+019
+564 16 1.04431e+019
+356 341 1.04375e+019
+546 140 1.04276e+019
+509 361 1.04182e+019
+345 48 1.04075e+019
+326 353 1.03989e+019
+400 431 1.03916e+019
+164 18 1.03792e+019
+148 398 1.03762e+019
+550 222 1.03655e+019
+570 408 1.03411e+019
+464 241 1.03321e+019
+233 296 1.03235e+019
+272 414 1.0315e+019
+540 165 1.02956e+019
+503 179 1.02453e+019
+164 380 1.02086e+019
+23 322 1.01964e+019
+579 52 1.01912e+019
+78 271 1.01711e+019
+63 8 1.01669e+019
+122 127 1.0166e+019
+88 183 1.01576e+019
+43 86 1.01465e+019
+272 91 1.01372e+019
+143 141 1.01357e+019
+336 298 1.01331e+019
+545 438 1.01311e+019
+454 115 1.01199e+019
+455 179 1.01191e+019
+405 337 1.01136e+019
+146 452 1.01125e+019
+240 366 1.00891e+019
+569 183 1.00864e+019
+309 356 1.00845e+019
+168 422 1.00843e+019
+278 263 1.00773e+019
+262 319 1.00746e+019
+96 125 1.00562e+019
+34 112 1.00455e+019
+546 182 1.00354e+019
+500 42 1.00317e+019
+365 85 1.00193e+019
+213 62 1.00167e+019
+446 376 1.00131e+019
+179 153 1.00094e+019
+431 275 1.00065e+019
+275 457 9.97808e+018
+117 115 9.96382e+018
+524 172 9.94956e+018
+472 453 9.93632e+018
+561 223 9.93205e+018
+221 339 9.92774e+018
+102 42 9.92394e+018
+316 336 9.89568e+018
+512 350 9.86554e+018
+318 460 9.84364e+018
+167 431 9.84012e+018
+377 461 9.83817e+018
+420 283 9.83576e+018
+243 273 9.80973e+018
+566 177 9.80345e+018
+336 426 9.79207e+018
+516 141 9.77562e+018
+285 443 9.74608e+018
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_7_5.txt b/test_data/harriscorners/hc_msc_5.00_0.04_7_5.txt
new file mode 100644
index 0000000..8b3da05
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_7_5.txt
@@ -0,0 +1,642 @@
+641
+244 94 1.87775e+021
+273 365 9.26061e+020
+423 178 8.16558e+020
+237 19 8.14972e+020
+362 400 7.87473e+020
+261 297 7.0927e+020
+82 28 7.01247e+020
+543 365 6.52354e+020
+27 9 6.35072e+020
+65 343 6.26293e+020
+76 257 6.17333e+020
+131 26 6.16091e+020
+281 113 6.12302e+020
+195 58 5.65501e+020
+465 393 5.63954e+020
+252 13 5.61907e+020
+320 224 5.55213e+020
+37 62 5.28994e+020
+240 91 5.28307e+020
+343 9 5.24211e+020
+58 218 5.18074e+020
+386 10 4.89463e+020
+131 36 4.86489e+020
+448 297 4.81101e+020
+127 164 4.80108e+020
+526 24 4.75043e+020
+360 295 4.67175e+020
+81 2 4.54872e+020
+200 17 4.50611e+020
+138 203 4.5036e+020
+427 320 4.50185e+020
+33 99 4.42955e+020
+447 397 4.30616e+020
+519 61 4.29201e+020
+483 23 4.27497e+020
+510 124 4.22015e+020
+233 15 4.16205e+020
+128 2 4.14804e+020
+102 59 4.11714e+020
+418 439 4.097e+020
+553 40 4.01707e+020
+214 72 3.98799e+020
+35 138 3.97414e+020
+299 52 3.95271e+020
+320 313 3.94701e+020
+448 262 3.94052e+020
+257 386 3.93401e+020
+294 15 3.91516e+020
+124 198 3.89216e+020
+152 222 3.88953e+020
+484 339 3.87805e+020
+243 202 3.84311e+020
+116 44 3.84127e+020
+452 339 3.83953e+020
+480 297 3.83135e+020
+511 167 3.75663e+020
+387 178 3.74741e+020
+358 260 3.73301e+020
+263 441 3.72788e+020
+475 262 3.69975e+020
+242 71 3.68716e+020
+302 185 3.68508e+020
+433 112 3.66965e+020
+73 24 3.6321e+020
+225 420 3.62557e+020
+456 280 3.61553e+020
+122 43 3.61075e+020
+45 27 3.60049e+020
+338 12 3.58776e+020
+35 145 3.50525e+020
+390 61 3.49165e+020
+513 341 3.43054e+020
+101 222 3.40617e+020
+214 56 3.37947e+020
+477 20 3.37136e+020
+222 38 3.3454e+020
+216 279 3.30839e+020
+181 111 3.30427e+020
+462 279 3.21975e+020
+308 371 3.21167e+020
+426 119 3.20455e+020
+544 168 3.199e+020
+74 6 3.18851e+020
+435 69 3.18818e+020
+325 341 3.18272e+020
+138 110 3.16442e+020
+167 287 3.13054e+020
+134 214 3.10894e+020
+483 178 3.10019e+020
+183 400 3.09493e+020
+4 66 3.06705e+020
+360 131 3.05749e+020
+508 16 3.04589e+020
+175 109 3.04268e+020
+55 290 3.0272e+020
+10 101 3.00663e+020
+2 47 2.99572e+020
+356 220 2.98396e+020
+65 215 2.98135e+020
+125 364 2.93716e+020
+60 41 2.90969e+020
+302 215 2.88616e+020
+343 338 2.87605e+020
+411 354 2.86548e+020
+421 335 2.82097e+020
+142 324 2.81051e+020
+413 162 2.79227e+020
+362 251 2.78542e+020
+390 295 2.77918e+020
+365 144 2.77091e+020
+112 392 2.75828e+020
+55 29 2.74843e+020
+283 403 2.74176e+020
+92 214 2.7408e+020
+88 148 2.7379e+020
+533 184 2.73678e+020
+163 216 2.70517e+020
+270 70 2.70009e+020
+104 198 2.70008e+020
+283 72 2.67898e+020
+409 64 2.67764e+020
+111 239 2.67515e+020
+145 310 2.66802e+020
+108 27 2.66545e+020
+234 346 2.66455e+020
+169 57 2.66067e+020
+425 377 2.64496e+020
+526 60 2.644e+020
+220 16 2.63235e+020
+120 51 2.62955e+020
+566 43 2.61637e+020
+57 4 2.61375e+020
+40 296 2.60985e+020
+92 198 2.6009e+020
+327 142 2.59315e+020
+471 240 2.5894e+020
+96 446 2.57589e+020
+429 3 2.57093e+020
+13 218 2.56938e+020
+371 162 2.55962e+020
+440 339 2.55881e+020
+404 121 2.54989e+020
+515 76 2.54865e+020
+387 220 2.5433e+020
+329 128 2.52802e+020
+545 41 2.52213e+020
+431 147 2.51533e+020
+150 307 2.51108e+020
+86 255 2.50307e+020
+195 127 2.49685e+020
+509 455 2.48187e+020
+123 185 2.47869e+020
+309 7 2.46744e+020
+412 256 2.4653e+020
+125 254 2.46169e+020
+84 77 2.45632e+020
+490 140 2.45429e+020
+329 253 2.45231e+020
+360 337 2.44291e+020
+62 203 2.44068e+020
+272 280 2.43139e+020
+171 18 2.42654e+020
+391 144 2.42545e+020
+579 16 2.42533e+020
+482 366 2.41869e+020
+210 451 2.41467e+020
+516 17 2.40996e+020
+261 165 2.40817e+020
+36 173 2.39987e+020
+95 477 2.39628e+020
+404 187 2.39013e+020
+220 290 2.37926e+020
+347 241 2.36741e+020
+139 173 2.3469e+020
+434 398 2.31864e+020
+64 60 2.31209e+020
+351 321 2.30767e+020
+497 81 2.29722e+020
+32 66 2.29428e+020
+6 11 2.29319e+020
+50 12 2.28923e+020
+260 222 2.28869e+020
+470 421 2.27353e+020
+174 40 2.27316e+020
+108 46 2.2729e+020
+355 268 2.26267e+020
+510 173 2.25745e+020
+250 364 2.25133e+020
+378 7 2.23868e+020
+55 66 2.23431e+020
+41 217 2.23147e+020
+65 319 2.22501e+020
+528 98 2.22445e+020
+68 149 2.22321e+020
+230 36 2.21814e+020
+417 23 2.20529e+020
+476 5 2.20518e+020
+334 436 2.20251e+020
+542 210 2.20241e+020
+527 39 2.19224e+020
+302 165 2.19095e+020
+163 277 2.18942e+020
+417 8 2.18857e+020
+348 179 2.17365e+020
+422 48 2.16983e+020
+64 236 2.16906e+020
+482 328 2.15054e+020
+545 4 2.14951e+020
+102 4 2.14854e+020
+159 138 2.14561e+020
+535 243 2.14515e+020
+35 9 2.13521e+020
+210 435 2.13136e+020
+48 99 2.12119e+020
+246 399 2.10678e+020
+252 423 2.10005e+020
+168 197 2.08509e+020
+408 182 2.08118e+020
+210 446 2.07542e+020
+177 260 2.07155e+020
+344 107 2.06943e+020
+543 15 2.06508e+020
+545 59 2.06326e+020
+489 342 2.06288e+020
+302 205 2.06005e+020
+270 166 2.0597e+020
+278 222 2.05907e+020
+246 206 2.05743e+020
+58 364 2.04678e+020
+344 263 2.04474e+020
+515 347 2.0434e+020
+378 354 2.0419e+020
+57 183 2.0329e+020
+254 138 2.02706e+020
+42 339 2.02449e+020
+448 168 2.0228e+020
+66 477 2.01332e+020
+365 105 2.01101e+020
+211 185 2.00583e+020
+393 66 1.97855e+020
+250 33 1.97465e+020
+164 327 1.96984e+020
+228 292 1.96838e+020
+526 423 1.9647e+020
+326 425 1.95502e+020
+78 79 1.95493e+020
+300 265 1.94309e+020
+48 151 1.93804e+020
+395 261 1.92061e+020
+345 350 1.9201e+020
+386 243 1.89624e+020
+453 206 1.88936e+020
+520 184 1.88769e+020
+127 76 1.88422e+020
+238 349 1.88349e+020
+100 78 1.88201e+020
+231 125 1.88151e+020
+184 35 1.86509e+020
+68 337 1.86447e+020
+466 196 1.85878e+020
+192 219 1.85554e+020
+236 130 1.85495e+020
+406 198 1.84754e+020
+209 20 1.84609e+020
+276 352 1.84179e+020
+226 221 1.83707e+020
+541 124 1.83186e+020
+245 143 1.81777e+020
+160 143 1.812e+020
+513 296 1.81007e+020
+219 107 1.80024e+020
+332 295 1.78061e+020
+157 196 1.77829e+020
+95 6 1.77319e+020
+346 392 1.77187e+020
+53 43 1.76783e+020
+163 74 1.76695e+020
+485 59 1.76638e+020
+221 432 1.76414e+020
+512 262 1.76027e+020
+133 93 1.74567e+020
+314 83 1.74423e+020
+413 299 1.73132e+020
+452 376 1.72838e+020
+286 210 1.72687e+020
+123 272 1.7189e+020
+234 162 1.71338e+020
+509 8 1.70924e+020
+46 355 1.70684e+020
+156 317 1.70629e+020
+363 7 1.70338e+020
+31 270 1.70071e+020
+311 150 1.69621e+020
+562 146 1.68545e+020
+243 165 1.68073e+020
+498 159 1.67314e+020
+358 10 1.67093e+020
+224 182 1.66195e+020
+551 381 1.66178e+020
+328 65 1.65681e+020
+275 329 1.65327e+020
+46 82 1.64542e+020
+166 97 1.6434e+020
+512 99 1.64139e+020
+449 445 1.64069e+020
+102 359 1.63616e+020
+18 343 1.63479e+020
+85 214 1.63289e+020
+488 263 1.63051e+020
+379 66 1.62928e+020
+360 143 1.62776e+020
+141 394 1.61996e+020
+325 164 1.61655e+020
+154 236 1.61582e+020
+530 144 1.61551e+020
+140 23 1.61435e+020
+158 56 1.60626e+020
+457 43 1.60623e+020
+272 53 1.60096e+020
+423 398 1.60083e+020
+239 421 1.59334e+020
+377 119 1.59331e+020
+61 134 1.58752e+020
+127 95 1.58747e+020
+512 222 1.58598e+020
+256 149 1.58408e+020
+361 221 1.58148e+020
+358 64 1.58097e+020
+528 189 1.58064e+020
+547 164 1.57836e+020
+108 39 1.5776e+020
+360 394 1.57615e+020
+41 10 1.57606e+020
+265 31 1.57318e+020
+45 62 1.56582e+020
+565 160 1.5565e+020
+489 43 1.55609e+020
+293 26 1.55428e+020
+531 102 1.55362e+020
+446 7 1.55254e+020
+527 361 1.54661e+020
+543 457 1.54447e+020
+30 219 1.54426e+020
+476 341 1.54298e+020
+279 128 1.53925e+020
+191 124 1.53747e+020
+366 247 1.53419e+020
+558 462 1.53346e+020
+330 9 1.52843e+020
+87 209 1.52645e+020
+79 197 1.51776e+020
+275 319 1.51759e+020
+92 292 1.51453e+020
+141 1 1.50727e+020
+164 358 1.50168e+020
+436 304 1.49982e+020
+192 330 1.49769e+020
+113 345 1.49671e+020
+537 393 1.49286e+020
+471 212 1.49212e+020
+57 373 1.47561e+020
+456 84 1.47271e+020
+523 123 1.47244e+020
+502 361 1.47199e+020
+287 166 1.46949e+020
+157 73 1.4672e+020
+77 41 1.46344e+020
+350 145 1.46221e+020
+374 393 1.46005e+020
+325 294 1.45689e+020
+449 219 1.45356e+020
+187 289 1.45341e+020
+338 165 1.45193e+020
+384 260 1.45043e+020
+371 90 1.44957e+020
+286 296 1.44953e+020
+245 294 1.4494e+020
+207 224 1.44885e+020
+36 201 1.44878e+020
+166 244 1.44802e+020
+542 129 1.44601e+020
+539 405 1.44525e+020
+291 50 1.44394e+020
+135 129 1.44188e+020
+498 225 1.44154e+020
+191 358 1.44104e+020
+71 96 1.43934e+020
+405 375 1.43842e+020
+278 144 1.43187e+020
+202 314 1.43164e+020
+298 69 1.42962e+020
+28 29 1.42468e+020
+196 83 1.42277e+020
+356 255 1.42149e+020
+346 298 1.42142e+020
+64 371 1.41902e+020
+444 119 1.41895e+020
+182 380 1.40929e+020
+247 316 1.40787e+020
+576 177 1.40333e+020
+306 440 1.40295e+020
+84 145 1.40202e+020
+144 6 1.40134e+020
+430 45 1.40018e+020
+358 282 1.39416e+020
+475 246 1.39241e+020
+471 63 1.39226e+020
+429 223 1.3889e+020
+220 100 1.37499e+020
+478 402 1.37346e+020
+584 38 1.37307e+020
+471 83 1.37246e+020
+469 140 1.37061e+020
+519 264 1.36667e+020
+362 369 1.36495e+020
+393 164 1.36108e+020
+180 394 1.35529e+020
+161 168 1.35365e+020
+387 16 1.35307e+020
+472 42 1.35229e+020
+444 452 1.34998e+020
+436 320 1.34542e+020
+84 476 1.34527e+020
+333 91 1.3408e+020
+435 281 1.33818e+020
+427 182 1.33668e+020
+273 131 1.33378e+020
+116 428 1.33301e+020
+449 437 1.33037e+020
+290 137 1.32669e+020
+403 265 1.32117e+020
+21 61 1.32112e+020
+228 185 1.319e+020
+501 143 1.31796e+020
+393 216 1.31368e+020
+263 403 1.31294e+020
+138 98 1.31067e+020
+59 78 1.30336e+020
+262 201 1.30032e+020
+140 182 1.2978e+020
+174 238 1.29755e+020
+408 45 1.29145e+020
+109 96 1.29097e+020
+418 80 1.29021e+020
+291 265 1.28846e+020
+471 268 1.28679e+020
+244 14 1.28556e+020
+131 148 1.28439e+020
+118 75 1.2838e+020
+146 21 1.28273e+020
+37 287 1.28205e+020
+168 180 1.28134e+020
+541 100 1.27718e+020
+414 4 1.27702e+020
+339 391 1.27688e+020
+578 42 1.27264e+020
+573 422 1.27187e+020
+297 331 1.27111e+020
+383 354 1.26871e+020
+273 296 1.26356e+020
+221 177 1.26316e+020
+389 97 1.26086e+020
+276 180 1.25934e+020
+82 135 1.25352e+020
+571 450 1.25237e+020
+463 23 1.2503e+020
+435 90 1.246e+020
+101 164 1.24425e+020
+38 168 1.24261e+020
+432 276 1.24243e+020
+193 17 1.2417e+020
+390 325 1.241e+020
+256 35 1.23399e+020
+402 6 1.23293e+020
+163 315 1.23289e+020
+349 87 1.23077e+020
+258 161 1.23072e+020
+191 55 1.22957e+020
+455 59 1.22747e+020
+211 15 1.22706e+020
+205 160 1.22659e+020
+160 183 1.22137e+020
+69 420 1.2211e+020
+120 447 1.21927e+020
+478 13 1.21908e+020
+334 218 1.21894e+020
+109 137 1.21386e+020
+442 23 1.2131e+020
+270 185 1.21279e+020
+39 83 1.20884e+020
+434 225 1.20829e+020
+195 190 1.20471e+020
+187 264 1.20458e+020
+297 410 1.20349e+020
+491 59 1.20289e+020
+425 203 1.20114e+020
+306 363 1.20103e+020
+459 303 1.19952e+020
+307 449 1.19734e+020
+233 200 1.19525e+020
+283 395 1.19446e+020
+569 383 1.19195e+020
+111 111 1.18958e+020
+328 89 1.18951e+020
+210 36 1.1829e+020
+191 205 1.18213e+020
+463 40 1.18165e+020
+173 312 1.17781e+020
+88 368 1.17776e+020
+364 181 1.16774e+020
+565 463 1.16612e+020
+526 346 1.16361e+020
+108 183 1.16158e+020
+433 241 1.1589e+020
+488 83 1.15653e+020
+73 164 1.15482e+020
+363 358 1.15111e+020
+51 61 1.15033e+020
+107 428 1.14345e+020
+180 292 1.14278e+020
+514 382 1.14205e+020
+381 26 1.1381e+020
+431 82 1.12859e+020
+162 111 1.12812e+020
+264 311 1.12673e+020
+338 263 1.11735e+020
+154 114 1.11411e+020
+215 175 1.1139e+020
+483 143 1.11274e+020
+259 368 1.1108e+020
+187 99 1.10997e+020
+177 164 1.10992e+020
+432 269 1.10851e+020
+326 181 1.10802e+020
+500 265 1.10619e+020
+53 221 1.10618e+020
+83 72 1.10523e+020
+130 255 1.09897e+020
+199 131 1.0969e+020
+419 53 1.09624e+020
+118 115 1.09506e+020
+183 19 1.09099e+020
+173 116 1.08798e+020
+382 412 1.08746e+020
+9 77 1.08401e+020
+90 376 1.08391e+020
+163 208 1.08319e+020
+41 136 1.08277e+020
+449 178 1.08091e+020
+20 317 1.08034e+020
+39 355 1.07918e+020
+130 476 1.07872e+020
+220 150 1.0774e+020
+390 49 1.07595e+020
+527 222 1.07548e+020
+354 295 1.07508e+020
+294 269 1.07084e+020
+559 80 1.0698e+020
+514 121 1.06766e+020
+338 473 1.06656e+020
+284 199 1.06603e+020
+328 214 1.06495e+020
+501 22 1.06398e+020
+485 4 1.06253e+020
+179 329 1.06219e+020
+31 135 1.06128e+020
+341 123 1.05795e+020
+458 3 1.05503e+020
+46 218 1.05261e+020
+110 263 1.05234e+020
+391 449 1.04973e+020
+209 395 1.04827e+020
+275 197 1.04228e+020
+152 196 1.0411e+020
+109 169 1.04017e+020
+435 163 1.03991e+020
+402 45 1.03938e+020
+106 77 1.03617e+020
+462 221 1.03593e+020
+190 312 1.03337e+020
+493 181 1.02479e+020
+130 72 1.02227e+020
+460 267 1.02165e+020
+268 289 1.01798e+020
+481 451 1.01648e+020
+561 320 1.01603e+020
+191 146 1.01572e+020
+376 181 1.01416e+020
+34 31 1.01185e+020
+536 459 1.01168e+020
+344 48 1.00634e+020
+29 236 1.00611e+020
+359 53 1.00477e+020
+451 86 1.00476e+020
+578 52 9.95951e+019
+116 307 9.94855e+019
+418 68 9.90585e+019
+114 3 9.90364e+019
+340 447 9.89313e+019
+473 202 9.88504e+019
+213 124 9.86933e+019
+281 419 9.85627e+019
+71 409 9.84037e+019
+85 310 9.83687e+019
+333 258 9.82796e+019
+430 89 9.82122e+019
+301 106 9.79705e+019
+104 304 9.78196e+019
+257 251 9.77537e+019
+259 71 9.77009e+019
+599 364 9.76464e+019
+48 255 9.74672e+019
+332 201 9.73598e+019
+166 117 9.73123e+019
+345 277 9.73043e+019
+178 18 9.72006e+019
+437 466 9.71082e+019
+328 353 9.68988e+019
+324 260 9.6885e+019
+305 193 9.677e+019
+249 219 9.67238e+019
+313 76 9.64016e+019
+575 99 9.63529e+019
+452 371 9.63101e+019
+441 239 9.57739e+019
+573 405 9.57133e+019
+451 22 9.55647e+019
+289 349 9.53549e+019
+157 40 9.51313e+019
+156 94 9.50761e+019
+445 114 9.49831e+019
+259 237 9.49509e+019
+398 168 9.49159e+019
+178 94 9.48855e+019
+500 474 9.46539e+019
+191 350 9.46499e+019
+374 240 9.46146e+019
+418 283 9.42762e+019
+317 149 9.40097e+019
+256 182 9.39571e+019
+546 139 9.39552e+019
diff --git a/test_data/harriscorners/hc_msc_5.00_0.04_7_7.txt b/test_data/harriscorners/hc_msc_5.00_0.04_7_7.txt
new file mode 100644
index 0000000..894de4d
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.04_7_7.txt
@@ -0,0 +1,740 @@
+739
+244 94 4.54756e+021
+498 1 2.89128e+021
+81 29 2.84968e+021
+130 26 2.73927e+021
+237 20 2.43927e+021
+421 180 2.2856e+021
+261 298 1.9493e+021
+272 364 1.76478e+021
+26 9 1.76208e+021
+195 58 1.65648e+021
+525 24 1.63081e+021
+76 257 1.63042e+021
+81 4 1.56351e+021
+543 365 1.50648e+021
+342 9 1.48334e+021
+37 63 1.45628e+021
+152 223 1.45345e+021
+362 400 1.43983e+021
+130 37 1.43465e+021
+65 344 1.39373e+021
+510 124 1.38737e+021
+283 113 1.38112e+021
+385 10 1.36192e+021
+253 12 1.33117e+021
+477 22 1.33081e+021
+482 23 1.31428e+021
+476 262 1.2874e+021
+127 165 1.223e+021
+528 20 1.21495e+021
+483 178 1.21407e+021
+121 46 1.18742e+021
+485 338 1.18265e+021
+424 322 1.16909e+021
+58 218 1.16673e+021
+34 140 1.16469e+021
+429 2 1.15137e+021
+138 204 1.14927e+021
+214 57 1.149e+021
+129 1 1.14641e+021
+542 14 1.13027e+021
+175 110 1.12882e+021
+320 314 1.11767e+021
+60 40 1.10931e+021
+102 222 1.09821e+021
+302 185 1.09755e+021
+321 225 1.09392e+021
+357 259 1.07415e+021
+295 15 1.07279e+021
+257 386 1.06952e+021
+464 393 1.0691e+021
+361 395 1.06009e+021
+361 294 1.05276e+021
+12 218 1.05156e+021
+33 100 1.03453e+021
+519 60 1.0332e+021
+299 53 1.03287e+021
+510 16 1.03232e+021
+199 18 1.02227e+021
+55 30 1.02e+021
+433 112 1.01855e+021
+451 339 1.00977e+021
+243 201 1.00009e+021
+458 279 9.75992e+020
+163 215 9.69482e+020
+418 438 9.6816e+020
+107 28 9.63064e+020
+391 294 9.62312e+020
+226 36 9.45392e+020
+71 25 9.43406e+020
+447 261 9.3921e+020
+103 60 9.39121e+020
+330 128 9.37211e+020
+241 70 9.33707e+020
+83 77 9.16729e+020
+211 450 9.12746e+020
+35 145 9.08713e+020
+554 41 9.01196e+020
+512 342 8.96249e+020
+55 290 8.87608e+020
+389 61 8.79589e+020
+43 26 8.76716e+020
+196 127 8.72051e+020
+490 139 8.71945e+020
+359 334 8.56678e+020
+359 130 8.56206e+020
+262 441 8.5423e+020
+223 420 8.52762e+020
+576 16 8.45762e+020
+145 6 8.43435e+020
+403 121 8.35747e+020
+405 183 8.3492e+020
+310 6 8.34181e+020
+328 296 8.33394e+020
+221 36 8.3308e+020
+364 143 8.33057e+020
+101 198 8.32824e+020
+62 203 8.28543e+020
+448 299 8.27916e+020
+427 118 8.2653e+020
+182 398 8.24371e+020
+470 421 8.228e+020
+115 43 8.2197e+020
+534 185 8.12589e+020
+123 186 8.10272e+020
+359 220 8.07957e+020
+511 169 8.00805e+020
+272 280 7.97215e+020
+64 318 7.95832e+020
+3 65 7.82525e+020
+248 399 7.73503e+020
+423 332 7.70461e+020
+364 250 7.6541e+020
+209 20 7.57468e+020
+528 102 7.56864e+020
+66 216 7.51699e+020
+69 476 7.51168e+020
+223 433 7.50969e+020
+302 215 7.46549e+020
+58 6 7.44708e+020
+325 341 7.39262e+020
+107 44 7.39013e+020
+480 296 7.37737e+020
+85 148 7.37646e+020
+232 125 7.3668e+020
+139 109 7.35081e+020
+126 254 7.31429e+020
+168 287 7.30664e+020
+342 264 7.30123e+020
+410 353 7.26433e+020
+544 168 7.25517e+020
+416 9 7.22901e+020
+449 204 7.19829e+020
+73 6 7.17726e+020
+88 254 7.17307e+020
+215 71 7.13381e+020
+400 263 7.11932e+020
+284 402 7.1176e+020
+386 178 7.11483e+020
+45 339 7.06868e+020
+327 141 6.97788e+020
+265 446 6.94396e+020
+565 42 6.94047e+020
+7 10 6.93743e+020
+436 397 6.93616e+020
+390 143 6.93473e+020
+150 306 6.91946e+020
+436 68 6.90917e+020
+36 173 6.86713e+020
+528 186 6.86083e+020
+352 321 6.85767e+020
+174 40 6.83237e+020
+387 220 6.83215e+020
+447 397 6.82882e+020
+413 256 6.81531e+020
+379 5 6.73078e+020
+143 324 6.72291e+020
+112 392 6.70019e+020
+302 205 6.68286e+020
+165 182 6.65937e+020
+513 262 6.65676e+020
+124 197 6.65273e+020
+309 370 6.63096e+020
+457 43 6.63081e+020
+211 436 6.60232e+020
+526 38 6.58841e+020
+545 59 6.58753e+020
+211 185 6.58228e+020
+89 213 6.56349e+020
+135 213 6.54918e+020
+169 56 6.54037e+020
+129 75 6.53551e+020
+329 258 6.53101e+020
+470 239 6.51121e+020
+48 151 6.47537e+020
+4 46 6.46773e+020
+546 41 6.44853e+020
+345 339 6.43981e+020
+444 118 6.41155e+020
+393 65 6.40615e+020
+136 173 6.38682e+020
+219 106 6.38373e+020
+165 327 6.3836e+020
+159 75 6.34314e+020
+41 217 6.32339e+020
+448 166 6.31448e+020
+545 2 6.31158e+020
+344 108 6.30853e+020
+424 45 6.29797e+020
+432 276 6.27531e+020
+259 165 6.26683e+020
+303 164 6.212e+020
+389 21 6.21177e+020
+215 280 6.20304e+020
+40 296 6.1725e+020
+160 139 6.1647e+020
+430 147 6.15677e+020
+110 240 6.1357e+020
+355 254 6.13503e+020
+416 23 6.10862e+020
+269 70 6.07298e+020
+47 98 6.02498e+020
+126 364 5.99519e+020
+455 58 5.99199e+020
+473 5 5.98803e+020
+508 454 5.97576e+020
+247 206 5.95941e+020
+409 65 5.95391e+020
+544 457 5.93751e+020
+413 162 5.93545e+020
+104 3 5.93356e+020
+10 101 5.92916e+020
+364 104 5.89494e+020
+389 164 5.89282e+020
+32 270 5.89043e+020
+278 220 5.88782e+020
+561 461 5.88732e+020
+479 15 5.85903e+020
+452 374 5.83396e+020
+168 196 5.81425e+020
+128 187 5.78397e+020
+252 423 5.7747e+020
+407 198 5.71798e+020
+76 40 5.71283e+020
+93 216 5.70207e+020
+256 151 5.68603e+020
+516 17 5.67685e+020
+153 196 5.65445e+020
+62 60 5.65119e+020
+346 241 5.63106e+020
+453 207 5.62679e+020
+521 184 5.61816e+020
+371 161 5.59299e+020
+437 304 5.58195e+020
+143 311 5.5693e+020
+103 77 5.56062e+020
+236 348 5.52356e+020
+225 181 5.50209e+020
+500 159 5.50179e+020
+335 436 5.49779e+020
+541 124 5.47705e+020
+282 72 5.46019e+020
+346 350 5.45595e+020
+191 126 5.443e+020
+426 377 5.44234e+020
+134 96 5.42972e+020
+498 225 5.41548e+020
+313 148 5.41095e+020
+48 10 5.40995e+020
+293 26 5.4007e+020
+380 354 5.36066e+020
+260 223 5.34469e+020
+272 316 5.32115e+020
+440 340 5.2983e+020
+176 260 5.29731e+020
+354 269 5.2832e+020
+516 75 5.27219e+020
+185 36 5.26738e+020
+210 35 5.26609e+020
+483 329 5.25844e+020
+246 144 5.25309e+020
+96 446 5.24552e+020
+54 66 5.23734e+020
+462 43 5.21569e+020
+111 110 5.21339e+020
+94 6 5.20403e+020
+488 44 5.18717e+020
+250 365 5.17562e+020
+446 8 5.175e+020
+285 209 5.15537e+020
+263 402 5.15396e+020
+220 14 5.13605e+020
+544 7 5.10977e+020
+548 162 5.06591e+020
+59 184 5.05102e+020
+91 199 5.04706e+020
+57 365 5.0468e+020
+512 221 5.0381e+020
+329 13 5.02967e+020
+107 39 5.02011e+020
+377 120 5.0185e+020
+218 98 4.99852e+020
+208 15 4.99534e+020
+52 42 4.99344e+020
+163 277 4.98315e+020
+412 298 4.97814e+020
+166 110 4.97361e+020
+193 218 4.96988e+020
+508 6 4.96634e+020
+528 60 4.94887e+020
+208 222 4.93642e+020
+552 380 4.93079e+020
+186 289 4.92061e+020
+140 20 4.916e+020
+255 139 4.87758e+020
+305 439 4.87631e+020
+313 84 4.85879e+020
+448 444 4.85666e+020
+24 62 4.85362e+020
+228 291 4.85145e+020
+137 178 4.84841e+020
+220 290 4.82792e+020
+169 18 4.82567e+020
+452 62 4.82188e+020
+46 355 4.809e+020
+220 180 4.79332e+020
+60 134 4.78523e+020
+102 360 4.76535e+020
+164 73 4.74309e+020
+526 423 4.73472e+020
+121 52 4.71016e+020
+165 357 4.70944e+020
+283 198 4.6987e+020
+69 148 4.69461e+020
+144 16 4.68613e+020
+265 30 4.65518e+020
+347 181 4.61854e+020
+300 264 4.59116e+020
+482 364 4.58498e+020
+429 44 4.58348e+020
+29 30 4.55092e+020
+261 202 4.54036e+020
+131 132 4.53476e+020
+512 100 4.5328e+020
+88 368 4.53228e+020
+486 58 4.51724e+020
+155 235 4.50347e+020
+63 236 4.50069e+020
+362 7 4.49577e+020
+88 208 4.49432e+020
+530 144 4.48064e+020
+358 66 4.47558e+020
+164 313 4.47002e+020
+367 300 4.46649e+020
+301 105 4.44835e+020
+325 426 4.41933e+020
+534 243 4.41737e+020
+276 353 4.39894e+020
+333 66 4.39386e+020
+448 438 4.3927e+020
+119 115 4.39165e+020
+279 129 4.34197e+020
+566 160 4.33717e+020
+297 69 4.33171e+020
+402 44 4.31968e+020
+248 316 4.30278e+020
+155 317 4.29975e+020
+196 190 4.2873e+020
+449 118 4.28568e+020
+436 379 4.28225e+020
+374 3 4.27453e+020
+467 139 4.26815e+020
+437 319 4.26777e+020
+54 222 4.24565e+020
+575 459 4.24315e+020
+304 190 4.23836e+020
+386 244 4.2231e+020
+52 99 4.20764e+020
+466 196 4.19983e+020
+47 81 4.19196e+020
+484 142 4.16296e+020
+243 166 4.16289e+020
+578 43 4.15088e+020
+283 395 4.14789e+020
+41 81 4.14416e+020
+276 328 4.14067e+020
+538 405 4.11895e+020
+498 81 4.11755e+020
+474 247 4.08018e+020
+156 56 4.07293e+020
+112 344 4.05206e+020
+404 266 4.04654e+020
+241 420 4.01932e+020
+292 88 4.00976e+020
+414 65 4.0056e+020
+346 298 4.00516e+020
+273 181 3.99615e+020
+166 98 3.98767e+020
+196 84 3.98414e+020
+295 269 3.95546e+020
+298 179 3.9501e+020
+190 360 3.94798e+020
+324 221 3.93673e+020
+110 169 3.93255e+020
+463 27 3.92533e+020
+345 392 3.91497e+020
+190 350 3.91143e+020
+445 123 3.90484e+020
+225 219 3.89465e+020
+513 297 3.89012e+020
+329 90 3.88954e+020
+421 298 3.87637e+020
+190 312 3.85645e+020
+335 218 3.85004e+020
+165 242 3.84606e+020
+394 164 3.84311e+020
+61 369 3.81655e+020
+127 96 3.81137e+020
+384 261 3.81006e+020
+237 417 3.80773e+020
+441 24 3.79856e+020
+250 34 3.7953e+020
+53 12 3.76982e+020
+162 169 3.76474e+020
+378 67 3.76321e+020
+343 122 3.74713e+020
+107 429 3.74707e+020
+270 53 3.74206e+020
+542 209 3.73596e+020
+241 195 3.72875e+020
+418 82 3.72721e+020
+271 167 3.72335e+020
+389 326 3.71143e+020
+476 341 3.71021e+020
+203 313 3.70196e+020
+571 446 3.70006e+020
+234 161 3.69638e+020
+102 164 3.6906e+020
+472 266 3.68817e+020
+489 341 3.6862e+020
+117 426 3.68256e+020
+493 81 3.68236e+020
+471 212 3.67912e+020
+518 263 3.66751e+020
+539 98 3.65743e+020
+450 87 3.64915e+020
+276 320 3.64804e+020
+574 421 3.64665e+020
+125 271 3.64548e+020
+290 139 3.64446e+020
+78 199 3.636e+020
+35 29 3.63286e+020
+412 44 3.62679e+020
+460 267 3.62607e+020
+110 95 3.60382e+020
+373 392 3.59987e+020
+83 134 3.59879e+020
+575 178 3.59816e+020
+120 128 3.5796e+020
+191 291 3.57849e+020
+110 179 3.5756e+020
+237 130 3.57399e+020
+42 10 3.56924e+020
+448 218 3.56765e+020
+434 89 3.55817e+020
+296 332 3.5547e+020
+50 62 3.55326e+020
+455 85 3.55074e+020
+244 294 3.54613e+020
+86 311 3.53903e+020
+489 263 3.53842e+020
+125 259 3.53349e+020
+292 50 3.52515e+020
+431 319 3.49874e+020
+431 81 3.49186e+020
+326 164 3.48818e+020
+503 164 3.48419e+020
+193 16 3.47365e+020
+109 2 3.46449e+020
+269 186 3.46222e+020
+222 112 3.45462e+020
+175 20 3.45291e+020
+170 310 3.45066e+020
+510 174 3.44318e+020
+547 139 3.44155e+020
+339 164 3.43742e+020
+342 47 3.42773e+020
+433 158 3.42419e+020
+340 446 3.42409e+020
+378 337 3.39883e+020
+70 96 3.39726e+020
+56 78 3.38952e+020
+72 165 3.3871e+020
+217 147 3.37295e+020
+131 168 3.37062e+020
+499 460 3.3696e+020
+274 132 3.36516e+020
+466 424 3.35899e+020
+501 361 3.35859e+020
+83 476 3.35471e+020
+69 420 3.33721e+020
+119 447 3.33581e+020
+141 394 3.32743e+020
+562 145 3.3271e+020
+280 365 3.31373e+020
+159 182 3.29302e+020
+583 38 3.29163e+020
+430 222 3.28338e+020
+357 11 3.28121e+020
+276 198 3.27741e+020
+330 213 3.27354e+020
+529 400 3.26916e+020
+162 61 3.25698e+020
+40 135 3.24634e+020
+473 42 3.24386e+020
+454 117 3.23597e+020
+86 61 3.23529e+020
+57 373 3.23321e+020
+206 436 3.22547e+020
+273 220 3.22357e+020
+392 49 3.22163e+020
+473 203 3.2202e+020
+292 265 3.20692e+020
+268 295 3.20675e+020
+174 291 3.20674e+020
+10 78 3.20575e+020
+570 451 3.19671e+020
+357 282 3.19603e+020
+424 398 3.18207e+020
+528 222 3.18126e+020
+164 209 3.18069e+020
+227 186 3.16735e+020
+569 382 3.16643e+020
+541 133 3.16461e+020
+488 81 3.14669e+020
+340 391 3.14656e+020
+260 236 3.14614e+020
+501 22 3.14552e+020
+377 182 3.14421e+020
+287 165 3.14386e+020
+132 71 3.14199e+020
+190 206 3.13667e+020
+528 362 3.13622e+020
+486 3 3.13435e+020
+523 123 3.13243e+020
+353 294 3.1295e+020
+30 218 3.12925e+020
+345 276 3.11752e+020
+333 202 3.11635e+020
+53 150 3.10581e+020
+259 34 3.10328e+020
+419 66 3.09824e+020
+295 421 3.09473e+020
+349 146 3.09352e+020
+139 99 3.08528e+020
+118 76 3.07704e+020
+179 165 3.06971e+020
+185 131 3.06495e+020
+436 280 3.059e+020
+516 42 3.0576e+020
+298 274 3.05399e+020
+286 297 3.05068e+020
+217 425 3.04959e+020
+442 240 3.04411e+020
+514 381 3.03814e+020
+153 112 3.03635e+020
+503 261 3.0248e+020
+405 376 3.01992e+020
+436 240 3.00944e+020
+110 136 3.00898e+020
+91 290 3.00576e+020
+349 88 2.99564e+020
+577 245 2.99365e+020
+501 143 2.99092e+020
+96 22 2.98977e+020
+481 83 2.98925e+020
+182 343 2.98833e+020
+50 288 2.98659e+020
+543 163 2.9859e+020
+145 161 2.98586e+020
+58 255 2.98256e+020
+131 147 2.98209e+020
+196 255 2.98018e+020
+111 262 2.97622e+020
+85 35 2.96355e+020
+104 306 2.95791e+020
+332 413 2.93767e+020
+337 264 2.91132e+020
+270 290 2.9063e+020
+479 403 2.90556e+020
+378 107 2.89825e+020
+544 440 2.89373e+020
+20 286 2.88901e+020
+413 247 2.8887e+020
+182 20 2.88715e+020
+443 451 2.88693e+020
+482 451 2.87934e+020
+435 225 2.87693e+020
+437 468 2.86864e+020
+191 329 2.86574e+020
+20 317 2.8627e+020
+324 15 2.85781e+020
+18 343 2.8514e+020
+424 201 2.84301e+020
+280 204 2.84138e+020
+158 112 2.836e+020
+247 219 2.82775e+020
+459 304 2.82665e+020
+580 345 2.81357e+020
+381 123 2.81241e+020
+192 145 2.81059e+020
+178 329 2.80873e+020
+265 311 2.80844e+020
+364 180 2.80305e+020
+221 151 2.79982e+020
+432 270 2.7981e+020
+306 259 2.79447e+020
+154 295 2.78757e+020
+41 355 2.78669e+020
+468 204 2.78662e+020
+278 144 2.7811e+020
+273 295 2.77785e+020
+572 405 2.77634e+020
+214 94 2.77621e+020
+91 60 2.77291e+020
+419 284 2.77119e+020
+276 360 2.771e+020
+563 323 2.76511e+020
+587 17 2.76314e+020
+174 92 2.75168e+020
+470 121 2.74246e+020
+77 165 2.73968e+020
+173 239 2.73626e+020
+281 438 2.7351e+020
+494 60 2.72982e+020
+196 132 2.72786e+020
+164 115 2.7276e+020
+186 95 2.72118e+020
+231 199 2.71623e+020
+362 369 2.71367e+020
+157 91 2.71054e+020
+470 63 2.70265e+020
+327 181 2.69993e+020
+319 187 2.69582e+020
+537 394 2.68607e+020
+74 475 2.68573e+020
+569 422 2.68154e+020
+264 389 2.67292e+020
+363 357 2.6729e+020
+337 62 2.66311e+020
+265 16 2.65869e+020
+90 375 2.65532e+020
+258 368 2.64981e+020
+389 53 2.64721e+020
+272 285 2.64232e+020
+33 110 2.64056e+020
+527 347 2.63848e+020
+359 53 2.63838e+020
+547 218 2.63678e+020
+388 97 2.63674e+020
+406 14 2.63615e+020
+462 22 2.63367e+020
+180 291 2.62032e+020
+333 334 2.62008e+020
+335 390 2.61729e+020
+120 218 2.61152e+020
+454 102 2.60947e+020
+279 52 2.60248e+020
+355 342 2.59925e+020
+67 254 2.59835e+020
+372 86 2.5973e+020
+329 353 2.59246e+020
+482 440 2.59087e+020
+280 136 2.58996e+020
+9 233 2.58981e+020
+566 180 2.58747e+020
+218 115 2.58151e+020
+38 287 2.57818e+020
+102 28 2.57653e+020
+48 234 2.57193e+020
+282 419 2.5661e+020
+342 141 2.56475e+020
+478 243 2.56347e+020
+103 237 2.56197e+020
+357 166 2.55847e+020
+183 380 2.55675e+020
+417 165 2.55491e+020
+37 200 2.55402e+020
+242 30 2.5535e+020
+318 459 2.54896e+020
+46 133 2.54629e+020
+49 255 2.54179e+020
+262 285 2.53965e+020
+256 200 2.53924e+020
+70 130 2.53819e+020
+313 77 2.5372e+020
+524 399 2.5335e+020
+471 83 2.53269e+020
+130 478 2.52892e+020
+216 175 2.52335e+020
+22 48 2.51966e+020
+451 24 2.51508e+020
+229 282 2.50534e+020
+405 82 2.50347e+020
+394 215 2.50147e+020
+442 356 2.501e+020
+510 83 2.4796e+020
+204 161 2.47702e+020
+91 276 2.47172e+020
+306 364 2.46973e+020
+387 124 2.46541e+020
+404 277 2.45769e+020
+242 281 2.45512e+020
+215 124 2.45108e+020
+456 177 2.45032e+020
+301 332 2.44519e+020
+575 100 2.44264e+020
+578 53 2.43605e+020
+83 171 2.43282e+020
+117 306 2.43109e+020
+160 21 2.42846e+020
+528 429 2.42771e+020
+306 449 2.42766e+020
+55 145 2.42268e+020
+17 434 2.41976e+020
+562 225 2.41712e+020
+147 449 2.41271e+020
+178 273 2.40821e+020
+494 158 2.4012e+020
+500 266 2.40015e+020
+337 367 2.40014e+020
+298 410 2.39687e+020
+440 456 2.39295e+020
+511 351 2.37841e+020
+53 358 2.37346e+020
+33 164 2.36844e+020
+188 108 2.36844e+020
+420 53 2.36798e+020
+187 265 2.36052e+020
+56 170 2.36008e+020
+47 218 2.35888e+020
+209 395 2.35644e+020
+238 34 2.35601e+020
+137 136 2.35201e+020
+180 154 2.34878e+020
+537 93 2.34734e+020
+128 127 2.32176e+020
+537 262 2.32119e+020
+97 28 2.31927e+020
+362 244 2.31692e+020
+282 268 2.31013e+020
+468 28 2.30723e+020
+437 391 2.3049e+020
+57 70 2.30244e+020
+7 15 2.30056e+020
+455 162 2.29083e+020
+48 162 2.28822e+020
+402 6 2.28729e+020
+506 361 2.28175e+020
+450 177 2.27726e+020
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_3_3.txt b/test_data/harriscorners/hc_msc_5.00_0.10_3_3.txt
new file mode 100644
index 0000000..14d5a39
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_3_3.txt
@@ -0,0 +1,1487 @@
+1486
+449 298 5.04554e+011
+499 1 4.07727e+011
+329 127 3.75398e+011
+388 178 3.36537e+011
+421 183 3.36519e+011
+401 261 3.35327e+011
+535 242 2.99733e+011
+213 72 2.99069e+011
+321 313 2.89276e+011
+75 236 2.88936e+011
+66 320 2.85654e+011
+553 41 2.83848e+011
+121 44 2.78038e+011
+544 170 2.76288e+011
+363 401 2.6411e+011
+385 221 2.63728e+011
+135 215 2.63626e+011
+89 197 2.61697e+011
+447 397 2.60936e+011
+436 68 2.60855e+011
+274 366 2.56453e+011
+200 18 2.55751e+011
+159 143 2.52659e+011
+365 200 2.51092e+011
+449 219 2.49467e+011
+45 26 2.4622e+011
+173 312 2.41696e+011
+456 281 2.31812e+011
+286 296 2.2879e+011
+545 217 2.28483e+011
+137 208 2.28324e+011
+515 77 2.26533e+011
+273 289 2.1845e+011
+245 94 2.15661e+011
+412 256 2.15568e+011
+144 309 2.14854e+011
+256 386 2.14098e+011
+296 420 2.13989e+011
+223 38 2.13416e+011
+34 138 2.13301e+011
+282 115 2.1232e+011
+449 403 2.12179e+011
+301 175 2.1172e+011
+312 149 2.10551e+011
+125 255 2.0665e+011
+299 54 2.06455e+011
+448 263 2.06246e+011
+396 319 2.04666e+011
+364 298 2.03605e+011
+3 47 2.02005e+011
+59 185 2.01928e+011
+508 18 2.01265e+011
+221 16 2.01168e+011
+344 10 1.99666e+011
+471 240 1.97349e+011
+174 238 1.94781e+011
+455 3 1.94671e+011
+175 94 1.9415e+011
+317 385 1.93239e+011
+524 263 1.92542e+011
+126 162 1.9193e+011
+242 203 1.90807e+011
+378 317 1.89262e+011
+246 143 1.877e+011
+82 27 1.86709e+011
+59 74 1.86456e+011
+486 22 1.86418e+011
+184 35 1.85665e+011
+426 320 1.84888e+011
+124 362 1.83778e+011
+177 260 1.82987e+011
+293 120 1.82413e+011
+417 7 1.82238e+011
+480 298 1.80386e+011
+253 138 1.79716e+011
+113 213 1.794e+011
+211 56 1.78294e+011
+197 57 1.77996e+011
+317 336 1.7759e+011
+66 344 1.77078e+011
+140 184 1.74181e+011
+64 235 1.73301e+011
+489 264 1.73174e+011
+207 223 1.72592e+011
+348 179 1.71986e+011
+380 68 1.70339e+011
+508 122 1.68457e+011
+419 163 1.68133e+011
+507 165 1.6638e+011
+110 238 1.65494e+011
+36 269 1.63233e+011
+120 4 1.61874e+011
+236 163 1.61539e+011
+303 184 1.60471e+011
+382 8 1.60454e+011
+112 4 1.57348e+011
+359 168 1.56531e+011
+71 148 1.56429e+011
+425 262 1.54722e+011
+240 90 1.54675e+011
+287 342 1.54341e+011
+556 182 1.53976e+011
+48 219 1.52688e+011
+464 241 1.51706e+011
+484 59 1.50804e+011
+360 315 1.50169e+011
+308 372 1.49754e+011
+251 13 1.4912e+011
+270 241 1.49046e+011
+277 181 1.48482e+011
+282 403 1.48461e+011
+412 162 1.46711e+011
+301 164 1.4665e+011
+92 214 1.46278e+011
+407 64 1.46022e+011
+569 40 1.4558e+011
+303 207 1.45061e+011
+124 199 1.43843e+011
+263 202 1.43568e+011
+406 375 1.43247e+011
+183 401 1.4181e+011
+524 199 1.41612e+011
+455 83 1.39631e+011
+279 370 1.37936e+011
+370 107 1.37705e+011
+270 60 1.37567e+011
+313 75 1.37535e+011
+511 342 1.37393e+011
+371 82 1.36872e+011
+205 202 1.35859e+011
+114 344 1.35729e+011
+543 364 1.34488e+011
+543 58 1.34444e+011
+230 266 1.33725e+011
+170 19 1.33638e+011
+236 19 1.33425e+011
+530 184 1.33383e+011
+224 221 1.33269e+011
+373 116 1.33078e+011
+279 296 1.32396e+011
+79 3 1.32053e+011
+473 63 1.32025e+011
+467 123 1.32002e+011
+272 166 1.31814e+011
+105 62 1.31267e+011
+572 142 1.31246e+011
+360 335 1.31026e+011
+10 102 1.30292e+011
+381 164 1.30093e+011
+325 88 1.30076e+011
+49 99 1.29854e+011
+261 165 1.29412e+011
+365 7 1.29405e+011
+102 5 1.28847e+011
+391 47 1.28716e+011
+208 434 1.28658e+011
+526 101 1.27849e+011
+359 294 1.27282e+011
+236 74 1.26918e+011
+415 251 1.26633e+011
+192 276 1.25578e+011
+87 78 1.25374e+011
+28 236 1.25329e+011
+185 19 1.25198e+011
+390 58 1.2442e+011
+510 172 1.24365e+011
+401 184 1.24207e+011
+386 126 1.2418e+011
+125 261 1.23794e+011
+278 352 1.23569e+011
+496 119 1.23082e+011
+407 337 1.22377e+011
+392 144 1.21695e+011
+575 126 1.20226e+011
+338 473 1.20214e+011
+478 16 1.19172e+011
+365 259 1.19104e+011
+538 95 1.18726e+011
+64 371 1.18653e+011
+192 331 1.18434e+011
+560 229 1.1773e+011
+240 349 1.17625e+011
+433 146 1.1742e+011
+341 337 1.17374e+011
+463 198 1.17028e+011
+445 23 1.16965e+011
+161 238 1.15373e+011
+525 346 1.15339e+011
+525 223 1.15194e+011
+352 146 1.15046e+011
+131 36 1.15034e+011
+57 29 1.14347e+011
+424 376 1.1432e+011
+257 89 1.14213e+011
+88 256 1.14198e+011
+355 320 1.14108e+011
+82 77 1.14077e+011
+387 319 1.13897e+011
+518 183 1.13671e+011
+264 440 1.13441e+011
+380 26 1.13403e+011
+266 53 1.13105e+011
+387 295 1.1294e+011
+163 208 1.12815e+011
+38 296 1.12419e+011
+203 310 1.12287e+011
+271 278 1.12226e+011
+513 93 1.12135e+011
+558 19 1.12114e+011
+313 222 1.1201e+011
+487 3 1.11917e+011
+507 60 1.11859e+011
+307 439 1.11766e+011
+562 149 1.11477e+011
+562 478 1.11323e+011
+28 8 1.10708e+011
+461 279 1.10699e+011
+530 62 1.10382e+011
+479 81 1.1029e+011
+35 300 1.1018e+011
+128 1 1.10153e+011
+275 216 1.09854e+011
+80 474 1.09848e+011
+224 183 1.09497e+011
+512 99 1.0926e+011
+363 250 1.08312e+011
+556 244 1.0816e+011
+97 79 1.07589e+011
+411 355 1.06727e+011
+260 273 1.06431e+011
+433 319 1.05924e+011
+22 219 1.05915e+011
+512 165 1.05699e+011
+192 124 1.05642e+011
+411 5 1.05595e+011
+392 353 1.05571e+011
+376 84 1.05496e+011
+361 131 1.05445e+011
+353 127 1.0531e+011
+461 340 1.05299e+011
+342 123 1.04859e+011
+299 70 1.04827e+011
+153 217 1.04714e+011
+330 164 1.04399e+011
+220 100 1.04266e+011
+326 427 1.04233e+011
+140 173 1.04032e+011
+273 130 1.03921e+011
+282 221 1.03593e+011
+553 384 1.03565e+011
+324 166 1.03551e+011
+319 202 1.03133e+011
+448 138 1.02919e+011
+244 72 1.02366e+011
+404 120 1.02097e+011
+477 182 1.01998e+011
+68 27 1.01955e+011
+46 90 1.01845e+011
+62 60 1.01583e+011
+297 296 1.01534e+011
+381 411 1.01161e+011
+376 7 1.01151e+011
+259 236 1.00896e+011
+387 167 1.00826e+011
+36 174 1.00826e+011
+212 183 1.00529e+011
+139 58 1.00081e+011
+342 464 1.00046e+011
+420 178 9.97491e+010
+160 112 9.96391e+010
+110 96 9.82522e+010
+382 338 9.81072e+010
+229 292 9.80636e+010
+277 332 9.79954e+010
+160 183 9.78336e+010
+579 18 9.78298e+010
+283 71 9.77182e+010
+512 201 9.74478e+010
+77 81 9.74338e+010
+560 60 9.70221e+010
+36 147 9.70119e+010
+276 222 9.69285e+010
+497 64 9.66032e+010
+528 361 9.62036e+010
+287 165 9.61592e+010
+169 238 9.61476e+010
+163 276 9.60221e+010
+244 164 9.56671e+010
+422 323 9.55472e+010
+300 265 9.55346e+010
+108 325 9.53743e+010
+224 419 9.51685e+010
+177 106 9.47605e+010
+352 161 9.46332e+010
+276 393 9.45802e+010
+530 193 9.45619e+010
+521 122 9.43579e+010
+240 366 9.42899e+010
+331 107 9.4275e+010
+550 380 9.41821e+010
+88 148 9.41802e+010
+412 23 9.41042e+010
+127 76 9.33655e+010
+260 250 9.31593e+010
+174 114 9.3115e+010
+112 393 9.31024e+010
+532 268 9.28613e+010
+374 163 9.28157e+010
+13 206 9.27915e+010
+27 220 9.27087e+010
+77 256 9.26955e+010
+389 139 9.26014e+010
+451 101 9.232e+010
+162 213 9.22491e+010
+155 235 9.21113e+010
+509 455 9.19396e+010
+580 52 9.1805e+010
+148 396 9.17862e+010
+312 81 9.17072e+010
+483 339 9.11678e+010
+413 100 9.11027e+010
+96 447 9.08206e+010
+54 6 9.08138e+010
+215 144 9.07712e+010
+293 25 9.0728e+010
+509 361 9.03524e+010
+313 86 9.03318e+010
+355 220 9.02845e+010
+565 60 9.01922e+010
+112 56 8.99509e+010
+250 313 8.9639e+010
+141 22 8.9472e+010
+223 114 8.92316e+010
+351 339 8.91511e+010
+230 36 8.87162e+010
+192 359 8.87122e+010
+554 201 8.86025e+010
+396 161 8.8586e+010
+422 44 8.85123e+010
+542 18 8.84926e+010
+212 437 8.83993e+010
+266 14 8.83091e+010
+59 219 8.82592e+010
+315 165 8.8166e+010
+264 298 8.79603e+010
+400 273 8.7912e+010
+49 159 8.78764e+010
+136 202 8.75052e+010
+537 267 8.71337e+010
+484 375 8.70552e+010
+315 160 8.67997e+010
+67 47 8.64642e+010
+465 394 8.62799e+010
+285 240 8.61948e+010
+169 55 8.61301e+010
+561 321 8.59867e+010
+22 60 8.57392e+010
+395 260 8.55888e+010
+174 57 8.54862e+010
+571 161 8.52825e+010
+164 243 8.50226e+010
+387 242 8.50049e+010
+55 66 8.50009e+010
+304 193 8.49231e+010
+184 138 8.48222e+010
+161 256 8.48144e+010
+243 189 8.46568e+010
+303 156 8.46414e+010
+426 119 8.45539e+010
+225 72 8.44585e+010
+166 96 8.44234e+010
+524 21 8.44043e+010
+189 214 8.40048e+010
+111 134 8.3873e+010
+186 342 8.36244e+010
+300 245 8.36105e+010
+329 9 8.35398e+010
+359 162 8.34257e+010
+529 32 8.29122e+010
+371 393 8.28726e+010
+338 391 8.27688e+010
+333 89 8.27327e+010
+118 61 8.27253e+010
+389 327 8.25928e+010
+362 370 8.2567e+010
+494 456 8.25262e+010
+441 98 8.22929e+010
+76 7 8.22224e+010
+342 37 8.21299e+010
+177 166 8.19247e+010
+462 267 8.18806e+010
+219 291 8.17063e+010
+108 44 8.1705e+010
+49 152 8.1529e+010
+527 40 8.13949e+010
+482 365 8.10454e+010
+162 20 8.10169e+010
+170 117 8.08452e+010
+572 121 8.05502e+010
+490 342 8.04952e+010
+508 82 8.03353e+010
+320 224 7.99513e+010
+290 183 7.98767e+010
+383 146 7.98738e+010
+474 262 7.9848e+010
+199 86 7.97764e+010
+292 15 7.96816e+010
+546 42 7.96231e+010
+371 67 7.9222e+010
+503 265 7.91745e+010
+281 49 7.91141e+010
+542 210 7.91099e+010
+118 96 7.89898e+010
+150 114 7.89292e+010
+264 445 7.87252e+010
+271 51 7.86321e+010
+115 76 7.84417e+010
+85 476 7.823e+010
+355 106 7.82064e+010
+109 340 7.80292e+010
+43 62 7.78603e+010
+540 40 7.78369e+010
+73 185 7.7823e+010
+234 261 7.77446e+010
+435 182 7.75998e+010
+91 291 7.75289e+010
+189 180 7.75145e+010
+92 21 7.71643e+010
+487 357 7.7109e+010
+419 441 7.7079e+010
+496 80 7.70524e+010
+180 394 7.70036e+010
+96 125 7.67389e+010
+466 40 7.67234e+010
+234 346 7.65967e+010
+356 267 7.65349e+010
+500 42 7.6507e+010
+265 72 7.62756e+010
+434 398 7.62461e+010
+330 202 7.61434e+010
+436 339 7.61109e+010
+508 5 7.60091e+010
+116 43 7.58578e+010
+153 446 7.57023e+010
+101 58 7.55788e+010
+137 98 7.55263e+010
+474 202 7.53947e+010
+217 279 7.5356e+010
+541 13 7.51263e+010
+387 10 7.50733e+010
+150 151 7.49936e+010
+439 149 7.4875e+010
+478 21 7.48076e+010
+232 200 7.47637e+010
+508 141 7.47561e+010
+71 410 7.46217e+010
+184 184 7.45321e+010
+172 449 7.45079e+010
+286 209 7.44518e+010
+507 204 7.4444e+010
+511 128 7.44285e+010
+241 58 7.43289e+010
+102 358 7.42632e+010
+546 182 7.41347e+010
+347 350 7.41241e+010
+339 164 7.39288e+010
+182 111 7.38933e+010
+277 137 7.38723e+010
+398 357 7.3856e+010
+446 352 7.37987e+010
+132 130 7.3581e+010
+379 107 7.35189e+010
+157 93 7.34533e+010
+29 28 7.33232e+010
+78 196 7.32732e+010
+267 131 7.32229e+010
+134 72 7.3165e+010
+100 221 7.31232e+010
+336 426 7.30698e+010
+526 171 7.30032e+010
+358 127 7.27265e+010
+163 108 7.26795e+010
+498 158 7.26449e+010
+537 140 7.259e+010
+507 178 7.22742e+010
+58 254 7.22225e+010
+223 239 7.21714e+010
+163 168 7.21315e+010
+133 427 7.21085e+010
+266 259 7.2022e+010
+32 218 7.19739e+010
+210 154 7.19288e+010
+57 331 7.19019e+010
+273 71 7.18713e+010
+72 97 7.18155e+010
+363 182 7.17458e+010
+388 282 7.17005e+010
+350 323 7.1616e+010
+304 363 7.12441e+010
+25 200 7.12138e+010
+258 34 7.11732e+010
+478 4 7.09366e+010
+52 290 7.05075e+010
+113 356 7.03794e+010
+545 5 7.01509e+010
+438 123 7.01192e+010
+110 265 7.00213e+010
+162 128 6.99705e+010
+537 459 6.99478e+010
+367 144 6.99167e+010
+510 300 6.95891e+010
+96 148 6.95685e+010
+324 143 6.94239e+010
+236 221 6.94108e+010
+269 105 6.92813e+010
+479 451 6.92599e+010
+474 245 6.92075e+010
+187 109 6.90696e+010
+390 161 6.89598e+010
+137 128 6.89377e+010
+217 208 6.89148e+010
+594 19 6.88737e+010
+140 325 6.87943e+010
+306 88 6.86741e+010
+24 65 6.85044e+010
+63 8 6.84224e+010
+411 46 6.80585e+010
+262 393 6.77717e+010
+164 359 6.77019e+010
+18 342 6.76148e+010
+197 130 6.75564e+010
+82 135 6.74757e+010
+327 320 6.74068e+010
+445 126 6.73134e+010
+37 61 6.72848e+010
+59 289 6.72722e+010
+267 31 6.72099e+010
+432 112 6.71839e+010
+454 340 6.69924e+010
+430 1 6.69291e+010
+172 202 6.65807e+010
+249 33 6.65598e+010
+217 55 6.63041e+010
+543 130 6.62648e+010
+418 85 6.62402e+010
+272 296 6.61627e+010
+363 355 6.60954e+010
+153 299 6.60467e+010
+486 84 6.60145e+010
+445 453 6.58109e+010
+274 206 6.58043e+010
+39 310 6.57864e+010
+335 240 6.57771e+010
+451 375 6.55314e+010
+196 192 6.53771e+010
+369 338 6.53081e+010
+217 126 6.5216e+010
+182 201 6.50443e+010
+449 178 6.49821e+010
+347 392 6.48937e+010
+179 18 6.48208e+010
+512 221 6.48139e+010
+515 2 6.48094e+010
+436 387 6.47798e+010
+292 311 6.47645e+010
+287 34 6.4761e+010
+390 19 6.47541e+010
+521 61 6.47157e+010
+152 308 6.45746e+010
+540 165 6.43752e+010
+135 237 6.43375e+010
+423 5 6.43064e+010
+139 2 6.42833e+010
+443 320 6.41949e+010
+209 136 6.40992e+010
+543 252 6.39948e+010
+250 364 6.39832e+010
+246 294 6.3981e+010
+138 111 6.36604e+010
+569 203 6.36576e+010
+513 122 6.36116e+010
+502 143 6.35844e+010
+577 178 6.35279e+010
+2 155 6.35214e+010
+452 161 6.33621e+010
+158 1 6.31293e+010
+58 103 6.31041e+010
+166 114 6.30844e+010
+259 142 6.3038e+010
+492 182 6.30233e+010
+293 333 6.29949e+010
+375 299 6.29832e+010
+166 287 6.29146e+010
+165 202 6.27668e+010
+175 2 6.2739e+010
+292 147 6.27251e+010
+6 9 6.27169e+010
+5 66 6.23652e+010
+497 342 6.22781e+010
+446 145 6.22278e+010
+432 83 6.20653e+010
+396 104 6.20615e+010
+188 146 6.20355e+010
+604 121 6.20124e+010
+259 221 6.19953e+010
+452 205 6.19166e+010
+278 189 6.19141e+010
+544 91 6.17918e+010
+261 329 6.17741e+010
+460 395 6.17459e+010
+484 180 6.17198e+010
+429 181 6.16834e+010
+40 217 6.15611e+010
+194 110 6.14888e+010
+358 143 6.14019e+010
+344 166 6.13622e+010
+573 333 6.13081e+010
+179 274 6.12469e+010
+355 13 6.12033e+010
+317 107 6.12025e+010
+360 260 6.11645e+010
+345 241 6.10605e+010
+497 229 6.07819e+010
+504 360 6.07497e+010
+213 123 6.05501e+010
+203 347 6.05142e+010
+161 133 6.03611e+010
+202 392 6.03208e+010
+270 66 6.02802e+010
+220 151 6.02187e+010
+124 272 6.0204e+010
+518 163 6.00892e+010
+244 217 6.0073e+010
+254 74 5.9905e+010
+208 421 5.98129e+010
+513 44 5.9765e+010
+480 128 5.96397e+010
+449 83 5.96372e+010
+360 216 5.9555e+010
+479 263 5.95456e+010
+515 18 5.94393e+010
+565 18 5.94356e+010
+183 133 5.94315e+010
+93 255 5.93843e+010
+281 386 5.91587e+010
+67 337 5.90473e+010
+518 203 5.89984e+010
+129 168 5.89959e+010
+432 122 5.88012e+010
+579 79 5.87909e+010
+310 33 5.87879e+010
+367 85 5.87855e+010
+105 39 5.87092e+010
+398 412 5.86479e+010
+374 241 5.86408e+010
+464 26 5.84466e+010
+208 449 5.83331e+010
+435 88 5.81603e+010
+252 153 5.81466e+010
+167 150 5.81416e+010
+277 145 5.81193e+010
+345 109 5.80256e+010
+423 336 5.79065e+010
+203 258 5.77781e+010
+173 74 5.76982e+010
+225 297 5.76611e+010
+205 127 5.76363e+010
+541 122 5.76362e+010
+494 164 5.76123e+010
+379 352 5.75526e+010
+589 309 5.75001e+010
+486 205 5.73921e+010
+228 129 5.72122e+010
+515 142 5.69125e+010
+132 26 5.6905e+010
+146 160 5.68642e+010
+259 71 5.68561e+010
+498 70 5.68443e+010
+355 24 5.66656e+010
+363 407 5.66004e+010
+191 171 5.65978e+010
+418 414 5.65302e+010
+148 21 5.65097e+010
+475 340 5.64477e+010
+285 263 5.64319e+010
+247 258 5.63786e+010
+33 235 5.63179e+010
+48 133 5.62369e+010
+48 256 5.62214e+010
+167 325 5.6028e+010
+453 358 5.59338e+010
+194 17 5.58882e+010
+60 148 5.5886e+010
+305 107 5.58855e+010
+138 146 5.57961e+010
+422 398 5.57764e+010
+454 264 5.57285e+010
+95 452 5.5689e+010
+226 15 5.56484e+010
+163 147 5.55788e+010
+187 99 5.55658e+010
+321 103 5.53458e+010
+512 349 5.51852e+010
+192 139 5.5148e+010
+311 334 5.50784e+010
+450 442 5.50529e+010
+64 448 5.50243e+010
+281 35 5.48435e+010
+237 132 5.48396e+010
+549 59 5.47618e+010
+65 363 5.47616e+010
+505 159 5.46823e+010
+12 80 5.46111e+010
+263 311 5.44898e+010
+413 65 5.44614e+010
+44 10 5.44559e+010
+318 147 5.44182e+010
+535 18 5.43091e+010
+484 154 5.41932e+010
+344 197 5.4177e+010
+334 368 5.41586e+010
+184 117 5.38671e+010
+70 130 5.3846e+010
+101 197 5.38377e+010
+126 189 5.37857e+010
+108 183 5.3735e+010
+550 222 5.37144e+010
+567 423 5.37137e+010
+389 420 5.3685e+010
+47 79 5.36714e+010
+281 142 5.36446e+010
+525 381 5.35661e+010
+198 75 5.3542e+010
+357 240 5.35317e+010
+480 402 5.35101e+010
+153 197 5.34274e+010
+298 191 5.33905e+010
+242 100 5.30902e+010
+297 274 5.30744e+010
+407 81 5.28861e+010
+254 404 5.28804e+010
+598 363 5.27946e+010
+535 121 5.27167e+010
+44 121 5.27032e+010
+84 237 5.2652e+010
+559 271 5.26344e+010
+90 321 5.26275e+010
+65 252 5.2506e+010
+473 355 5.24944e+010
+9 476 5.24613e+010
+397 25 5.24083e+010
+421 315 5.23801e+010
+240 421 5.23044e+010
+286 52 5.22338e+010
+246 106 5.22293e+010
+91 390 5.22168e+010
+141 391 5.2193e+010
+36 201 5.21445e+010
+46 147 5.21402e+010
+403 6 5.20532e+010
+304 216 5.20175e+010
+325 149 5.19766e+010
+439 64 5.19221e+010
+538 79 5.17986e+010
+256 150 5.17221e+010
+446 376 5.17136e+010
+459 123 5.16661e+010
+49 164 5.1573e+010
+350 240 5.15718e+010
+29 254 5.15042e+010
+86 370 5.13624e+010
+445 7 5.13493e+010
+565 161 5.13269e+010
+618 181 5.12548e+010
+448 340 5.12174e+010
+179 359 5.12101e+010
+129 309 5.10269e+010
+206 293 5.09106e+010
+128 238 5.08845e+010
+189 202 5.07876e+010
+3 381 5.07232e+010
+353 424 5.06914e+010
+473 120 5.03912e+010
+266 139 5.02203e+010
+94 5 5.01763e+010
+514 335 5.01693e+010
+252 422 5.01024e+010
+493 102 5.00648e+010
+191 56 4.98299e+010
+332 295 4.97972e+010
+175 189 4.97566e+010
+172 166 4.96928e+010
+572 449 4.94193e+010
+211 33 4.91903e+010
+227 258 4.91636e+010
+366 95 4.91129e+010
+274 76 4.91036e+010
+297 137 4.90784e+010
+383 89 4.90602e+010
+114 220 4.90305e+010
+121 128 4.90022e+010
+531 103 4.89456e+010
+366 66 4.89191e+010
+321 119 4.87847e+010
+335 49 4.87484e+010
+191 314 4.87464e+010
+592 107 4.86595e+010
+113 204 4.84974e+010
+530 24 4.84793e+010
+526 422 4.84226e+010
+389 333 4.8362e+010
+136 177 4.83556e+010
+205 162 4.82904e+010
+344 276 4.82233e+010
+326 296 4.82062e+010
+133 78 4.81512e+010
+216 172 4.80789e+010
+247 346 4.79722e+010
+505 382 4.79666e+010
+135 139 4.79592e+010
+539 62 4.7944e+010
+64 276 4.78054e+010
+298 332 4.77815e+010
+533 161 4.7723e+010
+381 47 4.7674e+010
+485 236 4.75579e+010
+201 166 4.75552e+010
+311 298 4.75367e+010
+511 210 4.75178e+010
+273 353 4.74722e+010
+245 402 4.74596e+010
+127 40 4.73606e+010
+528 161 4.73604e+010
+259 228 4.73205e+010
+375 225 4.73104e+010
+406 142 4.72753e+010
+470 418 4.72528e+010
+105 430 4.72391e+010
+248 191 4.72349e+010
+522 140 4.71781e+010
+125 112 4.71077e+010
+412 220 4.70877e+010
+528 142 4.70175e+010
+136 93 4.69685e+010
+484 161 4.69197e+010
+224 154 4.68488e+010
+161 31 4.67321e+010
+270 91 4.67181e+010
+415 262 4.66833e+010
+44 476 4.66647e+010
+19 65 4.65835e+010
+447 245 4.65073e+010
+163 249 4.64962e+010
+437 303 4.6456e+010
+90 377 4.63473e+010
+110 168 4.63114e+010
+407 162 4.61776e+010
+495 141 4.60207e+010
+383 181 4.59775e+010
+513 261 4.59714e+010
+330 212 4.59334e+010
+270 221 4.57257e+010
+326 180 4.57111e+010
+196 343 4.56861e+010
+179 75 4.56828e+010
+385 450 4.55955e+010
+199 328 4.55717e+010
+462 161 4.54771e+010
+252 222 4.54354e+010
+83 404 4.54315e+010
+301 86 4.53074e+010
+491 470 4.52757e+010
+367 2 4.52617e+010
+188 104 4.52614e+010
+219 387 4.5111e+010
+83 183 4.50702e+010
+241 68 4.50352e+010
+92 112 4.49915e+010
+303 406 4.49889e+010
+51 377 4.48991e+010
+497 283 4.48926e+010
+303 170 4.48661e+010
+574 39 4.48199e+010
+332 255 4.47975e+010
+328 66 4.47761e+010
+174 418 4.46909e+010
+55 303 4.46814e+010
+54 358 4.44978e+010
+345 306 4.44643e+010
+388 97 4.44411e+010
+267 146 4.44047e+010
+408 98 4.43952e+010
+175 40 4.43093e+010
+246 327 4.42266e+010
+196 82 4.4176e+010
+308 8 4.41497e+010
+94 198 4.41228e+010
+127 26 4.41154e+010
+65 213 4.40957e+010
+373 76 4.40247e+010
+172 107 4.40063e+010
+245 385 4.4005e+010
+72 24 4.39873e+010
+203 397 4.38836e+010
+57 364 4.37464e+010
+406 199 4.36949e+010
+102 234 4.35415e+010
+278 417 4.34909e+010
+133 376 4.34855e+010
+383 325 4.34367e+010
+347 297 4.33851e+010
+557 302 4.33822e+010
+129 94 4.33248e+010
+230 150 4.32992e+010
+160 98 4.3297e+010
+251 184 4.32695e+010
+575 54 4.31543e+010
+539 220 4.30843e+010
+95 284 4.30735e+010
+422 63 4.30592e+010
+308 448 4.30459e+010
+38 10 4.30421e+010
+390 133 4.30261e+010
+560 81 4.28946e+010
+456 201 4.28621e+010
+409 281 4.28033e+010
+84 59 4.26616e+010
+125 329 4.26294e+010
+344 341 4.26099e+010
+32 112 4.25214e+010
+358 282 4.25049e+010
+282 135 4.25004e+010
+463 100 4.24518e+010
+117 132 4.24352e+010
+362 360 4.24183e+010
+538 185 4.23886e+010
+102 294 4.23586e+010
+63 230 4.2353e+010
+290 89 4.23026e+010
+342 136 4.22878e+010
+279 194 4.22839e+010
+151 133 4.21973e+010
+185 170 4.21564e+010
+201 317 4.21194e+010
+279 111 4.21074e+010
+533 341 4.20454e+010
+222 214 4.19853e+010
+479 241 4.19623e+010
+153 57 4.19584e+010
+308 183 4.19302e+010
+145 255 4.18727e+010
+79 273 4.1774e+010
+175 121 4.17247e+010
+494 23 4.17192e+010
+545 438 4.16325e+010
+104 163 4.16323e+010
+302 102 4.15263e+010
+2 166 4.15102e+010
+277 164 4.14697e+010
+113 176 4.14639e+010
+39 242 4.1453e+010
+62 133 4.13483e+010
+571 269 4.13059e+010
+192 326 4.1251e+010
+480 171 4.12404e+010
+11 72 4.11881e+010
+217 106 4.11728e+010
+87 230 4.11431e+010
+526 122 4.11163e+010
+290 264 4.11045e+010
+38 167 4.10935e+010
+310 259 4.10753e+010
+342 314 4.10616e+010
+550 121 4.10082e+010
+513 180 4.09793e+010
+525 79 4.09757e+010
+500 223 4.09667e+010
+324 370 4.08727e+010
+175 342 4.08502e+010
+265 249 4.08032e+010
+434 381 4.08026e+010
+394 222 4.07814e+010
+433 240 4.06909e+010
+186 374 4.06626e+010
+378 182 4.0606e+010
+576 164 4.05546e+010
+95 59 4.04946e+010
+501 102 4.04484e+010
+347 144 4.04427e+010
+572 328 4.0432e+010
+131 148 4.04177e+010
+237 149 4.04037e+010
+232 15 4.03693e+010
+482 333 4.03618e+010
+54 449 4.02545e+010
+187 219 4.02196e+010
+350 86 4.02176e+010
+461 221 4.01561e+010
+448 64 4.01545e+010
+48 458 4.01122e+010
+93 477 3.99942e+010
+327 341 3.99786e+010
+289 397 3.99633e+010
+531 239 3.99271e+010
+13 236 3.99191e+010
+527 398 3.99185e+010
+279 362 3.99062e+010
+258 200 3.98364e+010
+200 415 3.98343e+010
+471 144 3.98116e+010
+46 420 3.97354e+010
+320 30 3.97192e+010
+461 357 3.97095e+010
+37 288 3.96965e+010
+140 317 3.95709e+010
+32 103 3.95437e+010
+279 126 3.95147e+010
+196 310 3.94644e+010
+351 363 3.93837e+010
+398 142 3.92968e+010
+94 422 3.92674e+010
+132 255 3.92137e+010
+534 393 3.91617e+010
+54 221 3.91386e+010
+576 91 3.90779e+010
+367 247 3.90466e+010
+513 402 3.90183e+010
+150 38 3.89863e+010
+266 118 3.88778e+010
+262 217 3.88026e+010
+240 194 3.87459e+010
+44 152 3.87386e+010
+361 449 3.87107e+010
+124 94 3.87072e+010
+433 63 3.86952e+010
+86 356 3.86609e+010
+34 97 3.86142e+010
+120 220 3.86083e+010
+597 272 3.86057e+010
+431 340 3.85635e+010
+344 262 3.85017e+010
+281 394 3.83735e+010
+561 201 3.83703e+010
+177 331 3.83398e+010
+215 427 3.83003e+010
+305 54 3.82958e+010
+276 53 3.82867e+010
+202 7 3.82203e+010
+472 42 3.82113e+010
+187 257 3.81903e+010
+365 104 3.81519e+010
+69 417 3.80923e+010
+424 102 3.8066e+010
+292 348 3.80595e+010
+180 123 3.79994e+010
+228 92 3.79967e+010
+155 396 3.79394e+010
+146 452 3.78738e+010
+311 265 3.78489e+010
+59 372 3.78394e+010
+588 18 3.78196e+010
+299 106 3.77682e+010
+506 198 3.77463e+010
+468 423 3.76896e+010
+399 67 3.7579e+010
+425 124 3.74598e+010
+117 360 3.74533e+010
+180 56 3.73769e+010
+358 9 3.73713e+010
+42 353 3.73605e+010
+485 221 3.73394e+010
+107 220 3.72496e+010
+420 362 3.72259e+010
+388 203 3.72111e+010
+228 347 3.7188e+010
+282 206 3.71678e+010
+540 263 3.71672e+010
+380 122 3.71351e+010
+315 238 3.71122e+010
+482 123 3.70868e+010
+392 243 3.7064e+010
+260 383 3.70531e+010
+427 44 3.70228e+010
+215 248 3.70145e+010
+216 235 3.69536e+010
+347 370 3.69394e+010
+373 103 3.69319e+010
+158 169 3.69142e+010
+200 293 3.6914e+010
+427 63 3.6885e+010
+515 381 3.67938e+010
+393 217 3.67713e+010
+106 2 3.67461e+010
+483 327 3.66288e+010
+176 180 3.66173e+010
+119 54 3.65831e+010
+460 40 3.65809e+010
+562 70 3.65314e+010
+232 399 3.65078e+010
+30 134 3.6472e+010
+83 101 3.64714e+010
+81 219 3.64015e+010
+394 335 3.63559e+010
+133 411 3.62046e+010
+398 94 3.61801e+010
+303 443 3.61648e+010
+299 399 3.61394e+010
+153 75 3.60263e+010
+426 470 3.60008e+010
+440 468 3.59877e+010
+124 184 3.59758e+010
+63 439 3.59265e+010
+326 13 3.59186e+010
+206 157 3.58937e+010
+416 377 3.58622e+010
+358 52 3.58455e+010
+579 42 3.58104e+010
+58 79 3.5801e+010
+108 109 3.57217e+010
+512 295 3.57044e+010
+158 74 3.56778e+010
+512 109 3.56606e+010
+304 292 3.56252e+010
+263 403 3.56245e+010
+416 282 3.55955e+010
+450 324 3.55674e+010
+60 204 3.5562e+010
+290 249 3.55601e+010
+568 383 3.55355e+010
+451 91 3.55133e+010
+199 111 3.5448e+010
+296 410 3.53008e+010
+161 430 3.5292e+010
+146 165 3.52503e+010
+407 262 3.51982e+010
+11 114 3.51579e+010
+452 43 3.51561e+010
+81 39 3.51526e+010
+68 304 3.51286e+010
+266 286 3.50569e+010
+589 162 3.50547e+010
+259 159 3.50422e+010
+510 253 3.50396e+010
+465 354 3.4986e+010
+99 426 3.49468e+010
+572 364 3.49417e+010
+306 354 3.49271e+010
+161 397 3.48406e+010
+432 268 3.47975e+010
+234 158 3.47822e+010
+271 183 3.47702e+010
+465 236 3.47321e+010
+157 103 3.47265e+010
+164 379 3.47063e+010
+483 286 3.4677e+010
+64 218 3.46374e+010
+283 80 3.46323e+010
+158 164 3.4615e+010
+185 311 3.45974e+010
+109 27 3.45722e+010
+194 201 3.45451e+010
+153 222 3.44563e+010
+212 94 3.44123e+010
+88 183 3.43887e+010
+93 95 3.42197e+010
+533 346 3.4197e+010
+350 318 3.41865e+010
+146 86 3.412e+010
+588 345 3.41179e+010
+229 178 3.41099e+010
+313 132 3.40837e+010
+401 169 3.40819e+010
+108 260 3.40652e+010
+402 217 3.40438e+010
+125 413 3.4014e+010
+316 101 3.39619e+010
+103 392 3.39198e+010
+524 289 3.38997e+010
+320 96 3.38785e+010
+117 428 3.38694e+010
+90 339 3.38596e+010
+154 21 3.38489e+010
+215 62 3.38376e+010
+198 10 3.3806e+010
+391 449 3.36784e+010
+407 106 3.36585e+010
+78 59 3.35671e+010
+496 462 3.35527e+010
+545 160 3.35027e+010
+414 143 3.34629e+010
+95 340 3.338e+010
+224 51 3.32874e+010
+438 242 3.32699e+010
+3 109 3.32661e+010
+259 107 3.32208e+010
+393 184 3.3117e+010
+54 44 3.31089e+010
+144 432 3.3078e+010
+114 374 3.30458e+010
+246 172 3.30422e+010
+529 136 3.30149e+010
+151 400 3.29761e+010
+297 182 3.29591e+010
+245 88 3.29369e+010
+305 148 3.29127e+010
+154 345 3.29026e+010
+368 162 3.28323e+010
+41 395 3.2737e+010
+164 310 3.27343e+010
+161 121 3.27246e+010
+219 315 3.26367e+010
+208 308 3.26338e+010
+332 397 3.26169e+010
+90 277 3.26092e+010
+297 257 3.25909e+010
+569 183 3.25841e+010
+468 199 3.25682e+010
+328 326 3.25467e+010
+521 426 3.25179e+010
+429 88 3.25133e+010
+132 477 3.24983e+010
+338 221 3.24863e+010
+333 28 3.24777e+010
+346 47 3.24276e+010
+458 140 3.24173e+010
+77 375 3.24128e+010
+24 185 3.24e+010
+374 366 3.2339e+010
+577 403 3.22949e+010
+482 166 3.22838e+010
+251 247 3.22404e+010
+33 39 3.21792e+010
+6 151 3.21268e+010
+405 221 3.2048e+010
+297 125 3.2047e+010
+133 392 3.20317e+010
+123 343 3.1969e+010
+247 180 3.19511e+010
+520 77 3.18907e+010
+187 363 3.18392e+010
+549 281 3.18373e+010
+344 187 3.18327e+010
+208 315 3.18266e+010
+384 111 3.1804e+010
+344 329 3.17987e+010
+41 337 3.17522e+010
+136 21 3.16139e+010
+538 103 3.15847e+010
+11 45 3.15805e+010
+124 82 3.15682e+010
+28 271 3.15576e+010
+50 11 3.15428e+010
+221 84 3.1529e+010
+374 126 3.15195e+010
+464 226 3.15074e+010
+469 22 3.15062e+010
+290 112 3.14465e+010
+274 313 3.14332e+010
+214 132 3.1424e+010
+347 119 3.1409e+010
+88 261 3.14026e+010
+586 141 3.13515e+010
+555 264 3.13205e+010
+486 242 3.1319e+010
+39 82 3.12651e+010
+519 348 3.11791e+010
+302 141 3.11393e+010
+275 318 3.11273e+010
+101 112 3.11016e+010
+77 29 3.10937e+010
+391 52 3.10937e+010
+371 190 3.10534e+010
+454 418 3.10485e+010
+374 355 3.10466e+010
+418 79 3.09357e+010
+368 31 3.0914e+010
+565 463 3.08506e+010
+59 110 3.08179e+010
+252 238 3.07669e+010
+82 106 3.07561e+010
+54 389 3.07413e+010
+119 423 3.074e+010
+487 119 3.06858e+010
+215 402 3.0685e+010
+545 141 3.06463e+010
+144 179 3.06145e+010
+520 362 3.06065e+010
+150 2 3.06018e+010
+559 422 3.05462e+010
+361 157 3.05386e+010
+109 77 3.03859e+010
+170 131 3.03735e+010
+173 274 3.03427e+010
+59 98 3.03249e+010
+546 262 3.02916e+010
+327 25 3.027e+010
+424 197 3.02592e+010
+108 148 3.02225e+010
+449 284 3.02163e+010
+561 144 3.02124e+010
+333 415 3.02022e+010
+31 81 3.01951e+010
+450 117 3.01937e+010
+281 311 3.01822e+010
+210 163 3.01386e+010
+236 295 3.00963e+010
+464 139 2.99997e+010
+426 24 2.99766e+010
+374 144 2.99607e+010
+250 85 2.99324e+010
+42 97 2.99153e+010
+411 183 2.98414e+010
+102 308 2.9836e+010
+146 327 2.98316e+010
+18 320 2.98055e+010
+382 260 2.97826e+010
+410 414 2.97498e+010
+510 114 2.97336e+010
+217 164 2.97335e+010
+45 407 2.97095e+010
+340 28 2.96963e+010
+189 135 2.96747e+010
+247 419 2.96637e+010
+562 264 2.96544e+010
+146 15 2.9622e+010
+399 131 2.95569e+010
+164 190 2.95498e+010
+423 204 2.9493e+010
+23 254 2.94707e+010
+258 349 2.94479e+010
+255 181 2.93786e+010
+222 176 2.93411e+010
+272 414 2.92845e+010
+146 221 2.92757e+010
+244 430 2.92407e+010
+218 284 2.92384e+010
+95 359 2.91648e+010
+469 302 2.91067e+010
+589 350 2.90375e+010
+142 239 2.90192e+010
+310 138 2.898e+010
+200 126 2.89645e+010
+534 303 2.8949e+010
+182 381 2.89384e+010
+14 434 2.89163e+010
+479 458 2.88576e+010
+465 4 2.88197e+010
+533 93 2.87537e+010
+152 184 2.87195e+010
+70 390 2.86936e+010
+436 105 2.86594e+010
+25 133 2.85635e+010
+240 383 2.84977e+010
+412 245 2.84601e+010
+55 294 2.83376e+010
+470 139 2.83334e+010
+575 98 2.83319e+010
+477 221 2.83129e+010
+277 238 2.82426e+010
+209 187 2.824e+010
+187 263 2.82111e+010
+544 175 2.81635e+010
+465 379 2.81108e+010
+207 74 2.80771e+010
+420 138 2.80744e+010
+553 18 2.80658e+010
+543 82 2.80612e+010
+262 319 2.80605e+010
+100 160 2.80572e+010
+232 183 2.80508e+010
+438 454 2.80388e+010
+501 21 2.80242e+010
+472 82 2.80193e+010
+584 37 2.79893e+010
+449 168 2.79878e+010
+570 59 2.79401e+010
+342 297 2.79395e+010
+62 164 2.79185e+010
+351 140 2.79017e+010
+53 148 2.78947e+010
+492 58 2.78101e+010
+514 364 2.77433e+010
+355 475 2.77028e+010
+7 201 2.76499e+010
+147 344 2.7621e+010
+572 405 2.75849e+010
+42 305 2.75842e+010
+254 193 2.75831e+010
+210 21 2.75787e+010
+542 457 2.75554e+010
+435 279 2.75505e+010
+289 136 2.7546e+010
+388 83 2.75304e+010
+267 294 2.75228e+010
+450 129 2.74913e+010
+232 101 2.749e+010
+544 339 2.74762e+010
+63 182 2.73997e+010
+198 28 2.73554e+010
+232 70 2.72973e+010
+331 333 2.72972e+010
+140 428 2.71958e+010
+602 274 2.71428e+010
+259 370 2.71214e+010
+288 221 2.71058e+010
+158 252 2.70542e+010
+149 138 2.70135e+010
+120 116 2.69608e+010
+419 52 2.69422e+010
+496 476 2.69334e+010
+260 457 2.69309e+010
+132 65 2.69207e+010
+90 399 2.68978e+010
+87 395 2.68438e+010
+517 82 2.68371e+010
+438 41 2.67951e+010
+440 394 2.67585e+010
+419 92 2.67578e+010
+384 65 2.66859e+010
+570 375 2.6674e+010
+595 58 2.66562e+010
+433 376 2.66289e+010
+550 141 2.66063e+010
+102 255 2.66014e+010
+73 46 2.65872e+010
+230 112 2.65864e+010
+472 211 2.6582e+010
+329 142 2.65642e+010
+447 183 2.65628e+010
+255 81 2.65583e+010
+159 56 2.65499e+010
+99 96 2.64419e+010
+38 254 2.64371e+010
+211 376 2.63959e+010
+195 217 2.63879e+010
+579 324 2.63806e+010
+287 158 2.63691e+010
+305 411 2.63079e+010
+226 121 2.62837e+010
+266 111 2.61959e+010
+414 300 2.61837e+010
+334 435 2.61659e+010
+149 231 2.61302e+010
+15 215 2.6121e+010
+573 423 2.60898e+010
+289 123 2.60373e+010
+497 59 2.60154e+010
+187 326 2.59796e+010
+283 200 2.59641e+010
+375 282 2.59252e+010
+141 116 2.58685e+010
+2 201 2.58619e+010
+300 346 2.5846e+010
+250 163 2.58453e+010
+565 227 2.58374e+010
+84 310 2.5829e+010
+206 93 2.58285e+010
+37 182 2.58108e+010
+400 199 2.58055e+010
+164 36 2.57959e+010
+501 82 2.57893e+010
+72 4 2.57694e+010
+404 113 2.57525e+010
+88 244 2.57446e+010
+184 347 2.57369e+010
+150 202 2.57237e+010
+269 313 2.56412e+010
+169 359 2.56171e+010
+253 110 2.55761e+010
+258 136 2.55598e+010
+323 260 2.55417e+010
+401 429 2.55375e+010
+385 355 2.55357e+010
+429 223 2.55201e+010
+335 260 2.55109e+010
+373 152 2.54889e+010
+215 99 2.54714e+010
+175 139 2.54679e+010
+181 220 2.53852e+010
+389 90 2.53668e+010
+192 364 2.53626e+010
+418 470 2.53438e+010
+167 414 2.5313e+010
+487 52 2.53024e+010
+122 446 2.52947e+010
+27 118 2.52279e+010
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_3_5.txt b/test_data/harriscorners/hc_msc_5.00_0.10_3_5.txt
new file mode 100644
index 0000000..6e78b92
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_3_5.txt
@@ -0,0 +1,1473 @@
+1472
+273 366 1.92986e+012
+122 43 1.59863e+012
+244 94 1.43017e+012
+330 128 1.29686e+012
+422 181 1.28873e+012
+84 78 1.23897e+012
+298 53 1.21622e+012
+448 297 1.19804e+012
+237 19 1.18589e+012
+214 72 1.18216e+012
+200 17 1.17126e+012
+134 214 1.15214e+012
+485 59 1.07957e+012
+553 40 1.05189e+012
+395 318 1.0339e+012
+272 291 1.03228e+012
+436 67 1.02144e+012
+124 198 1.00469e+012
+175 94 9.89973e+011
+447 397 9.77159e+011
+401 262 9.74749e+011
+507 122 9.54085e+011
+387 178 9.46806e+011
+47 27 9.45205e+011
+544 168 9.42298e+011
+35 138 9.38376e+011
+303 183 9.36694e+011
+363 401 9.34352e+011
+125 364 9.30786e+011
+425 321 9.22566e+011
+160 143 9.19384e+011
+124 254 9.18721e+011
+209 55 8.96429e+011
+286 297 8.95126e+011
+317 335 8.94043e+011
+302 176 8.82282e+011
+253 139 8.79908e+011
+243 202 8.78556e+011
+184 36 8.72212e+011
+82 28 8.66168e+011
+65 235 8.55138e+011
+76 256 8.42783e+011
+222 38 8.36167e+011
+90 198 8.31147e+011
+418 8 8.29339e+011
+262 441 8.25298e+011
+343 9 8.24831e+011
+54 29 8.23194e+011
+137 209 8.19056e+011
+360 295 8.17085e+011
+393 143 8.12788e+011
+257 385 8.084e+011
+104 62 8.04932e+011
+456 282 7.97721e+011
+294 15 7.93264e+011
+48 98 7.74279e+011
+239 91 7.73496e+011
+207 224 7.70283e+011
+341 337 7.61037e+011
+92 214 7.60219e+011
+116 44 7.57847e+011
+325 88 7.56989e+011
+447 263 7.53726e+011
+514 76 7.47079e+011
+78 2 7.46902e+011
+174 312 7.42521e+011
+65 319 7.41009e+011
+508 17 7.39035e+011
+470 239 7.37189e+011
+281 112 7.36766e+011
+543 365 7.25604e+011
+207 435 7.24415e+011
+301 165 7.23962e+011
+65 343 7.21947e+011
+523 264 7.21332e+011
+466 197 7.17966e+011
+543 15 7.15152e+011
+131 36 7.10127e+011
+412 256 7.06983e+011
+509 164 7.05627e+011
+449 218 7.00289e+011
+390 58 6.97112e+011
+282 117 6.95616e+011
+154 236 6.95477e+011
+2 46 6.89764e+011
+543 216 6.86997e+011
+320 224 6.84964e+011
+427 119 6.83895e+011
+386 221 6.83529e+011
+101 222 6.83512e+011
+225 182 6.82813e+011
+196 57 6.79614e+011
+30 8 6.79284e+011
+110 240 6.77352e+011
+407 65 6.724e+011
+423 45 6.69099e+011
+36 145 6.68942e+011
+166 241 6.65958e+011
+128 2 6.64604e+011
+139 203 6.60608e+011
+498 159 6.57058e+011
+360 335 6.55112e+011
+202 313 6.53721e+011
+487 23 6.52978e+011
+313 76 6.48583e+011
+110 135 6.48018e+011
+100 79 6.46208e+011
+418 164 6.44522e+011
+459 263 6.43083e+011
+325 164 6.40245e+011
+562 224 6.37081e+011
+145 310 6.37002e+011
+383 162 6.36809e+011
+465 393 6.34188e+011
+535 242 6.33042e+011
+308 371 6.32813e+011
+124 185 6.31477e+011
+276 182 6.31381e+011
+82 135 6.30648e+011
+379 69 6.30242e+011
+141 183 6.25156e+011
+311 150 6.24325e+011
+244 165 6.22229e+011
+542 209 6.22127e+011
+261 297 6.21112e+011
+512 98 6.17071e+011
+127 164 6.12311e+011
+60 184 6.10259e+011
+45 218 6.09983e+011
+545 58 6.07881e+011
+512 342 6.06258e+011
+58 74 6.04885e+011
+76 237 6.04431e+011
+86 255 6.02846e+011
+377 318 6.0115e+011
+252 13 6.00786e+011
+510 173 5.99221e+011
+235 162 5.97608e+011
+359 167 5.97381e+011
+211 438 5.95814e+011
+245 143 5.94071e+011
+545 41 5.86981e+011
+389 140 5.85981e+011
+138 173 5.85212e+011
+433 147 5.82715e+011
+382 6 5.80636e+011
+131 26 5.8032e+011
+268 53 5.78802e+011
+453 204 5.7795e+011
+366 7 5.77309e+011
+78 80 5.73303e+011
+264 201 5.7232e+011
+320 313 5.67297e+011
+59 218 5.65857e+011
+390 48 5.64601e+011
+372 81 5.63486e+011
+29 237 5.63218e+011
+404 121 5.63126e+011
+235 73 5.62391e+011
+509 1 5.61893e+011
+484 338 5.60231e+011
+41 63 5.60107e+011
+171 18 5.59544e+011
+33 99 5.59238e+011
+214 58 5.58321e+011
+71 147 5.57635e+011
+261 222 5.56954e+011
+364 251 5.56052e+011
+174 238 5.55153e+011
+461 279 5.54228e+011
+480 297 5.53492e+011
+529 24 5.53049e+011
+478 181 5.51115e+011
+347 178 5.51071e+011
+230 36 5.50376e+011
+113 345 5.48792e+011
+88 148 5.48524e+011
+152 222 5.47607e+011
+477 5 5.47488e+011
+528 102 5.46847e+011
+10 101 5.45253e+011
+442 23 5.44526e+011
+451 339 5.41897e+011
+529 183 5.41557e+011
+242 71 5.41518e+011
+195 125 5.40678e+011
+486 358 5.39897e+011
+524 20 5.39763e+011
+102 360 5.39007e+011
+175 112 5.38988e+011
+62 60 5.37944e+011
+552 384 5.34183e+011
+314 85 5.30702e+011
+138 110 5.2939e+011
+36 176 5.28314e+011
+364 200 5.25526e+011
+411 163 5.25007e+011
+495 119 5.23546e+011
+31 270 5.21195e+011
+163 277 5.19202e+011
+233 199 5.17617e+011
+211 185 5.17545e+011
+284 403 5.17435e+011
+480 82 5.16122e+011
+573 141 5.14659e+011
+106 39 5.12445e+011
+221 16 5.10794e+011
+113 3 5.05466e+011
+260 237 5.04727e+011
+166 96 5.03821e+011
+488 264 5.02923e+011
+207 450 5.01335e+011
+525 199 5.00383e+011
+354 320 4.98479e+011
+511 220 4.98269e+011
+142 324 4.97098e+011
+164 20 4.97084e+011
+113 392 4.96565e+011
+364 258 4.96077e+011
+209 20 4.95621e+011
+112 213 4.95048e+011
+246 206 4.94647e+011
+266 295 4.94623e+011
+555 181 4.93741e+011
+332 106 4.89105e+011
+36 299 4.89054e+011
+509 455 4.88517e+011
+160 111 4.86011e+011
+262 165 4.8502e+011
+569 39 4.83482e+011
+217 208 4.83414e+011
+177 106 4.82489e+011
+68 45 4.82249e+011
+468 124 4.81658e+011
+163 216 4.79722e+011
+156 94 4.79502e+011
+412 45 4.78962e+011
+186 217 4.78434e+011
+159 183 4.76075e+011
+125 260 4.75915e+011
+271 278 4.75202e+011
+293 27 4.74169e+011
+130 217 4.73849e+011
+387 10 4.73282e+011
+48 133 4.71947e+011
+410 353 4.71542e+011
+524 346 4.70857e+011
+559 18 4.70798e+011
+225 420 4.70254e+011
+395 261 4.70183e+011
+286 165 4.68568e+011
+423 398 4.67931e+011
+318 385 4.67742e+011
+566 61 4.6631e+011
+502 143 4.60856e+011
+96 446 4.60293e+011
+229 292 4.59932e+011
+221 150 4.58714e+011
+334 90 4.57819e+011
+271 242 4.57473e+011
+317 165 4.56826e+011
+527 360 4.56078e+011
+354 126 4.55995e+011
+418 440 4.54542e+011
+484 179 4.53776e+011
+475 261 4.52588e+011
+283 72 4.50438e+011
+348 338 4.49488e+011
+523 123 4.48736e+011
+305 193 4.4739e+011
+571 161 4.46627e+011
+424 261 4.459e+011
+185 20 4.45354e+011
+537 393 4.43363e+011
+548 182 4.43175e+011
+525 172 4.42556e+011
+272 167 4.42547e+011
+63 133 4.421e+011
+276 352 4.40707e+011
+479 15 4.38862e+011
+372 117 4.38723e+011
+151 307 4.37482e+011
+273 71 4.3699e+011
+183 138 4.36352e+011
+346 350 4.34636e+011
+325 141 4.33477e+011
+380 337 4.32763e+011
+368 144 4.31463e+011
+48 151 4.31342e+011
+412 5 4.30404e+011
+24 62 4.29742e+011
+253 75 4.29542e+011
+223 220 4.29041e+011
+537 139 4.28777e+011
+373 162 4.28079e+011
+509 83 4.27228e+011
+579 17 4.25966e+011
+109 59 4.25613e+011
+337 9 4.25606e+011
+544 3 4.25295e+011
+183 401 4.25159e+011
+277 138 4.23694e+011
+273 131 4.23271e+011
+362 130 4.23183e+011
+422 335 4.22727e+011
+70 27 4.22453e+011
+417 84 4.22161e+011
+473 63 4.19953e+011
+449 402 4.19729e+011
+387 126 4.18887e+011
+306 363 4.18074e+011
+401 276 4.13794e+011
+191 277 4.13719e+011
+287 343 4.13669e+011
+274 53 4.13606e+011
+361 316 4.12406e+011
+362 395 4.10444e+011
+297 420 4.09226e+011
+381 26 4.0871e+011
+76 8 4.08459e+011
+273 296 4.07808e+011
+520 182 4.07754e+011
+278 144 4.07012e+011
+343 122 4.05444e+011
+177 261 4.03698e+011
+188 181 4.03405e+011
+192 172 4.01978e+011
+352 145 4.01811e+011
+376 85 4.01603e+011
+222 115 4.00172e+011
+437 339 3.99902e+011
+436 182 3.99606e+011
+449 139 3.99499e+011
+386 294 3.99049e+011
+512 202 3.96444e+011
+62 371 3.9565e+011
+157 73 3.95642e+011
+102 5 3.94907e+011
+278 392 3.94326e+011
+287 210 3.93408e+011
+326 426 3.92902e+011
+292 121 3.92366e+011
+534 267 3.91888e+011
+301 102 3.91361e+011
+79 474 3.9035e+011
+578 50 3.88763e+011
+79 270 3.88226e+011
+252 423 3.88147e+011
+454 83 3.88029e+011
+511 139 3.87902e+011
+102 235 3.87819e+011
+256 148 3.87571e+011
+456 3 3.86374e+011
+498 65 3.86181e+011
+267 15 3.85942e+011
+446 7 3.85712e+011
+225 295 3.85627e+011
+425 376 3.84898e+011
+302 215 3.84809e+011
+364 181 3.84549e+011
+404 338 3.83438e+011
+167 326 3.83115e+011
+216 145 3.82783e+011
+51 289 3.81911e+011
+242 57 3.80704e+011
+282 50 3.80231e+011
+511 128 3.79757e+011
+345 275 3.79057e+011
+154 198 3.78856e+011
+463 27 3.7877e+011
+297 275 3.77705e+011
+133 72 3.76278e+011
+146 160 3.76245e+011
+405 376 3.76141e+011
+505 61 3.76111e+011
+108 45 3.75997e+011
+374 240 3.75791e+011
+498 81 3.75435e+011
+575 126 3.75372e+011
+401 183 3.75163e+011
+531 142 3.75105e+011
+164 208 3.74975e+011
+276 217 3.7212e+011
+386 243 3.71952e+011
+57 5 3.71376e+011
+209 154 3.71217e+011
+430 320 3.71141e+011
+387 326 3.70888e+011
+441 240 3.70604e+011
+182 111 3.70345e+011
+429 1 3.70063e+011
+332 295 3.69671e+011
+161 238 3.68908e+011
+258 89 3.68597e+011
+338 473 3.68418e+011
+221 177 3.67974e+011
+260 71 3.67103e+011
+373 68 3.67068e+011
+324 148 3.66951e+011
+235 346 3.66848e+011
+174 40 3.6554e+011
+330 10 3.65142e+011
+434 397 3.64883e+011
+28 30 3.64622e+011
+382 411 3.64023e+011
+230 265 3.6281e+011
+296 297 3.62746e+011
+562 149 3.62666e+011
+576 179 3.62386e+011
+37 218 3.62206e+011
+344 165 3.62071e+011
+298 69 3.6094e+011
+148 397 3.60778e+011
+395 162 3.60152e+011
+266 30 3.60116e+011
+283 222 3.60108e+011
+518 202 3.59556e+011
+191 145 3.58913e+011
+216 279 3.58153e+011
+542 132 3.58104e+011
+432 111 3.56382e+011
+151 114 3.55893e+011
+31 135 3.55892e+011
+92 292 3.55646e+011
+35 11 3.55297e+011
+541 123 3.54864e+011
+354 25 3.54514e+011
+228 130 3.52025e+011
+418 258 3.51319e+011
+357 220 3.5083e+011
+355 268 3.50447e+011
+109 95 3.50303e+011
+267 130 3.47728e+011
+547 161 3.47204e+011
+36 268 3.47121e+011
+367 300 3.46665e+011
+24 200 3.46195e+011
+306 440 3.45372e+011
+539 96 3.45274e+011
+134 237 3.4363e+011
+75 96 3.4225e+011
+249 219 3.42115e+011
+95 148 3.4169e+011
+539 458 3.41672e+011
+84 2 3.40406e+011
+565 160 3.40326e+011
+164 358 3.39214e+011
+528 40 3.39154e+011
+451 375 3.38945e+011
+1 156 3.38595e+011
+161 126 3.38226e+011
+170 57 3.38042e+011
+376 353 3.37631e+011
+186 108 3.37366e+011
+271 66 3.37333e+011
+327 182 3.37101e+011
+519 60 3.36468e+011
+516 347 3.36213e+011
+269 61 3.3613e+011
+55 66 3.35572e+011
+79 195 3.35282e+011
+84 477 3.34665e+011
+249 313 3.34003e+011
+446 352 3.33923e+011
+138 57 3.33635e+011
+259 35 3.3309e+011
+181 394 3.32654e+011
+85 181 3.32597e+011
+300 264 3.32345e+011
+184 344 3.3171e+011
+379 106 3.31671e+011
+528 194 3.30206e+011
+176 186 3.29911e+011
+22 219 3.29784e+011
+488 3 3.29509e+011
+332 202 3.28767e+011
+177 165 3.28695e+011
+141 22 3.28614e+011
+191 330 3.2778e+011
+287 52 3.2719e+011
+492 140 3.26842e+011
+57 254 3.25774e+011
+264 446 3.25653e+011
+557 246 3.25473e+011
+171 201 3.25275e+011
+571 121 3.25e+011
+370 106 3.23951e+011
+197 131 3.23684e+011
+580 80 3.23056e+011
+554 201 3.22866e+011
+250 365 3.22859e+011
+476 341 3.22267e+011
+561 321 3.22245e+011
+138 98 3.22025e+011
+358 241 3.21549e+011
+206 158 3.19826e+011
+135 129 3.19752e+011
+116 76 3.19058e+011
+476 22 3.19045e+011
+512 92 3.18562e+011
+298 137 3.1817e+011
+130 428 3.17161e+011
+413 99 3.16881e+011
+441 98 3.16782e+011
+324 341 3.16561e+011
+338 391 3.15772e+011
+163 74 3.15268e+011
+314 161 3.15014e+011
+161 168 3.14577e+011
+307 89 3.14402e+011
+410 24 3.14321e+011
+483 376 3.13981e+011
+412 65 3.13935e+011
+489 182 3.13899e+011
+214 124 3.12997e+011
+393 65 3.12983e+011
+406 81 3.12175e+011
+342 37 3.12058e+011
+372 393 3.11665e+011
+405 199 3.11567e+011
+186 170 3.11509e+011
+266 71 3.11439e+011
+47 11 3.11383e+011
+239 349 3.11311e+011
+36 201 3.10901e+011
+260 250 3.10831e+011
+273 221 3.10675e+011
+398 356 3.10336e+011
+58 289 3.10227e+011
+418 283 3.09851e+011
+343 463 3.09132e+011
+444 452 3.08719e+011
+480 165 3.07455e+011
+495 456 3.06636e+011
+478 402 3.05848e+011
+436 304 3.05789e+011
+470 421 3.05359e+011
+481 173 3.05305e+011
+377 6 3.04349e+011
+204 203 3.04143e+011
+393 354 3.0343e+011
+162 134 3.03313e+011
+362 370 3.02518e+011
+533 21 3.02278e+011
+302 206 3.0167e+011
+318 202 3.00682e+011
+190 205 2.98988e+011
+203 294 2.98683e+011
+45 82 2.97882e+011
+278 333 2.97845e+011
+364 354 2.9667e+011
+193 16 2.96243e+011
+395 22 2.96214e+011
+414 21 2.96052e+011
+44 474 2.95905e+011
+341 109 2.958e+011
+525 224 2.95333e+011
+169 116 2.95178e+011
+502 164 2.94292e+011
+460 339 2.93871e+011
+531 62 2.93746e+011
+464 355 2.93075e+011
+352 163 2.92917e+011
+49 159 2.9242e+011
+119 95 2.92343e+011
+95 6 2.91908e+011
+358 10 2.91501e+011
+5 10 2.91368e+011
+279 129 2.9129e+011
+560 272 2.91251e+011
+245 293 2.91091e+011
+269 93 2.90604e+011
+6 65 2.90399e+011
+354 106 2.89694e+011
+536 121 2.89215e+011
+278 191 2.88778e+011
+95 477 2.88334e+011
+478 451 2.88304e+011
+534 160 2.88175e+011
+473 203 2.87646e+011
+42 24 2.87192e+011
+226 72 2.86841e+011
+284 241 2.86451e+011
+572 332 2.86435e+011
+304 157 2.86134e+011
+140 394 2.85968e+011
+178 19 2.857e+011
+66 213 2.84963e+011
+152 448 2.84598e+011
+387 167 2.84549e+011
+185 201 2.8406e+011
+390 297 2.83226e+011
+262 392 2.82993e+011
+110 264 2.82291e+011
+314 222 2.82015e+011
+297 331 2.81968e+011
+309 32 2.81811e+011
+549 223 2.8175e+011
+363 407 2.81256e+011
+119 4 2.81131e+011
+516 18 2.8038e+011
+109 325 2.8027e+011
+123 272 2.8025e+011
+260 329 2.80178e+011
+249 192 2.80037e+011
+287 396 2.79457e+011
+151 152 2.7899e+011
+467 41 2.78748e+011
+49 255 2.78421e+011
+502 362 2.7826e+011
+38 168 2.77937e+011
+541 164 2.77564e+011
+285 262 2.76638e+011
+383 146 2.75822e+011
+62 253 2.75503e+011
+489 43 2.74839e+011
+225 51 2.74466e+011
+510 362 2.74427e+011
+119 60 2.74196e+011
+220 290 2.73912e+011
+142 2 2.73672e+011
+127 77 2.73568e+011
+500 264 2.73557e+011
+258 161 2.73389e+011
+30 219 2.73345e+011
+387 283 2.73273e+011
+216 106 2.73221e+011
+498 224 2.72626e+011
+386 321 2.72546e+011
+191 140 2.72265e+011
+468 141 2.71639e+011
+162 148 2.71518e+011
+80 40 2.71246e+011
+209 420 2.71116e+011
+390 161 2.71016e+011
+278 297 2.70534e+011
+293 312 2.70228e+011
+513 43 2.70098e+011
+432 123 2.695e+011
+186 101 2.69404e+011
+168 197 2.69092e+011
+344 263 2.68849e+011
+131 132 2.68482e+011
+230 149 2.68251e+011
+219 126 2.67757e+011
+262 402 2.67727e+011
+358 161 2.67623e+011
+537 80 2.67598e+011
+193 218 2.67047e+011
+560 61 2.66482e+011
+408 182 2.66335e+011
+326 295 2.66093e+011
+559 80 2.66022e+011
+21 66 2.65645e+011
+462 101 2.65546e+011
+482 366 2.65271e+011
+138 146 2.65135e+011
+165 286 2.65077e+011
+161 254 2.64847e+011
+452 102 2.64575e+011
+148 21 2.64436e+011
+388 97 2.63771e+011
+196 76 2.62877e+011
+236 220 2.62814e+011
+289 183 2.62688e+011
+251 153 2.62649e+011
+290 348 2.62579e+011
+100 198 2.62229e+011
+38 239 2.62028e+011
+90 376 2.6198e+011
+526 423 2.61212e+011
+39 309 2.61037e+011
+453 44 2.5953e+011
+474 245 2.59383e+011
+183 184 2.59346e+011
+179 273 2.58449e+011
+14 203 2.58356e+011
+393 216 2.58176e+011
+374 300 2.58095e+011
+109 147 2.57562e+011
+144 16 2.57252e+011
+149 2 2.57223e+011
+204 164 2.57042e+011
+304 53 2.57031e+011
+595 18 2.56966e+011
+430 89 2.56725e+011
+178 122 2.56618e+011
+94 94 2.56547e+011
+330 257 2.55752e+011
+578 43 2.55635e+011
+461 123 2.55633e+011
+96 256 2.55549e+011
+424 4 2.54981e+011
+53 221 2.54884e+011
+427 182 2.54678e+011
+529 365 2.54476e+011
+509 301 2.54253e+011
+321 29 2.5411e+011
+571 450 2.53796e+011
+402 167 2.53534e+011
+306 106 2.53446e+011
+368 337 2.53443e+011
+460 162 2.53176e+011
+380 121 2.52904e+011
+129 238 2.52726e+011
+551 378 2.52497e+011
+316 238 2.52319e+011
+222 239 2.52238e+011
+162 202 2.52126e+011
+413 298 2.5196e+011
+445 128 2.51372e+011
+368 1 2.51358e+011
+13 81 2.51109e+011
+280 385 2.50771e+011
+57 146 2.50719e+011
+424 62 2.50623e+011
+539 405 2.50571e+011
+508 179 2.50512e+011
+54 302 2.50192e+011
+539 40 2.49787e+011
+439 124 2.49623e+011
+448 24 2.49322e+011
+293 147 2.49189e+011
+507 203 2.48755e+011
+59 40 2.48686e+011
+191 360 2.48576e+011
+118 110 2.48228e+011
+406 163 2.48199e+011
+265 140 2.48161e+011
+309 7 2.47929e+011
+452 162 2.47878e+011
+220 100 2.47573e+011
+380 181 2.46957e+011
+346 298 2.46956e+011
+542 100 2.46769e+011
+163 313 2.46314e+011
+449 445 2.46284e+011
+270 104 2.46255e+011
+307 448 2.45489e+011
+281 35 2.45075e+011
+131 148 2.44908e+011
+53 42 2.4449e+011
+411 471 2.44074e+011
+165 108 2.43993e+011
+111 168 2.43172e+011
+259 274 2.43136e+011
+60 203 2.43008e+011
+371 90 2.42936e+011
+32 66 2.42381e+011
+125 95 2.42327e+011
+109 183 2.4227e+011
+388 15 2.42215e+011
+416 250 2.4203e+011
+514 120 2.4159e+011
+332 241 2.41024e+011
+349 87 2.41e+011
+422 315 2.40875e+011
+120 51 2.40836e+011
+446 377 2.40747e+011
+65 275 2.40583e+011
+281 207 2.40512e+011
+50 62 2.40508e+011
+528 161 2.40403e+011
+18 343 2.404e+011
+69 130 2.40278e+011
+485 162 2.40103e+011
+373 75 2.39694e+011
+182 133 2.39148e+011
+130 254 2.38727e+011
+57 364 2.38655e+011
+39 355 2.38326e+011
+538 186 2.38017e+011
+210 136 2.37907e+011
+289 88 2.36725e+011
+129 113 2.36442e+011
+408 430 2.36419e+011
+41 10 2.36228e+011
+298 398 2.36136e+011
+513 262 2.35943e+011
+537 261 2.35424e+011
+68 337 2.35267e+011
+573 405 2.34751e+011
+565 18 2.34638e+011
+529 31 2.34437e+011
+346 240 2.34292e+011
+260 141 2.34226e+011
+526 382 2.33992e+011
+106 77 2.33847e+011
+26 132 2.3352e+011
+150 231 2.33248e+011
+349 324 2.33033e+011
+243 189 2.32997e+011
+478 241 2.32643e+011
+337 426 2.32253e+011
+55 293 2.31118e+011
+490 59 2.30485e+011
+329 65 2.30267e+011
+118 425 2.30223e+011
+95 422 2.30067e+011
+399 104 2.29991e+011
+3 382 2.29858e+011
+186 309 2.2978e+011
+116 129 2.29397e+011
+249 34 2.28888e+011
+446 123 2.28203e+011
+266 145 2.2816e+011
+33 111 2.2794e+011
+286 34 2.27304e+011
+352 10 2.26591e+011
+389 420 2.26565e+011
+435 89 2.26128e+011
+542 253 2.25893e+011
+333 369 2.2584e+011
+331 142 2.25586e+011
+247 326 2.25505e+011
+484 86 2.25183e+011
+168 149 2.24837e+011
+87 369 2.24826e+011
+599 364 2.2435e+011
+95 59 2.24264e+011
+357 282 2.24136e+011
+136 139 2.24032e+011
+72 409 2.24019e+011
+501 42 2.23977e+011
+73 186 2.23523e+011
+245 385 2.23427e+011
+53 359 2.23239e+011
+557 303 2.23139e+011
+146 79 2.22998e+011
+322 119 2.22889e+011
+30 256 2.22659e+011
+461 43 2.22632e+011
+233 16 2.22307e+011
+176 57 2.2181e+011
+443 320 2.21492e+011
+343 198 2.21412e+011
+366 85 2.20589e+011
+535 93 2.20256e+011
+506 381 2.19241e+011
+346 46 2.19184e+011
+421 81 2.19125e+011
+434 225 2.18303e+011
+334 28 2.18215e+011
+321 104 2.17987e+011
+247 347 2.17703e+011
+471 83 2.17569e+011
+358 143 2.17133e+011
+299 190 2.16469e+011
+194 110 2.16192e+011
+354 16 2.15761e+011
+87 340 2.15699e+011
+113 176 2.15354e+011
+227 259 2.15116e+011
+107 428 2.15042e+011
+521 79 2.14601e+011
+328 320 2.14176e+011
+191 312 2.1417e+011
+85 214 2.14105e+011
+407 142 2.13886e+011
+120 446 2.13849e+011
+584 38 2.13757e+011
+265 260 2.13308e+011
+92 20 2.12982e+011
+107 108 2.1251e+011
+544 91 2.12175e+011
+484 155 2.12171e+011
+385 258 2.11997e+011
+171 165 2.11726e+011
+483 328 2.11044e+011
+570 182 2.10951e+011
+332 415 2.10838e+011
+448 63 2.10657e+011
+147 89 2.10471e+011
+494 163 2.10096e+011
+85 60 2.0994e+011
+242 420 2.09839e+011
+215 174 2.09712e+011
+454 359 2.09436e+011
+171 448 2.09415e+011
+191 55 2.09055e+011
+157 308 2.08915e+011
+420 143 2.08698e+011
+203 128 2.08338e+011
+58 102 2.08325e+011
+384 87 2.08297e+011
+78 60 2.08071e+011
+333 356 2.07972e+011
+281 419 2.07928e+011
+389 133 2.06633e+011
+211 163 2.06517e+011
+308 354 2.05998e+011
+34 31 2.05417e+011
+154 56 2.0486e+011
+497 283 2.04572e+011
+11 218 2.03338e+011
+359 52 2.03195e+011
+126 330 2.03038e+011
+176 76 2.02688e+011
+391 221 2.02483e+011
+236 150 2.0242e+011
+297 182 2.02239e+011
+49 235 2.02108e+011
+482 46 2.02056e+011
+274 205 2.0173e+011
+569 382 2.01339e+011
+203 346 2.01311e+011
+288 125 2.01036e+011
+182 380 2.00994e+011
+260 106 2.00839e+011
+199 29 2.00305e+011
+366 95 2.00299e+011
+280 134 2.00277e+011
+246 400 2.00193e+011
+498 341 2.00121e+011
+498 59 2.00026e+011
+63 8 1.99841e+011
+110 358 1.9982e+011
+122 126 1.99682e+011
+501 102 1.99605e+011
+282 371 1.99585e+011
+513 181 1.99572e+011
+149 129 1.99154e+011
+188 264 1.9904e+011
+436 387 1.98856e+011
+198 194 1.98684e+011
+448 285 1.98677e+011
+229 91 1.98619e+011
+246 181 1.9855e+011
+212 32 1.98544e+011
+27 66 1.98402e+011
+483 288 1.98323e+011
+392 166 1.9829e+011
+252 183 1.97812e+011
+243 218 1.97617e+011
+449 167 1.97114e+011
+184 118 1.96906e+011
+436 320 1.96706e+011
+49 166 1.96674e+011
+200 111 1.96664e+011
+129 309 1.96535e+011
+362 101 1.96335e+011
+514 381 1.95941e+011
+588 161 1.95716e+011
+247 106 1.9538e+011
+229 346 1.95219e+011
+194 135 1.95107e+011
+280 439 1.94933e+011
+301 244 1.94295e+011
+562 143 1.94231e+011
+250 91 1.94211e+011
+438 161 1.93692e+011
+264 310 1.93598e+011
+519 164 1.93526e+011
+115 218 1.93425e+011
+92 79 1.93063e+011
+388 334 1.92726e+011
+408 15 1.9271e+011
+411 415 1.92703e+011
+446 243 1.92111e+011
+471 212 1.92106e+011
+287 111 1.92002e+011
+499 459 1.91937e+011
+424 103 1.91853e+011
+240 194 1.9174e+011
+401 319 1.91682e+011
+391 322 1.91483e+011
+354 424 1.91422e+011
+69 304 1.91135e+011
+498 70 1.9107e+011
+16 216 1.90739e+011
+196 342 1.90558e+011
+433 381 1.90089e+011
+325 13 1.90087e+011
+59 109 1.89793e+011
+240 134 1.89594e+011
+573 422 1.89531e+011
+436 280 1.8923e+011
+110 341 1.8916e+011
+91 276 1.89032e+011
+88 230 1.89009e+011
+95 124 1.88869e+011
+478 205 1.88683e+011
+57 331 1.88511e+011
+433 239 1.88321e+011
+382 46 1.88199e+011
+246 214 1.87978e+011
+213 149 1.87437e+011
+133 93 1.87215e+011
+449 324 1.86672e+011
+43 122 1.86576e+011
+10 475 1.86142e+011
+188 136 1.85994e+011
+9 44 1.85767e+011
+260 229 1.85366e+011
+485 140 1.8515e+011
+251 163 1.85125e+011
+86 310 1.84936e+011
+200 327 1.84798e+011
+367 30 1.84527e+011
+510 347 1.841e+011
+70 476 1.83978e+011
+13 433 1.83941e+011
+195 164 1.83816e+011
+188 304 1.82563e+011
+218 351 1.822e+011
+310 298 1.82159e+011
+201 393 1.8215e+011
+396 46 1.81836e+011
+252 249 1.81604e+011
+401 144 1.81385e+011
+101 165 1.81314e+011
+46 90 1.81268e+011
+3 165 1.81184e+011
+272 146 1.80982e+011
+375 125 1.80873e+011
+354 296 1.80578e+011
+205 416 1.80457e+011
+548 245 1.80088e+011
+418 414 1.80084e+011
+510 114 1.8007e+011
+394 183 1.79825e+011
+136 323 1.79591e+011
+442 64 1.79325e+011
+402 219 1.79221e+011
+64 27 1.79215e+011
+449 178 1.79035e+011
+341 314 1.78246e+011
+528 397 1.78149e+011
+108 28 1.781e+011
+520 425 1.78058e+011
+585 18 1.78028e+011
+12 113 1.77893e+011
+53 450 1.77773e+011
+572 59 1.77532e+011
+412 82 1.77127e+011
+525 189 1.77065e+011
+44 407 1.77059e+011
+4 235 1.76883e+011
+56 171 1.76758e+011
+558 462 1.76458e+011
+246 257 1.76382e+011
+187 325 1.76072e+011
+255 405 1.75988e+011
+446 144 1.75433e+011
+339 221 1.75325e+011
+162 31 1.75114e+011
+96 453 1.75098e+011
+533 340 1.74934e+011
+359 448 1.74675e+011
+430 45 1.73945e+011
+165 379 1.7368e+011
+134 411 1.73646e+011
+18 236 1.73351e+011
+163 37 1.73336e+011
+485 235 1.73183e+011
+534 40 1.72592e+011
+328 26 1.72327e+011
+84 236 1.72273e+011
+375 224 1.72205e+011
+565 463 1.72173e+011
+569 203 1.72115e+011
+362 64 1.72036e+011
+123 83 1.72035e+011
+390 203 1.71685e+011
+261 368 1.71183e+011
+548 283 1.70489e+011
+302 405 1.70485e+011
+310 335 1.70256e+011
+481 440 1.70208e+011
+311 260 1.70118e+011
+347 370 1.7011e+011
+11 72 1.69908e+011
+45 355 1.69854e+011
+562 71 1.6973e+011
+361 214 1.69652e+011
+119 223 1.6962e+011
+75 128 1.69317e+011
+278 165 1.69304e+011
+302 142 1.69276e+011
+168 130 1.69138e+011
+491 341 1.6901e+011
+113 205 1.68873e+011
+487 204 1.6886e+011
+5 151 1.68706e+011
+334 281 1.68524e+011
+330 212 1.68483e+011
+335 49 1.68028e+011
+454 118 1.67395e+011
+137 178 1.67168e+011
+589 309 1.66993e+011
+540 221 1.6688e+011
+470 23 1.6677e+011
+141 116 1.66763e+011
+234 32 1.66667e+011
+546 438 1.66323e+011
+438 455 1.66253e+011
+231 159 1.66207e+011
+482 122 1.66199e+011
+576 165 1.65647e+011
+529 135 1.65629e+011
+65 362 1.65597e+011
+190 349 1.65007e+011
+583 141 1.64587e+011
+451 417 1.64009e+011
+118 116 1.63729e+011
+157 163 1.63683e+011
+163 349 1.63567e+011
+235 262 1.63456e+011
+64 153 1.63369e+011
+86 364 1.63043e+011
+153 217 1.63009e+011
+302 132 1.62825e+011
+156 317 1.62565e+011
+591 104 1.62526e+011
+143 237 1.62479e+011
+245 172 1.62362e+011
+351 364 1.62322e+011
+274 77 1.61994e+011
+123 219 1.61913e+011
+496 475 1.61674e+011
+240 365 1.61526e+011
+328 103 1.61408e+011
+294 269 1.61381e+011
+265 286 1.61299e+011
+319 186 1.6128e+011
+214 425 1.61216e+011
+223 87 1.61119e+011
+320 95 1.61089e+011
+432 269 1.60823e+011
+131 393 1.60632e+011
+38 287 1.60623e+011
+42 339 1.60337e+011
+605 121 1.60162e+011
+556 265 1.60139e+011
+50 376 1.60082e+011
+154 298 1.60022e+011
+579 214 1.59862e+011
+39 83 1.59831e+011
+414 144 1.5952e+011
+255 80 1.59295e+011
+139 316 1.59229e+011
+374 151 1.58884e+011
+102 295 1.58866e+011
+76 111 1.58861e+011
+254 108 1.58743e+011
+434 26 1.5868e+011
+69 419 1.58592e+011
+103 27 1.58495e+011
+395 241 1.58149e+011
+399 200 1.5809e+011
+484 222 1.57165e+011
+419 363 1.56923e+011
+394 336 1.56513e+011
+275 109 1.56436e+011
+417 471 1.56403e+011
+204 398 1.56335e+011
+151 76 1.5614e+011
+386 450 1.55498e+011
+542 142 1.55465e+011
+512 297 1.5543e+011
+173 417 1.54878e+011
+73 164 1.54799e+011
+87 355 1.5477e+011
+450 197 1.54735e+011
+323 134 1.54734e+011
+362 361 1.54698e+011
+183 316 1.54559e+011
+501 22 1.54553e+011
+462 140 1.54373e+011
+332 392 1.54326e+011
+107 259 1.54015e+011
+334 436 1.53971e+011
+191 254 1.53696e+011
+618 181 1.53329e+011
+85 110 1.5321e+011
+218 315 1.53111e+011
+408 260 1.52976e+011
+231 126 1.52941e+011
+412 263 1.52915e+011
+177 330 1.52571e+011
+104 182 1.52331e+011
+90 113 1.52095e+011
+404 104 1.52038e+011
+227 122 1.51922e+011
+465 115 1.5132e+011
+302 87 1.51262e+011
+450 437 1.51189e+011
+370 464 1.51126e+011
+207 309 1.50851e+011
+131 476 1.50719e+011
+39 78 1.50544e+011
+502 420 1.50475e+011
+424 202 1.50358e+011
+437 43 1.50349e+011
+391 449 1.50215e+011
+83 146 1.50161e+011
+514 60 1.5011e+011
+234 295 1.50075e+011
+221 431 1.50008e+011
+121 148 1.49972e+011
+261 456 1.49603e+011
+177 201 1.49526e+011
+408 107 1.49383e+011
+429 223 1.49139e+011
+203 256 1.4891e+011
+351 239 1.48868e+011
+419 97 1.48619e+011
+52 12 1.4835e+011
+507 41 1.48295e+011
+513 324 1.48113e+011
+375 144 1.48023e+011
+82 100 1.47999e+011
+161 326 1.47787e+011
+197 148 1.47718e+011
+72 373 1.47368e+011
+302 444 1.47367e+011
+197 91 1.47349e+011
+113 307 1.47075e+011
+159 152 1.4701e+011
+275 316 1.46726e+011
+114 355 1.46689e+011
+541 380 1.46551e+011
+276 426 1.46475e+011
+523 141 1.46414e+011
+533 346 1.46389e+011
+221 215 1.46226e+011
+143 143 1.46052e+011
+148 137 1.45532e+011
+148 193 1.455e+011
+95 285 1.45157e+011
+36 470 1.45077e+011
+538 62 1.45003e+011
+309 266 1.44663e+011
+456 375 1.44536e+011
+132 376 1.44487e+011
+76 376 1.43911e+011
+462 222 1.43878e+011
+331 334 1.43567e+011
+511 209 1.43345e+011
+348 392 1.43234e+011
+20 317 1.43206e+011
+192 365 1.43206e+011
+344 342 1.43125e+011
+478 221 1.42706e+011
+284 199 1.41916e+011
+316 100 1.41895e+011
+161 61 1.41835e+011
+197 311 1.41617e+011
+565 44 1.41534e+011
+473 356 1.41353e+011
+532 173 1.41336e+011
+451 125 1.41246e+011
+99 151 1.40962e+011
+501 357 1.40878e+011
+299 254 1.40852e+011
+431 82 1.40835e+011
+498 139 1.40765e+011
+149 201 1.40491e+011
+88 286 1.40455e+011
+211 93 1.40314e+011
+88 208 1.40089e+011
+158 101 1.39828e+011
+40 183 1.39654e+011
+444 204 1.39527e+011
+166 309 1.3923e+011
+27 117 1.39166e+011
+44 251 1.38993e+011
+285 158 1.38871e+011
+314 448 1.38812e+011
+413 245 1.38776e+011
+576 91 1.38689e+011
+13 237 1.38682e+011
+297 410 1.38027e+011
+116 289 1.37955e+011
+242 281 1.37782e+011
+49 458 1.37584e+011
+440 468 1.37564e+011
+222 107 1.37502e+011
+303 293 1.37164e+011
+539 128 1.37159e+011
+231 177 1.3679e+011
+399 28 1.36771e+011
+576 311 1.36746e+011
+63 440 1.36669e+011
+232 273 1.3664e+011
+191 187 1.36428e+011
+123 412 1.36134e+011
+156 78 1.36094e+011
+162 431 1.3603e+011
+270 414 1.35836e+011
+403 7 1.35778e+011
+27 45 1.35738e+011
+91 320 1.35647e+011
+469 207 1.35626e+011
+421 298 1.35486e+011
+545 263 1.35254e+011
+425 25 1.35237e+011
+317 460 1.35046e+011
+147 451 1.34909e+011
+487 119 1.34776e+011
+323 370 1.34763e+011
+56 234 1.34653e+011
+51 336 1.34337e+011
+447 133 1.3429e+011
+399 92 1.34176e+011
+208 143 1.34159e+011
+465 161 1.34152e+011
+214 450 1.34067e+011
+378 452 1.34063e+011
+65 307 1.34008e+011
+201 143 1.33993e+011
+99 425 1.33952e+011
+486 242 1.33376e+011
+385 64 1.33342e+011
+579 202 1.33181e+011
+147 326 1.32983e+011
+421 291 1.32775e+011
+457 201 1.32765e+011
+122 342 1.32699e+011
+161 120 1.32481e+011
+570 269 1.32287e+011
+195 83 1.32084e+011
+480 128 1.31997e+011
+577 135 1.31968e+011
+345 140 1.31875e+011
+216 165 1.31682e+011
+400 132 1.31575e+011
+366 67 1.31283e+011
+368 162 1.31262e+011
+570 325 1.31183e+011
+169 123 1.30884e+011
+81 218 1.30687e+011
+176 343 1.30562e+011
+208 315 1.3043e+011
+255 191 1.30404e+011
+430 339 1.30299e+011
+213 131 1.30187e+011
+375 281 1.30173e+011
+280 87 1.30107e+011
+246 15 1.30073e+011
+66 57 1.29978e+011
+145 343 1.29858e+011
+275 196 1.29668e+011
+266 191 1.29239e+011
+411 220 1.29211e+011
+514 401 1.29132e+011
+399 412 1.2879e+011
+354 326 1.28654e+011
+579 57 1.2862e+011
+182 95 1.28552e+011
+147 222 1.2849e+011
+359 28 1.28403e+011
+63 423 1.28057e+011
+80 406 1.27901e+011
+291 11 1.27866e+011
+468 262 1.27848e+011
+62 229 1.27454e+011
+387 21 1.26991e+011
+26 271 1.26875e+011
+139 311 1.26513e+011
+338 63 1.26473e+011
+216 403 1.26424e+011
+197 466 1.26392e+011
+401 43 1.26377e+011
+370 139 1.26371e+011
+194 326 1.2607e+011
+168 291 1.25994e+011
+553 18 1.25865e+011
+257 201 1.25802e+011
+585 345 1.25768e+011
+312 131 1.25714e+011
+490 469 1.25602e+011
+429 162 1.25432e+011
+201 7 1.25139e+011
+225 147 1.25109e+011
+183 56 1.2503e+011
+149 39 1.24937e+011
+169 179 1.2492e+011
+330 217 1.24731e+011
+512 287 1.24698e+011
+116 276 1.24599e+011
+540 443 1.24538e+011
+39 115 1.24388e+011
+324 125 1.2421e+011
+118 181 1.24078e+011
+206 234 1.23833e+011
+146 98 1.23756e+011
+201 87 1.2374e+011
+104 306 1.23652e+011
+243 31 1.23579e+011
+176 140 1.23434e+011
+400 17 1.23326e+011
+107 162 1.23283e+011
+73 59 1.23256e+011
+164 248 1.23028e+011
+212 396 1.22788e+011
+314 126 1.22751e+011
+162 91 1.22697e+011
+386 355 1.22627e+011
+70 259 1.2257e+011
+250 85 1.2252e+011
+381 261 1.2249e+011
+511 368 1.22215e+011
+575 99 1.21994e+011
+180 360 1.21787e+011
+562 200 1.21495e+011
+488 52 1.21401e+011
+344 187 1.21093e+011
+195 201 1.20954e+011
+163 190 1.20931e+011
+63 448 1.20892e+011
+186 375 1.20871e+011
+568 222 1.20631e+011
+356 254 1.20549e+011
+135 102 1.20329e+011
+528 438 1.20135e+011
+430 63 1.20117e+011
+129 125 1.19988e+011
+47 421 1.19958e+011
+24 254 1.19834e+011
+103 98 1.1981e+011
+133 63 1.1969e+011
+336 182 1.19601e+011
+510 245 1.19574e+011
+69 389 1.19472e+011
+195 211 1.1883e+011
+34 336 1.18777e+011
+473 453 1.18743e+011
+89 398 1.18443e+011
+480 457 1.18386e+011
+176 325 1.18332e+011
+193 238 1.1824e+011
+401 425 1.17961e+011
+543 276 1.17675e+011
+514 334 1.17526e+011
+455 437 1.17516e+011
+137 122 1.17424e+011
+54 150 1.17406e+011
+118 263 1.17303e+011
+63 314 1.17162e+011
+324 259 1.17113e+011
+518 361 1.16962e+011
+289 308 1.16942e+011
+225 201 1.1688e+011
+290 140 1.16575e+011
+286 443 1.16489e+011
+357 63 1.16483e+011
+266 79 1.16242e+011
+523 429 1.1616e+011
+578 326 1.15782e+011
+187 291 1.15764e+011
+242 357 1.15725e+011
+493 103 1.15441e+011
+32 40 1.15345e+011
+9 31 1.153e+011
+521 323 1.15187e+011
+521 91 1.15183e+011
+473 102 1.15099e+011
+229 365 1.15087e+011
+334 444 1.15012e+011
+214 290 1.14886e+011
+469 434 1.14746e+011
+165 364 1.14724e+011
+180 221 1.14708e+011
+524 278 1.14688e+011
+410 282 1.14666e+011
+282 79 1.14254e+011
+529 18 1.14253e+011
+208 76 1.14231e+011
+401 67 1.14225e+011
+388 3 1.14007e+011
+181 292 1.13866e+011
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_3_7.txt b/test_data/harriscorners/hc_msc_5.00_0.10_3_7.txt
new file mode 100644
index 0000000..6b2090e
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_3_7.txt
@@ -0,0 +1,1788 @@
+1787
+121 44 4.84941e+012
+274 367 4.55096e+012
+245 94 4.32557e+012
+421 180 4.09909e+012
+331 128 3.79009e+012
+83 77 3.57588e+012
+499 1 3.54332e+012
+401 263 3.53735e+012
+299 53 3.44537e+012
+135 214 3.38247e+012
+238 20 3.18512e+012
+424 322 3.04337e+012
+271 291 3.041e+012
+81 29 3.00702e+012
+199 18 2.81087e+012
+282 113 2.75319e+012
+130 26 2.6925e+012
+75 257 2.68024e+012
+437 68 2.66398e+012
+542 14 2.66063e+012
+458 279 2.59066e+012
+342 8 2.54577e+012
+165 240 2.52535e+012
+55 30 2.51705e+012
+460 264 2.49125e+012
+80 4 2.48443e+012
+510 124 2.44225e+012
+467 238 2.43419e+012
+361 294 2.40389e+012
+151 223 2.38609e+012
+210 436 2.35956e+012
+510 166 2.34537e+012
+394 142 2.31198e+012
+138 204 2.31087e+012
+543 167 2.30272e+012
+302 184 2.29592e+012
+394 317 2.26998e+012
+482 178 2.25352e+012
+213 58 2.2456e+012
+413 255 2.19724e+012
+160 144 2.19052e+012
+486 58 2.18352e+012
+512 78 2.1797e+012
+183 35 2.17467e+012
+104 61 2.13494e+012
+125 255 2.12015e+012
+175 95 2.11358e+012
+562 225 2.08809e+012
+155 235 2.07443e+012
+345 339 2.06081e+012
+243 203 2.05053e+012
+416 8 2.03043e+012
+34 138 2.02214e+012
+554 39 2.01575e+012
+293 16 2.00419e+012
+361 395 2.00337e+012
+208 221 1.99842e+012
+224 181 1.98325e+012
+102 222 1.9817e+012
+528 102 1.9771e+012
+485 338 1.95887e+012
+260 297 1.95155e+012
+83 134 1.93867e+012
+115 43 1.92184e+012
+258 384 1.91941e+012
+79 80 1.91742e+012
+36 145 1.91548e+012
+301 105 1.90955e+012
+175 111 1.89602e+012
+202 313 1.89014e+012
+240 92 1.87419e+012
+544 58 1.87306e+012
+125 186 1.86873e+012
+506 17 1.86781e+012
+244 166 1.86693e+012
+215 71 1.86136e+012
+497 160 1.85503e+012
+158 74 1.84504e+012
+130 37 1.84411e+012
+421 165 1.8432e+012
+319 314 1.83258e+012
+528 24 1.83121e+012
+302 176 1.82144e+012
+66 235 1.81926e+012
+263 442 1.81517e+012
+44 26 1.8113e+012
+221 37 1.80843e+012
+127 164 1.80823e+012
+31 8 1.80453e+012
+34 267 1.7835e+012
+363 400 1.78098e+012
+359 129 1.78061e+012
+326 165 1.77938e+012
+138 210 1.77488e+012
+90 197 1.77061e+012
+209 20 1.768e+012
+126 364 1.75161e+012
+424 45 1.74767e+012
+4 46 1.74517e+012
+196 126 1.74388e+012
+448 399 1.73624e+012
+255 139 1.72906e+012
+164 215 1.72889e+012
+48 98 1.71694e+012
+383 5 1.70794e+012
+299 165 1.69833e+012
+359 166 1.69422e+012
+511 2 1.69332e+012
+378 67 1.69035e+012
+454 204 1.68774e+012
+313 148 1.68372e+012
+276 182 1.67955e+012
+390 59 1.67921e+012
+189 218 1.67475e+012
+41 217 1.6724e+012
+319 225 1.66902e+012
+447 296 1.66424e+012
+326 89 1.65978e+012
+359 334 1.65441e+012
+450 338 1.64766e+012
+112 344 1.64591e+012
+542 365 1.63822e+012
+552 383 1.63668e+012
+127 1 1.63539e+012
+386 178 1.63192e+012
+241 70 1.62946e+012
+234 161 1.6191e+012
+49 26 1.61393e+012
+223 420 1.60955e+012
+282 49 1.60766e+012
+387 220 1.59888e+012
+448 261 1.59269e+012
+513 342 1.59035e+012
+64 319 1.58994e+012
+485 358 1.58928e+012
+269 53 1.58253e+012
+413 45 1.57323e+012
+123 197 1.57009e+012
+383 163 1.56954e+012
+132 75 1.56606e+012
+238 201 1.5641e+012
+391 296 1.56321e+012
+373 84 1.55277e+012
+261 202 1.55259e+012
+111 169 1.54882e+012
+358 319 1.54727e+012
+384 10 1.54364e+012
+362 258 1.53897e+012
+428 118 1.537e+012
+403 120 1.53594e+012
+352 321 1.53459e+012
+367 143 1.52964e+012
+174 311 1.5207e+012
+365 300 1.52033e+012
+481 84 1.51839e+012
+55 290 1.5166e+012
+206 449 1.51516e+012
+547 162 1.5111e+012
+465 196 1.51037e+012
+464 395 1.50762e+012
+364 253 1.50712e+012
+162 110 1.50575e+012
+138 174 1.50491e+012
+157 1 1.50381e+012
+64 344 1.50329e+012
+46 221 1.50102e+012
+475 261 1.49733e+012
+512 221 1.49536e+012
+477 19 1.49484e+012
+326 141 1.49466e+012
+166 98 1.49087e+012
+432 147 1.48701e+012
+542 217 1.48597e+012
+317 336 1.4824e+012
+265 296 1.48237e+012
+87 254 1.47026e+012
+195 56 1.46823e+012
+144 311 1.46671e+012
+31 235 1.46607e+012
+516 75 1.46499e+012
+253 12 1.46353e+012
+404 183 1.46255e+012
+274 132 1.45984e+012
+93 214 1.44909e+012
+107 39 1.44451e+012
+37 298 1.44249e+012
+247 206 1.44196e+012
+313 84 1.44021e+012
+174 41 1.43992e+012
+101 79 1.43879e+012
+260 222 1.43847e+012
+294 27 1.43839e+012
+143 324 1.43781e+012
+469 123 1.43734e+012
+283 402 1.43581e+012
+365 6 1.43421e+012
+60 184 1.42955e+012
+111 136 1.4236e+012
+226 37 1.42168e+012
+546 41 1.41682e+012
+170 240 1.41474e+012
+477 5 1.41422e+012
+217 145 1.41341e+012
+287 298 1.40678e+012
+389 11 1.40586e+012
+232 199 1.40324e+012
+227 293 1.39331e+012
+61 217 1.38675e+012
+34 100 1.38625e+012
+112 392 1.38466e+012
+528 183 1.38305e+012
+272 280 1.38163e+012
+280 365 1.38132e+012
+152 307 1.37994e+012
+298 274 1.3789e+012
+512 97 1.37706e+012
+38 63 1.37705e+012
+169 19 1.37538e+012
+272 68 1.35124e+012
+511 19 1.34977e+012
+423 336 1.3437e+012
+328 296 1.34367e+012
+249 143 1.3409e+012
+261 236 1.34087e+012
+441 24 1.34032e+012
+142 185 1.33957e+012
+47 150 1.33531e+012
+256 152 1.33441e+012
+329 258 1.33299e+012
+518 59 1.32974e+012
+523 346 1.32959e+012
+36 174 1.3236e+012
+211 184 1.31781e+012
+312 75 1.31625e+012
+527 195 1.30966e+012
+317 165 1.3034e+012
+247 219 1.30294e+012
+335 90 1.30115e+012
+58 6 1.29816e+012
+563 62 1.29588e+012
+495 118 1.29454e+012
+580 17 1.29337e+012
+524 20 1.29175e+012
+490 139 1.28868e+012
+436 396 1.28702e+012
+484 363 1.28179e+012
+514 203 1.28175e+012
+153 197 1.28084e+012
+391 47 1.28045e+012
+562 478 1.27733e+012
+431 318 1.26083e+012
+236 347 1.25411e+012
+12 217 1.25262e+012
+57 75 1.25102e+012
+24 62 1.24881e+012
+508 454 1.24848e+012
+294 122 1.24291e+012
+89 149 1.24223e+012
+522 264 1.24175e+012
+232 263 1.23967e+012
+331 105 1.23707e+012
+50 288 1.22875e+012
+110 58 1.22865e+012
+145 161 1.22223e+012
+388 164 1.22212e+012
+131 132 1.22102e+012
+409 354 1.21975e+012
+509 203 1.21622e+012
+273 219 1.21229e+012
+473 243 1.21154e+012
+168 326 1.20744e+012
+487 22 1.2063e+012
+302 215 1.20395e+012
+158 96 1.20332e+012
+575 16 1.20268e+012
+253 74 1.19981e+012
+236 72 1.1997e+012
+309 370 1.19627e+012
+220 149 1.19604e+012
+538 457 1.18929e+012
+394 163 1.18899e+012
+548 182 1.18409e+012
+101 360 1.18377e+012
+343 108 1.18376e+012
+543 211 1.18084e+012
+192 143 1.17996e+012
+411 65 1.17628e+012
+109 240 1.17441e+012
+107 44 1.17141e+012
+376 317 1.17038e+012
+448 218 1.16991e+012
+190 108 1.16755e+012
+379 338 1.16658e+012
+222 218 1.16622e+012
+276 353 1.16597e+012
+489 1 1.16378e+012
+392 218 1.15813e+012
+544 2 1.15705e+012
+29 30 1.15678e+012
+7 10 1.15644e+012
+442 239 1.15448e+012
+305 439 1.1468e+012
+251 423 1.14557e+012
+275 141 1.14246e+012
+191 278 1.1402e+012
+26 9 1.13877e+012
+498 66 1.13851e+012
+66 26 1.13253e+012
+278 219 1.13032e+012
+385 295 1.12861e+012
+182 137 1.1279e+012
+428 2 1.12446e+012
+535 266 1.12326e+012
+568 41 1.12046e+012
+132 1 1.11981e+012
+286 209 1.11928e+012
+190 171 1.11901e+012
+410 162 1.11851e+012
+389 323 1.11826e+012
+528 360 1.11808e+012
+469 421 1.1174e+012
+303 169 1.11722e+012
+487 263 1.11684e+012
+510 140 1.11574e+012
+477 204 1.11085e+012
+506 2 1.10565e+012
+405 82 1.10418e+012
+168 115 1.1036e+012
+172 55 1.10158e+012
+467 140 1.10153e+012
+222 112 1.09734e+012
+510 84 1.09653e+012
+521 183 1.09643e+012
+174 187 1.09581e+012
+534 20 1.09461e+012
+538 138 1.09376e+012
+462 43 1.09356e+012
+227 186 1.08983e+012
+160 139 1.08838e+012
+90 258 1.08755e+012
+455 85 1.08702e+012
+520 201 1.08397e+012
+558 19 1.08131e+012
+61 134 1.08033e+012
+462 27 1.07882e+012
+287 164 1.07822e+012
+263 402 1.076e+012
+536 244 1.06987e+012
+162 115 1.0697e+012
+414 23 1.06475e+012
+541 41 1.06434e+012
+145 392 1.06355e+012
+97 448 1.0623e+012
+322 146 1.05523e+012
+211 144 1.05486e+012
+359 219 1.05449e+012
+574 140 1.05376e+012
+437 338 1.05364e+012
+418 87 1.05259e+012
+509 174 1.05152e+012
+139 111 1.05121e+012
+343 122 1.05112e+012
+266 203 1.04752e+012
+175 260 1.04642e+012
+176 239 1.04598e+012
+415 164 1.04513e+012
+61 203 1.04325e+012
+366 105 1.04222e+012
+435 182 1.04001e+012
+380 107 1.03918e+012
+134 97 1.03482e+012
+256 147 1.03289e+012
+188 182 1.03212e+012
+10 101 1.03198e+012
+278 390 1.03143e+012
+446 23 1.03126e+012
+360 142 1.03084e+012
+375 117 1.03078e+012
+578 53 1.03028e+012
+164 206 1.03025e+012
+36 219 1.0302e+012
+139 20 1.02823e+012
+184 110 1.02599e+012
+69 149 1.02194e+012
+108 98 1.02142e+012
+218 208 1.02071e+012
+452 374 1.01837e+012
+162 126 1.0183e+012
+533 240 1.01778e+012
+157 91 1.01398e+012
+102 236 1.0138e+012
+372 161 1.01276e+012
+261 141 1.01235e+012
+222 16 1.01145e+012
+387 126 1.00918e+012
+186 202 1.00863e+012
+342 166 1.00794e+012
+394 65 1.00747e+012
+501 142 1.0067e+012
+417 438 1.00542e+012
+215 125 1.00368e+012
+372 69 1.00334e+012
+190 360 1.00266e+012
+346 349 1.00186e+012
+48 133 1.00146e+012
+346 276 1.00104e+012
+102 164 9.99339e+011
+523 122 9.96339e+011
+183 399 9.96094e+011
+75 8 9.95669e+011
+575 178 9.94842e+011
+530 141 9.93295e+011
+485 44 9.93162e+011
+437 305 9.92782e+011
+432 112 9.90392e+011
+393 21 9.90238e+011
+541 124 9.90203e+011
+498 225 9.89478e+011
+162 277 9.87048e+011
+356 259 9.86396e+011
+534 184 9.85628e+011
+540 98 9.84231e+011
+159 181 9.82015e+011
+405 339 9.81269e+011
+104 3 9.799e+011
+59 253 9.78754e+011
+259 165 9.76499e+011
+579 81 9.76275e+011
+273 166 9.76052e+011
+279 129 9.75983e+011
+421 141 9.75373e+011
+446 8 9.75015e+011
+250 194 9.72965e+011
+114 216 9.72954e+011
+170 200 9.7238e+011
+218 106 9.71234e+011
+403 277 9.68156e+011
+482 173 9.68019e+011
+445 123 9.67355e+011
+161 166 9.67194e+011
+363 180 9.66306e+011
+266 16 9.63942e+011
+63 59 9.63644e+011
+346 179 9.63624e+011
+49 155 9.61578e+011
+388 21 9.60767e+011
+564 160 9.60665e+011
+83 476 9.60395e+011
+265 30 9.59789e+011
+191 204 9.5971e+011
+68 46 9.58945e+011
+268 242 9.57113e+011
+175 164 9.57008e+011
+175 19 9.55985e+011
+78 271 9.55559e+011
+503 164 9.51627e+011
+547 217 9.4441e+011
+107 28 9.4387e+011
+516 182 9.43288e+011
+296 421 9.42171e+011
+42 81 9.41373e+011
+480 299 9.41236e+011
+480 165 9.39604e+011
+85 1 9.37699e+011
+404 376 9.37487e+011
+77 236 9.37104e+011
+536 394 9.36378e+011
+248 314 9.35664e+011
+373 392 9.34615e+011
+100 198 9.34577e+011
+134 127 9.33931e+011
+110 179 9.31995e+011
+436 124 9.28068e+011
+54 222 9.27804e+011
+572 162 9.27279e+011
+493 81 9.25454e+011
+66 216 9.25141e+011
+329 11 9.23841e+011
+277 187 9.23522e+011
+506 61 9.22641e+011
+251 366 9.22515e+011
+205 295 9.22458e+011
+298 138 9.22358e+011
+544 457 9.21955e+011
+438 160 9.20615e+011
+200 129 9.18237e+011
+205 163 9.18027e+011
+301 205 9.17451e+011
+269 132 9.16906e+011
+449 138 9.16248e+011
+210 153 9.15711e+011
+385 244 9.15381e+011
+48 10 9.13457e+011
+276 331 9.12645e+011
+185 343 9.12425e+011
+191 127 9.12389e+011
+166 107 9.12261e+011
+78 475 9.11006e+011
+228 129 9.09291e+011
+353 337 9.08417e+011
+406 64 9.08373e+011
+406 198 9.0809e+011
+159 239 9.06272e+011
+388 16 9.05736e+011
+296 331 9.04573e+011
+357 11 9.04186e+011
+165 357 9.04038e+011
+85 61 9.03753e+011
+543 8 9.02094e+011
+506 143 9.00812e+011
+282 72 9.00529e+011
+452 45 8.98103e+011
+147 398 8.97906e+011
+78 40 8.94336e+011
+195 132 8.94316e+011
+517 346 8.94203e+011
+364 201 8.92397e+011
+120 115 8.92216e+011
+68 476 8.9059e+011
+150 112 8.90161e+011
+145 6 8.8698e+011
+287 51 8.86234e+011
+206 157 8.8437e+011
+349 144 8.83573e+011
+247 386 8.8343e+011
+114 1 8.83192e+011
+526 38 8.8017e+011
+241 57 8.78907e+011
+333 296 8.77849e+011
+484 375 8.73749e+011
+445 354 8.73635e+011
+119 128 8.70111e+011
+209 419 8.69797e+011
+165 313 8.69538e+011
+423 261 8.68097e+011
+515 42 8.67494e+011
+223 433 8.66666e+011
+340 264 8.66458e+011
+162 252 8.65104e+011
+289 346 8.61939e+011
+501 361 8.60145e+011
+376 353 8.58425e+011
+449 166 8.56854e+011
+38 240 8.56374e+011
+554 181 8.55823e+011
+287 262 8.54396e+011
+31 66 8.54241e+011
+424 63 8.5383e+011
+304 189 8.53666e+011
+423 5 8.53309e+011
+56 145 8.51954e+011
+306 364 8.50302e+011
+218 98 8.48366e+011
+86 181 8.47307e+011
+524 171 8.47177e+011
+306 105 8.46787e+011
+91 290 8.45422e+011
+331 202 8.44149e+011
+389 65 8.43949e+011
+56 66 8.42483e+011
+232 34 8.42106e+011
+238 164 8.41293e+011
+237 134 8.40717e+011
+412 98 8.40489e+011
+563 323 8.39093e+011
+289 124 8.37742e+011
+178 273 8.37454e+011
+135 147 8.35965e+011
+325 426 8.33356e+011
+385 88 8.33355e+011
+164 73 8.29561e+011
+228 260 8.25313e+011
+95 149 8.23969e+011
+525 222 8.22857e+011
+512 363 8.22757e+011
+374 240 8.22393e+011
+61 370 8.2228e+011
+147 78 8.2182e+011
+67 253 8.21768e+011
+510 129 8.21264e+011
+11 204 8.20997e+011
+33 110 8.20821e+011
+272 145 8.20402e+011
+6 64 8.18242e+011
+463 101 8.17533e+011
+365 337 8.16844e+011
+52 358 8.15844e+011
+358 241 8.1465e+011
+320 105 8.14634e+011
+397 356 8.1418e+011
+300 264 8.13759e+011
+471 202 8.13209e+011
+363 357 8.12394e+011
+191 350 8.12305e+011
+461 162 8.08733e+011
+255 89 8.08415e+011
+105 76 8.08181e+011
+382 26 8.07794e+011
+541 133 8.07585e+011
+42 10 8.06828e+011
+310 6 8.06604e+011
+193 215 8.05799e+011
+498 459 8.04643e+011
+576 127 8.02302e+011
+280 192 8.01644e+011
+288 397 8.0152e+011
+199 167 8.01512e+011
+145 16 7.95046e+011
+526 189 7.94653e+011
+180 395 7.94171e+011
+281 438 7.9387e+011
+264 71 7.93639e+011
+520 79 7.91766e+011
+355 24 7.91698e+011
+190 136 7.91634e+011
+536 94 7.911e+011
+228 288 7.90848e+011
+292 88 7.90147e+011
+418 284 7.90016e+011
+306 90 7.86704e+011
+328 181 7.85812e+011
+148 449 7.84455e+011
+509 179 7.81255e+011
+306 194 7.80007e+011
+40 355 7.78975e+011
+139 99 7.78974e+011
+25 221 7.77775e+011
+207 203 7.77703e+011
+423 399 7.76835e+011
+60 40 7.76392e+011
+351 11 7.75808e+011
+297 69 7.75526e+011
+35 31 7.73804e+011
+149 130 7.73463e+011
+538 406 7.73043e+011
+26 131 7.69417e+011
+261 249 7.68924e+011
+181 20 7.68802e+011
+125 270 7.68661e+011
+530 160 7.67581e+011
+434 89 7.65004e+011
+242 192 7.6445e+011
+499 80 7.6437e+011
+11 81 7.63616e+011
+463 355 7.63234e+011
+445 243 7.62507e+011
+319 386 7.61825e+011
+123 263 7.6173e+011
+561 146 7.60774e+011
+88 369 7.60319e+011
+283 394 7.59075e+011
+570 121 7.58173e+011
+381 122 7.57359e+011
+115 131 7.56481e+011
+457 3 7.56348e+011
+80 195 7.547e+011
+1 383 7.54231e+011
+346 45 7.541e+011
+572 405 7.54063e+011
+354 144 7.51768e+011
+94 7 7.51657e+011
+475 62 7.51463e+011
+269 58 7.51218e+011
+117 426 7.50954e+011
+271 108 7.49789e+011
+512 298 7.48506e+011
+362 407 7.48412e+011
+401 166 7.48376e+011
+190 329 7.47958e+011
+50 254 7.47942e+011
+488 183 7.47248e+011
+31 219 7.46997e+011
+390 242 7.46625e+011
+472 23 7.46412e+011
+25 201 7.45548e+011
+299 296 7.44701e+011
+116 76 7.44545e+011
+347 239 7.43994e+011
+523 60 7.42847e+011
+179 168 7.41292e+011
+96 423 7.41281e+011
+232 125 7.41211e+011
+126 219 7.40922e+011
+445 118 7.39724e+011
+134 237 7.39371e+011
+166 150 7.3928e+011
+408 26 7.39249e+011
+506 361 7.38809e+011
+427 182 7.37959e+011
+270 93 7.37955e+011
+277 295 7.37652e+011
+4 154 7.36524e+011
+90 376 7.3597e+011
+91 22 7.34691e+011
+345 297 7.34035e+011
+107 429 7.33789e+011
+452 102 7.33005e+011
+325 341 7.32625e+011
+87 144 7.31774e+011
+302 160 7.30584e+011
+217 280 7.30454e+011
+277 110 7.28916e+011
+273 316 7.2888e+011
+95 197 7.28245e+011
+72 129 7.27846e+011
+376 124 7.27465e+011
+305 53 7.27338e+011
+402 143 7.26481e+011
+501 263 7.26453e+011
+138 59 7.258e+011
+66 276 7.24659e+011
+468 42 7.22471e+011
+367 86 7.21554e+011
+514 119 7.20328e+011
+310 446 7.20254e+011
+186 21 7.19748e+011
+494 456 7.19546e+011
+148 88 7.19506e+011
+253 249 7.18309e+011
+437 240 7.17167e+011
+261 391 7.17123e+011
+430 85 7.16711e+011
+573 330 7.15968e+011
+185 308 7.15538e+011
+130 428 7.14223e+011
+92 445 7.12315e+011
+196 111 7.12167e+011
+74 96 7.1209e+011
+116 169 7.09614e+011
+424 375 7.09544e+011
+449 87 7.07955e+011
+195 329 7.07772e+011
+165 286 7.06356e+011
+87 213 7.05722e+011
+480 451 7.05076e+011
+550 57 7.02446e+011
+354 269 7.02054e+011
+535 121 7.01723e+011
+126 78 7.01506e+011
+381 181 7.00363e+011
+248 293 6.99171e+011
+360 368 6.99014e+011
+66 372 6.98318e+011
+205 15 6.98e+011
+308 353 6.97254e+011
+349 125 6.97201e+011
+186 101 6.95659e+011
+399 182 6.93997e+011
+514 262 6.93573e+011
+484 329 6.91101e+011
+267 144 6.9079e+011
+20 218 6.90132e+011
+34 12 6.89494e+011
+579 43 6.89352e+011
+517 20 6.88961e+011
+52 42 6.88306e+011
+540 182 6.8808e+011
+196 90 6.87867e+011
+407 429 6.87861e+011
+321 121 6.86981e+011
+106 182 6.86642e+011
+118 95 6.86499e+011
+493 60 6.86304e+011
+448 127 6.85414e+011
+57 365 6.84916e+011
+247 402 6.84696e+011
+477 340 6.82961e+011
+371 105 6.82498e+011
+371 89 6.82061e+011
+409 102 6.80525e+011
+193 312 6.79971e+011
+379 88 6.799e+011
+455 162 6.79784e+011
+592 19 6.79399e+011
+557 463 6.7649e+011
+502 21 6.76433e+011
+118 222 6.75968e+011
+12 114 6.7544e+011
+145 1 6.74284e+011
+163 135 6.70624e+011
+155 57 6.69738e+011
+118 5 6.68597e+011
+362 65 6.68359e+011
+178 57 6.68269e+011
+259 107 6.68023e+011
+291 335 6.67895e+011
+306 146 6.67356e+011
+434 379 6.65367e+011
+239 219 6.63055e+011
+46 355 6.61923e+011
+524 424 6.61279e+011
+483 288 6.60344e+011
+451 438 6.6021e+011
+165 178 6.59564e+011
+149 151 6.58523e+011
+110 326 6.58361e+011
+459 340 6.57533e+011
+223 87 6.57441e+011
+249 260 6.56839e+011
+229 14 6.56626e+011
+301 133 6.56449e+011
+413 82 6.56362e+011
+285 343 6.56279e+011
+250 164 6.54987e+011
+343 463 6.54777e+011
+559 243 6.53844e+011
+542 262 6.53769e+011
+93 93 6.53285e+011
+333 241 6.53011e+011
+482 125 6.52244e+011
+545 248 6.52215e+011
+210 162 6.52171e+011
+124 95 6.49932e+011
+42 118 6.49286e+011
+402 104 6.48766e+011
+355 254 6.48577e+011
+122 161 6.48195e+011
+388 96 6.47596e+011
+448 444 6.46805e+011
+42 308 6.46408e+011
+129 112 6.45056e+011
+332 355 6.4423e+011
+412 471 6.43764e+011
+480 440 6.43466e+011
+283 124 6.43073e+011
+187 313 6.4243e+011
+120 58 6.42062e+011
+360 160 6.41433e+011
+536 79 6.40785e+011
+49 62 6.39588e+011
+57 100 6.36761e+011
+192 15 6.36518e+011
+52 4 6.36073e+011
+140 4 6.36028e+011
+136 141 6.35659e+011
+334 391 6.35459e+011
+562 271 6.34095e+011
+93 60 6.33803e+011
+210 35 6.33708e+011
+9 46 6.32951e+011
+502 43 6.32803e+011
+248 35 6.31367e+011
+186 1 6.29818e+011
+259 34 6.29768e+011
+177 122 6.28503e+011
+408 143 6.26838e+011
+136 182 6.26668e+011
+97 363 6.26386e+011
+338 427 6.25829e+011
+315 238 6.25434e+011
+136 136 6.24771e+011
+340 391 6.24458e+011
+348 164 6.23588e+011
+371 338 6.23138e+011
+302 243 6.22139e+011
+325 15 6.21813e+011
+416 298 6.21595e+011
+191 122 6.20737e+011
+404 188 6.20499e+011
+211 135 6.20178e+011
+241 421 6.17035e+011
+340 473 6.16119e+011
+400 199 6.15476e+011
+375 5 6.15196e+011
+526 383 6.14697e+011
+41 182 6.13472e+011
+170 110 6.13225e+011
+529 177 6.12885e+011
+285 241 6.12806e+011
+232 150 6.12005e+011
+479 404 6.11661e+011
+111 263 6.10887e+011
+549 223 6.09516e+011
+173 119 6.08836e+011
+91 276 6.08468e+011
+161 152 6.08071e+011
+10 32 6.07949e+011
+417 251 6.07561e+011
+218 290 6.0755e+011
+586 17 6.07528e+011
+386 282 6.07135e+011
+542 93 6.07026e+011
+45 475 6.06821e+011
+429 44 6.06326e+011
+30 256 6.06324e+011
+195 77 6.05971e+011
+298 398 6.05873e+011
+391 118 6.04917e+011
+130 168 6.04792e+011
+224 51 6.04156e+011
+433 277 6.0399e+011
+286 219 6.03559e+011
+120 447 6.02609e+011
+110 110 6.02546e+011
+47 162 6.01473e+011
+113 94 6.01137e+011
+442 97 6.01024e+011
+335 370 6.00671e+011
+542 252 5.99589e+011
+121 53 5.99084e+011
+290 311 5.98621e+011
+259 328 5.98286e+011
+444 452 5.96801e+011
+138 311 5.96645e+011
+390 135 5.96582e+011
+283 197 5.96568e+011
+306 359 5.95915e+011
+293 146 5.95005e+011
+251 182 5.94644e+011
+62 148 5.93395e+011
+281 33 5.9307e+011
+182 96 5.92678e+011
+382 147 5.92494e+011
+198 194 5.91494e+011
+214 174 5.90743e+011
+222 125 5.88765e+011
+200 30 5.88656e+011
+101 28 5.87365e+011
+72 187 5.87129e+011
+128 127 5.86853e+011
+390 130 5.84158e+011
+100 257 5.82294e+011
+227 123 5.81903e+011
+484 141 5.81511e+011
+109 146 5.81368e+011
+437 280 5.81126e+011
+181 312 5.80762e+011
+269 416 5.80574e+011
+323 29 5.80181e+011
+37 202 5.79086e+011
+479 11 5.79081e+011
+412 416 5.78746e+011
+227 72 5.782e+011
+171 168 5.76176e+011
+536 260 5.7601e+011
+451 120 5.75828e+011
+462 141 5.74347e+011
+182 121 5.74122e+011
+483 204 5.74108e+011
+514 380 5.74031e+011
+290 184 5.7176e+011
+119 110 5.7158e+011
+243 215 5.71501e+011
+333 415 5.71448e+011
+72 372 5.71048e+011
+180 201 5.70834e+011
+216 163 5.67566e+011
+359 53 5.6751e+011
+87 311 5.67184e+011
+61 26 5.66276e+011
+569 382 5.66247e+011
+390 335 5.65267e+011
+130 306 5.6412e+011
+330 213 5.63785e+011
+77 128 5.63543e+011
+463 224 5.62664e+011
+547 139 5.61062e+011
+60 109 5.61021e+011
+276 204 5.60928e+011
+91 79 5.60854e+011
+529 270 5.60563e+011
+375 299 5.59979e+011
+381 413 5.59823e+011
+194 165 5.59633e+011
+201 345 5.59025e+011
+335 218 5.58338e+011
+86 364 5.57588e+011
+48 235 5.56597e+011
+452 62 5.56448e+011
+468 208 5.56153e+011
+250 154 5.55921e+011
+370 300 5.55773e+011
+464 115 5.55192e+011
+495 473 5.54928e+011
+569 422 5.54878e+011
+185 167 5.5471e+011
+310 265 5.54493e+011
+461 121 5.54021e+011
+308 31 5.5395e+011
+237 417 5.53609e+011
+222 102 5.53383e+011
+355 105 5.52858e+011
+341 38 5.5187e+011
+411 263 5.51484e+011
+558 79 5.5091e+011
+201 88 5.48979e+011
+151 229 5.4896e+011
+533 39 5.48878e+011
+147 196 5.488e+011
+333 66 5.48346e+011
+157 171 5.48077e+011
+434 82 5.47182e+011
+158 310 5.45022e+011
+188 301 5.44677e+011
+566 145 5.43892e+011
+88 339 5.43827e+011
+402 220 5.43713e+011
+450 416 5.42658e+011
+204 394 5.42042e+011
+44 339 5.4067e+011
+268 219 5.40559e+011
+354 15 5.40271e+011
+201 109 5.40259e+011
+384 258 5.40226e+011
+357 66 5.39599e+011
+111 358 5.39596e+011
+189 324 5.38648e+011
+388 419 5.38422e+011
+247 107 5.3838e+011
+282 418 5.37612e+011
+328 64 5.37381e+011
+511 134 5.36942e+011
+248 362 5.36047e+011
+397 46 5.35884e+011
+343 200 5.35877e+011
+562 461 5.35461e+011
+390 204 5.34907e+011
+329 25 5.33127e+011
+185 132 5.32761e+011
+168 129 5.32476e+011
+245 180 5.31459e+011
+215 94 5.30483e+011
+149 22 5.28904e+011
+357 282 5.27742e+011
+352 426 5.27113e+011
+69 338 5.2709e+011
+479 44 5.26667e+011
+228 91 5.25978e+011
+217 352 5.23795e+011
+576 134 5.23792e+011
+18 342 5.23577e+011
+360 362 5.23437e+011
+270 103 5.23147e+011
+135 322 5.2301e+011
+164 350 5.22881e+011
+160 61 5.21812e+011
+327 102 5.21047e+011
+84 110 5.20746e+011
+219 314 5.20446e+011
+360 448 5.1988e+011
+573 57 5.19738e+011
+570 451 5.19303e+011
+172 416 5.18948e+011
+85 38 5.18418e+011
+426 103 5.18295e+011
+277 210 5.16058e+011
+346 372 5.15712e+011
+566 18 5.14928e+011
+531 118 5.14727e+011
+516 162 5.14698e+011
+84 100 5.1328e+011
+367 245 5.13165e+011
+314 103 5.12557e+011
+178 329 5.12168e+011
+178 183 5.11599e+011
+372 146 5.11516e+011
+72 408 5.11386e+011
+248 346 5.11318e+011
+196 146 5.0905e+011
+445 204 5.08911e+011
+88 207 5.08653e+011
+76 110 5.0824e+011
+55 172 5.07817e+011
+106 257 5.07803e+011
+299 256 5.07353e+011
+52 451 5.07181e+011
+153 192 5.07072e+011
+376 224 5.07022e+011
+214 450 5.06444e+011
+345 139 5.06396e+011
+318 187 5.0509e+011
+197 84 5.03646e+011
+325 133 5.03468e+011
+91 285 5.03293e+011
+56 303 5.03077e+011
+510 348 5.02706e+011
+500 103 5.02671e+011
+528 30 5.01822e+011
+3 234 5.01363e+011
+555 303 4.99642e+011
+76 60 4.99192e+011
+529 399 4.98996e+011
+450 324 4.98675e+011
+455 58 4.98624e+011
+111 338 4.98242e+011
+247 418 4.96116e+011
+311 221 4.95991e+011
+317 99 4.95384e+011
+122 82 4.95092e+011
+497 282 4.94951e+011
+289 118 4.9483e+011
+391 53 4.93473e+011
+132 394 4.93374e+011
+67 211 4.93219e+011
+72 165 4.92501e+011
+325 221 4.92015e+011
+493 340 4.91625e+011
+104 307 4.90947e+011
+27 118 4.90747e+011
+12 421 4.90688e+011
+435 62 4.90618e+011
+566 180 4.89196e+011
+110 76 4.88451e+011
+186 376 4.87708e+011
+455 360 4.87488e+011
+416 244 4.8744e+011
+555 201 4.86405e+011
+22 48 4.8605e+011
+541 381 4.83643e+011
+260 369 4.83273e+011
+162 34 4.81652e+011
+296 260 4.81581e+011
+438 391 4.80701e+011
+449 285 4.80333e+011
+279 164 4.79808e+011
+342 332 4.79443e+011
+593 101 4.79308e+011
+295 127 4.79106e+011
+264 309 4.78995e+011
+260 457 4.7821e+011
+143 177 4.78024e+011
+532 344 4.77748e+011
+433 226 4.77735e+011
+223 239 4.77556e+011
+173 343 4.77093e+011
+526 79 4.76873e+011
+288 31 4.75691e+011
+327 319 4.75432e+011
+245 187 4.75262e+011
+407 14 4.74926e+011
+470 117 4.7457e+011
+183 382 4.74426e+011
+303 141 4.74133e+011
+142 115 4.73269e+011
+228 147 4.72877e+011
+369 94 4.72599e+011
+248 326 4.7184e+011
+332 29 4.71701e+011
+192 186 4.71108e+011
+541 222 4.70497e+011
+9 234 4.7044e+011
+115 277 4.70258e+011
+11 76 4.68995e+011
+343 312 4.68503e+011
+272 207 4.68287e+011
+175 76 4.67293e+011
+524 399 4.66376e+011
+283 132 4.66192e+011
+245 256 4.65844e+011
+471 212 4.65538e+011
+454 116 4.65052e+011
+502 156 4.64759e+011
+144 142 4.63502e+011
+394 104 4.62678e+011
+38 270 4.62246e+011
+64 424 4.61744e+011
+544 440 4.61452e+011
+45 408 4.61046e+011
+188 265 4.60549e+011
+518 142 4.60188e+011
+336 144 4.60121e+011
+158 258 4.59933e+011
+68 419 4.59713e+011
+125 306 4.59605e+011
+263 284 4.57982e+011
+580 345 4.57793e+011
+66 306 4.57599e+011
+430 62 4.57158e+011
+296 269 4.5712e+011
+95 39 4.56879e+011
+158 101 4.56842e+011
+55 333 4.55771e+011
+218 423 4.55448e+011
+583 39 4.54348e+011
+418 448 4.5244e+011
+124 341 4.51827e+011
+186 290 4.51626e+011
+237 196 4.51585e+011
+291 139 4.51309e+011
+437 44 4.5039e+011
+584 140 4.50209e+011
+505 380 4.49173e+011
+214 400 4.49172e+011
+421 298 4.49115e+011
+576 166 4.48487e+011
+333 335 4.48405e+011
+17 434 4.47723e+011
+117 290 4.46937e+011
+433 2 4.46494e+011
+155 318 4.4636e+011
+370 465 4.46187e+011
+520 165 4.44939e+011
+298 87 4.44934e+011
+450 198 4.44188e+011
+400 27 4.42956e+011
+44 253 4.42758e+011
+438 469 4.42178e+011
+150 301 4.41693e+011
+213 424 4.41599e+011
+419 412 4.41337e+011
+4 165 4.41319e+011
+147 136 4.40989e+011
+507 42 4.40884e+011
+420 363 4.40058e+011
+400 427 4.39035e+011
+323 186 4.38905e+011
+170 124 4.38055e+011
+547 243 4.37956e+011
+333 180 4.37271e+011
+360 443 4.37093e+011
+184 116 4.36547e+011
+26 44 4.36473e+011
+85 239 4.36048e+011
+401 126 4.35979e+011
+409 108 4.35344e+011
+190 55 4.35154e+011
+264 259 4.34919e+011
+375 463 4.34264e+011
+83 170 4.3369e+011
+502 122 4.33248e+011
+242 281 4.32028e+011
+209 125 4.31969e+011
+349 88 4.31957e+011
+487 86 4.31449e+011
+305 209 4.30802e+011
+38 113 4.30512e+011
+515 325 4.30137e+011
+163 431 4.27964e+011
+330 218 4.27857e+011
+151 94 4.27665e+011
+32 45 4.27439e+011
+342 92 4.26996e+011
+296 200 4.26746e+011
+200 391 4.26096e+011
+231 364 4.2564e+011
+170 451 4.24841e+011
+254 191 4.24503e+011
+375 156 4.23783e+011
+260 274 4.2311e+011
+244 103 4.22884e+011
+419 95 4.22587e+011
+205 403 4.21764e+011
+195 199 4.21169e+011
+413 144 4.20711e+011
+191 292 4.20558e+011
+368 30 4.20227e+011
+311 299 4.19763e+011
+558 60 4.19593e+011
+391 89 4.18774e+011
+478 143 4.18113e+011
+154 295 4.17947e+011
+142 429 4.17895e+011
+337 29 4.17529e+011
+165 38 4.17093e+011
+492 21 4.16828e+011
+377 145 4.16795e+011
+560 266 4.16675e+011
+498 342 4.16285e+011
+88 232 4.16131e+011
+293 294 4.15978e+011
+485 238 4.15397e+011
+600 365 4.15293e+011
+121 149 4.15073e+011
+217 433 4.1417e+011
+99 60 4.14156e+011
+572 446 4.13569e+011
+318 202 4.1326e+011
+387 101 4.13097e+011
+575 459 4.12574e+011
+579 245 4.11626e+011
+194 239 4.11456e+011
+94 367 4.11056e+011
+12 434 4.10314e+011
+50 375 4.09709e+011
+302 408 4.08492e+011
+381 352 4.08362e+011
+389 450 4.08196e+011
+402 44 4.07957e+011
+155 447 4.07514e+011
+262 397 4.06686e+011
+547 281 4.06586e+011
+421 290 4.05845e+011
+382 47 4.05175e+011
+122 169 4.04723e+011
+277 426 4.04602e+011
+67 203 4.03991e+011
+510 113 4.03587e+011
+501 420 4.03367e+011
+240 148 4.02009e+011
+130 374 4.01744e+011
+345 390 4.01059e+011
+25 255 4.00699e+011
+336 49 4.00425e+011
+232 155 3.99882e+011
+166 380 3.99632e+011
+165 308 3.99541e+011
+50 167 3.99245e+011
+101 96 3.98755e+011
+300 444 3.98173e+011
+413 284 3.98167e+011
+94 124 3.98109e+011
+358 178 3.97808e+011
+181 155 3.97348e+011
+567 201 3.96374e+011
+256 157 3.96358e+011
+292 51 3.96229e+011
+468 101 3.95984e+011
+282 215 3.95712e+011
+579 309 3.94684e+011
+578 214 3.94624e+011
+522 361 3.94554e+011
+17 237 3.94514e+011
+204 418 3.94137e+011
+579 140 3.92903e+011
+204 125 3.92868e+011
+335 436 3.91466e+011
+532 173 3.91435e+011
+94 388 3.91118e+011
+130 409 3.90723e+011
+520 97 3.90646e+011
+587 347 3.90081e+011
+64 313 3.89932e+011
+389 2 3.89649e+011
+545 86 3.89011e+011
+213 204 3.89009e+011
+190 255 3.88358e+011
+475 451 3.87637e+011
+479 283 3.87557e+011
+186 349 3.87383e+011
+365 165 3.87259e+011
+283 84 3.87057e+011
+447 180 3.87046e+011
+124 412 3.86626e+011
+41 286 3.86474e+011
+533 62 3.85973e+011
+552 78 3.85519e+011
+125 328 3.84857e+011
+242 366 3.84835e+011
+374 451 3.84658e+011
+523 161 3.84449e+011
+587 161 3.84432e+011
+195 255 3.84189e+011
+339 63 3.83309e+011
+484 159 3.81934e+011
+140 239 3.81147e+011
+33 164 3.80741e+011
+331 282 3.80653e+011
+232 133 3.79542e+011
+406 96 3.77993e+011
+191 306 3.76519e+011
+497 242 3.76384e+011
+258 133 3.76121e+011
+304 332 3.76102e+011
+346 117 3.75176e+011
+117 263 3.75085e+011
+9 69 3.74938e+011
+519 242 3.74385e+011
+4 33 3.73342e+011
+447 132 3.73188e+011
+414 219 3.72996e+011
+563 71 3.72101e+011
+375 151 3.72101e+011
+114 205 3.71094e+011
+393 182 3.70871e+011
+440 83 3.70808e+011
+195 344 3.7066e+011
+552 19 3.7055e+011
+471 82 3.69911e+011
+70 61 3.69668e+011
+524 141 3.68848e+011
+434 25 3.68617e+011
+130 477 3.68278e+011
+80 406 3.67481e+011
+45 203 3.67259e+011
+286 246 3.6679e+011
+205 33 3.66587e+011
+332 134 3.66388e+011
+62 285 3.66264e+011
+173 146 3.66218e+011
+87 355 3.65395e+011
+313 127 3.64878e+011
+191 420 3.63667e+011
+541 242 3.63614e+011
+531 112 3.63601e+011
+239 243 3.63524e+011
+186 72 3.63507e+011
+106 262 3.63158e+011
+268 119 3.62498e+011
+328 51 3.62104e+011
+510 376 3.62052e+011
+508 255 3.61931e+011
+243 134 3.61275e+011
+439 454 3.60816e+011
+185 161 3.59601e+011
+143 235 3.59248e+011
+585 309 3.59054e+011
+470 433 3.58912e+011
+288 199 3.57627e+011
+112 307 3.57528e+011
+210 94 3.57511e+011
+463 219 3.56992e+011
+174 291 3.55022e+011
+181 259 3.54898e+011
+495 100 3.54293e+011
+283 332 3.53801e+011
+375 101 3.53393e+011
+209 317 3.52656e+011
+473 102 3.5258e+011
+9 475 3.52264e+011
+424 172 3.51998e+011
+379 451 3.51305e+011
+20 317 3.50344e+011
+274 121 3.50021e+011
+563 154 3.4978e+011
+568 324 3.4976e+011
+546 340 3.49698e+011
+371 138 3.49648e+011
+199 96 3.48943e+011
+461 304 3.48839e+011
+577 327 3.48489e+011
+489 469 3.48217e+011
+340 219 3.48121e+011
+217 169 3.47944e+011
+264 89 3.47925e+011
+207 236 3.47598e+011
+131 188 3.46886e+011
+174 129 3.46851e+011
+46 92 3.46195e+011
+114 143 3.46088e+011
+278 88 3.45958e+011
+433 295 3.45594e+011
+54 236 3.4559e+011
+147 191 3.45524e+011
+75 199 3.44724e+011
+509 283 3.44476e+011
+567 270 3.44196e+011
+64 11 3.4406e+011
+135 429 3.44027e+011
+29 169 3.438e+011
+63 363 3.43583e+011
+200 8 3.42454e+011
+484 243 3.41613e+011
+169 219 3.41394e+011
+478 377 3.40751e+011
+116 253 3.4049e+011
+62 441 3.40374e+011
+279 236 3.38839e+011
+432 270 3.38769e+011
+198 466 3.38308e+011
+206 38 3.38125e+011
+20 286 3.38064e+011
+272 254 3.3741e+011
+309 130 3.37217e+011
+487 118 3.37176e+011
+281 78 3.36797e+011
+255 406 3.36763e+011
+509 442 3.36425e+011
+301 66 3.35889e+011
+71 389 3.35608e+011
+157 176 3.3519e+011
+397 92 3.35113e+011
+213 326 3.34756e+011
+79 217 3.34193e+011
+27 270 3.33943e+011
+308 164 3.33845e+011
+138 120 3.33661e+011
+483 221 3.33538e+011
+232 270 3.33208e+011
+428 163 3.32472e+011
+541 177 3.32372e+011
+219 398 3.32138e+011
+36 76 3.31501e+011
+230 332 3.31489e+011
+276 78 3.31372e+011
+154 161 3.31101e+011
+349 107 3.30963e+011
+202 366 3.30824e+011
+18 274 3.30558e+011
+177 141 3.30451e+011
+51 230 3.30332e+011
+268 192 3.30005e+011
+438 402 3.2893e+011
+343 307 3.28729e+011
+268 137 3.28292e+011
+582 203 3.28266e+011
+336 446 3.27859e+011
+527 437 3.27446e+011
+489 162 3.27414e+011
+126 237 3.27056e+011
+1 378 3.26247e+011
+95 282 3.26187e+011
+97 456 3.26131e+011
+102 295 3.25618e+011
+27 190 3.25546e+011
+464 106 3.2534e+011
+442 320 3.25203e+011
+49 335 3.25112e+011
+525 280 3.24775e+011
+542 82 3.24531e+011
+142 253 3.24368e+011
+355 449 3.23848e+011
+343 29 3.23709e+011
+489 54 3.23163e+011
+39 314 3.22666e+011
+477 220 3.22259e+011
+411 338 3.21936e+011
+88 391 3.21474e+011
+352 365 3.21468e+011
+318 461 3.20343e+011
+455 141 3.20172e+011
+223 384 3.19838e+011
+372 78 3.19368e+011
+337 259 3.19241e+011
+157 23 3.19014e+011
+264 126 3.18913e+011
+135 165 3.18863e+011
+108 222 3.17048e+011
+527 431 3.1692e+011
+548 265 3.16885e+011
+92 320 3.15493e+011
+385 118 3.14592e+011
+563 79 3.14499e+011
+442 380 3.14375e+011
+306 259 3.14193e+011
+550 302 3.1368e+011
+264 109 3.1312e+011
+150 57 3.13074e+011
+469 108 3.13035e+011
+471 269 3.12698e+011
+293 398 3.11667e+011
+60 164 3.1115e+011
+75 377 3.10791e+011
+514 400 3.10376e+011
+425 205 3.10248e+011
+69 377 3.10007e+011
+402 15 3.09817e+011
+571 239 3.09495e+011
+446 437 3.09125e+011
+35 335 3.07798e+011
+363 48 3.07794e+011
+344 321 3.07456e+011
+425 200 3.07172e+011
+246 173 3.07143e+011
+181 220 3.06278e+011
+296 311 3.06003e+011
+373 414 3.05773e+011
+102 337 3.05741e+011
+574 100 3.04771e+011
+72 413 3.04208e+011
+31 79 3.03758e+011
+146 343 3.03741e+011
+100 426 3.0299e+011
+184 57 3.02924e+011
+437 140 3.02351e+011
+221 326 3.02167e+011
+410 222 3.02074e+011
+248 392 3.01613e+011
+556 366 3.01542e+011
+206 75 3.01423e+011
+462 187 3.01313e+011
+512 50 3.01137e+011
+167 187 2.99576e+011
+238 294 2.99325e+011
+247 434 2.99257e+011
+426 472 2.98604e+011
+395 130 2.98359e+011
+147 97 2.98333e+011
+535 178 2.97739e+011
+469 356 2.96478e+011
+350 273 2.96435e+011
+86 245 2.96416e+011
+541 370 2.95437e+011
+510 210 2.95428e+011
+117 304 2.95418e+011
+118 181 2.95272e+011
+334 465 2.94399e+011
+243 430 2.94216e+011
+481 101 2.94038e+011
+349 449 2.93619e+011
+73 154 2.9322e+011
+489 302 2.93041e+011
+232 113 2.92259e+011
+54 352 2.92246e+011
+407 6 2.92144e+011
+510 246 2.91739e+011
+400 132 2.91391e+011
+427 140 2.91172e+011
+78 99 2.91151e+011
+233 406 2.91074e+011
+132 121 2.91046e+011
+364 98 2.91e+011
+117 90 2.89808e+011
+152 37 2.89737e+011
+469 318 2.89723e+011
+228 162 2.89633e+011
+48 422 2.89578e+011
+516 303 2.89526e+011
+182 287 2.89343e+011
+37 470 2.89307e+011
+210 395 2.88997e+011
+439 108 2.88962e+011
+292 373 2.88829e+011
+555 223 2.8816e+011
+524 241 2.87853e+011
+425 25 2.8773e+011
+123 175 2.8769e+011
+27 439 2.87467e+011
+148 326 2.8728e+011
+189 241 2.8724e+011
+157 39 2.87106e+011
+552 119 2.86114e+011
+4 198 2.85992e+011
+273 198 2.85976e+011
+14 46 2.85597e+011
+513 106 2.85589e+011
+351 355 2.85402e+011
+361 89 2.85318e+011
+466 377 2.85237e+011
+284 312 2.85207e+011
+132 63 2.84788e+011
+66 367 2.84474e+011
+400 96 2.84294e+011
+148 145 2.84119e+011
+17 246 2.83992e+011
+493 225 2.83682e+011
+463 3 2.83612e+011
+50 456 2.82863e+011
+553 276 2.8247e+011
+511 288 2.8135e+011
+505 403 2.81339e+011
+436 463 2.80734e+011
+409 279 2.80609e+011
+83 115 2.80607e+011
+595 33 2.80522e+011
+55 374 2.80338e+011
+134 253 2.79815e+011
+7 16 2.79811e+011
+230 50 2.79397e+011
+280 259 2.79261e+011
+287 444 2.79108e+011
+188 260 2.78293e+011
+256 101 2.78172e+011
+91 113 2.7813e+011
+35 389 2.775e+011
+567 248 2.77297e+011
+231 192 2.77194e+011
+563 239 2.76889e+011
+506 243 2.76122e+011
+328 96 2.75779e+011
+298 411 2.75158e+011
+606 122 2.74859e+011
+284 184 2.74789e+011
+251 321 2.74737e+011
+144 377 2.74567e+011
+95 357 2.74408e+011
+374 46 2.74306e+011
+116 258 2.74082e+011
+68 404 2.73564e+011
+238 33 2.7352e+011
+218 237 2.72759e+011
+108 161 2.7275e+011
+446 186 2.72322e+011
+602 276 2.72222e+011
+68 358 2.72136e+011
+466 213 2.7206e+011
+41 291 2.7195e+011
+330 329 2.71751e+011
+566 358 2.71437e+011
+95 408 2.71339e+011
+574 363 2.70889e+011
+253 435 2.70698e+011
+344 187 2.69934e+011
+311 136 2.69909e+011
+61 453 2.69693e+011
+391 408 2.69182e+011
+231 275 2.68725e+011
+455 177 2.68625e+011
+512 56 2.68435e+011
+159 434 2.6808e+011
+144 120 2.68058e+011
+259 347 2.66747e+011
+243 357 2.65994e+011
+505 104 2.65336e+011
+170 179 2.65302e+011
+101 185 2.65237e+011
+38 275 2.6463e+011
+168 292 2.64353e+011
+196 431 2.6385e+011
+463 229 2.63818e+011
+340 442 2.63758e+011
+181 237 2.63531e+011
+256 241 2.63291e+011
+165 413 2.62786e+011
+214 429 2.62758e+011
+543 277 2.62272e+011
+208 326 2.61877e+011
+189 270 2.61639e+011
+313 464 2.61579e+011
+155 153 2.6133e+011
+299 282 2.61022e+011
+88 397 2.61004e+011
+36 255 2.60928e+011
+346 327 2.60779e+011
+341 241 2.60721e+011
+62 446 2.60639e+011
+418 376 2.60212e+011
+197 419 2.60034e+011
+59 424 2.59971e+011
+199 240 2.59719e+011
+498 356 2.59398e+011
+182 412 2.58008e+011
+70 199 2.57855e+011
+138 316 2.5762e+011
+191 430 2.57536e+011
+504 459 2.57374e+011
+425 411 2.57259e+011
+376 281 2.57192e+011
+77 164 2.57143e+011
+498 320 2.57089e+011
+202 256 2.57063e+011
+413 432 2.56278e+011
+528 60 2.56184e+011
+74 335 2.55846e+011
+574 4 2.55724e+011
+468 301 2.55642e+011
+577 90 2.5553e+011
+332 407 2.55498e+011
+265 187 2.55131e+011
+378 95 2.54703e+011
+157 202 2.54637e+011
+290 423 2.54595e+011
+277 360 2.54488e+011
+50 203 2.54345e+011
+334 11 2.54046e+011
+247 53 2.5354e+011
+323 96 2.5276e+011
+510 370 2.52749e+011
+11 138 2.5265e+011
+305 298 2.52634e+011
+308 429 2.52474e+011
+97 289 2.52398e+011
+560 180 2.51947e+011
+221 457 2.51938e+011
+282 268 2.51691e+011
+60 176 2.51362e+011
+427 109 2.51233e+011
+91 345 2.51207e+011
+262 321 2.51197e+011
+478 291 2.51122e+011
+522 322 2.51074e+011
+265 303 2.50831e+011
+476 278 2.50024e+011
+19 322 2.48728e+011
+294 368 2.48589e+011
+184 270 2.48342e+011
+370 316 2.48237e+011
+488 132 2.47746e+011
+558 160 2.47614e+011
+317 404 2.47562e+011
+77 115 2.47393e+011
+10 163 2.47381e+011
+206 370 2.47302e+011
+420 205 2.47037e+011
+584 58 2.46984e+011
+442 359 2.46974e+011
+105 390 2.46901e+011
+211 260 2.46881e+011
+265 79 2.46493e+011
+136 187 2.46278e+011
+154 215 2.45999e+011
+324 350 2.45721e+011
+27 149 2.45627e+011
+375 235 2.45487e+011
+22 118 2.4537e+011
+66 453 2.45238e+011
+500 181 2.45153e+011
+229 282 2.44939e+011
+160 223 2.44839e+011
+594 425 2.44808e+011
+565 425 2.44401e+011
+490 344 2.43941e+011
+79 150 2.43853e+011
+355 389 2.4378e+011
+174 378 2.43201e+011
+397 118 2.43162e+011
+466 84 2.43159e+011
+55 137 2.42798e+011
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_5_3.txt b/test_data/harriscorners/hc_msc_5.00_0.10_5_3.txt
new file mode 100644
index 0000000..19711d8
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_5_3.txt
@@ -0,0 +1,1157 @@
+1156
+499 1 5.56838e+015
+274 366 4.72135e+015
+245 95 4.51807e+015
+363 401 4.46607e+015
+449 298 4.09356e+015
+282 115 3.56796e+015
+122 44 3.44995e+015
+421 182 3.32527e+015
+507 122 3.18223e+015
+251 13 3.00727e+015
+426 320 2.98528e+015
+240 90 2.97706e+015
+387 178 2.96541e+015
+553 40 2.96376e+015
+447 397 2.84196e+015
+456 281 2.80019e+015
+213 72 2.72728e+015
+65 343 2.56846e+015
+200 18 2.52165e+015
+344 10 2.50168e+015
+435 68 2.49393e+015
+131 36 2.43764e+015
+321 313 2.43527e+015
+34 137 2.43461e+015
+223 38 2.42029e+015
+448 263 2.39266e+015
+480 298 2.39066e+015
+256 386 2.37685e+015
+135 215 2.3592e+015
+144 309 2.35294e+015
+221 16 2.2931e+015
+543 364 2.23627e+015
+110 238 2.21656e+015
+45 27 2.2156e+015
+303 183 2.15998e+015
+299 52 2.1546e+015
+183 401 2.13711e+015
+348 179 2.10095e+015
+412 256 2.06204e+015
+124 198 2.05709e+015
+385 221 2.0508e+015
+28 8 2.01656e+015
+535 242 1.96008e+015
+246 143 1.95346e+015
+125 255 1.87572e+015
+59 219 1.87452e+015
+465 394 1.87307e+015
+329 127 1.85485e+015
+271 166 1.85146e+015
+196 57 1.8383e+015
+390 58 1.82818e+015
+237 20 1.82689e+015
+64 235 1.80741e+015
+184 35 1.80624e+015
+130 2 1.80265e+015
+312 149 1.79093e+015
+102 4 1.74618e+015
+261 297 1.72225e+015
+173 312 1.71836e+015
+308 372 1.70106e+015
+520 61 1.65454e+015
+2 47 1.65069e+015
+125 363 1.64638e+015
+242 203 1.62704e+015
+224 419 1.62185e+015
+510 173 1.61871e+015
+387 10 1.61622e+015
+37 62 1.61539e+015
+264 440 1.60141e+015
+449 219 1.59871e+015
+360 336 1.59803e+015
+320 224 1.59797e+015
+239 349 1.59583e+015
+418 440 1.58642e+015
+66 320 1.5835e+015
+508 18 1.58071e+015
+355 220 1.5772e+015
+159 143 1.56618e+015
+382 8 1.56351e+015
+417 7 1.55997e+015
+392 144 1.55118e+015
+412 162 1.53977e+015
+361 131 1.52981e+015
+253 138 1.51425e+015
+411 355 1.51267e+015
+82 28 1.51047e+015
+262 165 1.50837e+015
+286 296 1.50208e+015
+483 339 1.50046e+015
+482 365 1.49697e+015
+359 294 1.49246e+015
+137 208 1.48624e+015
+91 198 1.48527e+015
+59 185 1.48357e+015
+432 146 1.47847e+015
+515 76 1.47064e+015
+282 403 1.46228e+015
+525 60 1.45816e+015
+77 256 1.4573e+015
+177 106 1.45526e+015
+225 221 1.44507e+015
+209 223 1.4411e+015
+545 168 1.43519e+015
+387 295 1.43102e+015
+243 72 1.42775e+015
+462 279 1.42762e+015
+474 262 1.42698e+015
+425 376 1.39369e+015
+192 331 1.38536e+015
+271 71 1.3841e+015
+229 292 1.36253e+015
+513 340 1.359e+015
+402 122 1.35706e+015
+300 265 1.35575e+015
+562 478 1.35151e+015
+542 18 1.33794e+015
+127 76 1.32431e+015
+79 2 1.32157e+015
+112 393 1.32152e+015
+498 82 1.30835e+015
+294 15 1.30224e+015
+140 184 1.29606e+015
+72 24 1.28176e+015
+71 148 1.27887e+015
+105 62 1.27839e+015
+545 217 1.27409e+015
+407 64 1.2729e+015
+101 58 1.26626e+015
+355 320 1.25486e+015
+512 168 1.25345e+015
+203 310 1.24588e+015
+177 260 1.24434e+015
+35 146 1.24221e+015
+116 43 1.24145e+015
+132 26 1.23591e+015
+372 163 1.23154e+015
+174 238 1.22905e+015
+233 162 1.22061e+015
+41 297 1.20772e+015
+113 213 1.20733e+015
+526 223 1.20592e+015
+364 298 1.20265e+015
+277 352 1.19515e+015
+296 420 1.19344e+015
+101 78 1.19209e+015
+271 278 1.18325e+015
+455 83 1.18236e+015
+275 181 1.18097e+015
+406 375 1.18083e+015
+250 364 1.17831e+015
+283 71 1.17736e+015
+550 379 1.15563e+015
+177 93 1.15285e+015
+151 307 1.15271e+015
+48 99 1.15102e+015
+36 174 1.1495e+015
+4 66 1.14847e+015
+343 337 1.14829e+015
+326 426 1.14798e+015
+562 147 1.14622e+015
+100 221 1.14234e+015
+434 398 1.14117e+015
+304 216 1.13594e+015
+212 183 1.13524e+015
+46 219 1.13217e+015
+88 148 1.13056e+015
+359 260 1.13048e+015
+140 203 1.12949e+015
+11 101 1.12346e+015
+377 7 1.11966e+015
+426 119 1.11902e+015
+510 455 1.11815e+015
+216 279 1.11317e+015
+158 1 1.10749e+015
+524 20 1.10354e+015
+365 7 1.10299e+015
+300 177 1.0984e+015
+55 31 1.09777e+015
+114 344 1.09403e+015
+400 261 1.08867e+015
+421 334 1.0886e+015
+164 242 1.08238e+015
+395 260 1.08219e+015
+75 236 1.08094e+015
+477 12 1.07948e+015
+430 1 1.07809e+015
+542 210 1.07802e+015
+365 200 1.07452e+015
+471 240 1.07407e+015
+95 446 1.06738e+015
+317 385 1.06304e+015
+525 345 1.06226e+015
+479 19 1.06212e+015
+273 130 1.0613e+015
+307 439 1.06088e+015
+281 51 1.05987e+015
+522 122 1.0587e+015
+230 266 1.05706e+015
+182 111 1.0539e+015
+64 371 1.04856e+015
+522 263 1.0468e+015
+58 74 1.04451e+015
+166 96 1.0437e+015
+209 54 1.03919e+015
+367 144 1.03464e+015
+54 6 1.03302e+015
+484 59 1.0309e+015
+233 15 1.02869e+015
+422 44 1.02763e+015
+224 183 1.02612e+015
+170 19 1.02552e+015
+87 78 1.02071e+015
+138 110 1.01929e+015
+339 164 1.00969e+015
+356 267 1.00662e+015
+302 206 1.00626e+015
+338 391 1.00501e+015
+92 214 1.00349e+015
+472 63 1.00089e+015
+526 101 1.00085e+015
+530 184 1.00003e+015
+162 213 9.93519e+014
+110 96 9.93004e+014
+387 242 9.92655e+014
+438 339 9.88284e+014
+338 473 9.88094e+014
+484 23 9.86236e+014
+453 340 9.85593e+014
+352 147 9.85141e+014
+28 236 9.81983e+014
+382 411 9.78013e+014
+449 403 9.76195e+014
+345 109 9.7119e+014
+301 164 9.69037e+014
+538 95 9.65462e+014
+452 205 9.64741e+014
+91 291 9.62052e+014
+294 25 9.51766e+014
+528 361 9.44064e+014
+286 166 9.39409e+014
+72 97 9.39384e+014
+579 17 9.39068e+014
+451 376 9.38193e+014
+347 392 9.37303e+014
+46 147 9.37223e+014
+503 361 9.37064e+014
+514 223 9.35569e+014
+511 128 9.33918e+014
+345 241 9.30714e+014
+520 183 9.29056e+014
+219 291 9.27602e+014
+22 60 9.27353e+014
+324 341 9.2216e+014
+208 451 9.19936e+014
+74 6 9.18866e+014
+264 201 9.18741e+014
+230 36 9.17357e+014
+112 4 9.16355e+014
+220 178 9.09281e+014
+139 173 9.08364e+014
+232 200 9.06017e+014
+55 66 9.05001e+014
+512 98 8.98034e+014
+169 55 8.9628e+014
+362 251 8.95191e+014
+244 165 8.94345e+014
+443 23 8.93422e+014
+124 272 8.92896e+014
+32 218 8.91157e+014
+234 346 8.90652e+014
+358 168 8.90558e+014
+78 196 8.86023e+014
+379 69 8.8261e+014
+187 99 8.80437e+014
+220 100 8.79688e+014
+485 179 8.75185e+014
+491 1 8.7328e+014
+370 107 8.72822e+014
+167 286 8.72496e+014
+191 359 8.72155e+014
+380 26 8.68692e+014
+264 445 8.68482e+014
+44 81 8.64572e+014
+141 22 8.59754e+014
+128 164 8.59562e+014
+18 342 8.59223e+014
+276 221 8.58515e+014
+325 88 8.57478e+014
+507 164 8.55629e+014
+566 43 8.49293e+014
+560 229 8.40927e+014
+299 70 8.4074e+014
+137 98 8.39008e+014
+248 404 8.38357e+014
+57 364 8.37561e+014
+539 40 8.3737e+014
+176 39 8.3526e+014
+379 353 8.33296e+014
+329 9 8.32742e+014
+449 178 8.32148e+014
+167 325 8.26744e+014
+210 445 8.23918e+014
+541 13 8.22283e+014
+246 294 8.19868e+014
+401 184 8.17146e+014
+147 21 8.14177e+014
+32 100 8.12485e+014
+198 130 8.12158e+014
+82 77 8.11998e+014
+63 60 8.11976e+014
+342 464 8.11894e+014
+545 57 8.10342e+014
+474 23 8.10268e+014
+489 264 8.0679e+014
+180 394 8.06279e+014
+371 82 8.06064e+014
+163 276 8.03193e+014
+259 221 8.01976e+014
+49 153 8.01763e+014
+270 62 8.00213e+014
+342 123 7.98503e+014
+163 207 7.97641e+014
+277 370 7.97151e+014
+183 19 7.96927e+014
+432 83 7.92601e+014
+131 148 7.91769e+014
+527 39 7.87547e+014
+575 126 7.87363e+014
+278 145 7.85097e+014
+36 268 7.82071e+014
+492 140 7.80903e+014
+140 325 7.79192e+014
+576 178 7.79178e+014
+316 336 7.79089e+014
+243 190 7.78825e+014
+214 56 7.783e+014
+329 66 7.78091e+014
+47 10 7.72714e+014
+146 160 7.69211e+014
+108 45 7.65461e+014
+572 142 7.65418e+014
+273 297 7.64648e+014
+479 179 7.64206e+014
+144 187 7.63106e+014
+6 9 7.62711e+014
+136 128 7.5774e+014
+333 89 7.56675e+014
+537 459 7.53941e+014
+441 98 7.53336e+014
+497 228 7.52685e+014
+329 254 7.52521e+014
+207 436 7.51649e+014
+546 41 7.50525e+014
+162 168 7.47331e+014
+391 47 7.47133e+014
+358 10 7.45804e+014
+482 327 7.4199e+014
+378 316 7.39319e+014
+334 435 7.39033e+014
+242 100 7.3893e+014
+37 288 7.38134e+014
+174 57 7.36093e+014
+259 71 7.33592e+014
+306 192 7.31362e+014
+465 197 7.301e+014
+448 138 7.30028e+014
+545 5 7.29725e+014
+344 197 7.27303e+014
+234 72 7.26946e+014
+108 324 7.26922e+014
+543 130 7.26518e+014
+365 259 7.25138e+014
+561 320 7.24038e+014
+36 201 7.23933e+014
+445 453 7.23332e+014
+82 136 7.21496e+014
+196 82 7.21387e+014
+363 182 7.20927e+014
+490 342 7.18842e+014
+389 139 7.17751e+014
+183 133 7.16431e+014
+103 359 7.15526e+014
+117 96 7.15375e+014
+125 261 7.11905e+014
+416 23 7.11752e+014
+371 393 7.10833e+014
+53 43 7.1031e+014
+360 217 7.0982e+014
+324 164 7.09068e+014
+121 52 7.08336e+014
+313 85 7.06204e+014
+419 163 7.05411e+014
+422 398 7.04105e+014
+254 422 7.03396e+014
+403 6 7.03042e+014
+358 143 7.02342e+014
+217 126 7.01674e+014
+164 359 6.99401e+014
+290 264 6.97372e+014
+531 22 6.94959e+014
+285 211 6.93219e+014
+262 391 6.90347e+014
+512 295 6.88325e+014
+297 296 6.87029e+014
+260 273 6.85091e+014
+169 198 6.84484e+014
+292 311 6.84128e+014
+358 127 6.82317e+014
+481 82 6.80609e+014
+307 448 6.78772e+014
+351 323 6.76762e+014
+516 348 6.73841e+014
+507 59 6.72349e+014
+100 162 6.71511e+014
+436 91 6.68664e+014
+117 76 6.68529e+014
+42 62 6.67878e+014
+331 107 6.67015e+014
+480 403 6.6693e+014
+259 236 6.65622e+014
+256 149 6.64066e+014
+49 159 6.64007e+014
+137 138 6.63451e+014
+87 209 6.62492e+014
+172 449 6.62328e+014
+165 217 6.62021e+014
+378 339 6.61983e+014
+271 289 6.61555e+014
+344 263 6.61148e+014
+40 217 6.60738e+014
+487 4 6.60434e+014
+569 39 6.58847e+014
+310 33 6.58053e+014
+353 127 6.57399e+014
+66 214 6.55058e+014
+508 5 6.54719e+014
+374 241 6.53932e+014
+516 17 6.53743e+014
+153 222 6.52629e+014
+55 294 6.52368e+014
+260 142 6.51589e+014
+253 74 6.49564e+014
+386 126 6.45942e+014
+210 154 6.44903e+014
+223 113 6.44225e+014
+80 474 6.43806e+014
+506 203 6.40872e+014
+396 161 6.40088e+014
+108 183 6.395e+014
+86 255 6.39061e+014
+282 221 6.38845e+014
+509 361 6.38822e+014
+248 219 6.36946e+014
+255 182 6.35155e+014
+556 182 6.34929e+014
+236 221 6.33569e+014
+206 159 6.31697e+014
+267 30 6.27034e+014
+211 33 6.26451e+014
+537 186 6.25926e+014
+256 35 6.25321e+014
+141 2 6.24723e+014
+328 142 6.24693e+014
+240 421 6.2453e+014
+528 142 6.23682e+014
+367 247 6.21637e+014
+196 192 6.21379e+014
+107 40 6.21309e+014
+287 344 6.20711e+014
+103 392 6.14176e+014
+280 128 6.11732e+014
+151 114 6.11181e+014
+111 136 6.11011e+014
+458 265 6.09604e+014
+241 59 6.0957e+014
+479 263 6.0923e+014
+525 423 6.08629e+014
+192 219 6.06778e+014
+141 394 6.05499e+014
+312 7 6.05123e+014
+513 121 6.02673e+014
+544 91 6.01977e+014
+48 256 6.01554e+014
+190 146 6.01223e+014
+160 183 6.00166e+014
+267 296 5.99933e+014
+266 53 5.99547e+014
+110 265 5.99494e+014
+566 161 5.98555e+014
+161 256 5.97145e+014
+413 4 5.94706e+014
+212 437 5.93975e+014
+93 254 5.92774e+014
+407 162 5.9178e+014
+386 162 5.89479e+014
+513 261 5.89213e+014
+159 112 5.88564e+014
+274 216 5.86871e+014
+390 19 5.859e+014
+317 148 5.85354e+014
+406 142 5.85352e+014
+42 339 5.81405e+014
+274 76 5.80497e+014
+39 143 5.79951e+014
+130 239 5.78688e+014
+474 202 5.78347e+014
+54 289 5.77182e+014
+213 123 5.77163e+014
+498 160 5.74904e+014
+65 252 5.73992e+014
+195 16 5.71706e+014
+422 323 5.71311e+014
+357 282 5.70579e+014
+492 182 5.70576e+014
+250 313 5.68908e+014
+571 161 5.66865e+014
+29 29 5.66174e+014
+561 60 5.64948e+014
+398 358 5.64675e+014
+3 382 5.64526e+014
+546 182 5.63157e+014
+44 121 5.62764e+014
+597 272 5.61775e+014
+274 206 5.61544e+014
+436 386 5.61017e+014
+457 375 5.60005e+014
+362 360 5.59753e+014
+85 59 5.59127e+014
+403 265 5.59121e+014
+136 21 5.58909e+014
+406 199 5.58675e+014
+420 81 5.58415e+014
+113 356 5.58397e+014
+502 143 5.57104e+014
+598 364 5.57017e+014
+271 241 5.56826e+014
+67 47 5.56797e+014
+398 169 5.56722e+014
+376 84 5.55385e+014
+572 328 5.55381e+014
+127 186 5.54993e+014
+189 205 5.54913e+014
+514 382 5.54372e+014
+96 125 5.5297e+014
+494 455 5.52933e+014
+259 201 5.52589e+014
+306 362 5.52497e+014
+220 149 5.52428e+014
+298 332 5.52158e+014
+179 274 5.5213e+014
+275 319 5.51212e+014
+128 95 5.4954e+014
+429 88 5.49432e+014
+177 18 5.47392e+014
+58 253 5.4665e+014
+538 121 5.46341e+014
+182 380 5.45943e+014
+366 2 5.45126e+014
+525 381 5.43521e+014
+560 81 5.42541e+014
+313 222 5.42403e+014
+45 131 5.42012e+014
+86 214 5.41899e+014
+413 299 5.41608e+014
+125 40 5.41303e+014
+535 393 5.41193e+014
+266 14 5.39339e+014
+526 398 5.38101e+014
+317 107 5.38039e+014
+85 197 5.38037e+014
+540 165 5.37829e+014
+64 276 5.37146e+014
+313 75 5.35523e+014
+362 370 5.35248e+014
+437 303 5.34067e+014
+432 268 5.33778e+014
+287 33 5.33543e+014
+265 260 5.33127e+014
+9 476 5.3242e+014
+558 19 5.32081e+014
+120 4 5.32026e+014
+467 125 5.30285e+014
+556 244 5.28553e+014
+332 295 5.28255e+014
+282 135 5.27515e+014
+3 155 5.27468e+014
+396 104 5.26868e+014
+12 80 5.25383e+014
+129 309 5.24495e+014
+568 383 5.24277e+014
+236 130 5.23814e+014
+389 97 5.23506e+014
+272 53 5.23483e+014
+282 206 5.23248e+014
+289 136 5.21323e+014
+45 407 5.21159e+014
+187 263 5.20429e+014
+368 337 5.18692e+014
+282 351 5.17372e+014
+572 449 5.17165e+014
+167 238 5.1692e+014
+390 420 5.16423e+014
+479 451 5.16076e+014
+505 381 5.15906e+014
+131 255 5.1444e+014
+293 334 5.11777e+014
+516 202 5.10032e+014
+474 4 5.09617e+014
+192 123 5.08364e+014
+393 217 5.07837e+014
+117 428 5.06787e+014
+327 320 5.06619e+014
+207 417 5.06514e+014
+192 171 5.06418e+014
+91 389 5.06133e+014
+466 40 5.04374e+014
+57 331 5.03396e+014
+445 7 5.02973e+014
+158 138 5.02766e+014
+77 81 5.02617e+014
+101 236 5.01771e+014
+425 262 5.01737e+014
+65 363 5.01626e+014
+149 39 5.01541e+014
+451 101 5.01253e+014
+220 210 5.00728e+014
+277 137 5.00242e+014
+279 363 5.00012e+014
+524 172 4.991e+014
+413 66 4.98917e+014
+297 410 4.97009e+014
+269 105 4.9688e+014
+201 317 4.96688e+014
+246 106 4.96591e+014
+433 110 4.96555e+014
+67 337 4.96077e+014
+346 297 4.95589e+014
+531 103 4.94557e+014
+528 160 4.94342e+014
+74 186 4.94111e+014
+435 281 4.93992e+014
+58 372 4.93544e+014
+95 452 4.93065e+014
+262 217 4.92762e+014
+512 44 4.91199e+014
+533 122 4.90545e+014
+533 340 4.90432e+014
+93 6 4.9005e+014
+391 52 4.89175e+014
+279 296 4.86664e+014
+559 271 4.85557e+014
+133 427 4.85272e+014
+158 74 4.84318e+014
+249 32 4.842e+014
+391 324 4.83554e+014
+278 418 4.83177e+014
+418 68 4.83058e+014
+46 90 4.82427e+014
+95 476 4.81821e+014
+325 295 4.81134e+014
+500 42 4.81086e+014
+15 219 4.80647e+014
+51 61 4.80599e+014
+190 276 4.80392e+014
+245 14 4.80157e+014
+229 347 4.78551e+014
+540 140 4.7845e+014
+565 463 4.77861e+014
+137 57 4.77725e+014
+445 127 4.77295e+014
+553 383 4.76979e+014
+175 115 4.76675e+014
+513 401 4.76556e+014
+365 105 4.75822e+014
+320 119 4.75259e+014
+83 404 4.74548e+014
+412 220 4.74497e+014
+371 90 4.74023e+014
+178 164 4.72963e+014
+464 240 4.7156e+014
+205 202 4.71103e+014
+386 167 4.70684e+014
+574 39 4.69667e+014
+475 245 4.69529e+014
+70 130 4.69093e+014
+358 393 4.68241e+014
+157 55 4.68027e+014
+34 298 4.6776e+014
+299 399 4.66909e+014
+189 214 4.66687e+014
+177 331 4.66123e+014
+450 91 4.66073e+014
+475 342 4.65854e+014
+150 151 4.65669e+014
+471 122 4.65661e+014
+584 38 4.65427e+014
+148 396 4.65046e+014
+329 212 4.63677e+014
+377 119 4.62908e+014
+22 219 4.62809e+014
+463 161 4.62266e+014
+433 317 4.62001e+014
+92 20 4.6089e+014
+336 426 4.60867e+014
+359 161 4.59094e+014
+157 93 4.58982e+014
+345 351 4.58316e+014
+68 304 4.58284e+014
+417 450 4.57645e+014
+529 32 4.56767e+014
+318 201 4.56284e+014
+100 199 4.56062e+014
+219 316 4.56054e+014
+71 410 4.55699e+014
+24 65 4.55171e+014
+199 110 4.54822e+014
+31 269 4.54175e+014
+62 133 4.53891e+014
+388 282 4.53596e+014
+326 13 4.53019e+014
+104 430 4.5276e+014
+508 81 4.52634e+014
+153 217 4.52521e+014
+146 452 4.52172e+014
+323 260 4.51696e+014
+163 20 4.51322e+014
+407 81 4.50957e+014
+157 318 4.50399e+014
+290 49 4.50184e+014
+569 203 4.49648e+014
+408 182 4.48e+014
+214 146 4.47659e+014
+496 462 4.47009e+014
+89 376 4.45568e+014
+429 223 4.45423e+014
+152 1 4.45409e+014
+110 168 4.44818e+014
+203 258 4.44779e+014
+473 211 4.44427e+014
+160 98 4.42986e+014
+288 396 4.41869e+014
+161 238 4.415e+014
+449 23 4.41079e+014
+391 449 4.39995e+014
+282 393 4.39892e+014
+246 327 4.39266e+014
+393 165 4.38009e+014
+419 52 4.35402e+014
+469 417 4.35155e+014
+13 206 4.34325e+014
+133 78 4.34129e+014
+439 64 4.33354e+014
+149 231 4.33229e+014
+410 99 4.32476e+014
+261 329 4.32465e+014
+156 307 4.31322e+014
+222 239 4.30198e+014
+351 271 4.2976e+014
+34 235 4.29312e+014
+472 42 4.29265e+014
+105 198 4.29136e+014
+564 16 4.29081e+014
+408 45 4.28408e+014
+84 310 4.28401e+014
+537 103 4.28149e+014
+412 245 4.28034e+014
+500 224 4.27069e+014
+153 446 4.26986e+014
+262 319 4.26492e+014
+300 246 4.26024e+014
+618 181 4.252e+014
+418 300 4.24781e+014
+446 376 4.2402e+014
+302 102 4.24017e+014
+360 315 4.21242e+014
+132 477 4.20909e+014
+424 163 4.20647e+014
+436 43 4.20397e+014
+293 120 4.19796e+014
+330 202 4.18666e+014
+267 132 4.18659e+014
+331 333 4.17306e+014
+379 107 4.16739e+014
+151 196 4.16661e+014
+404 13 4.15584e+014
+461 221 4.1521e+014
+571 333 4.14522e+014
+226 15 4.14253e+014
+447 351 4.13663e+014
+306 355 4.1231e+014
+315 160 4.12181e+014
+189 107 4.11431e+014
+226 129 4.11369e+014
+187 182 4.11279e+014
+583 345 4.11165e+014
+393 222 4.09876e+014
+279 86 4.09836e+014
+117 132 4.0952e+014
+386 327 4.09398e+014
+117 360 4.09124e+014
+44 476 4.08518e+014
+384 146 4.07911e+014
+81 39 4.06527e+014
+396 319 4.06471e+014
+59 28 4.06366e+014
+112 56 4.06319e+014
+261 34 4.04243e+014
+266 139 4.03685e+014
+316 167 4.03525e+014
+361 222 4.03086e+014
+182 201 4.02789e+014
+256 405 4.0248e+014
+131 73 4.0213e+014
+358 64 4.02087e+014
+447 145 4.0177e+014
+441 321 4.01027e+014
+88 354 4.00742e+014
+247 346 4.00491e+014
+439 455 4.00413e+014
+42 10 4.00231e+014
+9 76 3.99997e+014
+133 65 3.99743e+014
+530 366 3.99415e+014
+263 311 3.99341e+014
+547 162 3.99135e+014
+447 244 3.98776e+014
+53 221 3.98444e+014
+211 21 3.97952e+014
+549 223 3.9723e+014
+278 189 3.96629e+014
+83 101 3.9593e+014
+18 236 3.95692e+014
+559 224 3.95657e+014
+321 10 3.95331e+014
+283 200 3.95091e+014
+579 52 3.94279e+014
+365 86 3.93674e+014
+561 71 3.92866e+014
+433 25 3.92647e+014
+415 83 3.92428e+014
+496 120 3.90952e+014
+357 240 3.90919e+014
+257 88 3.90756e+014
+439 149 3.89354e+014
+579 42 3.89165e+014
+234 261 3.88788e+014
+166 113 3.88772e+014
+272 414 3.87872e+014
+69 417 3.87737e+014
+50 452 3.87373e+014
+464 24 3.87362e+014
+96 148 3.86929e+014
+310 259 3.86422e+014
+522 141 3.86164e+014
+513 93 3.85932e+014
+117 184 3.85378e+014
+210 395 3.85239e+014
+39 406 3.85214e+014
+469 140 3.84695e+014
+328 288 3.83354e+014
+122 446 3.82178e+014
+326 181 3.8177e+014
+181 291 3.81682e+014
+257 250 3.80292e+014
+440 468 3.80048e+014
+297 182 3.7985e+014
+485 236 3.79342e+014
+311 298 3.79218e+014
+79 273 3.77914e+014
+259 370 3.77202e+014
+524 199 3.76677e+014
+220 107 3.7528e+014
+353 424 3.75258e+014
+100 95 3.7522e+014
+215 426 3.74476e+014
+251 152 3.74368e+014
+203 293 3.74131e+014
+423 6 3.74124e+014
+177 180 3.74068e+014
+418 282 3.73532e+014
+175 2 3.73292e+014
+535 141 3.72793e+014
+33 65 3.72171e+014
+62 204 3.71991e+014
+38 169 3.70048e+014
+49 164 3.69498e+014
+384 354 3.69278e+014
+579 79 3.69243e+014
+500 318 3.68582e+014
+286 53 3.68156e+014
+435 156 3.67759e+014
+289 349 3.67666e+014
+58 103 3.67281e+014
+88 261 3.67023e+014
+333 412 3.6696e+014
+88 183 3.66913e+014
+203 396 3.66533e+014
+198 75 3.6604e+014
+449 167 3.65331e+014
+498 67 3.64908e+014
+168 309 3.64574e+014
+86 370 3.64083e+014
+213 62 3.63619e+014
+191 57 3.62986e+014
+433 241 3.62803e+014
+247 317 3.62176e+014
+536 80 3.61541e+014
+157 200 3.60869e+014
+84 3 3.59896e+014
+421 89 3.59268e+014
+533 161 3.58293e+014
+167 150 3.57543e+014
+160 430 3.56674e+014
+310 90 3.56457e+014
+266 403 3.56343e+014
+48 458 3.56254e+014
+121 239 3.55763e+014
+465 355 3.54731e+014
+487 205 3.54679e+014
+221 84 3.54428e+014
+384 258 3.54232e+014
+124 161 3.52972e+014
+545 438 3.52905e+014
+39 355 3.52801e+014
+511 205 3.52375e+014
+386 63 3.51745e+014
+495 476 3.51286e+014
+203 347 3.50597e+014
+32 112 3.48985e+014
+109 27 3.48824e+014
+165 378 3.4818e+014
+385 450 3.48056e+014
+193 111 3.47697e+014
+409 23 3.47586e+014
+310 334 3.47283e+014
+163 328 3.47182e+014
+473 355 3.47004e+014
+121 187 3.46884e+014
+517 142 3.46785e+014
+317 125 3.45448e+014
+503 179 3.44944e+014
+296 165 3.44593e+014
+540 405 3.44295e+014
+381 164 3.44147e+014
+260 231 3.42666e+014
+555 264 3.42039e+014
+281 35 3.41743e+014
+449 83 3.41549e+014
+575 98 3.41514e+014
+277 333 3.41391e+014
+569 183 3.41127e+014
+430 116 3.40977e+014
+124 82 3.40167e+014
+136 92 3.40079e+014
+107 107 3.39934e+014
+298 274 3.38975e+014
+197 148 3.38966e+014
+515 184 3.38204e+014
+512 109 3.38046e+014
+39 241 3.37851e+014
+407 337 3.37744e+014
+527 80 3.36913e+014
+144 432 3.36582e+014
+180 56 3.36349e+014
+239 195 3.36222e+014
+187 326 3.36064e+014
+245 385 3.36053e+014
+115 306 3.35958e+014
+102 294 3.35716e+014
+503 161 3.35491e+014
+289 89 3.35171e+014
+399 67 3.34278e+014
+251 163 3.33432e+014
+535 18 3.33292e+014
+146 97 3.32842e+014
+106 77 3.32702e+014
+127 26 3.32665e+014
+211 136 3.32203e+014
+352 161 3.31754e+014
+414 262 3.30009e+014
+322 29 3.29838e+014
+190 322 3.298e+014
+343 37 3.29737e+014
+378 63 3.28431e+014
+94 219 3.2825e+014
+184 94 3.27881e+014
+86 365 3.27439e+014
+224 73 3.27369e+014
+191 189 3.26784e+014
+572 121 3.2663e+014
+500 420 3.26136e+014
+492 59 3.25899e+014
+27 220 3.25804e+014
+487 43 3.25564e+014
+272 92 3.25481e+014
+358 52 3.2548e+014
+127 218 3.24999e+014
+75 132 3.24848e+014
+534 92 3.24627e+014
+464 139 3.24486e+014
+219 35 3.24152e+014
+161 133 3.23862e+014
+148 131 3.22839e+014
+456 418 3.22546e+014
+243 209 3.22472e+014
+275 197 3.2234e+014
+142 239 3.20989e+014
+143 141 3.20876e+014
+301 86 3.20874e+014
+18 319 3.20594e+014
+482 164 3.20506e+014
+489 23 3.20346e+014
+109 428 3.20333e+014
+95 374 3.20006e+014
+113 176 3.19956e+014
+458 2 3.196e+014
+493 102 3.19341e+014
+146 15 3.18577e+014
+93 95 3.18381e+014
+39 83 3.17815e+014
+363 407 3.17722e+014
+375 282 3.17216e+014
+549 282 3.17001e+014
+510 142 3.16994e+014
+336 317 3.16808e+014
+151 236 3.16433e+014
+540 263 3.16377e+014
+452 161 3.16232e+014
+472 421 3.16165e+014
+93 112 3.1615e+014
+297 99 3.15844e+014
+449 64 3.15739e+014
+273 146 3.15724e+014
+161 31 3.157e+014
+59 79 3.15397e+014
+497 283 3.15327e+014
+573 423 3.15165e+014
+70 478 3.15042e+014
+202 7 3.14778e+014
+395 23 3.14495e+014
+421 315 3.13608e+014
+259 161 3.13598e+014
+211 95 3.1351e+014
+576 311 3.12601e+014
+416 377 3.12422e+014
+281 386 3.1231e+014
+450 446 3.11839e+014
+419 362 3.11775e+014
+392 293 3.11552e+014
+356 107 3.11325e+014
+354 25 3.11322e+014
+569 420 3.11255e+014
+247 258 3.10495e+014
+85 178 3.10111e+014
+592 107 3.098e+014
+266 287 3.08621e+014
+266 118 3.08552e+014
+479 241 3.08204e+014
+52 359 3.08117e+014
+265 72 3.07768e+014
+90 321 3.0759e+014
+589 350 3.07321e+014
+531 398 3.07041e+014
+381 180 3.06615e+014
+340 220 3.06289e+014
+422 63 3.0606e+014
+169 359 3.05755e+014
+377 461 3.05733e+014
+285 263 3.05266e+014
+191 314 3.04993e+014
+484 376 3.04906e+014
+494 164 3.04748e+014
+234 295 3.04622e+014
+37 182 3.04419e+014
+331 219 3.0298e+014
+471 83 3.02978e+014
+187 292 3.02544e+014
+52 12 3.02537e+014
+321 168 3.017e+014
+143 179 3.01538e+014
+19 65 3.00943e+014
+232 274 3.00492e+014
+475 161 2.99889e+014
+45 137 2.99847e+014
+484 153 2.99537e+014
+102 42 2.99281e+014
+199 328 2.99242e+014
+344 166 2.98558e+014
+95 58 2.98229e+014
+335 445 2.9792e+014
+113 205 2.97656e+014
+15 30 2.97329e+014
+518 164 2.9699e+014
+210 13 2.96976e+014
+84 289 2.96535e+014
+546 262 2.9596e+014
+194 135 2.95919e+014
+238 190 2.94547e+014
+260 382 2.93758e+014
+539 220 2.93725e+014
+337 60 2.93397e+014
+164 202 2.93061e+014
+482 360 2.92043e+014
+594 19 2.91797e+014
+221 339 2.91489e+014
+128 128 2.91424e+014
+202 219 2.91179e+014
+3 166 2.91143e+014
+11 114 2.9068e+014
+354 18 2.90585e+014
+427 63 2.90585e+014
+177 200 2.90438e+014
+151 400 2.90353e+014
+64 448 2.90273e+014
+377 183 2.9019e+014
+543 122 2.90124e+014
+94 260 2.89897e+014
+388 203 2.89675e+014
+183 315 2.88786e+014
+283 79 2.88437e+014
+25 200 2.88121e+014
+542 457 2.87877e+014
+12 214 2.87683e+014
+161 128 2.87534e+014
+118 61 2.87288e+014
+350 338 2.87147e+014
+372 73 2.87064e+014
+539 126 2.86718e+014
+499 264 2.86705e+014
+300 253 2.86346e+014
+477 221 2.86052e+014
+334 143 2.85937e+014
+454 116 2.85901e+014
+290 248 2.85784e+014
+466 102 2.85199e+014
+38 308 2.84779e+014
+503 167 2.84367e+014
+177 75 2.83854e+014
+168 422 2.83422e+014
+95 422 2.8333e+014
+143 376 2.82613e+014
+350 363 2.82472e+014
+336 183 2.82363e+014
+292 182 2.82362e+014
+480 171 2.82098e+014
+227 258 2.81477e+014
+108 260 2.81314e+014
+183 157 2.80891e+014
+44 152 2.80695e+014
+222 430 2.79942e+014
+562 435 2.79892e+014
+23 331 2.7974e+014
+258 131 2.79659e+014
+188 200 2.78939e+014
+126 339 2.78841e+014
+440 241 2.78523e+014
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_5_5.txt b/test_data/harriscorners/hc_msc_5.00_0.10_5_5.txt
new file mode 100644
index 0000000..e3f2b18
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_5_5.txt
@@ -0,0 +1,986 @@
+985
+244 94 3.12284e+016
+273 365 2.67744e+016
+237 19 2.15604e+016
+423 178 1.91173e+016
+362 401 1.84978e+016
+76 257 1.69449e+016
+122 43 1.6497e+016
+261 297 1.60001e+016
+281 113 1.5962e+016
+543 365 1.59453e+016
+200 17 1.56676e+016
+448 297 1.54245e+016
+82 28 1.53752e+016
+427 320 1.50018e+016
+65 343 1.48337e+016
+465 393 1.44678e+016
+447 397 1.42031e+016
+320 224 1.37774e+016
+343 9 1.37771e+016
+553 40 1.36802e+016
+131 36 1.36751e+016
+300 52 1.35633e+016
+214 72 1.34989e+016
+239 91 1.33171e+016
+360 295 1.32124e+016
+35 138 1.31018e+016
+507 122 1.30704e+016
+131 26 1.30566e+016
+27 9 1.29558e+016
+59 218 1.26822e+016
+128 2 1.26592e+016
+37 62 1.23452e+016
+134 214 1.22783e+016
+252 13 1.22626e+016
+124 198 1.22449e+016
+387 178 1.21713e+016
+294 15 1.1689e+016
+195 57 1.15459e+016
+81 4 1.11847e+016
+303 182 1.11431e+016
+257 385 1.11202e+016
+456 280 1.10684e+016
+125 364 1.10597e+016
+36 145 1.09697e+016
+387 10 1.08676e+016
+448 262 1.08133e+016
+33 99 1.07904e+016
+222 38 1.06718e+016
+84 78 1.05559e+016
+263 441 1.05487e+016
+484 338 1.05019e+016
+116 44 1.04299e+016
+435 67 1.02872e+016
+127 165 1.01312e+016
+242 71 1.01137e+016
+544 168 1.00891e+016
+243 202 1.00882e+016
+46 27 9.83315e+015
+124 254 9.82909e+015
+101 222 9.79359e+015
+390 58 9.66299e+015
+225 420 9.50941e+015
+138 203 9.49257e+015
+513 341 9.48392e+015
+452 339 9.42374e+015
+426 119 9.39205e+015
+329 128 9.33812e+015
+343 338 9.24954e+015
+152 223 9.21555e+015
+418 440 9.19639e+015
+412 256 9.09439e+015
+529 24 9.07899e+015
+511 167 8.94628e+015
+308 371 8.82072e+015
+55 29 8.78952e+015
+253 139 8.75676e+015
+485 59 8.72079e+015
+138 110 8.51002e+015
+144 310 8.43191e+015
+183 400 8.34549e+015
+320 313 8.30478e+015
+142 324 8.28346e+015
+475 262 8.27e+015
+480 297 8.25996e+015
+404 121 8.21843e+015
+510 173 8.1994e+015
+519 61 8.17303e+015
+64 236 8.14732e+015
+214 58 8.13722e+015
+363 251 8.07731e+015
+48 99 8.01496e+015
+92 198 7.9929e+015
+470 239 7.97608e+015
+110 240 7.96261e+015
+361 131 7.96147e+015
+360 335 7.89115e+015
+301 165 7.85331e+015
+177 106 7.83729e+015
+484 179 7.79783e+015
+2 47 7.78356e+015
+302 215 7.74286e+015
+545 41 7.65114e+015
+216 279 7.61522e+015
+543 15 7.61487e+015
+210 435 7.61377e+015
+184 36 7.59651e+015
+260 222 7.50801e+015
+461 279 7.47567e+015
+123 185 7.46356e+015
+57 5 7.42726e+015
+359 260 7.42492e+015
+181 111 7.41963e+015
+371 162 7.30738e+015
+391 144 7.2543e+015
+41 217 7.24849e+015
+104 62 7.2381e+015
+245 143 7.23307e+015
+207 450 7.22425e+015
+418 8 7.20432e+015
+431 147 7.20143e+015
+160 143 7.18947e+015
+386 220 7.17099e+015
+88 148 7.16867e+015
+221 16 7.12851e+015
+433 112 7.10053e+015
+10 101 7.09044e+015
+112 392 7.08718e+015
+225 182 7.08097e+015
+542 210 7.06042e+015
+348 179 6.99798e+015
+163 277 6.99664e+015
+545 59 6.99224e+015
+508 18 6.9895e+015
+311 150 6.98075e+015
+234 346 6.98009e+015
+283 72 6.97713e+015
+509 455 6.97439e+015
+498 159 6.95511e+015
+100 78 6.94852e+015
+410 65 6.92944e+015
+151 307 6.91044e+015
+71 147 6.88948e+015
+86 255 6.84398e+015
+283 403 6.83942e+015
+325 341 6.78802e+015
+252 423 6.78437e+015
+527 99 6.76557e+015
+533 184 6.75511e+015
+70 25 6.75164e+015
+230 36 6.73446e+015
+4 65 6.71585e+015
+515 76 6.71112e+015
+382 6 6.70983e+015
+244 165 6.69562e+015
+356 220 6.67538e+015
+524 20 6.67365e+015
+579 16 6.67048e+015
+234 162 6.64545e+015
+96 446 6.62884e+015
+421 335 6.60663e+015
+351 321 6.57917e+015
+92 214 6.55702e+015
+410 353 6.55117e+015
+65 319 6.53552e+015
+163 214 6.51513e+015
+169 57 6.49817e+015
+62 60 6.45268e+015
+60 183 6.43825e+015
+425 377 6.43498e+015
+387 294 6.42215e+015
+207 224 6.40102e+015
+78 80 6.34539e+015
+55 290 6.33692e+015
+286 297 6.32815e+015
+325 164 6.29059e+015
+36 176 6.27629e+015
+365 143 6.27363e+015
+138 173 6.26644e+015
+211 185 6.26083e+015
+209 55 6.23447e+015
+261 165 6.21033e+015
+170 18 6.14503e+015
+174 40 6.1051e+015
+82 135 6.07199e+015
+313 84 6.04247e+015
+271 279 6.0079e+015
+102 4 5.97459e+015
+386 243 5.94366e+015
+511 128 5.90705e+015
+229 292 5.89108e+015
+363 7 5.85248e+015
+106 39 5.84732e+015
+66 214 5.84243e+015
+453 204 5.82492e+015
+276 352 5.81691e+015
+293 26 5.76727e+015
+40 296 5.75248e+015
+175 94 5.74873e+015
+31 270 5.72702e+015
+528 104 5.71825e+015
+434 398 5.67552e+015
+174 312 5.66837e+015
+177 260 5.66762e+015
+449 218 5.66297e+015
+136 209 5.65985e+015
+476 21 5.63224e+015
+271 166 5.63045e+015
+49 151 5.62208e+015
+327 141 5.62081e+015
+497 81 5.61988e+015
+395 261 5.59833e+015
+55 66 5.58857e+015
+338 12 5.57577e+015
+522 264 5.54508e+015
+412 162 5.52691e+015
+75 6 5.51982e+015
+346 240 5.50859e+015
+300 265 5.49744e+015
+95 477 5.48893e+015
+326 425 5.48215e+015
+466 196 5.47849e+015
+266 296 5.46651e+015
+515 347 5.46224e+015
+511 220 5.41766e+015
+535 241 5.40878e+015
+325 88 5.3875e+015
+102 360 5.37628e+015
+355 268 5.37586e+015
+220 290 5.37274e+015
+332 295 5.37234e+015
+92 292 5.35542e+015
+246 206 5.34606e+015
+166 97 5.34457e+015
+512 99 5.33689e+015
+47 11 5.32542e+015
+276 180 5.30736e+015
+309 7 5.30553e+015
+209 20 5.30102e+015
+100 198 5.29855e+015
+154 236 5.29819e+015
+202 314 5.29148e+015
+471 421 5.29035e+015
+108 45 5.28056e+015
+167 326 5.27949e+015
+494 140 5.26842e+015
+537 393 5.24359e+015
+123 272 5.23541e+015
+527 361 5.23405e+015
+59 75 5.19079e+015
+163 74 5.1905e+015
+541 123 5.17912e+015
+250 365 5.16017e+015
+32 66 5.14594e+015
+271 290 5.14513e+015
+264 446 5.12719e+015
+226 221 5.11374e+015
+113 345 5.07233e+015
+523 123 5.05569e+015
+141 394 5.04063e+015
+422 48 5.01349e+015
+358 10 4.97917e+015
+508 5 4.97048e+015
+167 286 4.96279e+015
+345 350 4.93264e+015
+265 31 4.9139e+015
+344 263 4.90335e+015
+256 149 4.90132e+015
+278 144 4.89287e+015
+544 4 4.86873e+015
+238 349 4.86092e+015
+168 197 4.85856e+015
+345 108 4.83836e+015
+18 343 4.82591e+015
+110 135 4.82124e+015
+141 183 4.81119e+015
+306 440 4.8109e+015
+408 183 4.80359e+015
+333 90 4.7874e+015
+403 265 4.78066e+015
+165 243 4.75923e+015
+423 398 4.75347e+015
+313 76 4.7502e+015
+482 366 4.73216e+015
+110 95 4.72152e+015
+220 150 4.68263e+015
+6 10 4.67342e+015
+476 5 4.66944e+015
+157 73 4.66489e+015
+488 263 4.65369e+015
+416 23 4.64823e+015
+53 43 4.6413e+015
+406 198 4.63975e+015
+62 203 4.6383e+015
+542 132 4.6365e+015
+164 358 4.63509e+015
+21 61 4.62965e+015
+287 165 4.61015e+015
+180 394 4.60211e+015
+13 218 4.57959e+015
+444 452 4.57771e+015
+61 134 4.56429e+015
+273 131 4.55861e+015
+390 48 4.55132e+015
+524 346 4.53135e+015
+259 237 4.52962e+015
+135 129 4.52556e+015
+484 23 4.52187e+015
+478 15 4.51677e+015
+371 90 4.49466e+015
+280 50 4.47556e+015
+59 40 4.47306e+015
+365 105 4.47303e+015
+567 43 4.47247e+015
+413 299 4.46969e+015
+330 9 4.46261e+015
+350 145 4.45595e+015
+456 84 4.45341e+015
+442 23 4.45045e+015
+381 26 4.44114e+015
+403 187 4.4374e+015
+221 177 4.4346e+015
+192 330 4.43128e+015
+233 199 4.41398e+015
+57 364 4.41267e+015
+174 239 4.41214e+015
+520 184 4.40034e+015
+138 98 4.37325e+015
+46 82 4.37099e+015
+362 395 4.36905e+015
+482 328 4.365e+015
+233 14 4.36155e+015
+68 337 4.35603e+015
+382 412 4.34545e+015
+44 62 4.34366e+015
+270 71 4.30133e+015
+117 76 4.28889e+015
+338 473 4.2814e+015
+28 30 4.26158e+015
+141 22 4.2611e+015
+513 262 4.25399e+015
+159 138 4.25397e+015
+126 76 4.25304e+015
+436 303 4.24475e+015
+64 371 4.23811e+015
+438 339 4.23157e+015
+195 125 4.21455e+015
+364 181 4.2125e+015
+305 193 4.21245e+015
+273 296 4.19526e+015
+408 45 4.19315e+015
+334 436 4.19005e+015
+31 135 4.16883e+015
+245 293 4.16275e+015
+248 316 4.14921e+015
+85 214 4.14445e+015
+452 376 4.1312e+015
+32 218 4.12658e+015
+565 160 4.1221e+015
+448 166 4.11015e+015
+297 331 4.10369e+015
+298 69 4.10191e+015
+190 205 4.09628e+015
+268 53 4.0925e+015
+346 298 4.08671e+015
+42 339 4.08376e+015
+338 391 4.08138e+015
+41 10 4.06881e+015
+29 237 4.05677e+015
+393 216 4.04677e+015
+417 84 4.04177e+015
+317 335 4.04015e+015
+393 66 4.0396e+015
+71 96 4.03686e+015
+325 294 4.03516e+015
+36 201 4.00985e+015
+192 219 3.99364e+015
+260 71 3.97637e+015
+277 222 3.9656e+015
+502 143 3.96454e+015
+525 39 3.96056e+015
+341 122 3.96052e+015
+328 253 3.94975e+015
+357 282 3.94368e+015
+113 212 3.94142e+015
+306 363 3.94026e+015
+576 179 3.93781e+015
+259 35 3.92968e+015
+84 477 3.92511e+015
+374 393 3.91014e+015
+156 94 3.90733e+015
+42 24 3.8853e+015
+302 205 3.8837e+015
+405 375 3.87612e+015
+418 164 3.87401e+015
+525 423 3.86885e+015
+205 160 3.86817e+015
+539 405 3.86235e+015
+191 360 3.86158e+015
+46 220 3.85898e+015
+562 146 3.85467e+015
+120 51 3.84922e+015
+359 167 3.84727e+015
+79 197 3.84065e+015
+193 16 3.83564e+015
+160 183 3.83561e+015
+538 97 3.81172e+015
+489 43 3.8101e+015
+449 445 3.79695e+015
+141 2 3.79638e+015
+471 212 3.78854e+015
+114 3 3.77946e+015
+46 355 3.76477e+015
+377 119 3.75862e+015
+480 82 3.75433e+015
+198 131 3.74644e+015
+191 146 3.74472e+015
+571 450 3.73902e+015
+525 172 3.72826e+015
+360 217 3.72313e+015
+275 329 3.71808e+015
+550 378 3.71594e+015
+364 258 3.70107e+015
+378 67 3.70069e+015
+386 326 3.69908e+015
+573 141 3.695e+015
+307 449 3.69414e+015
+561 224 3.68678e+015
+299 178 3.68569e+015
+459 266 3.68136e+015
+146 160 3.67597e+015
+126 96 3.67451e+015
+511 83 3.67185e+015
+262 201 3.67066e+015
+249 403 3.66911e+015
+374 240 3.66486e+015
+154 114 3.65039e+015
+287 210 3.64645e+015
+446 7 3.64108e+015
+185 20 3.63894e+015
+53 221 3.6321e+015
+527 222 3.62783e+015
+279 128 3.62603e+015
+125 261 3.62056e+015
+436 320 3.61829e+015
+163 168 3.61052e+015
+249 219 3.60647e+015
+274 53 3.59317e+015
+297 420 3.58787e+015
+70 476 3.58443e+015
+160 111 3.57504e+015
+105 199 3.57171e+015
+475 246 3.56538e+015
+547 161 3.56434e+015
+388 15 3.54757e+015
+340 165 3.53918e+015
+530 144 3.53245e+015
+175 113 3.53169e+015
+476 341 3.52625e+015
+471 83 3.51861e+015
+47 132 3.50539e+015
+214 124 3.50142e+015
+453 102 3.49293e+015
+90 376 3.48563e+015
+490 59 3.46861e+015
+327 182 3.46578e+015
+470 122 3.46265e+015
+102 235 3.45277e+015
+389 97 3.42959e+015
+78 41 3.42637e+015
+543 457 3.42583e+015
+387 126 3.42331e+015
+246 399 3.42023e+015
+328 65 3.40896e+015
+578 43 3.40589e+015
+188 264 3.39854e+015
+516 18 3.39805e+015
+163 208 3.39688e+015
+120 447 3.39648e+015
+39 355 3.39511e+015
+220 100 3.39477e+015
+182 380 3.39106e+015
+512 296 3.38459e+015
+361 369 3.37581e+015
+228 128 3.37129e+015
+418 283 3.37097e+015
+161 20 3.36819e+015
+38 168 3.36526e+015
+345 276 3.36037e+015
+393 164 3.35387e+015
+133 93 3.33954e+015
+559 80 3.33063e+015
+502 362 3.32397e+015
+584 38 3.32335e+015
+385 162 3.32051e+015
+498 224 3.31559e+015
+473 63 3.31525e+015
+366 300 3.28856e+015
+95 6 3.28678e+015
+108 28 3.28549e+015
+282 393 3.2823e+015
+441 240 3.28055e+015
+118 425 3.2767e+015
+130 255 3.27471e+015
+156 318 3.27345e+015
+561 320 3.2557e+015
+152 1 3.25074e+015
+378 340 3.25018e+015
+217 208 3.24968e+015
+514 120 3.24837e+015
+473 202 3.2445e+015
+384 258 3.2438e+015
+258 161 3.24125e+015
+217 146 3.23758e+015
+279 366 3.22202e+015
+69 420 3.20581e+015
+221 432 3.20405e+015
+263 402 3.19395e+015
+130 72 3.18487e+015
+363 358 3.18483e+015
+58 373 3.18351e+015
+78 270 3.18281e+015
+79 474 3.1771e+015
+480 451 3.15917e+015
+129 238 3.15762e+015
+274 215 3.15121e+015
+291 50 3.14881e+015
+180 165 3.14808e+015
+178 18 3.14218e+015
+364 200 3.14058e+015
+144 6 3.13008e+015
+377 318 3.1178e+015
+110 264 3.09991e+015
+449 178 3.09417e+015
+573 405 3.09048e+015
+222 114 3.08033e+015
+210 33 3.07659e+015
+375 4 3.07586e+015
+395 318 3.0678e+015
+372 83 3.05328e+015
+241 421 3.04807e+015
+271 182 3.03636e+015
+565 463 3.03205e+015
+568 382 3.02802e+015
+44 474 3.01288e+015
+558 462 3.00898e+015
+37 287 3.00853e+015
+254 75 3.00615e+015
+257 250 2.99567e+015
+134 238 2.98783e+015
+354 25 2.98666e+015
+298 275 2.98531e+015
+215 175 2.9816e+015
+25 64 2.97709e+015
+518 202 2.97327e+015
+109 169 2.97138e+015
+463 40 2.96488e+015
+449 139 2.96233e+015
+131 476 2.9622e+015
+288 396 2.96141e+015
+406 80 2.96121e+015
+66 252 2.95899e+015
+396 160 2.95717e+015
+332 201 2.94982e+015
+52 12 2.94439e+015
+318 385 2.94426e+015
+250 32 2.93722e+015
+358 64 2.93594e+015
+263 392 2.93365e+015
+246 106 2.9335e+015
+93 255 2.93279e+015
+57 254 2.92647e+015
+277 137 2.9131e+015
+132 148 2.91249e+015
+281 419 2.90305e+015
+107 428 2.90176e+015
+379 106 2.89808e+015
+503 164 2.8908e+015
+468 139 2.88215e+015
+573 422 2.88207e+015
+489 182 2.88079e+015
+460 44 2.88047e+015
+560 272 2.87883e+015
+165 110 2.87806e+015
+34 31 2.87553e+015
+432 269 2.87151e+015
+544 216 2.86895e+015
+395 105 2.86732e+015
+198 111 2.86573e+015
+92 59 2.8651e+015
+87 369 2.85659e+015
+48 256 2.85634e+015
+479 402 2.85462e+015
+354 295 2.85327e+015
+109 59 2.8506e+015
+95 94 2.8453e+015
+382 337 2.84298e+015
+101 164 2.84136e+015
+108 108 2.841e+015
+441 98 2.83703e+015
+265 15 2.8367e+015
+486 4 2.83414e+015
+359 143 2.83051e+015
+242 190 2.82936e+015
+514 382 2.82588e+015
+505 381 2.82384e+015
+391 221 2.82214e+015
+398 168 2.81917e+015
+294 269 2.80805e+015
+358 241 2.80506e+015
+144 17 2.80422e+015
+398 357 2.8006e+015
+433 277 2.79525e+015
+39 83 2.79262e+015
+289 349 2.78757e+015
+451 86 2.78052e+015
+472 42 2.77662e+015
+463 23 2.77251e+015
+148 397 2.77083e+015
+106 98 2.76563e+015
+359 53 2.76548e+015
+152 196 2.76208e+015
+282 135 2.7596e+015
+51 61 2.75228e+015
+570 182 2.75204e+015
+538 186 2.75038e+015
+49 159 2.7484e+015
+191 312 2.74203e+015
+166 312 2.74198e+015
+380 180 2.73469e+015
+370 106 2.73124e+015
+430 89 2.72705e+015
+599 364 2.72564e+015
+471 268 2.72107e+015
+552 384 2.71641e+015
+264 311 2.71263e+015
+145 187 2.71158e+015
+284 199 2.70971e+015
+578 52 2.70684e+015
+18 236 2.70585e+015
+84 145 2.69439e+015
+275 318 2.69083e+015
+367 337 2.68995e+015
+196 193 2.68537e+015
+507 60 2.68189e+015
+83 72 2.67987e+015
+343 198 2.67963e+015
+367 1 2.67729e+015
+433 240 2.67726e+015
+483 143 2.67701e+015
+73 164 2.67495e+015
+297 410 2.67348e+015
+500 265 2.66946e+015
+342 465 2.66746e+015
+166 117 2.66453e+015
+309 32 2.65715e+015
+85 310 2.65447e+015
+330 106 2.6542e+015
+71 409 2.65082e+015
+69 131 2.64968e+015
+214 449 2.6446e+015
+192 172 2.64181e+015
+44 407 2.62993e+015
+412 4 2.62474e+015
+525 186 2.62263e+015
+95 20 2.62242e+015
+486 376 2.61418e+015
+36 299 2.61382e+015
+550 223 2.61011e+015
+150 231 2.60927e+015
+85 180 2.60602e+015
+434 225 2.60285e+015
+3 155 2.59365e+015
+300 106 2.58707e+015
+12 79 2.58693e+015
+447 350 2.57965e+015
+85 60 2.57672e+015
+259 272 2.57475e+015
+86 197 2.57237e+015
+90 259 2.56693e+015
+90 275 2.56071e+015
+444 119 2.55672e+015
+261 368 2.55345e+015
+35 11 2.55339e+015
+111 41 2.55128e+015
+489 343 2.55074e+015
+269 61 2.54369e+015
+130 428 2.53997e+015
+421 81 2.53568e+015
+592 18 2.5324e+015
+229 265 2.53098e+015
+449 437 2.52768e+015
+391 449 2.52673e+015
+136 21 2.52549e+015
+379 352 2.5248e+015
+576 126 2.52262e+015
+148 21 2.51135e+015
+274 77 2.5112e+015
+190 349 2.51015e+015
+332 415 2.50922e+015
+384 146 2.50464e+015
+331 258 2.50433e+015
+178 274 2.50411e+015
+536 121 2.5026e+015
+16 434 2.50091e+015
+532 398 2.49794e+015
+236 222 2.49386e+015
+9 476 2.49165e+015
+188 109 2.49049e+015
+299 398 2.48974e+015
+148 112 2.48881e+015
+188 181 2.48862e+015
+186 289 2.48807e+015
+39 239 2.4878e+015
+118 115 2.48763e+015
+219 107 2.48492e+015
+187 308 2.47245e+015
+346 48 2.47124e+015
+338 263 2.46993e+015
+433 381 2.46947e+015
+440 455 2.46711e+015
+406 163 2.46341e+015
+225 50 2.46316e+015
+289 137 2.46181e+015
+316 166 2.45135e+015
+538 39 2.45113e+015
+528 159 2.4425e+015
+328 214 2.43758e+015
+157 40 2.43677e+015
+211 153 2.42874e+015
+49 235 2.42423e+015
+50 452 2.41876e+015
+319 186 2.4152e+015
+434 159 2.41349e+015
+129 309 2.40821e+015
+498 67 2.40545e+015
+544 91 2.40244e+015
+512 43 2.39545e+015
+106 77 2.3939e+015
+436 182 2.38793e+015
+146 98 2.382e+015
+183 136 2.38153e+015
+157 306 2.38056e+015
+87 208 2.37714e+015
+275 196 2.36954e+015
+251 152 2.36695e+015
+107 183 2.36625e+015
+517 42 2.36494e+015
+482 440 2.36466e+015
+56 171 2.36413e+015
+271 241 2.36051e+015
+506 203 2.35681e+015
+432 82 2.35301e+015
+314 222 2.35212e+015
+465 355 2.34718e+015
+182 344 2.3395e+015
+187 99 2.33879e+015
+113 176 2.32629e+015
+338 63 2.32152e+015
+74 186 2.32009e+015
+291 89 2.29545e+015
+293 312 2.29427e+015
+569 203 2.29287e+015
+3 382 2.29088e+015
+204 435 2.28837e+015
+56 145 2.28002e+015
+429 223 2.27912e+015
+534 161 2.27893e+015
+203 293 2.27303e+015
+387 283 2.26913e+015
+318 460 2.26884e+015
+525 381 2.26815e+015
+209 395 2.26515e+015
+92 79 2.26507e+015
+233 261 2.261e+015
+290 263 2.25627e+015
+191 277 2.25609e+015
+20 317 2.25358e+015
+181 292 2.24803e+015
+183 316 2.24736e+015
+233 295 2.24612e+015
+449 63 2.24579e+015
+401 181 2.24556e+015
+9 47 2.23582e+015
+321 10 2.23379e+015
+265 260 2.2326e+015
+501 42 2.23048e+015
+436 388 2.22887e+015
+563 17 2.22778e+015
+118 96 2.22433e+015
+403 6 2.22384e+015
+562 71 2.21879e+015
+325 13 2.21722e+015
+165 379 2.2171e+015
+575 99 2.21196e+015
+350 87 2.20459e+015
+394 23 2.20381e+015
+358 161 2.20358e+015
+430 45 2.19774e+015
+539 128 2.19615e+015
+274 205 2.19545e+015
+128 40 2.19425e+015
+17 64 2.19212e+015
+22 219 2.1903e+015
+191 188 2.18545e+015
+454 47 2.18016e+015
+255 108 2.17636e+015
+572 327 2.17331e+015
+136 138 2.1732e+015
+33 111 2.17301e+015
+208 420 2.17102e+015
+109 325 2.17048e+015
+508 361 2.16752e+015
+255 405 2.16696e+015
+242 58 2.16653e+015
+307 354 2.16445e+015
+597 272 2.16014e+015
+26 132 2.15676e+015
+548 45 2.15513e+015
+172 450 2.15395e+015
+445 126 2.14611e+015
+302 189 2.14514e+015
+410 261 2.14278e+015
+163 253 2.14236e+015
+184 142 2.14041e+015
+200 330 2.13505e+015
+332 334 2.13176e+015
+450 22 2.12904e+015
+456 161 2.12613e+015
+187 325 2.12607e+015
+138 58 2.12201e+015
+197 148 2.12188e+015
+407 142 2.12089e+015
+103 259 2.11988e+015
+43 121 2.11903e+015
+278 190 2.1177e+015
+547 182 2.11524e+015
+223 87 2.11512e+015
+53 359 2.114e+015
+462 161 2.11378e+015
+540 141 2.1133e+015
+224 398 2.11241e+015
+525 399 2.1123e+015
+484 359 2.10928e+015
+513 402 2.10571e+015
+480 165 2.10222e+015
+243 31 2.10137e+015
+541 163 2.09783e+015
+418 68 2.09532e+015
+149 39 2.09265e+015
+555 181 2.09261e+015
+45 343 2.09244e+015
+178 330 2.08872e+015
+413 245 2.08536e+015
+86 363 2.08245e+015
+401 319 2.08203e+015
+560 60 2.08137e+015
+240 197 2.08077e+015
+504 262 2.07802e+015
+347 393 2.0652e+015
+411 471 2.06325e+015
+195 83 2.06023e+015
+161 127 2.05681e+015
+75 235 2.05516e+015
+260 142 2.05007e+015
+167 149 2.04916e+015
+116 360 2.04895e+015
+203 257 2.04828e+015
+279 86 2.04564e+015
+512 202 2.04284e+015
+575 38 2.03606e+015
+446 376 2.03583e+015
+427 183 2.03493e+015
+321 119 2.03097e+015
+237 131 2.03054e+015
+67 304 2.02697e+015
+129 127 2.02504e+015
+220 317 2.02263e+015
+286 344 2.01294e+015
+495 456 2.01196e+015
+454 115 2.01137e+015
+388 420 2.00804e+015
+149 131 2.00679e+015
+524 198 2.00571e+015
+126 219 2.00208e+015
+462 221 2.00169e+015
+37 268 2.00137e+015
+372 116 1.99768e+015
+154 56 1.9928e+015
+67 47 1.99161e+015
+110 358 1.98811e+015
+183 95 1.98792e+015
+161 238 1.98523e+015
+249 192 1.9778e+015
+122 124 1.97759e+015
+272 92 1.97542e+015
+57 331 1.97251e+015
+282 207 1.97215e+015
+175 186 1.97174e+015
+133 79 1.97122e+015
+280 439 1.96893e+015
+173 273 1.96827e+015
+328 320 1.96654e+015
+109 147 1.96183e+015
+21 131 1.95352e+015
+414 264 1.95088e+015
+418 259 1.94725e+015
+497 462 1.94422e+015
+322 28 1.94291e+015
+537 263 1.94019e+015
+387 3 1.93674e+015
+524 78 1.93135e+015
+579 84 1.93082e+015
+572 332 1.92754e+015
+257 131 1.92693e+015
+314 448 1.92643e+015
+243 280 1.92471e+015
+336 427 1.92304e+015
+537 103 1.92015e+015
+334 218 1.9166e+015
+408 430 1.91543e+015
+119 129 1.91226e+015
+150 150 1.91181e+015
+245 14 1.90937e+015
+354 424 1.90808e+015
+260 329 1.90764e+015
+459 304 1.90282e+015
+287 34 1.90249e+015
+155 445 1.90101e+015
+96 453 1.90059e+015
+156 78 1.89909e+015
+404 13 1.899e+015
+96 37 1.89742e+015
+265 286 1.89429e+015
+13 203 1.893e+015
+573 161 1.89189e+015
+437 468 1.8894e+015
+529 31 1.88748e+015
+247 327 1.87981e+015
+480 173 1.87958e+015
+440 378 1.87853e+015
+119 5 1.87765e+015
+421 299 1.87753e+015
+420 143 1.87624e+015
+545 439 1.87603e+015
+214 93 1.87518e+015
+65 277 1.8747e+015
+265 131 1.87309e+015
+401 44 1.87072e+015
+411 98 1.86009e+015
+229 346 1.85908e+015
+281 386 1.8568e+015
+162 134 1.85678e+015
+51 287 1.85297e+015
+99 256 1.85069e+015
+8 234 1.84871e+015
+87 355 1.84756e+015
+576 311 1.84736e+015
+439 122 1.84685e+015
+210 445 1.845e+015
+223 154 1.84475e+015
+446 243 1.84297e+015
+41 137 1.84111e+015
+445 204 1.83039e+015
+202 346 1.82834e+015
+514 362 1.8273e+015
+500 474 1.82711e+015
+311 299 1.82639e+015
+271 414 1.82317e+015
+223 124 1.81928e+015
+223 72 1.8189e+015
+386 167 1.81694e+015
+532 341 1.81591e+015
+97 147 1.81365e+015
+193 290 1.81325e+015
+211 12 1.81226e+015
+442 320 1.81175e+015
+356 255 1.81074e+015
+389 134 1.81011e+015
+252 163 1.8055e+015
+401 144 1.80464e+015
+461 123 1.80327e+015
+323 148 1.80272e+015
+104 306 1.80269e+015
+464 101 1.80268e+015
+170 111 1.80187e+015
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_5_7.txt b/test_data/harriscorners/hc_msc_5.00_0.10_5_7.txt
new file mode 100644
index 0000000..6fefd13
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_5_7.txt
@@ -0,0 +1,1075 @@
+1074
+245 94 9.30136e+016
+81 29 6.39569e+016
+421 180 6.35066e+016
+237 20 6.12891e+016
+130 26 5.73559e+016
+272 366 5.60848e+016
+75 257 4.55084e+016
+121 43 4.43046e+016
+282 113 4.4202e+016
+80 4 4.25437e+016
+261 297 4.24644e+016
+510 124 4.10031e+016
+299 53 3.96282e+016
+130 37 3.93975e+016
+424 322 3.88484e+016
+30 8 3.86084e+016
+152 223 3.77959e+016
+199 18 3.74576e+016
+542 14 3.67458e+016
+240 92 3.63166e+016
+342 9 3.62215e+016
+83 77 3.54128e+016
+330 128 3.5085e+016
+213 57 3.34705e+016
+34 139 3.32223e+016
+195 58 3.31995e+016
+483 178 3.29954e+016
+485 338 3.29582e+016
+543 365 3.27416e+016
+458 279 3.27386e+016
+361 294 3.25213e+016
+363 400 3.25103e+016
+37 63 3.24126e+016
+528 24 3.2326e+016
+102 222 3.23121e+016
+138 204 3.21301e+016
+302 184 3.14964e+016
+128 1 3.13079e+016
+55 30 3.08069e+016
+385 10 3.07737e+016
+156 1 3.0623e+016
+253 12 3.05981e+016
+293 16 3.01497e+016
+361 395 2.98124e+016
+64 344 2.92337e+016
+135 213 2.85454e+016
+400 263 2.82456e+016
+36 145 2.82296e+016
+476 262 2.80804e+016
+464 394 2.80297e+016
+175 110 2.75711e+016
+320 225 2.73619e+016
+257 385 2.7265e+016
+320 314 2.71163e+016
+127 165 2.7098e+016
+554 39 2.70505e+016
+61 217 2.70366e+016
+391 294 2.69023e+016
+241 70 2.6848e+016
+436 68 2.65869e+016
+115 43 2.63126e+016
+211 436 2.55881e+016
+104 61 2.55674e+016
+359 129 2.54312e+016
+451 338 2.5293e+016
+224 39 2.52121e+016
+33 100 2.49712e+016
+12 217 2.48797e+016
+512 342 2.47518e+016
+359 334 2.46719e+016
+163 215 2.46305e+016
+447 261 2.45092e+016
+528 102 2.41065e+016
+449 299 2.40839e+016
+518 59 2.40168e+016
+122 186 2.38728e+016
+125 254 2.369e+016
+43 26 2.36731e+016
+223 420 2.36425e+016
+389 59 2.35751e+016
+345 339 2.35185e+016
+403 120 2.34558e+016
+364 250 2.34187e+016
+263 442 2.3375e+016
+328 296 2.3031e+016
+511 169 2.28668e+016
+427 118 2.27947e+016
+210 450 2.27082e+016
+215 71 2.22137e+016
+55 290 2.21761e+016
+225 181 2.20219e+016
+243 201 2.19709e+016
+196 127 2.19087e+016
+41 217 2.18445e+016
+47 98 2.17259e+016
+523 61 2.17135e+016
+383 5 2.16703e+016
+390 143 2.15059e+016
+386 178 2.1468e+016
+545 59 2.14001e+016
+416 8 2.13462e+016
+143 324 2.13032e+016
+448 398 2.11774e+016
+313 148 2.11695e+016
+158 74 2.11156e+016
+272 280 2.09078e+016
+4 46 2.08828e+016
+486 58 2.07952e+016
+543 167 2.07451e+016
+470 421 2.07321e+016
+418 438 2.0726e+016
+357 259 2.06708e+016
+434 112 2.06287e+016
+126 364 2.05811e+016
+580 16 2.05673e+016
+60 40 2.04322e+016
+352 321 2.04169e+016
+413 257 2.04157e+016
+56 6 2.03924e+016
+182 398 2.02828e+016
+562 478 2.01909e+016
+48 26 1.97941e+016
+453 204 1.97713e+016
+367 144 1.97629e+016
+64 318 1.97345e+016
+302 215 1.96931e+016
+477 19 1.96866e+016
+387 220 1.9643e+016
+302 165 1.96065e+016
+470 238 1.95766e+016
+506 16 1.95389e+016
+255 139 1.94059e+016
+209 21 1.92667e+016
+109 240 1.92635e+016
+123 197 1.9089e+016
+61 203 1.90465e+016
+546 41 1.9024e+016
+404 183 1.90211e+016
+359 220 1.89943e+016
+165 240 1.88401e+016
+150 306 1.87927e+016
+208 222 1.87786e+016
+87 254 1.87524e+016
+211 185 1.87159e+016
+534 185 1.87087e+016
+183 36 1.86228e+016
+293 26 1.86009e+016
+107 44 1.85684e+016
+174 40 1.85675e+016
+326 141 1.8544e+016
+490 139 1.85178e+016
+329 258 1.84798e+016
+310 6 1.84673e+016
+145 6 1.83988e+016
+284 402 1.83154e+016
+500 159 1.83034e+016
+246 144 1.82992e+016
+139 109 1.82733e+016
+36 174 1.82187e+016
+508 454 1.81163e+016
+243 166 1.80892e+016
+143 311 1.80267e+016
+410 353 1.79892e+016
+129 75 1.79731e+016
+528 186 1.79247e+016
+32 270 1.78714e+016
+107 39 1.78486e+016
+260 220 1.77797e+016
+128 187 1.75359e+016
+229 37 1.75304e+016
+49 151 1.75227e+016
+112 392 1.72763e+016
+100 198 1.72396e+016
+100 79 1.72057e+016
+60 184 1.71985e+016
+153 235 1.71937e+016
+7 10 1.71861e+016
+252 423 1.71825e+016
+66 216 1.71721e+016
+235 347 1.71679e+016
+256 151 1.71661e+016
+313 84 1.70739e+016
+343 264 1.70146e+016
+392 218 1.70107e+016
+65 235 1.70001e+016
+83 134 1.69535e+016
+512 221 1.69474e+016
+104 3 1.69319e+016
+511 19 1.69126e+016
+414 22 1.68553e+016
+85 148 1.68187e+016
+160 144 1.67898e+016
+423 332 1.64949e+016
+432 147 1.64791e+016
+325 341 1.64419e+016
+435 397 1.6436e+016
+301 205 1.63806e+016
+245 207 1.62985e+016
+165 327 1.62531e+016
+42 63 1.62289e+016
+220 180 1.6201e+016
+69 476 1.61653e+016
+91 197 1.6056e+016
+371 161 1.60316e+016
+234 161 1.60203e+016
+309 370 1.60094e+016
+548 162 1.59415e+016
+223 433 1.59375e+016
+301 105 1.5877e+016
+343 108 1.57516e+016
+228 291 1.56864e+016
+163 110 1.56692e+016
+40 296 1.56594e+016
+232 125 1.56414e+016
+111 169 1.55642e+016
+437 304 1.5554e+016
+411 65 1.53753e+016
+263 402 1.53575e+016
+305 439 1.53322e+016
+541 124 1.53126e+016
+137 173 1.52599e+016
+462 43 1.51744e+016
+134 97 1.5173e+016
+48 12 1.51109e+016
+102 360 1.51094e+016
+326 89 1.50497e+016
+24 62 1.50438e+016
+481 299 1.50173e+016
+544 457 1.49882e+016
+423 46 1.4981e+016
+365 300 1.48988e+016
+176 260 1.48965e+016
+385 295 1.487e+016
+248 399 1.48426e+016
+112 344 1.48345e+016
+29 30 1.4828e+016
+278 220 1.47835e+016
+389 21 1.47826e+016
+362 7 1.47709e+016
+389 164 1.47472e+016
+125 259 1.47417e+016
+451 374 1.46918e+016
+70 25 1.46523e+016
+169 56 1.46159e+016
+54 222 1.45799e+016
+513 262 1.45768e+016
+259 165 1.44949e+016
+394 65 1.4488e+016
+97 448 1.44723e+016
+448 166 1.44486e+016
+168 196 1.44462e+016
+365 105 1.4427e+016
+404 266 1.43504e+016
+431 318 1.42469e+016
+459 264 1.42347e+016
+498 225 1.42096e+016
+153 196 1.42095e+016
+202 313 1.42053e+016
+280 365 1.41686e+016
+217 280 1.41662e+016
+377 120 1.41618e+016
+140 19 1.41406e+016
+131 132 1.41231e+016
+189 218 1.40895e+016
+329 11 1.40715e+016
+407 198 1.40659e+016
+270 291 1.40521e+016
+140 182 1.40168e+016
+533 20 1.39258e+016
+360 142 1.3912e+016
+412 45 1.38872e+016
+260 236 1.3793e+016
+164 73 1.37227e+016
+169 18 1.37015e+016
+343 122 1.37006e+016
+163 277 1.3698e+016
+388 16 1.36829e+016
+77 40 1.36465e+016
+217 147 1.36115e+016
+166 98 1.36087e+016
+93 215 1.3604e+016
+463 280 1.35529e+016
+85 1 1.35024e+016
+326 165 1.3493e+016
+432 276 1.34825e+016
+545 2 1.34542e+016
+52 42 1.34446e+016
+346 240 1.3439e+016
+273 181 1.34174e+016
+63 60 1.33951e+016
+218 105 1.33378e+016
+385 244 1.33243e+016
+562 461 1.33002e+016
+561 225 1.32925e+016
+107 28 1.32724e+016
+276 353 1.32724e+016
+567 42 1.32215e+016
+5 65 1.32035e+016
+165 357 1.31517e+016
+357 166 1.31209e+016
+110 136 1.31081e+016
+56 65 1.30772e+016
+206 436 1.30665e+016
+174 311 1.30503e+016
+510 129 1.29887e+016
+485 44 1.29807e+016
+45 339 1.29363e+016
+265 30 1.29003e+016
+512 100 1.2878e+016
+165 179 1.28735e+016
+444 118 1.28688e+016
+282 72 1.28629e+016
+346 350 1.28177e+016
+190 360 1.28011e+016
+557 463 1.28001e+016
+61 134 1.2684e+016
+274 132 1.26608e+016
+455 85 1.26436e+016
+296 332 1.26306e+016
+50 288 1.26055e+016
+223 14 1.25972e+016
+160 139 1.25934e+016
+47 81 1.25361e+016
+539 457 1.25132e+016
+481 84 1.25048e+016
+248 316 1.24802e+016
+134 127 1.24638e+016
+413 163 1.24523e+016
+298 274 1.24295e+016
+513 78 1.24226e+016
+490 2 1.24168e+016
+283 51 1.23926e+016
+110 94 1.23388e+016
+483 363 1.23054e+016
+507 6 1.22897e+016
+300 264 1.22874e+016
+446 8 1.22644e+016
+437 319 1.22632e+016
+210 35 1.22589e+016
+273 316 1.22532e+016
+483 329 1.22456e+016
+521 184 1.22047e+016
+151 1 1.21832e+016
+493 81 1.21584e+016
+145 16 1.21479e+016
+223 218 1.21467e+016
+176 95 1.2069e+016
+175 20 1.20679e+016
+110 179 1.20285e+016
+298 179 1.20216e+016
+10 102 1.20098e+016
+227 186 1.2004e+016
+70 149 1.19781e+016
+142 393 1.19491e+016
+46 355 1.19464e+016
+249 366 1.19293e+016
+231 199 1.19268e+016
+304 190 1.1924e+016
+392 48 1.19089e+016
+269 53 1.19068e+016
+325 426 1.19032e+016
+111 110 1.18772e+016
+145 161 1.18527e+016
+378 67 1.1807e+016
+271 168 1.1779e+016
+287 211 1.17751e+016
+165 313 1.17241e+016
+575 178 1.17222e+016
+465 196 1.17193e+016
+218 98 1.16942e+016
+269 70 1.16938e+016
+552 381 1.16929e+016
+421 165 1.16872e+016
+394 164 1.16669e+016
+124 271 1.16451e+016
+448 218 1.16435e+016
+190 350 1.16213e+016
+347 181 1.16174e+016
+441 24 1.15871e+016
+261 202 1.15808e+016
+511 174 1.15079e+016
+379 337 1.14971e+016
+525 38 1.14821e+016
+412 298 1.14768e+016
+42 81 1.14697e+016
+57 365 1.14468e+016
+166 287 1.14227e+016
+334 91 1.13808e+016
+247 219 1.1334e+016
+540 98 1.13335e+016
+517 20 1.13315e+016
+297 69 1.13065e+016
+340 164 1.12681e+016
+88 368 1.12599e+016
+477 6 1.12465e+016
+521 264 1.12335e+016
+463 27 1.12299e+016
+346 276 1.12074e+016
+205 309 1.11736e+016
+538 406 1.11642e+016
+193 215 1.11418e+016
+433 158 1.11223e+016
+279 129 1.11204e+016
+470 121 1.10985e+016
+159 182 1.10854e+016
+503 164 1.1077e+016
+355 254 1.10757e+016
+162 169 1.10459e+016
+385 324 1.10444e+016
+487 263 1.09787e+016
+221 151 1.09449e+016
+544 7 1.09425e+016
+380 107 1.0928e+016
+373 392 1.09016e+016
+541 209 1.08746e+016
+437 338 1.08744e+016
+276 331 1.08639e+016
+358 319 1.08603e+016
+273 219 1.08462e+016
+346 297 1.08312e+016
+575 13 1.08209e+016
+31 235 1.08094e+016
+220 290 1.0808e+016
+448 444 1.08038e+016
+523 123 1.07861e+016
+35 31 1.07831e+016
+442 240 1.07757e+016
+445 123 1.07744e+016
+523 346 1.07705e+016
+404 188 1.07697e+016
+102 164 1.07466e+016
+117 426 1.06906e+016
+118 115 1.06792e+016
+541 133 1.06698e+016
+284 198 1.06644e+016
+157 91 1.06537e+016
+418 83 1.06444e+016
+222 112 1.06267e+016
+86 61 1.05929e+016
+158 96 1.05772e+016
+273 295 1.05685e+016
+530 143 1.05675e+016
+58 75 1.054e+016
+578 43 1.05237e+016
+436 379 1.05192e+016
+295 421 1.05105e+016
+91 290 1.04978e+016
+105 76 1.04703e+016
+282 391 1.04703e+016
+449 118 1.04635e+016
+473 23 1.04553e+016
+312 76 1.04493e+016
+357 11 1.04259e+016
+407 45 1.04239e+016
+107 429 1.04204e+016
+192 143 1.03924e+016
+292 88 1.0368e+016
+450 87 1.03598e+016
+139 99 1.03355e+016
+373 86 1.03266e+016
+474 247 1.03126e+016
+164 209 1.03009e+016
+358 66 1.02913e+016
+528 363 1.02788e+016
+42 10 1.02671e+016
+86 213 1.02622e+016
+191 206 1.02477e+016
+83 476 1.02262e+016
+153 112 1.01738e+016
+499 80 1.017e+016
+196 132 1.01224e+016
+335 436 1.01094e+016
+452 62 1.0088e+016
+158 112 1.00698e+016
+575 459 1.00672e+016
+510 82 1.00558e+016
+457 42 1.00353e+016
+451 438 9.93607e+015
+473 203 9.93409e+015
+215 124 9.8993e+015
+88 207 9.86409e+015
+118 76 9.84764e+015
+514 203 9.84668e+015
+170 240 9.80383e+015
+272 285 9.7754e+015
+228 129 9.75815e+015
+404 376 9.69775e+015
+396 317 9.69543e+015
+102 236 9.68856e+015
+119 447 9.66452e+015
+364 180 9.59908e+015
+279 143 9.59362e+015
+354 269 9.57148e+015
+484 142 9.56656e+015
+537 394 9.56114e+015
+244 293 9.55486e+015
+114 1 9.55134e+015
+302 176 9.54688e+015
+287 164 9.52399e+015
+59 253 9.49748e+015
+279 136 9.48712e+015
+33 219 9.47911e+015
+92 445 9.47238e+015
+467 139 9.44818e+015
+61 370 9.44619e+015
+287 397 9.43782e+015
+424 399 9.39653e+015
+94 257 9.37908e+015
+564 160 9.34449e+015
+426 378 9.34042e+015
+178 273 9.33939e+015
+524 426 9.32263e+015
+78 474 9.31303e+015
+126 96 9.19458e+015
+241 421 9.17945e+015
+351 146 9.15809e+015
+333 66 9.15588e+015
+514 119 9.1535e+015
+175 240 9.14757e+015
+389 66 9.12795e+015
+55 145 9.12363e+015
+405 81 9.12193e+015
+281 438 9.10271e+015
+437 240 9.09412e+015
+455 58 9.09365e+015
+295 269 9.06354e+015
+444 451 9.04025e+015
+471 212 9.03681e+015
+472 266 9.03653e+015
+265 16 9.02162e+015
+357 282 9.01891e+015
+285 298 8.98864e+015
+529 399 8.9836e+015
+186 289 8.97853e+015
+328 181 8.97769e+015
+550 58 8.97728e+015
+86 311 8.96966e+015
+68 419 8.95396e+015
+418 283 8.92738e+015
+375 5 8.92101e+015
+168 115 8.91016e+015
+259 34 8.90616e+015
+376 82 8.89731e+015
+41 355 8.87992e+015
+387 124 8.86054e+015
+333 202 8.84955e+015
+572 405 8.83541e+015
+406 64 8.82399e+015
+196 190 8.82147e+015
+11 78 8.78306e+015
+526 222 8.75728e+015
+453 102 8.75153e+015
+563 323 8.7427e+015
+186 20 8.73115e+015
+497 66 8.71635e+015
+190 312 8.68287e+015
+77 271 8.6698e+015
+478 243 8.66755e+015
+335 218 8.63761e+015
+119 130 8.63748e+015
+190 278 8.63303e+015
+569 382 8.62165e+015
+182 343 8.6191e+015
+570 451 8.60679e+015
+229 13 8.60384e+015
+506 361 8.60305e+015
+171 95 8.60031e+015
+167 105 8.5812e+015
+353 294 8.57041e+015
+481 451 8.56613e+015
+383 162 8.54563e+015
+91 376 8.51414e+015
+480 440 8.50823e+015
+133 237 8.49734e+015
+155 318 8.49299e+015
+269 186 8.45924e+015
+330 213 8.4401e+015
+191 329 8.42522e+015
+179 164 8.42483e+015
+503 143 8.41222e+015
+390 242 8.38338e+015
+67 254 8.36515e+015
+174 187 8.35754e+015
+450 140 8.34488e+015
+204 160 8.33454e+015
+261 140 8.32096e+015
+185 135 8.30745e+015
+468 204 8.30505e+015
+402 44 8.29987e+015
+70 96 8.29579e+015
+33 110 8.27317e+015
+133 147 8.27137e+015
+48 221 8.25418e+015
+91 276 8.24925e+015
+525 173 8.23826e+015
+421 298 8.19276e+015
+437 280 8.18836e+015
+18 343 8.17387e+015
+155 56 8.15932e+015
+288 51 8.11796e+015
+516 42 8.09806e+015
+190 109 8.09577e+015
+363 357 8.08214e+015
+547 139 8.03433e+015
+540 41 8.01523e+015
+572 446 8.00995e+015
+319 165 8.00763e+015
+537 93 7.97801e+015
+91 60 7.96513e+015
+466 124 7.95295e+015
+26 131 7.92787e+015
+317 335 7.92543e+015
+136 136 7.90715e+015
+346 47 7.88395e+015
+241 195 7.8625e+015
+340 391 7.81832e+015
+72 165 7.81826e+015
+332 413 7.79737e+015
+431 81 7.79508e+015
+249 361 7.79494e+015
+78 199 7.76416e+015
+120 53 7.75068e+015
+262 392 7.74656e+015
+358 241 7.7313e+015
+454 116 7.7085e+015
+242 190 7.70476e+015
+110 58 7.7007e+015
+562 146 7.67191e+015
+384 260 7.65982e+015
+48 234 7.65165e+015
+216 175 7.63482e+015
+547 217 7.63469e+015
+272 64 7.62879e+015
+339 473 7.59933e+015
+191 126 7.58484e+015
+425 3 7.56768e+015
+455 162 7.56123e+015
+290 139 7.55309e+015
+424 63 7.53013e+015
+147 449 7.52809e+015
+421 141 7.52141e+015
+328 105 7.51935e+015
+400 168 7.51895e+015
+573 421 7.51235e+015
+253 74 7.48148e+015
+391 53 7.48038e+015
+275 52 7.47806e+015
+306 449 7.45821e+015
+306 364 7.45718e+015
+360 368 7.45275e+015
+214 94 7.43664e+015
+163 252 7.41602e+015
+292 335 7.41461e+015
+48 162 7.40986e+015
+486 375 7.40533e+015
+359 53 7.39167e+015
+366 336 7.36572e+015
+577 245 7.36504e+015
+438 468 7.36486e+015
+110 262 7.36009e+015
+319 187 7.35304e+015
+160 21 7.3449e+015
+57 70 7.34428e+015
+508 201 7.34176e+015
+388 138 7.30902e+015
+163 62 7.29524e+015
+524 399 7.2897e+015
+104 307 7.27571e+015
+218 208 7.2755e+015
+337 264 7.27514e+015
+335 390 7.24455e+015
+382 26 7.23628e+015
+237 417 7.23109e+015
+541 139 7.22546e+015
+282 419 7.22188e+015
+310 446 7.21587e+015
+182 95 7.20421e+015
+181 20 7.20329e+015
+591 19 7.18206e+015
+205 15 7.17665e+015
+355 24 7.17637e+015
+413 246 7.17324e+015
+379 181 7.14601e+015
+536 240 7.11887e+015
+191 292 7.1184e+015
+39 238 7.09463e+015
+222 87 7.08522e+015
+209 419 7.0772e+015
+100 257 7.0633e+015
+83 171 7.05737e+015
+476 341 7.05325e+015
+362 244 7.04906e+015
+53 358 7.03962e+015
+198 111 7.03604e+015
+324 15 7.02326e+015
+406 164 7.01589e+015
+282 209 7.01374e+015
+86 181 7.0117e+015
+501 362 7.00986e+015
+70 130 6.99881e+015
+22 48 6.99827e+015
+574 330 6.99744e+015
+125 126 6.9788e+015
+247 35 6.9677e+015
+131 168 6.9403e+015
+566 180 6.92583e+015
+217 425 6.92528e+015
+110 326 6.91597e+015
+514 381 6.9145e+015
+574 140 6.91413e+015
+9 233 6.91148e+015
+280 124 6.90779e+015
+150 398 6.89776e+015
+85 38 6.89626e+015
+130 478 6.89567e+015
+86 374 6.88473e+015
+187 308 6.87834e+015
+232 263 6.8742e+015
+578 81 6.85031e+015
+187 265 6.84269e+015
+130 428 6.84265e+015
+163 186 6.83829e+015
+529 160 6.82768e+015
+17 434 6.82353e+015
+502 22 6.82082e+015
+494 58 6.81611e+015
+445 205 6.80745e+015
+170 109 6.80504e+015
+162 127 6.79678e+015
+445 353 6.78837e+015
+255 107 6.7864e+015
+583 38 6.78432e+015
+186 202 6.78126e+015
+48 133 6.77574e+015
+433 45 6.7738e+015
+195 255 6.76101e+015
+156 305 6.75749e+015
+513 298 6.73612e+015
+184 142 6.72267e+015
+362 63 6.71857e+015
+402 143 6.71733e+015
+276 214 6.71236e+015
+289 348 6.70308e+015
+526 197 6.69566e+015
+299 295 6.69334e+015
+343 200 6.68869e+015
+325 131 6.68545e+015
+266 203 6.68439e+015
+220 315 6.68245e+015
+39 287 6.67691e+015
+376 316 6.66898e+015
+47 255 6.66636e+015
+373 241 6.66252e+015
+261 71 6.65001e+015
+353 338 6.61865e+015
+183 382 6.60249e+015
+376 354 6.59235e+015
+247 107 6.59017e+015
+438 182 6.57977e+015
+498 460 6.57867e+015
+512 363 6.56158e+015
+37 200 6.55898e+015
+396 104 6.55457e+015
+277 187 6.55136e+015
+178 330 6.54923e+015
+12 204 6.54467e+015
+33 164 6.52205e+015
+544 440 6.52003e+015
+212 150 6.5141e+015
+506 61 6.51152e+015
+186 101 6.51009e+015
+483 204 6.50311e+015
+466 424 6.49016e+015
+280 204 6.47934e+015
+118 95 6.47615e+015
+9 32 6.47576e+015
+1 383 6.4724e+015
+275 204 6.46895e+015
+548 181 6.46766e+015
+479 403 6.46094e+015
+419 66 6.45168e+015
+325 221 6.43398e+015
+121 123 6.43234e+015
+268 242 6.43119e+015
+114 216 6.4238e+015
+345 166 6.41865e+015
+328 64 6.40688e+015
+383 413 6.40422e+015
+291 262 6.40293e+015
+388 97 6.39003e+015
+364 201 6.38867e+015
+298 398 6.38092e+015
+272 145 6.37776e+015
+264 310 6.35333e+015
+154 295 6.33426e+015
+270 108 6.33217e+015
+419 259 6.31229e+015
+161 152 6.31006e+015
+336 62 6.29351e+015
+95 5 6.29163e+015
+18 65 6.28739e+015
+302 333 6.2786e+015
+74 477 6.27809e+015
+382 102 6.2636e+015
+209 161 6.26121e+015
+55 172 6.25977e+015
+130 306 6.25909e+015
+523 78 6.25418e+015
+242 58 6.24711e+015
+446 22 6.24019e+015
+455 48 6.23262e+015
+262 284 6.22575e+015
+480 165 6.22128e+015
+204 294 6.21877e+015
+304 160 6.20029e+015
+461 162 6.19743e+015
+388 2 6.18408e+015
+479 286 6.18138e+015
+242 281 6.17657e+015
+142 449 6.16914e+015
+147 78 6.16486e+015
+195 84 6.15592e+015
+368 109 6.14183e+015
+49 61 6.13793e+015
+106 182 6.11238e+015
+478 11 6.11026e+015
+163 118 6.10946e+015
+115 359 6.1038e+015
+212 145 6.0982e+015
+261 369 6.09747e+015
+578 53 6.08258e+015
+181 155 6.08049e+015
+432 270 6.07384e+015
+28 136 6.07351e+015
+96 93 6.06571e+015
+94 21 6.06459e+015
+505 262 6.06306e+015
+418 449 6.05706e+015
+250 193 6.05534e+015
+51 453 6.05366e+015
+536 265 6.03647e+015
+332 334 6.03309e+015
+380 319 6.03125e+015
+580 345 6.0302e+015
+343 463 6.02845e+015
+109 146 6.00138e+015
+269 58 5.99764e+015
+558 79 5.9937e+015
+97 38 5.97524e+015
+276 197 5.97047e+015
+434 89 5.96166e+015
+307 359 5.94258e+015
+534 121 5.93899e+015
+191 171 5.93729e+015
+190 55 5.92935e+015
+408 140 5.92904e+015
+485 25 5.91197e+015
+450 180 5.91151e+015
+463 224 5.90638e+015
+318 461 5.90531e+015
+290 311 5.90308e+015
+391 118 5.89301e+015
+471 83 5.88618e+015
+337 367 5.8849e+015
+449 126 5.86421e+015
+575 127 5.85616e+015
+258 249 5.85374e+015
+178 57 5.85366e+015
+329 25 5.84887e+015
+45 408 5.84373e+015
+251 150 5.82355e+015
+215 289 5.82147e+015
+371 338 5.81008e+015
+191 188 5.80239e+015
+398 356 5.79441e+015
+218 128 5.78461e+015
+227 123 5.78314e+015
+91 79 5.76526e+015
+493 340 5.76208e+015
+506 380 5.75304e+015
+338 427 5.7374e+015
+149 130 5.72311e+015
+439 123 5.72229e+015
+499 263 5.7215e+015
+438 160 5.70776e+015
+317 103 5.70407e+015
+314 165 5.69535e+015
+138 59 5.69299e+015
+562 18 5.68613e+015
+65 182 5.68537e+015
+72 408 5.68262e+015
+167 150 5.67981e+015
+541 248 5.67929e+015
+249 386 5.65913e+015
+386 92 5.65574e+015
+20 317 5.64969e+015
+96 60 5.64902e+015
+471 42 5.6451e+015
+541 381 5.63834e+015
+166 379 5.63284e+015
+464 355 5.62618e+015
+258 133 5.62597e+015
+226 198 5.61697e+015
+125 218 5.61497e+015
+112 211 5.60927e+015
+407 429 5.60836e+015
+405 11 5.60185e+015
+306 90 5.59719e+015
+386 282 5.58814e+015
+183 316 5.58226e+015
+43 475 5.5778e+015
+72 187 5.57194e+015
+209 155 5.5699e+015
+597 364 5.55856e+015
+225 51 5.55186e+015
+187 182 5.55166e+015
+8 115 5.54647e+015
+298 87 5.52712e+015
+474 62 5.52258e+015
+495 474 5.51063e+015
+309 32 5.50728e+015
+413 81 5.50391e+015
+65 276 5.4943e+015
+292 122 5.4923e+015
+539 186 5.46816e+015
+396 21 5.46547e+015
+445 244 5.4647e+015
+484 5 5.46348e+015
+199 166 5.46343e+015
+96 423 5.45206e+015
+306 259 5.44625e+015
+559 272 5.44413e+015
+463 101 5.44375e+015
+480 46 5.4371e+015
+235 220 5.42416e+015
+550 223 5.38184e+015
+163 349 5.37269e+015
+68 47 5.3704e+015
+307 169 5.36906e+015
+511 442 5.35691e+015
+321 121 5.35031e+015
+159 239 5.34594e+015
+575 100 5.34555e+015
+497 118 5.34527e+015
+352 425 5.34092e+015
+155 445 5.33757e+015
+319 386 5.33682e+015
+385 334 5.32865e+015
+372 69 5.32346e+015
+167 433 5.32015e+015
+411 264 5.30817e+015
+361 362 5.30626e+015
+321 11 5.29878e+015
+158 310 5.29739e+015
+268 88 5.29663e+015
+101 96 5.2965e+015
+18 236 5.29483e+015
+236 134 5.29148e+015
+181 132 5.28377e+015
+20 286 5.28013e+015
+412 416 5.27266e+015
+371 118 5.2726e+015
+542 262 5.25841e+015
+261 397 5.2576e+015
+412 471 5.24667e+015
+366 164 5.2403e+015
+248 260 5.23439e+015
+401 318 5.22614e+015
+34 12 5.22482e+015
+269 416 5.21204e+015
+526 383 5.20273e+015
+135 322 5.19916e+015
+205 33 5.19682e+015
+190 136 5.19362e+015
+228 260 5.19159e+015
+433 226 5.19084e+015
+513 182 5.1868e+015
+66 306 5.18406e+015
+266 131 5.17262e+015
+233 406 5.16865e+015
+532 345 5.15797e+015
+147 97 5.15629e+015
+211 395 5.1502e+015
+111 338 5.14861e+015
+41 182 5.143e+015
+456 177 5.13079e+015
+104 35 5.12896e+015
+528 30 5.10619e+015
+343 142 5.10554e+015
+207 405 5.10339e+015
+311 299 5.09873e+015
+502 123 5.0916e+015
+594 101 5.09066e+015
+534 78 5.08941e+015
+51 230 5.08727e+015
+253 182 5.07523e+015
+459 304 5.05944e+015
+199 329 5.05697e+015
+156 39 5.04983e+015
+336 144 5.04488e+015
+265 249 5.04476e+015
+94 367 5.04332e+015
+121 215 5.03871e+015
+307 105 5.03429e+015
+160 33 5.03414e+015
+389 450 5.03246e+015
+464 115 5.0323e+015
+76 110 5.00204e+015
+420 363 4.99791e+015
+351 273 4.99515e+015
+148 22 4.98008e+015
+529 270 4.97567e+015
+442 97 4.97508e+015
+139 140 4.96752e+015
+502 43 4.96573e+015
+494 456 4.96425e+015
+349 88 4.94707e+015
+251 164 4.94319e+015
+332 355 4.9404e+015
+134 80 4.93997e+015
+3 234 4.93369e+015
+349 125 4.92649e+015
+107 257 4.92269e+015
+72 235 4.91711e+015
+233 31 4.91674e+015
+25 118 4.90987e+015
+327 52 4.9081e+015
+127 109 4.90646e+015
+223 72 4.90139e+015
+278 87 4.90093e+015
+329 321 4.90061e+015
+295 411 4.89978e+015
+143 235 4.8958e+015
+512 140 4.88972e+015
+383 145 4.88483e+015
+264 258 4.87687e+015
+47 203 4.87317e+015
+361 48 4.86809e+015
+174 201 4.85904e+015
+171 451 4.85795e+015
+528 431 4.85704e+015
+298 138 4.85182e+015
+580 218 4.84485e+015
+112 354 4.82301e+015
+273 93 4.82169e+015
+42 122 4.81778e+015
+178 1 4.80514e+015
+204 419 4.8004e+015
+210 133 4.7969e+015
+400 277 4.79497e+015
+55 330 4.79284e+015
+225 397 4.75189e+015
+83 197 4.75025e+015
+26 44 4.74937e+015
+371 105 4.74798e+015
+115 277 4.74311e+015
+518 142 4.73614e+015
+211 13 4.73514e+015
+145 140 4.70767e+015
+96 456 4.69985e+015
+566 60 4.69694e+015
+82 101 4.69533e+015
+238 34 4.69332e+015
+593 425 4.68574e+015
+201 345 4.68516e+015
+288 31 4.68e+015
+334 181 4.67327e+015
+210 97 4.67105e+015
+528 437 4.67065e+015
+188 301 4.66672e+015
+115 262 4.66217e+015
+77 233 4.65924e+015
+67 202 4.65891e+015
+367 86 4.65297e+015
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_7_3.txt b/test_data/harriscorners/hc_msc_5.00_0.10_7_3.txt
new file mode 100644
index 0000000..a9b8b0e
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_7_3.txt
@@ -0,0 +1,878 @@
+877
+245 95 1.26647e+020
+499 1 1.10239e+020
+274 366 1.00414e+020
+363 401 9.63726e+019
+251 13 7.04474e+019
+240 90 6.77478e+019
+282 115 6.25569e+019
+65 343 5.93703e+019
+507 122 5.80434e+019
+449 298 5.79116e+019
+131 36 5.78775e+019
+122 44 5.72633e+019
+261 297 5.22611e+019
+426 320 4.90999e+019
+465 394 4.89398e+019
+446 396 4.79442e+019
+344 10 4.75053e+019
+200 16 4.6941e+019
+520 61 4.67532e+019
+130 2 4.54327e+019
+37 62 4.46205e+019
+418 440 4.42616e+019
+421 182 4.41514e+019
+28 8 4.4031e+019
+387 10 4.40002e+019
+59 219 4.35944e+019
+480 298 4.32664e+019
+387 178 4.30534e+019
+553 40 4.24744e+019
+233 15 4.15305e+019
+237 20 4.13853e+019
+110 238 4.02671e+019
+213 72 3.98399e+019
+72 24 3.97202e+019
+435 68 3.96913e+019
+448 263 3.96281e+019
+543 364 3.91426e+019
+456 281 3.91081e+019
+45 27 3.90646e+019
+183 401 3.76931e+019
+271 166 3.7312e+019
+144 309 3.72145e+019
+256 386 3.68557e+019
+390 58 3.6718e+019
+125 199 3.6717e+019
+299 52 3.62835e+019
+223 38 3.58624e+019
+303 183 3.54916e+019
+479 19 3.5127e+019
+135 214 3.51138e+019
+34 137 3.5007e+019
+462 279 3.48495e+019
+77 257 3.45623e+019
+271 71 3.40639e+019
+355 220 3.39964e+019
+321 313 3.38621e+019
+411 354 3.37996e+019
+320 224 3.37215e+019
+526 60 3.37185e+019
+4 66 3.36766e+019
+348 179 3.35514e+019
+512 167 3.32859e+019
+102 4 3.29909e+019
+264 440 3.26804e+019
+224 419 3.2526e+019
+482 365 3.23301e+019
+132 26 3.16807e+019
+439 339 3.15221e+019
+359 260 3.12525e+019
+385 221 3.11562e+019
+412 256 3.08576e+019
+432 146 3.07215e+019
+402 122 3.06544e+019
+101 58 3.05752e+019
+177 106 3.05161e+019
+221 16 3.04328e+019
+421 334 3.03832e+019
+92 198 3.01773e+019
+510 173 3.00735e+019
+81 2 2.98933e+019
+243 72 2.98346e+019
+136 202 2.9395e+019
+35 146 2.93501e+019
+392 144 2.93241e+019
+425 376 2.92385e+019
+515 76 2.92031e+019
+545 168 2.9121e+019
+58 183 2.91056e+019
+111 393 2.88103e+019
+262 165 2.88015e+019
+512 341 2.87275e+019
+74 6 2.86973e+019
+498 82 2.85646e+019
+308 372 2.84741e+019
+483 24 2.80296e+019
+228 292 2.79042e+019
+361 131 2.78118e+019
+239 349 2.77336e+019
+41 297 2.76886e+019
+563 478 2.73574e+019
+181 111 2.71871e+019
+300 265 2.69052e+019
+304 216 2.68772e+019
+359 294 2.68634e+019
+293 15 2.68558e+019
+360 336 2.67743e+019
+210 445 2.66238e+019
+483 339 2.65384e+019
+524 20 2.65096e+019
+82 29 2.6437e+019
+453 340 2.61181e+019
+411 162 2.60965e+019
+125 255 2.60373e+019
+246 143 2.59615e+019
+382 8 2.57529e+019
+283 403 2.57248e+019
+138 110 2.55284e+019
+474 262 2.51675e+019
+250 364 2.51016e+019
+550 379 2.48752e+019
+225 221 2.46766e+019
+64 235 2.46683e+019
+124 362 2.46528e+019
+167 286 2.46462e+019
+434 398 2.46313e+019
+372 163 2.43659e+019
+127 76 2.43396e+019
+12 101 2.43218e+019
+327 342 2.42538e+019
+542 18 2.41841e+019
+430 1 2.40024e+019
+128 164 2.39223e+019
+312 149 2.38891e+019
+510 455 2.38544e+019
+562 147 2.35703e+019
+116 43 2.33114e+019
+378 353 2.32916e+019
+271 279 2.32497e+019
+528 98 2.32447e+019
+566 43 2.32008e+019
+192 331 2.30993e+019
+100 221 2.29214e+019
+348 241 2.28475e+019
+283 72 2.24447e+019
+64 60 2.24269e+019
+170 57 2.24253e+019
+184 35 2.24172e+019
+151 307 2.22173e+019
+387 295 2.2217e+019
+36 174 2.21603e+019
+33 99 2.20096e+019
+327 127 2.18275e+019
+334 436 2.17917e+019
+345 109 2.17775e+019
+95 446 2.16059e+019
+55 31 2.14327e+019
+302 206 2.131e+019
+66 320 2.12773e+019
+342 337 2.12368e+019
+329 254 2.12142e+019
+139 173 2.12001e+019
+481 179 2.11707e+019
+326 426 2.11091e+019
+87 148 2.11022e+019
+355 320 2.10994e+019
+66 214 2.10412e+019
+422 44 2.08969e+019
+158 1 2.08739e+019
+101 78 2.08578e+019
+533 183 2.08214e+019
+577 15 2.07589e+019
+475 22 2.0723e+019
+195 58 2.07188e+019
+395 260 2.0716e+019
+216 279 2.0702e+019
+356 268 2.07002e+019
+512 125 2.06825e+019
+203 310 2.0618e+019
+158 143 2.04611e+019
+328 142 2.04504e+019
+347 392 2.04351e+019
+277 352 2.03904e+019
+233 162 2.03872e+019
+456 83 2.03073e+019
+53 43 2.02657e+019
+514 223 2.01903e+019
+254 139 2.01499e+019
+338 165 2.01102e+019
+482 327 2.00878e+019
+522 122 1.99399e+019
+123 272 1.99002e+019
+449 219 1.98652e+019
+68 149 1.9843e+019
+208 451 1.98355e+019
+472 63 1.97822e+019
+48 100 1.968e+019
+162 214 1.96612e+019
+542 210 1.95717e+019
+31 219 1.94513e+019
+417 7 1.92853e+019
+248 404 1.92792e+019
+451 376 1.92133e+019
+503 361 1.91591e+019
+206 224 1.90896e+019
+416 23 1.90641e+019
+387 243 1.89963e+019
+57 364 1.88805e+019
+492 140 1.88604e+019
+212 182 1.88578e+019
+452 205 1.87701e+019
+465 197 1.87635e+019
+177 260 1.87252e+019
+366 144 1.84904e+019
+408 63 1.84809e+019
+169 198 1.84382e+019
+279 222 1.84016e+019
+46 147 1.83786e+019
+87 209 1.83548e+019
+170 18 1.8327e+019
+529 23 1.83147e+019
+86 255 1.82771e+019
+187 99 1.82249e+019
+2 46 1.80918e+019
+49 153 1.80524e+019
+56 5 1.80294e+019
+91 292 1.79296e+019
+264 445 1.79174e+019
+147 21 1.7895e+019
+55 294 1.78911e+019
+328 66 1.78835e+019
+275 181 1.78642e+019
+242 203 1.78017e+019
+191 359 1.77619e+019
+192 219 1.7703e+019
+141 324 1.76892e+019
+358 10 1.76428e+019
+512 295 1.76228e+019
+403 188 1.76178e+019
+234 346 1.74111e+019
+42 339 1.73567e+019
+229 35 1.73388e+019
+220 178 1.72337e+019
+114 345 1.72041e+019
+150 222 1.71703e+019
+131 148 1.71628e+019
+512 98 1.71289e+019
+55 66 1.70078e+019
+273 130 1.70033e+019
+306 439 1.69912e+019
+121 52 1.69904e+019
+45 81 1.69635e+019
+567 161 1.68751e+019
+164 242 1.68587e+019
+360 217 1.68518e+019
+545 4 1.68381e+019
+362 251 1.6836e+019
+298 70 1.66953e+019
+37 288 1.66724e+019
+406 375 1.66308e+019
+379 66 1.65468e+019
+72 97 1.65318e+019
+433 110 1.65266e+019
+286 296 1.64243e+019
+546 57 1.63995e+019
+246 294 1.63763e+019
+22 61 1.63733e+019
+294 25 1.63515e+019
+497 228 1.62875e+019
+15 219 1.62868e+019
+470 239 1.6271e+019
+232 200 1.62587e+019
+312 7 1.6158e+019
+508 7 1.59906e+019
+54 289 1.59291e+019
+338 391 1.59277e+019
+541 99 1.58901e+019
+108 183 1.58794e+019
+426 119 1.57119e+019
+340 13 1.57111e+019
+157 55 1.5628e+019
+422 398 1.56236e+019
+263 201 1.55939e+019
+128 95 1.55817e+019
+255 182 1.55267e+019
+435 281 1.55033e+019
+314 82 1.54848e+019
+176 39 1.54765e+019
+535 242 1.54562e+019
+525 345 1.54522e+019
+236 130 1.5449e+019
+107 40 1.54068e+019
+47 11 1.54067e+019
+367 247 1.53557e+019
+105 62 1.52897e+019
+210 437 1.52766e+019
+167 325 1.52698e+019
+86 214 1.52374e+019
+526 223 1.52214e+019
+486 182 1.52011e+019
+449 178 1.51937e+019
+413 299 1.51318e+019
+436 91 1.50327e+019
+86 77 1.49463e+019
+510 18 1.49306e+019
+158 138 1.49302e+019
+224 183 1.49094e+019
+113 213 1.49054e+019
+157 73 1.49032e+019
+542 130 1.4861e+019
+286 166 1.48554e+019
+211 57 1.48539e+019
+177 93 1.4841e+019
+254 422 1.48347e+019
+18 342 1.48257e+019
+280 128 1.48148e+019
+358 393 1.47781e+019
+547 40 1.47149e+019
+525 424 1.46825e+019
+317 148 1.46127e+019
+382 411 1.45964e+019
+281 51 1.45604e+019
+196 82 1.45237e+019
+259 221 1.45114e+019
+432 83 1.45097e+019
+528 188 1.44816e+019
+245 14 1.44495e+019
+576 178 1.43924e+019
+403 6 1.43915e+019
+242 100 1.43356e+019
+141 2 1.43223e+019
+289 137 1.43164e+019
+110 96 1.42931e+019
+273 297 1.42725e+019
+377 119 1.42322e+019
+7 11 1.42212e+019
+301 165 1.42177e+019
+526 38 1.42017e+019
+537 186 1.41967e+019
+103 359 1.41116e+019
+156 318 1.41025e+019
+358 64 1.40789e+019
+366 7 1.40679e+019
+173 312 1.40589e+019
+477 12 1.40022e+019
+457 375 1.39828e+019
+356 128 1.39531e+019
+384 354 1.39457e+019
+527 361 1.3871e+019
+94 217 1.38396e+019
+244 165 1.38343e+019
+345 351 1.38311e+019
+408 182 1.38014e+019
+137 208 1.37944e+019
+230 266 1.37901e+019
+136 128 1.37534e+019
+219 35 1.37438e+019
+141 394 1.37326e+019
+183 19 1.36664e+019
+358 143 1.36482e+019
+181 380 1.35998e+019
+239 422 1.35278e+019
+35 200 1.35166e+019
+84 476 1.35052e+019
+181 394 1.34827e+019
+443 23 1.34369e+019
+352 147 1.34268e+019
+103 392 1.34223e+019
+306 192 1.34026e+019
+516 348 1.33565e+019
+28 236 1.33001e+019
+140 183 1.32387e+019
+100 199 1.32355e+019
+100 162 1.32229e+019
+344 263 1.32212e+019
+64 371 1.32177e+019
+82 136 1.31824e+019
+389 140 1.31639e+019
+256 35 1.31063e+019
+290 264 1.31044e+019
+307 448 1.30207e+019
+584 38 1.29852e+019
+448 168 1.29805e+019
+484 59 1.29701e+019
+275 319 1.29443e+019
+528 104 1.29257e+019
+285 212 1.28375e+019
+259 71 1.27038e+019
+325 165 1.26907e+019
+541 124 1.26562e+019
+351 271 1.26365e+019
+146 160 1.25946e+019
+272 53 1.25548e+019
+58 74 1.25078e+019
+220 107 1.24977e+019
+166 96 1.24633e+019
+296 420 1.2429e+019
+198 130 1.24117e+019
+220 100 1.23716e+019
+329 9 1.23696e+019
+346 297 1.23664e+019
+243 190 1.23516e+019
+597 272 1.2338e+019
+110 46 1.23107e+019
+475 5 1.23096e+019
+418 68 1.23015e+019
+333 89 1.2301e+019
+571 448 1.22961e+019
+38 219 1.22633e+019
+81 77 1.22034e+019
+362 360 1.22031e+019
+520 263 1.21964e+019
+290 49 1.21853e+019
+110 27 1.21681e+019
+195 16 1.21599e+019
+378 339 1.21221e+019
+278 145 1.20982e+019
+141 22 1.20792e+019
+297 410 1.20688e+019
+112 165 1.20159e+019
+506 203 1.19983e+019
+490 343 1.19507e+019
+344 197 1.19473e+019
+568 382 1.19237e+019
+216 54 1.19125e+019
+46 219 1.19092e+019
+178 164 1.19018e+019
+136 21 1.19007e+019
+520 183 1.18652e+019
+137 98 1.18349e+019
+338 473 1.18158e+019
+116 184 1.17514e+019
+277 370 1.17156e+019
+536 393 1.17066e+019
+357 282 1.16782e+019
+507 164 1.16414e+019
+163 207 1.16347e+019
+561 320 1.1614e+019
+110 264 1.15996e+019
+371 393 1.15961e+019
+514 382 1.15902e+019
+33 65 1.15751e+019
+131 476 1.15556e+019
+398 169 1.15485e+019
+381 26 1.15376e+019
+94 6 1.15348e+019
+391 324 1.15345e+019
+220 290 1.15031e+019
+429 88 1.14856e+019
+500 224 1.14132e+019
+211 33 1.13531e+019
+420 81 1.13191e+019
+480 403 1.12908e+019
+68 337 1.12821e+019
+475 342 1.12818e+019
+267 297 1.12737e+019
+163 358 1.12512e+019
+393 46 1.12394e+019
+152 1 1.12226e+019
+292 311 1.12156e+019
+392 165 1.12015e+019
+537 458 1.11893e+019
+268 288 1.11778e+019
+144 187 1.1177e+019
+538 95 1.11382e+019
+187 263 1.11339e+019
+444 453 1.11195e+019
+403 265 1.11014e+019
+413 4 1.10958e+019
+560 81 1.10934e+019
+502 143 1.10811e+019
+513 261 1.10493e+019
+205 162 1.10476e+019
+418 300 1.104e+019
+95 476 1.10199e+019
+480 261 1.1015e+019
+365 105 1.09923e+019
+516 17 1.09863e+019
+248 218 1.09645e+019
+250 32 1.09633e+019
+41 10 1.09131e+019
+127 186 1.09029e+019
+371 90 1.08712e+019
+598 364 1.08584e+019
+190 205 1.08353e+019
+438 304 1.0829e+019
+163 168 1.08288e+019
+528 142 1.08266e+019
+267 30 1.0791e+019
+190 322 1.07576e+019
+374 241 1.07314e+019
+323 260 1.07304e+019
+36 268 1.07301e+019
+9 76 1.07268e+019
+137 138 1.0705e+019
+297 331 1.06851e+019
+122 185 1.06519e+019
+114 428 1.06509e+019
+85 59 1.06418e+019
+131 255 1.06307e+019
+276 329 1.06295e+019
+164 277 1.06173e+019
+488 262 1.06089e+019
+216 175 1.05543e+019
+342 123 1.05527e+019
+179 329 1.05262e+019
+432 268 1.05221e+019
+260 142 1.05041e+019
+472 211 1.04993e+019
+287 33 1.04751e+019
+328 288 1.04453e+019
+154 114 1.04223e+019
+78 196 1.03265e+019
+177 18 1.0325e+019
+366 2 1.03081e+019
+404 13 1.02734e+019
+469 417 1.02578e+019
+45 407 1.02578e+019
+124 261 1.02569e+019
+163 74 1.02218e+019
+358 168 1.01968e+019
+449 446 1.01715e+019
+539 40 1.016e+019
+540 13 1.01495e+019
+429 223 1.01458e+019
+492 181 1.01362e+019
+458 266 1.01311e+019
+283 206 1.01237e+019
+324 90 1.01072e+019
+117 76 1.01062e+019
+236 221 1.0094e+019
+560 229 9.97301e+018
+204 435 9.94222e+018
+174 238 9.92762e+018
+511 43 9.92353e+018
+545 217 9.92332e+018
+408 45 9.918e+018
+93 254 9.89505e+018
+266 403 9.87627e+018
+439 455 9.84324e+018
+547 162 9.81734e+018
+181 291 9.81025e+018
+247 317 9.79693e+018
+417 450 9.79636e+018
+62 204 9.78838e+018
+540 405 9.77286e+018
+282 199 9.67943e+018
+39 406 9.67456e+018
+441 98 9.66344e+018
+68 304 9.6147e+018
+210 395 9.58667e+018
+572 328 9.57769e+018
+390 448 9.57412e+018
+561 71 9.5537e+018
+278 418 9.54031e+018
+44 62 9.52466e+018
+182 133 9.50454e+018
+332 333 9.48838e+018
+336 317 9.47401e+018
+70 478 9.46927e+018
+370 107 9.45959e+018
+163 328 9.43208e+018
+210 154 9.42593e+018
+342 464 9.39952e+018
+260 368 9.38407e+018
+46 354 9.37814e+018
+530 366 9.37447e+018
+419 52 9.37076e+018
+282 393 9.36517e+018
+51 61 9.3622e+018
+306 362 9.35006e+018
+282 135 9.33352e+018
+445 127 9.32751e+018
+516 202 9.30942e+018
+492 59 9.28452e+018
+472 421 9.27493e+018
+430 44 9.25004e+018
+475 161 9.23191e+018
+160 183 9.22645e+018
+386 327 9.19361e+018
+469 140 9.17013e+018
+471 268 9.16629e+018
+496 462 9.16173e+018
+101 236 9.16055e+018
+513 402 9.15094e+018
+130 239 9.14589e+018
+113 3 9.13614e+018
+450 91 9.10064e+018
+84 310 9.07104e+018
+505 381 9.04435e+018
+48 256 9.04015e+018
+56 373 9.03967e+018
+172 449 9.02978e+018
+274 76 9.02497e+018
+75 132 9.01379e+018
+450 22 8.99686e+018
+321 10 8.98742e+018
+219 316 8.98637e+018
+62 133 8.98308e+018
+190 146 8.98302e+018
+398 358 8.9816e+018
+129 309 8.97842e+018
+31 269 8.97173e+018
+157 200 8.88537e+018
+461 220 8.8775e+018
+507 59 8.85873e+018
+115 306 8.84936e+018
+363 182 8.8256e+018
+497 160 8.82285e+018
+270 62 8.81376e+018
+526 398 8.81335e+018
+316 428 8.79013e+018
+363 370 8.78994e+018
+358 53 8.78425e+018
+253 74 8.76361e+018
+3 155 8.73865e+018
+316 107 8.70952e+018
+463 39 8.68978e+018
+368 337 8.66121e+018
+148 131 8.65427e+018
+386 162 8.63781e+018
+108 324 8.63749e+018
+365 200 8.61743e+018
+436 386 8.58967e+018
+3 382 8.57887e+018
+10 218 8.5605e+018
+391 52 8.56012e+018
+395 104 8.5576e+018
+265 260 8.54051e+018
+341 88 8.53251e+018
+384 260 8.53063e+018
+121 239 8.52789e+018
+74 186 8.52513e+018
+199 110 8.51752e+018
+246 106 8.51521e+018
+390 19 8.5093e+018
+479 451 8.49716e+018
+569 39 8.4959e+018
+43 474 8.47875e+018
+91 389 8.43034e+018
+333 412 8.41265e+018
+184 94 8.39716e+018
+271 184 8.39673e+018
+583 345 8.39101e+018
+243 210 8.33216e+018
+463 23 8.32995e+018
+327 182 8.3284e+018
+300 177 8.30412e+018
+275 197 8.28963e+018
+88 354 8.28038e+018
+78 81 8.27686e+018
+393 217 8.2695e+018
+149 38 8.26266e+018
+122 216 8.25767e+018
+326 13 8.25249e+018
+464 161 8.25089e+018
+39 143 8.247e+018
+18 236 8.24182e+018
+39 168 8.23885e+018
+262 391 8.21573e+018
+116 96 8.20445e+018
+310 33 8.20289e+018
+39 355 8.20121e+018
+218 146 8.2009e+018
+291 30 8.19922e+018
+282 351 8.19307e+018
+548 45 8.18458e+018
+109 428 8.18085e+018
+437 466 8.16171e+018
+565 463 8.1536e+018
+75 235 8.15059e+018
+100 95 8.14217e+018
+317 385 8.13521e+018
+500 318 8.13434e+018
+274 206 8.12956e+018
+533 122 8.12825e+018
+536 103 8.12621e+018
+471 83 8.09004e+018
+184 318 8.0885e+018
+217 126 8.05651e+018
+241 59 8.04727e+018
+113 356 8.04072e+018
+274 215 8.00365e+018
+331 295 8.00196e+018
+279 363 7.99979e+018
+474 246 7.99953e+018
+89 376 7.99801e+018
+83 404 7.97955e+018
+256 405 7.96576e+018
+289 349 7.96297e+018
+559 271 7.96202e+018
+406 142 7.95796e+018
+159 112 7.95156e+018
+108 136 7.93648e+018
+163 315 7.91643e+018
+412 220 7.91529e+018
+50 452 7.91374e+018
+222 430 7.90154e+018
+540 140 7.8932e+018
+575 126 7.89151e+018
+155 195 7.87102e+018
+267 52 7.87031e+018
+392 293 7.84664e+018
+58 253 7.84037e+018
+191 189 7.81167e+018
+88 369 7.78714e+018
+187 292 7.7796e+018
+243 419 7.77688e+018
+103 305 7.76143e+018
+412 245 7.73168e+018
+232 274 7.73092e+018
+533 340 7.68221e+018
+392 66 7.67219e+018
+472 201 7.62694e+018
+50 160 7.60515e+018
+175 115 7.59916e+018
+325 295 7.56506e+018
+197 148 7.54578e+018
+157 40 7.53199e+018
+53 221 7.50014e+018
+525 381 7.49232e+018
+258 237 7.48967e+018
+240 196 7.48962e+018
+121 447 7.48415e+018
+438 239 7.48276e+018
+386 63 7.46929e+018
+117 360 7.46904e+018
+279 86 7.45605e+018
+370 82 7.42397e+018
+564 16 7.42026e+018
+45 137 7.42022e+018
+472 42 7.41945e+018
+516 120 7.4172e+018
+64 276 7.39207e+018
+572 161 7.38811e+018
+164 18 7.38728e+018
+258 151 7.37584e+018
+203 293 7.36611e+018
+489 43 7.36027e+018
+396 161 7.35411e+018
+527 80 7.35347e+018
+57 332 7.3508e+018
+544 91 7.34752e+018
+160 430 7.34244e+018
+137 56 7.3311e+018
+528 160 7.32929e+018
+407 196 7.31962e+018
+247 394 7.31932e+018
+222 239 7.30906e+018
+571 456 7.29971e+018
+347 120 7.29752e+018
+65 252 7.28078e+018
+9 476 7.27112e+018
+416 86 7.25585e+018
+18 319 7.24954e+018
+258 131 7.2482e+018
+261 287 7.23441e+018
+485 4 7.22202e+018
+447 245 7.22075e+018
+531 398 7.21046e+018
+196 193 7.21017e+018
+146 98 7.2037e+018
+247 346 7.20226e+018
+335 445 7.19351e+018
+88 183 7.18842e+018
+220 210 7.18729e+018
+500 420 7.17492e+018
+309 356 7.17434e+018
+441 320 7.16951e+018
+316 167 7.16143e+018
+287 343 7.15205e+018
+262 216 7.14822e+018
+70 409 7.14805e+018
+211 21 7.14682e+018
+169 309 7.14607e+018
+400 319 7.13685e+018
+429 340 7.13263e+018
+95 20 7.11863e+018
+14 30 7.11492e+018
+23 322 7.11404e+018
+223 114 7.11213e+018
+390 420 7.08812e+018
+105 198 7.08099e+018
+45 131 7.0539e+018
+201 21 7.04839e+018
+356 341 7.04004e+018
+221 339 7.02807e+018
+21 132 7.02507e+018
+215 425 7.01956e+018
+59 60 7.01797e+018
+524 172 7.0062e+018
+70 130 7.00263e+018
+146 452 6.99341e+018
+561 60 6.9926e+018
+220 151 6.97824e+018
+2 435 6.97494e+018
+259 161 6.9632e+018
+207 417 6.94948e+018
+447 351 6.94801e+018
+160 98 6.94348e+018
+466 102 6.93159e+018
+201 317 6.90707e+018
+166 117 6.90446e+018
+538 263 6.89402e+018
+431 275 6.89138e+018
+479 82 6.88833e+018
+293 334 6.88638e+018
+272 414 6.87593e+018
+11 83 6.8734e+018
+333 216 6.86471e+018
+320 119 6.86387e+018
+164 381 6.85305e+018
+575 98 6.85032e+018
+418 282 6.84463e+018
+366 259 6.82775e+018
+179 274 6.82331e+018
+149 231 6.81955e+018
+95 374 6.8177e+018
+377 461 6.80531e+018
+516 141 6.80262e+018
+65 363 6.80231e+018
+229 347 6.79181e+018
+189 107 6.77425e+018
+551 385 6.77041e+018
+438 378 6.76459e+018
+133 64 6.75719e+018
+509 361 6.74436e+018
+403 180 6.7414e+018
+494 455 6.72802e+018
+299 399 6.72669e+018
+475 255 6.72077e+018
+344 48 6.71746e+018
+213 62 6.71621e+018
+117 115 6.7138e+018
+447 136 6.70839e+018
+318 460 6.70832e+018
+395 23 6.69646e+018
+384 146 6.69106e+018
+164 202 6.68241e+018
+330 133 6.67926e+018
+278 263 6.67473e+018
+302 102 6.66324e+018
+504 260 6.63185e+018
+351 88 6.62605e+018
+34 112 6.62248e+018
+297 182 6.62052e+018
+52 12 6.61764e+018
+440 63 6.60759e+018
+569 202 6.59973e+018
+80 40 6.59278e+018
+570 183 6.5927e+018
+449 403 6.55931e+018
+168 422 6.55891e+018
+459 44 6.54808e+018
+7 116 6.54805e+018
+398 265 6.53997e+018
+106 77 6.53729e+018
+260 231 6.53563e+018
+67 474 6.53101e+018
+314 75 6.52896e+018
+446 376 6.52625e+018
+540 165 6.49975e+018
+509 2 6.49463e+018
+187 182 6.49164e+018
+84 289 6.49138e+018
+390 332 6.48138e+018
+339 427 6.47051e+018
+359 160 6.45957e+018
+272 241 6.44949e+018
+221 72 6.4471e+018
+260 272 6.43853e+018
+211 187 6.41113e+018
+393 222 6.40712e+018
+414 262 6.40597e+018
+233 296 6.40159e+018
+91 79 6.36267e+018
+102 42 6.34454e+018
+388 282 6.34326e+018
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_7_5.txt b/test_data/harriscorners/hc_msc_5.00_0.10_7_5.txt
new file mode 100644
index 0000000..f19ff14
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_7_5.txt
@@ -0,0 +1,843 @@
+842
+245 94 7.93833e+020
+273 365 6.16873e+020
+237 20 5.39745e+020
+261 297 5.06198e+020
+423 178 5.03014e+020
+362 401 4.91781e+020
+543 365 4.52516e+020
+27 9 4.41432e+020
+65 343 4.3046e+020
+281 113 4.27048e+020
+76 257 4.23405e+020
+465 393 3.94011e+020
+82 28 3.90413e+020
+131 26 3.88975e+020
+195 58 3.73473e+020
+37 62 3.6955e+020
+252 13 3.51471e+020
+59 218 3.44381e+020
+343 9 3.41501e+020
+320 224 3.29754e+020
+387 10 3.28647e+020
+448 297 3.24214e+020
+131 36 3.22908e+020
+427 320 3.17554e+020
+127 165 3.13923e+020
+360 295 3.03239e+020
+33 99 3.00169e+020
+200 17 2.99985e+020
+81 2 2.95783e+020
+239 91 2.9553e+020
+510 124 2.93241e+020
+447 397 2.87618e+020
+128 2 2.77759e+020
+418 439 2.773e+020
+552 40 2.67768e+020
+528 24 2.63392e+020
+452 339 2.62689e+020
+519 61 2.62595e+020
+358 260 2.61695e+020
+138 203 2.61145e+020
+484 338 2.60904e+020
+257 385 2.60368e+020
+448 262 2.59614e+020
+242 71 2.57961e+020
+153 223 2.57701e+020
+294 15 2.575e+020
+225 420 2.56769e+020
+387 178 2.52336e+020
+456 280 2.48661e+020
+122 43 2.47811e+020
+35 137 2.45925e+020
+263 441 2.44208e+020
+511 167 2.43027e+020
+302 185 2.38449e+020
+300 52 2.36035e+020
+513 341 2.35701e+020
+390 61 2.34325e+020
+124 198 2.30635e+020
+320 313 2.26042e+020
+101 222 2.26017e+020
+475 262 2.25174e+020
+181 111 2.21448e+020
+214 72 2.20348e+020
+138 110 2.19841e+020
+36 145 2.19228e+020
+214 55 2.12897e+020
+243 202 2.1218e+020
+183 400 2.11385e+020
+544 168 2.11351e+020
+433 112 2.09463e+020
+116 44 2.09286e+020
+356 220 2.08432e+020
+45 27 2.08064e+020
+483 178 2.06598e+020
+343 338 2.0451e+020
+325 341 2.03898e+020
+4 66 2.03043e+020
+134 214 2.02649e+020
+216 279 1.99103e+020
+102 59 1.98212e+020
+480 297 1.95933e+020
+533 184 1.94848e+020
+55 290 1.94617e+020
+302 215 1.93067e+020
+435 69 1.92385e+020
+361 131 1.92312e+020
+426 119 1.91986e+020
+177 106 1.91973e+020
+411 354 1.86562e+020
+222 39 1.85905e+020
+112 393 1.85688e+020
+55 29 1.85483e+020
+57 4 1.84723e+020
+125 364 1.83788e+020
+404 121 1.81888e+020
+283 403 1.81108e+020
+421 335 1.8055e+020
+142 324 1.80529e+020
+66 215 1.79499e+020
+390 295 1.78087e+020
+283 72 1.77944e+020
+338 12 1.76859e+020
+70 25 1.76428e+020
+371 162 1.76231e+020
+509 455 1.75504e+020
+144 310 1.74926e+020
+476 21 1.74646e+020
+123 185 1.74617e+020
+524 20 1.73203e+020
+125 254 1.72286e+020
+169 57 1.71867e+020
+425 377 1.71406e+020
+309 7 1.70975e+020
+461 279 1.70515e+020
+412 256 1.70388e+020
+308 372 1.70202e+020
+150 307 1.69764e+020
+234 346 1.69292e+020
+545 41 1.69235e+020
+261 165 1.68815e+020
+92 198 1.68411e+020
+365 143 1.67882e+020
+360 337 1.67649e+020
+86 255 1.66934e+020
+386 220 1.65449e+020
+391 144 1.64932e+020
+100 198 1.64102e+020
+207 450 1.64043e+020
+431 147 1.63523e+020
+163 214 1.62999e+020
+434 398 1.627e+020
+327 142 1.62461e+020
+351 321 1.61772e+020
+329 128 1.61714e+020
+579 16 1.61121e+020
+88 148 1.60012e+020
+13 218 1.59909e+020
+363 251 1.58919e+020
+167 286 1.58795e+020
+233 15 1.58777e+020
+510 173 1.58627e+020
+64 60 1.57037e+020
+36 173 1.566e+020
+75 6 1.54692e+020
+84 78 1.54198e+020
+60 41 1.53591e+020
+174 40 1.52756e+020
+301 165 1.52512e+020
+109 239 1.51748e+020
+54 66 1.51329e+020
+346 240 1.51181e+020
+261 222 1.51067e+020
+32 66 1.50631e+020
+64 236 1.50121e+020
+220 290 1.49923e+020
+252 423 1.49843e+020
+542 210 1.49771e+020
+417 23 1.49343e+020
+41 217 1.49255e+020
+567 43 1.47954e+020
+163 277 1.47931e+020
+139 173 1.47717e+020
+334 436 1.4714e+020
+403 187 1.46931e+020
+95 477 1.46347e+020
+62 203 1.46285e+020
+272 280 1.45941e+020
+439 339 1.45833e+020
+177 260 1.45415e+020
+168 197 1.45225e+020
+545 4 1.43884e+020
+545 59 1.43239e+020
+543 15 1.43069e+020
+57 183 1.43026e+020
+40 296 1.42921e+020
+527 99 1.42106e+020
+509 19 1.406e+020
+515 347 1.4007e+020
+342 263 1.39708e+020
+230 36 1.3968e+020
+408 182 1.39172e+020
+271 166 1.3866e+020
+300 265 1.37495e+020
+379 7 1.37411e+020
+348 179 1.37346e+020
+159 138 1.37309e+020
+210 435 1.36776e+020
+71 147 1.35355e+020
+42 339 1.34621e+020
+328 253 1.33166e+020
+490 139 1.32774e+020
+302 205 1.3249e+020
+453 206 1.31157e+020
+482 365 1.31041e+020
+276 352 1.30244e+020
+515 76 1.30061e+020
+541 124 1.2985e+020
+355 268 1.29771e+020
+96 447 1.29216e+020
+448 166 1.29016e+020
+246 145 1.28768e+020
+238 349 1.27946e+020
+395 261 1.27887e+020
+413 162 1.27626e+020
+386 243 1.2761e+020
+104 4 1.27387e+020
+470 239 1.27002e+020
+78 79 1.26576e+020
+497 81 1.26518e+020
+100 78 1.25947e+020
+58 364 1.25417e+020
+68 337 1.25117e+020
+221 16 1.24347e+020
+326 427 1.23728e+020
+525 38 1.23589e+020
+482 328 1.23374e+020
+471 421 1.23362e+020
+48 99 1.23059e+020
+410 65 1.22644e+020
+52 43 1.22363e+020
+123 272 1.22363e+020
+254 138 1.22302e+020
+65 319 1.21898e+020
+192 219 1.21199e+020
+512 262 1.21178e+020
+49 151 1.20956e+020
+212 182 1.20942e+020
+108 28 1.20404e+020
+10 102 1.20307e+020
+413 299 1.20222e+020
+345 350 1.1945e+020
+417 8 1.1921e+020
+249 364 1.18496e+020
+270 71 1.18357e+020
+345 108 1.18157e+020
+163 74 1.18148e+020
+2 47 1.17703e+020
+363 7 1.17622e+020
+311 150 1.17468e+020
+358 10 1.17263e+020
+406 198 1.16687e+020
+184 36 1.16523e+020
+478 16 1.16439e+020
+46 355 1.16296e+020
+225 182 1.16233e+020
+8 10 1.16035e+020
+313 84 1.15993e+020
+18 343 1.15407e+020
+170 18 1.1529e+020
+85 214 1.14855e+020
+164 327 1.1456e+020
+328 297 1.13674e+020
+480 260 1.13344e+020
+229 292 1.13092e+020
+377 119 1.12794e+020
+140 394 1.12787e+020
+234 162 1.12504e+020
+422 48 1.12338e+020
+365 105 1.11782e+020
+484 59 1.11525e+020
+106 39 1.11348e+020
+498 159 1.11124e+020
+50 12 1.11014e+020
+156 318 1.10993e+020
+361 221 1.10081e+020
+265 31 1.09035e+020
+512 296 1.07632e+020
+293 27 1.07552e+020
+92 292 1.07421e+020
+367 247 1.07368e+020
+449 445 1.07357e+020
+244 165 1.06913e+020
+102 359 1.06094e+020
+164 358 1.05631e+020
+471 212 1.05473e+020
+520 184 1.04811e+020
+350 145 1.04387e+020
+225 221 1.0436e+020
+113 345 1.04263e+020
+221 432 1.03929e+020
+508 5 1.03901e+020
+436 303 1.03883e+020
+452 377 1.03643e+020
+325 164 1.03617e+020
+249 403 1.03592e+020
+94 218 1.03541e+020
+449 219 1.03475e+020
+61 134 1.03456e+020
+371 90 1.0299e+020
+141 1 1.02913e+020
+523 123 1.02463e+020
+31 270 1.02251e+020
+474 5 1.02223e+020
+358 64 1.02131e+020
+278 222 1.01921e+020
+374 393 1.01682e+020
+108 45 1.0162e+020
+165 244 1.01598e+020
+135 129 1.01279e+020
+527 361 1.00731e+020
+298 69 1.00543e+020
+31 219 1.00194e+020
+105 198 1.0007e+020
+248 316 9.93434e+019
+329 12 9.89257e+019
+423 398 9.8906e+019
+512 99 9.83134e+019
+272 53 9.81461e+019
+210 445 9.77405e+019
+384 260 9.7347e+019
+46 82 9.72967e+019
+512 220 9.7136e+019
+537 393 9.68354e+019
+157 73 9.67172e+019
+70 476 9.66468e+019
+192 330 9.6393e+019
+245 294 9.58579e+019
+346 298 9.5536e+019
+275 329 9.511e+019
+126 76 9.49871e+019
+358 282 9.49026e+019
+84 476 9.47066e+019
+476 341 9.46303e+019
+166 97 9.41335e+019
+548 163 9.37306e+019
+77 41 9.3079e+019
+531 102 9.29291e+019
+562 146 9.28675e+019
+444 453 9.28287e+019
+71 96 9.27674e+019
+539 405 9.22603e+019
+140 22 9.21674e+019
+488 263 9.21325e+019
+403 265 9.20866e+019
+516 18 9.20494e+019
+393 66 9.20457e+019
+519 264 9.17022e+019
+207 224 9.15861e+019
+471 268 9.15215e+019
+550 378 9.1451e+019
+328 66 9.14058e+019
+525 423 9.12533e+019
+475 246 9.1189e+019
+109 96 9.08475e+019
+333 91 9.08138e+019
+456 84 9.06903e+019
+144 6 9.06738e+019
+489 43 9.05444e+019
+465 196 9.04791e+019
+584 38 9.02699e+019
+118 75 9.02457e+019
+57 373 9.00665e+019
+306 440 8.97486e+019
+220 100 8.96941e+019
+36 201 8.96864e+019
+498 225 8.94193e+019
+41 10 8.93829e+019
+278 144 8.9054e+019
+180 394 8.88592e+019
+542 132 8.87235e+019
+291 50 8.86264e+019
+23 61 8.78455e+019
+79 197 8.7587e+019
+138 98 8.73343e+019
+436 320 8.73066e+019
+186 289 8.72728e+019
+362 395 8.71743e+019
+530 144 8.66952e+019
+191 360 8.64792e+019
+120 447 8.64118e+019
+543 457 8.62426e+019
+378 66 8.61229e+019
+273 296 8.6044e+019
+221 177 8.59795e+019
+359 143 8.59091e+019
+279 128 8.58894e+019
+128 187 8.57621e+019
+187 264 8.57447e+019
+255 150 8.57291e+019
+65 371 8.56877e+019
+408 45 8.56079e+019
+209 20 8.55482e+019
+287 166 8.55134e+019
+471 83 8.47804e+019
+307 449 8.4404e+019
+463 40 8.4368e+019
+193 16 8.39178e+019
+463 23 8.39095e+019
+231 125 8.37665e+019
+571 450 8.36859e+019
+69 420 8.3625e+019
+59 75 8.30443e+019
+338 165 8.26388e+019
+286 297 8.25398e+019
+191 205 8.23054e+019
+393 216 8.21613e+019
+289 137 8.21493e+019
+44 62 8.20733e+019
+28 30 8.19242e+019
+449 437 8.12011e+019
+297 331 8.08252e+019
+87 208 8.07022e+019
+250 32 8.06533e+019
+541 99 8.06358e+019
+140 182 8.04016e+019
+258 161 8.03733e+019
+221 107 8.01682e+019
+37 287 7.99795e+019
+363 358 7.95189e+019
+565 160 7.93226e+019
+297 410 7.90397e+019
+82 135 7.89872e+019
+568 382 7.89531e+019
+259 35 7.88808e+019
+160 183 7.88526e+019
+432 275 7.86525e+019
+160 143 7.8597e+019
+444 119 7.8595e+019
+196 127 7.84312e+019
+127 96 7.77796e+019
+273 131 7.75006e+019
+328 89 7.73165e+019
+133 93 7.71117e+019
+514 382 7.70732e+019
+241 421 7.6795e+019
+154 114 7.67458e+019
+388 16 7.67273e+019
+405 375 7.66491e+019
+90 376 7.66306e+019
+469 140 7.65286e+019
+386 327 7.63425e+019
+162 111 7.61982e+019
+109 137 7.61619e+019
+336 391 7.6007e+019
+212 33 7.59784e+019
+130 476 7.59267e+019
+154 236 7.58574e+019
+166 312 7.5482e+019
+535 241 7.54362e+019
+220 150 7.52706e+019
+382 412 7.52186e+019
+525 186 7.51588e+019
+334 218 7.51012e+019
+182 380 7.49791e+019
+449 178 7.46652e+019
+215 175 7.44762e+019
+276 180 7.44021e+019
+393 164 7.43619e+019
+483 143 7.42479e+019
+432 269 7.4181e+019
+270 185 7.41617e+019
+163 168 7.41249e+019
+559 80 7.40476e+019
+526 346 7.40051e+019
+203 310 7.39797e+019
+118 425 7.3788e+019
+294 269 7.37174e+019
+472 42 7.34429e+019
+284 199 7.33816e+019
+502 143 7.32503e+019
+354 295 7.32156e+019
+435 281 7.32022e+019
+328 214 7.31324e+019
+202 315 7.28467e+019
+53 222 7.27618e+019
+173 116 7.26039e+019
+248 395 7.23583e+019
+135 21 7.23031e+019
+9 77 7.2298e+019
+163 208 7.22229e+019
+263 403 7.21539e+019
+245 14 7.19878e+019
+275 317 7.19106e+019
+393 48 7.18703e+019
+338 473 7.17214e+019
+191 146 7.16245e+019
+209 395 7.13355e+019
+347 393 7.12941e+019
+481 451 7.12731e+019
+491 59 7.09857e+019
+416 84 7.06482e+019
+364 181 7.05945e+019
+473 202 7.05398e+019
+205 160 7.03884e+019
+110 264 7.02264e+019
+381 26 7.01489e+019
+484 23 6.99373e+019
+107 429 6.99353e+019
+451 86 6.98804e+019
+259 71 6.96329e+019
+233 200 6.904e+019
+558 462 6.88409e+019
+281 419 6.87144e+019
+268 289 6.84499e+019
+297 182 6.84013e+019
+209 55 6.82455e+019
+341 122 6.82252e+019
+214 449 6.81832e+019
+527 222 6.81572e+019
+327 182 6.80718e+019
+109 169 6.78324e+019
+259 237 6.77557e+019
+264 311 6.76972e+019
+573 405 6.76025e+019
+178 94 6.73104e+019
+374 240 6.72473e+019
+157 40 6.71832e+019
+119 115 6.71358e+019
+108 183 6.70873e+019
+489 343 6.67973e+019
+130 72 6.66598e+019
+575 99 6.66479e+019
+429 223 6.66435e+019
+131 255 6.65871e+019
+318 460 6.645e+019
+83 72 6.6242e+019
+418 68 6.61895e+019
+261 368 6.61888e+019
+432 82 6.60789e+019
+180 164 6.59573e+019
+191 350 6.58608e+019
+504 361 6.58597e+019
+439 25 6.57269e+019
+514 120 6.57231e+019
+453 102 6.57024e+019
+39 355 6.56647e+019
+306 193 6.56128e+019
+359 53 6.52323e+019
+101 164 6.52241e+019
+345 277 6.52145e+019
+362 370 6.51085e+019
+445 8 6.49224e+019
+313 76 6.48183e+019
+190 312 6.47541e+019
+73 164 6.46419e+019
+283 395 6.46323e+019
+51 61 6.46302e+019
+398 168 6.45698e+019
+565 463 6.43749e+019
+576 179 6.43547e+019
+503 164 6.43515e+019
+333 258 6.40549e+019
+378 340 6.40109e+019
+306 362 6.39144e+019
+390 449 6.38642e+019
+120 54 6.38603e+019
+403 6 6.35565e+019
+93 255 6.34285e+019
+34 31 6.32052e+019
+191 189 6.31829e+019
+29 135 6.31063e+019
+186 19 6.29728e+019
+246 206 6.28984e+019
+86 311 6.28095e+019
+345 48 6.26434e+019
+287 210 6.25814e+019
+569 422 6.25782e+019
+437 466 6.25473e+019
+418 283 6.23954e+019
+379 352 6.22798e+019
+355 255 6.22798e+019
+143 17 6.21973e+019
+113 213 6.2082e+019
+147 98 6.20811e+019
+277 371 6.20756e+019
+332 201 6.19752e+019
+473 63 6.1602e+019
+356 341 6.13098e+019
+597 272 6.12876e+019
+196 194 6.12863e+019
+282 135 6.12608e+019
+454 115 6.12579e+019
+479 402 6.11171e+019
+439 378 6.10914e+019
+38 168 6.10577e+019
+174 239 6.06974e+019
+289 349 6.06834e+019
+517 42 6.05383e+019
+459 266 6.04736e+019
+50 453 6.03793e+019
+413 4 6.03449e+019
+10 47 6.03392e+019
+95 20 6.03347e+019
+578 43 6.03264e+019
+166 117 6.03247e+019
+114 3 6.02935e+019
+181 292 6.02894e+019
+246 106 6.02041e+019
+576 38 6.01353e+019
+570 182 6.01161e+019
+179 329 6.00963e+019
+280 50 6.0015e+019
+338 63 5.99321e+019
+434 159 5.99286e+019
+561 320 5.98814e+019
+375 4 5.97714e+019
+275 197 5.96027e+019
+500 265 5.93854e+019
+536 459 5.93731e+019
+18 236 5.93065e+019
+133 148 5.92126e+019
+511 83 5.91851e+019
+267 20 5.89898e+019
+71 409 5.89215e+019
+156 195 5.86789e+019
+321 10 5.86399e+019
+92 59 5.86018e+019
+88 369 5.82259e+019
+441 240 5.82065e+019
+147 21 5.81303e+019
+574 459 5.81294e+019
+389 97 5.80934e+019
+532 398 5.80705e+019
+404 13 5.78353e+019
+274 215 5.77481e+019
+249 219 5.76817e+019
+129 238 5.75857e+019
+111 111 5.75595e+019
+156 55 5.74684e+019
+367 303 5.74579e+019
+177 18 5.73905e+019
+291 264 5.73749e+019
+433 240 5.73013e+019
+211 12 5.72976e+019
+380 180 5.71178e+019
+156 94 5.69137e+019
+264 201 5.68702e+019
+433 381 5.6851e+019
+319 186 5.66561e+019
+48 256 5.64316e+019
+430 89 5.64141e+019
+16 434 5.63148e+019
+161 20 5.62988e+019
+95 94 5.6141e+019
+578 52 5.61026e+019
+538 186 5.59928e+019
+187 99 5.59231e+019
+505 381 5.59028e+019
+107 76 5.58629e+019
+198 111 5.58521e+019
+445 114 5.579e+019
+450 22 5.57851e+019
+214 124 5.56888e+019
+525 173 5.55818e+019
+538 263 5.55681e+019
+23 321 5.55382e+019
+191 123 5.54876e+019
+344 198 5.54843e+019
+493 181 5.54545e+019
+599 364 5.53374e+019
+455 178 5.53015e+019
+39 83 5.51572e+019
+402 45 5.49859e+019
+70 129 5.49385e+019
+297 420 5.46939e+019
+174 312 5.45871e+019
+44 407 5.44941e+019
+95 5 5.44233e+019
+236 222 5.43852e+019
+243 31 5.43337e+019
+79 474 5.42744e+019
+217 146 5.41445e+019
+86 63 5.40726e+019
+220 317 5.38516e+019
+224 398 5.38214e+019
+536 103 5.36791e+019
+395 104 5.34956e+019
+146 162 5.34912e+019
+58 254 5.34613e+019
+451 63 5.34037e+019
+184 94 5.33609e+019
+513 402 5.33585e+019
+485 5 5.33375e+019
+482 440 5.32786e+019
+148 397 5.31098e+019
+544 218 5.30533e+019
+261 286 5.29612e+019
+447 350 5.29595e+019
+449 118 5.29448e+019
+406 80 5.28882e+019
+459 304 5.26421e+019
+90 275 5.25255e+019
+183 316 5.23457e+019
+181 344 5.23104e+019
+41 137 5.22833e+019
+103 392 5.21784e+019
+269 66 5.20988e+019
+242 190 5.20478e+019
+433 43 5.20193e+019
+79 271 5.20184e+019
+364 257 5.1932e+019
+107 107 5.1874e+019
+367 337 5.16783e+019
+299 398 5.16299e+019
+500 318 5.12377e+019
+254 77 5.11788e+019
+220 339 5.10338e+019
+470 121 5.10179e+019
+592 18 5.0837e+019
+233 295 5.08078e+019
+136 179 5.07769e+019
+21 132 5.06177e+019
+350 87 5.04758e+019
+129 310 5.02697e+019
+165 180 5.02438e+019
+103 259 5.01905e+019
+394 23 5.01029e+019
+47 132 5.00439e+019
+460 44 4.99666e+019
+86 363 4.99198e+019
+67 304 4.98427e+019
+506 203 4.97779e+019
+324 259 4.97282e+019
+333 412 4.97217e+019
+217 208 4.97165e+019
+29 236 4.9683e+019
+528 159 4.92939e+019
+255 405 4.92373e+019
+96 37 4.91168e+019
+257 391 4.9061e+019
+560 272 4.89826e+019
+445 204 4.8956e+019
+187 308 4.89417e+019
+317 453 4.89369e+019
+301 106 4.89228e+019
+243 281 4.8799e+019
+20 317 4.87714e+019
+398 357 4.87601e+019
+44 474 4.87243e+019
+387 126 4.86967e+019
+197 148 4.85305e+019
+572 326 4.84646e+019
+204 435 4.84534e+019
+255 108 4.84376e+019
+292 311 4.83851e+019
+203 293 4.83568e+019
+257 131 4.82644e+019
+49 235 4.81724e+019
+342 141 4.80527e+019
+387 3 4.80419e+019
+274 77 4.79842e+019
+358 241 4.77565e+019
+257 250 4.76841e+019
+274 205 4.75031e+019
+579 85 4.74905e+019
+56 171 4.74674e+019
+33 111 4.74128e+019
+497 463 4.73769e+019
+74 186 4.70505e+019
+172 450 4.70224e+019
+46 220 4.6861e+019
+225 50 4.67924e+019
+384 146 4.67697e+019
+138 139 4.67591e+019
+543 443 4.66627e+019
+569 203 4.66567e+019
+255 182 4.65128e+019
+486 376 4.64763e+019
+279 86 4.64037e+019
+332 333 4.63599e+019
+525 400 4.6288e+019
+222 115 4.62848e+019
+288 396 4.62726e+019
+101 235 4.61136e+019
+480 83 4.6099e+019
+410 263 4.60576e+019
+314 448 4.60318e+019
+104 306 4.59421e+019
+156 445 4.57018e+019
+165 379 4.56016e+019
+421 299 4.54823e+019
+95 374 4.54521e+019
+202 220 4.53838e+019
+347 342 4.52798e+019
+511 43 4.52778e+019
+382 337 4.52686e+019
+2 435 4.51461e+019
+156 78 4.51328e+019
+9 476 4.51146e+019
+456 161 4.50369e+019
+11 126 4.48468e+019
+462 221 4.48305e+019
+88 183 4.4829e+019
+500 474 4.47239e+019
+221 72 4.47097e+019
+550 223 4.45632e+019
+298 274 4.44934e+019
+116 360 4.44848e+019
+444 126 4.44455e+019
+336 317 4.43663e+019
+412 245 4.43146e+019
+214 93 4.42701e+019
+262 396 4.40205e+019
+195 83 4.39963e+019
+66 252 4.39632e+019
+434 225 4.39618e+019
+265 15 4.38888e+019
+387 283 4.38303e+019
+232 177 4.38208e+019
+200 330 4.38108e+019
+370 106 4.37545e+019
+404 143 4.36591e+019
+465 161 4.3488e+019
+329 354 4.34869e+019
+116 306 4.34602e+019
+448 136 4.34185e+019
+291 89 4.33946e+019
+507 60 4.33697e+019
+149 132 4.33572e+019
+298 86 4.3226e+019
+254 4 4.31528e+019
+385 162 4.3152e+019
+125 261 4.287e+019
+100 95 4.28409e+019
+143 449 4.27059e+019
+151 317 4.27001e+019
+8 235 4.25714e+019
+150 231 4.25568e+019
+547 139 4.25424e+019
+467 28 4.24659e+019
+203 258 4.24565e+019
+504 259 4.22057e+019
+157 306 4.21371e+019
+580 245 4.20439e+019
+167 291 4.20391e+019
+312 299 4.19839e+019
+562 72 4.192e+019
+75 132 4.18392e+019
+382 320 4.18273e+019
+581 445 4.18264e+019
+287 33 4.17971e+019
+365 165 4.17175e+019
+84 170 4.16516e+019
+168 150 4.1627e+019
+23 48 4.14673e+019
+252 163 4.14609e+019
+163 253 4.13896e+019
+561 227 4.13486e+019
+538 94 4.13425e+019
+441 98 4.13088e+019
+379 106 4.11937e+019
+411 418 4.116e+019
diff --git a/test_data/harriscorners/hc_msc_5.00_0.10_7_7.txt b/test_data/harriscorners/hc_msc_5.00_0.10_7_7.txt
new file mode 100644
index 0000000..c7c9fab
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.10_7_7.txt
@@ -0,0 +1,914 @@
+913
+245 94 2.23905e+021
+81 29 1.94901e+021
+130 26 1.74076e+021
+237 20 1.65854e+021
+421 180 1.49323e+021
+261 298 1.35648e+021
+26 9 1.21566e+021
+272 366 1.20353e+021
+195 58 1.12412e+021
+76 257 1.11254e+021
+81 4 1.05874e+021
+543 365 1.02632e+021
+130 37 1.00977e+021
+525 24 9.99859e+020
+37 63 9.79255e+020
+282 113 9.74533e+020
+152 223 9.60171e+020
+510 124 9.51656e+020
+65 344 9.34467e+020
+385 10 9.23402e+020
+240 92 9.06272e+020
+343 9 9.01463e+020
+253 12 8.69899e+020
+363 400 8.39108e+020
+424 322 8.1715e+020
+483 178 7.95869e+020
+214 57 7.8905e+020
+77 1 7.84171e+020
+542 14 7.79818e+020
+476 262 7.77446e+020
+485 338 7.77262e+020
+127 165 7.72098e+020
+302 185 7.6577e+020
+138 204 7.61183e+020
+102 222 7.48982e+020
+128 1 7.44245e+020
+361 395 7.35875e+020
+12 218 7.32633e+020
+34 139 7.26751e+020
+257 385 7.23681e+020
+55 30 7.23659e+020
+60 217 7.20979e+020
+357 259 7.20897e+020
+464 393 7.20489e+020
+359 294 7.18986e+020
+33 100 7.15869e+020
+60 40 7.11748e+020
+293 16 7.08559e+020
+451 339 7.04368e+020
+175 110 6.98635e+020
+199 18 6.97467e+020
+121 43 6.9434e+020
+320 225 6.91753e+020
+320 314 6.84618e+020
+299 53 6.82309e+020
+391 294 6.80906e+020
+458 279 6.80759e+020
+519 60 6.79072e+020
+418 438 6.67935e+020
+428 2 6.60889e+020
+241 70 6.50396e+020
+447 261 6.49869e+020
+330 128 6.42916e+020
+226 36 6.39733e+020
+528 20 6.38086e+020
+512 342 6.34358e+020
+434 112 6.19958e+020
+163 215 6.01009e+020
+328 296 5.92684e+020
+83 77 5.92547e+020
+389 60 5.91158e+020
+359 334 5.9048e+020
+310 6 5.86889e+020
+210 450 5.83259e+020
+224 420 5.78007e+020
+55 290 5.76472e+020
+403 121 5.7631e+020
+359 220 5.62752e+020
+533 185 5.62184e+020
+448 299 5.56231e+020
+554 40 5.55595e+020
+36 145 5.54785e+020
+115 43 5.5208e+020
+359 129 5.50027e+020
+511 169 5.48688e+020
+405 183 5.4578e+020
+263 442 5.4304e+020
+43 26 5.42649e+020
+182 398 5.40576e+020
+145 6 5.40486e+020
+476 21 5.38215e+020
+272 280 5.26306e+020
+100 198 5.25474e+020
+61 203 5.22158e+020
+511 19 5.20709e+020
+580 16 5.19542e+020
+470 422 5.14656e+020
+342 264 5.12642e+020
+337 12 5.10272e+020
+103 60 5.08843e+020
+364 251 5.07824e+020
+123 186 5.07344e+020
+139 109 5.05762e+020
+325 341 5.03057e+020
+427 118 5.01875e+020
+284 402 5.01282e+020
+449 204 4.93976e+020
+423 332 4.924e+020
+399 263 4.91906e+020
+85 148 4.91857e+020
+386 178 4.91392e+020
+302 215 4.91092e+020
+410 353 4.89393e+020
+528 186 4.89118e+020
+364 143 4.87368e+020
+490 139 4.85272e+020
+150 306 4.82739e+020
+436 397 4.8251e+020
+232 125 4.82054e+020
+327 141 4.79797e+020
+87 254 4.78881e+020
+248 399 4.7858e+020
+436 68 4.76904e+020
+243 202 4.75498e+020
+66 216 4.68328e+020
+126 254 4.68323e+020
+196 127 4.67936e+020
+36 173 4.66421e+020
+528 102 4.6211e+020
+390 143 4.60088e+020
+352 321 4.59891e+020
+345 339 4.59398e+020
+447 397 4.58035e+020
+48 26 4.56621e+020
+3 65 4.5624e+020
+174 40 4.56063e+020
+513 262 4.56026e+020
+301 205 4.55854e+020
+143 324 4.54798e+020
+159 75 4.51806e+020
+387 220 4.51034e+020
+112 392 4.50994e+020
+545 59 4.50954e+020
+211 436 4.49396e+020
+329 258 4.49015e+020
+64 318 4.44993e+020
+432 276 4.40707e+020
+69 476 4.40382e+020
+222 433 4.3906e+020
+135 213 4.38158e+020
+448 166 4.37743e+020
+380 6 4.3424e+020
+165 327 4.32765e+020
+546 41 4.31911e+020
+444 118 4.30864e+020
+41 217 4.29821e+020
+416 9 4.28919e+020
+302 165 4.27403e+020
+415 22 4.26694e+020
+96 477 4.25931e+020
+259 165 4.25687e+020
+509 454 4.25484e+020
+544 168 4.23755e+020
+165 182 4.23116e+020
+57 4 4.23036e+020
+104 3 4.23015e+020
+211 185 4.22781e+020
+70 25 4.20699e+020
+107 43 4.16285e+020
+562 461 4.16043e+020
+215 280 4.14565e+020
+109 240 4.13148e+020
+168 196 4.12186e+020
+479 15 4.12037e+020
+47 98 4.10338e+020
+128 187 4.08006e+020
+4 45 4.07439e+020
+49 151 4.06762e+020
+252 424 4.06246e+020
+413 256 4.06034e+020
+389 21 4.04433e+020
+218 105 4.03357e+020
+45 339 4.02924e+020
+215 71 4.00479e+020
+76 40 3.98185e+020
+42 63 3.95314e+020
+40 296 3.94481e+020
+545 3 3.93616e+020
+225 181 3.92397e+020
+129 74 3.92324e+020
+143 311 3.90784e+020
+256 151 3.90637e+020
+437 304 3.90078e+020
+169 56 3.86295e+020
+313 148 3.85866e+020
+541 124 3.84231e+020
+500 159 3.82174e+020
+209 21 3.82107e+020
+62 60 3.79181e+020
+176 260 3.77985e+020
+235 346 3.76178e+020
+346 240 3.76049e+020
+123 197 3.73433e+020
+371 161 3.72794e+020
+246 144 3.72407e+020
+293 26 3.71598e+020
+272 316 3.71096e+020
+453 207 3.70509e+020
+506 16 3.70465e+020
+54 66 3.70412e+020
+344 108 3.69282e+020
+479 296 3.68434e+020
+7 10 3.65492e+020
+32 270 3.65171e+020
+544 457 3.61496e+020
+548 162 3.60139e+020
+107 29 3.59292e+020
+451 374 3.58157e+020
+136 173 3.55156e+020
+298 181 3.55109e+020
+335 436 3.54853e+020
+59 184 3.54505e+020
+498 225 3.54395e+020
+404 188 3.54154e+020
+218 98 3.53499e+020
+412 298 3.52768e+020
+407 198 3.52223e+020
+221 37 3.51443e+020
+517 20 3.50536e+020
+52 42 3.49786e+020
+377 120 3.49516e+020
+430 148 3.48719e+020
+365 105 3.47933e+020
+125 364 3.47528e+020
+488 44 3.47514e+020
+261 223 3.46431e+020
+566 42 3.4602e+020
+168 286 3.45963e+020
+510 129 3.45621e+020
+282 72 3.4487e+020
+140 19 3.44615e+020
+313 84 3.42675e+020
+111 110 3.42388e+020
+25 62 3.4214e+020
+512 221 3.41889e+020
+345 350 3.40856e+020
+278 220 3.4075e+020
+103 77 3.40213e+020
+102 360 3.3877e+020
+557 463 3.37973e+020
+389 164 3.37638e+020
+394 65 3.37243e+020
+185 36 3.36533e+020
+329 13 3.36435e+020
+220 180 3.36279e+020
+134 96 3.36029e+020
+462 42 3.35877e+020
+46 355 3.29975e+020
+392 218 3.29967e+020
+210 35 3.2898e+020
+263 402 3.26687e+020
+388 16 3.26481e+020
+165 357 3.26251e+020
+525 38 3.25915e+020
+256 139 3.24482e+020
+164 73 3.24248e+020
+483 329 3.24016e+020
+463 280 3.23582e+020
+193 218 3.22435e+020
+163 277 3.21959e+020
+448 444 3.21e+020
+57 365 3.19785e+020
+300 264 3.17566e+020
+309 371 3.16411e+020
+358 66 3.16303e+020
+96 448 3.16098e+020
+446 8 3.15107e+020
+507 6 3.14909e+020
+186 289 3.14667e+020
+153 195 3.13132e+020
+470 238 3.12393e+020
+48 12 3.12139e+020
+166 110 3.11165e+020
+63 236 3.11113e+020
+228 291 3.10444e+020
+91 199 3.10413e+020
+362 7 3.08665e+020
+134 131 3.0838e+020
+220 290 3.06138e+020
+265 30 3.06047e+020
+248 316 3.03128e+020
+333 66 3.00625e+020
+297 69 2.99924e+020
+423 49 2.99543e+020
+449 117 2.99506e+020
+486 58 2.98863e+020
+164 313 2.9849e+020
+386 244 2.97441e+020
+409 64 2.96482e+020
+52 99 2.96138e+020
+436 379 2.95301e+020
+386 294 2.95184e+020
+482 364 2.94721e+020
+437 319 2.93527e+020
+305 439 2.93419e+020
+88 216 2.9323e+020
+207 222 2.93104e+020
+137 178 2.92914e+020
+54 222 2.92274e+020
+521 184 2.92188e+020
+452 62 2.92105e+020
+160 139 2.91805e+020
+88 207 2.91607e+020
+575 459 2.9148e+020
+304 190 2.89213e+020
+119 115 2.89106e+020
+284 198 2.88673e+020
+473 5 2.88632e+020
+276 353 2.88599e+020
+245 207 2.8768e+020
+448 438 2.86301e+020
+29 30 2.85699e+020
+474 247 2.84932e+020
+512 100 2.84777e+020
+413 162 2.84742e+020
+243 166 2.83618e+020
+552 378 2.8357e+020
+60 134 2.83322e+020
+348 181 2.83286e+020
+144 16 2.82955e+020
+404 266 2.82088e+020
+47 81 2.81016e+020
+169 18 2.80254e+020
+463 27 2.77654e+020
+190 360 2.77438e+020
+325 426 2.76134e+020
+270 73 2.75943e+020
+249 365 2.74009e+020
+190 350 2.72743e+020
+88 368 2.70827e+020
+165 242 2.70721e+020
+112 344 2.70313e+020
+295 269 2.69057e+020
+301 105 2.68784e+020
+155 317 2.68218e+020
+70 148 2.67646e+020
+329 90 2.67544e+020
+538 406 2.67067e+020
+439 339 2.66676e+020
+233 13 2.65361e+020
+414 65 2.65313e+020
+343 122 2.64061e+020
+92 254 2.63965e+020
+530 144 2.62733e+020
+223 218 2.62613e+020
+273 181 2.62469e+020
+575 13 2.62188e+020
+426 378 2.62002e+020
+484 142 2.61764e+020
+450 87 2.60555e+020
+346 298 2.60319e+020
+271 167 2.59101e+020
+571 446 2.5849e+020
+110 95 2.57385e+020
+165 98 2.57039e+020
+402 44 2.56719e+020
+455 58 2.56331e+020
+493 81 2.56266e+020
+335 218 2.55929e+020
+110 169 2.55219e+020
+155 235 2.53935e+020
+110 179 2.53774e+020
+373 392 2.53681e+020
+124 271 2.53183e+020
+117 426 2.5173e+020
+542 209 2.5173e+020
+448 218 2.5168e+020
+296 332 2.51666e+020
+279 129 2.50284e+020
+107 429 2.49684e+020
+445 123 2.49232e+020
+503 164 2.47528e+020
+234 161 2.47146e+020
+471 212 2.47124e+020
+276 331 2.46608e+020
+394 164 2.45914e+020
+457 42 2.45369e+020
+86 311 2.45187e+020
+431 319 2.45174e+020
+472 266 2.45092e+020
+83 134 2.44955e+020
+490 2 2.43673e+020
+407 45 2.43187e+020
+125 259 2.42845e+020
+384 260 2.42744e+020
+455 85 2.41779e+020
+389 66 2.40815e+020
+377 67 2.39897e+020
+354 268 2.39482e+020
+421 298 2.39201e+020
+433 158 2.39124e+020
+412 44 2.38107e+020
+56 78 2.37542e+020
+578 43 2.36626e+020
+35 31 2.35992e+020
+190 312 2.35789e+020
+510 174 2.34966e+020
+142 393 2.34554e+020
+193 16 2.33441e+020
+280 365 2.33219e+020
+68 419 2.33123e+020
+162 169 2.32655e+020
+283 395 2.32352e+020
+538 97 2.31042e+020
+287 211 2.30421e+020
+93 216 2.29276e+020
+119 447 2.28586e+020
+83 475 2.28543e+020
+431 81 2.28247e+020
+159 182 2.27878e+020
+498 81 2.27388e+020
+159 144 2.27241e+020
+468 139 2.27191e+020
+9 102 2.26757e+020
+217 147 2.26423e+020
+465 196 2.26233e+020
+227 186 2.25708e+020
+270 53 2.25691e+020
+487 263 2.25389e+020
+357 11 2.24852e+020
+342 47 2.2459e+020
+164 209 2.24213e+020
+473 203 2.23007e+020
+385 326 2.2226e+020
+353 294 2.2186e+020
+523 123 2.20992e+020
+367 301 2.20953e+020
+392 49 2.20673e+020
+357 282 2.20597e+020
+454 116 2.20538e+020
+70 96 2.20006e+020
+349 146 2.19577e+020
+345 276 2.19206e+020
+378 337 2.1918e+020
+339 166 2.18741e+020
+529 400 2.18614e+020
+244 293 2.18166e+020
+78 198 2.18097e+020
+190 206 2.17691e+020
+418 82 2.1738e+020
+330 213 2.17355e+020
+221 14 2.17093e+020
+10 78 2.17076e+020
+155 56 2.16827e+020
+41 81 2.16467e+020
+333 202 2.1631e+020
+574 178 2.16241e+020
+175 20 2.16042e+020
+289 139 2.15441e+020
+274 132 2.14751e+020
+118 76 2.14337e+020
+241 421 2.13622e+020
+119 130 2.13435e+020
+217 425 2.13204e+020
+33 219 2.12884e+020
+259 34 2.12728e+020
+516 74 2.12631e+020
+86 61 2.12411e+020
+145 161 2.1234e+020
+570 451 2.11937e+020
+569 382 2.11356e+020
+126 96 2.11014e+020
+524 426 2.10493e+020
+521 264 2.09068e+020
+196 190 2.08811e+020
+269 186 2.08522e+020
+50 288 2.07638e+020
+191 292 2.07617e+020
+528 363 2.07119e+020
+139 99 2.06621e+020
+424 399 2.06065e+020
+91 290 2.06058e+020
+292 88 2.0601e+020
+295 421 2.05626e+020
+167 105 2.0517e+020
+151 1 2.04647e+020
+260 236 2.04583e+020
+541 133 2.03692e+020
+444 451 2.03262e+020
+163 62 2.0295e+020
+291 50 2.02838e+020
+18 343 2.02527e+020
+476 341 2.01539e+020
+155 112 2.01458e+020
+273 219 2.00483e+020
+516 42 2.00169e+020
+202 313 1.99079e+020
+482 451 1.98735e+020
+270 290 1.9803e+020
+205 309 1.97048e+020
+157 198 1.9694e+020
+437 240 1.96387e+020
+577 245 1.96329e+020
+109 2 1.96038e+020
+419 66 1.95861e+020
+468 208 1.954e+020
+92 445 1.95219e+020
+298 274 1.95046e+020
+231 199 1.93904e+020
+437 280 1.93715e+020
+110 136 1.9368e+020
+571 406 1.93325e+020
+547 139 1.9289e+020
+192 144 1.9284e+020
+58 254 1.9228e+020
+337 264 1.92017e+020
+247 219 1.91725e+020
+441 24 1.91401e+020
+104 307 1.91183e+020
+214 94 1.90354e+020
+182 343 1.89588e+020
+221 151 1.89455e+020
+196 255 1.89137e+020
+465 424 1.88409e+020
+72 165 1.88275e+020
+272 285 1.88196e+020
+459 264 1.88164e+020
+470 121 1.88134e+020
+325 165 1.88085e+020
+154 295 1.88058e+020
+75 475 1.87977e+020
+53 13 1.87551e+020
+273 295 1.87284e+020
+528 222 1.87144e+020
+61 370 1.87089e+020
+319 187 1.86751e+020
+265 311 1.86459e+020
+356 338 1.8644e+020
+405 376 1.86365e+020
+337 62 1.85717e+020
+583 38 1.85456e+020
+371 90 1.84929e+020
+91 60 1.84742e+020
+438 467 1.84683e+020
+196 132 1.84627e+020
+563 323 1.8458e+020
+57 373 1.84569e+020
+206 435 1.84425e+020
+241 195 1.84136e+020
+86 363 1.84013e+020
+562 145 1.83937e+020
+186 20 1.83378e+020
+363 357 1.83181e+020
+90 375 1.82391e+020
+280 136 1.82079e+020
+514 119 1.82036e+020
+174 92 1.8136e+020
+318 459 1.80976e+020
+514 381 1.80905e+020
+380 107 1.79762e+020
+265 16 1.7958e+020
+374 3 1.79313e+020
+418 283 1.78888e+020
+103 237 1.78829e+020
+185 132 1.7815e+020
+33 110 1.77899e+020
+280 204 1.77844e+020
+328 181 1.77797e+020
+377 182 1.77674e+020
+512 297 1.77627e+020
+110 262 1.77581e+020
+482 440 1.77294e+020
+48 234 1.77177e+020
+222 113 1.77134e+020
+174 312 1.76482e+020
+102 164 1.76292e+020
+279 52 1.76097e+020
+287 165 1.7603e+020
+262 285 1.75963e+020
+130 478 1.75946e+020
+481 84 1.75334e+020
+167 116 1.75308e+020
+281 438 1.74837e+020
+527 347 1.74618e+020
+191 329 1.74005e+020
+364 180 1.73817e+020
+357 166 1.73387e+020
+282 419 1.73154e+020
+575 100 1.72744e+020
+157 218 1.72742e+020
+157 91 1.72653e+020
+537 393 1.72609e+020
+453 102 1.72587e+020
+228 130 1.72519e+020
+22 48 1.7244e+020
+306 449 1.724e+020
+9 234 1.72275e+020
+569 422 1.72174e+020
+134 147 1.71951e+020
+178 330 1.71363e+020
+278 144 1.71165e+020
+440 456 1.70459e+020
+504 261 1.69763e+020
+41 355 1.69508e+020
+313 76 1.69301e+020
+512 81 1.69201e+020
+216 175 1.68923e+020
+91 276 1.68826e+020
+359 53 1.68609e+020
+187 265 1.67699e+020
+574 421 1.67509e+020
+524 399 1.67038e+020
+186 95 1.66493e+020
+432 270 1.66191e+020
+494 158 1.66143e+020
+191 189 1.65762e+020
+83 171 1.65701e+020
+55 145 1.65105e+020
+137 136 1.64798e+020
+537 262 1.64588e+020
+282 268 1.64538e+020
+276 320 1.64519e+020
+178 273 1.63951e+020
+456 177 1.6386e+020
+455 162 1.6341e+020
+39 287 1.62564e+020
+150 112 1.62203e+020
+413 246 1.6207e+020
+567 180 1.61933e+020
+564 160 1.61161e+020
+494 58 1.60589e+020
+151 232 1.603e+020
+70 130 1.59129e+020
+389 53 1.59121e+020
+17 434 1.59101e+020
+229 282 1.58735e+020
+227 112 1.5842e+020
+162 119 1.58267e+020
+506 361 1.58265e+020
+261 200 1.58101e+020
+478 243 1.58039e+020
+405 11 1.57975e+020
+146 449 1.57715e+020
+376 355 1.57657e+020
+179 164 1.57565e+020
+362 244 1.57208e+020
+351 273 1.57181e+020
+498 463 1.5694e+020
+471 83 1.56837e+020
+292 335 1.56776e+020
+325 132 1.56757e+020
+343 141 1.56651e+020
+209 395 1.56158e+020
+208 14 1.55768e+020
+405 80 1.55689e+020
+343 200 1.55308e+020
+525 173 1.55146e+020
+120 54 1.54602e+020
+298 87 1.54417e+020
+85 40 1.54237e+020
+20 316 1.54147e+020
+132 237 1.54146e+020
+242 33 1.53903e+020
+386 4 1.53463e+020
+340 391 1.53454e+020
+261 369 1.53296e+020
+220 315 1.5295e+020
+256 220 1.52925e+020
+195 84 1.52875e+020
+450 180 1.52679e+020
+327 64 1.52522e+020
+36 200 1.52443e+020
+28 136 1.52396e+020
+173 240 1.52014e+020
+561 226 1.51735e+020
+450 140 1.51676e+020
+306 259 1.5164e+020
+366 164 1.51547e+020
+387 127 1.51524e+020
+591 19 1.51183e+020
+332 413 1.51085e+020
+597 364 1.5085e+020
+298 410 1.50768e+020
+124 126 1.50594e+020
+302 333 1.50114e+020
+503 143 1.49619e+020
+65 182 1.49251e+020
+543 162 1.48823e+020
+204 161 1.48787e+020
+33 164 1.48443e+020
+528 431 1.48176e+020
+98 257 1.48172e+020
+493 340 1.48171e+020
+285 298 1.48015e+020
+497 66 1.4797e+020
+160 21 1.47932e+020
+499 266 1.47762e+020
+215 124 1.47617e+020
+433 44 1.47411e+020
+325 221 1.47298e+020
+226 198 1.46953e+020
+360 369 1.46844e+020
+479 286 1.46643e+020
+335 390 1.46283e+020
+258 392 1.46127e+020
+188 278 1.45428e+020
+417 165 1.44548e+020
+473 41 1.44389e+020
+291 262 1.44252e+020
+319 166 1.44047e+020
+148 226 1.43969e+020
+483 25 1.43661e+020
+324 15 1.43519e+020
+501 362 1.43466e+020
+220 212 1.42925e+020
+514 203 1.42919e+020
+576 330 1.42832e+020
+400 168 1.42396e+020
+156 40 1.42375e+020
+468 28 1.41968e+020
+242 281 1.41946e+020
+67 254 1.41551e+020
+275 204 1.40847e+020
+257 133 1.40715e+020
+198 111 1.40511e+020
+580 345 1.40445e+020
+339 473 1.404e+020
+501 320 1.40388e+020
+502 460 1.40124e+020
+487 375 1.39983e+020
+250 34 1.399e+020
+188 109 1.39554e+020
+330 26 1.39269e+020
+333 331 1.3922e+020
+382 102 1.39202e+020
+335 408 1.39147e+020
+418 449 1.39065e+020
+240 155 1.39028e+020
+544 440 1.38828e+020
+242 190 1.38757e+020
+77 163 1.3866e+020
+366 336 1.38312e+020
+20 286 1.37518e+020
+77 271 1.37392e+020
+225 397 1.37316e+020
+215 289 1.36542e+020
+237 416 1.36458e+020
+255 107 1.36269e+020
+179 379 1.36229e+020
+509 57 1.3617e+020
+53 360 1.36117e+020
+479 403 1.35901e+020
+513 442 1.35437e+020
+447 351 1.35425e+020
+191 122 1.35336e+020
+1 156 1.34937e+020
+541 248 1.34813e+020
+502 22 1.34692e+020
+9 32 1.34111e+020
+321 11 1.33932e+020
+547 218 1.33731e+020
+168 433 1.33496e+020
+485 6 1.33078e+020
+559 80 1.32821e+020
+572 326 1.32648e+020
+382 320 1.32623e+020
+329 354 1.326e+020
+247 105 1.32508e+020
+56 170 1.32491e+020
+422 165 1.32396e+020
+390 123 1.32261e+020
+180 155 1.32252e+020
+372 83 1.31877e+020
+593 425 1.31667e+020
+533 397 1.31614e+020
+51 453 1.31453e+020
+250 150 1.31247e+020
+254 78 1.30989e+020
+390 118 1.30933e+020
+261 140 1.30911e+020
+31 235 1.3069e+020
+78 133 1.30589e+020
+298 25 1.30539e+020
+165 379 1.30376e+020
+226 123 1.30271e+020
+298 398 1.30178e+020
+89 181 1.29979e+020
+222 72 1.29885e+020
+459 376 1.2933e+020
+307 428 1.29313e+020
+163 252 1.29186e+020
+71 408 1.29065e+020
+147 97 1.28689e+020
+523 77 1.28518e+020
+311 299 1.28363e+020
+97 39 1.28355e+020
+103 258 1.28134e+020
+268 88 1.28035e+020
+396 104 1.2782e+020
+186 101 1.2776e+020
+209 419 1.27277e+020
+579 85 1.27157e+020
+597 33 1.27054e+020
+525 281 1.26921e+020
+128 307 1.26791e+020
+455 48 1.26494e+020
+308 358 1.26482e+020
+96 60 1.26457e+020
+288 348 1.26417e+020
+48 162 1.26286e+020
+275 198 1.2605e+020
+162 152 1.25951e+020
+310 446 1.25929e+020
+392 159 1.25761e+020
+232 31 1.25635e+020
+212 146 1.25422e+020
+158 305 1.25393e+020
+541 381 1.2501e+020
+183 316 1.24851e+020
+222 87 1.24802e+020
+18 235 1.24541e+020
+391 450 1.24342e+020
+506 380 1.24046e+020
+111 338 1.24039e+020
+577 52 1.23965e+020
+155 162 1.2375e+020
+582 446 1.23707e+020
+104 35 1.23603e+020
+294 141 1.2345e+020
+56 71 1.23354e+020
+161 126 1.23013e+020
+94 80 1.22968e+020
+480 166 1.22879e+020
+262 397 1.22821e+020
+451 21 1.226e+020
+539 186 1.22184e+020
+26 44 1.2205e+020
+502 123 1.22004e+020
+272 64 1.2188e+020
+299 255 1.21816e+020
+327 105 1.21794e+020
+337 367 1.21614e+020
+318 452 1.21567e+020
+161 33 1.21545e+020
+255 5 1.21527e+020
+413 264 1.2145e+020
+376 240 1.2107e+020
+17 65 1.2075e+020
+240 327 1.20718e+020
+362 63 1.20689e+020
+102 96 1.20592e+020
+337 181 1.20077e+020
+430 89 1.20054e+020
+315 446 1.20019e+020
+96 21 1.19756e+020
+183 142 1.19699e+020
+121 215 1.19681e+020
+47 203 1.1965e+020
+383 25 1.19529e+020
+43 408 1.19222e+020
+166 292 1.18995e+020
+429 223 1.18974e+020
+115 359 1.18881e+020
+150 397 1.18877e+020
+217 414 1.18835e+020
+149 132 1.18725e+020
+418 260 1.18123e+020
+417 87 1.1792e+020
+382 413 1.17877e+020
+155 445 1.17825e+020
+51 230 1.17787e+020
+107 382 1.17689e+020
+118 95 1.1768e+020
+255 459 1.17617e+020
+327 52 1.17383e+020
+39 238 1.17376e+020
+459 304 1.17149e+020
+233 406 1.1706e+020
+438 108 1.16989e+020
+511 352 1.16916e+020
+157 122 1.16886e+020
+225 51 1.16419e+020
+174 187 1.15966e+020
+309 54 1.15537e+020
+291 311 1.15535e+020
+145 23 1.15456e+020
+200 294 1.15349e+020
+514 403 1.15257e+020
+540 40 1.15153e+020
+351 255 1.15122e+020
+400 280 1.15084e+020
+22 322 1.15033e+020
+597 273 1.14987e+020
+190 132 1.14715e+020
+10 125 1.14378e+020
+94 366 1.14289e+020
+148 199 1.14128e+020
+463 224 1.14045e+020
+150 79 1.13923e+020
+205 33 1.13845e+020
+480 46 1.13767e+020
+386 282 1.1364e+020
+218 204 1.1356e+020
+408 430 1.13541e+020
+275 214 1.13537e+020
+129 428 1.13393e+020
+41 203 1.12994e+020
+508 203 1.12525e+020
+266 258 1.12508e+020
+408 140 1.12484e+020
+235 220 1.12349e+020
+362 48 1.1226e+020
+186 202 1.12253e+020
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_3_3.txt b/test_data/harriscorners/hc_msc_5.00_0.15_3_3.txt
new file mode 100644
index 0000000..b9cd439
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_3_3.txt
@@ -0,0 +1,1248 @@
+1247
+449 298 3.32013e+011
+329 127 2.40479e+011
+499 1 2.3572e+011
+388 178 2.22672e+011
+421 183 2.15372e+011
+401 261 2.13482e+011
+213 72 1.93722e+011
+66 320 1.81165e+011
+321 313 1.79205e+011
+544 170 1.78251e+011
+363 401 1.74675e+011
+121 44 1.72328e+011
+365 200 1.66654e+011
+553 40 1.65255e+011
+75 236 1.60659e+011
+135 215 1.603e+011
+449 219 1.59546e+011
+159 143 1.52973e+011
+137 208 1.51472e+011
+514 77 1.44856e+011
+89 197 1.42311e+011
+45 26 1.39432e+011
+312 149 1.39254e+011
+447 397 1.39158e+011
+449 403 1.39003e+011
+412 256 1.38427e+011
+223 38 1.35886e+011
+285 297 1.35718e+011
+125 255 1.35631e+011
+385 221 1.34753e+011
+436 68 1.34254e+011
+282 115 1.34177e+011
+296 420 1.31746e+011
+396 319 1.30232e+011
+144 309 1.30226e+011
+344 10 1.27771e+011
+173 94 1.27765e+011
+256 386 1.24699e+011
+246 143 1.23946e+011
+184 35 1.23258e+011
+299 54 1.23249e+011
+124 362 1.21894e+011
+522 263 1.20143e+011
+59 185 1.19992e+011
+417 7 1.19915e+011
+508 18 1.19444e+011
+113 213 1.19438e+011
+34 137 1.18269e+011
+177 260 1.18138e+011
+273 365 1.1716e+011
+426 320 1.16482e+011
+58 74 1.16247e+011
+140 184 1.15883e+011
+199 18 1.15247e+011
+242 203 1.14681e+011
+348 179 1.14112e+011
+64 235 1.13843e+011
+273 290 1.1347e+011
+545 217 1.13457e+011
+221 16 1.11675e+011
+317 385 1.1145e+011
+480 298 1.11068e+011
+245 95 1.08943e+011
+126 162 1.08936e+011
+173 312 1.08494e+011
+293 120 1.07417e+011
+456 281 1.06354e+011
+71 148 1.02865e+011
+507 122 1.02318e+011
+3 47 1.02278e+011
+46 219 1.00061e+011
+301 175 9.96735e+010
+239 90 9.94915e+010
+206 223 9.87767e+010
+484 59 9.8545e+010
+308 372 9.81498e+010
+253 138 9.77265e+010
+380 68 9.75023e+010
+65 344 9.67893e+010
+419 163 9.67742e+010
+425 262 9.50666e+010
+270 241 9.47397e+010
+303 183 9.41986e+010
+264 201 9.34707e+010
+364 298 9.31987e+010
+197 57 9.31893e+010
+82 27 9.31434e+010
+489 264 9.16105e+010
+535 243 9.11293e+010
+448 263 9.09534e+010
+371 82 8.99196e+010
+112 4 8.94971e+010
+183 401 8.90444e+010
+282 403 8.87494e+010
+277 181 8.86356e+010
+270 60 8.8555e+010
+455 83 8.83753e+010
+236 163 8.78992e+010
+543 57 8.78691e+010
+301 164 8.75609e+010
+287 344 8.71933e+010
+406 375 8.67871e+010
+114 344 8.56334e+010
+556 182 8.54822e+010
+569 40 8.50566e+010
+511 342 8.38851e+010
+467 123 8.37288e+010
+359 168 8.36512e+010
+360 335 8.35301e+010
+507 164 8.33022e+010
+174 238 8.32778e+010
+205 202 8.31866e+010
+208 434 8.3186e+010
+572 142 8.3011e+010
+272 166 8.22367e+010
+87 78 8.20642e+010
+278 352 8.19263e+010
+10 102 8.18657e+010
+496 119 8.16362e+010
+251 13 8.14815e+010
+401 184 8.14769e+010
+381 164 8.14237e+010
+390 58 8.11309e+010
+324 88 8.08953e+010
+378 316 8.08477e+010
+313 75 7.98569e+010
+125 199 7.92236e+010
+526 101 7.90062e+010
+478 16 7.89078e+010
+455 3 7.82006e+010
+391 47 7.76358e+010
+433 146 7.75953e+010
+560 229 7.726e+010
+530 185 7.70649e+010
+102 4 7.66956e+010
+424 376 7.61736e+010
+224 221 7.57099e+010
+341 337 7.51563e+010
+392 144 7.50462e+010
+543 364 7.49456e+010
+163 207 7.48815e+010
+131 36 7.46726e+010
+279 296 7.46392e+010
+473 63 7.46334e+010
+64 371 7.38101e+010
+461 279 7.37125e+010
+28 8 7.3378e+010
+382 8 7.29965e+010
+261 165 7.29928e+010
+170 19 7.26616e+010
+275 216 7.25494e+010
+35 300 7.23838e+010
+224 183 7.22909e+010
+463 198 7.16838e+010
+355 320 7.1669e+010
+279 370 7.09063e+010
+317 336 7.07404e+010
+240 349 7.0726e+010
+562 478 7.07163e+010
+360 316 7.07085e+010
+192 331 7.05062e+010
+257 90 7.02903e+010
+525 346 7.02554e+010
+109 239 7.00581e+010
+524 199 6.99845e+010
+373 116 6.90968e+010
+485 23 6.89545e+010
+510 172 6.87798e+010
+211 56 6.86982e+010
+359 294 6.82845e+010
+392 353 6.8006e+010
+282 221 6.79263e+010
+448 138 6.78777e+010
+464 240 6.76343e+010
+479 181 6.74053e+010
+192 276 6.71509e+010
+260 273 6.70827e+010
+105 62 6.70658e+010
+313 222 6.70554e+010
+471 239 6.70266e+010
+404 120 6.69485e+010
+244 72 6.65082e+010
+352 146 6.64941e+010
+338 473 6.64691e+010
+326 427 6.64265e+010
+365 7 6.63697e+010
+29 236 6.59508e+010
+128 1 6.59499e+010
+411 4 6.59144e+010
+556 245 6.57224e+010
+220 100 6.55948e+010
+382 338 6.51112e+010
+342 123 6.50371e+010
+575 126 6.50086e+010
+297 296 6.45906e+010
+185 18 6.45689e+010
+364 255 6.44384e+010
+77 81 6.40258e+010
+303 207 6.38558e+010
+411 355 6.37262e+010
+380 26 6.36531e+010
+558 19 6.35145e+010
+283 71 6.34571e+010
+376 7 6.33788e+010
+164 241 6.32783e+010
+224 419 6.32311e+010
+370 107 6.32179e+010
+461 340 6.31388e+010
+299 70 6.27673e+010
+342 464 6.2729e+010
+376 84 6.26312e+010
+479 81 6.25653e+010
+259 236 6.20956e+010
+521 122 6.20633e+010
+507 60 6.19057e+010
+387 319 6.17718e+010
+538 95 6.16153e+010
+79 3 6.15896e+010
+353 126 6.15454e+010
+140 173 6.14922e+010
+412 23 6.13352e+010
+513 93 6.11844e+010
+331 107 6.08829e+010
+273 130 6.08464e+010
+266 53 6.07627e+010
+160 183 6.06261e+010
+174 114 6.05348e+010
+110 96 6.04995e+010
+487 3 6.02847e+010
+271 278 6.01424e+010
+300 265 6.00032e+010
+512 165 5.9997e+010
+36 147 5.99462e+010
+61 61 5.97795e+010
+451 101 5.97104e+010
+525 223 5.95214e+010
+97 79 5.93704e+010
+126 76 5.89135e+010
+238 74 5.88489e+010
+509 361 5.86898e+010
+432 319 5.86452e+010
+55 28 5.86451e+010
+230 267 5.83829e+010
+264 298 5.83234e+010
+319 201 5.80784e+010
+223 114 5.79494e+010
+550 380 5.79183e+010
+512 99 5.79039e+010
+363 250 5.75366e+010
+361 131 5.74675e+010
+553 384 5.74331e+010
+535 267 5.71946e+010
+386 126 5.71675e+010
+192 359 5.69978e+010
+381 411 5.65391e+010
+125 261 5.65161e+010
+389 139 5.64628e+010
+46 90 5.64483e+010
+264 440 5.63203e+010
+54 6 5.62353e+010
+374 163 5.61762e+010
+307 440 5.61124e+010
+203 310 5.60268e+010
+351 339 5.58039e+010
+266 14 5.5512e+010
+394 158 5.51805e+010
+465 394 5.51308e+010
+445 23 5.49909e+010
+352 161 5.48942e+010
+177 106 5.48457e+010
+120 4 5.4805e+010
+520 183 5.47988e+010
+333 89 5.47962e+010
+387 242 5.47331e+010
+303 156 5.43943e+010
+49 158 5.42958e+010
+579 18 5.4104e+010
+13 206 5.3914e+010
+229 292 5.376e+010
+529 32 5.37173e+010
+497 64 5.36635e+010
+580 52 5.35787e+010
+276 393 5.35316e+010
+186 342 5.32643e+010
+244 164 5.31083e+010
+338 391 5.29004e+010
+483 339 5.28012e+010
+510 456 5.27146e+010
+239 18 5.26892e+010
+313 86 5.25801e+010
+169 238 5.25666e+010
+169 55 5.24658e+010
+148 396 5.24387e+010
+277 333 5.23021e+010
+212 183 5.21943e+010
+184 137 5.21287e+010
+281 49 5.19704e+010
+118 61 5.17674e+010
+162 20 5.16328e+010
+219 291 5.14264e+010
+542 210 5.11964e+010
+260 250 5.10715e+010
+76 8 5.09706e+010
+285 240 5.0758e+010
+422 44 5.07025e+010
+79 474 5.05485e+010
+561 321 5.0382e+010
+540 40 5.02301e+010
+150 114 5.02088e+010
+542 18 5.01409e+010
+136 202 5.01398e+010
+243 189 5.01201e+010
+36 268 5.00971e+010
+49 152 5.00459e+010
+541 13 4.9997e+010
+330 202 4.9984e+010
+500 42 4.99795e+010
+305 193 4.99758e+010
+73 186 4.99396e+010
+215 144 4.98261e+010
+317 165 4.95489e+010
+356 267 4.94771e+010
+96 125 4.93265e+010
+290 183 4.924e+010
+359 162 4.92243e+010
+71 410 4.9117e+010
+189 180 4.90307e+010
+508 142 4.88942e+010
+315 160 4.88818e+010
+108 325 4.88593e+010
+494 456 4.87995e+010
+22 60 4.87893e+010
+68 27 4.87746e+010
+292 15 4.86476e+010
+404 338 4.85925e+010
+398 357 4.85631e+010
+172 449 4.84895e+010
+300 245 4.84802e+010
+234 261 4.84019e+010
+170 117 4.83873e+010
+59 219 4.83872e+010
+526 171 4.82621e+010
+271 51 4.82215e+010
+560 60 4.81504e+010
+97 447 4.81475e+010
+88 256 4.81389e+010
+562 149 4.80759e+010
+524 20 4.80395e+010
+267 131 4.79571e+010
+232 200 4.78804e+010
+415 251 4.77997e+010
+387 10 4.75446e+010
+388 282 4.7539e+010
+511 128 4.74527e+010
+78 196 4.74264e+010
+25 200 4.73723e+010
+487 357 4.72904e+010
+406 65 4.71602e+010
+100 221 4.7118e+010
+508 4 4.6984e+010
+118 96 4.69834e+010
+184 184 4.69171e+010
+92 21 4.67795e+010
+265 72 4.66755e+010
+112 393 4.66266e+010
+137 98 4.64651e+010
+441 98 4.64145e+010
+304 363 4.62856e+010
+546 182 4.62825e+010
+38 296 4.62357e+010
+150 151 4.62263e+010
+162 212 4.61648e+010
+372 67 4.59859e+010
+269 105 4.59755e+010
+474 245 4.59665e+010
+510 300 4.59435e+010
+91 291 4.58293e+010
+324 166 4.5813e+010
+358 127 4.55595e+010
+286 165 4.55166e+010
+137 128 4.54939e+010
+594 19 4.54605e+010
+175 57 4.54059e+010
+434 398 4.53898e+010
+484 361 4.53839e+010
+72 97 4.53212e+010
+101 58 4.52862e+010
+250 313 4.51898e+010
+379 107 4.50949e+010
+236 221 4.50771e+010
+394 260 4.50428e+010
+210 154 4.49139e+010
+191 217 4.48388e+010
+312 81 4.48301e+010
+115 76 4.47252e+010
+292 28 4.46923e+010
+413 100 4.46805e+010
+329 9 4.46782e+010
+77 256 4.46443e+010
+18 342 4.4631e+010
+536 138 4.46003e+010
+436 339 4.45697e+010
+159 113 4.44626e+010
+389 327 4.43724e+010
+27 220 4.43478e+010
+134 72 4.4342e+010
+43 62 4.42493e+010
+157 93 4.38204e+010
+59 254 4.38166e+010
+454 340 4.37227e+010
+40 309 4.371e+010
+458 264 4.3708e+010
+529 361 4.36137e+010
+36 176 4.35485e+010
+161 124 4.35119e+010
+545 6 4.34609e+010
+112 134 4.32658e+010
+479 451 4.32558e+010
+565 60 4.31753e+010
+430 1 4.31001e+010
+412 162 4.30471e+010
+29 29 4.30449e+010
+217 126 4.29913e+010
+439 149 4.29214e+010
+85 476 4.29116e+010
+32 218 4.26987e+010
+152 308 4.26416e+010
+484 376 4.25308e+010
+217 208 4.25189e+010
+48 97 4.24476e+010
+22 219 4.23491e+010
+361 369 4.23308e+010
+172 202 4.23219e+010
+445 453 4.22977e+010
+418 85 4.22619e+010
+187 109 4.2194e+010
+192 123 4.21697e+010
+241 58 4.20811e+010
+363 182 4.19809e+010
+96 148 4.19617e+010
+293 333 4.19545e+010
+572 121 4.18522e+010
+276 221 4.18371e+010
+182 111 4.18003e+010
+355 106 4.15504e+010
+57 331 4.15472e+010
+132 130 4.15286e+010
+267 31 4.14392e+010
+336 427 4.14213e+010
+391 19 4.13924e+010
+569 203 4.1321e+010
+292 310 4.12898e+010
+350 323 4.12846e+010
+182 201 4.11235e+010
+175 2 4.1106e+010
+246 294 4.09431e+010
+443 320 4.09296e+010
+276 137 4.09062e+010
+572 160 4.07462e+010
+452 161 4.07453e+010
+446 352 4.0683e+010
+355 13 4.06574e+010
+163 276 4.05877e+010
+262 393 4.05651e+010
+554 201 4.056e+010
+400 273 4.05134e+010
+387 295 4.04164e+010
+538 458 4.03377e+010
+153 446 4.01827e+010
+196 192 4.0115e+010
+502 143 4.00663e+010
+188 146 3.99633e+010
+344 166 3.9896e+010
+89 147 3.98871e+010
+447 145 3.98684e+010
+63 8 3.98e+010
+37 62 3.97673e+010
+396 104 3.97459e+010
+208 421 3.97066e+010
+197 130 3.96576e+010
+474 23 3.96223e+010
+225 73 3.95462e+010
+286 209 3.95077e+010
+270 66 3.94958e+010
+451 376 3.94875e+010
+213 123 3.94825e+010
+497 342 3.94503e+010
+223 239 3.94321e+010
+59 289 3.94082e+010
+466 40 3.93775e+010
+92 214 3.92772e+010
+111 40 3.92037e+010
+6 9 3.91992e+010
+540 165 3.91388e+010
+266 260 3.91154e+010
+113 356 3.91059e+010
+511 205 3.90671e+010
+164 359 3.90655e+010
+474 262 3.90596e+010
+369 338 3.90341e+010
+264 445 3.89599e+010
+102 358 3.89467e+010
+435 181 3.89209e+010
+474 202 3.88472e+010
+360 260 3.88299e+010
+371 393 3.87679e+010
+220 151 3.87407e+010
+361 396 3.86838e+010
+51 290 3.86639e+010
+130 217 3.85442e+010
+140 325 3.85439e+010
+55 66 3.84889e+010
+110 265 3.8432e+010
+386 167 3.84014e+010
+162 168 3.83788e+010
+202 392 3.82566e+010
+327 320 3.81906e+010
+518 202 3.80911e+010
+137 111 3.80611e+010
+544 92 3.79958e+010
+579 79 3.79667e+010
+132 26 3.79178e+010
+139 2 3.78164e+010
+105 39 3.77167e+010
+225 297 3.76892e+010
+373 242 3.76041e+010
+67 47 3.73619e+010
+449 178 3.73306e+010
+377 299 3.72396e+010
+179 274 3.71829e+010
+167 150 3.71606e+010
+422 398 3.71499e+010
+438 123 3.71068e+010
+565 19 3.70245e+010
+93 255 3.70178e+010
+95 452 3.68933e+010
+432 83 3.67761e+010
+216 279 3.66548e+010
+274 206 3.66128e+010
+273 297 3.66057e+010
+475 340 3.6522e+010
+124 272 3.64658e+010
+463 267 3.64605e+010
+432 122 3.64555e+010
+203 347 3.64402e+010
+411 45 3.64242e+010
+589 309 3.64136e+010
+281 386 3.63827e+010
+398 412 3.6334e+010
+492 182 3.63111e+010
+133 427 3.62958e+010
+423 337 3.62731e+010
+506 204 3.62613e+010
+604 121 3.61506e+010
+306 88 3.60367e+010
+505 159 3.59928e+010
+67 337 3.59462e+010
+367 144 3.59302e+010
+129 168 3.59146e+010
+5 65 3.58467e+010
+261 329 3.58383e+010
+507 178 3.58268e+010
+135 237 3.58226e+010
+486 205 3.5683e+010
+65 363 3.56335e+010
+12 80 3.55347e+010
+58 103 3.55183e+010
+525 381 3.54806e+010
+146 160 3.54263e+010
+343 36 3.51996e+010
+258 34 3.5165e+010
+379 352 3.51263e+010
+82 135 3.512e+010
+38 170 3.51103e+010
+418 440 3.5062e+010
+64 448 3.50251e+010
+259 71 3.49972e+010
+259 221 3.49966e+010
+413 65 3.49903e+010
+318 107 3.49812e+010
+436 387 3.49418e+010
+81 75 3.47987e+010
+460 395 3.47555e+010
+464 24 3.47452e+010
+355 220 3.47349e+010
+543 130 3.4715e+010
+390 161 3.46712e+010
+449 83 3.46425e+010
+549 59 3.46386e+010
+315 145 3.46057e+010
+567 423 3.4525e+010
+497 79 3.45012e+010
+193 17 3.44028e+010
+246 106 3.43839e+010
+283 35 3.42231e+010
+285 263 3.41597e+010
+357 240 3.41371e+010
+163 147 3.41141e+010
+240 365 3.4059e+010
+191 171 3.40022e+010
+2 155 3.39925e+010
+217 55 3.39838e+010
+49 164 3.38826e+010
+321 103 3.38173e+010
+194 110 3.38099e+010
+148 21 3.37901e+010
+407 81 3.37553e+010
+153 299 3.3725e+010
+484 179 3.37159e+010
+365 86 3.36295e+010
+153 197 3.35371e+010
+423 6 3.3536e+010
+440 181 3.34728e+010
+161 133 3.34368e+010
+252 422 3.33852e+010
+503 361 3.338e+010
+40 217 3.33284e+010
+44 121 3.33035e+010
+254 74 3.33e+010
+298 191 3.31578e+010
+543 252 3.3116e+010
+197 75 3.31046e+010
+335 240 3.2995e+010
+273 71 3.29352e+010
+254 404 3.29182e+010
+141 391 3.2898e+010
+158 1 3.28516e+010
+598 364 3.2829e+010
+445 7 3.27764e+010
+577 178 3.27128e+010
+226 15 3.26989e+010
+550 222 3.26966e+010
+65 252 3.26954e+010
+247 258 3.266e+010
+344 197 3.25513e+010
+128 238 3.25205e+010
+345 109 3.24429e+010
+114 220 3.23661e+010
+46 80 3.23424e+010
+515 1 3.2336e+010
+297 274 3.23056e+010
+325 148 3.22999e+010
+209 136 3.22475e+010
+45 131 3.22084e+010
+227 258 3.21576e+010
+541 122 3.21134e+010
+311 334 3.20173e+010
+403 6 3.20151e+010
+389 420 3.20125e+010
+187 100 3.19551e+010
+534 18 3.19331e+010
+163 108 3.1872e+010
+366 95 3.18113e+010
+208 449 3.16687e+010
+211 33 3.16493e+010
+383 89 3.16358e+010
+194 135 3.16339e+010
+44 10 3.16162e+010
+274 76 3.16129e+010
+324 142 3.15459e+010
+505 382 3.15319e+010
+334 368 3.14948e+010
+189 202 3.14933e+010
+480 402 3.14244e+010
+473 120 3.14115e+010
+430 181 3.13927e+010
+286 52 3.13823e+010
+535 120 3.13787e+010
+167 325 3.13593e+010
+421 315 3.13583e+010
+64 276 3.13248e+010
+559 271 3.12986e+010
+166 113 3.12175e+010
+278 145 3.11219e+010
+298 332 3.10548e+010
+522 140 3.09568e+010
+538 78 3.07838e+010
+345 241 3.07034e+010
+141 22 3.06776e+010
+24 65 3.06286e+010
+347 392 3.05554e+010
+191 314 3.05483e+010
+355 24 3.05315e+010
+343 351 3.05255e+010
+113 205 3.05241e+010
+212 437 3.05028e+010
+516 18 3.04946e+010
+184 117 3.04762e+010
+513 220 3.03328e+010
+192 141 3.03119e+010
+108 45 3.03008e+010
+46 147 3.02913e+010
+518 164 3.02507e+010
+447 245 3.02379e+010
+618 181 3.02249e+010
+406 142 3.01828e+010
+129 309 3.01032e+010
+273 353 3.01028e+010
+297 137 3.00783e+010
+9 476 3.00409e+010
+311 33 2.99698e+010
+375 225 2.99597e+010
+36 202 2.99056e+010
+207 159 2.98943e+010
+397 25 2.98546e+010
+418 414 2.98259e+010
+497 283 2.98107e+010
+527 39 2.981e+010
+48 256 2.97906e+010
+360 216 2.97808e+010
+320 119 2.97802e+010
+86 370 2.97646e+010
+110 168 2.97306e+010
+437 303 2.97008e+010
+363 407 2.96887e+010
+472 355 2.96768e+010
+303 170 2.96336e+010
+345 306 2.95975e+010
+563 225 2.9545e+010
+415 262 2.94785e+010
+292 147 2.9458e+010
+70 130 2.94209e+010
+206 293 2.93707e+010
+363 355 2.92381e+010
+216 172 2.92323e+010
+179 359 2.91558e+010
+530 24 2.91448e+010
+153 216 2.91369e+010
+172 166 2.91233e+010
+498 160 2.91137e+010
+592 107 2.91085e+010
+199 328 2.90303e+010
+326 180 2.89858e+010
+383 181 2.88673e+010
+92 112 2.88159e+010
+329 212 2.88021e+010
+530 193 2.87612e+010
+381 47 2.86816e+010
+51 377 2.86816e+010
+252 153 2.86699e+010
+311 298 2.85405e+010
+503 265 2.85123e+010
+528 161 2.85065e+010
+83 183 2.84091e+010
+484 153 2.8386e+010
+60 148 2.83768e+010
+201 166 2.83574e+010
+54 358 2.83024e+010
+101 197 2.82999e+010
+260 142 2.82132e+010
+242 101 2.82021e+010
+308 8 2.81796e+010
+513 44 2.81739e+010
+259 228 2.81672e+010
+84 237 2.81047e+010
+136 93 2.80904e+010
+174 418 2.80867e+010
+270 91 2.80719e+010
+301 86 2.80634e+010
+278 417 2.80401e+010
+185 170 2.79644e+010
+539 220 2.78728e+010
+105 430 2.78683e+010
+44 476 2.7867e+010
+133 78 2.78455e+010
+79 273 2.7731e+010
+224 154 2.77283e+010
+516 348 2.77048e+010
+516 142 2.76708e+010
+453 358 2.76642e+010
+230 35 2.76007e+010
+2 166 2.75605e+010
+485 236 2.75596e+010
+57 364 2.75226e+010
+166 96 2.75211e+010
+203 397 2.74693e+010
+412 221 2.74471e+010
+422 63 2.74119e+010
+241 68 2.74052e+010
+115 44 2.73709e+010
+219 387 2.73313e+010
+451 204 2.73255e+010
+329 66 2.72136e+010
+163 249 2.72081e+010
+528 142 2.72025e+010
+263 311 2.71133e+010
+90 377 2.7076e+010
+175 40 2.70451e+010
+39 143 2.7035e+010
+136 57 2.69469e+010
+245 213 2.69179e+010
+573 333 2.69027e+010
+332 295 2.68878e+010
+267 146 2.68597e+010
+166 286 2.6782e+010
+550 121 2.67021e+010
+565 161 2.66929e+010
+231 150 2.66819e+010
+175 121 2.66737e+010
+501 102 2.66589e+010
+484 161 2.66353e+010
+461 123 2.65756e+010
+491 470 2.65491e+010
+445 128 2.64998e+010
+500 223 2.64884e+010
+95 284 2.64288e+010
+54 449 2.64e+010
+32 112 2.63986e+010
+109 183 2.63704e+010
+308 448 2.63477e+010
+288 397 2.62596e+010
+134 172 2.62036e+010
+576 164 2.6195e+010
+357 143 2.60613e+010
+493 140 2.59598e+010
+127 186 2.59426e+010
+545 438 2.58981e+010
+28 254 2.58857e+010
+175 187 2.58707e+010
+94 422 2.58328e+010
+531 103 2.58257e+010
+189 137 2.5782e+010
+479 241 2.57463e+010
+247 347 2.57131e+010
+109 340 2.56844e+010
+151 133 2.56711e+010
+450 442 2.56414e+010
+251 184 2.56317e+010
+265 249 2.55531e+010
+39 242 2.55043e+010
+125 40 2.54915e+010
+262 217 2.54865e+010
+513 402 2.54673e+010
+509 83 2.54497e+010
+54 303 2.54443e+010
+84 59 2.53428e+010
+498 70 2.53074e+010
+244 219 2.53026e+010
+180 394 2.52989e+010
+177 331 2.52911e+010
+367 247 2.52836e+010
+572 328 2.52267e+010
+155 396 2.52234e+010
+308 183 2.51877e+010
+140 317 2.51716e+010
+290 89 2.51025e+010
+597 272 2.50876e+010
+161 32 2.50828e+010
+131 148 2.50134e+010
+482 173 2.49784e+010
+372 73 2.4948e+010
+266 118 2.49366e+010
+180 56 2.49141e+010
+187 257 2.4867e+010
+561 201 2.47891e+010
+540 263 2.4774e+010
+69 417 2.47465e+010
+474 143 2.47447e+010
+562 157 2.47287e+010
+383 146 2.4718e+010
+420 362 2.47071e+010
+62 133 2.46743e+010
+117 360 2.45877e+010
+335 104 2.45837e+010
+485 221 2.45802e+010
+509 137 2.45768e+010
+310 259 2.45652e+010
+54 221 2.45348e+010
+480 128 2.4502e+010
+48 458 2.44281e+010
+200 293 2.44177e+010
+330 168 2.44036e+010
+406 162 2.43734e+010
+472 42 2.43238e+010
+83 101 2.43109e+010
+46 420 2.43086e+010
+195 343 2.43074e+010
+525 79 2.42684e+010
+424 163 2.42418e+010
+81 219 2.423e+010
+215 427 2.42092e+010
+560 81 2.42087e+010
+83 404 2.41925e+010
+202 7 2.4149e+010
+367 2 2.41479e+010
+133 411 2.41322e+010
+534 161 2.40618e+010
+575 54 2.40597e+010
+494 163 2.40239e+010
+513 261 2.38309e+010
+243 419 2.37793e+010
+326 13 2.37713e+010
+361 449 2.37025e+010
+478 4 2.36895e+010
+576 91 2.36706e+010
+418 282 2.36688e+010
+515 381 2.36307e+010
+534 393 2.36171e+010
+533 340 2.35181e+010
+304 292 2.35037e+010
+385 450 2.34733e+010
+160 256 2.34275e+010
+515 184 2.34164e+010
+574 39 2.34088e+010
+59 372 2.33549e+010
+324 341 2.33508e+010
+277 164 2.33395e+010
+138 146 2.33349e+010
+44 152 2.33276e+010
+391 166 2.33264e+010
+279 363 2.32978e+010
+240 194 2.32658e+010
+344 276 2.32265e+010
+133 376 2.3195e+010
+336 50 2.31582e+010
+146 165 2.31217e+010
+234 346 2.30731e+010
+449 324 2.30493e+010
+273 146 2.30268e+010
+497 229 2.30159e+010
+118 224 2.29861e+010
+161 397 2.29771e+010
+525 423 2.29066e+010
+268 289 2.28929e+010
+568 383 2.2859e+010
+152 58 2.28398e+010
+87 230 2.28313e+010
+111 55 2.28101e+010
+389 334 2.27726e+010
+37 288 2.27672e+010
+465 355 2.27641e+010
+588 345 2.2738e+010
+302 102 2.26739e+010
+409 281 2.26324e+010
+11 114 2.26314e+010
+19 65 2.26267e+010
+347 370 2.26255e+010
+259 159 2.26029e+010
+125 112 2.25938e+010
+245 385 2.2584e+010
+280 188 2.25755e+010
+433 63 2.25379e+010
+378 183 2.25278e+010
+58 79 2.24833e+010
+158 237 2.24573e+010
+93 95 2.2442e+010
+32 103 2.2439e+010
+94 5 2.24097e+010
+194 201 2.23586e+010
+515 120 2.2339e+010
+512 109 2.23151e+010
+426 119 2.2246e+010
+78 59 2.22253e+010
+114 176 2.2218e+010
+461 161 2.21659e+010
+512 295 2.21545e+010
+266 139 2.21101e+010
+383 325 2.21022e+010
+541 99 2.20471e+010
+296 410 2.2021e+010
+132 255 2.19838e+010
+175 342 2.18282e+010
+305 217 2.18119e+010
+401 169 2.18072e+010
+185 374 2.18039e+010
+234 158 2.17853e+010
+311 265 2.17397e+010
+290 249 2.17036e+010
+144 255 2.17022e+010
+157 103 2.17001e+010
+347 144 2.16822e+010
+88 183 2.16808e+010
+205 127 2.16775e+010
+250 191 2.16769e+010
+299 106 2.16688e+010
+414 143 2.16473e+010
+358 9 2.15888e+010
+494 23 2.15763e+010
+572 364 2.15558e+010
+515 335 2.15342e+010
+431 340 2.15314e+010
+172 107 2.15297e+010
+347 297 2.15157e+010
+282 392 2.14874e+010
+215 62 2.14859e+010
+432 268 2.14719e+010
+63 230 2.14478e+010
+545 160 2.14216e+010
+315 238 2.14099e+010
+11 72 2.14086e+010
+323 370 2.13639e+010
+316 101 2.13502e+010
+320 224 2.13317e+010
+175 19 2.13221e+010
+329 255 2.13106e+010
+394 336 2.12895e+010
+228 347 2.12852e+010
+533 346 2.12741e+010
+281 132 2.1273e+010
+123 343 2.12413e+010
+391 449 2.12083e+010
+531 239 2.12023e+010
+402 217 2.11947e+010
+176 180 2.11681e+010
+196 81 2.10968e+010
+144 432 2.10914e+010
+341 314 2.10786e+010
+150 38 2.10623e+010
+164 379 2.10621e+010
+133 392 2.10356e+010
+154 345 2.098e+010
+185 311 2.09721e+010
+151 400 2.09461e+010
+529 136 2.09435e+010
+332 397 2.09011e+010
+252 222 2.08846e+010
+54 44 2.08746e+010
+180 123 2.08743e+010
+350 318 2.08579e+010
+521 426 2.08353e+010
+132 477 2.08219e+010
+545 43 2.08114e+010
+158 74 2.0797e+010
+427 44 2.07913e+010
+496 462 2.07386e+010
+333 28 2.07265e+010
+249 363 2.0702e+010
+577 403 2.06881e+010
+94 198 2.06673e+010
+297 182 2.06606e+010
+13 236 2.06532e+010
+249 404 2.06304e+010
+36 233 2.06091e+010
+145 187 2.05783e+010
+483 286 2.0513e+010
+91 390 2.05054e+010
+458 200 2.04938e+010
+222 214 2.04753e+010
+368 162 2.0415e+010
+246 326 2.04007e+010
+344 263 2.03829e+010
+271 183 2.03827e+010
+88 261 2.02914e+010
+374 126 2.02789e+010
+441 63 2.02428e+010
+95 59 2.02419e+010
+127 26 2.02343e+010
+251 247 2.02119e+010
+387 203 2.01776e+010
+114 374 2.01405e+010
+198 10 2.00946e+010
+208 315 2.00838e+010
+216 235 2.00684e+010
+384 111 2.00678e+010
+440 241 2.00477e+010
+557 264 2.0044e+010
+511 181 2.00353e+010
+588 19 1.99513e+010
+540 141 1.99511e+010
+464 226 1.9933e+010
+399 67 1.99078e+010
+221 85 1.99002e+010
+252 238 1.98741e+010
+279 194 1.9871e+010
+6 151 1.98591e+010
+236 295 1.98549e+010
+153 222 1.98402e+010
+344 187 1.98362e+010
+41 337 1.98341e+010
+303 406 1.97984e+010
+421 89 1.97892e+010
+590 162 1.97859e+010
+368 31 1.97791e+010
+297 257 1.97773e+010
+487 242 1.97728e+010
+449 284 1.9772e+010
+247 180 1.97481e+010
+526 122 1.96827e+010
+219 315 1.96772e+010
+170 131 1.96723e+010
+561 144 1.96541e+010
+275 318 1.96515e+010
+31 81 1.96483e+010
+572 450 1.96302e+010
+59 204 1.95999e+010
+302 141 1.95888e+010
+146 15 1.95859e+010
+391 52 1.95675e+010
+215 402 1.95563e+010
+23 254 1.95146e+010
+487 119 1.9513e+010
+137 177 1.95009e+010
+222 176 1.94798e+010
+90 321 1.94775e+010
+482 123 1.94601e+010
+244 402 1.94402e+010
+416 377 1.94391e+010
+45 407 1.94299e+010
+77 29 1.9405e+010
+179 75 1.93775e+010
+3 109 1.93289e+010
+229 178 1.92968e+010
+524 289 1.92797e+010
+310 138 1.92775e+010
+86 356 1.92504e+010
+424 102 1.92369e+010
+270 222 1.92338e+010
+390 132 1.92303e+010
+224 130 1.91545e+010
+357 52 1.91504e+010
+230 92 1.91233e+010
+33 39 1.91078e+010
+154 21 1.91027e+010
+344 341 1.90807e+010
+407 262 1.9077e+010
+64 218 1.90579e+010
+272 414 1.90397e+010
+559 422 1.90361e+010
+108 260 1.90092e+010
+463 139 1.89101e+010
+70 390 1.88963e+010
+125 330 1.88794e+010
+434 381 1.88679e+010
+396 141 1.88516e+010
+575 98 1.88321e+010
+340 220 1.88128e+010
+290 112 1.87997e+010
+426 471 1.8795e+010
+325 118 1.87913e+010
+399 131 1.87649e+010
+144 179 1.87319e+010
+192 326 1.87288e+010
+589 350 1.87032e+010
+361 156 1.86959e+010
+506 198 1.86937e+010
+217 284 1.86878e+010
+164 310 1.86833e+010
+579 42 1.86777e+010
+149 2 1.86537e+010
+477 221 1.86277e+010
+479 458 1.86036e+010
+410 417 1.85815e+010
+103 392 1.85619e+010
+243 430 1.85494e+010
+438 454 1.85449e+010
+292 349 1.85369e+010
+101 113 1.85304e+010
+436 105 1.85219e+010
+153 75 1.85207e+010
+527 398 1.85207e+010
+8 43 1.85189e+010
+107 111 1.84942e+010
+344 329 1.83901e+010
+374 366 1.83499e+010
+469 302 1.83317e+010
+454 47 1.83312e+010
+41 395 1.83098e+010
+200 415 1.83076e+010
+62 439 1.83055e+010
+209 187 1.8277e+010
+420 140 1.8271e+010
+109 77 1.8254e+010
+572 405 1.82433e+010
+237 149 1.82215e+010
+411 183 1.82146e+010
+225 51 1.81876e+010
+342 297 1.81846e+010
+115 130 1.81586e+010
+62 164 1.81388e+010
+479 263 1.81273e+010
+549 281 1.81198e+010
+569 183 1.80837e+010
+460 356 1.808e+010
+214 161 1.80218e+010
+119 54 1.79794e+010
+371 190 1.79663e+010
+258 107 1.79409e+010
+407 106 1.79336e+010
+260 457 1.79164e+010
+214 132 1.79085e+010
+246 172 1.79076e+010
+140 428 1.78948e+010
+210 21 1.78929e+010
+124 93 1.78822e+010
+54 389 1.77985e+010
+200 110 1.77867e+010
+350 86 1.77251e+010
+440 468 1.77018e+010
+137 138 1.76888e+010
+281 311 1.76536e+010
+87 395 1.75821e+010
+166 126 1.7581e+010
+232 101 1.75749e+010
+258 349 1.7544e+010
+406 199 1.75314e+010
+557 302 1.75173e+010
+544 175 1.75147e+010
+201 317 1.74751e+010
+230 112 1.74221e+010
+347 119 1.74166e+010
+469 140 1.73959e+010
+226 121 1.73864e+010
+212 94 1.73789e+010
+450 91 1.73603e+010
+198 28 1.73522e+010
+461 102 1.73321e+010
+374 144 1.73216e+010
+81 40 1.73155e+010
+409 337 1.72891e+010
+353 424 1.72552e+010
+277 238 1.72493e+010
+570 59 1.72483e+010
+39 82 1.72461e+010
+358 282 1.72371e+010
+38 254 1.72146e+010
+258 200 1.71517e+010
+433 241 1.71171e+010
+584 37 1.70959e+010
+483 326 1.70885e+010
+400 199 1.70871e+010
+393 184 1.70846e+010
+90 399 1.70795e+010
+266 111 1.70586e+010
+24 185 1.7047e+010
+208 308 1.702e+010
+68 304 1.70182e+010
+146 327 1.69893e+010
+435 87 1.69622e+010
+305 411 1.69445e+010
+274 313 1.69354e+010
+187 264 1.69072e+010
+454 418 1.6896e+010
+565 463 1.68957e+010
+571 268 1.68741e+010
+490 343 1.68482e+010
+472 211 1.68294e+010
+102 236 1.68048e+010
+303 444 1.67943e+010
+324 31 1.67823e+010
+375 282 1.67816e+010
+545 141 1.67725e+010
+95 359 1.6717e+010
+196 310 1.66993e+010
+313 447 1.66763e+010
+263 401 1.664e+010
+253 147 1.66364e+010
+563 178 1.66132e+010
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_3_5.txt b/test_data/harriscorners/hc_msc_5.00_0.15_3_5.txt
new file mode 100644
index 0000000..6293837
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_3_5.txt
@@ -0,0 +1,1603 @@
+1602
+273 366 1.03858e+012
+122 43 9.43959e+011
+330 128 7.81711e+011
+420 181 7.62046e+011
+84 78 7.4066e+011
+448 297 7.33463e+011
+298 53 7.27697e+011
+214 73 6.97482e+011
+237 19 6.86312e+011
+134 214 6.70817e+011
+272 291 6.68358e+011
+199 18 6.67754e+011
+246 94 6.65694e+011
+485 59 6.49721e+011
+436 67 6.48386e+011
+553 40 6.47487e+011
+175 94 6.43601e+011
+387 178 6.25761e+011
+125 364 6.1605e+011
+507 122 6.13473e+011
+395 318 6.08429e+011
+544 168 6.07178e+011
+447 397 6.00073e+011
+400 262 5.93597e+011
+124 254 5.91885e+011
+425 321 5.8891e+011
+303 182 5.86818e+011
+33 137 5.83375e+011
+253 139 5.58292e+011
+124 198 5.57708e+011
+184 35 5.51281e+011
+65 235 5.50484e+011
+262 441 5.3871e+011
+77 257 5.33267e+011
+302 176 5.29753e+011
+137 209 5.28544e+011
+257 385 5.23807e+011
+222 38 5.22534e+011
+160 143 5.17429e+011
+90 198 5.12305e+011
+48 27 5.11262e+011
+393 143 5.0707e+011
+242 203 5.05173e+011
+55 29 5.04045e+011
+207 224 5.03916e+011
+294 15 4.96819e+011
+363 401 4.96682e+011
+344 9 4.86838e+011
+325 88 4.86587e+011
+360 295 4.83138e+011
+543 365 4.80161e+011
+82 28 4.78084e+011
+543 15 4.76715e+011
+418 8 4.75979e+011
+207 435 4.6989e+011
+456 282 4.69045e+011
+514 76 4.67605e+011
+523 264 4.66568e+011
+301 165 4.66397e+011
+412 256 4.66215e+011
+344 338 4.64985e+011
+131 36 4.6034e+011
+449 218 4.5769e+011
+390 58 4.54325e+011
+282 117 4.52687e+011
+30 8 4.48264e+011
+104 62 4.47021e+011
+225 182 4.46868e+011
+447 263 4.43206e+011
+317 335 4.40347e+011
+78 2 4.39515e+011
+101 222 4.36833e+011
+360 335 4.34819e+011
+65 319 4.34407e+011
+285 297 4.32564e+011
+166 241 4.31838e+011
+48 98 4.31676e+011
+238 91 4.31184e+011
+209 55 4.28632e+011
+174 312 4.21507e+011
+196 57 4.1893e+011
+281 112 4.17668e+011
+141 183 4.1557e+011
+465 393 4.12699e+011
+311 150 4.12493e+011
+65 343 4.08438e+011
+498 159 4.08252e+011
+124 185 4.07536e+011
+261 297 4.07314e+011
+36 145 4.07292e+011
+383 162 4.06814e+011
+427 118 4.04419e+011
+545 58 4.02138e+011
+325 164 4.00403e+011
+418 164 3.9947e+011
+508 18 3.98737e+011
+512 342 3.97353e+011
+143 310 3.97089e+011
+511 167 3.93619e+011
+359 167 3.91162e+011
+542 209 3.88336e+011
+433 147 3.8725e+011
+562 224 3.87039e+011
+276 182 3.86994e+011
+245 143 3.86457e+011
+244 165 3.805e+011
+453 204 3.80371e+011
+379 69 3.78181e+011
+389 140 3.72939e+011
+5 46 3.7286e+011
+211 438 3.7241e+011
+510 173 3.72303e+011
+312 76 3.71404e+011
+268 53 3.71127e+011
+543 216 3.7112e+011
+261 222 3.67218e+011
+478 181 3.6644e+011
+468 237 3.65916e+011
+404 121 3.65781e+011
+86 255 3.63986e+011
+60 184 3.63558e+011
+33 99 3.62376e+011
+116 44 3.6155e+011
+529 24 3.60692e+011
+47 220 3.60467e+011
+529 183 3.58587e+011
+459 263 3.57831e+011
+484 338 3.57384e+011
+451 339 3.56297e+011
+100 79 3.5493e+011
+366 7 3.54322e+011
+78 80 3.5261e+011
+201 313 3.511e+011
+138 172 3.49358e+011
+113 345 3.46847e+011
+241 71 3.46469e+011
+512 98 3.45819e+011
+127 164 3.4565e+011
+37 63 3.45124e+011
+131 26 3.43377e+011
+364 200 3.43142e+011
+364 251 3.41754e+011
+58 74 3.4076e+011
+377 318 3.40129e+011
+83 135 3.39823e+011
+106 39 3.37731e+011
+320 225 3.36827e+011
+347 179 3.3592e+011
+102 360 3.35268e+011
+496 119 3.34527e+011
+509 1 3.33243e+011
+36 176 3.31887e+011
+528 104 3.31515e+011
+163 277 3.31134e+011
+71 147 3.29476e+011
+546 41 3.27813e+011
+59 219 3.27181e+011
+480 82 3.2701e+011
+139 203 3.26386e+011
+423 45 3.26376e+011
+308 371 3.26095e+011
+112 213 3.26084e+011
+525 199 3.25335e+011
+552 384 3.23493e+011
+390 48 3.23064e+011
+266 295 3.22698e+011
+509 455 3.21147e+011
+354 320 3.20076e+011
+31 270 3.20023e+011
+138 110 3.19824e+011
+386 221 3.1865e+011
+233 199 3.16623e+011
+164 20 3.16136e+011
+217 208 3.15341e+011
+467 124 3.09602e+011
+159 183 3.09307e+011
+511 220 3.08225e+011
+412 45 3.07548e+011
+176 106 3.07475e+011
+36 299 3.07447e+011
+313 84 3.06677e+011
+527 99 3.06542e+011
+382 5 3.05338e+011
+109 240 3.05208e+011
+225 420 3.04668e+011
+110 135 3.04343e+011
+372 83 3.02607e+011
+395 261 3.01079e+011
+152 223 3.01034e+011
+317 165 3.0101e+011
+506 164 2.99669e+011
+465 197 2.98716e+011
+573 141 2.98537e+011
+364 257 2.98361e+011
+555 181 2.98257e+011
+251 12 2.97766e+011
+484 179 2.97388e+011
+283 402 2.9724e+011
+321 313 2.96154e+011
+388 10 2.92956e+011
+113 392 2.91688e+011
+75 237 2.90917e+011
+276 352 2.90566e+011
+211 185 2.90175e+011
+488 265 2.89662e+011
+262 165 2.89386e+011
+283 72 2.89089e+011
+183 138 2.88697e+011
+424 261 2.88172e+011
+142 324 2.8817e+011
+163 96 2.88105e+011
+156 94 2.87929e+011
+527 360 2.87364e+011
+214 58 2.87239e+011
+478 15 2.84978e+011
+305 193 2.84318e+011
+151 307 2.84268e+011
+230 36 2.84216e+011
+113 3 2.83074e+011
+525 172 2.82036e+011
+221 150 2.81971e+011
+327 141 2.79424e+011
+170 18 2.79238e+011
+449 402 2.79129e+011
+318 384 2.79011e+011
+524 20 2.78469e+011
+160 111 2.78191e+011
+10 102 2.78064e+011
+30 237 2.77724e+011
+486 358 2.77e+011
+566 61 2.76744e+011
+537 139 2.76444e+011
+62 60 2.75612e+011
+278 366 2.74411e+011
+569 39 2.7437e+011
+475 261 2.73925e+011
+407 352 2.73863e+011
+350 338 2.73767e+011
+544 3 2.73506e+011
+222 16 2.73301e+011
+130 217 2.72867e+011
+131 1 2.69156e+011
+254 75 2.68712e+011
+271 278 2.67763e+011
+559 19 2.67715e+011
+207 450 2.67636e+011
+88 148 2.67338e+011
+502 143 2.67267e+011
+125 260 2.6671e+011
+373 162 2.66377e+011
+188 181 2.66254e+011
+273 296 2.6463e+011
+297 420 2.64572e+011
+174 239 2.64386e+011
+223 220 2.6383e+011
+176 259 2.63679e+011
+192 172 2.62973e+011
+175 113 2.62664e+011
+343 122 2.6225e+011
+362 395 2.60511e+011
+260 235 2.60261e+011
+372 117 2.60218e+011
+40 217 2.59686e+011
+154 236 2.59349e+011
+537 393 2.5877e+011
+306 363 2.58373e+011
+49 151 2.57805e+011
+92 214 2.57293e+011
+522 123 2.56155e+011
+277 138 2.56061e+011
+292 121 2.55216e+011
+510 79 2.55006e+011
+330 106 2.54977e+011
+76 8 2.54416e+011
+186 215 2.53984e+011
+183 401 2.52683e+011
+252 423 2.51913e+011
+79 270 2.51858e+011
+524 347 2.51319e+011
+62 371 2.50521e+011
+541 41 2.50509e+011
+222 115 2.492e+011
+24 62 2.48919e+011
+51 289 2.48884e+011
+463 27 2.47846e+011
+387 126 2.46845e+011
+109 58 2.4546e+011
+293 26 2.45332e+011
+146 160 2.44901e+011
+267 15 2.44321e+011
+480 299 2.43989e+011
+264 201 2.43118e+011
+498 65 2.42992e+011
+430 320 2.42868e+011
+412 5 2.42041e+011
+417 84 2.41639e+011
+578 50 2.41499e+011
+374 240 2.41013e+011
+273 71 2.40446e+011
+345 276 2.40396e+011
+163 213 2.4027e+011
+276 217 2.39864e+011
+281 48 2.39416e+011
+234 160 2.38654e+011
+387 326 2.38484e+011
+424 337 2.38345e+011
+164 208 2.38266e+011
+442 22 2.38089e+011
+272 167 2.37981e+011
+434 397 2.37882e+011
+167 326 2.37716e+011
+477 5 2.3716e+011
+191 145 2.37093e+011
+326 427 2.37061e+011
+209 154 2.36926e+011
+133 74 2.36897e+011
+260 71 2.36303e+011
+423 398 2.3626e+011
+401 183 2.35729e+011
+534 267 2.35107e+011
+541 123 2.34776e+011
+454 83 2.34431e+011
+519 202 2.3415e+011
+298 69 2.3373e+011
+269 242 2.33271e+011
+364 181 2.33102e+011
+448 139 2.33023e+011
+273 131 2.32931e+011
+542 132 2.3286e+011
+324 148 2.32798e+011
+63 133 2.32197e+011
+575 126 2.32094e+011
+157 73 2.31451e+011
+386 243 2.3134e+011
+418 439 2.30854e+011
+360 260 2.29883e+011
+286 164 2.29858e+011
+380 337 2.29811e+011
+372 69 2.29762e+011
+395 159 2.29071e+011
+511 128 2.28637e+011
+225 295 2.2833e+011
+265 31 2.28179e+011
+362 130 2.28026e+011
+333 90 2.27673e+011
+191 277 2.26993e+011
+216 145 2.26938e+011
+182 111 2.25789e+011
+148 397 2.25773e+011
+436 182 2.25528e+011
+258 89 2.25187e+011
+209 20 2.24957e+011
+579 16 2.24883e+011
+280 371 2.2469e+011
+267 130 2.24114e+011
+510 141 2.23454e+011
+404 338 2.22901e+011
+346 350 2.21603e+011
+92 292 2.20759e+011
+276 392 2.20427e+011
+547 161 2.20364e+011
+332 295 2.20354e+011
+539 96 2.19298e+011
+330 10 2.19132e+011
+344 165 2.19086e+011
+539 458 2.18791e+011
+57 5 2.18113e+011
+164 358 2.1789e+011
+271 63 2.17809e+011
+278 144 2.17632e+011
+230 292 2.17489e+011
+78 474 2.17321e+011
+48 133 2.17292e+011
+175 1 2.16304e+011
+302 215 2.15873e+011
+102 235 2.1582e+011
+255 151 2.15615e+011
+171 201 2.15604e+011
+235 346 2.14947e+011
+516 347 2.14757e+011
+381 26 2.14181e+011
+68 46 2.13673e+011
+216 279 2.13523e+011
+339 473 2.12906e+011
+242 58 2.12786e+011
+368 143 2.1273e+011
+44 62 2.12701e+011
+72 96 2.12694e+011
+116 76 2.1262e+011
+172 40 2.12527e+011
+79 196 2.12476e+011
+274 52 2.11948e+011
+332 202 2.11736e+011
+441 240 2.117e+011
+138 98 2.11187e+011
+327 182 2.10812e+011
+135 129 2.10552e+011
+151 114 2.10476e+011
+249 313 2.10437e+011
+186 108 2.10047e+011
+451 373 2.10009e+011
+350 145 2.0973e+011
+28 30 2.0949e+011
+358 241 2.08625e+011
+576 179 2.0854e+011
+176 186 2.082e+011
+206 158 2.0763e+011
+25 200 2.0702e+011
+186 170 2.06794e+011
+84 477 2.06517e+011
+406 81 2.06415e+011
+96 449 2.05814e+011
+47 11 2.05321e+011
+441 98 2.04315e+011
+520 182 2.03993e+011
+549 183 2.03513e+011
+425 377 2.03199e+011
+507 60 2.03155e+011
+161 238 2.03018e+011
+379 107 2.02119e+011
+480 165 2.01838e+011
+557 246 2.01814e+011
+533 21 2.01249e+011
+398 356 2.01199e+011
+84 2 2.00872e+011
+214 124 2.0064e+011
+418 283 1.99934e+011
+413 99 1.9954e+011
+489 182 1.99184e+011
+444 452 1.98775e+011
+287 51 1.98122e+011
+228 130 1.97959e+011
+561 321 1.97841e+011
+446 352 1.97279e+011
+355 268 1.96974e+011
+181 394 1.96954e+011
+536 244 1.96591e+011
+365 299 1.95443e+011
+511 203 1.95428e+011
+203 294 1.95173e+011
+336 391 1.95027e+011
+104 4 1.94962e+011
+359 317 1.94002e+011
+358 10 1.93527e+011
+307 89 1.93273e+011
+487 24 1.93261e+011
+55 66 1.91485e+011
+233 261 1.91459e+011
+191 330 1.91346e+011
+265 446 1.90957e+011
+193 16 1.90799e+011
+473 203 1.9074e+011
+414 21 1.90313e+011
+580 80 1.90309e+011
+58 289 1.90297e+011
+281 222 1.90151e+011
+163 74 1.90116e+011
+247 220 1.90101e+011
+185 20 1.89618e+011
+221 177 1.89408e+011
+185 201 1.89321e+011
+184 344 1.89252e+011
+196 131 1.89223e+011
+436 338 1.88696e+011
+140 394 1.88583e+011
+357 220 1.8855e+011
+377 6 1.88489e+011
+85 181 1.88236e+011
+474 63 1.88163e+011
+301 264 1.87959e+011
+49 159 1.87764e+011
+343 463 1.87422e+011
+109 98 1.8731e+011
+286 343 1.87225e+011
+479 451 1.87e+011
+304 157 1.85761e+011
+298 136 1.85431e+011
+266 71 1.85384e+011
+42 24 1.85242e+011
+314 161 1.85073e+011
+3 155 1.84921e+011
+123 272 1.84558e+011
+162 126 1.84411e+011
+134 237 1.84408e+011
+284 241 1.84169e+011
+112 41 1.8403e+011
+412 65 1.83588e+011
+476 341 1.83486e+011
+6 65 1.83459e+011
+286 262 1.82945e+011
+269 93 1.82379e+011
+536 121 1.82287e+011
+190 218 1.82174e+011
+45 82 1.82104e+011
+62 253 1.81929e+011
+405 376 1.8186e+011
+433 111 1.81832e+011
+364 354 1.81668e+011
+324 341 1.81276e+011
+314 222 1.81189e+011
+363 408 1.80912e+011
+204 203 1.80892e+011
+150 152 1.80601e+011
+168 56 1.80371e+011
+297 331 1.80217e+011
+492 139 1.80102e+011
+410 24 1.79882e+011
+203 308 1.798e+011
+36 201 1.79364e+011
+235 73 1.79333e+011
+296 296 1.7929e+011
+95 477 1.78825e+011
+387 283 1.78455e+011
+390 297 1.7843e+011
+278 191 1.78239e+011
+119 95 1.77819e+011
+467 41 1.77544e+011
+191 205 1.77364e+011
+541 164 1.77e+011
+344 263 1.7673e+011
+111 264 1.76199e+011
+119 60 1.75599e+011
+354 127 1.75558e+011
+225 51 1.75509e+011
+161 169 1.75153e+011
+130 428 1.74728e+011
+498 224 1.74676e+011
+563 159 1.73686e+011
+452 102 1.73357e+011
+142 2 1.73322e+011
+95 148 1.73275e+011
+476 21 1.72958e+011
+90 376 1.72733e+011
+405 199 1.72409e+011
+44 474 1.72145e+011
+554 202 1.71974e+011
+196 76 1.71801e+011
+5 9 1.71002e+011
+38 168 1.70773e+011
+239 350 1.70649e+011
+273 222 1.69855e+011
+14 203 1.69597e+011
+260 329 1.69288e+011
+227 72 1.69255e+011
+571 122 1.68973e+011
+534 161 1.68416e+011
+352 163 1.68237e+011
+486 4 1.68201e+011
+45 148 1.68186e+011
+53 221 1.67976e+011
+559 80 1.67531e+011
+178 274 1.6752e+011
+517 43 1.67408e+011
+245 293 1.66556e+011
+572 332 1.66424e+011
+12 80 1.66412e+011
+95 6 1.66381e+011
+220 126 1.66318e+011
+100 198 1.66154e+011
+289 396 1.65928e+011
+509 301 1.65808e+011
+220 290 1.65439e+011
+289 183 1.65361e+011
+402 167 1.65045e+011
+460 339 1.64897e+011
+529 365 1.64649e+011
+368 337 1.64492e+011
+209 420 1.6438e+011
+309 7 1.64359e+011
+39 239 1.64228e+011
+510 362 1.63969e+011
+39 309 1.63945e+011
+94 94 1.63794e+011
+507 83 1.63434e+011
+278 334 1.63341e+011
+57 146 1.6327e+011
+108 45 1.63101e+011
+321 29 1.63095e+011
+191 360 1.63066e+011
+393 353 1.62944e+011
+395 22 1.62767e+011
+282 393 1.62572e+011
+408 183 1.62512e+011
+120 110 1.6213e+011
+318 202 1.62126e+011
+452 162 1.62116e+011
+571 162 1.61788e+011
+372 393 1.6177e+011
+259 34 1.61587e+011
+371 90 1.6148e+011
+524 223 1.61294e+011
+60 203 1.61263e+011
+432 123 1.61083e+011
+154 198 1.60481e+011
+560 272 1.60408e+011
+280 385 1.60397e+011
+571 450 1.60236e+011
+262 392 1.60045e+011
+424 62 1.60009e+011
+178 122 1.60007e+011
+461 123 1.59868e+011
+365 106 1.59693e+011
+220 100 1.59482e+011
+200 166 1.59466e+011
+510 180 1.59204e+011
+446 7 1.58991e+011
+407 65 1.5895e+011
+297 273 1.58695e+011
+539 79 1.58646e+011
+354 106 1.5854e+011
+474 245 1.58251e+011
+326 295 1.58247e+011
+449 445 1.57725e+011
+230 149 1.57195e+011
+525 39 1.56919e+011
+595 18 1.5688e+011
+408 430 1.56818e+011
+249 192 1.56766e+011
+166 149 1.56109e+011
+481 172 1.55977e+011
+129 238 1.5595e+011
+388 97 1.55944e+011
+368 1 1.5578e+011
+178 18 1.55541e+011
+125 76 1.55344e+011
+186 101 1.55269e+011
+529 31 1.55067e+011
+439 124 1.55019e+011
+150 1 1.54251e+011
+413 298 1.54232e+011
+445 128 1.54048e+011
+537 261 1.54029e+011
+57 254 1.53898e+011
+210 136 1.53823e+011
+354 25 1.53673e+011
+307 448 1.5343e+011
+418 258 1.53221e+011
+264 250 1.52557e+011
+573 405 1.52081e+011
+437 304 1.52031e+011
+411 355 1.51913e+011
+495 456 1.51897e+011
+462 100 1.51666e+011
+329 257 1.51529e+011
+263 141 1.51311e+011
+144 16 1.51166e+011
+166 115 1.51e+011
+516 19 1.50989e+011
+531 142 1.50775e+011
+454 47 1.50616e+011
+387 167 1.5038e+011
+118 425 1.50316e+011
+316 239 1.5008e+011
+165 110 1.49192e+011
+26 132 1.49165e+011
+526 382 1.49067e+011
+80 40 1.49029e+011
+93 255 1.48721e+011
+116 129 1.48676e+011
+57 364 1.48401e+011
+259 273 1.48264e+011
+352 11 1.48228e+011
+89 259 1.48188e+011
+270 106 1.48064e+011
+539 405 1.48029e+011
+512 262 1.47716e+011
+401 104 1.47464e+011
+345 108 1.47268e+011
+238 220 1.47232e+011
+562 149 1.47116e+011
+65 275 1.46791e+011
+501 42 1.46533e+011
+270 144 1.46528e+011
+49 256 1.46266e+011
+529 161 1.46198e+011
+465 355 1.46077e+011
+69 129 1.46054e+011
+68 337 1.45081e+011
+393 216 1.44974e+011
+53 42 1.4485e+011
+262 402 1.44717e+011
+18 342 1.44682e+011
+146 79 1.4419e+011
+95 422 1.439e+011
+395 105 1.43793e+011
+343 198 1.43716e+011
+95 59 1.43642e+011
+565 18 1.43634e+011
+53 359 1.43582e+011
+299 190 1.43485e+011
+321 104 1.43335e+011
+578 43 1.42619e+011
+382 411 1.42546e+011
+550 223 1.41957e+011
+485 162 1.41882e+011
+32 66 1.4149e+011
+471 421 1.41338e+011
+407 142 1.41333e+011
+227 259 1.41073e+011
+281 35 1.40833e+011
+192 140 1.40597e+011
+361 370 1.39801e+011
+289 88 1.39769e+011
+293 312 1.3948e+011
+446 123 1.39425e+011
+382 180 1.3935e+011
+71 409 1.39222e+011
+411 471 1.39163e+011
+302 170 1.39119e+011
+246 206 1.3891e+011
+388 420 1.38651e+011
+460 162 1.3859e+011
+290 348 1.38428e+011
+469 141 1.38308e+011
+422 315 1.3829e+011
+32 218 1.38102e+011
+485 377 1.37903e+011
+163 311 1.37898e+011
+346 296 1.37617e+011
+73 186 1.37367e+011
+281 419 1.37054e+011
+222 239 1.36871e+011
+123 161 1.36833e+011
+78 60 1.36578e+011
+506 177 1.36501e+011
+380 119 1.36272e+011
+87 369 1.36228e+011
+50 62 1.36078e+011
+478 241 1.3604e+011
+183 184 1.35553e+011
+85 214 1.35237e+011
+299 106 1.35088e+011
+286 34 1.34901e+011
+525 422 1.34717e+011
+322 119 1.34599e+011
+93 20 1.34531e+011
+49 235 1.3446e+011
+376 353 1.34455e+011
+236 150 1.34445e+011
+40 354 1.34385e+011
+191 314 1.34353e+011
+506 381 1.34083e+011
+334 28 1.34034e+011
+130 255 1.33883e+011
+337 428 1.3367e+011
+37 268 1.33416e+011
+171 448 1.33044e+011
+195 111 1.33018e+011
+3 382 1.32873e+011
+58 102 1.32868e+011
+510 135 1.32828e+011
+18 64 1.32651e+011
+482 46 1.32607e+011
+497 283 1.32463e+011
+111 169 1.32458e+011
+138 146 1.32451e+011
+148 22 1.32359e+011
+247 347 1.3235e+011
+186 309 1.32321e+011
+157 308 1.3229e+011
+162 254 1.32289e+011
+599 364 1.32131e+011
+109 325 1.31765e+011
+333 369 1.31744e+011
+242 420 1.31576e+011
+212 32 1.31489e+011
+308 440 1.30944e+011
+279 129 1.3087e+011
+503 362 1.30647e+011
+421 140 1.30436e+011
+180 165 1.30067e+011
+30 256 1.29805e+011
+448 285 1.29746e+011
+447 376 1.29602e+011
+258 161 1.29458e+011
+448 22 1.29237e+011
+87 340 1.29031e+011
+206 163 1.2863e+011
+129 113 1.28615e+011
+297 182 1.28556e+011
+332 241 1.28477e+011
+110 358 1.28458e+011
+331 166 1.28101e+011
+280 134 1.28014e+011
+164 286 1.27889e+011
+384 89 1.27871e+011
+471 212 1.27849e+011
+443 320 1.27834e+011
+274 209 1.2781e+011
+304 53 1.27708e+011
+107 108 1.27596e+011
+21 218 1.27572e+011
+453 359 1.26764e+011
+584 38 1.26537e+011
+393 65 1.26517e+011
+384 258 1.26506e+011
+405 163 1.26476e+011
+329 320 1.26268e+011
+588 161 1.2623e+011
+177 57 1.26007e+011
+461 43 1.25875e+011
+376 182 1.2581e+011
+471 83 1.25733e+011
+325 13 1.25712e+011
+460 357 1.25681e+011
+570 182 1.25611e+011
+437 150 1.25552e+011
+215 174 1.25448e+011
+514 381 1.25407e+011
+500 265 1.25363e+011
+109 147 1.25149e+011
+191 123 1.25015e+011
+374 300 1.24753e+011
+382 46 1.24721e+011
+64 218 1.24671e+011
+247 106 1.24659e+011
+38 138 1.24624e+011
+126 330 1.24568e+011
+188 264 1.24451e+011
+448 165 1.2417e+011
+199 29 1.24104e+011
+446 243 1.23882e+011
+483 288 1.23677e+011
+287 111 1.23295e+011
+382 147 1.2297e+011
+391 322 1.22942e+011
+41 11 1.22863e+011
+366 86 1.22705e+011
+33 111 1.22616e+011
+246 181 1.22516e+011
+288 125 1.22366e+011
+114 178 1.22359e+011
+535 93 1.22334e+011
+332 415 1.22269e+011
+249 387 1.22235e+011
+451 324 1.2189e+011
+549 379 1.21843e+011
+267 287 1.21782e+011
+95 124 1.21714e+011
+515 120 1.21629e+011
+436 320 1.21572e+011
+250 91 1.21545e+011
+120 446 1.21379e+011
+392 166 1.21018e+011
+366 95 1.21002e+011
+167 315 1.20972e+011
+243 189 1.20615e+011
+91 276 1.20516e+011
+107 428 1.20256e+011
+359 53 1.20144e+011
+517 58 1.19957e+011
+360 161 1.19737e+011
+200 327 1.19442e+011
+333 356 1.19418e+011
+545 91 1.1901e+011
+309 354 1.18822e+011
+34 31 1.18576e+011
+12 113 1.18541e+011
+423 122 1.18422e+011
+93 79 1.18415e+011
+152 130 1.18221e+011
+172 53 1.17949e+011
+346 239 1.17923e+011
+501 102 1.17857e+011
+478 205 1.17511e+011
+448 63 1.17271e+011
+188 136 1.16769e+011
+572 59 1.16679e+011
+228 287 1.16634e+011
+246 257 1.1659e+011
+370 107 1.16581e+011
+354 295 1.16553e+011
+171 165 1.16511e+011
+310 298 1.16503e+011
+388 334 1.16473e+011
+339 12 1.16453e+011
+278 295 1.16348e+011
+252 183 1.16322e+011
+53 450 1.15896e+011
+122 123 1.15809e+011
+369 30 1.15677e+011
+239 194 1.15471e+011
+49 166 1.15254e+011
+387 318 1.15211e+011
+484 155 1.15068e+011
+421 80 1.14565e+011
+162 202 1.14316e+011
+569 203 1.14079e+011
+490 58 1.13862e+011
+433 381 1.13804e+011
+391 221 1.13802e+011
+195 164 1.13665e+011
+251 163 1.13659e+011
+66 213 1.13638e+011
+88 230 1.13332e+011
+184 118 1.13296e+011
+523 79 1.13279e+011
+485 140 1.1313e+011
+201 393 1.13029e+011
+229 91 1.12935e+011
+229 346 1.12851e+011
+265 260 1.12823e+011
+516 2 1.12714e+011
+559 61 1.12705e+011
+509 102 1.12663e+011
+446 144 1.12568e+011
+3 165 1.1254e+011
+196 342 1.12417e+011
+198 194 1.12356e+011
+12 433 1.12236e+011
+11 72 1.12222e+011
+181 105 1.12127e+011
+113 205 1.11968e+011
+328 26 1.11653e+011
+187 325 1.11564e+011
+362 64 1.1156e+011
+133 148 1.11439e+011
+334 281 1.11425e+011
+489 43 1.11345e+011
+59 40 1.11171e+011
+204 347 1.11159e+011
+18 236 1.11123e+011
+129 308 1.1107e+011
+375 224 1.11007e+011
+301 244 1.10921e+011
+481 440 1.10893e+011
+251 248 1.10888e+011
+234 32 1.10792e+011
+54 303 1.10539e+011
+266 147 1.10513e+011
+357 282 1.10366e+011
+418 414 1.10281e+011
+115 218 1.10149e+011
+576 165 1.10091e+011
+562 142 1.10078e+011
+255 405 1.10004e+011
+257 249 1.10002e+011
+434 277 1.09681e+011
+134 411 1.09608e+011
+230 265 1.09571e+011
+150 231 1.09489e+011
+494 79 1.09358e+011
+361 214 1.09229e+011
+394 183 1.08836e+011
+487 204 1.08819e+011
+69 304 1.08522e+011
+354 424 1.08476e+011
+525 186 1.08471e+011
+162 31 1.08372e+011
+163 349 1.08353e+011
+389 133 1.0818e+011
+433 239 1.08174e+011
+120 54 1.08035e+011
+304 206 1.07853e+011
+57 333 1.07765e+011
+484 20 1.07751e+011
+329 66 1.07662e+011
+10 218 1.07573e+011
+357 143 1.07495e+011
+294 269 1.07088e+011
+568 422 1.06813e+011
+182 132 1.06773e+011
+438 455 1.06618e+011
+319 186 1.06571e+011
+202 318 1.0652e+011
+160 138 1.06446e+011
+343 37 1.06417e+011
+588 309 1.06351e+011
+485 235 1.06295e+011
+243 102 1.0621e+011
+136 323 1.06208e+011
+141 21 1.06137e+011
+427 183 1.06099e+011
+247 326 1.0599e+011
+77 29 1.05714e+011
+414 144 1.05714e+011
+568 382 1.05538e+011
+534 40 1.05505e+011
+547 439 1.05256e+011
+498 341 1.04768e+011
+309 33 1.04738e+011
+412 82 1.04603e+011
+302 132 1.04553e+011
+85 60 1.04458e+011
+432 269 1.04341e+011
+165 379 1.04271e+011
+510 114 1.0397e+011
+274 77 1.03936e+011
+310 335 1.03817e+011
+527 120 1.03599e+011
+46 407 1.03568e+011
+519 164 1.03382e+011
+483 325 1.03351e+011
+346 46 1.03299e+011
+229 14 1.03099e+011
+541 253 1.02722e+011
+386 294 1.02513e+011
+69 419 1.02368e+011
+504 262 1.01991e+011
+258 108 1.01962e+011
+28 221 1.01918e+011
+540 221 1.01899e+011
+396 46 1.01678e+011
+402 219 1.01582e+011
+39 287 1.01474e+011
+201 128 1.01298e+011
+283 211 1.01128e+011
+211 163 1.01124e+011
+345 371 1.0101e+011
+75 128 1.00912e+011
+43 122 1.00365e+011
+99 257 1.00281e+011
+110 183 1.00163e+011
+618 181 9.99343e+010
+565 463 9.99031e+010
+605 121 9.97144e+010
+131 393 9.96973e+010
+411 415 9.96161e+010
+170 131 9.9557e+010
+424 7 9.94988e+010
+153 56 9.9492e+010
+529 135 9.94478e+010
+147 90 9.9437e+010
+4 235 9.94101e+010
+141 115 9.93341e+010
+434 45 9.93083e+010
+339 220 9.92593e+010
+216 106 9.90813e+010
+419 362 9.87384e+010
+261 456 9.86817e+010
+538 182 9.84955e+010
+513 324 9.84057e+010
+434 86 9.83815e+010
+275 109 9.82941e+010
+123 83 9.82677e+010
+334 103 9.80714e+010
+399 200 9.80698e+010
+434 62 9.80134e+010
+341 313 9.78997e+010
+319 95 9.78915e+010
+177 330 9.76926e+010
+223 87 9.7601e+010
+541 380 9.75975e+010
+6 151 9.7549e+010
+46 90 9.73341e+010
+276 426 9.7199e+010
+497 59 9.71244e+010
+214 425 9.71206e+010
+264 311 9.6948e+010
+10 475 9.69356e+010
+298 400 9.68805e+010
+484 222 9.67285e+010
+280 439 9.67118e+010
+95 285 9.64931e+010
+375 144 9.63763e+010
+499 459 9.63652e+010
+419 97 9.61569e+010
+374 151 9.61139e+010
+438 25 9.60811e+010
+544 142 9.59764e+010
+87 356 9.5705e+010
+173 417 9.56726e+010
+323 134 9.55027e+010
+520 425 9.54895e+010
+349 87 9.54575e+010
+191 350 9.53695e+010
+108 259 9.52984e+010
+302 141 9.52827e+010
+501 82 9.51194e+010
+556 265 9.51192e+010
+583 141 9.50528e+010
+401 318 9.47954e+010
+430 89 9.46781e+010
+494 472 9.44384e+010
+244 212 9.44231e+010
+335 50 9.43164e+010
+147 125 9.42901e+010
+182 312 9.4218e+010
+316 100 9.41907e+010
+309 266 9.38708e+010
+275 316 9.38602e+010
+69 28 9.38449e+010
+250 260 9.36444e+010
+234 295 9.36272e+010
+375 125 9.35154e+010
+152 446 9.34466e+010
+84 236 9.34228e+010
+311 260 9.33416e+010
+470 23 9.33013e+010
+394 337 9.32739e+010
+157 163 9.32683e+010
+373 75 9.32301e+010
+425 102 9.30578e+010
+148 193 9.30295e+010
+197 91 9.28487e+010
+528 397 9.2682e+010
+143 143 9.259e+010
+391 450 9.25543e+010
+82 100 9.24159e+010
+64 362 9.23673e+010
+293 147 9.22789e+010
+478 221 9.22521e+010
+378 163 9.21858e+010
+27 117 9.21636e+010
+523 141 9.21363e+010
+147 131 9.19304e+010
+70 476 9.1854e+010
+116 359 9.18253e+010
+76 111 9.17328e+010
+401 144 9.15885e+010
+556 303 9.13846e+010
+39 82 9.12496e+010
+204 17 9.12492e+010
+242 281 9.11884e+010
+204 398 9.11424e+010
+539 128 9.10425e+010
+544 246 9.09648e+010
+135 135 9.0814e+010
+248 365 9.07484e+010
+314 447 9.05867e+010
+451 125 9.0539e+010
+359 448 9.05358e+010
+433 159 9.03385e+010
+116 289 8.99796e+010
+177 201 8.99317e+010
+482 124 8.97928e+010
+16 213 8.97644e+010
+42 298 8.97637e+010
+259 229 8.94992e+010
+464 266 8.91801e+010
+469 207 8.8926e+010
+255 80 8.87997e+010
+329 214 8.8777e+010
+335 143 8.87529e+010
+109 76 8.87103e+010
+191 187 8.86686e+010
+188 303 8.85867e+010
+317 460 8.85037e+010
+45 356 8.84953e+010
+576 311 8.84054e+010
+399 28 8.83721e+010
+242 384 8.82976e+010
+119 115 8.79487e+010
+218 315 8.7841e+010
+484 86 8.7662e+010
+131 476 8.76328e+010
+432 26 8.75038e+010
+113 306 8.74425e+010
+132 376 8.73896e+010
+284 199 8.73891e+010
+386 450 8.72135e+010
+158 102 8.68861e+010
+486 242 8.68154e+010
+510 348 8.67229e+010
+50 378 8.67177e+010
+112 339 8.66273e+010
+159 152 8.65985e+010
+505 199 8.64425e+010
+255 191 8.63491e+010
+55 171 8.63459e+010
+259 370 8.62992e+010
+36 470 8.61625e+010
+205 416 8.61196e+010
+507 41 8.59867e+010
+148 137 8.58439e+010
+240 134 8.5842e+010
+462 140 8.58046e+010
+299 254 8.56322e+010
+91 113 8.56287e+010
+85 110 8.56056e+010
+407 105 8.56005e+010
+208 143 8.55719e+010
+465 115 8.54912e+010
+123 342 8.54828e+010
+547 283 8.52798e+010
+570 325 8.52526e+010
+88 310 8.49595e+010
+450 197 8.48135e+010
+545 263 8.47838e+010
+400 132 8.47749e+010
+83 146 8.46998e+010
+533 346 8.46432e+010
+188 256 8.45955e+010
+497 70 8.44566e+010
+92 444 8.44265e+010
+362 452 8.44055e+010
+579 57 8.43257e+010
+27 45 8.43235e+010
+524 162 8.4315e+010
+276 203 8.41862e+010
+123 412 8.41421e+010
+451 417 8.40582e+010
+454 118 8.37822e+010
+232 273 8.37675e+010
+414 264 8.36543e+010
+302 405 8.34711e+010
+245 172 8.34527e+010
+573 422 8.33663e+010
+169 123 8.3353e+010
+297 410 8.33325e+010
+49 458 8.33175e+010
+149 201 8.32381e+010
+532 341 8.32367e+010
+26 271 8.30741e+010
+447 133 8.30011e+010
+246 34 8.29464e+010
+450 178 8.29283e+010
+161 61 8.28741e+010
+338 63 8.28429e+010
+408 15 8.28295e+010
+408 335 8.27913e+010
+183 382 8.27251e+010
+473 356 8.25636e+010
+44 251 8.25538e+010
+512 287 8.23493e+010
+64 153 8.22456e+010
+63 9 8.19586e+010
+162 37 8.18125e+010
+456 1 8.18036e+010
+279 87 8.1735e+010
+41 183 8.17143e+010
+538 103 8.17115e+010
+161 120 8.14965e+010
+216 403 8.14718e+010
+183 56 8.14422e+010
+450 437 8.12785e+010
+206 234 8.12753e+010
+435 93 8.12177e+010
+56 234 8.10666e+010
+351 364 8.08059e+010
+413 244 8.07181e+010
+70 373 8.06674e+010
+103 261 8.0622e+010
+587 18 8.03979e+010
+405 7 8.0335e+010
+493 164 8.03262e+010
+490 469 8.02532e+010
+478 399 7.99356e+010
+43 339 7.98998e+010
+218 351 7.95972e+010
+421 89 7.95405e+010
+576 91 7.93711e+010
+176 140 7.9358e+010
+95 260 7.92717e+010
+161 326 7.9069e+010
+186 94 7.90583e+010
+99 151 7.90546e+010
+562 200 7.90084e+010
+156 318 7.89667e+010
+252 146 7.89589e+010
+395 242 7.89295e+010
+275 196 7.88946e+010
+214 93 7.88252e+010
+198 148 7.87704e+010
+89 398 7.86107e+010
+267 417 7.85936e+010
+343 354 7.83947e+010
+197 466 7.82501e+010
+121 148 7.82353e+010
+416 250 7.82014e+010
+145 343 7.81821e+010
+399 92 7.81767e+010
+13 237 7.80787e+010
+532 172 7.80697e+010
+301 85 7.80574e+010
+354 326 7.80107e+010
+591 104 7.79618e+010
+69 389 7.79075e+010
+579 202 7.78778e+010
+106 28 7.7682e+010
+140 316 7.76695e+010
+440 468 7.76602e+010
+24 254 7.76436e+010
+201 7 7.76432e+010
+143 98 7.76086e+010
+399 412 7.74486e+010
+323 370 7.73966e+010
+63 448 7.72254e+010
+586 345 7.70831e+010
+488 52 7.70724e+010
+139 215 7.69068e+010
+119 5 7.69062e+010
+511 208 7.68717e+010
+231 177 7.67804e+010
+517 141 7.6776e+010
+129 125 7.67458e+010
+266 191 7.66703e+010
+444 204 7.66081e+010
+326 101 7.65964e+010
+359 28 7.65708e+010
+227 201 7.64921e+010
+575 99 7.64685e+010
+306 147 7.64565e+010
+102 57 7.63422e+010
+62 229 7.63192e+010
+480 405 7.60778e+010
+213 131 7.58293e+010
+312 131 7.56984e+010
+390 205 7.56601e+010
+143 237 7.56174e+010
+103 98 7.55444e+010
+180 360 7.53774e+010
+212 396 7.52114e+010
+46 204 7.52014e+010
+88 286 7.50373e+010
+388 3 7.49212e+010
+421 291 7.48619e+010
+80 406 7.46386e+010
+259 145 7.46069e+010
+578 326 7.4442e+010
+266 79 7.42603e+010
+480 457 7.40714e+010
+51 336 7.3983e+010
+104 181 7.381e+010
+196 1 7.36537e+010
+209 316 7.35748e+010
+222 107 7.34367e+010
+513 402 7.34222e+010
+568 222 7.33859e+010
+350 372 7.33074e+010
+344 306 7.32257e+010
+575 135 7.30029e+010
+147 451 7.29677e+010
+101 295 7.29586e+010
+151 76 7.29453e+010
+137 122 7.29228e+010
+163 248 7.29063e+010
+116 276 7.2877e+010
+176 344 7.26947e+010
+421 298 7.25626e+010
+53 389 7.24996e+010
+164 432 7.23963e+010
+225 147 7.23108e+010
+214 290 7.21497e+010
+401 43 7.21346e+010
+289 308 7.20127e+010
+362 49 7.18201e+010
+471 268 7.17165e+010
+229 365 7.17034e+010
+498 139 7.14247e+010
+445 86 7.13843e+010
+426 24 7.13763e+010
+469 434 7.11623e+010
+242 357 7.09312e+010
+417 471 7.09273e+010
+378 88 7.09233e+010
+104 76 7.09195e+010
+230 111 7.08339e+010
+400 17 7.0805e+010
+484 366 7.08034e+010
+344 187 7.07755e+010
+56 180 7.06455e+010
+528 437 7.06455e+010
+70 259 7.06223e+010
+353 238 7.04594e+010
+65 307 7.03727e+010
+195 83 7.03058e+010
+214 450 7.02572e+010
+200 109 7.01417e+010
+133 63 7.00486e+010
+368 161 6.99433e+010
+336 94 6.98314e+010
+95 367 6.98138e+010
+303 109 6.97885e+010
+267 118 6.97215e+010
+243 429 6.96522e+010
+39 115 6.9597e+010
+332 395 6.95871e+010
+345 140 6.9543e+010
+58 109 6.94975e+010
+558 462 6.94901e+010
+101 445 6.94075e+010
+521 323 6.93344e+010
+21 131 6.92398e+010
+168 415 6.92312e+010
+194 200 6.91953e+010
+383 103 6.91862e+010
+474 238 6.9179e+010
+160 133 6.91598e+010
+199 143 6.91597e+010
+570 270 6.90396e+010
+124 172 6.89593e+010
+242 53 6.88969e+010
+523 290 6.88607e+010
+194 326 6.88361e+010
+22 48 6.86445e+010
+487 118 6.85908e+010
+133 93 6.8521e+010
+157 40 6.85092e+010
+434 225 6.84999e+010
+344 331 6.84751e+010
+317 404 6.84059e+010
+384 65 6.84023e+010
+232 190 6.83199e+010
+138 178 6.8295e+010
+209 308 6.82486e+010
+33 336 6.8092e+010
+269 314 6.80769e+010
+273 254 6.80764e+010
+530 177 6.79223e+010
+438 82 6.7829e+010
+278 166 6.77818e+010
+290 11 6.77371e+010
+5 33 6.76661e+010
+343 27 6.76612e+010
+264 283 6.75677e+010
+182 156 6.75292e+010
+293 199 6.75049e+010
+369 463 6.7373e+010
+96 38 6.7315e+010
+186 375 6.72582e+010
+155 345 6.71941e+010
+154 397 6.71351e+010
+82 274 6.70104e+010
+467 136 6.69622e+010
+73 164 6.68601e+010
+27 150 6.68377e+010
+354 341 6.68148e+010
+119 223 6.68001e+010
+336 183 6.66284e+010
+256 102 6.65677e+010
+408 262 6.65544e+010
+87 93 6.64897e+010
+498 241 6.6309e+010
+310 138 6.61552e+010
+117 263 6.60939e+010
+473 452 6.60494e+010
+210 96 6.6019e+010
+468 319 6.55971e+010
+221 431 6.55749e+010
+512 108 6.5435e+010
+176 325 6.53045e+010
+426 472 6.53029e+010
+135 21 6.51802e+010
+199 97 6.51708e+010
+463 185 6.49972e+010
+101 165 6.49264e+010
+532 114 6.49185e+010
+218 388 6.49129e+010
+345 321 6.48124e+010
+143 433 6.47745e+010
+401 80 6.47733e+010
+303 293 6.47367e+010
+511 369 6.46976e+010
+104 307 6.46488e+010
+78 218 6.46206e+010
+207 76 6.45303e+010
+227 122 6.44808e+010
+46 419 6.44676e+010
+325 109 6.44515e+010
+17 274 6.4414e+010
+222 215 6.43865e+010
+456 377 6.42878e+010
+50 146 6.42841e+010
+246 15 6.42579e+010
+589 349 6.39625e+010
+464 212 6.39517e+010
+386 356 6.39219e+010
+82 72 6.38562e+010
+68 56 6.38255e+010
+288 276 6.37962e+010
+544 85 6.37918e+010
+301 444 6.3781e+010
+602 275 6.37149e+010
+459 200 6.35686e+010
+585 59 6.35271e+010
+387 434 6.34895e+010
+33 39 6.34628e+010
+478 143 6.3371e+010
+18 247 6.33245e+010
+27 189 6.3302e+010
+203 39 6.32814e+010
+375 282 6.31118e+010
+100 30 6.30283e+010
+579 214 6.28995e+010
+261 317 6.27035e+010
+60 177 6.26868e+010
+289 248 6.26583e+010
+495 42 6.26506e+010
+414 220 6.2629e+010
+553 18 6.26286e+010
+64 28 6.24982e+010
+573 363 6.24172e+010
+282 310 6.23194e+010
+523 429 6.22715e+010
+251 239 6.21873e+010
+86 363 6.21798e+010
+37 254 6.21625e+010
+102 113 6.21085e+010
+309 173 6.20801e+010
+278 236 6.20376e+010
+324 258 6.19392e+010
+518 360 6.19298e+010
+412 160 6.17803e+010
+123 216 6.17152e+010
+259 349 6.16564e+010
+290 140 6.1621e+010
+13 420 6.15565e+010
+282 265 6.13908e+010
+259 200 6.11712e+010
+458 394 6.11707e+010
+153 312 6.11538e+010
+502 419 6.11078e+010
+12 46 6.10855e+010
+216 249 6.1055e+010
+355 18 6.10461e+010
+266 110 6.10168e+010
+542 178 6.09404e+010
+467 108 6.09066e+010
+314 126 6.08643e+010
+331 221 6.08532e+010
+95 374 6.08297e+010
+250 400 6.07063e+010
+458 115 6.06658e+010
+192 240 6.06067e+010
+186 73 6.05984e+010
+359 361 6.05629e+010
+527 194 6.05607e+010
+381 450 6.04628e+010
+305 188 6.03167e+010
+520 242 6.0019e+010
+186 292 6.00106e+010
+366 244 5.99835e+010
+308 104 5.99771e+010
+82 153 5.99295e+010
+377 96 5.99245e+010
+435 104 5.97383e+010
+307 257 5.96789e+010
+401 425 5.94953e+010
+153 22 5.93884e+010
+305 398 5.93866e+010
+56 294 5.93506e+010
+250 320 5.93227e+010
+49 226 5.9319e+010
+26 168 5.91663e+010
+103 336 5.91154e+010
+167 39 5.90953e+010
+308 220 5.90748e+010
+263 239 5.90318e+010
+136 58 5.88498e+010
+557 365 5.88472e+010
+199 199 5.883e+010
+217 285 5.87947e+010
+11 178 5.86583e+010
+138 254 5.8557e+010
+404 30 5.85533e+010
+156 174 5.85034e+010
+162 91 5.84974e+010
+376 46 5.8431e+010
+209 404 5.83291e+010
+212 202 5.83178e+010
+152 90 5.83127e+010
+510 245 5.83056e+010
+397 137 5.82497e+010
+193 290 5.80803e+010
+281 124 5.79716e+010
+230 332 5.79175e+010
+220 327 5.787e+010
+468 302 5.78236e+010
+362 155 5.77529e+010
+437 387 5.77517e+010
+35 44 5.75903e+010
+464 227 5.74082e+010
+445 414 5.73558e+010
+76 147 5.73174e+010
+244 400 5.73108e+010
+113 374 5.72632e+010
+248 395 5.72162e+010
+306 412 5.72129e+010
+294 374 5.71698e+010
+155 298 5.70571e+010
+200 405 5.70319e+010
+156 78 5.70057e+010
+521 91 5.69217e+010
+195 211 5.68365e+010
+297 316 5.67139e+010
+533 62 5.67058e+010
+32 80 5.66537e+010
+181 293 5.6616e+010
+250 53 5.66032e+010
+521 189 5.6523e+010
+94 407 5.65224e+010
+472 102 5.64653e+010
+516 83 5.64347e+010
+220 421 5.64249e+010
+47 478 5.64061e+010
+115 253 5.63916e+010
+20 317 5.63654e+010
+111 111 5.63117e+010
+567 359 5.62677e+010
+566 177 5.62374e+010
+275 95 5.60509e+010
+543 444 5.59354e+010
+84 170 5.59231e+010
+284 78 5.59145e+010
+205 29 5.58667e+010
+61 439 5.58127e+010
+164 364 5.57919e+010
+275 122 5.57358e+010
+455 437 5.56948e+010
+3 110 5.56616e+010
+141 427 5.55141e+010
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_3_7.txt b/test_data/harriscorners/hc_msc_5.00_0.15_3_7.txt
new file mode 100644
index 0000000..8f166ec
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_3_7.txt
@@ -0,0 +1,1695 @@
+1694
+121 44 3.00111e+012
+274 367 2.74009e+012
+421 180 2.53537e+012
+401 263 2.3162e+012
+331 128 2.28505e+012
+135 214 2.15244e+012
+299 53 2.04517e+012
+246 94 2.01927e+012
+83 77 1.97487e+012
+424 322 1.9503e+012
+238 19 1.94856e+012
+81 29 1.92336e+012
+271 291 1.92071e+012
+199 18 1.75559e+012
+437 68 1.73882e+012
+75 257 1.7191e+012
+458 279 1.7175e+012
+542 14 1.70482e+012
+282 113 1.68526e+012
+55 30 1.67721e+012
+80 4 1.63066e+012
+165 240 1.59462e+012
+510 124 1.57588e+012
+210 436 1.54354e+012
+361 294 1.52489e+012
+130 26 1.486e+012
+482 178 1.47515e+012
+302 184 1.44458e+012
+151 223 1.43906e+012
+512 78 1.4284e+012
+213 58 1.4021e+012
+460 264 1.39875e+012
+390 142 1.39784e+012
+345 339 1.36153e+012
+561 225 1.35675e+012
+160 144 1.35424e+012
+396 317 1.34272e+012
+138 204 1.33086e+012
+484 58 1.32695e+012
+510 166 1.32636e+012
+183 34 1.32318e+012
+293 16 1.32167e+012
+174 95 1.32066e+012
+543 167 1.31259e+012
+343 8 1.30545e+012
+224 181 1.30253e+012
+260 297 1.29945e+012
+208 222 1.29339e+012
+125 255 1.29313e+012
+34 138 1.29025e+012
+102 222 1.28989e+012
+258 384 1.27852e+012
+361 395 1.25263e+012
+554 39 1.23548e+012
+130 37 1.22671e+012
+484 338 1.21752e+012
+528 102 1.20902e+012
+115 43 1.20586e+012
+421 165 1.20225e+012
+36 145 1.19701e+012
+419 8 1.19542e+012
+413 255 1.19381e+012
+124 185 1.19175e+012
+244 166 1.18873e+012
+158 74 1.17875e+012
+263 442 1.15975e+012
+544 58 1.15505e+012
+30 8 1.15454e+012
+65 235 1.15433e+012
+79 80 1.15012e+012
+497 160 1.14793e+012
+127 164 1.13872e+012
+528 24 1.13699e+012
+302 176 1.13681e+012
+126 364 1.1271e+012
+90 197 1.12249e+012
+242 203 1.11534e+012
+359 166 1.11153e+012
+215 71 1.10708e+012
+302 166 1.10641e+012
+448 399 1.10582e+012
+313 148 1.10418e+012
+4 46 1.09981e+012
+44 26 1.08591e+012
+326 165 1.08554e+012
+386 178 1.08267e+012
+450 338 1.07609e+012
+47 98 1.07151e+012
+390 59 1.0699e+012
+241 70 1.06961e+012
+224 37 1.06807e+012
+252 139 1.06766e+012
+326 89 1.05807e+012
+112 344 1.05799e+012
+34 267 1.0526e+012
+359 334 1.04669e+012
+450 204 1.04345e+012
+319 225 1.04285e+012
+542 365 1.04225e+012
+282 49 1.03888e+012
+507 19 1.03728e+012
+104 61 1.02725e+012
+111 169 1.02619e+012
+448 296 1.02303e+012
+511 2 1.02043e+012
+175 111 1.01515e+012
+383 162 1.01383e+012
+223 420 1.01307e+012
+202 313 1.01172e+012
+383 5 1.00903e+012
+319 314 1.00862e+012
+276 182 1.0056e+012
+208 55 1.00541e+012
+359 129 1.00345e+012
+391 296 9.9867e+011
+547 162 9.98094e+011
+209 21 9.9377e+011
+464 395 9.92293e+011
+552 383 9.89748e+011
+352 321 9.87703e+011
+403 120 9.87049e+011
+378 68 9.86639e+011
+373 84 9.8561e+011
+358 319 9.84082e+011
+83 136 9.82918e+011
+448 261 9.78032e+011
+155 235 9.75416e+011
+481 84 9.75121e+011
+467 238 9.72139e+011
+513 342 9.64977e+011
+269 53 9.64672e+011
+362 258 9.62916e+011
+123 199 9.59224e+011
+432 147 9.566e+011
+404 183 9.54566e+011
+542 214 9.53666e+011
+503 1 9.46258e+011
+265 296 9.45997e+011
+55 290 9.43352e+011
+144 311 9.4138e+011
+206 449 9.39657e+011
+107 39 9.36774e+011
+132 74 9.33892e+011
+387 220 9.31659e+011
+428 117 9.31422e+011
+326 141 9.3095e+011
+87 254 9.2995e+011
+313 84 9.29081e+011
+46 221 9.226e+011
+283 402 9.21484e+011
+260 220 9.20784e+011
+64 342 9.19693e+011
+469 123 9.19459e+011
+364 253 9.19117e+011
+365 6 9.18525e+011
+274 132 9.13975e+011
+424 45 9.11024e+011
+143 323 9.07076e+011
+152 308 9.01676e+011
+34 100 9.01119e+011
+162 110 8.99382e+011
+412 45 8.99146e+011
+189 218 8.92897e+011
+163 215 8.92498e+011
+61 217 8.92448e+011
+60 184 8.90961e+011
+166 98 8.90397e+011
+174 41 8.89402e+011
+389 11 8.87189e+011
+328 296 8.84649e+011
+64 319 8.83354e+011
+140 182 8.80418e+011
+528 183 8.79139e+011
+232 199 8.79051e+011
+280 365 8.75207e+011
+256 152 8.70837e+011
+546 41 8.68591e+011
+455 283 8.6835e+011
+112 391 8.67389e+011
+41 217 8.62034e+011
+249 143 8.60589e+011
+294 27 8.60464e+011
+56 6 8.51695e+011
+174 312 8.50026e+011
+475 261 8.48079e+011
+562 478 8.43036e+011
+156 1 8.42127e+011
+317 165 8.40977e+011
+485 359 8.401e+011
+111 136 8.38415e+011
+195 58 8.35935e+011
+516 75 8.35746e+011
+365 300 8.3544e+011
+177 105 8.33975e+011
+508 454 8.31995e+011
+272 280 8.26095e+011
+512 219 8.25834e+011
+464 198 8.25095e+011
+384 10 8.24435e+011
+12 217 8.20592e+011
+217 145 8.16945e+011
+36 298 8.15088e+011
+495 118 8.13129e+011
+234 161 8.12715e+011
+145 161 8.09219e+011
+36 63 8.08903e+011
+49 29 8.08572e+011
+431 318 8.08351e+011
+31 235 8.04414e+011
+523 265 8.03313e+011
+170 240 8.03018e+011
+50 289 8.02557e+011
+317 336 7.99196e+011
+329 258 7.97306e+011
+236 347 7.94361e+011
+229 37 7.94052e+011
+312 75 7.9349e+011
+261 236 7.93021e+011
+505 165 7.92452e+011
+512 97 7.88971e+011
+538 457 7.87947e+011
+245 207 7.87883e+011
+436 396 7.87441e+011
+169 18 7.86033e+011
+36 174 7.83556e+011
+294 122 7.80162e+011
+413 6 7.79861e+011
+192 143 7.78043e+011
+340 338 7.76048e+011
+101 360 7.75817e+011
+423 336 7.75443e+011
+447 218 7.73463e+011
+526 197 7.73267e+011
+522 346 7.70938e+011
+392 47 7.69568e+011
+158 96 7.63691e+011
+276 353 7.63386e+011
+153 197 7.61488e+011
+247 219 7.59719e+011
+388 164 7.57854e+011
+250 12 7.55207e+011
+392 218 7.54636e+011
+24 62 7.53723e+011
+211 184 7.53598e+011
+498 66 7.50247e+011
+168 326 7.5021e+011
+363 403 7.50058e+011
+514 203 7.48534e+011
+229 293 7.47533e+011
+251 423 7.44326e+011
+477 19 7.44135e+011
+182 137 7.41657e+011
+379 338 7.40704e+011
+57 75 7.36466e+011
+190 171 7.35927e+011
+389 323 7.3307e+011
+29 30 7.31571e+011
+528 360 7.31337e+011
+273 219 7.29306e+011
+222 218 7.29207e+011
+191 278 7.28685e+011
+538 138 7.26237e+011
+227 186 7.26184e+011
+110 58 7.24232e+011
+409 354 7.23223e+011
+302 215 7.22306e+011
+490 139 7.19772e+011
+299 105 7.1941e+011
+376 317 7.15133e+011
+175 187 7.14838e+011
+134 132 7.14253e+011
+407 82 7.12144e+011
+544 4 7.0979e+011
+548 182 7.07165e+011
+101 79 7.06725e+011
+190 108 7.06677e+011
+520 201 7.05631e+011
+367 142 7.04709e+011
+462 27 7.03105e+011
+479 14 7.02908e+011
+145 392 6.97663e+011
+211 144 6.97266e+011
+541 41 6.95762e+011
+580 16 6.93764e+011
+418 87 6.92229e+011
+253 74 6.91376e+011
+90 258 6.90058e+011
+223 112 6.88627e+011
+175 260 6.87901e+011
+188 182 6.86127e+011
+442 239 6.84648e+011
+275 137 6.82933e+011
+359 219 6.82661e+011
+49 150 6.80406e+011
+535 266 6.80185e+011
+343 122 6.77882e+011
+298 274 6.77563e+011
+462 42 6.7547e+011
+89 149 6.75126e+011
+36 219 6.74818e+011
+453 85 6.73716e+011
+509 203 6.66335e+011
+568 42 6.66126e+011
+218 208 6.65534e+011
+510 139 6.61001e+011
+343 108 6.60593e+011
+342 166 6.60046e+011
+558 19 6.58869e+011
+346 276 6.58701e+011
+164 209 6.57281e+011
+186 202 6.5644e+011
+541 124 6.56386e+011
+392 160 6.5615e+011
+134 97 6.55721e+011
+222 151 6.55213e+011
+278 219 6.55129e+011
+471 421 6.54279e+011
+487 263 6.52939e+011
+137 171 6.4971e+011
+372 69 6.4796e+011
+159 181 6.45858e+011
+380 107 6.43955e+011
+477 204 6.40746e+011
+372 161 6.39155e+011
+322 146 6.3741e+011
+215 125 6.36683e+011
+414 22 6.3414e+011
+78 271 6.34006e+011
+510 84 6.32921e+011
+162 115 6.32411e+011
+331 105 6.30442e+011
+108 98 6.30298e+011
+278 390 6.30167e+011
+157 91 6.29408e+011
+104 3 6.28973e+011
+534 184 6.28591e+011
+533 20 6.2826e+011
+256 147 6.28091e+011
+61 253 6.27921e+011
+190 360 6.26917e+011
+542 208 6.26034e+011
+102 236 6.25643e+011
+97 449 6.2525e+011
+441 22 6.2518e+011
+266 16 6.24051e+011
+232 263 6.23922e+011
+385 295 6.2338e+011
+191 204 6.23113e+011
+435 182 6.21775e+011
+139 109 6.19022e+011
+266 30 6.1864e+011
+184 110 6.1856e+011
+263 402 6.1824e+011
+272 64 6.17975e+011
+248 314 6.17837e+011
+261 141 6.16365e+011
+61 203 6.1615e+011
+450 374 6.15456e+011
+516 182 6.13716e+011
+377 120 6.11457e+011
+223 14 6.10445e+011
+54 222 6.09964e+011
+518 58 6.08936e+011
+509 174 6.08334e+011
+269 132 6.07452e+011
+437 304 6.07392e+011
+61 134 6.06114e+011
+485 45 6.05469e+011
+385 244 6.05268e+011
+346 179 6.04312e+011
+373 392 6.04165e+011
+527 347 6.02678e+011
+540 98 6.02254e+011
+579 81 6.0182e+011
+296 421 6.00908e+011
+134 127 5.99957e+011
+357 11 5.9995e+011
+184 399 5.99629e+011
+296 331 5.99339e+011
+110 179 5.9665e+011
+328 11 5.96378e+011
+573 140 5.95986e+011
+268 243 5.93815e+011
+356 259 5.93402e+011
+100 198 5.92979e+011
+170 200 5.92913e+011
+274 72 5.91357e+011
+478 5 5.89565e+011
+205 295 5.89356e+011
+78 40 5.89351e+011
+463 280 5.88675e+011
+480 165 5.87847e+011
+277 187 5.85345e+011
+175 20 5.84875e+011
+448 124 5.84594e+011
+436 124 5.83306e+011
+114 216 5.82154e+011
+210 74 5.82128e+011
+544 457 5.8205e+011
+85 1 5.8168e+011
+284 299 5.80778e+011
+300 205 5.80476e+011
+577 53 5.8038e+011
+161 169 5.79816e+011
+566 61 5.79029e+011
+75 9 5.78274e+011
+504 143 5.76502e+011
+493 81 5.76144e+011
+389 21 5.76098e+011
+499 225 5.75493e+011
+207 156 5.73883e+011
+43 81 5.73647e+011
+165 278 5.7332e+011
+517 346 5.70191e+011
+524 20 5.68971e+011
+145 7 5.68692e+011
+48 12 5.68399e+011
+575 178 5.66933e+011
+345 349 5.66397e+011
+475 244 5.65531e+011
+162 252 5.64727e+011
+120 115 5.63957e+011
+449 140 5.6299e+011
+447 8 5.62895e+011
+424 63 5.62808e+011
+387 128 5.62401e+011
+331 202 5.62037e+011
+310 370 5.612e+011
+108 240 5.60869e+011
+185 343 5.60337e+011
+56 145 5.59739e+011
+237 91 5.59637e+011
+168 115 5.59284e+011
+259 165 5.58493e+011
+218 105 5.57806e+011
+178 273 5.56757e+011
+536 393 5.5659e+011
+423 261 5.56297e+011
+334 91 5.55261e+011
+516 42 5.54639e+011
+524 171 5.54461e+011
+418 438 5.54446e+011
+85 61 5.54444e+011
+523 122 5.53902e+011
+247 386 5.53344e+011
+360 141 5.52903e+011
+287 262 5.52646e+011
+160 137 5.525e+011
+165 357 5.51683e+011
+298 138 5.51053e+011
+209 419 5.50852e+011
+304 190 5.49312e+011
+167 313 5.48574e+011
+374 240 5.48134e+011
+287 51 5.47983e+011
+71 150 5.47915e+011
+38 240 5.4739e+011
+412 100 5.45901e+011
+385 88 5.45625e+011
+218 98 5.44901e+011
+554 181 5.42794e+011
+11 204 5.42548e+011
+228 260 5.42066e+011
+273 166 5.41879e+011
+195 132 5.41254e+011
+191 350 5.39625e+011
+119 128 5.39594e+011
+279 143 5.39556e+011
+147 398 5.39174e+011
+510 129 5.39147e+011
+397 163 5.37076e+011
+448 166 5.36803e+011
+404 376 5.36331e+011
+276 331 5.36093e+011
+66 216 5.35387e+011
+413 65 5.33967e+011
+241 57 5.33795e+011
+446 21 5.33008e+011
+63 59 5.3275e+011
+365 201 5.32547e+011
+305 439 5.32358e+011
+358 241 5.30017e+011
+205 163 5.2976e+011
+176 240 5.29645e+011
+250 193 5.2953e+011
+489 2 5.27802e+011
+282 71 5.26894e+011
+372 118 5.26062e+011
+363 357 5.24735e+011
+152 112 5.2458e+011
+467 140 5.24554e+011
+78 474 5.23458e+011
+310 6 5.21831e+011
+471 202 5.20978e+011
+280 129 5.18227e+011
+364 180 5.16029e+011
+261 71 5.1553e+011
+67 253 5.15318e+011
+353 338 5.14681e+011
+271 145 5.14144e+011
+563 323 5.13471e+011
+537 93 5.13394e+011
+576 125 5.12802e+011
+172 55 5.12724e+011
+306 195 5.12051e+011
+322 104 5.11524e+011
+83 476 5.10776e+011
+261 202 5.10697e+011
+395 22 5.10334e+011
+438 160 5.09987e+011
+139 99 5.07962e+011
+162 126 5.07763e+011
+86 181 5.07082e+011
+129 218 5.0679e+011
+415 164 5.06715e+011
+405 339 5.05503e+011
+56 66 5.05316e+011
+531 141 5.0524e+011
+147 78 5.04363e+011
+540 406 5.03926e+011
+509 179 5.02817e+011
+61 371 5.02368e+011
+164 73 5.0116e+011
+480 300 5.00297e+011
+344 264 5.00139e+011
+93 214 4.99908e+011
+11 81 4.98868e+011
+401 166 4.97429e+011
+397 356 4.96901e+011
+80 195 4.96146e+011
+199 166 4.9601e+011
+289 124 4.95169e+011
+392 17 4.93638e+011
+521 183 4.93382e+011
+541 133 4.91999e+011
+6 64 4.91798e+011
+149 130 4.91073e+011
+116 77 4.91066e+011
+270 108 4.9054e+011
+418 283 4.9014e+011
+91 290 4.89905e+011
+328 182 4.89261e+011
+90 376 4.88949e+011
+166 107 4.86962e+011
+180 395 4.86927e+011
+572 405 4.86631e+011
+42 10 4.84428e+011
+114 2 4.8388e+011
+196 126 4.83629e+011
+325 426 4.83561e+011
+434 112 4.83464e+011
+319 386 4.83293e+011
+129 78 4.82735e+011
+270 93 4.82516e+011
+250 90 4.82476e+011
+7 9 4.82284e+011
+35 31 4.81634e+011
+238 164 4.81584e+011
+280 191 4.81292e+011
+228 130 4.80816e+011
+10 102 4.8081e+011
+288 397 4.79859e+011
+66 276 4.76906e+011
+207 201 4.76262e+011
+124 271 4.75958e+011
+148 449 4.75845e+011
+563 160 4.74694e+011
+290 88 4.74432e+011
+51 155 4.7428e+011
+26 131 4.7388e+011
+452 102 4.73851e+011
+217 280 4.73778e+011
+102 164 4.73489e+011
+445 118 4.71673e+011
+273 316 4.71244e+011
+507 6 4.70422e+011
+33 110 4.69878e+011
+421 141 4.69527e+011
+480 451 4.68923e+011
+506 361 4.68915e+011
+402 143 4.68815e+011
+268 58 4.68554e+011
+484 375 4.67916e+011
+394 63 4.66605e+011
+96 423 4.65812e+011
+365 105 4.65426e+011
+95 197 4.65296e+011
+48 132 4.64881e+011
+31 67 4.641e+011
+194 215 4.63372e+011
+107 429 4.63143e+011
+298 296 4.62956e+011
+297 68 4.6262e+011
+60 40 4.62229e+011
+447 351 4.62067e+011
+524 187 4.61453e+011
+115 131 4.60655e+011
+512 362 4.59862e+011
+117 425 4.59663e+011
+468 42 4.59633e+011
+422 121 4.58775e+011
+145 16 4.58364e+011
+4 154 4.58207e+011
+306 364 4.57911e+011
+365 337 4.57755e+011
+88 368 4.57298e+011
+266 203 4.5675e+011
+40 355 4.56504e+011
+517 20 4.56152e+011
+135 147 4.55659e+011
+506 62 4.54368e+011
+371 89 4.5425e+011
+428 1 4.54161e+011
+25 201 4.53756e+011
+200 129 4.53511e+011
+276 110 4.53404e+011
+66 26 4.53279e+011
+513 46 4.52494e+011
+68 47 4.52375e+011
+1 383 4.52134e+011
+204 307 4.52096e+011
+488 183 4.51816e+011
+310 446 4.51406e+011
+265 249 4.50948e+011
+134 238 4.49746e+011
+422 399 4.48606e+011
+404 200 4.48477e+011
+74 96 4.47641e+011
+345 297 4.47104e+011
+455 162 4.46778e+011
+349 145 4.45568e+011
+258 90 4.43984e+011
+408 26 4.43795e+011
+84 148 4.43423e+011
+113 243 4.43322e+011
+437 240 4.43165e+011
+547 216 4.42401e+011
+164 150 4.41604e+011
+535 121 4.41495e+011
+306 90 4.41105e+011
+281 438 4.395e+011
+52 42 4.38962e+011
+407 429 4.38593e+011
+246 72 4.36421e+011
+53 358 4.35718e+011
+514 262 4.3557e+011
+573 330 4.35371e+011
+550 57 4.35061e+011
+463 101 4.35021e+011
+368 109 4.34546e+011
+195 329 4.34336e+011
+353 333 4.34097e+011
+223 433 4.33868e+011
+308 353 4.33409e+011
+239 219 4.32092e+011
+289 346 4.31337e+011
+534 160 4.31052e+011
+190 329 4.30669e+011
+265 74 4.30181e+011
+472 23 4.29452e+011
+332 355 4.29432e+011
+436 379 4.2928e+011
+575 15 4.29186e+011
+382 26 4.29121e+011
+362 65 4.28325e+011
+259 391 4.2829e+011
+291 335 4.28205e+011
+31 218 4.28019e+011
+84 213 4.27677e+011
+325 341 4.27377e+011
+461 162 4.25692e+011
+437 338 4.25551e+011
+66 372 4.25517e+011
+300 264 4.25295e+011
+93 93 4.25282e+011
+250 165 4.24528e+011
+481 125 4.23432e+011
+43 150 4.22852e+011
+304 160 4.22528e+011
+285 164 4.22411e+011
+185 308 4.22133e+011
+237 134 4.22103e+011
+579 43 4.21548e+011
+190 136 4.21131e+011
+494 458 4.21007e+011
+346 239 4.20446e+011
+72 234 4.20396e+011
+559 244 4.20322e+011
+351 11 4.18367e+011
+189 313 4.18094e+011
+229 13 4.17252e+011
+12 114 4.16975e+011
+40 308 4.16606e+011
+120 58 4.15931e+011
+130 428 4.15417e+011
+249 260 4.13878e+011
+408 143 4.13512e+011
+399 106 4.13281e+011
+406 164 4.13261e+011
+283 124 4.13151e+011
+346 45 4.12032e+011
+268 68 4.11622e+011
+424 375 4.11365e+011
+443 124 4.1134e+011
+529 160 4.10983e+011
+523 79 4.10014e+011
+446 129 4.09505e+011
+93 60 4.09502e+011
+448 444 4.08799e+011
+196 90 4.08221e+011
+464 354 4.08047e+011
+594 19 4.07531e+011
+230 180 4.06364e+011
+475 62 4.06134e+011
+525 39 4.05449e+011
+149 151 4.04775e+011
+196 111 4.03971e+011
+41 182 4.03398e+011
+72 128 4.03316e+011
+452 45 4.0326e+011
+379 88 4.0215e+011
+97 363 4.02064e+011
+302 243 4.00603e+011
+458 339 4.00358e+011
+480 440 3.99669e+011
+179 121 3.98675e+011
+97 149 3.98342e+011
+165 179 3.97826e+011
+512 299 3.9736e+011
+483 288 3.97325e+011
+315 238 3.97036e+011
+236 74 3.9689e+011
+258 248 3.96055e+011
+211 136 3.95967e+011
+323 121 3.95911e+011
+68 476 3.95627e+011
+224 51 3.95062e+011
+46 355 3.947e+011
+570 121 3.94639e+011
+195 77 3.94152e+011
+149 1 3.94063e+011
+120 447 3.93881e+011
+386 282 3.93797e+011
+344 463 3.93455e+011
+375 352 3.93354e+011
+442 97 3.93172e+011
+444 452 3.93105e+011
+178 57 3.92898e+011
+47 162 3.92804e+011
+57 365 3.92152e+011
+122 95 3.91008e+011
+251 182 3.90973e+011
+264 390 3.90955e+011
+390 242 3.90802e+011
+210 34 3.90756e+011
+399 184 3.90619e+011
+107 29 3.9023e+011
+281 372 3.89974e+011
+502 43 3.89841e+011
+413 81 3.89084e+011
+232 125 3.89077e+011
+42 63 3.88569e+011
+523 99 3.8692e+011
+19 65 3.86036e+011
+72 187 3.85995e+011
+91 276 3.85507e+011
+391 118 3.84681e+011
+220 128 3.84573e+011
+333 242 3.8452e+011
+539 79 3.84459e+011
+432 276 3.84386e+011
+110 326 3.84008e+011
+557 463 3.83873e+011
+445 244 3.83716e+011
+285 241 3.83567e+011
+526 383 3.83417e+011
+544 247 3.83401e+011
+29 257 3.82959e+011
+540 182 3.81823e+011
+252 249 3.81127e+011
+561 271 3.81105e+011
+200 30 3.8106e+011
+283 195 3.80417e+011
+139 20 3.80026e+011
+235 150 3.79327e+011
+242 190 3.78436e+011
+135 179 3.78349e+011
+76 238 3.77785e+011
+244 293 3.77762e+011
+173 119 3.77571e+011
+413 298 3.76788e+011
+98 259 3.7657e+011
+76 30 3.75763e+011
+529 177 3.75287e+011
+572 162 3.74951e+011
+259 328 3.74713e+011
+108 76 3.7433e+011
+338 428 3.73711e+011
+290 311 3.73551e+011
+181 312 3.73e+011
+110 110 3.71761e+011
+359 53 3.70691e+011
+484 141 3.70278e+011
+87 144 3.69996e+011
+477 340 3.69934e+011
+59 100 3.69741e+011
+192 15 3.69521e+011
+259 107 3.69511e+011
+536 260 3.69387e+011
+317 103 3.68893e+011
+301 133 3.68845e+011
+148 90 3.6879e+011
+45 475 3.68318e+011
+468 208 3.68182e+011
+396 138 3.67185e+011
+185 167 3.66903e+011
+371 338 3.65541e+011
+119 110 3.65202e+011
+10 32 3.64988e+011
+354 144 3.6409e+011
+91 20 3.63807e+011
+282 211 3.63279e+011
+542 262 3.62847e+011
+48 235 3.62802e+011
+88 216 3.62747e+011
+451 438 3.61141e+011
+218 290 3.61108e+011
+320 30 3.60802e+011
+228 287 3.60042e+011
+186 102 3.59959e+011
+92 444 3.58827e+011
+212 162 3.58615e+011
+387 335 3.58575e+011
+253 386 3.58291e+011
+281 33 3.58081e+011
+362 315 3.57603e+011
+268 219 3.56723e+011
+412 416 3.56109e+011
+509 58 3.56086e+011
+283 395 3.55916e+011
+269 416 3.55856e+011
+335 392 3.53969e+011
+561 142 3.53321e+011
+511 134 3.53299e+011
+571 60 3.52766e+011
+280 418 3.5274e+011
+343 200 3.52726e+011
+123 125 3.52467e+011
+562 461 3.52457e+011
+451 120 3.52395e+011
+110 265 3.52388e+011
+333 66 3.51584e+011
+9 47 3.51358e+011
+529 270 3.51304e+011
+214 174 3.50615e+011
+483 204 3.49697e+011
+356 23 3.49215e+011
+329 25 3.49091e+011
+221 87 3.48464e+011
+488 25 3.47274e+011
+37 202 3.46948e+011
+186 2 3.4578e+011
+375 5 3.44837e+011
+349 125 3.44818e+011
+290 184 3.44816e+011
+323 14 3.44755e+011
+251 150 3.44429e+011
+306 359 3.43986e+011
+499 80 3.43964e+011
+130 112 3.43861e+011
+536 245 3.43202e+011
+138 311 3.43079e+011
+357 66 3.42948e+011
+411 263 3.42394e+011
+381 181 3.42342e+011
+354 269 3.42331e+011
+348 164 3.42141e+011
+384 257 3.42063e+011
+18 342 3.41765e+011
+215 94 3.41006e+011
+360 370 3.40403e+011
+47 255 3.40121e+011
+164 349 3.38954e+011
+397 46 3.38856e+011
+340 472 3.38171e+011
+566 144 3.37897e+011
+115 359 3.37831e+011
+558 79 3.37681e+011
+355 105 3.37531e+011
+247 107 3.36715e+011
+84 100 3.36431e+011
+524 424 3.3631e+011
+202 394 3.36198e+011
+165 286 3.35486e+011
+464 115 3.35329e+011
+277 210 3.3512e+011
+265 144 3.34503e+011
+248 399 3.34129e+011
+113 94 3.33724e+011
+52 451 3.33521e+011
+158 309 3.32959e+011
+388 419 3.3241e+011
+307 104 3.32312e+011
+367 245 3.32161e+011
+147 196 3.32122e+011
+76 110 3.30949e+011
+505 262 3.30681e+011
+135 322 3.30649e+011
+542 93 3.30213e+011
+331 413 3.30195e+011
+77 128 3.29442e+011
+375 224 3.29275e+011
+224 125 3.28656e+011
+84 110 3.28627e+011
+547 141 3.28165e+011
+247 366 3.27956e+011
+463 341 3.27609e+011
+450 324 3.27361e+011
+71 372 3.25943e+011
+27 118 3.25881e+011
+461 121 3.25875e+011
+360 159 3.2582e+011
+346 372 3.2575e+011
+227 72 3.25645e+011
+100 7 3.256e+011
+173 416 3.2536e+011
+219 314 3.25192e+011
+198 195 3.24677e+011
+495 473 3.23727e+011
+245 180 3.23568e+011
+437 277 3.23211e+011
+40 23 3.23152e+011
+122 82 3.2291e+011
+523 222 3.22294e+011
+494 59 3.21499e+011
+327 102 3.21432e+011
+182 96 3.20305e+011
+91 285 3.2015e+011
+569 382 3.20038e+011
+179 169 3.18427e+011
+153 192 3.17865e+011
+335 218 3.17018e+011
+286 215 3.17016e+011
+449 285 3.16652e+011
+512 116 3.16645e+011
+426 103 3.16263e+011
+376 342 3.15915e+011
+515 122 3.15914e+011
+169 130 3.15815e+011
+173 343 3.15738e+011
+76 60 3.1529e+011
+242 421 3.14975e+011
+86 339 3.14817e+011
+434 82 3.14754e+011
+326 29 3.14575e+011
+566 180 3.14413e+011
+69 338 3.14377e+011
+289 118 3.14097e+011
+497 282 3.13993e+011
+222 101 3.13869e+011
+450 62 3.13835e+011
+550 223 3.13744e+011
+248 346 3.13651e+011
+115 277 3.12904e+011
+329 216 3.12752e+011
+573 40 3.11579e+011
+534 78 3.11572e+011
+383 102 3.11425e+011
+501 363 3.10991e+011
+356 283 3.09816e+011
+310 265 3.09158e+011
+382 147 3.09039e+011
+150 233 3.09018e+011
+192 186 3.09006e+011
+12 421 3.08615e+011
+515 380 3.08283e+011
+352 425 3.07497e+011
+181 20 3.06863e+011
+9 234 3.06836e+011
+319 187 3.06817e+011
+539 241 3.06627e+011
+593 101 3.06485e+011
+530 96 3.06147e+011
+541 380 3.06006e+011
+178 330 3.05615e+011
+170 167 3.05297e+011
+391 205 3.0475e+011
+188 301 3.04339e+011
+282 386 3.04054e+011
+566 18 3.03878e+011
+87 311 3.03339e+011
+245 256 3.03328e+011
+38 82 3.03189e+011
+501 266 3.03165e+011
+394 104 3.03083e+011
+68 419 3.03004e+011
+160 61 3.02457e+011
+261 226 3.02361e+011
+263 284 3.01735e+011
+335 370 3.01654e+011
+188 265 3.01602e+011
+374 124 3.01598e+011
+391 354 3.01585e+011
+528 30 3.01558e+011
+11 75 3.01452e+011
+3 234 3.01093e+011
+162 33 3.00902e+011
+471 212 3.00747e+011
+336 144 3.00618e+011
+104 258 3.00412e+011
+284 132 3.00258e+011
+137 59 2.99935e+011
+260 457 2.99692e+011
+124 341 2.99621e+011
+418 448 2.99565e+011
+570 451 2.98785e+011
+376 158 2.98303e+011
+323 133 2.98246e+011
+85 38 2.98244e+011
+576 134 2.97829e+011
+72 409 2.97605e+011
+303 141 2.97579e+011
+296 269 2.97388e+011
+481 171 2.9731e+011
+381 321 2.97237e+011
+454 116 2.96773e+011
+24 49 2.96439e+011
+430 62 2.96349e+011
+128 126 2.95788e+011
+237 196 2.95765e+011
+110 145 2.95564e+011
+151 135 2.95096e+011
+529 397 2.95032e+011
+272 208 2.94897e+011
+132 394 2.9486e+011
+285 343 2.94342e+011
+139 142 2.93886e+011
+390 135 2.93401e+011
+146 139 2.93316e+011
+444 205 2.93108e+011
+412 472 2.92605e+011
+576 166 2.92428e+011
+214 400 2.92064e+011
+254 9 2.92041e+011
+275 204 2.91258e+011
+184 376 2.91152e+011
+569 422 2.90545e+011
+44 339 2.8994e+011
+42 119 2.89306e+011
+85 239 2.89195e+011
+375 146 2.89169e+011
+369 94 2.88849e+011
+143 177 2.88702e+011
+170 124 2.87649e+011
+391 53 2.87423e+011
+392 336 2.87076e+011
+83 171 2.86947e+011
+293 146 2.8663e+011
+515 325 2.86513e+011
+155 57 2.86124e+011
+94 8 2.86122e+011
+243 281 2.86063e+011
+391 96 2.85915e+011
+516 163 2.8514e+011
+49 61 2.84772e+011
+306 146 2.83882e+011
+404 105 2.83123e+011
+191 122 2.82919e+011
+68 316 2.82583e+011
+190 127 2.82535e+011
+547 439 2.82529e+011
+497 43 2.82239e+011
+116 222 2.82151e+011
+400 27 2.8181e+011
+484 2 2.81806e+011
+100 445 2.81432e+011
+130 306 2.81406e+011
+419 412 2.812e+011
+299 256 2.81148e+011
+201 345 2.81118e+011
+26 44 2.80701e+011
+311 221 2.80506e+011
+168 58 2.80501e+011
+149 22 2.80462e+011
+183 116 2.79903e+011
+259 35 2.79748e+011
+104 307 2.79559e+011
+160 121 2.79167e+011
+450 416 2.79047e+011
+209 125 2.78198e+011
+247 418 2.78099e+011
+133 91 2.78039e+011
+421 298 2.77707e+011
+420 361 2.77305e+011
+122 160 2.7729e+011
+195 199 2.75975e+011
+32 45 2.75786e+011
+500 104 2.75746e+011
+170 451 2.75383e+011
+217 433 2.75252e+011
+45 408 2.75061e+011
+485 238 2.7468e+011
+494 340 2.74592e+011
+586 17 2.74214e+011
+218 420 2.73703e+011
+413 144 2.73601e+011
+402 220 2.73361e+011
+57 303 2.73184e+011
+368 30 2.73162e+011
+562 276 2.72742e+011
+518 141 2.72084e+011
+342 312 2.72036e+011
+55 172 2.72031e+011
+247 35 2.71522e+011
+478 143 2.71085e+011
+456 358 2.70913e+011
+186 290 2.70882e+011
+142 429 2.7077e+011
+181 1 2.7053e+011
+4 165 2.70365e+011
+335 29 2.69849e+011
+575 459 2.69831e+011
+527 137 2.6955e+011
+391 89 2.69353e+011
+94 367 2.69233e+011
+228 92 2.69212e+011
+17 434 2.68384e+011
+293 273 2.681e+011
+579 245 2.67911e+011
+139 136 2.67886e+011
+427 183 2.67883e+011
+155 318 2.67867e+011
+162 327 2.67742e+011
+362 452 2.67544e+011
+561 150 2.67477e+011
+329 320 2.67277e+011
+581 56 2.66904e+011
+540 21 2.66329e+011
+516 1 2.66246e+011
+492 161 2.65992e+011
+436 25 2.65667e+011
+428 335 2.65554e+011
+382 47 2.65416e+011
+531 115 2.65334e+011
+55 333 2.65224e+011
+94 124 2.65102e+011
+58 105 2.64877e+011
+580 346 2.64599e+011
+413 284 2.64481e+011
+362 443 2.64443e+011
+107 359 2.64287e+011
+311 299 2.64237e+011
+438 469 2.6413e+011
+445 143 2.63915e+011
+435 62 2.63386e+011
+231 364 2.63137e+011
+223 240 2.62949e+011
+345 139 2.62797e+011
+278 224 2.62444e+011
+567 202 2.62127e+011
+88 207 2.62034e+011
+114 261 2.62017e+011
+542 443 2.61814e+011
+97 38 2.61592e+011
+88 232 2.61126e+011
+158 101 2.60891e+011
+432 237 2.60706e+011
+552 378 2.60698e+011
+155 295 2.60192e+011
+12 434 2.59796e+011
+117 290 2.59565e+011
+545 86 2.59242e+011
+338 13 2.58711e+011
+540 187 2.58688e+011
+401 126 2.58364e+011
+101 29 2.58181e+011
+68 306 2.57724e+011
+78 135 2.57549e+011
+365 165 2.57376e+011
+409 14 2.57363e+011
+277 426 2.56944e+011
+342 331 2.56912e+011
+256 191 2.56712e+011
+163 432 2.55588e+011
+346 322 2.5547e+011
+404 188 2.54661e+011
+587 161 2.54245e+011
+389 2 2.54075e+011
+208 403 2.54038e+011
+484 325 2.53277e+011
+158 152 2.52849e+011
+161 38 2.52007e+011
+213 424 2.51946e+011
+433 44 2.51885e+011
+587 347 2.51647e+011
+111 338 2.51098e+011
+462 141 2.50871e+011
+214 450 2.50566e+011
+475 451 2.50467e+011
+419 95 2.50279e+011
+510 349 2.49701e+011
+338 63 2.49587e+011
+232 155 2.49336e+011
+204 125 2.49161e+011
+106 184 2.48625e+011
+330 334 2.48513e+011
+389 450 2.48435e+011
+142 117 2.48105e+011
+540 254 2.48095e+011
+497 242 2.48087e+011
+409 108 2.48009e+011
+168 416 2.47847e+011
+17 237 2.47691e+011
+375 299 2.47545e+011
+447 180 2.46899e+011
+509 380 2.46873e+011
+342 92 2.46786e+011
+109 257 2.46259e+011
+269 140 2.46096e+011
+574 445 2.46081e+011
+381 413 2.46047e+011
+181 155 2.45448e+011
+484 121 2.44925e+011
+114 205 2.44686e+011
+331 282 2.44471e+011
+286 246 2.43993e+011
+192 292 2.43904e+011
+519 242 2.43005e+011
+201 200 2.42225e+011
+265 309 2.41675e+011
+149 303 2.416e+011
+361 48 2.41096e+011
+243 215 2.41033e+011
+283 84 2.40807e+011
+579 309 2.40525e+011
+189 255 2.39975e+011
+302 404 2.3984e+011
+264 259 2.39597e+011
+360 361 2.39533e+011
+555 202 2.39369e+011
+134 80 2.3914e+011
+463 224 2.39116e+011
+130 409 2.38769e+011
+413 183 2.38702e+011
+191 420 2.38701e+011
+63 152 2.38434e+011
+130 374 2.38061e+011
+439 454 2.37808e+011
+535 39 2.37786e+011
+507 42 2.37782e+011
+4 33 2.37745e+011
+279 164 2.37673e+011
+72 164 2.37226e+011
+479 401 2.36514e+011
+303 294 2.36062e+011
+389 66 2.35638e+011
+118 6 2.35398e+011
+50 375 2.35057e+011
+194 238 2.35028e+011
+166 380 2.34338e+011
+336 49 2.34168e+011
+268 119 2.34128e+011
+121 149 2.34012e+011
+256 157 2.34011e+011
+358 449 2.33908e+011
+404 278 2.33891e+011
+213 203 2.3363e+011
+9 69 2.33575e+011
+274 121 2.33295e+011
+101 97 2.33244e+011
+114 349 2.33213e+011
+374 451 2.32897e+011
+38 113 2.32833e+011
+502 122 2.32754e+011
+145 145 2.32616e+011
+33 164 2.32587e+011
+183 382 2.3204e+011
+317 202 2.31949e+011
+443 183 2.31648e+011
+212 149 2.31079e+011
+587 310 2.3104e+011
+296 199 2.3091e+011
+195 255 2.3086e+011
+417 245 2.30809e+011
+539 223 2.30516e+011
+470 433 2.3015e+011
+67 202 2.30099e+011
+41 286 2.30003e+011
+499 340 2.2998e+011
+248 326 2.29708e+011
+583 39 2.29575e+011
+46 204 2.29451e+011
+54 236 2.2937e+011
+547 243 2.29247e+011
+393 183 2.28962e+011
+548 281 2.28936e+011
+64 312 2.2873e+011
+155 445 2.28327e+011
+468 101 2.28249e+011
+489 469 2.27943e+011
+178 201 2.27401e+011
+202 404 2.27126e+011
+298 401 2.2694e+011
+155 78 2.26744e+011
+86 355 2.26609e+011
+75 199 2.26379e+011
+70 61 2.25404e+011
+196 189 2.25244e+011
+560 266 2.24569e+011
+435 228 2.24519e+011
+64 424 2.24493e+011
+532 345 2.24083e+011
+27 169 2.23824e+011
+69 258 2.23808e+011
+181 259 2.23573e+011
+518 83 2.23509e+011
+260 369 2.23507e+011
+179 183 2.23423e+011
+186 161 2.23281e+011
+235 222 2.23221e+011
+466 422 2.22814e+011
+319 96 2.22711e+011
+200 8 2.22467e+011
+307 218 2.22437e+011
+362 215 2.22228e+011
+402 44 2.22181e+011
+158 163 2.21355e+011
+135 411 2.21242e+011
+577 326 2.21137e+011
+503 382 2.20621e+011
+419 315 2.20553e+011
+262 271 2.20334e+011
+36 76 2.20215e+011
+414 219 2.20192e+011
+138 120 2.20036e+011
+478 375 2.19988e+011
+600 365 2.19805e+011
+313 128 2.19284e+011
+471 82 2.19147e+011
+269 103 2.18718e+011
+349 107 2.18338e+011
+276 78 2.1823e+011
+71 389 2.18116e+011
+201 108 2.18109e+011
+196 466 2.18059e+011
+288 31 2.18011e+011
+498 462 2.17885e+011
+568 323 2.17698e+011
+524 141 2.17428e+011
+232 270 2.17026e+011
+143 235 2.16867e+011
+213 326 2.16589e+011
+328 51 2.1639e+011
+304 332 2.16352e+011
+402 98 2.15642e+011
+340 219 2.15542e+011
+450 196 2.1551e+011
+177 141 2.15206e+011
+126 330 2.15096e+011
+199 96 2.14843e+011
+290 140 2.14327e+011
+206 184 2.14268e+011
+477 220 2.14094e+011
+405 9 2.14066e+011
+486 159 2.13944e+011
+483 221 2.13719e+011
+268 192 2.13589e+011
+567 270 2.1353e+011
+142 253 2.13389e+011
+263 90 2.13199e+011
+397 92 2.13134e+011
+124 412 2.12849e+011
+499 138 2.1277e+011
+582 203 2.12207e+011
+309 34 2.12148e+011
+558 62 2.12079e+011
+186 71 2.11794e+011
+343 307 2.11626e+011
+15 213 2.11572e+011
+80 406 2.11567e+011
+284 223 2.11158e+011
+333 180 2.11111e+011
+219 398 2.10614e+011
+262 397 2.10568e+011
+131 188 2.10198e+011
+318 461 2.09877e+011
+281 78 2.09798e+011
+389 290 2.09782e+011
+62 285 2.09538e+011
+578 214 2.09392e+011
+133 477 2.09285e+011
+502 156 2.0913e+011
+210 97 2.08984e+011
+209 317 2.08672e+011
+523 163 2.08456e+011
+563 79 2.07709e+011
+46 92 2.07251e+011
+279 236 2.06895e+011
+469 108 2.06805e+011
+97 456 2.06645e+011
+195 343 2.06342e+011
+417 251 2.06135e+011
+205 235 2.05687e+011
+380 451 2.05591e+011
+196 146 2.05305e+011
+436 93 2.05289e+011
+286 350 2.05057e+011
+349 392 2.05044e+011
+95 282 2.04827e+011
+582 141 2.04714e+011
+255 406 2.04515e+011
+223 157 2.03801e+011
+135 429 2.02916e+011
+311 259 2.0287e+011
+272 255 2.02358e+011
+552 19 2.02278e+011
+27 190 2.02255e+011
+464 106 2.0217e+011
+203 23 2.02033e+011
+400 427 2.01764e+011
+511 442 2.01378e+011
+363 88 2.00957e+011
+257 133 2.00751e+011
+157 24 2.00744e+011
+283 332 2.00728e+011
+223 386 2.00622e+011
+342 31 2.00586e+011
+501 421 2.00089e+011
+437 140 1.99975e+011
+432 270 1.99322e+011
+218 350 1.99185e+011
+547 301 1.98992e+011
+462 187 1.98874e+011
+375 151 1.98827e+011
+181 340 1.98789e+011
+395 130 1.9859e+011
+461 304 1.98253e+011
+352 159 1.97692e+011
+541 177 1.97499e+011
+495 165 1.97408e+011
+552 218 1.97372e+011
+358 181 1.97341e+011
+452 179 1.97167e+011
+522 361 1.97071e+011
+158 258 1.96957e+011
+64 363 1.96854e+011
+155 313 1.9636e+011
+141 150 1.96317e+011
+135 165 1.96135e+011
+116 253 1.96109e+011
+121 170 1.95747e+011
+247 434 1.95555e+011
+27 271 1.95356e+011
+481 102 1.95188e+011
+484 243 1.94613e+011
+25 221 1.94246e+011
+49 227 1.94049e+011
+334 465 1.93989e+011
+243 430 1.93158e+011
+214 169 1.93137e+011
+288 199 1.93048e+011
+278 86 1.92421e+011
+184 57 1.92225e+011
+440 82 1.92223e+011
+439 108 1.91499e+011
+232 113 1.91444e+011
+574 100 1.91277e+011
+230 332 1.91235e+011
+556 366 1.9012e+011
+380 63 1.90055e+011
+206 14 1.89813e+011
+401 15 1.89808e+011
+438 402 1.89204e+011
+307 129 1.89087e+011
+384 114 1.89014e+011
+308 164 1.8898e+011
+296 311 1.88465e+011
+9 475 1.88354e+011
+224 202 1.88327e+011
+500 356 1.88161e+011
+513 106 1.87974e+011
+18 275 1.8782e+011
+126 237 1.87675e+011
+489 54 1.87531e+011
+242 244 1.87486e+011
+442 87 1.86672e+011
+430 25 1.86323e+011
+429 90 1.863e+011
+119 53 1.85873e+011
+370 468 1.85669e+011
+371 138 1.85594e+011
+478 406 1.85445e+011
+469 356 1.85279e+011
+510 110 1.85134e+011
+281 293 1.84629e+011
+219 174 1.84565e+011
+45 250 1.84551e+011
+230 50 1.84338e+011
+182 287 1.84183e+011
+210 395 1.84115e+011
+132 120 1.84104e+011
+41 314 1.84e+011
+14 46 1.83862e+011
+305 152 1.83646e+011
+47 167 1.83312e+011
+202 88 1.82825e+011
+511 288 1.82341e+011
+82 115 1.8216e+011
+251 321 1.81877e+011
+165 305 1.81811e+011
+304 109 1.81599e+011
+134 253 1.81421e+011
+93 219 1.81389e+011
+472 269 1.81323e+011
+121 215 1.80989e+011
+330 329 1.8093e+011
+264 126 1.80873e+011
+63 258 1.80428e+011
+553 276 1.80023e+011
+595 33 1.79852e+011
+328 96 1.79439e+011
+428 472 1.79138e+011
+373 414 1.79027e+011
+91 39 1.78735e+011
+78 99 1.78637e+011
+527 432 1.78156e+011
+94 388 1.77953e+011
+37 470 1.77856e+011
+247 407 1.76925e+011
+606 122 1.76879e+011
+159 278 1.76752e+011
+543 203 1.76288e+011
+264 109 1.7627e+011
+469 318 1.7626e+011
+191 114 1.76247e+011
+351 274 1.7617e+011
+466 213 1.75984e+011
+444 322 1.75271e+011
+60 171 1.74978e+011
+152 36 1.74821e+011
+193 85 1.74427e+011
+509 283 1.74335e+011
+88 397 1.73945e+011
+95 357 1.73798e+011
+248 392 1.73692e+011
+555 303 1.73497e+011
+112 306 1.73435e+011
+86 389 1.73322e+011
+206 38 1.7321e+011
+446 437 1.72245e+011
+182 412 1.71772e+011
+469 416 1.71766e+011
+197 419 1.71736e+011
+153 241 1.71736e+011
+221 326 1.71599e+011
+167 187 1.70999e+011
+173 145 1.70952e+011
+344 187 1.70916e+011
+80 235 1.70777e+011
+117 90 1.70742e+011
+32 335 1.70597e+011
+359 135 1.70455e+011
+373 101 1.70375e+011
+256 101 1.70135e+011
+581 177 1.70031e+011
+463 229 1.69977e+011
+258 231 1.69976e+011
+236 417 1.69947e+011
+189 270 1.69906e+011
+75 146 1.69813e+011
+17 246 1.69653e+011
+214 429 1.69473e+011
+300 445 1.69224e+011
+528 120 1.69124e+011
+74 335 1.69019e+011
+79 217 1.68819e+011
+398 277 1.6834e+011
+562 239 1.67904e+011
+86 245 1.6763e+011
+233 406 1.67551e+011
+334 431 1.67541e+011
+541 370 1.67527e+011
+346 327 1.675e+011
+93 406 1.67379e+011
+600 274 1.67377e+011
+516 303 1.6733e+011
+353 220 1.66968e+011
+298 408 1.66804e+011
+535 178 1.66698e+011
+282 268 1.66458e+011
+62 446 1.66435e+011
+22 217 1.66248e+011
+56 352 1.65929e+011
+238 33 1.65916e+011
+422 292 1.65723e+011
+117 303 1.65608e+011
+375 95 1.65285e+011
+61 437 1.65266e+011
+341 239 1.65249e+011
+305 66 1.65201e+011
+123 175 1.64842e+011
+146 343 1.64757e+011
+536 173 1.6475e+011
+39 291 1.64698e+011
+208 326 1.64638e+011
+243 357 1.64526e+011
+86 360 1.64508e+011
+391 408 1.64343e+011
+513 403 1.64319e+011
+273 198 1.64001e+011
+146 97 1.63814e+011
+99 292 1.63685e+011
+524 241 1.63491e+011
+364 98 1.63484e+011
+191 430 1.63393e+011
+491 358 1.63037e+011
+370 463 1.62811e+011
+409 334 1.62707e+011
+64 165 1.62311e+011
+277 254 1.61697e+011
+308 429 1.61365e+011
+69 377 1.61207e+011
+425 25 1.61152e+011
+417 302 1.61062e+011
+311 101 1.60719e+011
+306 258 1.60649e+011
+566 358 1.60631e+011
+192 210 1.60391e+011
+232 133 1.60353e+011
+35 389 1.59961e+011
+36 255 1.59757e+011
+286 307 1.59738e+011
+181 160 1.59647e+011
+424 172 1.59536e+011
+528 437 1.59399e+011
+507 255 1.59261e+011
+184 270 1.59232e+011
+311 136 1.59197e+011
+418 376 1.5906e+011
+422 286 1.58937e+011
+290 423 1.58633e+011
+260 316 1.58514e+011
+202 366 1.58443e+011
+349 88 1.58436e+011
+370 351 1.58382e+011
+546 342 1.58183e+011
+574 363 1.58156e+011
+375 235 1.57651e+011
+79 150 1.57576e+011
+507 403 1.57449e+011
+525 281 1.5705e+011
+433 294 1.56716e+011
+273 413 1.56705e+011
+55 137 1.56705e+011
+510 246 1.56601e+011
+552 265 1.56377e+011
+313 142 1.56358e+011
+229 282 1.56348e+011
+292 114 1.56124e+011
+34 13 1.5607e+011
+61 453 1.55962e+011
+313 464 1.55547e+011
+473 102 1.55436e+011
+347 32 1.55236e+011
+317 403 1.54627e+011
+352 365 1.54302e+011
+468 224 1.54247e+011
+285 145 1.54033e+011
+482 271 1.5375e+011
+170 219 1.53495e+011
+196 431 1.53346e+011
+294 92 1.53098e+011
+149 313 1.52774e+011
+414 105 1.52727e+011
+238 294 1.52363e+011
+11 163 1.52306e+011
+196 26 1.52278e+011
+39 275 1.52212e+011
+619 183 1.51922e+011
+102 337 1.51862e+011
+91 345 1.51796e+011
+508 394 1.51726e+011
+206 415 1.51716e+011
+261 321 1.51695e+011
+475 239 1.51633e+011
+455 58 1.51602e+011
+67 211 1.51533e+011
+475 298 1.51338e+011
+522 291 1.51302e+011
+571 237 1.50771e+011
+466 377 1.50683e+011
+78 155 1.50456e+011
+20 255 1.50277e+011
+522 322 1.50188e+011
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_5_3.txt b/test_data/harriscorners/hc_msc_5.00_0.15_5_3.txt
new file mode 100644
index 0000000..9db5762
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_5_3.txt
@@ -0,0 +1,1139 @@
+1138
+245 95 2.98677e+015
+363 401 2.95346e+015
+499 1 2.82848e+015
+449 298 2.63708e+015
+274 366 2.48547e+015
+122 44 2.14697e+015
+282 115 2.0924e+015
+507 122 2.08827e+015
+421 182 1.98758e+015
+251 13 1.89287e+015
+387 178 1.88994e+015
+553 40 1.86006e+015
+426 320 1.79558e+015
+446 396 1.68018e+015
+213 72 1.67913e+015
+240 90 1.66558e+015
+344 10 1.6497e+015
+65 343 1.5712e+015
+131 36 1.56612e+015
+144 309 1.54037e+015
+435 68 1.46886e+015
+480 298 1.46864e+015
+200 16 1.45036e+015
+456 281 1.42175e+015
+223 38 1.4029e+015
+348 179 1.33634e+015
+34 137 1.31714e+015
+256 386 1.29963e+015
+321 313 1.29722e+015
+183 401 1.29677e+015
+135 215 1.29e+015
+303 183 1.28845e+015
+45 27 1.25028e+015
+125 199 1.23078e+015
+299 53 1.23077e+015
+59 219 1.22992e+015
+412 256 1.21004e+015
+125 255 1.20506e+015
+448 262 1.19894e+015
+246 143 1.19774e+015
+28 8 1.18439e+015
+64 234 1.17161e+015
+110 238 1.16259e+015
+312 149 1.15598e+015
+465 394 1.15394e+015
+390 58 1.13224e+015
+261 297 1.10977e+015
+385 221 1.09017e+015
+308 372 1.08611e+015
+124 362 1.08176e+015
+102 4 1.05702e+015
+224 419 1.05474e+015
+418 440 1.04116e+015
+184 35 1.03772e+015
+239 349 1.03002e+015
+449 219 1.02949e+015
+382 8 1.02203e+015
+392 144 1.01834e+015
+271 166 1.01105e+015
+510 173 1.01086e+015
+329 127 1.00966e+015
+355 220 9.99554e+014
+37 62 9.91071e+014
+221 16 9.90682e+014
+387 10 9.8661e+014
+59 185 9.8322e+014
+262 165 9.82478e+014
+130 2 9.77001e+014
+66 320 9.70812e+014
+137 208 9.67308e+014
+411 355 9.66312e+014
+432 146 9.61176e+014
+417 7 9.5779e+014
+239 18 9.43356e+014
+177 107 9.31974e+014
+243 72 9.2274e+014
+282 403 9.15323e+014
+360 336 9.12485e+014
+192 331 9.10641e+014
+300 265 9.00171e+014
+404 120 8.9862e+014
+462 279 8.83525e+014
+158 143 8.67029e+014
+514 76 8.56354e+014
+545 168 8.56139e+014
+425 377 8.52581e+014
+92 198 8.44485e+014
+77 257 8.29217e+014
+101 58 8.26447e+014
+263 441 8.19425e+014
+71 148 8.1911e+014
+294 15 8.11008e+014
+35 146 8.09336e+014
+512 168 8.06277e+014
+545 217 8.049e+014
+113 213 8.0471e+014
+543 364 8.04369e+014
+542 18 8.0299e+014
+177 260 8.00515e+014
+271 71 7.90522e+014
+277 352 7.84372e+014
+209 223 7.80318e+014
+253 138 7.74947e+014
+140 184 7.71869e+014
+355 320 7.64998e+014
+372 163 7.57751e+014
+126 76 7.57558e+014
+455 83 7.56051e+014
+41 297 7.55281e+014
+550 379 7.39932e+014
+176 93 7.3759e+014
+498 82 7.37463e+014
+132 26 7.3726e+014
+229 292 7.36899e+014
+111 393 7.3385e+014
+236 163 7.30714e+014
+483 339 7.29307e+014
+203 310 7.27816e+014
+513 340 7.26349e+014
+225 221 7.24263e+014
+542 210 7.16842e+014
+114 344 7.11431e+014
+164 242 7.07056e+014
+526 223 7.06896e+014
+482 365 7.04297e+014
+563 478 7.01085e+014
+479 19 7.00196e+014
+46 219 6.96858e+014
+434 398 6.93924e+014
+522 263 6.93909e+014
+421 334 6.89832e+014
+359 294 6.89776e+014
+359 260 6.89285e+014
+525 345 6.82711e+014
+105 62 6.8149e+014
+365 200 6.81312e+014
+72 24 6.77686e+014
+58 74 6.77663e+014
+304 216 6.77292e+014
+296 420 6.72335e+014
+510 455 6.70867e+014
+474 262 6.68519e+014
+342 337 6.68276e+014
+317 385 6.67559e+014
+12 101 6.6265e+014
+110 96 6.59552e+014
+484 59 6.5865e+014
+138 110 6.5559e+014
+387 295 6.55261e+014
+326 426 6.53224e+014
+406 375 6.52652e+014
+173 312 6.52592e+014
+453 340 6.52104e+014
+281 51 6.48941e+014
+395 260 6.45429e+014
+100 221 6.43995e+014
+478 12 6.41181e+014
+151 307 6.37267e+014
+224 183 6.3501e+014
+301 164 6.34268e+014
+249 363 6.31291e+014
+361 131 6.29618e+014
+87 78 6.24912e+014
+352 147 6.22906e+014
+97 447 6.21691e+014
+270 278 6.21544e+014
+451 376 6.19031e+014
+449 403 6.16102e+014
+48 100 6.13825e+014
+91 292 6.11823e+014
+72 97 6.1155e+014
+162 213 6.09198e+014
+356 267 6.09176e+014
+264 201 6.08449e+014
+272 130 6.07205e+014
+285 297 6.06993e+014
+528 98 6.05675e+014
+345 109 6.05353e+014
+181 111 6.03976e+014
+338 391 5.97616e+014
+139 173 5.9523e+014
+522 122 5.9511e+014
+135 202 5.94896e+014
+324 341 5.91428e+014
+46 147 5.90571e+014
+400 261 5.89184e+014
+345 241 5.88995e+014
+5 66 5.86816e+014
+283 71 5.86418e+014
+379 69 5.85552e+014
+230 266 5.85354e+014
+232 200 5.80922e+014
+512 98 5.79507e+014
+470 239 5.7904e+014
+22 60 5.77914e+014
+503 361 5.76896e+014
+338 473 5.76503e+014
+212 182 5.74983e+014
+387 243 5.71906e+014
+191 359 5.71853e+014
+140 204 5.70204e+014
+167 286 5.6958e+014
+244 165 5.66567e+014
+74 6 5.63963e+014
+36 175 5.63243e+014
+339 164 5.62587e+014
+530 184 5.55189e+014
+539 40 5.52719e+014
+299 70 5.51551e+014
+64 371 5.49326e+014
+514 223 5.48835e+014
+422 44 5.44537e+014
+97 79 5.44233e+014
+170 18 5.42835e+014
+32 218 5.42295e+014
+382 411 5.41588e+014
+449 178 5.40841e+014
+246 294 5.40159e+014
+484 179 5.40153e+014
+524 20 5.37929e+014
+2 46 5.37761e+014
+248 404 5.37085e+014
+562 148 5.36617e+014
+511 128 5.36562e+014
+44 81 5.31332e+014
+18 342 5.28234e+014
+270 62 5.26702e+014
+242 203 5.26491e+014
+78 196 5.23381e+014
+508 18 5.23292e+014
+55 31 5.22784e+014
+560 229 5.21928e+014
+472 63 5.1635e+014
+208 54 5.13498e+014
+277 370 5.1264e+014
+430 1 5.10335e+014
+577 15 5.07958e+014
+275 181 5.04005e+014
+333 89 5.02864e+014
+123 272 5.01717e+014
+329 9 5.01102e+014
+273 297 5.00673e+014
+137 98 4.98287e+014
+325 88 4.97777e+014
+114 3 4.9736e+014
+479 179 4.96514e+014
+328 66 4.96241e+014
+57 364 4.9243e+014
+183 19 4.9182e+014
+243 189 4.91742e+014
+136 128 4.91585e+014
+432 83 4.90741e+014
+365 251 4.88777e+014
+198 130 4.87388e+014
+169 57 4.85231e+014
+545 57 4.82781e+014
+371 82 4.81556e+014
+82 28 4.80883e+014
+342 464 4.79924e+014
+507 164 4.79639e+014
+163 207 4.78438e+014
+146 160 4.78169e+014
+391 47 4.78044e+014
+389 139 4.77979e+014
+441 98 4.77747e+014
+242 100 4.77062e+014
+306 192 4.7693e+014
+538 95 4.76158e+014
+54 6 4.75792e+014
+358 10 4.75526e+014
+158 1 4.73447e+014
+344 197 4.7273e+014
+274 281 4.72133e+014
+416 23 4.71949e+014
+62 60 4.70677e+014
+144 187 4.69558e+014
+575 126 4.69281e+014
+452 205 4.69133e+014
+422 398 4.69109e+014
+276 221 4.63912e+014
+187 100 4.61868e+014
+131 148 4.61179e+014
+567 43 4.61075e+014
+448 138 4.60244e+014
+370 107 4.59878e+014
+302 205 4.58323e+014
+259 71 4.57786e+014
+88 148 4.56143e+014
+542 130 4.54879e+014
+401 184 4.54324e+014
+294 26 4.54285e+014
+196 82 4.53132e+014
+512 295 4.53023e+014
+220 178 4.51169e+014
+36 268 4.50911e+014
+342 123 4.50455e+014
+292 311 4.50062e+014
+366 7 4.49027e+014
+286 166 4.48958e+014
+82 135 4.48941e+014
+358 168 4.48264e+014
+220 100 4.47588e+014
+380 25 4.47416e+014
+75 235 4.47049e+014
+216 279 4.45367e+014
+445 453 4.45286e+014
+403 6 4.44956e+014
+174 57 4.44338e+014
+306 440 4.42981e+014
+561 320 4.42195e+014
+378 353 4.41615e+014
+208 451 4.41454e+014
+35 200 4.41257e+014
+217 126 4.40551e+014
+528 104 4.39037e+014
+367 144 4.38003e+014
+262 391 4.35894e+014
+175 239 4.34509e+014
+347 392 4.3417e+014
+115 44 4.34152e+014
+371 392 4.3143e+014
+37 288 4.31075e+014
+313 85 4.29024e+014
+492 140 4.27592e+014
+254 422 4.26372e+014
+210 154 4.25202e+014
+147 21 4.25079e+014
+137 138 4.23463e+014
+300 177 4.22975e+014
+68 27 4.22733e+014
+167 325 4.21387e+014
+47 10 4.20512e+014
+6 9 4.20309e+014
+29 236 4.19369e+014
+482 327 4.18708e+014
+49 159 4.1814e+014
+334 435 4.17718e+014
+169 198 4.17637e+014
+374 241 4.17599e+014
+172 449 4.17173e+014
+529 24 4.17137e+014
+82 78 4.16331e+014
+108 324 4.1565e+014
+115 77 4.15197e+014
+223 113 4.14784e+014
+259 221 4.14294e+014
+229 184 4.14166e+014
+181 394 4.12385e+014
+66 213 4.1234e+014
+206 159 4.08511e+014
+81 3 4.08256e+014
+236 221 4.07578e+014
+481 82 4.0695e+014
+53 43 4.06064e+014
+572 142 4.05858e+014
+360 217 4.0473e+014
+537 458 4.04522e+014
+241 59 4.03423e+014
+353 127 4.02575e+014
+506 203 4.02217e+014
+480 403 4.00442e+014
+576 178 3.98574e+014
+474 23 3.97958e+014
+307 448 3.9676e+014
+520 183 3.96395e+014
+320 224 3.95174e+014
+365 259 3.94712e+014
+49 152 3.94592e+014
+38 219 3.93824e+014
+192 219 3.93577e+014
+211 33 3.92271e+014
+253 74 3.9218e+014
+544 4 3.91254e+014
+207 436 3.90741e+014
+312 7 3.90734e+014
+509 361 3.89668e+014
+396 161 3.88221e+014
+124 261 3.86911e+014
+289 212 3.85853e+014
+214 59 3.85463e+014
+130 239 3.84409e+014
+39 143 3.84386e+014
+274 76 3.83379e+014
+141 394 3.82827e+014
+351 323 3.827e+014
+406 142 3.82213e+014
+507 60 3.80919e+014
+282 221 3.80464e+014
+378 339 3.79712e+014
+103 392 3.79126e+014
+234 19 3.78989e+014
+310 33 3.78328e+014
+110 265 3.77639e+014
+195 16 3.76547e+014
+458 265 3.75005e+014
+278 145 3.74195e+014
+597 272 3.73915e+014
+358 143 3.73081e+014
+259 236 3.72932e+014
+328 142 3.72582e+014
+190 146 3.72517e+014
+248 218 3.71895e+014
+104 359 3.70135e+014
+572 328 3.69959e+014
+112 134 3.69318e+014
+358 127 3.68947e+014
+268 288 3.6872e+014
+274 216 3.68104e+014
+463 198 3.67879e+014
+267 297 3.6786e+014
+398 357 3.65362e+014
+384 162 3.65344e+014
+444 23 3.65065e+014
+398 169 3.64829e+014
+42 62 3.64481e+014
+42 339 3.64388e+014
+32 100 3.64297e+014
+159 112 3.62717e+014
+412 64 3.61792e+014
+141 2 3.61118e+014
+230 35 3.60729e+014
+85 475 3.59961e+014
+541 13 3.5993e+014
+366 2 3.59747e+014
+497 229 3.59626e+014
+598 364 3.59021e+014
+164 359 3.58269e+014
+266 14 3.58145e+014
+508 5 3.57494e+014
+160 183 3.55809e+014
+281 132 3.55581e+014
+492 182 3.55145e+014
+528 362 3.53883e+014
+113 356 3.53412e+014
+65 252 3.53268e+014
+275 318 3.51009e+014
+297 296 3.50646e+014
+498 160 3.50587e+014
+266 53 3.50297e+014
+121 52 3.49534e+014
+135 238 3.49294e+014
+514 382 3.48957e+014
+183 133 3.48886e+014
+535 243 3.48415e+014
+151 114 3.47909e+014
+325 165 3.46585e+014
+368 337 3.4499e+014
+196 57 3.44359e+014
+568 383 3.43365e+014
+270 241 3.43056e+014
+313 222 3.42865e+014
+571 448 3.39689e+014
+419 167 3.39163e+014
+117 96 3.38595e+014
+537 186 3.3856e+014
+287 33 3.38362e+014
+298 332 3.37169e+014
+525 381 3.36517e+014
+327 320 3.36389e+014
+3 382 3.35989e+014
+265 31 3.35824e+014
+127 186 3.35582e+014
+516 348 3.3547e+014
+540 165 3.34871e+014
+525 60 3.34728e+014
+502 143 3.34429e+014
+129 309 3.33888e+014
+287 344 3.31982e+014
+413 299 3.31199e+014
+524 172 3.31005e+014
+467 125 3.3097e+014
+317 148 3.30481e+014
+535 121 3.30225e+014
+317 107 3.29798e+014
+163 168 3.2963e+014
+274 206 3.28898e+014
+363 182 3.28682e+014
+290 264 3.28043e+014
+217 54 3.2797e+014
+408 67 3.27958e+014
+479 451 3.2793e+014
+560 60 3.26826e+014
+282 351 3.26541e+014
+96 125 3.26326e+014
+306 362 3.26062e+014
+544 91 3.2594e+014
+546 182 3.25601e+014
+213 123 3.25446e+014
+361 396 3.25073e+014
+289 137 3.24351e+014
+560 81 3.24106e+014
+64 276 3.24062e+014
+111 40 3.2386e+014
+246 106 3.23182e+014
+220 210 3.22864e+014
+262 217 3.22763e+014
+219 291 3.22347e+014
+412 4 3.21931e+014
+257 35 3.21767e+014
+45 131 3.20976e+014
+391 52 3.20785e+014
+362 360 3.20784e+014
+86 214 3.18645e+014
+100 162 3.18637e+014
+377 7 3.18296e+014
+179 274 3.18295e+014
+425 262 3.18291e+014
+494 456 3.18257e+014
+269 105 3.18197e+014
+559 271 3.16455e+014
+540 140 3.16277e+014
+357 282 3.16039e+014
+85 197 3.14744e+014
+371 90 3.14205e+014
+84 59 3.14103e+014
+437 303 3.13614e+014
+45 407 3.13596e+014
+293 334 3.13421e+014
+48 256 3.12827e+014
+572 161 3.12733e+014
+558 19 3.12289e+014
+505 381 3.11931e+014
+85 256 3.11585e+014
+93 254 3.11236e+014
+132 255 3.11075e+014
+513 402 3.10346e+014
+344 263 3.10291e+014
+420 81 3.1022e+014
+584 38 3.09983e+014
+96 452 3.09791e+014
+74 186 3.09345e+014
+331 107 3.08614e+014
+474 202 3.08187e+014
+391 324 3.07954e+014
+110 46 3.07744e+014
+181 380 3.07614e+014
+208 421 3.07596e+014
+105 40 3.07196e+014
+220 150 3.07128e+014
+432 268 3.06947e+014
+396 104 3.06154e+014
+161 256 3.06083e+014
+516 202 3.06018e+014
+54 289 3.05816e+014
+177 18 3.05692e+014
+196 192 3.05618e+014
+55 65 3.0557e+014
+297 410 3.05068e+014
+51 61 3.04867e+014
+140 325 3.0482e+014
+173 40 3.0427e+014
+3 155 3.03876e+014
+526 398 3.03336e+014
+418 68 3.03264e+014
+58 253 3.01826e+014
+102 236 3.01761e+014
+457 375 3.01485e+014
+471 122 3.00916e+014
+218 145 3.00245e+014
+136 21 2.99871e+014
+272 53 2.99746e+014
+83 404 2.99397e+014
+190 276 2.98917e+014
+91 390 2.98861e+014
+412 162 2.98827e+014
+556 182 2.98102e+014
+129 168 2.98087e+014
+433 110 2.97906e+014
+388 282 2.97753e+014
+34 298 2.97228e+014
+475 342 2.97163e+014
+316 336 2.95096e+014
+320 119 2.94321e+014
+125 40 2.93984e+014
+569 203 2.93881e+014
+243 419 2.93744e+014
+150 38 2.93641e+014
+359 160 2.93417e+014
+490 343 2.93023e+014
+438 339 2.92587e+014
+403 265 2.92117e+014
+65 363 2.92034e+014
+390 19 2.90975e+014
+541 123 2.90743e+014
+445 127 2.9074e+014
+148 396 2.89341e+014
+532 340 2.89262e+014
+158 74 2.88662e+014
+496 462 2.88608e+014
+527 39 2.88093e+014
+377 119 2.87571e+014
+406 162 2.87563e+014
+205 202 2.87442e+014
+278 418 2.87429e+014
+146 452 2.86935e+014
+432 319 2.86927e+014
+436 387 2.85815e+014
+68 304 2.8555e+014
+487 261 2.85454e+014
+149 231 2.84979e+014
+407 81 2.84251e+014
+239 422 2.83973e+014
+283 206 2.83898e+014
+351 271 2.83572e+014
+55 294 2.83491e+014
+318 201 2.82441e+014
+487 4 2.82052e+014
+158 138 2.82052e+014
+378 316 2.81714e+014
+279 363 2.80951e+014
+229 347 2.80916e+014
+564 16 2.80467e+014
+44 121 2.79725e+014
+528 142 2.79086e+014
+618 181 2.78862e+014
+248 315 2.76935e+014
+525 424 2.76928e+014
+89 376 2.76409e+014
+326 13 2.7569e+014
+100 199 2.75053e+014
+290 49 2.74718e+014
+418 300 2.74654e+014
+177 331 2.73882e+014
+500 224 2.73845e+014
+46 90 2.73427e+014
+520 64 2.73146e+014
+273 290 2.73075e+014
+331 333 2.72066e+014
+235 346 2.71078e+014
+187 263 2.70971e+014
+376 84 2.70927e+014
+537 392 2.70769e+014
+424 163 2.69967e+014
+340 13 2.69849e+014
+386 327 2.69309e+014
+412 220 2.69148e+014
+164 277 2.69018e+014
+265 260 2.68547e+014
+410 99 2.68113e+014
+473 211 2.67381e+014
+379 107 2.67256e+014
+59 372 2.66917e+014
+117 132 2.66282e+014
+463 161 2.66252e+014
+267 132 2.66245e+014
+336 427 2.65788e+014
+88 354 2.65666e+014
+260 142 2.64541e+014
+132 477 2.64393e+014
+417 450 2.64297e+014
+262 319 2.64202e+014
+12 80 2.64156e+014
+277 137 2.63998e+014
+190 205 2.63677e+014
+439 455 2.63495e+014
+199 110 2.62826e+014
+9 76 2.62811e+014
+84 310 2.62447e+014
+474 246 2.62262e+014
+13 206 2.61788e+014
+117 428 2.61787e+014
+256 405 2.61223e+014
+184 200 2.60978e+014
+408 182 2.6069e+014
+450 91 2.60451e+014
+44 476 2.59551e+014
+117 360 2.59409e+014
+386 167 2.5913e+014
+260 272 2.58188e+014
+232 14 2.58092e+014
+529 32 2.5801e+014
+450 22 2.56769e+014
+192 171 2.56403e+014
+571 333 2.56131e+014
+94 6 2.55747e+014
+447 244 2.55381e+014
+321 10 2.55174e+014
+317 167 2.54994e+014
+261 329 2.54062e+014
+300 246 2.53997e+014
+404 13 2.52934e+014
+29 29 2.52816e+014
+323 260 2.52632e+014
+439 24 2.52334e+014
+392 165 2.51895e+014
+50 452 2.51175e+014
+141 22 2.51163e+014
+166 96 2.50897e+014
+547 40 2.49647e+014
+18 236 2.48889e+014
+451 101 2.48823e+014
+279 86 2.48784e+014
+357 240 2.4868e+014
+390 420 2.48641e+014
+219 315 2.48443e+014
+500 42 2.48327e+014
+67 47 2.47594e+014
+418 282 2.47465e+014
+137 56 2.47351e+014
+249 32 2.4725e+014
+314 75 2.47138e+014
+57 332 2.47025e+014
+447 351 2.4653e+014
+396 319 2.46192e+014
+410 44 2.45913e+014
+279 296 2.45787e+014
+83 101 2.45658e+014
+181 291 2.45511e+014
+246 14 2.45143e+014
+315 160 2.45001e+014
+38 169 2.44627e+014
+565 161 2.44476e+014
+391 449 2.44067e+014
+53 221 2.43795e+014
+15 219 2.43711e+014
+446 376 2.43686e+014
+222 239 2.43513e+014
+79 273 2.43202e+014
+88 183 2.43185e+014
+186 109 2.42676e+014
+87 208 2.42632e+014
+211 21 2.4253e+014
+469 140 2.41823e+014
+62 133 2.41638e+014
+271 414 2.41618e+014
+175 115 2.41383e+014
+259 201 2.40979e+014
+153 222 2.40872e+014
+78 81 2.39962e+014
+187 182 2.39831e+014
+421 89 2.39424e+014
+246 327 2.39369e+014
+59 289 2.38278e+014
+166 113 2.37975e+014
+311 298 2.37971e+014
+583 345 2.37858e+014
+302 102 2.37783e+014
+259 370 2.37742e+014
+133 427 2.36537e+014
+70 130 2.35817e+014
+157 95 2.3492e+014
+254 182 2.34252e+014
+516 120 2.33652e+014
+447 145 2.3359e+014
+157 318 2.33402e+014
+487 205 2.32834e+014
+247 347 2.32592e+014
+508 81 2.31689e+014
+104 430 2.31505e+014
+498 67 2.31349e+014
+177 180 2.30844e+014
+69 418 2.30355e+014
+88 261 2.30209e+014
+282 392 2.3016e+014
+465 355 2.29602e+014
+565 61 2.29229e+014
+288 397 2.28778e+014
+96 148 2.28341e+014
+412 245 2.28261e+014
+80 474 2.27988e+014
+511 43 2.27144e+014
+537 103 2.26134e+014
+198 75 2.25931e+014
+500 318 2.25e+014
+386 127 2.23979e+014
+221 84 2.23736e+014
+92 20 2.23327e+014
+512 262 2.23268e+014
+511 205 2.23103e+014
+386 63 2.22702e+014
+439 149 2.22411e+014
+271 184 2.22302e+014
+164 18 2.22225e+014
+203 293 2.22091e+014
+32 112 2.21908e+014
+239 195 2.2189e+014
+517 16 2.21744e+014
+528 160 2.21105e+014
+9 476 2.21028e+014
+288 87 2.20288e+014
+496 119 2.20032e+014
+115 306 2.20001e+014
+579 78 2.19681e+014
+365 105 2.19554e+014
+202 347 2.19541e+014
+333 412 2.19522e+014
+234 261 2.19472e+014
+445 7 2.19158e+014
+512 109 2.19033e+014
+226 130 2.18901e+014
+473 355 2.18203e+014
+515 184 2.18063e+014
+358 64 2.17297e+014
+39 241 2.17289e+014
+416 86 2.17175e+014
+164 381 2.17136e+014
+535 141 2.16891e+014
+347 296 2.16722e+014
+122 446 2.16655e+014
+299 399 2.16388e+014
+159 89 2.16387e+014
+193 111 2.16247e+014
+555 264 2.16172e+014
+495 476 2.15849e+014
+296 165 2.15174e+014
+345 352 2.15004e+014
+80 40 2.14924e+014
+383 147 2.14882e+014
+94 219 2.14873e+014
+184 94 2.14851e+014
+212 438 2.14812e+014
+322 29 2.14388e+014
+110 168 2.14208e+014
+366 299 2.13926e+014
+558 245 2.13884e+014
+88 370 2.13826e+014
+100 95 2.13797e+014
+553 383 2.1322e+014
+144 432 2.13029e+014
+266 139 2.12633e+014
+310 259 2.12122e+014
+188 214 2.11813e+014
+522 141 2.1168e+014
+436 91 2.1114e+014
+361 369 2.10821e+014
+251 163 2.10683e+014
+210 395 2.10425e+014
+517 142 2.0994e+014
+211 136 2.09912e+014
+430 116 2.09882e+014
+108 183 2.0977e+014
+456 418 2.09668e+014
+220 107 2.09601e+014
+42 9 2.08498e+014
+547 162 2.08431e+014
+48 458 2.08016e+014
+127 218 2.07912e+014
+310 91 2.07849e+014
+536 80 2.07775e+014
+534 92 2.07761e+014
+461 220 2.07513e+014
+58 103 2.07068e+014
+361 315 2.07019e+014
+293 120 2.06787e+014
+297 182 2.0678e+014
+327 182 2.0629e+014
+550 223 2.05911e+014
+433 25 2.05884e+014
+153 57 2.05471e+014
+356 107 2.0514e+014
+510 142 2.05065e+014
+202 7 2.0498e+014
+301 86 2.04969e+014
+175 2 2.0393e+014
+472 42 2.03806e+014
+592 107 2.02667e+014
+285 263 2.01532e+014
+472 421 2.01488e+014
+150 151 2.01453e+014
+565 463 2.01411e+014
+71 409 2.01016e+014
+497 283 2.00952e+014
+395 23 2.0084e+014
+332 295 2.00653e+014
+309 356 2.00146e+014
+452 161 2.00129e+014
+479 293 1.99789e+014
+95 374 1.99624e+014
+258 88 1.99528e+014
+409 23 1.99184e+014
+153 216 1.97926e+014
+191 57 1.97866e+014
+527 80 1.96994e+014
+224 73 1.96956e+014
+109 428 1.96847e+014
+485 236 1.96803e+014
+67 338 1.96787e+014
+441 321 1.9641e+014
+133 64 1.96378e+014
+180 56 1.94866e+014
+419 362 1.94717e+014
+352 162 1.93791e+014
+281 386 1.93727e+014
+221 339 1.93473e+014
+24 65 1.93315e+014
+235 295 1.93278e+014
+532 397 1.93221e+014
+135 74 1.93167e+014
+378 63 1.93159e+014
+70 478 1.93053e+014
+169 359 1.92551e+014
+298 274 1.92507e+014
+187 326 1.92328e+014
+215 426 1.92275e+014
+303 50 1.92072e+014
+329 255 1.91705e+014
+186 291 1.91593e+014
+273 146 1.9156e+014
+340 220 1.91545e+014
+64 448 1.91524e+014
+75 132 1.91314e+014
+18 319 1.91296e+014
+479 241 1.90351e+014
+570 183 1.90336e+014
+153 196 1.89988e+014
+548 45 1.89233e+014
+95 58 1.88674e+014
+199 328 1.88619e+014
+344 166 1.88607e+014
+559 224 1.88516e+014
+440 63 1.88165e+014
+245 385 1.88121e+014
+113 205 1.88056e+014
+377 183 1.8793e+014
+52 359 1.87569e+014
+540 263 1.87265e+014
+104 76 1.87209e+014
+449 64 1.87068e+014
+337 60 1.87017e+014
+25 200 1.86899e+014
+575 98 1.86847e+014
+576 311 1.86811e+014
+194 135 1.86726e+014
+95 477 1.86321e+014
+523 198 1.86174e+014
+11 114 1.85748e+014
+350 338 1.855e+014
+392 293 1.85219e+014
+429 224 1.85151e+014
+203 396 1.84788e+014
+503 180 1.84629e+014
+429 88 1.84475e+014
+214 99 1.83964e+014
+589 350 1.83946e+014
+414 262 1.83764e+014
+330 202 1.83762e+014
+574 39 1.83652e+014
+118 61 1.83159e+014
+469 417 1.82688e+014
+161 134 1.81975e+014
+232 274 1.81881e+014
+94 260 1.81846e+014
+183 157 1.81743e+014
+416 377 1.81736e+014
+486 377 1.817e+014
+116 390 1.81534e+014
+482 164 1.81322e+014
+477 221 1.80867e+014
+549 283 1.80792e+014
+572 121 1.80709e+014
+540 405 1.80541e+014
+492 59 1.8054e+014
+146 98 1.80163e+014
+114 176 1.79916e+014
+466 102 1.79645e+014
+375 282 1.79233e+014
+336 183 1.79219e+014
+126 339 1.78734e+014
+151 1 1.77927e+014
+365 86 1.77803e+014
+160 219 1.77505e+014
+344 329 1.76994e+014
+172 203 1.76964e+014
+243 209 1.76869e+014
+317 125 1.76832e+014
+201 317 1.76647e+014
+49 237 1.76088e+014
+168 422 1.76059e+014
+464 139 1.75439e+014
+310 173 1.75332e+014
+311 334 1.75196e+014
+266 117 1.75098e+014
+144 256 1.74926e+014
+265 250 1.74892e+014
+146 15 1.74616e+014
+384 258 1.74359e+014
+278 263 1.74201e+014
+319 186 1.74186e+014
+93 112 1.74021e+014
+361 222 1.73814e+014
+375 225 1.73671e+014
+151 400 1.7366e+014
+289 349 1.73627e+014
+233 71 1.73447e+014
+579 43 1.73077e+014
+95 422 1.72378e+014
+191 189 1.72232e+014
+595 19 1.7179e+014
+215 149 1.71732e+014
+93 95 1.71579e+014
+23 331 1.71553e+014
+33 65 1.71523e+014
+361 450 1.71291e+014
+226 14 1.71185e+014
+449 445 1.71139e+014
+161 32 1.71085e+014
+336 317 1.70993e+014
+349 278 1.69932e+014
+449 165 1.69712e+014
+200 98 1.69514e+014
+455 404 1.69182e+014
+179 164 1.69156e+014
+331 219 1.69108e+014
+165 218 1.68996e+014
+504 260 1.68828e+014
+144 376 1.68782e+014
+265 72 1.68716e+014
+487 266 1.68306e+014
+392 222 1.68168e+014
+283 200 1.68165e+014
+433 63 1.68063e+014
+164 312 1.67962e+014
+313 70 1.67894e+014
+283 79 1.67758e+014
+143 179 1.67685e+014
+202 219 1.67485e+014
+572 405 1.67413e+014
+510 366 1.67178e+014
+111 144 1.67157e+014
+388 434 1.67157e+014
+227 258 1.66985e+014
+151 236 1.66875e+014
+590 162 1.66851e+014
+368 96 1.66645e+014
+488 43 1.66546e+014
+254 193 1.66439e+014
+124 82 1.66255e+014
+503 161 1.65967e+014
+363 407 1.65838e+014
+539 220 1.65834e+014
+84 237 1.65774e+014
+198 168 1.657e+014
+4 266 1.65633e+014
+143 141 1.65388e+014
+161 430 1.6527e+014
+513 93 1.6508e+014
+129 127 1.64527e+014
+484 153 1.64313e+014
+533 161 1.6412e+014
+533 346 1.64029e+014
+381 180 1.63608e+014
+119 122 1.63398e+014
+535 19 1.63194e+014
+224 295 1.63188e+014
+480 171 1.63119e+014
+142 239 1.6311e+014
+198 148 1.62975e+014
+38 308 1.62844e+014
+335 445 1.62535e+014
+3 166 1.62292e+014
+223 214 1.62178e+014
+450 117 1.62147e+014
+148 131 1.62107e+014
+235 33 1.62094e+014
+168 308 1.62086e+014
+544 442 1.61922e+014
+62 204 1.61585e+014
+2 286 1.61536e+014
+309 183 1.61513e+014
+135 467 1.61467e+014
+266 403 1.61457e+014
+421 314 1.61326e+014
+377 461 1.61213e+014
+172 166 1.61188e+014
+466 40 1.61186e+014
+342 296 1.60961e+014
+248 262 1.60921e+014
+132 303 1.60855e+014
+177 200 1.60805e+014
+158 237 1.60636e+014
+31 269 1.60606e+014
+501 103 1.605e+014
+101 258 1.60436e+014
+127 328 1.59977e+014
+260 231 1.59936e+014
+493 102 1.59766e+014
+409 473 1.59461e+014
+439 241 1.5923e+014
+281 35 1.59163e+014
+277 329 1.58985e+014
+163 73 1.58643e+014
+211 95 1.58526e+014
+178 367 1.58442e+014
+117 184 1.58226e+014
+553 203 1.58184e+014
+359 53 1.58055e+014
+303 157 1.57771e+014
+55 172 1.57438e+014
+290 182 1.57431e+014
+562 434 1.5714e+014
+171 112 1.56937e+014
+577 51 1.56746e+014
+392 353 1.56277e+014
+290 248 1.56162e+014
+512 288 1.55992e+014
+39 355 1.5591e+014
+296 138 1.55726e+014
+471 268 1.55494e+014
+357 341 1.55041e+014
+279 427 1.55022e+014
+293 269 1.54916e+014
+261 455 1.54828e+014
+463 23 1.54605e+014
+451 196 1.54306e+014
+334 143 1.543e+014
+411 418 1.54097e+014
+576 164 1.53474e+014
+318 460 1.53439e+014
+261 287 1.53353e+014
+175 417 1.53231e+014
+22 220 1.52922e+014
+432 122 1.52692e+014
+181 138 1.52645e+014
+393 217 1.5255e+014
+274 197 1.52469e+014
+122 216 1.52389e+014
+70 390 1.52237e+014
+3 435 1.51919e+014
+209 173 1.5186e+014
+71 261 1.51806e+014
+109 101 1.51689e+014
+42 305 1.51587e+014
+222 430 1.51561e+014
+277 165 1.5142e+014
+414 145 1.51017e+014
+449 82 1.5097e+014
+249 85 1.50938e+014
+246 37 1.50771e+014
+433 278 1.50263e+014
+103 293 1.50253e+014
+155 446 1.49986e+014
+238 190 1.49938e+014
+329 212 1.49791e+014
+397 95 1.49749e+014
+257 132 1.49598e+014
+512 117 1.49594e+014
+333 281 1.49502e+014
+103 105 1.49357e+014
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_5_5.txt b/test_data/harriscorners/hc_msc_5.00_0.15_5_5.txt
new file mode 100644
index 0000000..6b75184
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_5_5.txt
@@ -0,0 +1,1077 @@
+1076
+273 366 1.41455e+016
+246 94 1.25357e+016
+237 20 1.207e+016
+77 257 1.08258e+016
+261 297 1.0637e+016
+122 43 1.04572e+016
+543 365 1.03719e+016
+362 401 1.0133e+016
+423 178 1.00259e+016
+427 320 9.7695e+015
+281 113 9.47644e+015
+465 393 9.28011e+015
+448 297 9.27192e+015
+199 18 9.20115e+015
+65 343 8.92524e+015
+447 397 8.66244e+015
+507 122 8.65586e+015
+344 9 8.58562e+015
+131 36 8.41797e+015
+300 52 8.28395e+015
+27 9 8.25503e+015
+552 40 8.23189e+015
+37 62 8.02744e+015
+387 178 7.64888e+015
+59 218 7.52096e+015
+360 295 7.48827e+015
+81 4 7.45358e+015
+33 138 7.33314e+015
+82 29 7.28623e+015
+131 26 7.22382e+015
+320 225 7.19594e+015
+294 15 7.12376e+015
+239 91 7.10473e+015
+257 385 7.06823e+015
+134 214 6.9861e+015
+36 145 6.97259e+015
+303 182 6.96362e+015
+125 364 6.83648e+015
+456 280 6.7672e+015
+33 99 6.74504e+015
+388 10 6.73787e+015
+484 338 6.71487e+015
+195 58 6.60689e+015
+214 73 6.60414e+015
+435 67 6.54987e+015
+84 78 6.44761e+015
+124 254 6.37078e+015
+128 1 6.34468e+015
+390 58 6.31354e+015
+242 71 6.31088e+015
+251 12 6.22896e+015
+225 420 6.1763e+015
+544 168 6.17368e+015
+263 441 6.16764e+015
+512 341 6.13029e+015
+343 338 6.1205e+015
+448 262 6.09661e+015
+529 24 5.95264e+015
+452 339 5.88751e+015
+124 198 5.8845e+015
+101 222 5.85967e+015
+127 165 5.84557e+015
+412 256 5.82457e+015
+222 39 5.7729e+015
+404 121 5.44631e+015
+55 29 5.42311e+015
+253 139 5.35422e+015
+138 110 5.30734e+015
+153 223 5.27407e+015
+329 128 5.25429e+015
+510 173 5.24113e+015
+144 310 5.22575e+015
+418 440 5.22493e+015
+183 400 5.19184e+015
+64 236 5.16844e+015
+426 119 5.14027e+015
+301 165 5.08471e+015
+483 179 5.07424e+015
+360 335 5.03891e+015
+543 15 5.01004e+015
+92 198 5.00393e+015
+177 106 4.97756e+015
+484 59 4.93854e+015
+57 5 4.93309e+015
+48 26 4.91029e+015
+123 185 4.90845e+015
+511 167 4.86046e+015
+261 222 4.85048e+015
+359 260 4.71142e+015
+243 202 4.69399e+015
+545 58 4.63852e+015
+142 324 4.59492e+015
+311 150 4.56742e+015
+225 182 4.56466e+015
+245 143 4.56201e+015
+509 455 4.52485e+015
+252 423 4.51475e+015
+302 215 4.50609e+015
+181 111 4.50604e+015
+533 184 4.49794e+015
+392 144 4.49572e+015
+207 450 4.48665e+015
+137 207 4.47924e+015
+371 162 4.4761e+015
+115 44 4.44304e+015
+163 277 4.38014e+015
+545 41 4.37827e+015
+109 240 4.37048e+015
+351 321 4.3525e+015
+210 435 4.34555e+015
+308 372 4.34127e+015
+364 251 4.33602e+015
+283 72 4.33362e+015
+184 36 4.3333e+015
+151 307 4.31436e+015
+361 131 4.31417e+015
+542 210 4.30168e+015
+433 147 4.25194e+015
+60 183 4.24068e+015
+348 179 4.17456e+015
+235 346 4.13791e+015
+498 159 4.13178e+015
+475 261 4.1198e+015
+382 6 4.06625e+015
+40 217 4.05965e+015
+527 99 4.05439e+015
+216 279 4.0417e+015
+113 392 4.00162e+015
+418 8 3.96688e+015
+207 224 3.94376e+015
+214 57 3.94342e+015
+261 165 3.94238e+015
+78 80 3.91082e+015
+71 148 3.90499e+015
+100 78 3.90227e+015
+106 39 3.87786e+015
+363 7 3.87615e+015
+244 165 3.87294e+015
+48 99 3.86844e+015
+276 352 3.86512e+015
+578 16 3.86369e+015
+86 255 3.86036e+015
+175 94 3.81964e+015
+357 220 3.81816e+015
+36 176 3.81792e+015
+62 60 3.81355e+015
+283 403 3.80254e+015
+386 220 3.80122e+015
+528 104 3.77764e+015
+163 213 3.76824e+015
+4 65 3.74284e+015
+453 204 3.7131e+015
+313 84 3.70831e+015
+325 164 3.68528e+015
+522 264 3.66947e+015
+434 398 3.63598e+015
+321 313 3.63071e+015
+449 219 3.62758e+015
+82 135 3.61882e+015
+169 56 3.61041e+015
+177 259 3.6088e+015
+300 265 3.60148e+015
+266 296 3.59964e+015
+324 341 3.58836e+015
+386 243 3.58815e+015
+511 220 3.53189e+015
+55 289 3.53043e+015
+480 299 3.52843e+015
+327 141 3.51267e+015
+10 102 3.49457e+015
+49 151 3.48481e+015
+395 261 3.4631e+015
+92 292 3.45667e+015
+230 36 3.45067e+015
+293 26 3.45014e+015
+123 272 3.44755e+015
+390 297 3.44561e+015
+309 7 3.40629e+015
+325 88 3.38194e+015
+541 123 3.37492e+015
+513 76 3.34282e+015
+425 377 3.33878e+015
+174 40 3.3263e+015
+515 347 3.31927e+015
+421 335 3.3186e+015
+358 10 3.31677e+015
+470 238 3.30409e+015
+271 290 3.29742e+015
+104 4 3.29285e+015
+47 11 3.29179e+015
+54 66 3.28852e+015
+511 128 3.27845e+015
+508 19 3.27638e+015
+223 16 3.27204e+015
+138 172 3.26173e+015
+140 394 3.25931e+015
+113 345 3.25388e+015
+211 185 3.21698e+015
+326 427 3.18638e+015
+102 360 3.18136e+015
+408 183 3.17683e+015
+234 162 3.17658e+015
+169 197 3.17292e+015
+272 281 3.17118e+015
+265 31 3.15656e+015
+167 326 3.15355e+015
+527 361 3.14767e+015
+163 74 3.13742e+015
+165 241 3.11902e+015
+88 148 3.10726e+015
+110 95 3.08418e+015
+433 111 3.08298e+015
+95 477 3.08023e+015
+544 4 3.07975e+015
+100 198 3.06897e+015
+478 18 3.06574e+015
+58 74 3.05961e+015
+403 265 3.0554e+015
+265 446 3.05145e+015
+332 295 3.03656e+015
+18 343 3.03652e+015
+31 270 3.02607e+015
+32 66 3.01425e+015
+523 123 3.0098e+015
+164 358 3.00136e+015
+239 349 3.00055e+015
+346 240 2.99879e+015
+220 290 2.99343e+015
+371 90 2.9916e+015
+220 150 2.9915e+015
+5 46 2.96069e+015
+411 353 2.94888e+015
+542 132 2.94661e+015
+135 129 2.94657e+015
+37 296 2.94242e+015
+344 263 2.93882e+015
+313 76 2.93368e+015
+52 42 2.932e+015
+444 453 2.92655e+015
+141 183 2.92105e+015
+367 143 2.91362e+015
+350 145 2.91072e+015
+66 214 2.91053e+015
+537 393 2.91013e+015
+508 5 2.89075e+015
+333 90 2.85987e+015
+413 299 2.85482e+015
+285 297 2.83687e+015
+208 55 2.82468e+015
+117 76 2.81806e+015
+386 294 2.81514e+015
+6 10 2.81048e+015
+414 21 2.80935e+015
+280 50 2.80755e+015
+106 61 2.80336e+015
+357 128 2.79339e+015
+61 203 2.79184e+015
+259 237 2.78417e+015
+61 134 2.76492e+015
+96 449 2.76014e+015
+362 395 2.75774e+015
+305 193 2.75074e+015
+65 319 2.73103e+015
+298 69 2.72662e+015
+138 98 2.71477e+015
+158 73 2.71214e+015
+230 292 2.70571e+015
+355 267 2.70371e+015
+202 315 2.70225e+015
+493 139 2.70193e+015
+181 394 2.69231e+015
+248 316 2.69008e+015
+57 364 2.67446e+015
+390 48 2.67437e+015
+524 346 2.67268e+015
+68 337 2.67218e+015
+272 167 2.67138e+015
+522 62 2.65962e+015
+233 199 2.65576e+015
+221 177 2.64816e+015
+273 296 2.64743e+015
+76 8 2.63918e+015
+260 71 2.63251e+015
+223 220 2.62973e+015
+85 214 2.62771e+015
+512 262 2.6166e+015
+436 303 2.61117e+015
+160 143 2.59716e+015
+524 19 2.58697e+015
+341 122 2.57284e+015
+408 45 2.56735e+015
+191 360 2.56638e+015
+84 477 2.5609e+015
+191 205 2.54285e+015
+21 61 2.54133e+015
+72 97 2.5377e+015
+32 218 2.53691e+015
+193 16 2.52986e+015
+338 473 2.52483e+015
+175 311 2.51716e+015
+113 213 2.51645e+015
+245 294 2.50688e+015
+471 212 2.5042e+015
+38 138 2.49748e+015
+382 412 2.49237e+015
+268 53 2.48384e+015
+524 24 2.48036e+015
+345 350 2.46823e+015
+329 12 2.46584e+015
+480 262 2.45776e+015
+403 187 2.45663e+015
+307 449 2.4549e+015
+525 172 2.45371e+015
+448 166 2.45354e+015
+259 35 2.44485e+015
+374 240 2.42361e+015
+171 17 2.41414e+015
+478 12 2.41211e+015
+339 13 2.40954e+015
+191 146 2.40721e+015
+386 326 2.40688e+015
+471 421 2.40646e+015
+512 99 2.40276e+015
+346 296 2.40201e+015
+325 294 2.39906e+015
+191 330 2.39826e+015
+297 331 2.39002e+015
+141 2 2.38935e+015
+377 119 2.38703e+015
+374 393 2.38544e+015
+454 84 2.3686e+015
+364 181 2.35683e+015
+278 144 2.35641e+015
+336 391 2.35153e+015
+571 450 2.33661e+015
+64 371 2.33413e+015
+538 97 2.33274e+015
+393 218 2.33189e+015
+286 165 2.32899e+015
+28 30 2.32355e+015
+159 183 2.32244e+015
+364 257 2.32219e+015
+166 97 2.32107e+015
+410 65 2.31999e+015
+406 198 2.31428e+015
+154 114 2.313e+015
+276 180 2.29828e+015
+90 376 2.2973e+015
+193 218 2.2961e+015
+365 106 2.29005e+015
+453 102 2.28027e+015
+297 420 2.27714e+015
+547 161 2.27585e+015
+416 84 2.27107e+015
+389 140 2.26919e+015
+302 204 2.26389e+015
+120 447 2.26021e+015
+42 339 2.25746e+015
+449 445 2.25684e+015
+46 82 2.25207e+015
+255 149 2.2385e+015
+345 108 2.23624e+015
+110 137 2.23587e+015
+53 221 2.23301e+015
+381 26 2.23195e+015
+159 138 2.2276e+015
+358 282 2.22602e+015
+12 218 2.22213e+015
+340 165 2.21798e+015
+187 264 2.21474e+015
+345 276 2.21348e+015
+422 48 2.20989e+015
+451 376 2.20825e+015
+299 178 2.20815e+015
+480 82 2.20578e+015
+561 227 2.19798e+015
+79 197 2.18617e+015
+473 23 2.18421e+015
+42 24 2.17463e+015
+306 363 2.17175e+015
+539 458 2.17126e+015
+78 41 2.1705e+015
+146 160 2.16865e+015
+167 285 2.16745e+015
+46 355 2.16726e+015
+473 202 2.15831e+015
+197 131 2.15408e+015
+175 115 2.15197e+015
+30 237 2.15177e+015
+539 405 2.1323e+015
+46 220 2.12514e+015
+125 260 2.12197e+015
+126 77 2.11062e+015
+216 125 2.1034e+015
+436 320 2.09903e+015
+271 131 2.09803e+015
+559 80 2.09587e+015
+306 440 2.09496e+015
+418 164 2.09308e+015
+423 398 2.09303e+015
+156 94 2.09056e+015
+161 20 2.09028e+015
+160 111 2.07711e+015
+568 43 2.07486e+015
+480 451 2.07116e+015
+217 208 2.06712e+015
+475 246 2.06383e+015
+118 425 2.06238e+015
+470 122 2.06216e+015
+274 215 2.05784e+015
+249 365 2.05705e+015
+524 38 2.0504e+015
+378 340 2.05015e+015
+36 201 2.04987e+015
+363 358 2.04698e+015
+384 258 2.04593e+015
+418 283 2.04587e+015
+281 222 2.04402e+015
+378 68 2.04349e+015
+129 238 2.03979e+015
+576 179 2.03862e+015
+219 100 2.03796e+015
+69 420 2.03684e+015
+327 182 2.02998e+015
+44 62 2.02818e+015
+79 271 2.02452e+015
+511 83 2.02001e+015
+573 405 2.01567e+015
+203 309 2.01205e+015
+573 141 2.00995e+015
+216 146 2.00685e+015
+520 183 2.00372e+015
+42 297 2.00107e+015
+334 436 1.99661e+015
+101 235 1.99488e+015
+437 339 1.99232e+015
+212 33 1.9914e+015
+502 143 1.98963e+015
+163 208 1.98467e+015
+41 10 1.97348e+015
+272 72 1.97219e+015
+442 22 1.97182e+015
+253 75 1.97095e+015
+388 15 1.96711e+015
+279 366 1.95513e+015
+215 175 1.95199e+015
+483 364 1.94697e+015
+463 40 1.94347e+015
+364 200 1.9389e+015
+210 21 1.93637e+015
+475 341 1.93454e+015
+498 224 1.92726e+015
+503 164 1.92445e+015
+488 262 1.92221e+015
+47 132 1.91996e+015
+185 20 1.90824e+015
+274 53 1.90258e+015
+359 167 1.90226e+015
+110 264 1.89841e+015
+318 385 1.89508e+015
+141 21 1.89503e+015
+114 3 1.89454e+015
+281 419 1.8945e+015
+131 476 1.89372e+015
+280 132 1.88911e+015
+471 83 1.88731e+015
+458 265 1.88112e+015
+130 72 1.88106e+015
+395 105 1.88063e+015
+406 80 1.87993e+015
+25 64 1.87157e+015
+384 162 1.86277e+015
+109 169 1.86217e+015
+387 127 1.84571e+015
+568 382 1.84083e+015
+518 202 1.83708e+015
+358 241 1.83569e+015
+161 169 1.83264e+015
+49 159 1.83071e+015
+448 137 1.8304e+015
+505 361 1.82827e+015
+398 357 1.82607e+015
+277 137 1.82302e+015
+294 269 1.8204e+015
+131 255 1.81772e+015
+329 67 1.81753e+015
+441 98 1.8162e+015
+95 217 1.8161e+015
+246 106 1.81444e+015
+92 59 1.81409e+015
+328 255 1.8139e+015
+489 182 1.81277e+015
+584 38 1.81169e+015
+332 201 1.80892e+015
+134 238 1.80456e+015
+38 287 1.80433e+015
+222 114 1.80295e+015
+354 295 1.80025e+015
+405 376 1.79431e+015
+166 312 1.79039e+015
+471 268 1.79022e+015
+145 187 1.78547e+015
+367 337 1.78097e+015
+514 120 1.78059e+015
+77 29 1.7718e+015
+372 83 1.77122e+015
+396 160 1.77047e+015
+464 23 1.76868e+015
+464 197 1.76839e+015
+343 198 1.76725e+015
+514 382 1.76439e+015
+271 182 1.76092e+015
+144 6 1.75965e+015
+156 318 1.75949e+015
+60 40 1.7557e+015
+432 269 1.7553e+015
+44 474 1.74744e+015
+242 420 1.74413e+015
+107 429 1.74329e+015
+18 236 1.74233e+015
+148 397 1.7385e+015
+250 403 1.736e+015
+394 318 1.73525e+015
+265 15 1.73365e+015
+505 381 1.73192e+015
+392 165 1.72878e+015
+165 110 1.724e+015
+366 300 1.72188e+015
+525 422 1.7215e+015
+282 392 1.72097e+015
+58 373 1.7188e+015
+449 178 1.71695e+015
+39 355 1.71631e+015
+66 252 1.71184e+015
+192 172 1.70897e+015
+284 199 1.69846e+015
+561 320 1.68602e+015
+198 111 1.6858e+015
+246 89 1.68525e+015
+258 161 1.68385e+015
+70 476 1.68084e+015
+367 1 1.67766e+015
+206 160 1.67654e+015
+398 168 1.6736e+015
+379 107 1.66888e+015
+102 58 1.66812e+015
+95 94 1.66533e+015
+342 465 1.66076e+015
+3 155 1.65242e+015
+274 77 1.6492e+015
+544 216 1.64821e+015
+90 275 1.64773e+015
+507 60 1.63831e+015
+249 220 1.63577e+015
+79 473 1.63351e+015
+95 20 1.63147e+015
+269 61 1.62942e+015
+316 335 1.62804e+015
+289 396 1.62612e+015
+377 318 1.62604e+015
+188 181 1.62405e+015
+106 98 1.61922e+015
+359 53 1.61911e+015
+447 350 1.61643e+015
+350 338 1.60568e+015
+93 255 1.6036e+015
+489 43 1.60242e+015
+445 8 1.60096e+015
+291 50 1.60088e+015
+434 159 1.59796e+015
+578 43 1.58859e+015
+441 240 1.58819e+015
+150 231 1.58803e+015
+49 235 1.58415e+015
+382 337 1.58112e+015
+39 239 1.57937e+015
+157 40 1.57781e+015
+236 222 1.57682e+015
+174 239 1.57591e+015
+576 126 1.57542e+015
+51 61 1.57537e+015
+180 164 1.57526e+015
+48 257 1.57335e+015
+390 449 1.56853e+015
+517 58 1.56402e+015
+12 79 1.56364e+015
+87 372 1.56084e+015
+275 317 1.56074e+015
+70 23 1.56071e+015
+70 129 1.5598e+015
+261 393 1.55825e+015
+570 182 1.55722e+015
+532 398 1.55634e+015
+183 136 1.55547e+015
+60 254 1.55059e+015
+536 121 1.54963e+015
+149 112 1.54956e+015
+298 274 1.54944e+015
+242 190 1.54939e+015
+146 98 1.54781e+015
+483 143 1.5451e+015
+550 378 1.54468e+015
+297 410 1.53842e+015
+491 1 1.53636e+015
+261 217 1.53367e+015
+319 186 1.5333e+015
+316 166 1.53284e+015
+269 66 1.53241e+015
+517 42 1.53056e+015
+34 31 1.52862e+015
+191 350 1.52744e+015
+107 107 1.52121e+015
+265 201 1.52049e+015
+178 274 1.51398e+015
+434 277 1.5076e+015
+528 159 1.50577e+015
+482 440 1.50376e+015
+38 168 1.50369e+015
+569 203 1.50327e+015
+318 460 1.50054e+015
+133 148 1.49971e+015
+423 165 1.49618e+015
+525 186 1.49556e+015
+483 326 1.49396e+015
+468 139 1.4928e+015
+338 63 1.48949e+015
+29 135 1.48928e+015
+16 434 1.489e+015
+50 453 1.48743e+015
+550 223 1.48587e+015
+500 82 1.48443e+015
+149 1 1.48381e+015
+449 63 1.48264e+015
+196 194 1.48211e+015
+328 214 1.47998e+015
+289 349 1.47964e+015
+126 96 1.47949e+015
+498 67 1.47272e+015
+165 117 1.4698e+015
+187 308 1.46944e+015
+203 294 1.46213e+015
+565 463 1.46056e+015
+179 380 1.45908e+015
+71 408 1.45602e+015
+119 115 1.45471e+015
+534 161 1.45226e+015
+309 33 1.44932e+015
+560 272 1.4482e+015
+210 154 1.44652e+015
+539 128 1.44027e+015
+565 159 1.43984e+015
+233 261 1.43936e+015
+85 180 1.43844e+015
+406 163 1.43814e+015
+525 381 1.43796e+015
+332 415 1.43768e+015
+538 40 1.43668e+015
+359 142 1.43465e+015
+358 66 1.42794e+015
+56 171 1.42741e+015
+172 450 1.4272e+015
+512 295 1.42431e+015
+314 222 1.42101e+015
+384 146 1.4198e+015
+572 327 1.41941e+015
+525 224 1.41857e+015
+225 52 1.4121e+015
+187 101 1.41207e+015
+242 58 1.41046e+015
+129 309 1.40976e+015
+275 329 1.40972e+015
+53 359 1.40453e+015
+44 408 1.40339e+015
+433 381 1.40322e+015
+486 376 1.40189e+015
+575 99 1.40048e+015
+190 312 1.39895e+015
+485 4 1.39841e+015
+3 382 1.39722e+015
+103 259 1.39341e+015
+561 146 1.39156e+015
+163 253 1.3913e+015
+421 80 1.3851e+015
+501 42 1.38445e+015
+465 355 1.38361e+015
+92 444 1.38263e+015
+387 283 1.38151e+015
+246 207 1.38129e+015
+264 311 1.37753e+015
+456 161 1.37672e+015
+395 23 1.37413e+015
+389 97 1.37259e+015
+200 330 1.36777e+015
+85 310 1.36756e+015
+255 405 1.36439e+015
+377 183 1.36347e+015
+563 17 1.36176e+015
+513 402 1.36041e+015
+578 52 1.36021e+015
+55 145 1.3578e+015
+411 4 1.35467e+015
+275 196 1.35011e+015
+152 196 1.34756e+015
+82 72 1.34435e+015
+540 141 1.3403e+015
+184 142 1.33977e+015
+405 142 1.33956e+015
+592 18 1.33906e+015
+9 75 1.33768e+015
+92 79 1.33761e+015
+449 118 1.33469e+015
+227 130 1.33236e+015
+473 5 1.33158e+015
+210 395 1.33114e+015
+524 198 1.33063e+015
+119 96 1.32856e+015
+274 206 1.32782e+015
+292 310 1.3266e+015
+307 354 1.32478e+015
+552 384 1.32159e+015
+110 358 1.32151e+015
+291 89 1.31985e+015
+289 137 1.31733e+015
+259 369 1.31713e+015
+472 42 1.31702e+015
+360 369 1.31672e+015
+481 165 1.31603e+015
+599 365 1.31536e+015
+248 395 1.31171e+015
+84 60 1.31167e+015
+300 106 1.31088e+015
+86 197 1.30379e+015
+251 152 1.30272e+015
+454 115 1.30258e+015
+323 146 1.30227e+015
+516 19 1.30074e+015
+74 186 1.29761e+015
+220 315 1.29577e+015
+186 109 1.29513e+015
+569 422 1.29177e+015
+288 264 1.2909e+015
+114 178 1.29085e+015
+328 320 1.28939e+015
+545 91 1.28898e+015
+33 111 1.28784e+015
+233 296 1.2867e+015
+541 163 1.28545e+015
+537 263 1.28281e+015
+148 22 1.28031e+015
+338 263 1.2773e+015
+157 306 1.27681e+015
+183 316 1.27634e+015
+387 3 1.27374e+015
+184 94 1.27279e+015
+454 47 1.27046e+015
+279 86 1.26996e+015
+191 188 1.26986e+015
+433 240 1.26906e+015
+87 207 1.26707e+015
+186 289 1.26233e+015
+462 161 1.26189e+015
+449 437 1.26151e+015
+388 420 1.25996e+015
+122 124 1.25972e+015
+529 31 1.25783e+015
+434 43 1.25778e+015
+136 138 1.25499e+015
+408 430 1.25484e+015
+221 432 1.25298e+015
+490 58 1.24976e+015
+456 377 1.24882e+015
+273 220 1.24873e+015
+229 14 1.24814e+015
+436 182 1.24714e+015
+321 10 1.24642e+015
+506 203 1.24469e+015
+500 266 1.24466e+015
+512 43 1.24392e+015
+412 245 1.24104e+015
+265 286 1.24074e+015
+116 360 1.23241e+015
+259 273 1.23241e+015
+525 79 1.23193e+015
+322 28 1.2299e+015
+362 214 1.22862e+015
+351 271 1.21956e+015
+263 402 1.2186e+015
+597 272 1.21664e+015
+73 163 1.21463e+015
+191 277 1.21444e+015
+445 126 1.21337e+015
+21 131 1.21283e+015
+176 57 1.21205e+015
+410 263 1.21184e+015
+411 98 1.20856e+015
+175 186 1.20826e+015
+223 87 1.20819e+015
+208 421 1.20311e+015
+195 83 1.20221e+015
+576 311 1.20009e+015
+155 445 1.19424e+015
+96 37 1.19386e+015
+255 108 1.19324e+015
+182 344 1.19314e+015
+514 362 1.19018e+015
+239 194 1.18967e+015
+242 281 1.18913e+015
+446 376 1.18758e+015
+314 447 1.1867e+015
+9 475 1.17539e+015
+422 64 1.17498e+015
+177 332 1.17448e+015
+165 379 1.17387e+015
+69 304 1.17131e+015
+198 148 1.17076e+015
+548 45 1.17063e+015
+462 397 1.1685e+015
+16 213 1.16565e+015
+109 146 1.16563e+015
+67 48 1.16325e+015
+479 242 1.16197e+015
+12 113 1.15905e+015
+461 123 1.15894e+015
+512 204 1.15823e+015
+269 241 1.15595e+015
+478 221 1.15505e+015
+335 427 1.15493e+015
+330 106 1.15365e+015
+145 16 1.15241e+015
+215 97 1.15162e+015
+529 141 1.15061e+015
+370 107 1.14444e+015
+432 82 1.14374e+015
+535 140 1.13958e+015
+251 192 1.13895e+015
+443 320 1.13451e+015
+108 45 1.13087e+015
+83 100 1.13065e+015
+411 418 1.13018e+015
+355 341 1.13017e+015
+187 325 1.12813e+015
+526 399 1.12808e+015
+572 39 1.12702e+015
+272 146 1.12324e+015
+331 334 1.12234e+015
+311 299 1.11977e+015
+403 14 1.11901e+015
+227 72 1.11805e+015
+202 346 1.11698e+015
+449 22 1.1168e+015
+13 203 1.1151e+015
+116 131 1.1145e+015
+120 54 1.11365e+015
+322 424 1.11171e+015
+87 355 1.11162e+015
+50 289 1.11036e+015
+95 374 1.10878e+015
+419 362 1.10874e+015
+251 163 1.1045e+015
+572 459 1.10349e+015
+130 428 1.10292e+015
+214 450 1.10289e+015
+497 283 1.1003e+015
+555 181 1.09976e+015
+266 131 1.09791e+015
+444 118 1.09689e+015
+263 140 1.09318e+015
+354 424 1.09286e+015
+359 161 1.09277e+015
+533 346 1.09276e+015
+183 201 1.08991e+015
+160 126 1.08954e+015
+211 12 1.08948e+015
+424 261 1.08928e+015
+467 319 1.08922e+015
+486 139 1.08915e+015
+111 132 1.08773e+015
+113 354 1.08746e+015
+247 327 1.08691e+015
+438 122 1.0854e+015
+143 449 1.08519e+015
+485 235 1.08157e+015
+572 333 1.07998e+015
+500 318 1.07869e+015
+298 137 1.07865e+015
+618 181 1.07785e+015
+246 256 1.07742e+015
+419 68 1.07599e+015
+260 329 1.07542e+015
+222 107 1.07534e+015
+284 386 1.07196e+015
+229 346 1.07175e+015
+64 275 1.07159e+015
+504 260 1.06963e+015
+223 124 1.06814e+015
+186 170 1.06799e+015
+108 75 1.06686e+015
+394 183 1.06682e+015
+272 92 1.0643e+015
+391 324 1.06317e+015
+196 76 1.06242e+015
+474 64 1.06207e+015
+455 179 1.06075e+015
+354 25 1.05672e+015
+541 380 1.05529e+015
+135 73 1.05338e+015
+394 65 1.05275e+015
+493 456 1.05168e+015
+562 141 1.0498e+015
+223 154 1.04923e+015
+45 343 1.0487e+015
+286 34 1.04787e+015
+151 152 1.04688e+015
+433 26 1.04663e+015
+224 398 1.04511e+015
+455 418 1.03994e+015
+378 352 1.03987e+015
+436 468 1.03954e+015
+26 131 1.03932e+015
+271 414 1.03791e+015
+383 103 1.03714e+015
+278 190 1.03669e+015
+576 165 1.03638e+015
+8 235 1.03525e+015
+321 119 1.0347e+015
+232 176 1.03388e+015
+199 166 1.03226e+015
+446 243 1.03164e+015
+537 103 1.03086e+015
+126 218 1.02458e+015
+25 200 1.02398e+015
+485 46 1.02002e+015
+493 79 1.01924e+015
+17 64 1.01705e+015
+374 151 1.01519e+015
+389 134 1.01428e+015
+480 204 1.01005e+015
+336 183 1.00895e+015
+557 18 1.00874e+015
+148 79 1.00669e+015
+559 60 1.00119e+015
+227 198 9.99329e+014
+243 31 9.97283e+014
+104 307 9.96584e+014
+135 21 9.96534e+014
+385 64 9.96117e+014
+426 334 9.96031e+014
+154 56 9.95024e+014
+39 83 9.93943e+014
+112 206 9.93469e+014
+181 293 9.92653e+014
+420 43 9.91752e+014
+256 102 9.91304e+014
+151 317 9.90021e+014
+363 49 9.84837e+014
+46 122 9.84731e+014
+205 202 9.84589e+014
+149 131 9.84096e+014
+131 411 9.83525e+014
+136 323 9.82152e+014
+425 102 9.8201e+014
+267 118 9.81527e+014
+249 387 9.81469e+014
+364 165 9.81237e+014
+166 219 9.77795e+014
+363 407 9.77512e+014
+323 133 9.76646e+014
+538 187 9.76024e+014
+483 359 9.73177e+014
+74 234 9.69966e+014
+546 142 9.69303e+014
+386 334 9.67436e+014
+173 123 9.66894e+014
+210 136 9.65848e+014
+403 5 9.6461e+014
+36 470 9.62826e+014
+556 264 9.62013e+014
+234 32 9.61357e+014
+22 48 9.61082e+014
+116 289 9.60598e+014
+188 255 9.59234e+014
+450 197 9.57856e+014
+354 15 9.56874e+014
+440 379 9.5646e+014
+112 40 9.5582e+014
+333 281 9.55499e+014
+545 439 9.5494e+014
+414 145 9.54125e+014
+257 250 9.51333e+014
+106 29 9.49571e+014
+108 259 9.49195e+014
+581 245 9.47048e+014
+401 320 9.46229e+014
+173 272 9.45377e+014
+269 104 9.42078e+014
+300 246 9.41389e+014
+526 119 9.41197e+014
+84 170 9.41091e+014
+23 322 9.40613e+014
+334 143 9.38666e+014
+129 125 9.37928e+014
+130 113 9.37893e+014
+420 87 9.35811e+014
+334 28 9.34698e+014
+451 125 9.34191e+014
+90 113 9.33765e+014
+143 433 9.30524e+014
+287 308 9.28807e+014
+579 84 9.28127e+014
+265 260 9.25461e+014
+154 163 9.25327e+014
+310 335 9.25137e+014
+113 306 9.2351e+014
+163 348 9.2305e+014
+581 445 9.21977e+014
+333 356 9.21147e+014
+547 283 9.19828e+014
+310 259 9.19444e+014
+344 48 9.1797e+014
+432 121 9.16201e+014
+247 348 9.15569e+014
+307 89 9.13978e+014
+284 212 9.13757e+014
+257 131 9.13335e+014
+252 183 9.13267e+014
+434 226 9.12882e+014
+512 287 9.12792e+014
+318 202 9.11974e+014
+340 220 9.10896e+014
+123 83 9.09332e+014
+202 220 9.09074e+014
+298 399 9.05255e+014
+290 182 9.03495e+014
+420 142 9.00206e+014
+528 437 9.0016e+014
+133 79 8.98033e+014
+512 183 8.98024e+014
+101 444 8.96869e+014
+546 181 8.95236e+014
+460 357 8.94075e+014
+94 422 8.93768e+014
+510 135 8.92666e+014
+206 404 8.92501e+014
+483 287 8.92282e+014
+589 350 8.91953e+014
+85 363 8.91697e+014
+480 45 8.90907e+014
+446 145 8.89203e+014
+502 103 8.87783e+014
+102 392 8.84198e+014
+200 8 8.82731e+014
+152 236 8.82477e+014
+363 455 8.81823e+014
+199 97 8.80592e+014
+107 325 8.77177e+014
+70 259 8.76866e+014
+100 165 8.7683e+014
+280 35 8.76515e+014
+478 399 8.7547e+014
+214 290 8.74813e+014
+535 92 8.74201e+014
+364 353 8.73156e+014
+227 259 8.7313e+014
+230 332 8.71772e+014
+566 176 8.68573e+014
+37 267 8.68409e+014
+355 325 8.65949e+014
+288 125 8.65819e+014
+299 254 8.64635e+014
+421 299 8.634e+014
+186 215 8.62919e+014
+136 180 8.6236e+014
+126 339 8.62207e+014
+288 111 8.61137e+014
+497 118 8.61123e+014
+183 56 8.60033e+014
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_5_7.txt b/test_data/harriscorners/hc_msc_5.00_0.15_5_7.txt
new file mode 100644
index 0000000..a9cd595
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_5_7.txt
@@ -0,0 +1,1331 @@
+1330
+81 29 4.02032e+016
+246 94 3.87072e+016
+421 180 3.83742e+016
+238 20 3.80821e+016
+274 367 3.38325e+016
+131 26 3.09709e+016
+282 113 2.84256e+016
+75 257 2.83902e+016
+261 297 2.81707e+016
+80 3 2.701e+016
+510 124 2.61816e+016
+130 37 2.59809e+016
+424 322 2.47883e+016
+121 43 2.45696e+016
+30 8 2.42082e+016
+542 14 2.35507e+016
+199 18 2.32623e+016
+299 53 2.28522e+016
+152 223 2.18569e+016
+330 128 2.15327e+016
+458 279 2.13623e+016
+544 366 2.08709e+016
+343 8 2.07863e+016
+102 222 2.03723e+016
+55 30 2.03269e+016
+213 57 2.01506e+016
+34 139 1.99213e+016
+483 178 1.98886e+016
+359 294 1.98468e+016
+195 58 1.97963e+016
+292 16 1.97653e+016
+302 184 1.97284e+016
+84 77 1.95378e+016
+37 63 1.94078e+016
+528 25 1.93352e+016
+485 338 1.89733e+016
+361 395 1.8714e+016
+156 1 1.85472e+016
+385 10 1.8229e+016
+400 263 1.79925e+016
+391 296 1.76447e+016
+138 204 1.76151e+016
+464 395 1.75798e+016
+64 344 1.75593e+016
+258 384 1.7538e+016
+241 70 1.74276e+016
+436 68 1.73337e+016
+135 213 1.7031e+016
+60 217 1.69708e+016
+224 39 1.67893e+016
+36 145 1.66165e+016
+319 225 1.64007e+016
+451 338 1.63895e+016
+12 217 1.61594e+016
+211 436 1.61454e+016
+34 100 1.61401e+016
+115 42 1.59763e+016
+512 342 1.57383e+016
+250 12 1.57233e+016
+359 334 1.56331e+016
+345 339 1.55022e+016
+554 40 1.53778e+016
+447 261 1.53666e+016
+328 296 1.52377e+016
+389 59 1.52043e+016
+403 120 1.51288e+016
+224 420 1.4996e+016
+122 186 1.47938e+016
+127 165 1.47254e+016
+225 181 1.45681e+016
+449 299 1.43893e+016
+511 169 1.42545e+016
+320 312 1.4234e+016
+364 251 1.40627e+016
+364 400 1.40381e+016
+313 148 1.40369e+016
+503 1 1.40209e+016
+476 262 1.40071e+016
+125 253 1.39923e+016
+263 442 1.3929e+016
+386 178 1.38975e+016
+158 74 1.37705e+016
+47 98 1.36928e+016
+359 129 1.36831e+016
+175 110 1.35755e+016
+383 5 1.3531e+016
+545 59 1.3484e+016
+528 103 1.34465e+016
+419 8 1.3415e+016
+209 450 1.34099e+016
+143 323 1.31218e+016
+562 478 1.3084e+016
+448 398 1.30806e+016
+79 79 1.30508e+016
+518 59 1.30428e+016
+41 217 1.30195e+016
+163 215 1.28171e+016
+390 143 1.26575e+016
+302 165 1.26508e+016
+486 58 1.25765e+016
+418 438 1.25268e+016
+352 321 1.25128e+016
+272 280 1.24878e+016
+56 290 1.24512e+016
+4 45 1.23828e+016
+356 259 1.22695e+016
+150 306 1.22557e+016
+359 220 1.22121e+016
+427 118 1.22072e+016
+408 183 1.21853e+016
+238 91 1.2166e+016
+43 26 1.21649e+016
+165 240 1.21434e+016
+580 16 1.212e+016
+56 4 1.21076e+016
+310 6 1.20661e+016
+508 454 1.20309e+016
+528 186 1.1913e+016
+246 144 1.18636e+016
+284 402 1.18227e+016
+534 185 1.17686e+016
+177 105 1.17571e+016
+253 139 1.17395e+016
+143 311 1.17335e+016
+107 39 1.16975e+016
+182 398 1.16467e+016
+546 41 1.15728e+016
+449 204 1.15692e+016
+60 40 1.15469e+016
+294 27 1.15449e+016
+126 364 1.15435e+016
+413 259 1.15292e+016
+387 219 1.14469e+016
+128 187 1.14427e+016
+260 220 1.14349e+016
+243 166 1.14055e+016
+500 159 1.13824e+016
+302 215 1.13431e+016
+329 258 1.12594e+016
+471 421 1.12427e+016
+139 109 1.11739e+016
+60 184 1.11722e+016
+87 254 1.11605e+016
+256 151 1.11476e+016
+104 3 1.11212e+016
+132 74 1.10903e+016
+104 61 1.10634e+016
+313 84 1.10407e+016
+253 423 1.09445e+016
+108 240 1.08401e+016
+209 21 1.08362e+016
+343 264 1.08224e+016
+327 141 1.08168e+016
+215 71 1.07661e+016
+392 218 1.07636e+016
+208 222 1.07542e+016
+61 203 1.07413e+016
+435 397 1.07352e+016
+414 22 1.07328e+016
+145 7 1.07085e+016
+174 41 1.06813e+016
+235 347 1.06786e+016
+433 147 1.06577e+016
+211 185 1.06052e+016
+548 162 1.06048e+016
+239 201 1.0546e+016
+229 37 1.05246e+016
+434 112 1.05058e+016
+36 174 1.05047e+016
+65 235 1.04521e+016
+166 326 1.02815e+016
+410 353 1.02434e+016
+123 199 1.0242e+016
+541 124 1.01852e+016
+83 134 1.01336e+016
+101 360 9.9941e+015
+49 150 9.99005e+015
+428 1 9.95392e+015
+301 205 9.95389e+015
+100 198 9.95255e+015
+111 169 9.94397e+015
+508 20 9.93638e+015
+437 304 9.86447e+015
+176 260 9.79373e+015
+371 161 9.74187e+015
+112 391 9.73351e+015
+32 269 9.69788e+015
+52 98 9.69695e+015
+183 35 9.68477e+015
+100 79 9.66801e+015
+54 222 9.64737e+015
+325 341 9.64706e+015
+134 97 9.63638e+015
+479 15 9.62351e+015
+365 6 9.58921e+015
+91 199 9.57541e+015
+543 169 9.4912e+015
+85 148 9.49111e+015
+462 42 9.38275e+015
+24 62 9.33834e+015
+523 22 9.30177e+015
+505 15 9.27408e+015
+183 111 9.26076e+015
+512 221 9.25604e+015
+280 365 9.2338e+015
+326 89 9.22856e+015
+168 196 9.14782e+015
+404 266 9.14436e+015
+66 216 9.14409e+015
+431 318 9.13306e+015
+329 11 9.07291e+015
+112 344 9.07163e+015
+422 336 9.07154e+015
+448 166 9.01348e+015
+513 262 8.98138e+015
+160 144 8.9765e+015
+343 122 8.95231e+015
+134 132 8.94302e+015
+432 276 8.9311e+015
+125 259 8.91555e+015
+52 42 8.88845e+015
+377 120 8.88669e+015
+77 40 8.88168e+015
+260 236 8.88036e+015
+270 290 8.8703e+015
+49 28 8.86325e+015
+389 21 8.83267e+015
+217 280 8.81252e+015
+235 161 8.80229e+015
+385 295 8.80057e+015
+454 207 8.78116e+015
+385 244 8.77753e+015
+163 110 8.76576e+015
+533 20 8.76457e+015
+562 461 8.76205e+015
+263 402 8.72376e+015
+48 12 8.65048e+015
+29 30 8.63958e+015
+298 181 8.63532e+015
+232 125 8.55018e+015
+259 165 8.51436e+015
+357 166 8.47488e+015
+164 73 8.46128e+015
+482 299 8.40801e+015
+50 288 8.40044e+015
+140 19 8.38139e+015
+65 319 8.34467e+015
+296 332 8.33559e+015
+140 182 8.30998e+015
+544 457 8.29851e+015
+412 45 8.26158e+015
+164 278 8.25562e+015
+459 264 8.2535e+015
+450 374 8.2514e+015
+510 129 8.24726e+015
+56 65 8.23219e+015
+445 118 8.21604e+015
+169 55 8.21473e+015
+165 357 8.21315e+015
+367 143 8.20687e+015
+283 51 8.20246e+015
+229 291 8.1991e+015
+190 360 8.19794e+015
+388 164 8.13453e+015
+276 353 8.1224e+015
+7 9 8.11508e+015
+498 225 8.10282e+015
+6 65 8.03916e+015
+110 94 8.01879e+015
+539 457 8.01409e+015
+248 316 8.00559e+015
+272 316 8.00454e+015
+544 4 8.00324e+015
+227 186 7.97444e+015
+40 296 7.97183e+015
+145 161 7.89819e+015
+142 393 7.88133e+015
+176 95 7.87442e+015
+414 65 7.87156e+015
+162 96 7.82497e+015
+231 199 7.82321e+015
+437 319 7.81067e+015
+110 179 7.79472e+015
+65 59 7.79315e+015
+218 105 7.78855e+015
+189 218 7.78829e+015
+360 141 7.77324e+015
+523 61 7.76701e+015
+70 477 7.76312e+015
+97 448 7.7568e+015
+485 44 7.75278e+015
+346 240 7.75102e+015
+561 226 7.73436e+015
+304 190 7.68991e+015
+210 34 7.68942e+015
+265 30 7.65991e+015
+490 139 7.65643e+015
+218 98 7.65625e+015
+362 259 7.64293e+015
+47 81 7.61382e+015
+190 350 7.59881e+015
+324 315 7.58777e+015
+153 235 7.58294e+015
+448 218 7.56523e+015
+493 81 7.56234e+015
+284 73 7.56132e+015
+344 108 7.55912e+015
+110 136 7.55653e+015
+217 147 7.55542e+015
+124 271 7.54108e+015
+517 20 7.53994e+015
+167 313 7.50921e+015
+345 350 7.43419e+015
+413 298 7.42997e+015
+463 27 7.42e+015
+301 264 7.39697e+015
+273 182 7.37953e+015
+464 280 7.3666e+015
+506 6 7.36418e+015
+503 164 7.3641e+015
+223 218 7.3606e+015
+245 207 7.35793e+015
+568 42 7.33521e+015
+385 324 7.33458e+015
+165 179 7.32835e+015
+278 219 7.32565e+015
+223 14 7.30214e+015
+346 276 7.2694e+015
+248 399 7.25174e+015
+159 182 7.25073e+015
+421 165 7.24843e+015
+223 433 7.22101e+015
+433 158 7.20538e+015
+349 181 7.19205e+015
+455 85 7.17733e+015
+206 434 7.15029e+015
+274 132 7.14783e+015
+46 355 7.14417e+015
+540 406 7.11184e+015
+395 164 7.09581e+015
+175 20 7.08271e+015
+358 319 7.07519e+015
+305 439 7.07185e+015
+373 392 7.06939e+015
+470 121 7.05905e+015
+174 312 7.04755e+015
+509 174 7.0396e+015
+111 110 7.03544e+015
+377 68 7.0336e+015
+61 134 7.01473e+015
+522 264 6.98894e+015
+481 84 6.98686e+015
+392 49 6.98398e+015
+271 168 6.97705e+015
+379 338 6.97244e+015
+380 107 6.95312e+015
+297 69 6.92724e+015
+420 47 6.92133e+015
+365 301 6.91788e+015
+153 196 6.88461e+015
+272 73 6.88214e+015
+35 31 6.8805e+015
+407 198 6.83126e+015
+357 11 6.82233e+015
+450 87 6.82229e+015
+523 123 6.78751e+015
+192 143 6.78352e+015
+436 379 6.77494e+015
+42 62 6.76692e+015
+168 18 6.76109e+015
+221 151 6.74146e+015
+557 463 6.72087e+015
+540 98 6.71412e+015
+483 363 6.69041e+015
+208 55 6.67502e+015
+358 66 6.66834e+015
+574 178 6.6632e+015
+373 85 6.65456e+015
+247 219 6.65228e+015
+164 209 6.64711e+015
+56 78 6.61816e+015
+145 16 6.60409e+015
+523 344 6.59443e+015
+194 216 6.59237e+015
+474 247 6.57542e+015
+269 54 6.57475e+015
+447 8 6.57221e+015
+510 100 6.52551e+015
+448 444 6.5024e+015
+120 115 6.48409e+015
+295 421 6.48322e+015
+272 285 6.4797e+015
+200 313 6.47652e+015
+325 426 6.47238e+015
+331 89 6.45374e+015
+575 459 6.45101e+015
+191 206 6.44792e+015
+470 238 6.44618e+015
+527 18 6.44383e+015
+56 364 6.4292e+015
+139 99 6.4113e+015
+473 203 6.38156e+015
+157 91 6.36535e+015
+138 173 6.35443e+015
+346 297 6.3537e+015
+527 347 6.34187e+015
+107 429 6.3406e+015
+273 295 6.33987e+015
+542 209 6.33767e+015
+487 264 6.33298e+015
+160 137 6.30557e+015
+298 274 6.28911e+015
+326 165 6.27908e+015
+365 105 6.27348e+015
+279 136 6.25062e+015
+313 76 6.24814e+015
+91 290 6.23622e+015
+92 254 6.22997e+015
+162 169 6.21626e+015
+117 426 6.21193e+015
+158 112 6.20926e+015
+309 373 6.2092e+015
+528 363 6.20746e+015
+85 61 6.17605e+015
+119 447 6.16372e+015
+340 166 6.16287e+015
+541 130 6.15389e+015
+132 1 6.15115e+015
+84 213 6.14283e+015
+512 78 6.11581e+015
+205 308 6.10623e+015
+126 26 6.10016e+015
+276 331 6.09946e+015
+76 8 6.09448e+015
+178 273 6.08154e+015
+220 290 6.06231e+015
+118 76 6.03517e+015
+196 132 6.03418e+015
+59 253 6.02013e+015
+273 219 6.00886e+015
+284 198 5.99048e+015
+215 124 5.98579e+015
+71 149 5.98069e+015
+444 451 5.97756e+015
+445 123 5.92672e+015
+483 142 5.9232e+015
+282 391 5.9062e+015
+153 112 5.90032e+015
+88 216 5.87998e+015
+301 105 5.87129e+015
+83 476 5.86163e+015
+514 97 5.85656e+015
+337 13 5.82888e+015
+68 419 5.81993e+015
+55 145 5.81768e+015
+402 186 5.81553e+015
+45 339 5.80807e+015
+407 46 5.80804e+015
+88 368 5.80221e+015
+102 236 5.78264e+015
+572 406 5.7781e+015
+88 207 5.76228e+015
+295 269 5.75857e+015
+442 240 5.7584e+015
+107 29 5.75522e+015
+333 67 5.7149e+015
+280 130 5.70624e+015
+266 16 5.70283e+015
+351 145 5.68772e+015
+333 202 5.68675e+015
+353 294 5.67324e+015
+78 474 5.66952e+015
+396 317 5.65752e+015
+463 199 5.65176e+015
+575 13 5.64855e+015
+78 271 5.63809e+015
+223 113 5.63412e+015
+328 181 5.63258e+015
+76 30 5.63077e+015
+471 212 5.61904e+015
+481 451 5.61388e+015
+497 66 5.58362e+015
+394 63 5.57384e+015
+453 102 5.54713e+015
+33 218 5.53077e+015
+472 266 5.52624e+015
+506 361 5.50997e+015
+91 376 5.50327e+015
+11 78 5.47692e+015
+86 311 5.47684e+015
+418 83 5.44893e+015
+357 282 5.44836e+015
+287 397 5.42968e+015
+233 33 5.40912e+015
+174 187 5.40763e+015
+31 235 5.37917e+015
+468 204 5.37727e+015
+514 203 5.37339e+015
+364 180 5.35152e+015
+50 155 5.33467e+015
+302 176 5.31294e+015
+452 62 5.3029e+015
+17 343 5.30282e+015
+525 173 5.30211e+015
+578 43 5.30082e+015
+254 9 5.29934e+015
+451 438 5.28174e+015
+480 440 5.27008e+015
+437 240 5.26768e+015
+529 399 5.26396e+015
+405 81 5.24948e+015
+190 278 5.24581e+015
+383 162 5.24092e+015
+418 283 5.23771e+015
+563 323 5.23664e+015
+189 313 5.22064e+015
+540 41 5.21851e+015
+424 399 5.21607e+015
+437 338 5.20784e+015
+91 276 5.19983e+015
+449 140 5.19718e+015
+48 221 5.19717e+015
+10 103 5.18157e+015
+185 289 5.17232e+015
+249 366 5.1722e+015
+114 1 5.15984e+015
+229 13 5.14459e+015
+537 393 5.1387e+015
+291 88 5.13172e+015
+550 58 5.12703e+015
+244 293 5.12603e+015
+441 22 5.11863e+015
+133 237 5.11259e+015
+185 135 5.10383e+015
+404 376 5.09842e+015
+319 165 5.08936e+015
+363 357 5.08887e+015
+280 438 5.07151e+015
+358 241 5.06757e+015
+261 140 5.05702e+015
+484 329 5.03272e+015
+455 162 5.02962e+015
+570 451 5.02918e+015
+323 146 5.0061e+015
+569 382 4.97789e+015
+335 435 4.97337e+015
+424 63 4.96562e+015
+472 23 4.95028e+015
+92 444 4.91662e+015
+48 234 4.89633e+015
+198 195 4.8826e+015
+163 252 4.87804e+015
+454 116 4.8761e+015
+327 105 4.87418e+015
+253 74 4.865e+015
+571 446 4.85498e+015
+119 130 4.85382e+015
+227 130 4.85209e+015
+259 35 4.81799e+015
+328 214 4.81783e+015
+292 335 4.81598e+015
+272 64 4.79905e+015
+306 449 4.79636e+015
+108 76 4.79398e+015
+424 376 4.79083e+015
+110 58 4.79051e+015
+65 251 4.78569e+015
+335 218 4.78495e+015
+33 110 4.77355e+015
+155 318 4.75865e+015
+166 285 4.74892e+015
+218 208 4.74652e+015
+135 179 4.7376e+015
+400 168 4.73459e+015
+467 138 4.73415e+015
+516 42 4.73231e+015
+504 143 4.70109e+015
+182 343 4.69016e+015
+163 62 4.68347e+015
+525 37 4.66653e+015
+530 142 4.66339e+015
+478 243 4.66275e+015
+384 258 4.6562e+015
+167 116 4.65606e+015
+382 67 4.64997e+015
+537 93 4.64151e+015
+538 138 4.64031e+015
+147 449 4.63169e+015
+413 6 4.62098e+015
+83 171 4.61519e+015
+150 2 4.61164e+015
+387 128 4.60379e+015
+275 139 4.59988e+015
+319 187 4.59445e+015
+253 385 4.59171e+015
+40 355 4.58388e+015
+340 474 4.57743e+015
+78 197 4.56594e+015
+282 418 4.56574e+015
+473 6 4.5397e+015
+421 298 4.53675e+015
+522 426 4.53611e+015
+187 265 4.53393e+015
+216 175 4.52812e+015
+134 147 4.51471e+015
+214 94 4.51217e+015
+190 329 4.51141e+015
+62 371 4.4795e+015
+39 238 4.47767e+015
+279 143 4.47577e+015
+259 392 4.47559e+015
+92 60 4.46587e+015
+87 181 4.46059e+015
+217 425 4.45219e+015
+310 446 4.45165e+015
+242 421 4.44654e+015
+70 96 4.44605e+015
+276 214 4.44231e+015
+359 53 4.43677e+015
+577 245 4.43656e+015
+343 200 4.43302e+015
+261 71 4.42276e+015
+102 162 4.41928e+015
+373 241 4.41897e+015
+362 244 4.40613e+015
+337 264 4.38359e+015
+150 398 4.37732e+015
+113 243 4.36491e+015
+125 78 4.3589e+015
+499 80 4.35209e+015
+53 360 4.33591e+015
+396 104 4.32451e+015
+190 109 4.32091e+015
+516 74 4.31815e+015
+186 202 4.31272e+015
+12 204 4.31087e+015
+162 19 4.3092e+015
+438 468 4.30456e+015
+184 142 4.30183e+015
+514 118 4.29911e+015
+22 48 4.28904e+015
+526 221 4.2872e+015
+181 165 4.26502e+015
+48 162 4.25464e+015
+342 47 4.24882e+015
+220 315 4.24122e+015
+9 234 4.23953e+015
+175 240 4.23739e+015
+163 186 4.23546e+015
+345 166 4.22736e+015
+130 477 4.19719e+015
+196 111 4.18505e+015
+270 108 4.18468e+015
+530 96 4.17792e+015
+114 215 4.17605e+015
+272 145 4.1724e+015
+104 307 4.17169e+015
+209 161 4.1566e+015
+406 164 4.15091e+015
+402 143 4.14997e+015
+366 336 4.14731e+015
+552 377 4.13962e+015
+509 58 4.12715e+015
+517 183 4.12309e+015
+247 107 4.11978e+015
+392 17 4.11225e+015
+43 146 4.10324e+015
+567 180 4.1003e+015
+192 292 4.09723e+015
+487 375 4.09374e+015
+392 159 4.09307e+015
+204 294 4.08454e+015
+255 107 4.08104e+015
+84 72 4.08053e+015
+336 62 4.07372e+015
+382 102 4.06961e+015
+388 138 4.05956e+015
+277 187 4.05718e+015
+512 361 4.05252e+015
+212 145 4.05185e+015
+591 19 4.05046e+015
+182 95 4.04553e+015
+268 242 4.03772e+015
+147 78 4.03733e+015
+284 134 4.03496e+015
+277 111 4.03344e+015
+285 164 4.02655e+015
+209 419 4.02531e+015
+438 182 4.02348e+015
+420 66 4.0207e+015
+320 336 4.02049e+015
+433 81 4.01616e+015
+263 284 4.01596e+015
+288 51 4.01554e+015
+362 63 4.00877e+015
+142 449 3.99284e+015
+353 339 3.991e+015
+155 295 3.9838e+015
+325 133 3.98067e+015
+302 195 3.97678e+015
+376 161 3.97664e+015
+242 58 3.97376e+015
+388 2 3.96902e+015
+323 14 3.96875e+015
+455 48 3.96638e+015
+186 308 3.96349e+015
+97 38 3.96311e+015
+418 449 3.96288e+015
+447 351 3.96136e+015
+122 123 3.96118e+015
+331 413 3.95229e+015
+526 197 3.94638e+015
+17 434 3.94585e+015
+196 124 3.94034e+015
+480 166 3.93113e+015
+402 44 3.93066e+015
+39 286 3.9261e+015
+190 171 3.925e+015
+110 265 3.91304e+015
+376 316 3.91008e+015
+437 280 3.89705e+015
+180 136 3.8837e+015
+250 90 3.88128e+015
+318 459 3.88042e+015
+569 423 3.87568e+015
+9 32 3.87472e+015
+129 428 3.87461e+015
+186 21 3.87241e+015
+541 163 3.86085e+015
+484 163 3.85838e+015
+55 172 3.84885e+015
+72 164 3.8467e+015
+446 21 3.8423e+015
+70 128 3.83933e+015
+51 453 3.8362e+015
+98 257 3.8324e+015
+33 164 3.82484e+015
+290 311 3.81741e+015
+533 161 3.80303e+015
+162 118 3.80122e+015
+38 82 3.80076e+015
+110 326 3.79766e+015
+243 281 3.79254e+015
+547 141 3.7894e+015
+299 295 3.78912e+015
+167 105 3.78282e+015
+287 262 3.77659e+015
+461 162 3.76947e+015
+26 131 3.76894e+015
+103 258 3.76682e+015
+576 125 3.75977e+015
+572 326 3.75924e+015
+88 80 3.7524e+015
+425 184 3.75032e+015
+240 192 3.74826e+015
+541 248 3.74664e+015
+234 262 3.74181e+015
+537 262 3.7332e+015
+85 40 3.73216e+015
+195 255 3.72918e+015
+450 180 3.72004e+015
+508 201 3.71596e+015
+317 103 3.71399e+015
+264 391 3.71368e+015
+137 72 3.71026e+015
+561 142 3.69745e+015
+222 87 3.69363e+015
+398 356 3.69109e+015
+315 446 3.68667e+015
+365 201 3.68515e+015
+187 182 3.68437e+015
+329 26 3.68118e+015
+281 124 3.67395e+015
+265 312 3.67123e+015
+558 79 3.66765e+015
+162 126 3.66756e+015
+421 141 3.66739e+015
+289 139 3.6669e+015
+391 118 3.65952e+015
+523 78 3.65316e+015
+382 413 3.64535e+015
+382 25 3.64342e+015
+162 152 3.64124e+015
+449 126 3.64072e+015
+96 95 3.6407e+015
+520 201 3.64063e+015
+547 217 3.63414e+015
+277 179 3.6311e+015
+226 198 3.6255e+015
+408 140 3.61657e+015
+515 381 3.61233e+015
+315 336 3.60863e+015
+552 383 3.60044e+015
+479 286 3.59762e+015
+149 130 3.59165e+015
+65 182 3.58934e+015
+480 46 3.58429e+015
+8 115 3.56335e+015
+563 160 3.56276e+015
+86 363 3.55986e+015
+115 359 3.54838e+015
+319 386 3.53983e+015
+287 215 3.53938e+015
+396 23 3.52756e+015
+181 155 3.52638e+015
+149 232 3.50933e+015
+385 334 3.50922e+015
+337 389 3.5047e+015
+109 145 3.50356e+015
+307 359 3.4979e+015
+407 429 3.49436e+015
+200 129 3.49259e+015
+178 331 3.49259e+015
+65 275 3.49177e+015
+409 26 3.48865e+015
+337 428 3.48563e+015
+365 165 3.48493e+015
+541 381 3.47948e+015
+204 160 3.47119e+015
+1 383 3.47108e+015
+289 348 3.46974e+015
+575 100 3.46945e+015
+596 363 3.46935e+015
+158 305 3.46024e+015
+281 223 3.44712e+015
+330 334 3.44109e+015
+225 51 3.4364e+015
+307 169 3.43314e+015
+119 95 3.43301e+015
+342 466 3.42913e+015
+314 165 3.41991e+015
+292 122 3.41867e+015
+17 65 3.40464e+015
+534 121 3.40437e+015
+470 42 3.3976e+015
+483 204 3.39718e+015
+302 333 3.39641e+015
+239 220 3.3953e+015
+372 69 3.37862e+015
+386 282 3.37505e+015
+228 260 3.37409e+015
+436 122 3.37278e+015
+275 204 3.37226e+015
+209 155 3.36802e+015
+378 183 3.36655e+015
+199 329 3.36633e+015
+41 182 3.3584e+015
+203 318 3.35591e+015
+308 354 3.3502e+015
+96 423 3.34808e+015
+160 33 3.34352e+015
+506 380 3.34213e+015
+18 236 3.34171e+015
+471 82 3.3409e+015
+163 349 3.33994e+015
+357 267 3.33833e+015
+477 339 3.3345e+015
+409 64 3.33331e+015
+505 261 3.3256e+015
+86 377 3.32504e+015
+306 90 3.32371e+015
+432 237 3.31977e+015
+212 150 3.31512e+015
+455 177 3.31236e+015
+494 58 3.30749e+015
+46 408 3.30304e+015
+580 346 3.30208e+015
+360 362 3.29545e+015
+125 96 3.28553e+015
+336 144 3.2832e+015
+199 166 3.28117e+015
+190 136 3.27858e+015
+368 109 3.27169e+015
+438 159 3.26882e+015
+359 368 3.2658e+015
+43 475 3.25589e+015
+261 199 3.24923e+015
+178 56 3.24922e+015
+513 442 3.23843e+015
+174 201 3.23507e+015
+594 101 3.23293e+015
+558 19 3.23263e+015
+135 322 3.23027e+015
+25 118 3.22082e+015
+167 433 3.21596e+015
+542 444 3.21191e+015
+211 396 3.20764e+015
+529 270 3.20543e+015
+94 19 3.20415e+015
+72 187 3.20177e+015
+251 164 3.20054e+015
+574 140 3.19815e+015
+101 96 3.19627e+015
+499 266 3.19465e+015
+269 416 3.1945e+015
+183 316 3.19345e+015
+284 299 3.19139e+015
+465 424 3.19094e+015
+311 299 3.18991e+015
+563 18 3.18262e+015
+265 249 3.17726e+015
+128 126 3.17417e+015
+171 451 3.16898e+015
+157 39 3.16796e+015
+332 355 3.1596e+015
+527 160 3.15476e+015
+442 97 3.15207e+015
+139 136 3.15195e+015
+497 117 3.15167e+015
+115 277 3.14875e+015
+113 76 3.14673e+015
+415 165 3.14187e+015
+267 68 3.13365e+015
+155 57 3.12407e+015
+411 264 3.12244e+015
+578 84 3.12239e+015
+387 451 3.11988e+015
+559 272 3.11966e+015
+65 477 3.11593e+015
+304 160 3.11382e+015
+385 91 3.11141e+015
+298 138 3.10144e+015
+215 289 3.08621e+015
+76 110 3.08516e+015
+352 425 3.08327e+015
+432 268 3.07953e+015
+464 115 3.07528e+015
+143 235 3.0746e+015
+566 144 3.07091e+015
+186 101 3.06926e+015
+413 81 3.06752e+015
+61 78 3.06407e+015
+502 43 3.06109e+015
+72 235 3.05997e+015
+250 150 3.05283e+015
+82 100 3.04885e+015
+282 268 3.04868e+015
+112 354 3.04865e+015
+413 244 3.04143e+015
+526 383 3.0347e+015
+471 142 3.03301e+015
+510 206 3.02811e+015
+343 142 3.02387e+015
+35 200 3.01277e+015
+125 216 3.00824e+015
+248 260 2.98143e+015
+97 456 2.97898e+015
+445 244 2.97696e+015
+361 48 2.97652e+015
+528 30 2.97458e+015
+68 48 2.97445e+015
+577 53 2.97216e+015
+323 29 2.97023e+015
+362 453 2.96768e+015
+548 181 2.96728e+015
+356 24 2.96723e+015
+439 108 2.96237e+015
+278 86 2.96081e+015
+224 125 2.95531e+015
+155 444 2.95231e+015
+464 354 2.95027e+015
+391 325 2.94395e+015
+498 463 2.9428e+015
+227 72 2.93656e+015
+178 1 2.93045e+015
+3 235 2.92459e+015
+329 321 2.92186e+015
+420 362 2.91923e+015
+94 367 2.9186e+015
+255 459 2.9103e+015
+430 151 2.90934e+015
+194 84 2.90609e+015
+295 410 2.89958e+015
+147 97 2.89463e+015
+71 407 2.89458e+015
+114 143 2.89119e+015
+322 104 2.88843e+015
+173 416 2.88627e+015
+275 51 2.88505e+015
+268 92 2.8818e+015
+367 88 2.87988e+015
+166 379 2.87827e+015
+289 112 2.87696e+015
+242 33 2.86805e+015
+200 76 2.86799e+015
+495 474 2.85949e+015
+550 223 2.85881e+015
+191 188 2.85766e+015
+66 26 2.85354e+015
+120 55 2.85331e+015
+437 25 2.84491e+015
+594 425 2.84083e+015
+114 261 2.83237e+015
+541 21 2.83233e+015
+26 44 2.82751e+015
+275 78 2.82588e+015
+233 406 2.82369e+015
+350 273 2.82012e+015
+401 318 2.81892e+015
+412 416 2.81622e+015
+104 35 2.81035e+015
+375 225 2.80743e+015
+425 103 2.80576e+015
+150 151 2.80298e+015
+210 97 2.80296e+015
+562 149 2.7984e+015
+268 119 2.79669e+015
+261 369 2.79396e+015
+250 192 2.7843e+015
+241 155 2.78421e+015
+299 87 2.78264e+015
+575 165 2.78068e+015
+196 189 2.77523e+015
+286 246 2.7722e+015
+511 135 2.76856e+015
+13 112 2.76538e+015
+200 30 2.76279e+015
+207 405 2.75706e+015
+266 131 2.75653e+015
+509 140 2.7553e+015
+413 284 2.75387e+015
+307 428 2.75256e+015
+181 16 2.75155e+015
+412 99 2.74468e+015
+70 22 2.7411e+015
+374 3 2.73928e+015
+183 382 2.73913e+015
+247 255 2.73329e+015
+127 109 2.73266e+015
+486 239 2.72962e+015
+528 432 2.72956e+015
+518 141 2.72528e+015
+309 33 2.72493e+015
+33 260 2.72318e+015
+597 33 2.72298e+015
+283 84 2.71966e+015
+433 43 2.71779e+015
+484 6 2.71383e+015
+530 115 2.71303e+015
+571 203 2.70978e+015
+413 144 2.70564e+015
+150 135 2.70487e+015
+371 338 2.70241e+015
+414 219 2.69051e+015
+236 416 2.69026e+015
+91 285 2.68532e+015
+577 310 2.68518e+015
+189 255 2.68504e+015
+134 80 2.68336e+015
+583 38 2.68273e+015
+282 211 2.68186e+015
+501 363 2.68137e+015
+155 161 2.67361e+015
+446 416 2.67267e+015
+133 91 2.67239e+015
+444 128 2.67016e+015
+501 320 2.66744e+015
+148 91 2.66583e+015
+395 183 2.6624e+015
+36 76 2.66228e+015
+396 138 2.65629e+015
+54 330 2.65214e+015
+40 308 2.64913e+015
+302 243 2.63261e+015
+86 355 2.63167e+015
+201 345 2.62993e+015
+513 403 2.62501e+015
+207 203 2.62465e+015
+261 327 2.62314e+015
+251 182 2.62037e+015
+145 140 2.61723e+015
+195 170 2.61144e+015
+387 419 2.60973e+015
+272 208 2.60905e+015
+371 118 2.60701e+015
+277 320 2.60637e+015
+149 312 2.60458e+015
+54 236 2.60093e+015
+212 134 2.59698e+015
+283 32 2.59378e+015
+128 307 2.58956e+015
+202 394 2.58638e+015
+476 398 2.58551e+015
+228 282 2.57776e+015
+476 81 2.57273e+015
+403 15 2.56307e+015
+137 61 2.56196e+015
+47 204 2.55981e+015
+349 125 2.55972e+015
+413 183 2.55869e+015
+481 101 2.55682e+015
+582 446 2.55618e+015
+321 120 2.55384e+015
+204 419 2.5537e+015
+191 420 2.5536e+015
+240 327 2.55314e+015
+77 162 2.551e+015
+130 216 2.5447e+015
+218 128 2.54378e+015
+219 398 2.54296e+015
+382 451 2.54211e+015
+268 219 2.53905e+015
+332 242 2.53628e+015
+41 203 2.52845e+015
+126 73 2.52809e+015
+136 140 2.52593e+015
+231 364 2.52591e+015
+497 284 2.52483e+015
+478 143 2.52161e+015
+338 182 2.52027e+015
+188 300 2.51665e+015
+90 94 2.51476e+015
+502 460 2.50721e+015
+187 324 2.50679e+015
+175 125 2.50622e+015
+47 255 2.50586e+015
+282 386 2.50561e+015
+57 137 2.50492e+015
+264 321 2.50344e+015
+463 224 2.50213e+015
+469 108 2.50155e+015
+266 203 2.50019e+015
+273 94 2.49787e+015
+245 388 2.49457e+015
+268 137 2.49186e+015
+175 120 2.4901e+015
+84 109 2.48981e+015
+14 47 2.48901e+015
+375 156 2.48798e+015
+80 406 2.48779e+015
+578 48 2.48629e+015
+225 397 2.48347e+015
+255 4 2.48277e+015
+335 405 2.48046e+015
+4 33 2.47754e+015
+544 262 2.47645e+015
+511 298 2.47453e+015
+298 398 2.47126e+015
+240 150 2.46792e+015
+299 256 2.46774e+015
+69 305 2.46599e+015
+215 314 2.46395e+015
+346 34 2.46271e+015
+157 24 2.46125e+015
+222 72 2.46106e+015
+283 338 2.45952e+015
+264 55 2.45759e+015
+412 430 2.456e+015
+230 179 2.45526e+015
+60 148 2.45523e+015
+540 186 2.4552e+015
+82 369 2.45423e+015
+25 201 2.45301e+015
+94 372 2.45173e+015
+468 318 2.45005e+015
+199 98 2.44632e+015
+211 11 2.44234e+015
+503 177 2.43936e+015
+494 340 2.43746e+015
+83 196 2.4321e+015
+306 258 2.43044e+015
+55 371 2.42716e+015
+67 202 2.427e+015
+405 9 2.42685e+015
+167 152 2.41767e+015
+264 259 2.41751e+015
+244 187 2.40624e+015
+528 437 2.40205e+015
+460 376 2.402e+015
+69 258 2.40175e+015
+247 405 2.39657e+015
+186 270 2.39382e+015
+130 114 2.39366e+015
+424 261 2.38883e+015
+246 326 2.38506e+015
+113 338 2.38333e+015
+5 150 2.38224e+015
+522 360 2.37815e+015
+124 341 2.37382e+015
+179 379 2.37139e+015
+333 330 2.37094e+015
+327 52 2.36784e+015
+142 429 2.36727e+015
+64 312 2.36667e+015
+345 331 2.3655e+015
+397 46 2.36334e+015
+380 158 2.36212e+015
+389 290 2.35781e+015
+94 124 2.3568e+015
+71 389 2.35548e+015
+478 7 2.35371e+015
+391 205 2.35239e+015
+540 181 2.34839e+015
+111 206 2.34748e+015
+545 86 2.34652e+015
+149 23 2.34075e+015
+239 215 2.33881e+015
+374 151 2.33805e+015
+433 227 2.33718e+015
+106 183 2.32916e+015
+269 260 2.32747e+015
+48 131 2.32626e+015
+576 134 2.32188e+015
+274 121 2.31373e+015
+303 372 2.30733e+015
+184 116 2.30518e+015
+242 244 2.30493e+015
+381 88 2.3028e+015
+107 382 2.29994e+015
+148 192 2.2993e+015
+156 79 2.294e+015
+376 145 2.29276e+015
+277 427 2.29241e+015
+20 316 2.29217e+015
+391 97 2.28842e+015
+554 181 2.28837e+015
+405 76 2.28727e+015
+206 236 2.28552e+015
+248 346 2.28478e+015
+187 167 2.28212e+015
+130 409 2.28177e+015
+119 170 2.27987e+015
+446 293 2.27941e+015
+402 101 2.27662e+015
+57 101 2.26839e+015
+45 122 2.26265e+015
+168 414 2.26251e+015
+105 111 2.26163e+015
+450 325 2.26103e+015
+351 12 2.25848e+015
+303 403 2.25786e+015
+195 77 2.25755e+015
+567 60 2.25684e+015
+210 307 2.25672e+015
+478 221 2.25663e+015
+191 122 2.25262e+015
+573 4 2.25196e+015
+500 104 2.25177e+015
+359 135 2.25015e+015
+310 220 2.24882e+015
+548 281 2.24655e+015
+334 282 2.24407e+015
+74 61 2.24314e+015
+387 102 2.23839e+015
+216 329 2.2378e+015
+198 466 2.23722e+015
+525 281 2.23466e+015
+342 311 2.23107e+015
+37 167 2.22452e+015
+476 271 2.21687e+015
+344 322 2.21024e+015
+494 459 2.2095e+015
+450 197 2.20494e+015
+276 194 2.19938e+015
+502 122 2.19734e+015
+453 378 2.19632e+015
+547 302 2.1924e+015
+27 169 2.19124e+015
+309 55 2.18978e+015
+203 200 2.18947e+015
+460 422 2.18864e+015
+373 125 2.1835e+015
+419 411 2.18024e+015
+573 56 2.17509e+015
+241 144 2.17338e+015
+343 370 2.16777e+015
+556 245 2.15936e+015
+117 290 2.15614e+015
+513 303 2.15521e+015
+431 25 2.1549e+015
+347 414 2.15202e+015
+418 98 2.15199e+015
+260 271 2.14759e+015
+170 219 2.14684e+015
+520 242 2.14553e+015
+271 355 2.1449e+015
+600 274 2.14138e+015
+162 191 2.13467e+015
+509 365 2.13467e+015
+374 451 2.13358e+015
+157 122 2.1226e+015
+240 315 2.11616e+015
+290 184 2.1141e+015
+319 452 2.11375e+015
+355 105 2.10836e+015
+433 1 2.1069e+015
+199 115 2.1035e+015
+360 443 2.09998e+015
+200 8 2.09831e+015
+315 124 2.09816e+015
+32 79 2.09275e+015
+393 11 2.0885e+015
+186 72 2.08831e+015
+15 212 2.08793e+015
+20 254 2.08588e+015
+344 186 2.08396e+015
+95 387 2.08205e+015
+539 79 2.08133e+015
+498 242 2.08113e+015
+286 307 2.07909e+015
+557 475 2.07659e+015
+202 404 2.07242e+015
+63 258 2.07131e+015
+474 451 2.07065e+015
+453 94 2.06947e+015
+142 257 2.06928e+015
+277 264 2.06907e+015
+511 352 2.06716e+015
+183 57 2.06343e+015
+244 180 2.05941e+015
+383 145 2.05854e+015
+97 29 2.0545e+015
+141 143 2.0469e+015
+575 333 2.04404e+015
+127 331 2.04303e+015
+213 204 2.04105e+015
+466 213 2.03896e+015
+576 37 2.03877e+015
+57 302 2.03668e+015
+217 413 2.03485e+015
+567 224 2.03417e+015
+463 187 2.03365e+015
+335 28 2.03225e+015
+556 366 2.03014e+015
+25 256 2.02872e+015
+452 416 2.02798e+015
+288 31 2.02276e+015
+9 222 2.02029e+015
+36 233 2.01958e+015
+83 275 2.01639e+015
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_7_3.txt b/test_data/harriscorners/hc_msc_5.00_0.15_7_3.txt
new file mode 100644
index 0000000..20d7d63
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_7_3.txt
@@ -0,0 +1,707 @@
+706
+245 95 8.29987e+019
+363 401 6.31582e+019
+274 366 6.21795e+019
+499 1 5.06707e+019
+251 13 4.65892e+019
+240 90 3.97539e+019
+122 44 3.67023e+019
+131 36 3.64636e+019
+507 122 3.63828e+019
+449 298 3.33565e+019
+65 343 3.30421e+019
+261 297 3.15072e+019
+344 10 3.1281e+019
+465 394 2.93093e+019
+200 16 2.89419e+019
+59 219 2.88975e+019
+282 115 2.87339e+019
+418 440 2.87042e+019
+446 396 2.82962e+019
+130 2 2.75483e+019
+480 298 2.55476e+019
+110 238 2.5223e+019
+427 320 2.4938e+019
+387 10 2.46049e+019
+387 178 2.42342e+019
+125 199 2.41836e+019
+456 280 2.41094e+019
+553 40 2.40732e+019
+271 166 2.4e+019
+37 62 2.3961e+019
+448 262 2.38667e+019
+144 309 2.3349e+019
+239 18 2.31203e+019
+479 19 2.24661e+019
+213 72 2.22864e+019
+435 68 2.22013e+019
+520 61 2.21936e+019
+72 24 2.21809e+019
+183 400 2.20096e+019
+411 354 2.1967e+019
+355 220 2.19571e+019
+423 181 2.16989e+019
+77 257 2.14745e+019
+271 71 2.12549e+019
+543 365 2.12376e+019
+46 28 2.12018e+019
+462 279 2.06096e+019
+135 214 2.03358e+019
+102 4 2.03114e+019
+101 58 2.02767e+019
+233 15 1.9954e+019
+303 183 1.99147e+019
+512 167 1.97006e+019
+35 146 1.95473e+019
+421 334 1.94648e+019
+432 146 1.93837e+019
+263 441 1.9352e+019
+392 144 1.93377e+019
+300 52 1.92231e+019
+425 377 1.91266e+019
+510 173 1.90584e+019
+224 419 1.89032e+019
+514 76 1.88629e+019
+255 387 1.88492e+019
+402 122 1.88196e+019
+111 393 1.87212e+019
+242 71 1.87178e+019
+262 165 1.86869e+019
+58 183 1.86452e+019
+4 66 1.84871e+019
+29 8 1.84801e+019
+309 372 1.83732e+019
+177 106 1.83031e+019
+74 6 1.82426e+019
+390 58 1.82258e+019
+439 339 1.81548e+019
+348 179 1.78916e+019
+512 341 1.77754e+019
+41 297 1.77753e+019
+498 82 1.75934e+019
+304 216 1.74912e+019
+239 349 1.72909e+019
+35 137 1.72645e+019
+482 365 1.71904e+019
+300 265 1.70241e+019
+137 203 1.6803e+019
+385 221 1.67419e+019
+293 15 1.65908e+019
+453 340 1.65294e+019
+358 260 1.6438e+019
+382 8 1.60801e+019
+125 255 1.60471e+019
+138 110 1.56045e+019
+124 362 1.55557e+019
+372 163 1.5543e+019
+64 234 1.54079e+019
+550 379 1.53762e+019
+192 331 1.53381e+019
+324 341 1.53067e+019
+167 286 1.52911e+019
+245 143 1.51277e+019
+348 241 1.50524e+019
+64 60 1.49356e+019
+412 256 1.48233e+019
+545 168 1.48086e+019
+181 111 1.46702e+019
+525 60 1.43649e+019
+542 18 1.43116e+019
+81 3 1.42908e+019
+327 127 1.42767e+019
+312 149 1.4255e+019
+334 436 1.42445e+019
+378 353 1.40935e+019
+66 214 1.39588e+019
+132 26 1.39494e+019
+562 147 1.39424e+019
+210 445 1.39316e+019
+139 173 1.39137e+019
+434 398 1.38655e+019
+92 197 1.38388e+019
+360 131 1.36976e+019
+170 57 1.36779e+019
+82 29 1.35208e+019
+577 15 1.3483e+019
+249 363 1.34681e+019
+66 320 1.33162e+019
+328 142 1.32414e+019
+282 403 1.31653e+019
+510 455 1.31389e+019
+221 15 1.3126e+019
+360 294 1.30786e+019
+53 43 1.30625e+019
+277 352 1.30597e+019
+228 292 1.30431e+019
+127 75 1.30325e+019
+512 125 1.29815e+019
+356 268 1.29578e+019
+567 43 1.2946e+019
+542 210 1.28154e+019
+360 337 1.27951e+019
+203 310 1.2787e+019
+248 404 1.27478e+019
+514 223 1.27219e+019
+36 175 1.27045e+019
+522 122 1.2672e+019
+206 224 1.26706e+019
+387 243 1.26188e+019
+233 162 1.251e+019
+225 221 1.2491e+019
+451 376 1.24894e+019
+482 327 1.24831e+019
+503 361 1.24172e+019
+481 179 1.23634e+019
+177 260 1.23535e+019
+338 165 1.23388e+019
+302 205 1.23315e+019
+528 98 1.23197e+019
+345 109 1.22397e+019
+31 219 1.222e+019
+416 23 1.20866e+019
+355 320 1.20673e+019
+12 101 1.20216e+019
+46 147 1.19846e+019
+449 219 1.19809e+019
+270 279 1.1863e+019
+279 222 1.18536e+019
+68 149 1.18293e+019
+123 272 1.18002e+019
+162 214 1.17908e+019
+223 38 1.17801e+019
+192 219 1.17293e+019
+55 31 1.17166e+019
+328 66 1.17155e+019
+475 22 1.1711e+019
+512 295 1.1625e+019
+191 359 1.15984e+019
+48 100 1.15341e+019
+42 339 1.14968e+019
+533 183 1.14342e+019
+342 337 1.1425e+019
+169 198 1.13877e+019
+97 447 1.13821e+019
+472 63 1.12629e+019
+114 345 1.12611e+019
+283 72 1.12464e+019
+403 188 1.10715e+019
+91 292 1.10304e+019
+45 81 1.09887e+019
+524 20 1.09808e+019
+164 242 1.09698e+019
+512 98 1.09051e+019
+220 178 1.08538e+019
+395 260 1.07925e+019
+358 10 1.0781e+019
+360 217 1.07374e+019
+232 200 1.0729e+019
+99 221 1.07074e+019
+529 24 1.06368e+019
+272 130 1.05809e+019
+422 44 1.05803e+019
+246 294 1.05371e+019
+541 99 1.0408e+019
+456 83 1.03975e+019
+33 99 1.0334e+019
+422 398 1.02864e+019
+340 13 1.0267e+019
+187 99 1.01632e+019
+449 178 1.01258e+019
+321 312 1.01109e+019
+470 239 1.00193e+019
+101 77 1.00148e+019
+526 223 1.00128e+019
+132 148 9.96132e+018
+408 63 9.94548e+018
+387 295 9.93554e+018
+367 247 9.92399e+018
+263 201 9.92195e+018
+55 294 9.91961e+018
+157 73 9.9176e+018
+165 218 9.91456e+018
+113 213 9.89036e+018
+177 93 9.84234e+018
+413 299 9.83522e+018
+57 364 9.79893e+018
+85 214 9.79349e+018
+298 70 9.78146e+018
+127 165 9.74652e+018
+68 27 9.70054e+018
+486 182 9.69527e+018
+72 97 9.66968e+018
+433 110 9.66629e+018
+195 58 9.6552e+018
+37 288 9.65441e+018
+229 35 9.64947e+018
+15 219 9.60826e+018
+147 21 9.56221e+018
+242 100 9.55146e+018
+88 148 9.53962e+018
+347 393 9.5192e+018
+326 426 9.47138e+018
+289 137 9.42787e+018
+526 38 9.41141e+018
+281 51 9.3576e+018
+528 188 9.35476e+018
+254 138 9.311e+018
+452 205 9.30687e+018
+542 130 9.29466e+018
+275 181 9.29065e+018
+484 338 9.24613e+018
+86 255 9.2383e+018
+497 228 9.19755e+018
+159 138 9.17975e+018
+115 44 9.15714e+018
+87 209 9.12236e+018
+44 10 9.1167e+018
+432 83 9.11165e+018
+379 69 9.10307e+018
+273 297 9.10229e+018
+110 96 9.07083e+018
+49 153 9.05899e+018
+245 14 9.03061e+018
+317 148 9.01125e+018
+525 345 8.96833e+018
+358 64 8.92242e+018
+230 266 8.91446e+018
+382 411 8.90609e+018
+312 7 8.89761e+018
+135 129 8.85472e+018
+350 145 8.85053e+018
+196 82 8.81065e+018
+141 394 8.77839e+018
+56 5 8.76264e+018
+208 451 8.75751e+018
+306 192 8.75105e+018
+103 392 8.73581e+018
+255 182 8.71918e+018
+408 182 8.6647e+018
+212 182 8.65731e+018
+137 208 8.65149e+018
+314 82 8.64074e+018
+366 143 8.63639e+018
+584 38 8.63378e+018
+547 40 8.62703e+018
+306 439 8.56546e+018
+108 183 8.54742e+018
+478 12 8.54357e+018
+100 162 8.52508e+018
+173 40 8.4817e+018
+435 281 8.47692e+018
+545 4 8.46875e+018
+403 6 8.45169e+018
+156 318 8.42597e+018
+35 201 8.41892e+018
+377 119 8.40704e+018
+254 422 8.40647e+018
+244 165 8.39951e+018
+389 140 8.37756e+018
+181 380 8.33603e+018
+351 271 8.29222e+018
+18 343 8.27106e+018
+328 253 8.26364e+018
+170 18 8.25974e+018
+294 26 8.19957e+018
+224 183 8.19636e+018
+597 272 8.17663e+018
+301 164 8.17016e+018
+141 2 8.14181e+018
+545 57 8.11629e+018
+338 391 8.11212e+018
+286 166 8.10819e+018
+333 89 8.07445e+018
+183 19 8.05781e+018
+465 197 8.0511e+018
+158 143 8.02439e+018
+181 394 7.99991e+018
+418 68 7.99389e+018
+280 128 7.98066e+018
+6 45 7.96696e+018
+82 136 7.94451e+018
+259 71 7.88672e+018
+140 183 7.87541e+018
+58 74 7.85317e+018
+541 124 7.78833e+018
+157 55 7.75517e+018
+195 16 7.73758e+018
+259 221 7.72042e+018
+362 360 7.68274e+018
+391 324 7.68137e+018
+104 359 7.66655e+018
+506 203 7.66479e+018
+208 54 7.6547e+018
+153 225 7.65066e+018
+528 104 7.64017e+018
+329 9 7.60116e+018
+107 40 7.57867e+018
+307 448 7.56713e+018
+571 448 7.51864e+018
+484 59 7.51587e+018
+110 264 7.49294e+018
+411 162 7.49047e+018
+398 169 7.49043e+018
+110 46 7.48868e+018
+220 107 7.48711e+018
+568 383 7.45102e+018
+500 224 7.43127e+018
+508 7 7.42205e+018
+22 61 7.42167e+018
+537 458 7.41984e+018
+576 178 7.39841e+018
+392 165 7.39169e+018
+537 186 7.39154e+018
+243 190 7.36138e+018
+418 300 7.32907e+018
+420 81 7.30744e+018
+444 453 7.27809e+018
+268 288 7.27711e+018
+363 9 7.27078e+018
+248 218 7.24343e+018
+292 311 7.24247e+018
+290 49 7.23539e+018
+144 187 7.2072e+018
+521 263 7.20492e+018
+371 392 7.17633e+018
+598 364 7.16063e+018
+393 46 7.15866e+018
+7 11 7.1459e+018
+490 343 7.14412e+018
+267 297 7.14112e+018
+457 375 7.1258e+018
+38 219 7.11013e+018
+561 320 7.09749e+018
+406 375 7.07361e+018
+84 476 7.07352e+018
+507 164 7.07035e+018
+163 277 7.04762e+018
+94 219 7.03191e+018
+515 347 7.02897e+018
+514 382 7.00906e+018
+9 76 6.99607e+018
+137 138 6.99229e+018
+528 362 6.97571e+018
+371 90 6.95145e+018
+287 33 6.93652e+018
+162 207 6.93476e+018
+525 425 6.89477e+018
+438 304 6.89326e+018
+198 131 6.87786e+018
+344 197 6.83864e+018
+320 225 6.82907e+018
+475 342 6.82348e+018
+517 16 6.81707e+018
+265 32 6.81223e+018
+357 282 6.79951e+018
+239 422 6.76382e+018
+297 332 6.74483e+018
+156 1 6.74295e+018
+245 206 6.73828e+018
+560 81 6.73692e+018
+100 199 6.73534e+018
+184 35 6.73128e+018
+475 262 6.70052e+018
+250 32 6.6848e+018
+151 307 6.65405e+018
+380 25 6.65164e+018
+488 262 6.64421e+018
+338 473 6.6414e+018
+325 165 6.60706e+018
+210 437 6.58414e+018
+502 143 6.58152e+018
+277 370 6.56472e+018
+511 43 6.55615e+018
+131 255 6.54071e+018
+297 410 6.53454e+018
+122 52 6.52882e+018
+65 371 6.52107e+018
+345 351 6.50846e+018
+358 143 6.50363e+018
+449 446 6.48873e+018
+131 476 6.47187e+018
+116 184 6.44879e+018
+204 435 6.44684e+018
+285 212 6.42344e+018
+68 304 6.39205e+018
+439 455 6.3786e+018
+216 54 6.36956e+018
+181 291 6.36852e+018
+537 392 6.35609e+018
+124 261 6.35099e+018
+209 36 6.34713e+018
+179 329 6.34327e+018
+417 7 6.3379e+018
+283 206 6.3143e+018
+417 450 6.3014e+018
+572 328 6.29612e+018
+210 154 6.27036e+018
+374 241 6.26639e+018
+324 90 6.25283e+018
+492 140 6.25216e+018
+42 24 6.24789e+018
+70 478 6.23877e+018
+539 40 6.22031e+018
+445 127 6.21473e+018
+84 78 6.21352e+018
+216 280 6.20378e+018
+216 175 6.1969e+018
+277 329 6.19529e+018
+85 59 6.18791e+018
+449 167 6.18573e+018
+285 297 6.17726e+018
+378 339 6.1771e+018
+46 354 6.12955e+018
+106 62 6.10747e+018
+30 135 6.10255e+018
+323 260 6.088e+018
+348 299 6.07384e+018
+206 159 6.06629e+018
+357 125 6.05967e+018
+492 59 6.0501e+018
+177 18 6.04843e+018
+146 160 6.0457e+018
+214 59 6.01688e+018
+492 182 5.99995e+018
+123 185 5.99329e+018
+101 236 5.98858e+018
+471 212 5.97695e+018
+545 217 5.95716e+018
+404 13 5.94121e+018
+274 76 5.92397e+018
+508 19 5.907e+018
+290 264 5.90568e+018
+336 317 5.87058e+018
+247 318 5.85345e+018
+260 368 5.85108e+018
+441 98 5.83824e+018
+358 53 5.81415e+018
+129 309 5.81188e+018
+91 256 5.79594e+018
+54 66 5.79535e+018
+444 23 5.78502e+018
+16 214 5.78354e+018
+129 238 5.7806e+018
+272 53 5.76507e+018
+188 264 5.75556e+018
+368 337 5.74349e+018
+513 402 5.7285e+018
+364 106 5.69916e+018
+332 333 5.6914e+018
+154 114 5.68434e+018
+115 306 5.67851e+018
+164 358 5.67247e+018
+480 403 5.66342e+018
+496 462 5.6605e+018
+458 266 5.66049e+018
+429 88 5.64736e+018
+516 202 5.63057e+018
+561 71 5.6277e+018
+324 145 5.62223e+018
+239 202 5.61179e+018
+266 403 5.61168e+018
+236 221 5.58958e+018
+275 318 5.5894e+018
+317 107 5.56324e+018
+328 288 5.56049e+018
+364 255 5.54631e+018
+398 358 5.5436e+018
+280 420 5.53429e+018
+321 10 5.5067e+018
+472 421 5.48004e+018
+88 354 5.46611e+018
+395 105 5.44622e+018
+117 428 5.44148e+018
+235 346 5.4319e+018
+184 94 5.41307e+018
+428 224 5.40874e+018
+148 131 5.39908e+018
+62 203 5.39641e+018
+252 74 5.38864e+018
+450 22 5.38829e+018
+56 373 5.38488e+018
+523 186 5.38204e+018
+439 24 5.37163e+018
+44 62 5.37126e+018
+210 395 5.36517e+018
+241 59 5.3583e+018
+469 139 5.35293e+018
+246 106 5.35099e+018
+560 229 5.34579e+018
+358 393 5.34376e+018
+114 3 5.3381e+018
+45 407 5.33067e+018
+135 238 5.32654e+018
+115 77 5.3222e+018
+533 122 5.32197e+018
+75 132 5.31661e+018
+83 404 5.31617e+018
+282 393 5.31221e+018
+497 160 5.30359e+018
+341 263 5.29559e+018
+39 168 5.29356e+018
+436 91 5.29061e+018
+386 327 5.26954e+018
+164 328 5.2683e+018
+296 420 5.25384e+018
+84 310 5.24061e+018
+32 66 5.23854e+018
+155 195 5.22984e+018
+136 21 5.2274e+018
+366 2 5.20477e+018
+10 218 5.20317e+018
+390 448 5.19654e+018
+432 268 5.19633e+018
+3 155 5.19445e+018
+50 452 5.18844e+018
+160 183 5.18355e+018
+137 98 5.16795e+018
+274 215 5.1516e+018
+74 186 5.13309e+018
+479 451 5.12978e+018
+540 140 5.12616e+018
+540 405 5.1227e+018
+46 219 5.11892e+018
+463 23 5.11198e+018
+232 274 5.10285e+018
+43 474 5.10246e+018
+403 265 5.10039e+018
+437 466 5.09387e+018
+113 356 5.08853e+018
+159 112 5.0851e+018
+471 268 5.07774e+018
+317 385 5.07671e+018
+333 413 5.07362e+018
+190 146 5.07152e+018
+475 5 5.05733e+018
+430 1 5.01349e+018
+413 4 5.0133e+018
+370 107 5.01297e+018
+190 322 5.0016e+018
+108 28 4.98819e+018
+109 428 4.97984e+018
+475 161 4.97956e+018
+50 160 4.97852e+018
+29 236 4.96923e+018
+94 6 4.9683e+018
+256 405 4.96801e+018
+18 236 4.94787e+018
+243 419 4.93751e+018
+559 271 4.93177e+018
+505 381 4.92217e+018
+124 39 4.91382e+018
+122 216 4.91238e+018
+189 205 4.90974e+018
+564 16 4.90122e+018
+164 18 4.89401e+018
+258 237 4.8776e+018
+450 91 4.84284e+018
+438 239 4.82017e+018
+342 123 4.81232e+018
+108 324 4.80803e+018
+184 318 4.79947e+018
+186 291 4.79827e+018
+447 245 4.79343e+018
+270 62 4.77418e+018
+461 220 4.76933e+018
+90 376 4.76657e+018
+463 39 4.7665e+018
+310 33 4.75855e+018
+365 200 4.75753e+018
+309 356 4.74917e+018
+436 386 4.74765e+018
+412 220 4.74606e+018
+77 77 4.73806e+018
+88 183 4.71407e+018
+441 320 4.71071e+018
+256 35 4.7056e+018
+121 447 4.70292e+018
+391 52 4.70108e+018
+526 398 4.69518e+018
+219 100 4.69039e+018
+342 465 4.68718e+018
+327 182 4.68111e+018
+575 126 4.67829e+018
+500 318 4.66777e+018
+60 254 4.6638e+018
+282 351 4.65695e+018
+215 425 4.64717e+018
+221 339 4.61167e+018
+199 110 4.61108e+018
+536 103 4.59427e+018
+466 102 4.58914e+018
+291 30 4.58084e+018
+274 206 4.57837e+018
+267 52 4.56963e+018
+548 45 4.55945e+018
+524 172 4.55341e+018
+174 116 4.54913e+018
+23 322 4.54542e+018
+11 83 4.5385e+018
+39 143 4.52906e+018
+222 239 4.52727e+018
+418 282 4.51005e+018
+545 91 4.50959e+018
+220 150 4.49892e+018
+175 239 4.48408e+018
+416 86 4.46716e+018
+547 162 4.46663e+018
+438 378 4.46553e+018
+408 45 4.46153e+018
+70 409 4.46112e+018
+386 63 4.44498e+018
+150 38 4.44265e+018
+317 167 4.42374e+018
+18 319 4.41603e+018
+219 316 4.41173e+018
+527 80 4.40428e+018
+182 133 4.3973e+018
+146 452 4.39419e+018
+100 95 4.39304e+018
+383 261 4.38581e+018
+428 118 4.38264e+018
+164 381 4.37407e+018
+247 346 4.36584e+018
+262 216 4.36064e+018
+347 120 4.35765e+018
+396 161 4.35514e+018
+261 142 4.35375e+018
+178 164 4.33755e+018
+117 360 4.33547e+018
+326 13 4.33496e+018
+516 141 4.32512e+018
+344 48 4.31925e+018
+187 182 4.31516e+018
+512 262 4.3128e+018
+262 392 4.30796e+018
+137 56 4.30305e+018
+431 275 4.29548e+018
+571 456 4.29406e+018
+88 369 4.29166e+018
+305 363 4.2855e+018
+172 449 4.2802e+018
+377 461 4.27793e+018
+108 136 4.26324e+018
+57 332 4.25619e+018
+570 183 4.25613e+018
+406 141 4.25598e+018
+390 332 4.25218e+018
+221 72 4.2473e+018
+149 231 4.24566e+018
+392 293 4.24038e+018
+157 40 4.2399e+018
+214 123 4.23793e+018
+509 2 4.22769e+018
+395 23 4.2103e+018
+359 160 4.21014e+018
+356 341 4.2088e+018
+533 340 4.20744e+018
+239 195 4.20009e+018
+173 313 4.20007e+018
+203 293 4.18806e+018
+400 319 4.18437e+018
+271 414 4.17868e+018
+107 74 4.17825e+018
+141 324 4.17371e+018
+75 235 4.16998e+018
+165 111 4.16993e+018
+34 113 4.16114e+018
+430 44 4.15713e+018
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_7_5.txt b/test_data/harriscorners/hc_msc_5.00_0.15_7_5.txt
new file mode 100644
index 0000000..45ab72c
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_7_5.txt
@@ -0,0 +1,966 @@
+965
+273 365 3.59215e+020
+261 297 3.36972e+020
+237 20 3.11225e+020
+246 95 2.98616e+020
+543 365 2.85984e+020
+362 401 2.83266e+020
+27 9 2.80065e+020
+281 113 2.72669e+020
+65 343 2.67265e+020
+77 257 2.65123e+020
+465 393 2.52392e+020
+423 178 2.41726e+020
+82 29 2.36819e+020
+37 62 2.36681e+020
+195 58 2.13449e+020
+427 320 2.07029e+020
+344 9 2.05175e+020
+59 218 2.03209e+020
+131 26 1.99713e+020
+388 10 1.98142e+020
+448 297 1.93475e+020
+81 4 1.87918e+020
+131 36 1.86591e+020
+510 124 1.85929e+020
+320 225 1.82441e+020
+251 13 1.81183e+020
+33 99 1.81181e+020
+127 165 1.77555e+020
+200 17 1.74464e+020
+418 440 1.69567e+020
+358 260 1.6869e+020
+225 420 1.68613e+020
+447 397 1.68453e+020
+360 295 1.66627e+020
+242 71 1.65665e+020
+257 384 1.65607e+020
+552 40 1.64556e+020
+484 338 1.63559e+020
+128 2 1.63554e+020
+452 339 1.61635e+020
+239 91 1.60731e+020
+153 223 1.57368e+020
+512 341 1.56245e+020
+529 24 1.5494e+020
+456 280 1.54584e+020
+390 60 1.53679e+020
+122 43 1.53424e+020
+387 178 1.50331e+020
+448 262 1.47583e+020
+294 15 1.4582e+020
+300 52 1.39634e+020
+138 110 1.39341e+020
+263 441 1.37057e+020
+33 138 1.3576e+020
+343 338 1.35264e+020
+356 220 1.33461e+020
+511 167 1.32498e+020
+302 182 1.31624e+020
+137 203 1.31175e+020
+181 111 1.30632e+020
+101 222 1.30516e+020
+183 400 1.29627e+020
+533 184 1.29156e+020
+483 179 1.28258e+020
+37 145 1.26692e+020
+4 65 1.2631e+020
+519 61 1.23756e+020
+404 121 1.20971e+020
+544 168 1.20893e+020
+57 4 1.20848e+020
+225 38 1.20092e+020
+215 55 1.18846e+020
+177 106 1.17412e+020
+509 455 1.14935e+020
+435 67 1.1415e+020
+123 185 1.13574e+020
+302 215 1.13442e+020
+112 393 1.12672e+020
+134 214 1.12445e+020
+55 289 1.12168e+020
+144 310 1.11698e+020
+55 29 1.11016e+020
+125 254 1.10717e+020
+216 280 1.107e+020
+371 162 1.09789e+020
+261 165 1.08813e+020
+325 341 1.08587e+020
+309 7 1.07835e+020
+412 256 1.06937e+020
+207 450 1.06847e+020
+434 398 1.05063e+020
+475 262 1.04507e+020
+351 321 1.04276e+020
+360 337 1.03782e+020
+283 403 1.03552e+020
+411 354 1.03241e+020
+283 72 1.02983e+020
+392 144 1.02931e+020
+510 173 1.02696e+020
+327 141 1.02211e+020
+150 307 1.01977e+020
+361 131 1.01916e+020
+545 41 1.00086e+020
+252 423 9.97081e+019
+45 28 9.95116e+019
+261 222 9.94178e+019
+235 346 9.93112e+019
+578 16 9.86208e+019
+125 363 9.85348e+019
+124 198 9.84848e+019
+169 56 9.81812e+019
+92 197 9.79354e+019
+115 44 9.7855e+019
+386 220 9.77967e+019
+86 255 9.74559e+019
+301 165 9.72384e+019
+54 66 9.7201e+019
+142 324 9.67616e+019
+163 213 9.61534e+019
+421 335 9.59279e+019
+64 60 9.52269e+019
+390 295 9.48938e+019
+320 312 9.48049e+019
+64 236 9.44669e+019
+177 260 9.39658e+019
+425 377 9.38315e+019
+243 99 9.34308e+019
+57 183 9.28051e+019
+168 197 9.2488e+019
+84 78 9.19512e+019
+66 214 9.11215e+019
+542 210 9.10454e+019
+524 25 9.09906e+019
+545 58 9.07238e+019
+174 40 9.0623e+019
+383 9 9.03937e+019
+543 15 9.02041e+019
+431 147 9.0181e+019
+300 265 9.01508e+019
+417 23 9.00212e+019
+100 199 8.92893e+019
+328 128 8.90727e+019
+339 13 8.88526e+019
+163 277 8.87556e+019
+408 183 8.81343e+019
+346 240 8.80964e+019
+342 263 8.77445e+019
+41 217 8.76783e+019
+403 187 8.76407e+019
+36 173 8.71105e+019
+515 347 8.6512e+019
+544 4 8.63366e+019
+334 436 8.62147e+019
+433 111 8.57385e+019
+246 145 8.5471e+019
+541 124 8.54039e+019
+276 352 8.52986e+019
+32 66 8.49668e+019
+426 119 8.49291e+019
+109 239 8.43061e+019
+271 166 8.31645e+019
+453 206 8.30085e+019
+61 203 8.27192e+019
+527 98 8.20544e+019
+214 73 8.17657e+019
+211 435 8.12035e+019
+123 272 8.10897e+019
+52 43 8.10565e+019
+104 4 8.07644e+019
+272 281 8.07049e+019
+308 372 7.93847e+019
+44 97 7.91135e+019
+13 218 7.90514e+019
+42 339 7.80983e+019
+365 143 7.77515e+019
+95 476 7.75541e+019
+567 43 7.75254e+019
+478 18 7.70854e+019
+448 166 7.6786e+019
+71 148 7.67606e+019
+509 19 7.66938e+019
+220 290 7.65868e+019
+413 299 7.61311e+019
+57 364 7.60986e+019
+386 243 7.59318e+019
+358 10 7.57385e+019
+512 262 7.54705e+019
+18 343 7.53465e+019
+139 173 7.52399e+019
+212 59 7.51886e+019
+102 58 7.50327e+019
+225 182 7.4911e+019
+78 80 7.47748e+019
+85 214 7.44932e+019
+395 261 7.44094e+019
+100 78 7.40694e+019
+377 119 7.40133e+019
+68 337 7.40097e+019
+311 150 7.40073e+019
+167 286 7.37338e+019
+363 7 7.3692e+019
+106 39 7.34415e+019
+49 151 7.3329e+019
+159 138 7.29323e+019
+480 299 7.27758e+019
+528 104 7.27476e+019
+140 394 7.24644e+019
+302 204 7.22354e+019
+313 84 7.19745e+019
+242 203 7.12505e+019
+230 36 7.12342e+019
+46 355 7.09729e+019
+490 139 7.07855e+019
+92 292 7.07276e+019
+367 247 7.06968e+019
+348 179 7.06644e+019
+8 10 7.04723e+019
+361 221 7.00249e+019
+326 427 6.9529e+019
+350 145 6.95257e+019
+364 251 6.94218e+019
+293 27 6.9401e+019
+163 74 6.93581e+019
+471 212 6.90247e+019
+265 31 6.87986e+019
+449 219 6.85744e+019
+164 358 6.85178e+019
+371 90 6.80174e+019
+525 38 6.78985e+019
+192 219 6.75702e+019
+474 22 6.7439e+019
+37 296 6.7239e+019
+328 253 6.65066e+019
+113 345 6.64229e+019
+328 297 6.61781e+019
+436 303 6.61775e+019
+165 244 6.59652e+019
+439 339 6.57721e+019
+482 364 6.55334e+019
+135 129 6.55218e+019
+524 19 6.54527e+019
+88 148 6.51978e+019
+298 69 6.51937e+019
+523 123 6.51463e+019
+248 316 6.48266e+019
+374 393 6.47457e+019
+101 360 6.46883e+019
+253 139 6.46046e+019
+356 268 6.44998e+019
+498 159 6.42979e+019
+38 138 6.40375e+019
+156 318 6.36458e+019
+51 98 6.36243e+019
+249 364 6.34953e+019
+234 162 6.3476e+019
+345 351 6.325e+019
+141 1 6.30678e+019
+32 219 6.25783e+019
+512 220 6.24798e+019
+329 12 6.23884e+019
+508 5 6.17471e+019
+84 477 6.16905e+019
+212 182 6.12364e+019
+548 163 6.12249e+019
+167 327 6.09129e+019
+471 268 6.05567e+019
+449 445 6.00971e+019
+406 198 5.99652e+019
+110 96 5.99321e+019
+106 61 5.97558e+019
+521 263 5.96608e+019
+513 76 5.92837e+019
+444 453 5.90617e+019
+484 59 5.88869e+019
+403 265 5.87281e+019
+118 75 5.84669e+019
+244 165 5.84015e+019
+184 36 5.83679e+019
+384 259 5.80244e+019
+346 296 5.78691e+019
+358 282 5.78082e+019
+75 7 5.77727e+019
+332 294 5.75806e+019
+191 360 5.75187e+019
+475 341 5.74451e+019
+61 134 5.73755e+019
+418 8 5.70057e+019
+187 264 5.6817e+019
+120 447 5.68156e+019
+325 165 5.66121e+019
+10 102 5.654e+019
+128 186 5.63304e+019
+463 40 5.62036e+019
+158 73 5.5936e+019
+50 13 5.59353e+019
+512 295 5.58282e+019
+527 361 5.57902e+019
+250 403 5.55942e+019
+193 16 5.55467e+019
+358 64 5.54935e+019
+365 106 5.53268e+019
+333 90 5.50665e+019
+44 9 5.49759e+019
+307 449 5.49625e+019
+245 294 5.49563e+019
+239 199 5.49352e+019
+229 292 5.47608e+019
+72 96 5.44778e+019
+480 262 5.43322e+019
+451 377 5.4068e+019
+77 29 5.38874e+019
+219 99 5.36411e+019
+511 100 5.33321e+019
+537 393 5.31267e+019
+345 110 5.31243e+019
+223 218 5.30381e+019
+542 132 5.28229e+019
+273 296 5.24504e+019
+191 205 5.23827e+019
+221 177 5.23659e+019
+192 330 5.19132e+019
+259 35 5.18554e+019
+70 25 5.17833e+019
+23 61 5.15708e+019
+69 420 5.15539e+019
+483 328 5.1526e+019
+94 219 5.13616e+019
+475 246 5.11454e+019
+584 38 5.10728e+019
+78 41 5.09546e+019
+138 98 5.08902e+019
+362 395 5.06823e+019
+96 449 5.06646e+019
+471 421 5.06473e+019
+90 376 5.01636e+019
+166 312 5.01447e+019
+212 33 5.00304e+019
+180 394 4.99679e+019
+470 238 4.99204e+019
+571 451 4.98809e+019
+363 358 4.98588e+019
+463 23 4.96422e+019
+486 44 4.94733e+019
+144 6 4.94571e+019
+281 222 4.93366e+019
+408 45 4.93271e+019
+130 476 4.93057e+019
+498 224 4.92775e+019
+289 137 4.87074e+019
+539 405 4.87066e+019
+568 382 4.8701e+019
+186 288 4.86086e+019
+53 222 4.83444e+019
+271 72 4.82839e+019
+220 150 4.82123e+019
+432 275 4.82064e+019
+436 320 4.79436e+019
+423 398 4.79251e+019
+154 114 4.78581e+019
+393 48 4.78394e+019
+306 440 4.76267e+019
+328 66 4.74557e+019
+382 412 4.72793e+019
+248 395 4.72334e+019
+207 224 4.71707e+019
+393 218 4.71573e+019
+170 17 4.70101e+019
+473 202 4.69477e+019
+35 201 4.68585e+019
+449 178 4.68103e+019
+280 132 4.67355e+019
+163 111 4.66994e+019
+191 146 4.66684e+019
+559 80 4.6604e+019
+272 53 4.65209e+019
+541 99 4.63924e+019
+107 429 4.62768e+019
+296 331 4.62583e+019
+259 71 4.62428e+019
+118 425 4.619e+019
+514 382 4.61302e+019
+455 84 4.61263e+019
+481 451 4.5961e+019
+294 269 4.59117e+019
+59 74 4.58859e+019
+223 16 4.5776e+019
+31 270 4.57353e+019
+233 14 4.57248e+019
+284 199 4.56972e+019
+275 317 4.56434e+019
+359 142 4.55103e+019
+328 214 4.533e+019
+386 327 4.52195e+019
+60 40 4.51681e+019
+259 237 4.50931e+019
+126 76 4.4907e+019
+258 161 4.47909e+019
+351 271 4.46935e+019
+354 295 4.46389e+019
+297 410 4.46149e+019
+422 49 4.45282e+019
+374 240 4.44413e+019
+178 94 4.43312e+019
+573 405 4.41768e+019
+38 287 4.41306e+019
+110 264 4.41247e+019
+278 145 4.40446e+019
+431 269 4.39948e+019
+157 40 4.38931e+019
+281 419 4.38407e+019
+215 175 4.37147e+019
+318 460 4.3681e+019
+221 432 4.35245e+019
+285 297 4.34874e+019
+209 395 4.34262e+019
+483 143 4.33929e+019
+453 102 4.33169e+019
+87 207 4.31239e+019
+197 131 4.29915e+019
+141 182 4.2936e+019
+503 164 4.2813e+019
+473 5 4.28127e+019
+160 183 4.27821e+019
+392 165 4.27643e+019
+277 329 4.26676e+019
+9 76 4.26526e+019
+328 89 4.2621e+019
+338 473 4.26093e+019
+286 165 4.25636e+019
+257 152 4.24913e+019
+173 116 4.24418e+019
+306 193 4.24369e+019
+336 391 4.24105e+019
+344 123 4.24006e+019
+57 373 4.21543e+019
+291 50 4.21537e+019
+377 340 4.21474e+019
+163 208 4.21431e+019
+488 262 4.20647e+019
+444 118 4.19796e+019
+575 99 4.18937e+019
+191 350 4.18698e+019
+469 139 4.17437e+019
+42 24 4.16684e+019
+28 30 4.16625e+019
+340 165 4.16366e+019
+378 67 4.16112e+019
+242 421 4.15169e+019
+141 21 4.13359e+019
+46 82 4.12591e+019
+416 84 4.12281e+019
+466 281 4.12026e+019
+390 449 4.117e+019
+471 83 4.10593e+019
+65 371 4.10472e+019
+79 198 4.09971e+019
+233 199 4.09298e+019
+82 134 4.09221e+019
+562 461 4.07995e+019
+524 346 4.07588e+019
+268 289 4.06598e+019
+449 438 4.06554e+019
+446 8 4.05901e+019
+7 46 4.05163e+019
+497 81 4.05149e+019
+398 169 4.01008e+019
+277 371 3.99907e+019
+113 213 3.99302e+019
+539 458 3.99077e+019
+50 453 3.98855e+019
+110 169 3.97312e+019
+345 276 3.96487e+019
+147 98 3.93946e+019
+355 341 3.92797e+019
+302 190 3.91888e+019
+418 282 3.91814e+019
+389 140 3.90995e+019
+561 146 3.89488e+019
+163 169 3.89441e+019
+327 182 3.88997e+019
+55 79 3.88658e+019
+410 65 3.88409e+019
+131 255 3.88338e+019
+418 68 3.87986e+019
+517 17 3.87931e+019
+525 186 3.87589e+019
+18 236 3.86406e+019
+297 182 3.85888e+019
+432 82 3.85257e+019
+313 76 3.8499e+019
+109 137 3.84747e+019
+454 115 3.84622e+019
+502 144 3.84405e+019
+388 15 3.84017e+019
+129 238 3.8351e+019
+210 21 3.82951e+019
+367 303 3.82746e+019
+280 50 3.82342e+019
+66 319 3.82203e+019
+489 181 3.8171e+019
+44 63 3.81387e+019
+572 459 3.80739e+019
+119 115 3.80316e+019
+464 197 3.79154e+019
+92 59 3.78741e+019
+524 423 3.78588e+019
+517 42 3.76244e+019
+434 159 3.74983e+019
+597 272 3.74629e+019
+439 397 3.73755e+019
+332 258 3.73457e+019
+274 215 3.71655e+019
+130 72 3.70207e+019
+515 120 3.69294e+019
+549 379 3.69144e+019
+222 107 3.68973e+019
+186 19 3.68473e+019
+271 131 3.67253e+019
+532 398 3.66933e+019
+569 422 3.66364e+019
+538 263 3.66178e+019
+246 106 3.65429e+019
+344 198 3.64589e+019
+126 96 3.64585e+019
+478 12 3.62923e+019
+334 218 3.61074e+019
+86 311 3.60442e+019
+180 380 3.5881e+019
+359 53 3.5862e+019
+338 63 3.58245e+019
+525 173 3.58022e+019
+55 294 3.57195e+019
+166 97 3.56283e+019
+109 28 3.5608e+019
+220 317 3.54314e+019
+527 222 3.53312e+019
+513 402 3.53302e+019
+165 219 3.52948e+019
+184 94 3.52789e+019
+451 63 3.51847e+019
+203 309 3.51578e+019
+70 129 3.51163e+019
+505 361 3.49992e+019
+259 369 3.49116e+019
+270 185 3.48976e+019
+333 202 3.48756e+019
+439 378 3.48742e+019
+520 184 3.48466e+019
+319 186 3.4774e+019
+505 382 3.47604e+019
+321 10 3.47345e+019
+29 135 3.46748e+019
+166 118 3.46221e+019
+236 222 3.45493e+019
+482 440 3.44261e+019
+297 419 3.43194e+019
+367 337 3.43176e+019
+455 178 3.41871e+019
+71 408 3.41426e+019
+79 271 3.40455e+019
+449 118 3.40006e+019
+570 182 3.40003e+019
+177 18 3.38366e+019
+391 324 3.37814e+019
+381 26 3.3765e+019
+437 466 3.37466e+019
+262 286 3.35825e+019
+211 12 3.33116e+019
+364 257 3.32276e+019
+447 350 3.3197e+019
+395 105 3.31843e+019
+103 259 3.31758e+019
+206 435 3.31681e+019
+500 318 3.30716e+019
+355 256 3.30438e+019
+95 20 3.30208e+019
+23 322 3.30206e+019
+160 96 3.28934e+019
+196 194 3.26384e+019
+146 161 3.26137e+019
+190 312 3.26015e+019
+93 255 3.25993e+019
+404 13 3.25586e+019
+86 63 3.25483e+019
+217 208 3.25052e+019
+90 275 3.24629e+019
+183 316 3.23174e+019
+217 146 3.21737e+019
+134 238 3.21676e+019
+148 397 3.21235e+019
+364 181 3.21117e+019
+180 164 3.20586e+019
+198 111 3.2053e+019
+572 326 3.19077e+019
+377 183 3.18433e+019
+246 14 3.18358e+019
+159 144 3.17921e+019
+405 376 3.17908e+019
+289 349 3.17905e+019
+16 435 3.17787e+019
+233 296 3.15588e+019
+34 31 3.15556e+019
+274 77 3.1491e+019
+92 444 3.14774e+019
+255 405 3.14617e+019
+276 180 3.14591e+019
+107 75 3.1453e+019
+96 37 3.14512e+019
+59 254 3.12858e+019
+191 188 3.12522e+019
+398 357 3.12468e+019
+87 372 3.12418e+019
+345 48 3.12219e+019
+513 95 3.11972e+019
+456 377 3.1175e+019
+246 89 3.11389e+019
+21 131 3.10557e+019
+49 235 3.08298e+019
+114 2 3.0791e+019
+443 22 3.0789e+019
+275 196 3.07446e+019
+135 21 3.0637e+019
+388 126 3.06299e+019
+511 83 3.06118e+019
+95 94 3.05649e+019
+358 241 3.05245e+019
+389 54 3.04688e+019
+39 355 3.04539e+019
+129 309 3.04032e+019
+569 203 3.03759e+019
+331 413 3.03604e+019
+56 171 3.03594e+019
+172 450 3.02637e+019
+264 311 3.02172e+019
+187 308 3.01994e+019
+348 393 3.01253e+019
+203 293 3.00381e+019
+44 408 2.99338e+019
+267 20 2.99252e+019
+104 106 2.99212e+019
+254 77 2.99169e+019
+491 59 2.98993e+019
+33 111 2.98931e+019
+208 55 2.98818e+019
+242 190 2.98517e+019
+88 183 2.97999e+019
+433 381 2.97468e+019
+395 23 2.96647e+019
+180 329 2.95562e+019
+243 281 2.95454e+019
+433 43 2.94897e+019
+82 72 2.94341e+019
+458 265 2.93879e+019
+202 220 2.93417e+019
+530 143 2.93266e+019
+456 161 2.93009e+019
+403 5 2.93006e+019
+387 3 2.91979e+019
+133 148 2.91317e+019
+206 160 2.91255e+019
+256 147 2.90962e+019
+342 106 2.90788e+019
+274 205 2.90103e+019
+73 163 2.89594e+019
+406 80 2.88929e+019
+500 266 2.88617e+019
+202 315 2.88517e+019
+468 204 2.88338e+019
+156 91 2.88267e+019
+282 392 2.8826e+019
+470 121 2.88251e+019
+76 474 2.8737e+019
+578 44 2.86135e+019
+160 20 2.86053e+019
+249 220 2.85764e+019
+220 339 2.84372e+019
+441 240 2.84224e+019
+448 136 2.83987e+019
+136 179 2.83669e+019
+101 235 2.8361e+019
+200 330 2.83559e+019
+485 5 2.83443e+019
+198 148 2.83208e+019
+414 3 2.8217e+019
+575 179 2.81999e+019
+48 257 2.81269e+019
+414 261 2.81005e+019
+506 203 2.80845e+019
+562 141 2.80761e+019
+246 207 2.80587e+019
+143 449 2.79884e+019
+156 445 2.79506e+019
+150 231 2.79247e+019
+449 22 2.792e+019
+215 96 2.79092e+019
+445 126 2.78861e+019
+314 448 2.78775e+019
+525 399 2.78332e+019
+95 374 2.78262e+019
+365 165 2.77479e+019
+44 475 2.77372e+019
+334 130 2.76765e+019
+592 19 2.7674e+019
+292 311 2.76593e+019
+439 25 2.76455e+019
+279 85 2.75916e+019
+147 22 2.7577e+019
+2 436 2.75408e+019
+561 324 2.75328e+019
+187 101 2.7508e+019
+404 143 2.74682e+019
+11 126 2.73465e+019
+107 183 2.73321e+019
+322 424 2.72551e+019
+265 15 2.7255e+019
+565 159 2.71894e+019
+103 392 2.7161e+019
+300 106 2.71535e+019
+436 280 2.71096e+019
+528 159 2.69901e+019
+221 72 2.69776e+019
+49 159 2.68799e+019
+163 253 2.68714e+019
+119 131 2.68399e+019
+216 124 2.68109e+019
+318 454 2.68011e+019
+561 227 2.67839e+019
+309 355 2.67489e+019
+137 138 2.67271e+019
+232 176 2.67229e+019
+254 4 2.67057e+019
+382 320 2.669e+019
+103 98 2.66458e+019
+265 201 2.66303e+019
+537 103 2.66062e+019
+538 40 2.66005e+019
+496 463 2.65447e+019
+145 187 2.64017e+019
+411 418 2.6349e+019
+16 213 2.62692e+019
+580 245 2.62527e+019
+361 369 2.62304e+019
+504 260 2.62108e+019
+272 286 2.614e+019
+551 223 2.60905e+019
+596 364 2.60092e+019
+255 108 2.60021e+019
+198 124 2.59876e+019
+387 283 2.59771e+019
+579 85 2.59679e+019
+298 274 2.59166e+019
+116 361 2.5745e+019
+298 86 2.57183e+019
+30 237 2.56047e+019
+104 307 2.55305e+019
+332 332 2.54825e+019
+100 164 2.54561e+019
+40 239 2.54217e+019
+314 300 2.53723e+019
+486 376 2.53605e+019
+277 137 2.5312e+019
+122 124 2.52786e+019
+576 38 2.52304e+019
+261 396 2.52186e+019
+125 260 2.51993e+019
+299 398 2.51746e+019
+573 445 2.51279e+019
+305 363 2.51013e+019
+329 199 2.50728e+019
+3 155 2.50609e+019
+74 186 2.50272e+019
+243 31 2.50177e+019
+255 129 2.50119e+019
+184 143 2.50118e+019
+507 60 2.49711e+019
+208 422 2.49234e+019
+322 28 2.49189e+019
+267 118 2.48985e+019
+508 163 2.48257e+019
+418 362 2.47877e+019
+257 391 2.47842e+019
+252 163 2.47836e+019
+429 89 2.47413e+019
+229 281 2.47376e+019
+524 78 2.47304e+019
+412 245 2.46913e+019
+191 172 2.46843e+019
+223 114 2.46668e+019
+225 50 2.46231e+019
+291 263 2.45474e+019
+23 48 2.45285e+019
+148 112 2.44574e+019
+561 318 2.44043e+019
+309 33 2.43752e+019
+149 132 2.43603e+019
+447 245 2.43473e+019
+151 317 2.43377e+019
+454 48 2.42749e+019
+446 205 2.42697e+019
+384 146 2.42496e+019
+383 335 2.42393e+019
+317 167 2.41798e+019
+177 273 2.41712e+019
+210 154 2.41372e+019
+597 33 2.41232e+019
+441 98 2.4099e+019
+3 382 2.39827e+019
+501 43 2.39632e+019
+48 102 2.39607e+019
+421 81 2.39569e+019
+478 221 2.3937e+019
+164 381 2.39207e+019
+339 427 2.39207e+019
+188 255 2.39111e+019
+379 107 2.38544e+019
+537 187 2.38506e+019
+544 443 2.38434e+019
+342 142 2.3842e+019
+155 162 2.38219e+019
+181 344 2.37487e+019
+53 359 2.37484e+019
+159 219 2.3661e+019
+69 304 2.36549e+019
+195 83 2.36535e+019
+562 71 2.36262e+019
+287 397 2.36144e+019
+467 319 2.35366e+019
+283 266 2.35347e+019
+256 102 2.3493e+019
+149 79 2.34262e+019
+307 165 2.3335e+019
+294 431 2.33228e+019
+339 182 2.33145e+019
+528 431 2.32905e+019
+503 180 2.32665e+019
+4 60 2.32348e+019
+287 308 2.32281e+019
+452 404 2.32217e+019
+271 414 2.32093e+019
+176 311 2.31736e+019
+541 381 2.31712e+019
+408 430 2.31627e+019
+546 218 2.31049e+019
+355 325 2.30818e+019
+581 445 2.3068e+019
+525 381 2.30612e+019
+202 192 2.29565e+019
+92 79 2.28957e+019
+143 433 2.28944e+019
+255 181 2.28776e+019
+263 403 2.28706e+019
+430 395 2.28553e+019
+182 292 2.28526e+019
+512 442 2.28419e+019
+363 49 2.28349e+019
+110 179 2.28233e+019
+181 286 2.27873e+019
+113 354 2.27671e+019
+481 165 2.27469e+019
+409 163 2.27306e+019
+328 322 2.27199e+019
+287 33 2.27174e+019
+257 459 2.26927e+019
+108 382 2.2639e+019
+51 61 2.26275e+019
+458 418 2.26075e+019
+480 83 2.25426e+019
+576 311 2.25164e+019
+529 31 2.24798e+019
+8 235 2.24693e+019
+518 202 2.24658e+019
+472 41 2.24497e+019
+75 133 2.24335e+019
+269 60 2.23735e+019
+84 171 2.23281e+019
+369 82 2.2273e+019
+250 31 2.22292e+019
+347 341 2.22288e+019
+223 87 2.21979e+019
+261 216 2.21862e+019
+396 160 2.21319e+019
+555 378 2.20925e+019
+55 146 2.20877e+019
+279 366 2.20734e+019
+246 368 2.20628e+019
+112 206 2.20356e+019
+82 44 2.2029e+019
+120 55 2.20051e+019
+278 263 2.19897e+019
+534 161 2.19861e+019
+250 152 2.19664e+019
+540 163 2.19626e+019
+126 339 2.18938e+019
+466 126 2.18937e+019
+446 375 2.18368e+019
+563 16 2.18093e+019
+7 116 2.18e+019
+154 295 2.17805e+019
+185 132 2.17581e+019
+539 141 2.17559e+019
+558 271 2.16953e+019
+186 182 2.16726e+019
+336 406 2.16313e+019
+511 43 2.16023e+019
+465 355 2.14971e+019
+45 343 2.14859e+019
+323 146 2.14627e+019
+299 254 2.14467e+019
+433 240 2.14074e+019
+46 220 2.13839e+019
+566 176 2.1358e+019
+240 328 2.1345e+019
+201 75 2.13375e+019
+12 113 2.13121e+019
+224 398 2.12568e+019
+423 162 2.12217e+019
+342 464 2.11895e+019
+539 248 2.11481e+019
+166 239 2.10731e+019
+497 229 2.10709e+019
+533 346 2.10646e+019
+479 243 2.10471e+019
+462 161 2.10252e+019
+66 251 2.09916e+019
+119 97 2.09765e+019
+370 107 2.09547e+019
+535 120 2.09327e+019
+378 352 2.09303e+019
+64 182 2.09086e+019
+154 56 2.08648e+019
+212 146 2.08099e+019
+138 358 2.08001e+019
+442 320 2.07879e+019
+162 190 2.07683e+019
+394 65 2.07228e+019
+64 145 2.0722e+019
+382 103 2.07113e+019
+335 317 2.06138e+019
+85 363 2.06036e+019
+149 1 2.0524e+019
+376 84 2.04896e+019
+161 33 2.04745e+019
+420 322 2.04529e+019
+245 387 2.04309e+019
+160 126 2.03902e+019
+461 423 2.03756e+019
+232 92 2.03522e+019
+422 298 2.03521e+019
+572 237 2.03374e+019
+450 196 2.02929e+019
+576 125 2.02913e+019
+390 333 2.02838e+019
+291 90 2.02144e+019
+323 259 2.02065e+019
+9 475 2.02008e+019
+240 155 2.01812e+019
+286 248 2.01373e+019
+244 245 2.01254e+019
+576 57 2.00466e+019
+152 236 2.00425e+019
+422 65 2.00423e+019
+603 364 2.00148e+019
+524 199 1.99247e+019
+578 52 1.98588e+019
+384 161 1.9822e+019
diff --git a/test_data/harriscorners/hc_msc_5.00_0.15_7_7.txt b/test_data/harriscorners/hc_msc_5.00_0.15_7_7.txt
new file mode 100644
index 0000000..16ac544
--- /dev/null
+++ b/test_data/harriscorners/hc_msc_5.00_0.15_7_7.txt
@@ -0,0 +1,958 @@
+957
+81 29 1.19845e+021
+238 20 1.0467e+021
+131 26 9.62539e+020
+260 297 8.86736e+020
+246 93 8.64866e+020
+421 180 8.32933e+020
+26 9 7.60316e+020
+272 366 7.3704e+020
+76 257 6.80966e+020
+195 58 6.80484e+020
+543 366 6.60423e+020
+131 37 6.60354e+020
+81 3 6.51375e+020
+282 113 6.43644e+020
+510 124 5.88561e+020
+37 63 5.81732e+020
+525 25 5.68797e+020
+385 10 5.5797e+020
+64 344 5.54219e+020
+152 223 5.49106e+020
+424 321 5.28618e+020
+343 8 5.00771e+020
+542 15 4.93555e+020
+302 185 4.8929e+020
+214 57 4.89092e+020
+253 12 4.85506e+020
+55 30 4.7671e+020
+12 218 4.66859e+020
+361 395 4.65695e+020
+359 294 4.64645e+020
+102 222 4.57956e+020
+60 217 4.57565e+020
+293 16 4.51322e+020
+482 178 4.51246e+020
+33 100 4.50317e+020
+451 339 4.49869e+020
+257 385 4.48543e+020
+391 294 4.46401e+020
+465 392 4.40418e+020
+485 338 4.39441e+020
+138 204 4.37775e+020
+458 279 4.34732e+020
+199 18 4.26798e+020
+356 259 4.26793e+020
+128 1 4.20868e+020
+226 37 4.20094e+020
+418 438 4.17748e+020
+512 342 4.16115e+020
+241 70 4.14304e+020
+34 139 4.11601e+020
+447 261 4.08752e+020
+330 128 3.9767e+020
+127 165 3.96349e+020
+320 226 3.96211e+020
+123 43 3.96079e+020
+328 296 3.92094e+020
+299 53 3.90175e+020
+519 60 3.83963e+020
+320 312 3.81461e+020
+224 420 3.81434e+020
+310 6 3.80813e+020
+60 40 3.80448e+020
+364 400 3.78647e+020
+533 185 3.70168e+020
+359 334 3.68648e+020
+389 59 3.66767e+020
+403 120 3.60231e+020
+359 220 3.58415e+020
+476 262 3.52486e+020
+175 109 3.47371e+020
+238 91 3.44565e+020
+115 42 3.44325e+020
+511 169 3.3859e+020
+343 264 3.34623e+020
+448 299 3.29826e+020
+408 183 3.29215e+020
+383 5 3.28729e+020
+265 446 3.28265e+020
+56 290 3.27942e+020
+284 402 3.25884e+020
+528 186 3.24981e+020
+209 450 3.23229e+020
+83 77 3.22395e+020
+428 1 3.22026e+020
+139 109 3.14663e+020
+580 16 3.13191e+020
+435 397 3.10926e+020
+399 263 3.0891e+020
+150 306 3.084e+020
+386 178 3.07982e+020
+122 186 3.07553e+020
+325 341 3.0622e+020
+449 204 3.05765e+020
+345 339 3.05579e+020
+182 398 3.0408e+020
+364 251 3.02845e+020
+272 280 3.00549e+020
+145 7 3.00273e+020
+436 67 2.9996e+020
+159 75 2.99716e+020
+552 41 2.98438e+020
+327 141 2.98137e+020
+359 129 2.97957e+020
+434 112 2.94659e+020
+163 215 2.93948e+020
+410 353 2.9186e+020
+301 205 2.91769e+020
+84 148 2.87761e+020
+432 276 2.85021e+020
+511 20 2.84532e+020
+509 454 2.83331e+020
+36 173 2.82845e+020
+513 262 2.81318e+020
+104 3 2.81065e+020
+87 254 2.80829e+020
+61 203 2.80308e+020
+100 198 2.79714e+020
+329 258 2.78943e+020
+302 215 2.78211e+020
+545 59 2.77788e+020
+563 478 2.77565e+020
+125 254 2.7726e+020
+448 166 2.76322e+020
+415 22 2.75575e+020
+562 461 2.75079e+020
+37 145 2.74212e+020
+211 436 2.737e+020
+143 324 2.73555e+020
+302 165 2.73257e+020
+447 398 2.72039e+020
+352 321 2.71661e+020
+57 4 2.71506e+020
+470 422 2.71155e+020
+168 196 2.71154e+020
+232 125 2.69865e+020
+112 392 2.68473e+020
+479 15 2.67148e+020
+174 40 2.66752e+020
+128 187 2.66014e+020
+182 111 2.65822e+020
+390 143 2.656e+020
+43 26 2.64259e+020
+252 424 2.63675e+020
+165 327 2.61435e+020
+41 217 2.61055e+020
+225 181 2.60887e+020
+423 332 2.60681e+020
+445 118 2.6002e+020
+259 165 2.58191e+020
+387 220 2.5755e+020
+135 213 2.57525e+020
+313 148 2.56508e+020
+528 103 2.56129e+020
+96 477 2.55109e+020
+546 41 2.54459e+020
+76 40 2.53937e+020
+143 311 2.52329e+020
+176 260 2.51531e+020
+47 98 2.50204e+020
+437 304 2.4998e+020
+419 8 2.49442e+020
+541 124 2.48003e+020
+109 240 2.47047e+020
+246 144 2.44989e+020
+215 280 2.43115e+020
+54 66 2.42643e+020
+256 151 2.42332e+020
+500 159 2.42171e+020
+425 118 2.4127e+020
+548 162 2.38097e+020
+273 317 2.37737e+020
+107 39 2.37728e+020
+218 105 2.36856e+020
+413 259 2.34813e+020
+3 64 2.33219e+020
+517 20 2.33081e+020
+248 399 2.3281e+020
+218 99 2.3272e+020
+66 216 2.32184e+020
+412 298 2.31896e+020
+294 27 2.31511e+020
+212 184 2.29971e+020
+235 346 2.29572e+020
+59 184 2.29006e+020
+65 60 2.28855e+020
+238 199 2.27764e+020
+25 62 2.25903e+020
+132 74 2.25501e+020
+52 42 2.25155e+020
+102 360 2.23966e+020
+140 19 2.23884e+020
+389 21 2.23814e+020
+313 84 2.23339e+020
+50 151 2.23257e+020
+430 117 2.22788e+020
+377 120 2.22571e+020
+346 240 2.22327e+020
+364 142 2.21997e+020
+165 182 2.20765e+020
+298 181 2.18023e+020
+510 129 2.17924e+020
+454 207 2.17579e+020
+371 161 2.17373e+020
+220 180 2.17068e+020
+260 220 2.16861e+020
+490 138 2.14597e+020
+433 147 2.13498e+020
+544 4 2.13215e+020
+48 26 2.13165e+020
+4 45 2.11827e+020
+505 15 2.11769e+020
+169 55 2.11505e+020
+285 72 2.11036e+020
+337 13 2.09907e+020
+329 11 2.08997e+020
+40 296 2.08841e+020
+70 477 2.08547e+020
+527 18 2.08465e+020
+512 221 2.06955e+020
+358 66 2.06924e+020
+482 299 2.06716e+020
+544 169 2.06608e+020
+100 79 2.0576e+020
+165 357 2.05673e+020
+488 44 2.04845e+020
+46 355 2.04205e+020
+134 97 2.03296e+020
+104 61 2.02043e+020
+448 445 2.00375e+020
+335 435 2.00169e+020
+300 264 1.99608e+020
+164 73 1.99198e+020
+498 225 1.98434e+020
+209 21 1.98211e+020
+164 278 1.97531e+020
+248 316 1.9717e+020
+506 6 1.97004e+020
+462 42 1.96943e+020
+210 34 1.96761e+020
+68 338 1.96123e+020
+345 350 1.95402e+020
+63 236 1.95316e+020
+134 131 1.94562e+020
+392 218 1.94253e+020
+386 244 1.93384e+020
+111 110 1.93263e+020
+52 99 1.92282e+020
+450 374 1.92139e+020
+222 433 1.91878e+020
+256 139 1.91714e+020
+362 7 1.91238e+020
+186 36 1.90308e+020
+9 47 1.89086e+020
+297 69 1.88886e+020
+483 58 1.8776e+020
+32 269 1.87388e+020
+476 20 1.86449e+020
+333 66 1.8499e+020
+436 379 1.8453e+020
+9 9 1.84409e+020
+56 364 1.83714e+020
+174 114 1.83627e+020
+475 247 1.83451e+020
+185 289 1.83308e+020
+88 207 1.8317e+020
+437 319 1.82485e+020
+54 222 1.82032e+020
+463 27 1.81921e+020
+575 459 1.80784e+020
+404 266 1.7995e+020
+190 360 1.79638e+020
+165 313 1.77242e+020
+304 190 1.77028e+020
+193 218 1.76975e+020
+165 242 1.75817e+020
+385 294 1.75233e+020
+65 318 1.74946e+020
+229 291 1.74166e+020
+190 350 1.74077e+020
+450 87 1.73588e+020
+544 456 1.73557e+020
+119 116 1.7355e+020
+265 30 1.73155e+020
+243 166 1.73058e+020
+123 199 1.72802e+020
+403 188 1.72111e+020
+343 122 1.71852e+020
+464 280 1.71606e+020
+110 95 1.71554e+020
+238 350 1.7073e+020
+284 198 1.70643e+020
+45 12 1.70103e+020
+242 203 1.69566e+020
+140 181 1.69532e+020
+263 402 1.69429e+020
+407 198 1.69244e+020
+88 216 1.68821e+020
+97 448 1.6855e+020
+568 42 1.67833e+020
+110 179 1.67286e+020
+349 181 1.66988e+020
+329 90 1.66369e+020
+345 107 1.65897e+020
+47 81 1.65866e+020
+571 446 1.65559e+020
+84 213 1.65217e+020
+296 332 1.65162e+020
+373 392 1.65093e+020
+271 167 1.64739e+020
+107 29 1.64468e+020
+448 218 1.6411e+020
+223 218 1.63853e+020
+295 269 1.63649e+020
+503 164 1.63453e+020
+493 81 1.62957e+020
+276 353 1.6252e+020
+76 30 1.61899e+020
+124 271 1.61766e+020
+42 62 1.61735e+020
+447 8 1.60834e+020
+93 199 1.60714e+020
+168 285 1.60136e+020
+484 329 1.59886e+020
+220 290 1.58926e+020
+448 438 1.58827e+020
+557 463 1.58574e+020
+482 364 1.5824e+020
+431 319 1.57924e+020
+112 344 1.57902e+020
+540 406 1.57755e+020
+41 339 1.56533e+020
+166 110 1.56001e+020
+60 135 1.55578e+020
+124 365 1.55287e+020
+117 426 1.54626e+020
+483 142 1.54607e+020
+86 311 1.54591e+020
+277 219 1.54446e+020
+511 100 1.5417e+020
+108 170 1.5348e+020
+433 158 1.53045e+020
+56 78 1.53034e+020
+138 173 1.52917e+020
+142 393 1.52829e+020
+539 457 1.52626e+020
+414 65 1.52606e+020
+346 297 1.52604e+020
+271 73 1.52053e+020
+280 365 1.51423e+020
+125 259 1.50758e+020
+29 31 1.50731e+020
+542 209 1.50175e+020
+35 31 1.50002e+020
+68 419 1.49863e+020
+227 186 1.49852e+020
+162 97 1.49484e+020
+83 134 1.49184e+020
+365 105 1.4897e+020
+208 225 1.48481e+020
+335 218 1.48366e+020
+273 181 1.4818e+020
+471 266 1.47984e+020
+455 85 1.47367e+020
+326 426 1.47043e+020
+525 37 1.4696e+020
+471 212 1.46467e+020
+235 161 1.46423e+020
+388 164 1.46335e+020
+196 128 1.46048e+020
+164 209 1.46001e+020
+353 294 1.45952e+020
+385 326 1.45586e+020
+107 429 1.45498e+020
+160 137 1.45447e+020
+276 331 1.44853e+020
+349 146 1.44765e+020
+523 123 1.44116e+020
+77 7 1.4385e+020
+510 174 1.43839e+020
+159 182 1.43358e+020
+395 164 1.42687e+020
+451 62 1.42312e+020
+345 276 1.42084e+020
+120 447 1.41398e+020
+473 203 1.40496e+020
+145 161 1.40469e+020
+83 475 1.40364e+020
+215 71 1.39727e+020
+377 68 1.39639e+020
+246 88 1.3951e+020
+145 16 1.39317e+020
+384 260 1.38831e+020
+357 11 1.38794e+020
+191 206 1.38326e+020
+357 282 1.38093e+020
+473 6 1.38073e+020
+309 440 1.38052e+020
+412 45 1.37844e+020
+190 313 1.3784e+020
+244 208 1.37689e+020
+155 318 1.37423e+020
+454 116 1.36879e+020
+333 202 1.36873e+020
+217 425 1.3674e+020
+118 76 1.36531e+020
+249 366 1.36375e+020
+328 214 1.36204e+020
+392 49 1.36098e+020
+92 254 1.35542e+020
+472 24 1.35512e+020
+33 219 1.35455e+020
+135 179 1.35335e+020
+574 13 1.35068e+020
+438 339 1.34162e+020
+153 194 1.34087e+020
+217 147 1.3403e+020
+18 343 1.33683e+020
+71 146 1.33253e+020
+444 451 1.32738e+020
+420 49 1.32299e+020
+50 288 1.31787e+020
+445 123 1.31522e+020
+259 34 1.31395e+020
+10 78 1.30827e+020
+539 97 1.30004e+020
+552 377 1.29906e+020
+422 298 1.29773e+020
+339 166 1.29167e+020
+231 199 1.29138e+020
+280 130 1.28815e+020
+529 400 1.28362e+020
+572 406 1.28174e+020
+431 81 1.27465e+020
+91 290 1.27293e+020
+468 208 1.26857e+020
+378 338 1.26303e+020
+342 47 1.26104e+020
+155 114 1.26074e+020
+163 62 1.25845e+020
+489 58 1.25841e+020
+530 143 1.25551e+020
+233 33 1.25397e+020
+485 263 1.25213e+020
+272 285 1.24832e+020
+541 130 1.24718e+020
+482 451 1.24402e+020
+577 246 1.24388e+020
+574 178 1.24387e+020
+569 382 1.23617e+020
+191 143 1.23074e+020
+371 90 1.22686e+020
+528 363 1.22585e+020
+75 475 1.22503e+020
+86 63 1.2233e+020
+570 451 1.22158e+020
+301 105 1.22075e+020
+139 99 1.21698e+020
+270 290 1.20864e+020
+521 264 1.20668e+020
+176 20 1.20448e+020
+70 96 1.2024e+020
+522 426 1.20127e+020
+424 399 1.19895e+020
+272 132 1.19575e+020
+318 459 1.19376e+020
+287 397 1.1928e+020
+271 186 1.19101e+020
+295 421 1.19087e+020
+88 368 1.18826e+020
+282 391 1.18734e+020
+337 62 1.18556e+020
+424 376 1.18457e+020
+260 238 1.18229e+020
+355 342 1.18202e+020
+280 136 1.17981e+020
+319 187 1.17724e+020
+214 94 1.17631e+020
+59 254 1.17192e+020
+459 264 1.16983e+020
+169 17 1.16632e+020
+269 54 1.16407e+020
+470 121 1.16374e+020
+550 59 1.16326e+020
+155 295 1.16091e+020
+247 219 1.1585e+020
+309 373 1.15803e+020
+530 96 1.15035e+020
+205 308 1.15018e+020
+468 138 1.14583e+020
+103 237 1.14356e+020
+263 285 1.14291e+020
+89 375 1.14178e+020
+221 151 1.14015e+020
+380 107 1.13932e+020
+306 449 1.13761e+020
+407 45 1.13448e+020
+575 100 1.13144e+020
+440 456 1.13096e+020
+363 357 1.13091e+020
+162 169 1.12805e+020
+517 42 1.12416e+020
+463 199 1.12384e+020
+273 295 1.11868e+020
+130 477 1.11847e+020
+279 51 1.11763e+020
+204 221 1.11166e+020
+578 44 1.11163e+020
+328 181 1.11002e+020
+289 139 1.10893e+020
+104 307 1.10863e+020
+187 265 1.10738e+020
+402 44 1.10678e+020
+265 17 1.10631e+020
+48 234 1.10498e+020
+249 361 1.10321e+020
+437 240 1.103e+020
+438 467 1.09596e+020
+337 264 1.0942e+020
+192 292 1.09356e+020
+282 268 1.09142e+020
+482 440 1.09133e+020
+136 136 1.08897e+020
+455 162 1.08682e+020
+119 131 1.08613e+020
+260 226 1.08494e+020
+33 111 1.0842e+020
+537 262 1.08312e+020
+174 93 1.08217e+020
+279 419 1.0811e+020
+157 218 1.08107e+020
+453 102 1.08038e+020
+563 323 1.07971e+020
+107 75 1.07956e+020
+265 311 1.07806e+020
+91 60 1.07618e+020
+244 293 1.07571e+020
+78 198 1.07517e+020
+105 97 1.06808e+020
+420 66 1.06613e+020
+22 48 1.06169e+020
+494 160 1.05963e+020
+358 54 1.05679e+020
+437 281 1.05422e+020
+227 112 1.05408e+020
+92 444 1.05172e+020
+9 234 1.04866e+020
+205 435 1.04736e+020
+357 166 1.0467e+020
+84 72 1.04457e+020
+109 136 1.04346e+020
+313 76 1.03986e+020
+91 276 1.03538e+020
+162 119 1.0325e+020
+160 146 1.03142e+020
+87 144 1.03091e+020
+298 274 1.03086e+020
+167 118 1.03081e+020
+453 178 1.02903e+020
+418 83 1.02305e+020
+514 83 1.02286e+020
+114 1 1.02236e+020
+266 300 1.01956e+020
+471 237 1.01929e+020
+223 14 1.0154e+020
+340 108 1.01539e+020
+343 200 1.01075e+020
+83 171 1.01051e+020
+55 145 1.00802e+020
+196 195 1.00288e+020
+527 347 1.0026e+020
+153 235 1.00147e+020
+186 20 1.00043e+020
+506 361 1.00006e+020
+292 335 9.99214e+019
+178 273 9.98931e+019
+525 173 9.97996e+019
+366 164 9.97496e+019
+216 175 9.94119e+019
+325 133 9.92481e+019
+10 103 9.92304e+019
+418 283 9.89799e+019
+365 302 9.89541e+019
+561 226 9.8694e+019
+182 343 9.855e+019
+146 449 9.85125e+019
+196 255 9.84025e+019
+242 421 9.83395e+019
+465 425 9.82269e+019
+232 13 9.79901e+019
+211 396 9.66569e+019
+133 237 9.6437e+019
+463 22 9.59753e+019
+70 128 9.58495e+019
+134 147 9.58451e+019
+596 363 9.56622e+019
+569 423 9.53145e+019
+537 393 9.52115e+019
+362 244 9.51379e+019
+524 399 9.51109e+019
+39 287 9.50356e+019
+65 182 9.49448e+019
+497 66 9.48303e+019
+442 241 9.47793e+019
+319 166 9.47781e+019
+561 142 9.47468e+019
+480 84 9.47155e+019
+512 77 9.44957e+019
+187 309 9.43503e+019
+504 260 9.38883e+019
+157 90 9.34108e+019
+253 389 9.33388e+019
+226 198 9.32368e+019
+220 315 9.31856e+019
+72 164 9.31431e+019
+182 95 9.29638e+019
+475 342 9.29109e+019
+281 438 9.26089e+019
+70 22 9.26075e+019
+527 221 9.25813e+019
+56 374 9.25133e+019
+110 262 9.20867e+019
+449 140 9.19913e+019
+382 102 9.19272e+019
+515 119 9.1808e+019
+418 449 9.1735e+019
+209 55 9.17208e+019
+240 155 9.14137e+019
+415 357 9.12541e+019
+404 376 9.12434e+019
+494 58 9.07303e+019
+17 434 9.00394e+019
+351 273 8.9776e+019
+150 112 8.97602e+019
+197 123 8.97482e+019
+280 204 8.92664e+019
+98 257 8.91994e+019
+222 116 8.88758e+019
+343 142 8.87726e+019
+499 81 8.87507e+019
+340 473 8.86098e+019
+542 246 8.85609e+019
+567 180 8.84217e+019
+323 14 8.83327e+019
+190 329 8.82378e+019
+548 139 8.79879e+019
+330 26 8.78014e+019
+178 331 8.75699e+019
+277 111 8.75492e+019
+513 442 8.74994e+019
+53 360 8.74918e+019
+200 313 8.73938e+019
+156 39 8.72472e+019
+254 78 8.69126e+019
+278 224 8.65093e+019
+89 181 8.63852e+019
+122 123 8.62796e+019
+336 405 8.60029e+019
+307 169 8.56701e+019
+78 271 8.54444e+019
+298 409 8.54021e+019
+479 243 8.52017e+019
+125 77 8.51698e+019
+364 180 8.50775e+019
+238 34 8.50553e+019
+509 58 8.49618e+019
+441 23 8.49363e+019
+430 151 8.49212e+019
+125 96 8.47546e+019
+528 431 8.47149e+019
+78 133 8.46532e+019
+521 187 8.46152e+019
+229 281 8.4341e+019
+378 183 8.42244e+019
+97 38 8.42236e+019
+163 252 8.42189e+019
+499 266 8.41549e+019
+400 168 8.35568e+019
+155 56 8.33887e+019
+220 212 8.32821e+019
+244 281 8.32147e+019
+106 106 8.32006e+019
+368 82 8.31694e+019
+114 169 8.31689e+019
+432 268 8.31585e+019
+405 79 8.31235e+019
+512 94 8.3079e+019
+279 145 8.30195e+019
+516 381 8.30001e+019
+51 453 8.2975e+019
+479 286 8.28702e+019
+257 134 8.27818e+019
+591 20 8.25994e+019
+397 104 8.25153e+019
+103 258 8.25026e+019
+188 278 8.18747e+019
+559 80 8.16475e+019
+307 428 8.13638e+019
+480 166 8.12968e+019
+487 375 8.12365e+019
+323 146 8.12178e+019
+94 80 8.12014e+019
+388 127 8.11938e+019
+40 355 8.11037e+019
+471 82 8.10771e+019
+161 33 8.10021e+019
+501 320 8.07807e+019
+186 133 8.07783e+019
+299 87 8.07609e+019
+55 172 8.05843e+019
+358 268 8.05677e+019
+390 118 8.05213e+019
+113 243 8.04351e+019
+89 476 8.04091e+019
+327 105 8.03623e+019
+86 363 8.01405e+019
+447 351 7.99787e+019
+291 50 7.98646e+019
+597 33 7.95826e+019
+571 326 7.95684e+019
+405 11 7.95143e+019
+247 105 7.94544e+019
+308 358 7.94042e+019
+576 330 7.93602e+019
+302 333 7.92478e+019
+498 463 7.92305e+019
+18 235 7.92039e+019
+147 99 7.91927e+019
+388 138 7.91044e+019
+212 146 7.90692e+019
+376 240 7.90502e+019
+511 297 7.85507e+019
+286 164 7.83601e+019
+255 107 7.81661e+019
+367 337 7.77025e+019
+541 381 7.75158e+019
+108 382 7.73779e+019
+388 2 7.7248e+019
+167 105 7.72273e+019
+183 142 7.72263e+019
+387 450 7.71389e+019
+9 32 7.69758e+019
+514 203 7.69178e+019
+258 392 7.68357e+019
+240 327 7.66291e+019
+423 165 7.66153e+019
+65 370 7.66121e+019
+478 7 7.65592e+019
+383 321 7.64505e+019
+506 380 7.62648e+019
+261 140 7.61944e+019
+455 48 7.61932e+019
+191 188 7.61486e+019
+391 325 7.61151e+019
+200 294 7.60009e+019
+578 85 7.5928e+019
+447 21 7.58337e+019
+594 425 7.57561e+019
+222 72 7.57071e+019
+174 312 7.57015e+019
+150 397 7.56411e+019
+161 19 7.56363e+019
+197 111 7.5564e+019
+348 343 7.54951e+019
+162 152 7.53758e+019
+207 163 7.53726e+019
+2 156 7.53395e+019
+156 95 7.52589e+019
+174 187 7.51399e+019
+291 262 7.50824e+019
+94 375 7.49812e+019
+310 446 7.49144e+019
+413 264 7.48769e+019
+33 164 7.47757e+019
+148 226 7.47685e+019
+167 433 7.47536e+019
+299 255 7.46908e+019
+291 89 7.45807e+019
+504 143 7.45509e+019
+227 130 7.44733e+019
+311 299 7.44405e+019
+272 64 7.44049e+019
+287 214 7.43584e+019
+315 446 7.43389e+019
+183 316 7.42675e+019
+150 79 7.41431e+019
+149 232 7.41426e+019
+255 4 7.40842e+019
+582 446 7.38889e+019
+540 40 7.38776e+019
+211 11 7.38358e+019
+275 214 7.37676e+019
+255 459 7.37357e+019
+514 403 7.35226e+019
+41 203 7.35097e+019
+155 162 7.3453e+019
+382 413 7.33788e+019
+181 165 7.32611e+019
+524 78 7.32304e+019
+149 132 7.3118e+019
+35 200 7.29873e+019
+333 330 7.28998e+019
+480 46 7.27538e+019
+290 311 7.26881e+019
+259 70 7.26265e+019
+388 53 7.25129e+019
+277 320 7.24732e+019
+542 162 7.24486e+019
+71 407 7.22529e+019
+262 369 7.20761e+019
+56 334 7.19225e+019
+464 119 7.17616e+019
+209 419 7.14853e+019
+161 126 7.14424e+019
+112 354 7.1426e+019
+438 108 7.12488e+019
+99 94 7.12144e+019
+85 40 7.10427e+019
+407 164 7.09961e+019
+330 414 7.09427e+019
+8 115 7.08801e+019
+163 348 7.08676e+019
+420 362 7.07353e+019
+109 2 7.06959e+019
+12 204 7.05498e+019
+106 183 7.04511e+019
+114 215 7.04355e+019
+215 289 7.04265e+019
+194 84 7.04115e+019
+339 182 7.03924e+019
+275 204 7.03173e+019
+270 108 7.01882e+019
+460 376 7.01283e+019
+385 65 7.00017e+019
+113 76 6.99917e+019
+330 334 6.99901e+019
+584 346 6.99452e+019
+114 130 6.96503e+019
+362 48 6.94687e+019
+276 269 6.94389e+019
+222 86 6.9403e+019
+77 162 6.94023e+019
+165 379 6.91197e+019
+584 37 6.90761e+019
+225 51 6.90345e+019
+48 161 6.89877e+019
+360 369 6.88457e+019
+157 122 6.88369e+019
+46 408 6.88243e+019
+53 295 6.87239e+019
+249 386 6.85982e+019
+96 456 6.85063e+019
+102 162 6.84238e+019
+386 284 6.83644e+019
+408 429 6.83378e+019
+43 146 6.82991e+019
+203 160 6.82965e+019
+39 238 6.82332e+019
+318 453 6.82182e+019
+225 397 6.80356e+019
+468 28 6.80044e+019
+336 144 6.79174e+019
+525 282 6.77392e+019
+41 182 6.76206e+019
+412 246 6.75797e+019
+594 101 6.7571e+019
+26 44 6.75535e+019
+254 130 6.73582e+019
+396 23 6.73205e+019
+4 35 6.7178e+019
+204 419 6.70299e+019
+171 451 6.67998e+019
+142 235 6.66966e+019
+453 378 6.6643e+019
+129 428 6.66193e+019
+418 260 6.65872e+019
+376 83 6.65556e+019
+190 109 6.64335e+019
+10 125 6.6433e+019
+215 124 6.63748e+019
+53 330 6.62862e+019
+316 105 6.62033e+019
+302 195 6.60024e+019
+543 444 6.59114e+019
+597 273 6.58592e+019
+511 352 6.57685e+019
+516 73 6.5621e+019
+298 398 6.56164e+019
+132 255 6.53079e+019
+275 139 6.52473e+019
+199 329 6.51991e+019
+143 96 6.51678e+019
+380 451 6.51267e+019
+241 190 6.51169e+019
+576 37 6.5089e+019
+432 237 6.50178e+019
+288 348 6.49851e+019
+33 260 6.4906e+019
+175 240 6.47184e+019
+119 95 6.46226e+019
+270 415 6.46207e+019
+20 316 6.44544e+019
+113 144 6.43916e+019
+452 404 6.43051e+019
+186 202 6.42239e+019
+541 142 6.41613e+019
+408 26 6.40278e+019
+155 444 6.39677e+019
+278 86 6.39378e+019
+412 3 6.38501e+019
+175 120 6.38141e+019
+385 334 6.37499e+019
+461 161 6.36369e+019
+268 88 6.36179e+019
+36 76 6.36049e+019
+337 428 6.35685e+019
+596 313 6.35406e+019
+187 294 6.35155e+019
+158 305 6.34119e+019
+186 101 6.33879e+019
+51 230 6.31035e+019
+268 118 6.30729e+019
+247 405 6.30616e+019
+236 403 6.2931e+019
+261 199 6.27481e+019
+250 150 6.27123e+019
+189 255 6.26078e+019
+481 101 6.26059e+019
+150 2 6.23583e+019
+270 19 6.23447e+019
+547 301 6.21899e+019
+470 42 6.20869e+019
+402 143 6.20659e+019
+438 182 6.20266e+019
+253 163 6.18393e+019
+150 199 6.16594e+019
+95 387 6.16428e+019
+72 188 6.1597e+019
+485 6 6.15168e+019
+180 155 6.14689e+019
+173 417 6.14283e+019
+244 388 6.12935e+019
+264 321 6.12834e+019
+543 21 6.12682e+019
+116 361 6.12319e+019
+436 121 6.10912e+019
+216 204 6.10251e+019
+562 149 6.09231e+019
+283 338 6.09154e+019
+231 178 6.08252e+019
+201 195 6.07872e+019
+528 31 6.06961e+019
+543 217 6.04767e+019
+449 126 6.03371e+019
+410 140 6.02e+019
+200 76 6.01612e+019
+443 168 6.00791e+019
+271 145 6.00233e+019
diff --git a/test_data/hough_lines.bmp b/test_data/hough_lines.bmp
new file mode 100644
index 0000000..0074c3b
--- /dev/null
+++ b/test_data/hough_lines.bmp
Binary files differ
diff --git a/test_data/hough_lines_1_170_40_40_10.txt b/test_data/hough_lines_1_170_40_40_10.txt
new file mode 100644
index 0000000..da1ee6b
--- /dev/null
+++ b/test_data/hough_lines_1_170_40_40_10.txt
@@ -0,0 +1,20 @@
+0 44 24 230 24
+1 43 128 231 128
+2 245 205 377 205
+3 42 26 42 127
+4 325 41 386 135
+5 251 86 314 183
+6 153 179 153 277
+7 231 25 231 127
+8 331 254 378 207
+9 244 206 288 258
+10 251 87 323 40
+11 197 229 197 277
+12 315 184 386 136
+13 324 41 386 137
+14 331 255 378 208
+15 154 178 195 178
+16 196 228 197 184
+17 251 88 311 181
+18 246 209 303 278
+19 13 209 22 258
diff --git a/test_data/hough_lines_1_180_40_40_9.txt b/test_data/hough_lines_1_180_40_40_9.txt
new file mode 100644
index 0000000..ce3aff6
--- /dev/null
+++ b/test_data/hough_lines_1_180_40_40_9.txt
@@ -0,0 +1,14 @@
+0 44 24 230 24
+1 43 128 231 128
+2 318 268 378 208
+3 245 205 377 205
+4 324 40 386 136
+5 42 26 42 127
+6 251 86 313 183
+7 252 86 323 40
+8 153 179 153 277
+9 231 25 231 127
+10 250 212 305 279
+11 315 183 386 137
+12 154 178 195 178
+13 244 206 303 278
diff --git a/test_data/hough_lines_1_180_50_50_10.txt b/test_data/hough_lines_1_180_50_50_10.txt
new file mode 100644
index 0000000..9d7aedf
--- /dev/null
+++ b/test_data/hough_lines_1_180_50_50_10.txt
@@ -0,0 +1,12 @@
+0 43 128 231 128
+1 44 24 230 24
+2 318 268 378 208
+3 245 205 377 205
+4 42 26 42 127
+5 323 40 386 137
+6 251 86 322 40
+7 251 87 313 183
+8 231 25 231 127
+9 153 179 153 277
+10 247 209 304 279
+11 315 183 385 137
diff --git a/test_data/hough_lines_1_190_40_40_10.txt b/test_data/hough_lines_1_190_40_40_10.txt
new file mode 100644
index 0000000..10035ab
--- /dev/null
+++ b/test_data/hough_lines_1_190_40_40_10.txt
@@ -0,0 +1,18 @@
+0 44 24 230 24
+1 43 128 231 128
+2 245 205 377 205
+3 323 40 386 136
+4 42 26 42 127
+5 251 87 314 183
+6 153 179 153 277
+7 252 86 322 40
+8 231 25 231 127
+9 330 255 378 207
+10 247 209 304 279
+11 315 184 386 137
+12 197 229 197 277
+13 318 268 367 219
+14 154 178 195 178
+15 196 228 197 179
+16 324 40 386 135
+17 13 209 23 261
diff --git a/test_data/hough_lines_2_180_50_50_9.txt b/test_data/hough_lines_2_180_50_50_9.txt
new file mode 100644
index 0000000..41cfd2a
--- /dev/null
+++ b/test_data/hough_lines_2_180_50_50_9.txt
@@ -0,0 +1,14 @@
+0 43 128 231 128
+1 323 40 386 137
+2 44 24 230 24
+3 245 205 377 205
+4 318 268 378 208
+5 274 124 313 183
+6 42 26 42 127
+7 244 207 305 279
+8 254 84 324 40
+9 314 183 375 145
+10 231 25 231 127
+11 153 179 153 277
+12 325 41 386 135
+13 13 209 23 261
diff --git a/test_data/images/00000000.jpg b/test_data/images/00000000.jpg
new file mode 100755
index 0000000..41a7c08
--- /dev/null
+++ b/test_data/images/00000000.jpg
Binary files differ
diff --git a/test_data/images/00000001.jpg b/test_data/images/00000001.jpg
new file mode 100755
index 0000000..a25f6ba
--- /dev/null
+++ b/test_data/images/00000001.jpg
Binary files differ
diff --git a/test_data/images/00000002.jpg b/test_data/images/00000002.jpg
new file mode 100755
index 0000000..72a60a9
--- /dev/null
+++ b/test_data/images/00000002.jpg
Binary files differ
diff --git a/test_data/images/00000003.jpg b/test_data/images/00000003.jpg
new file mode 100755
index 0000000..730500b
--- /dev/null
+++ b/test_data/images/00000003.jpg
Binary files differ
diff --git a/test_data/images/00000004.jpg b/test_data/images/00000004.jpg
new file mode 100755
index 0000000..eb79508
--- /dev/null
+++ b/test_data/images/00000004.jpg
Binary files differ
diff --git a/test_data/images/00000005.jpg b/test_data/images/00000005.jpg
new file mode 100755
index 0000000..307b266
--- /dev/null
+++ b/test_data/images/00000005.jpg
Binary files differ
diff --git a/test_data/images/00000006.jpg b/test_data/images/00000006.jpg
new file mode 100755
index 0000000..1c07893
--- /dev/null
+++ b/test_data/images/00000006.jpg
Binary files differ
diff --git a/test_data/images/00000007.jpg b/test_data/images/00000007.jpg
new file mode 100755
index 0000000..51b4c19
--- /dev/null
+++ b/test_data/images/00000007.jpg
Binary files differ
diff --git a/test_data/images/00000008.jpg b/test_data/images/00000008.jpg
new file mode 100755
index 0000000..361ee2a
--- /dev/null
+++ b/test_data/images/00000008.jpg
Binary files differ
diff --git a/test_data/images/00000009.jpg b/test_data/images/00000009.jpg
new file mode 100755
index 0000000..3d5a71f
--- /dev/null
+++ b/test_data/images/00000009.jpg
Binary files differ
diff --git a/test_data/images/00000010.jpg b/test_data/images/00000010.jpg
new file mode 100755
index 0000000..e0b61d7
--- /dev/null
+++ b/test_data/images/00000010.jpg
Binary files differ
diff --git a/test_data/images/00000011.jpg b/test_data/images/00000011.jpg
new file mode 100755
index 0000000..06a9ec3
--- /dev/null
+++ b/test_data/images/00000011.jpg
Binary files differ
diff --git a/test_data/images/00000012.jpg b/test_data/images/00000012.jpg
new file mode 100755
index 0000000..8228468
--- /dev/null
+++ b/test_data/images/00000012.jpg
Binary files differ
diff --git a/test_data/images/00000013.jpg b/test_data/images/00000013.jpg
new file mode 100755
index 0000000..05d071e
--- /dev/null
+++ b/test_data/images/00000013.jpg
Binary files differ
diff --git a/test_data/images/00000014.jpg b/test_data/images/00000014.jpg
new file mode 100755
index 0000000..05d071e
--- /dev/null
+++ b/test_data/images/00000014.jpg
Binary files differ
diff --git a/test_data/images/00000015.jpg b/test_data/images/00000015.jpg
new file mode 100755
index 0000000..4b125c4
--- /dev/null
+++ b/test_data/images/00000015.jpg
Binary files differ
diff --git a/test_data/images/00000016.jpg b/test_data/images/00000016.jpg
new file mode 100755
index 0000000..6a97518
--- /dev/null
+++ b/test_data/images/00000016.jpg
Binary files differ
diff --git a/test_data/images/00000017.jpg b/test_data/images/00000017.jpg
new file mode 100755
index 0000000..f221ce0
--- /dev/null
+++ b/test_data/images/00000017.jpg
Binary files differ
diff --git a/test_data/images/00000018.jpg b/test_data/images/00000018.jpg
new file mode 100755
index 0000000..a8a3b0b
--- /dev/null
+++ b/test_data/images/00000018.jpg
Binary files differ
diff --git a/test_data/images/00000019.jpg b/test_data/images/00000019.jpg
new file mode 100755
index 0000000..a8a3b0b
--- /dev/null
+++ b/test_data/images/00000019.jpg
Binary files differ
diff --git a/test_data/images/00000020.jpg b/test_data/images/00000020.jpg
new file mode 100755
index 0000000..99f52b4
--- /dev/null
+++ b/test_data/images/00000020.jpg
Binary files differ
diff --git a/test_data/images/00000021.jpg b/test_data/images/00000021.jpg
new file mode 100755
index 0000000..ec484a2
--- /dev/null
+++ b/test_data/images/00000021.jpg
Binary files differ
diff --git a/test_data/images/00000022.jpg b/test_data/images/00000022.jpg
new file mode 100755
index 0000000..6830376
--- /dev/null
+++ b/test_data/images/00000022.jpg
Binary files differ
diff --git a/test_data/images/00000023.jpg b/test_data/images/00000023.jpg
new file mode 100755
index 0000000..93b8e56
--- /dev/null
+++ b/test_data/images/00000023.jpg
Binary files differ
diff --git a/test_data/images/00000024.jpg b/test_data/images/00000024.jpg
new file mode 100755
index 0000000..291c5f9
--- /dev/null
+++ b/test_data/images/00000024.jpg
Binary files differ
diff --git a/test_data/images/00000025.jpg b/test_data/images/00000025.jpg
new file mode 100755
index 0000000..a1e1eae
--- /dev/null
+++ b/test_data/images/00000025.jpg
Binary files differ
diff --git a/test_data/images/00000026.jpg b/test_data/images/00000026.jpg
new file mode 100755
index 0000000..43567e0
--- /dev/null
+++ b/test_data/images/00000026.jpg
Binary files differ
diff --git a/test_data/images/00000027.jpg b/test_data/images/00000027.jpg
new file mode 100755
index 0000000..6d85f80
--- /dev/null
+++ b/test_data/images/00000027.jpg
Binary files differ
diff --git a/test_data/images/00000028.jpg b/test_data/images/00000028.jpg
new file mode 100755
index 0000000..cb7f96d
--- /dev/null
+++ b/test_data/images/00000028.jpg
Binary files differ
diff --git a/test_data/images/00000029.jpg b/test_data/images/00000029.jpg
new file mode 100755
index 0000000..2e4fa9a
--- /dev/null
+++ b/test_data/images/00000029.jpg
Binary files differ
diff --git a/test_data/images/00000030.jpg b/test_data/images/00000030.jpg
new file mode 100755
index 0000000..0cf2d92
--- /dev/null
+++ b/test_data/images/00000030.jpg
Binary files differ
diff --git a/test_data/images/00000031.jpg b/test_data/images/00000031.jpg
new file mode 100755
index 0000000..c6b8d9c
--- /dev/null
+++ b/test_data/images/00000031.jpg
Binary files differ
diff --git a/test_data/images/00000032.jpg b/test_data/images/00000032.jpg
new file mode 100755
index 0000000..a4060cf
--- /dev/null
+++ b/test_data/images/00000032.jpg
Binary files differ
diff --git a/test_data/images/00000033.jpg b/test_data/images/00000033.jpg
new file mode 100755
index 0000000..c52d68f
--- /dev/null
+++ b/test_data/images/00000033.jpg
Binary files differ
diff --git a/test_data/images/00000034.jpg b/test_data/images/00000034.jpg
new file mode 100755
index 0000000..ddbcb23
--- /dev/null
+++ b/test_data/images/00000034.jpg
Binary files differ
diff --git a/test_data/images/00000035.jpg b/test_data/images/00000035.jpg
new file mode 100755
index 0000000..5113c14
--- /dev/null
+++ b/test_data/images/00000035.jpg
Binary files differ
diff --git a/test_data/images/00000036.jpg b/test_data/images/00000036.jpg
new file mode 100755
index 0000000..6f5b633
--- /dev/null
+++ b/test_data/images/00000036.jpg
Binary files differ
diff --git a/test_data/images/00000037.jpg b/test_data/images/00000037.jpg
new file mode 100755
index 0000000..094a8ff
--- /dev/null
+++ b/test_data/images/00000037.jpg
Binary files differ
diff --git a/test_data/images/00000038.jpg b/test_data/images/00000038.jpg
new file mode 100755
index 0000000..74edde3
--- /dev/null
+++ b/test_data/images/00000038.jpg
Binary files differ
diff --git a/test_data/images/00000039.jpg b/test_data/images/00000039.jpg
new file mode 100755
index 0000000..4027a20
--- /dev/null
+++ b/test_data/images/00000039.jpg
Binary files differ
diff --git a/test_data/images/00000040.jpg b/test_data/images/00000040.jpg
new file mode 100755
index 0000000..335ae64
--- /dev/null
+++ b/test_data/images/00000040.jpg
Binary files differ
diff --git a/test_data/images/00000041.jpg b/test_data/images/00000041.jpg
new file mode 100755
index 0000000..31c37a3
--- /dev/null
+++ b/test_data/images/00000041.jpg
Binary files differ
diff --git a/test_data/images/00000042.jpg b/test_data/images/00000042.jpg
new file mode 100755
index 0000000..3e3548b
--- /dev/null
+++ b/test_data/images/00000042.jpg
Binary files differ
diff --git a/test_data/images/00000043.jpg b/test_data/images/00000043.jpg
new file mode 100755
index 0000000..582c1b6
--- /dev/null
+++ b/test_data/images/00000043.jpg
Binary files differ
diff --git a/test_data/images/00000044.jpg b/test_data/images/00000044.jpg
new file mode 100755
index 0000000..dcceed4
--- /dev/null
+++ b/test_data/images/00000044.jpg
Binary files differ
diff --git a/test_data/images/00000045.jpg b/test_data/images/00000045.jpg
new file mode 100755
index 0000000..dcceed4
--- /dev/null
+++ b/test_data/images/00000045.jpg
Binary files differ
diff --git a/test_data/images/00000046.jpg b/test_data/images/00000046.jpg
new file mode 100755
index 0000000..1715ee4
--- /dev/null
+++ b/test_data/images/00000046.jpg
Binary files differ
diff --git a/test_data/images/00000047.jpg b/test_data/images/00000047.jpg
new file mode 100755
index 0000000..2af0987
--- /dev/null
+++ b/test_data/images/00000047.jpg
Binary files differ
diff --git a/test_data/images/00000048.jpg b/test_data/images/00000048.jpg
new file mode 100755
index 0000000..1494344
--- /dev/null
+++ b/test_data/images/00000048.jpg
Binary files differ
diff --git a/test_data/images/00000049.jpg b/test_data/images/00000049.jpg
new file mode 100755
index 0000000..cffc3be
--- /dev/null
+++ b/test_data/images/00000049.jpg
Binary files differ
diff --git a/test_data/images/00000050.jpg b/test_data/images/00000050.jpg
new file mode 100755
index 0000000..d040986
--- /dev/null
+++ b/test_data/images/00000050.jpg
Binary files differ
diff --git a/test_data/images/00000051.jpg b/test_data/images/00000051.jpg
new file mode 100755
index 0000000..7d5f239
--- /dev/null
+++ b/test_data/images/00000051.jpg
Binary files differ
diff --git a/test_data/images/00000052.jpg b/test_data/images/00000052.jpg
new file mode 100755
index 0000000..0e9c644
--- /dev/null
+++ b/test_data/images/00000052.jpg
Binary files differ
diff --git a/test_data/images/00000053.jpg b/test_data/images/00000053.jpg
new file mode 100755
index 0000000..5d7a763
--- /dev/null
+++ b/test_data/images/00000053.jpg
Binary files differ
diff --git a/test_data/images/00000054.jpg b/test_data/images/00000054.jpg
new file mode 100755
index 0000000..b84e49a
--- /dev/null
+++ b/test_data/images/00000054.jpg
Binary files differ
diff --git a/test_data/images/00000055.jpg b/test_data/images/00000055.jpg
new file mode 100755
index 0000000..bf9a035
--- /dev/null
+++ b/test_data/images/00000055.jpg
Binary files differ
diff --git a/test_data/images/00000056.jpg b/test_data/images/00000056.jpg
new file mode 100755
index 0000000..db4751e
--- /dev/null
+++ b/test_data/images/00000056.jpg
Binary files differ
diff --git a/test_data/images/00000057.jpg b/test_data/images/00000057.jpg
new file mode 100755
index 0000000..b74e87c
--- /dev/null
+++ b/test_data/images/00000057.jpg
Binary files differ
diff --git a/test_data/images/00000058.jpg b/test_data/images/00000058.jpg
new file mode 100755
index 0000000..fbee112
--- /dev/null
+++ b/test_data/images/00000058.jpg
Binary files differ
diff --git a/test_data/images/00000059.jpg b/test_data/images/00000059.jpg
new file mode 100755
index 0000000..b74e87c
--- /dev/null
+++ b/test_data/images/00000059.jpg
Binary files differ
diff --git a/test_data/images/00000060.jpg b/test_data/images/00000060.jpg
new file mode 100755
index 0000000..bc84829
--- /dev/null
+++ b/test_data/images/00000060.jpg
Binary files differ
diff --git a/test_data/images/00000061.jpg b/test_data/images/00000061.jpg
new file mode 100755
index 0000000..5caf9b5
--- /dev/null
+++ b/test_data/images/00000061.jpg
Binary files differ
diff --git a/test_data/images/00000062.jpg b/test_data/images/00000062.jpg
new file mode 100755
index 0000000..5caf9b5
--- /dev/null
+++ b/test_data/images/00000062.jpg
Binary files differ
diff --git a/test_data/images/00000063.jpg b/test_data/images/00000063.jpg
new file mode 100755
index 0000000..9e8b5a5
--- /dev/null
+++ b/test_data/images/00000063.jpg
Binary files differ
diff --git a/test_data/images/00000064.jpg b/test_data/images/00000064.jpg
new file mode 100755
index 0000000..7b7d8cc
--- /dev/null
+++ b/test_data/images/00000064.jpg
Binary files differ
diff --git a/test_data/images/00000065.jpg b/test_data/images/00000065.jpg
new file mode 100755
index 0000000..67c7715
--- /dev/null
+++ b/test_data/images/00000065.jpg
Binary files differ
diff --git a/test_data/images/00000066.jpg b/test_data/images/00000066.jpg
new file mode 100755
index 0000000..4c7551d
--- /dev/null
+++ b/test_data/images/00000066.jpg
Binary files differ
diff --git a/test_data/images/00000067.jpg b/test_data/images/00000067.jpg
new file mode 100755
index 0000000..9686560
--- /dev/null
+++ b/test_data/images/00000067.jpg
Binary files differ
diff --git a/test_data/images/00000068.jpg b/test_data/images/00000068.jpg
new file mode 100755
index 0000000..dedd317
--- /dev/null
+++ b/test_data/images/00000068.jpg
Binary files differ
diff --git a/test_data/images/00000069.jpg b/test_data/images/00000069.jpg
new file mode 100755
index 0000000..4fdb06a
--- /dev/null
+++ b/test_data/images/00000069.jpg
Binary files differ
diff --git a/test_data/images/00000070.jpg b/test_data/images/00000070.jpg
new file mode 100755
index 0000000..3aa157a
--- /dev/null
+++ b/test_data/images/00000070.jpg
Binary files differ
diff --git a/test_data/images/00000071.jpg b/test_data/images/00000071.jpg
new file mode 100755
index 0000000..225ffd3
--- /dev/null
+++ b/test_data/images/00000071.jpg
Binary files differ
diff --git a/test_data/images/00000072.jpg b/test_data/images/00000072.jpg
new file mode 100755
index 0000000..225ffd3
--- /dev/null
+++ b/test_data/images/00000072.jpg
Binary files differ
diff --git a/test_data/images/00000073.jpg b/test_data/images/00000073.jpg
new file mode 100755
index 0000000..08f7789
--- /dev/null
+++ b/test_data/images/00000073.jpg
Binary files differ
diff --git a/test_data/images/00000074.jpg b/test_data/images/00000074.jpg
new file mode 100755
index 0000000..18e800a
--- /dev/null
+++ b/test_data/images/00000074.jpg
Binary files differ
diff --git a/test_data/images/00000075.jpg b/test_data/images/00000075.jpg
new file mode 100755
index 0000000..e24888e
--- /dev/null
+++ b/test_data/images/00000075.jpg
Binary files differ
diff --git a/test_data/images/00000076.jpg b/test_data/images/00000076.jpg
new file mode 100755
index 0000000..152a853
--- /dev/null
+++ b/test_data/images/00000076.jpg
Binary files differ
diff --git a/test_data/images/00000077.jpg b/test_data/images/00000077.jpg
new file mode 100755
index 0000000..c6807e5
--- /dev/null
+++ b/test_data/images/00000077.jpg
Binary files differ
diff --git a/test_data/images/00000078.jpg b/test_data/images/00000078.jpg
new file mode 100755
index 0000000..424190e
--- /dev/null
+++ b/test_data/images/00000078.jpg
Binary files differ
diff --git a/test_data/images/00000079.jpg b/test_data/images/00000079.jpg
new file mode 100755
index 0000000..abd1ec6
--- /dev/null
+++ b/test_data/images/00000079.jpg
Binary files differ
diff --git a/test_data/images/00000080.jpg b/test_data/images/00000080.jpg
new file mode 100755
index 0000000..db94cba
--- /dev/null
+++ b/test_data/images/00000080.jpg
Binary files differ
diff --git a/test_data/images/00000081.jpg b/test_data/images/00000081.jpg
new file mode 100755
index 0000000..4d50d1a
--- /dev/null
+++ b/test_data/images/00000081.jpg
Binary files differ
diff --git a/test_data/images/00000082.jpg b/test_data/images/00000082.jpg
new file mode 100755
index 0000000..5bda4f7
--- /dev/null
+++ b/test_data/images/00000082.jpg
Binary files differ
diff --git a/test_data/images/00000083.jpg b/test_data/images/00000083.jpg
new file mode 100755
index 0000000..b5a9a8f
--- /dev/null
+++ b/test_data/images/00000083.jpg
Binary files differ
diff --git a/test_data/images/00000084.jpg b/test_data/images/00000084.jpg
new file mode 100755
index 0000000..f1c107a
--- /dev/null
+++ b/test_data/images/00000084.jpg
Binary files differ
diff --git a/test_data/images/00000085.jpg b/test_data/images/00000085.jpg
new file mode 100755
index 0000000..588b4b8
--- /dev/null
+++ b/test_data/images/00000085.jpg
Binary files differ
diff --git a/test_data/images/00000086.jpg b/test_data/images/00000086.jpg
new file mode 100755
index 0000000..bfc4ce6
--- /dev/null
+++ b/test_data/images/00000086.jpg
Binary files differ
diff --git a/test_data/images/00000087.jpg b/test_data/images/00000087.jpg
new file mode 100755
index 0000000..4f3aaee
--- /dev/null
+++ b/test_data/images/00000087.jpg
Binary files differ
diff --git a/test_data/images/00000088.jpg b/test_data/images/00000088.jpg
new file mode 100755
index 0000000..4b012a7
--- /dev/null
+++ b/test_data/images/00000088.jpg
Binary files differ
diff --git a/test_data/images/00000089.jpg b/test_data/images/00000089.jpg
new file mode 100755
index 0000000..b2b4224
--- /dev/null
+++ b/test_data/images/00000089.jpg
Binary files differ
diff --git a/test_data/images/00000090.jpg b/test_data/images/00000090.jpg
new file mode 100755
index 0000000..d7b9d0a
--- /dev/null
+++ b/test_data/images/00000090.jpg
Binary files differ
diff --git a/test_data/images/00000091.jpg b/test_data/images/00000091.jpg
new file mode 100755
index 0000000..5715c7b
--- /dev/null
+++ b/test_data/images/00000091.jpg
Binary files differ
diff --git a/test_data/images/00000092.jpg b/test_data/images/00000092.jpg
new file mode 100755
index 0000000..dfeea2e
--- /dev/null
+++ b/test_data/images/00000092.jpg
Binary files differ
diff --git a/test_data/images/00000093.jpg b/test_data/images/00000093.jpg
new file mode 100755
index 0000000..554fda6
--- /dev/null
+++ b/test_data/images/00000093.jpg
Binary files differ
diff --git a/test_data/images/00000094.jpg b/test_data/images/00000094.jpg
new file mode 100755
index 0000000..c4b95f1
--- /dev/null
+++ b/test_data/images/00000094.jpg
Binary files differ
diff --git a/test_data/images/00000095.jpg b/test_data/images/00000095.jpg
new file mode 100755
index 0000000..65f6036
--- /dev/null
+++ b/test_data/images/00000095.jpg
Binary files differ
diff --git a/test_data/images/00000096.jpg b/test_data/images/00000096.jpg
new file mode 100755
index 0000000..0966d84
--- /dev/null
+++ b/test_data/images/00000096.jpg
Binary files differ
diff --git a/test_data/images/00000097.jpg b/test_data/images/00000097.jpg
new file mode 100755
index 0000000..d579018
--- /dev/null
+++ b/test_data/images/00000097.jpg
Binary files differ
diff --git a/test_data/images/00000098.jpg b/test_data/images/00000098.jpg
new file mode 100755
index 0000000..9103e66
--- /dev/null
+++ b/test_data/images/00000098.jpg
Binary files differ
diff --git a/test_data/images/00000099.jpg b/test_data/images/00000099.jpg
new file mode 100755
index 0000000..b70ba8f
--- /dev/null
+++ b/test_data/images/00000099.jpg
Binary files differ
diff --git a/test_data/images/00000100.jpg b/test_data/images/00000100.jpg
new file mode 100755
index 0000000..a3260a3
--- /dev/null
+++ b/test_data/images/00000100.jpg
Binary files differ
diff --git a/test_data/images/00000101.jpg b/test_data/images/00000101.jpg
new file mode 100755
index 0000000..c72f758
--- /dev/null
+++ b/test_data/images/00000101.jpg
Binary files differ
diff --git a/test_data/images/00000102.jpg b/test_data/images/00000102.jpg
new file mode 100755
index 0000000..8381082
--- /dev/null
+++ b/test_data/images/00000102.jpg
Binary files differ
diff --git a/test_data/images/00000103.jpg b/test_data/images/00000103.jpg
new file mode 100755
index 0000000..977a076
--- /dev/null
+++ b/test_data/images/00000103.jpg
Binary files differ
diff --git a/test_data/images/00000104.jpg b/test_data/images/00000104.jpg
new file mode 100755
index 0000000..6c1eb57
--- /dev/null
+++ b/test_data/images/00000104.jpg
Binary files differ
diff --git a/test_data/images/00000105.jpg b/test_data/images/00000105.jpg
new file mode 100755
index 0000000..a76e4de
--- /dev/null
+++ b/test_data/images/00000105.jpg
Binary files differ
diff --git a/test_data/images/00000106.jpg b/test_data/images/00000106.jpg
new file mode 100755
index 0000000..4c5ab17
--- /dev/null
+++ b/test_data/images/00000106.jpg
Binary files differ
diff --git a/test_data/images/00000107.jpg b/test_data/images/00000107.jpg
new file mode 100755
index 0000000..c08db0f
--- /dev/null
+++ b/test_data/images/00000107.jpg
Binary files differ
diff --git a/test_data/images/00000108.jpg b/test_data/images/00000108.jpg
new file mode 100755
index 0000000..5d40416
--- /dev/null
+++ b/test_data/images/00000108.jpg
Binary files differ
diff --git a/test_data/images/00000109.jpg b/test_data/images/00000109.jpg
new file mode 100755
index 0000000..e33a1c8
--- /dev/null
+++ b/test_data/images/00000109.jpg
Binary files differ
diff --git a/test_data/images/00000110.jpg b/test_data/images/00000110.jpg
new file mode 100755
index 0000000..4dbf502
--- /dev/null
+++ b/test_data/images/00000110.jpg
Binary files differ
diff --git a/test_data/images/00000111.jpg b/test_data/images/00000111.jpg
new file mode 100755
index 0000000..384b97f
--- /dev/null
+++ b/test_data/images/00000111.jpg
Binary files differ
diff --git a/test_data/images/00000112.jpg b/test_data/images/00000112.jpg
new file mode 100755
index 0000000..088f7cf
--- /dev/null
+++ b/test_data/images/00000112.jpg
Binary files differ
diff --git a/test_data/images/00000113.jpg b/test_data/images/00000113.jpg
new file mode 100755
index 0000000..e8ef630
--- /dev/null
+++ b/test_data/images/00000113.jpg
Binary files differ
diff --git a/test_data/images/00000114.jpg b/test_data/images/00000114.jpg
new file mode 100755
index 0000000..e823589
--- /dev/null
+++ b/test_data/images/00000114.jpg
Binary files differ
diff --git a/test_data/images/00000115.jpg b/test_data/images/00000115.jpg
new file mode 100755
index 0000000..2348cba
--- /dev/null
+++ b/test_data/images/00000115.jpg
Binary files differ
diff --git a/test_data/images/00000116.jpg b/test_data/images/00000116.jpg
new file mode 100755
index 0000000..4efed99
--- /dev/null
+++ b/test_data/images/00000116.jpg
Binary files differ
diff --git a/test_data/images/00000117.jpg b/test_data/images/00000117.jpg
new file mode 100755
index 0000000..d5d42e4
--- /dev/null
+++ b/test_data/images/00000117.jpg
Binary files differ
diff --git a/test_data/images/00000118.jpg b/test_data/images/00000118.jpg
new file mode 100755
index 0000000..0d115dd
--- /dev/null
+++ b/test_data/images/00000118.jpg
Binary files differ
diff --git a/test_data/images/00000119.jpg b/test_data/images/00000119.jpg
new file mode 100755
index 0000000..b2fb9b1
--- /dev/null
+++ b/test_data/images/00000119.jpg
Binary files differ
diff --git a/test_data/images/00000120.jpg b/test_data/images/00000120.jpg
new file mode 100755
index 0000000..8688476
--- /dev/null
+++ b/test_data/images/00000120.jpg
Binary files differ
diff --git a/test_data/lbp_3x3_standard.bmp b/test_data/lbp_3x3_standard.bmp
new file mode 100644
index 0000000..dfc0713
--- /dev/null
+++ b/test_data/lbp_3x3_standard.bmp
Binary files differ
diff --git a/test_data/lbp_3x3_standard_golden.bmp b/test_data/lbp_3x3_standard_golden.bmp
new file mode 100644
index 0000000..d2c456b
--- /dev/null
+++ b/test_data/lbp_3x3_standard_golden.bmp
Binary files differ
diff --git a/test_data/lbp_3x3_uniform.bmp b/test_data/lbp_3x3_uniform.bmp
new file mode 100644
index 0000000..dfc0713
--- /dev/null
+++ b/test_data/lbp_3x3_uniform.bmp
Binary files differ
diff --git a/test_data/lbp_3x3_uniform_golden.bmp b/test_data/lbp_3x3_uniform_golden.bmp
new file mode 100644
index 0000000..1592c5c
--- /dev/null
+++ b/test_data/lbp_3x3_uniform_golden.bmp
Binary files differ
diff --git a/test_data/lbp_5x5_modified.bmp b/test_data/lbp_5x5_modified.bmp
new file mode 100644
index 0000000..dfc0713
--- /dev/null
+++ b/test_data/lbp_5x5_modified.bmp
Binary files differ
diff --git a/test_data/lbp_5x5_modified_golden.bmp b/test_data/lbp_5x5_modified_golden.bmp
new file mode 100644
index 0000000..fb19bda
--- /dev/null
+++ b/test_data/lbp_5x5_modified_golden.bmp
Binary files differ
diff --git a/test_data/lbp_5x5_standard.bmp b/test_data/lbp_5x5_standard.bmp
new file mode 100644
index 0000000..dfc0713
--- /dev/null
+++ b/test_data/lbp_5x5_standard.bmp
Binary files differ
diff --git a/test_data/lbp_5x5_standard_golden.bmp b/test_data/lbp_5x5_standard_golden.bmp
new file mode 100644
index 0000000..ccb0aa1
--- /dev/null
+++ b/test_data/lbp_5x5_standard_golden.bmp
Binary files differ
diff --git a/test_data/lbp_5x5_uniform.bmp b/test_data/lbp_5x5_uniform.bmp
new file mode 100644
index 0000000..dfc0713
--- /dev/null
+++ b/test_data/lbp_5x5_uniform.bmp
Binary files differ
diff --git a/test_data/lbp_5x5_uniform_golden.bmp b/test_data/lbp_5x5_uniform_golden.bmp
new file mode 100644
index 0000000..9918a7f
--- /dev/null
+++ b/test_data/lbp_5x5_uniform_golden.bmp
Binary files differ
diff --git a/test_data/lena.bmp b/test_data/lena.bmp
new file mode 100644
index 0000000..dfc0713
--- /dev/null
+++ b/test_data/lena.bmp
Binary files differ
diff --git a/test_data/lena_gray.bmp b/test_data/lena_gray.bmp
new file mode 100644
index 0000000..e7ee0bd
--- /dev/null
+++ b/test_data/lena_gray.bmp
Binary files differ
diff --git a/test_data/lena_gray_source.bmp b/test_data/lena_gray_source.bmp
new file mode 100644
index 0000000..d63ee98
--- /dev/null
+++ b/test_data/lena_gray_source.bmp
Binary files differ
diff --git a/test_data/lena_gray_template.bmp b/test_data/lena_gray_template.bmp
new file mode 100644
index 0000000..4e49e53
--- /dev/null
+++ b/test_data/lena_gray_template.bmp
Binary files differ
diff --git a/test_data/nms_1_mask.bmp b/test_data/nms_1_mask.bmp
new file mode 100644
index 0000000..db2ed23
--- /dev/null
+++ b/test_data/nms_1_mask.bmp
Binary files differ
diff --git a/test_data/nms_1_nomask.bmp b/test_data/nms_1_nomask.bmp
new file mode 100644
index 0000000..db2ed23
--- /dev/null
+++ b/test_data/nms_1_nomask.bmp
Binary files differ
diff --git a/test_data/nms_3_mask.bmp b/test_data/nms_3_mask.bmp
new file mode 100644
index 0000000..af1017c
--- /dev/null
+++ b/test_data/nms_3_mask.bmp
Binary files differ
diff --git a/test_data/nms_3_nomask.bmp b/test_data/nms_3_nomask.bmp
new file mode 100644
index 0000000..b581424
--- /dev/null
+++ b/test_data/nms_3_nomask.bmp
Binary files differ
diff --git a/test_data/nms_5_mask.bmp b/test_data/nms_5_mask.bmp
new file mode 100644
index 0000000..1ac37e0
--- /dev/null
+++ b/test_data/nms_5_mask.bmp
Binary files differ
diff --git a/test_data/nms_5_nomask.bmp b/test_data/nms_5_nomask.bmp
new file mode 100644
index 0000000..97aaf41
--- /dev/null
+++ b/test_data/nms_5_nomask.bmp
Binary files differ
diff --git a/test_data/optflow_00.bmp b/test_data/optflow_00.bmp
new file mode 100644
index 0000000..4a3c118
--- /dev/null
+++ b/test_data/optflow_00.bmp
Binary files differ
diff --git a/test_data/optflow_01.bmp b/test_data/optflow_01.bmp
new file mode 100644
index 0000000..ac6465d
--- /dev/null
+++ b/test_data/optflow_01.bmp
Binary files differ
diff --git a/test_data/optflow_pyrlk_5x5.txt b/test_data/optflow_pyrlk_5x5.txt
new file mode 100644
index 0000000..640325c
--- /dev/null
+++ b/test_data/optflow_pyrlk_5x5.txt
@@ -0,0 +1,78 @@
+0 1 313 109 313.032 111.401
+1 1 543 249 545.32 251.698
+2 1 542 263 544.441 266.003
+3 1 94 292 91.9581 297.779
+4 1 286 108 286.251 110.515
+5 1 416 108 416.46 109.742
+6 1 405 110 405.382 111.934
+7 1 314 97 313.839 99.2097
+8 1 214 224 213.687 227.174
+9 1 316 69 316.024 71.2609
+10 1 195 104 194.336 106.973
+11 1 330 71 330.221 73.137
+12 1 282 97 282.285 99.4265
+13 1 95 279 91.484 283.506
+14 1 309 131 301.938 154.45
+15 1 323 31 323.048 33.0555
+16 1 282 118 282.144 120.215
+17 1 292 135 292.057 137.31
+18 1 261 30 260.825 32.1147
+19 1 204 140 203.922 142.535
+20 1 321 42 320.737 44.2661
+21 1 91 303 88.834 309.609
+22 1 213 114 212.709 117.01
+23 1 344 118 344.196 119.928
+24 1 400 215 400.804 217.089
+25 0 3 1 -6.45256 0.122573
+26 1 610 68 613.467 68.8004
+27 1 42 98 37.9504 101.866
+28 1 296 97 288.657 99.4534
+29 1 452 171 453.277 172.964
+30 1 356 126 356.397 128.385
+31 1 264 41 263.767 43.514
+32 1 103 287 100.695 291.266
+33 1 529 380 531.121 383.816
+34 1 216 313 215.784 317.034
+35 1 415 313 415.91 315.798
+36 1 601 122 604.147 123.874
+37 1 396 263 396.75 265.472
+38 1 231 297 230.715 300.565
+39 1 543 90 545.044 91.4993
+40 1 411 262 411.633 264.405
+41 1 211 234 211.001 237.42
+42 1 432 320 433.307 323.053
+43 1 61 103 57.2974 106.348
+44 1 96 49 93.5184 51.8382
+45 1 600 140 603.726 140.678
+46 1 424 189 425.08 191.609
+47 1 404 140 404.276 141.923
+48 1 393 181 393.487 183.156
+49 1 109 465 106.968 471.651
+50 1 413 229 413.986 231.485
+51 1 414 129 414.945 131.156
+52 0 3 117 -14.6359 88.1344
+53 1 411 296 411.923 298.779
+54 1 51 104 47.3555 107.512
+55 1 575 127 578.102 128.435
+56 1 565 132 567.403 133.532
+57 1 398 152 398.539 154.128
+58 1 236 91 235.875 93.7707
+59 1 265 126 264.931 128.575
+60 1 593 444 596.051 448.6
+61 1 300 43 298.88 45.482
+62 1 470 327 471.25 329.929
+63 1 394 224 394.691 226.253
+64 1 390 300 390.479 302.593
+65 1 416 118 416.487 120.228
+66 0 111 478 107.509 507.57
+67 1 533 395 535.042 398.974
+68 1 69 291 66.039 296.676
+69 1 137 441 142.957 434.765
+70 1 587 395 589.368 400.73
+71 1 130 450 138.035 440.928
+72 1 292 121 291.225 123.29
+73 1 586 415 589.721 418.291
+74 1 3 19 2.97561 22.8008
+75 1 282 296 282.147 298.63
+76 1 295 300 295.125 302.91
+77 1 399 125 399.543 126.975
diff --git a/test_data/optflow_pyrlk_9x9.txt b/test_data/optflow_pyrlk_9x9.txt
new file mode 100644
index 0000000..2d44a6d
--- /dev/null
+++ b/test_data/optflow_pyrlk_9x9.txt
@@ -0,0 +1,78 @@
+0 1 313 109 313.036 111.415
+1 1 543 249 545.367 251.603
+2 1 542 263 544.49 266.008
+3 1 94 292 91.7733 297.536
+4 1 286 108 286.217 110.485
+5 1 416 108 416.567 109.881
+6 1 405 110 405.358 111.958
+7 1 314 97 313.841 99.2737
+8 1 214 224 213.687 227.128
+9 1 316 69 316.168 71.3147
+10 1 195 104 194.35 106.979
+11 1 330 71 330.129 73.2004
+12 1 282 97 282.199 99.4546
+13 1 95 279 91.791 283.788
+14 1 309 131 309.055 133.366
+15 1 323 31 323.066 33.039
+16 1 282 118 282.169 120.217
+17 1 292 135 292.067 137.354
+18 1 261 30 260.772 32.096
+19 1 204 140 203.905 142.604
+20 1 321 42 320.815 44.254
+21 1 91 303 88.6598 308.415
+22 1 213 114 212.677 117.02
+23 1 344 118 344.222 119.915
+24 1 400 215 400.811 217.109
+25 0 3 1 -20.3726 -2.34236
+26 1 610 68 613.473 68.7748
+27 1 42 98 38.1974 101.465
+28 1 296 97 296.176 99.436
+29 1 452 171 453.272 172.972
+30 1 356 126 356.446 128.387
+31 1 264 41 263.668 43.4207
+32 1 103 287 100.502 291.884
+33 1 529 380 531.073 383.908
+34 1 216 313 215.715 316.77
+35 1 415 313 415.87 315.604
+36 1 601 122 604.195 123.87
+37 1 396 263 396.696 265.46
+38 1 231 297 230.658 300.588
+39 1 543 90 545.096 91.4825
+40 1 411 262 411.775 264.391
+41 1 211 234 210.976 237.395
+42 1 432 320 433.263 323.014
+43 1 61 103 57.6827 106.133
+44 1 96 49 93.4964 51.8366
+45 1 600 140 603.595 140.637
+46 1 424 189 425.132 191.739
+47 1 404 140 404.25 141.91
+48 1 393 181 393.482 183.174
+49 1 109 465 106.626 471.273
+50 1 413 229 413.661 231.255
+51 1 414 129 414.927 131.137
+52 1 3 117 3.51124 61.513
+53 1 411 296 411.891 298.78
+54 1 51 104 47.2444 107.713
+55 1 575 127 578.269 128.582
+56 1 565 132 567.463 133.638
+57 1 398 152 398.376 154.117
+58 1 236 91 235.903 93.7969
+59 1 265 126 264.883 128.544
+60 1 593 444 595.774 448.26
+61 1 300 43 298.703 45.4567
+62 1 470 327 471.114 329.868
+63 1 394 224 394.734 226.282
+64 1 390 300 390.345 302.63
+65 1 416 118 416.555 120.106
+66 1 111 478 112.231 478.451
+67 1 533 395 534.951 398.916
+68 1 69 291 65.8249 296.407
+69 1 137 441 132.863 449.562
+70 1 587 395 589.639 400.794
+71 1 130 450 137.527 441.656
+72 1 292 121 291.754 123.258
+73 1 586 415 589.674 418.265
+74 1 3 19 2.98344 22.8211
+75 1 282 296 281.978 298.698
+76 1 295 300 295.053 302.907
+77 1 399 125 399.49 126.872
diff --git a/test_data_generator/CMakeLists.txt b/test_data_generator/CMakeLists.txt
new file mode 100644
index 0000000..7cd20c4
--- /dev/null
+++ b/test_data_generator/CMakeLists.txt
@@ -0,0 +1,61 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+cmake_minimum_required(VERSION 2.8.12)
+
+set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
+
+project(test_data_generator)
+
+if(CMAKE_COMPILER_IS_GNUCC)
+  set(CMAKE_C_FLAGS "-std=c99 ${CMAKE_C_FLAGS}")
+endif()
+#TODO: enable C99 features for non-gnu platforms (MSVC - ???)
+
+if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode)
+  option(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" ON)
+endif()
+
+# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
+if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
+  message(STATUS "Build type is not specified, use: Release")
+  set(CMAKE_BUILD_TYPE "Release" CACHE INTERNAL "" FORCE)
+endif()
+
+# DEBUG/NDEBUG preprocessor definition
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+  add_definitions(-DDEBUG)
+else()
+  add_definitions(-DNDEBUG)
+endif()
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+
+
+option(BUILD_HC_TEST_DATA_GENERATOR "Build generator for test data for Harris Corners tests" OFF)
+
+if(BUILD_HC_TEST_DATA_GENERATOR)
+  # Harris Corners test data generator needs OpenCV 2.4.7 with patch
+  add_subdirectory(gen_harris_corners)
+else()
+  # these test data generators needs clean OpenCV 2.4.7
+  add_subdirectory(gen_optflow_pyrlk)
+  add_subdirectory(gen_canny)
+endif()
+
diff --git a/test_data_generator/OpenCV_CMake.log b/test_data_generator/OpenCV_CMake.log
new file mode 100644
index 0000000..707bac3
--- /dev/null
+++ b/test_data_generator/OpenCV_CMake.log
@@ -0,0 +1,102 @@
+
+General configuration for OpenCV 2.4.7 =====================================
+  Version control:               2.4.7
+
+  Platform:
+    Host:                        Linux 3.13.11-100.fc19.x86_64 x86_64
+    CMake:                       2.8.12.2
+    CMake generator:             Unix Makefiles
+    CMake build tool:            /usr/bin/gmake
+    Configuration:               Release
+
+  C/C++:
+    Built as dynamic libs?:      YES
+    C++ Compiler:                /usr/lib64/ccache/c++  (ver 4.8.3)
+    C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -O3 -DNDEBUG  -DNDEBUG
+    C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG -ggdb3
+    C Compiler:                  /usr/lib64/ccache/cc
+    C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -O3 -DNDEBUG  -DNDEBUG
+    C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG -ggdb3
+    Linker flags (Release):      
+    Linker flags (Debug):        
+    Precompiled headers:         YES
+
+  OpenCV modules:
+    To be built:                 core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu ocl nonfree contrib java python stitching superres ts videostab
+    Disabled:                    world
+    Disabled by dependency:      -
+    Unavailable:                 androidcamera
+
+  GUI: 
+    QT:                          NO
+    GTK+ 2.x:                    YES (ver 2.24.22)
+    GThread :                    YES (ver 2.36.4)
+    GtkGlExt:                    NO
+    OpenGL support:              NO
+
+  Media I/O: 
+    ZLib:                        /lib64/libz.so (ver 1.2.7)
+    JPEG:                        /lib64/libjpeg.so (ver )
+    PNG:                         /lib64/libpng.so (ver 1.5.13)
+    TIFF:                        /lib64/libtiff.so (ver 42 - 4.0.3)
+    JPEG 2000:                   build (ver 1.900.1)
+    OpenEXR:                     build (ver 1.7.1)
+
+  Video I/O:
+    DC1394 1.x:                  NO
+    DC1394 2.x:                  NO
+    FFMPEG:                      YES
+      codec:                     YES (ver 54.92.100)
+      format:                    YES (ver 54.63.104)
+      util:                      YES (ver 52.18.100)
+      swscale:                   YES (ver 2.2.100)
+      gentoo-style:              YES
+    GStreamer:                   NO
+    OpenNI:                      NO
+    OpenNI PrimeSensor Modules:  NO
+    PvAPI:                       NO
+    GigEVisionSDK:               NO
+    UniCap:                      NO
+    UniCap ucil:                 NO
+    V4L/V4L2:                    NO/YES
+    XIMEA:                       NO
+    Xine:                        NO
+
+  Other third-party libraries:
+    Use IPP:                     NO
+    Use Eigen:                   NO
+    Use TBB:                     NO
+    Use OpenMP:                  NO
+    Use GCD                      NO
+    Use Concurrency              NO
+    Use C=:                      NO
+    Use Cuda:                    NO
+    Use OpenCL:                  YES
+
+  OpenCL:
+    Version:                     dynamic
+    Include path:                /home/alalek/projects/opencv_247/3rdparty/include/opencl/1.2 /opt/clAmdFft-1.10.321/include /opt/clAmdBlas-1.10.321/include
+    Use AMD FFT:                 YES
+    Use AMD BLAS:                YES
+
+  Python:
+    Interpreter:                 /usr/bin/python2 (ver 2.7.5)
+    Libraries:                   /lib64/libpython2.7.so (ver 2.7.5)
+    numpy:                       /usr/lib64/python2.7/site-packages/numpy/core/include (ver 1.7.2)
+    packages path:               lib/python2.7/site-packages
+
+  Java:
+    ant:                         /bin/ant (ver 1.8.4)
+    JNI:                         /usr/lib/jvm/java/include /usr/lib/jvm/java/include/linux /usr/lib/jvm/java/include
+    Java tests:                  YES
+
+  Tests and samples:
+    Tests:                       YES
+    Performance tests:           YES
+    C/C++ Examples:              NO
+
+  Install path:                  /usr/local
+
+  cvconfig.h is in:              /home/alalek/projects/opencv_build/opencv_247_release
+-----------------------------------------------------------------
+
diff --git a/test_data_generator/README b/test_data_generator/README
new file mode 100644
index 0000000..2c28c6e
--- /dev/null
+++ b/test_data_generator/README
@@ -0,0 +1,52 @@
+The OpenVX conformance tests data generators README
+===================================================
+
+OpenCV 2.4.7 binaries are required to build and run the test data generators.
+
+A patched version of OpenCV 2.4.7 (for the HarrisCorners function) was used for
+test data generation.  To regenerate the test data, please use either the
+patched version of OpenCV from Khronos located at:
+
+  https://www.khronos.org/members/login/groups/Vision/Conformance%20tests/opencv_247_hc_patch.zip
+
+or get a standard release of OpenCV 2.4.7 and apply the patch for the
+HarrisCorners function.  This patch is located in the HarrisCorners generator
+sub-folder.  Apply the patch via the command "patch -p1 < path".
+
+Use the "-DBUILD_HC_TEST_DATA_GENERATOR=ON" CMake option to build the test data
+generators.
+
+Use the "-DOpenCV_DIR=<path to OpenCV binaries>" CMake option to specify the
+location of your OpenCV 2.4.7 binaries.
+
+We used this configuration to generate reference output results:
+- CPU: i5-2500
+- OS: Linux 64-bit (Fedora 19)
+- Compiler: GCC 4.8.3
+- CMake 2.8.12.2
+
+OpenCV_CMake.log file contains CMake log with configuration information.
+
+
+gen_canny
+---------
+
+Generator for Canny test.
+
+Run the executable from the "test_data" directory.
+
+
+gen_harris_corners
+------------------
+
+Generator for Harris Corners test.
+
+Run the executable from the "test_data" directory.
+
+
+gen_optflow_pyrlk
+-----------------
+
+Generator for the Optical Flow PyrLK test.
+
+Run the executable from the "test_data" directory.
diff --git a/test_data_generator/gen_canny/CMakeLists.txt b/test_data_generator/gen_canny/CMakeLists.txt
new file mode 100644
index 0000000..18cf722
--- /dev/null
+++ b/test_data_generator/gen_canny/CMakeLists.txt
@@ -0,0 +1,31 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+project(gen_canny C CXX)
+set(target gen_canny)
+
+find_package(OpenCV 2.4.7 EXACT)
+
+file(GLOB SOURCES "./*.c" "./*.cxx" "./*.cpp")
+file(GLOB HEADERS "./*.h" "./*.hpp")
+
+include_directories(${OpenCV_INCLUDE_DIRS})
+include_directories(${CMAKE_CURRENT_LIST_DIR})
+
+add_executable(${target} ${SOURCES} ${HEADERS})
+target_link_libraries(${target} opencv_video opencv_highgui opencv_imgproc)
diff --git a/test_data_generator/gen_canny/gen_canny.cpp b/test_data_generator/gen_canny/gen_canny.cpp
new file mode 100644
index 0000000..f0317e2
--- /dev/null
+++ b/test_data_generator/gen_canny/gen_canny.cpp
@@ -0,0 +1,80 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+
+#include "opencv2/imgproc/imgproc.hpp"
+#include "opencv2/highgui/highgui.hpp"
+
+using namespace cv;
+
+void generate_reference_result(const char* src_name, int winsz, int low_thresh, int high_thresh, bool use_l2)
+{
+    Mat src = imread(src_name, IMREAD_GRAYSCALE);
+    Mat dst;
+    if (src.empty())
+    {
+        printf("failed to open %s\n", src_name);
+        exit(-1);
+    }
+
+    Canny(src, dst, low_thresh, high_thresh, winsz, use_l2);
+
+    //2-pixel borders:
+    rectangle(dst, Point(0,0), Point(dst.cols-1, dst.rows-1), 255, 2, 4, 0);
+
+    char buff[1024];
+    sprintf(buff, "canny_%dx%d_%d_%d_%s_%s", winsz, winsz, low_thresh, high_thresh, use_l2 ? "L2" : "L1", src_name);
+    imwrite(buff, dst);
+}
+
+int main(int, char**)
+{
+    generate_reference_result("lena_gray.bmp", 3, 70,   71, false);
+    generate_reference_result("lena_gray.bmp", 3, 70,   71, true);
+    generate_reference_result("lena_gray.bmp", 3, 90,  130, false);
+    generate_reference_result("lena_gray.bmp", 3, 90,  130, true);
+    generate_reference_result("lena_gray.bmp", 3, 100, 120, false);
+    generate_reference_result("lena_gray.bmp", 3, 100, 120, true);
+    generate_reference_result("lena_gray.bmp", 3, 120, 120, false);
+    generate_reference_result("lena_gray.bmp", 3, 150, 220, false);
+    generate_reference_result("lena_gray.bmp", 3, 150, 220, true);
+    generate_reference_result("lena_gray.bmp", 5, 100, 100, false);
+    generate_reference_result("lena_gray.bmp", 5, 100, 120, false);
+    generate_reference_result("lena_gray.bmp", 5, 100, 120, true);
+    generate_reference_result("lena_gray.bmp", 7, 80,   80, false);
+    generate_reference_result("lena_gray.bmp", 7, 100, 120, false);
+    generate_reference_result("lena_gray.bmp", 7, 100, 120, true);
+    generate_reference_result("blurred_lena_gray.bmp", 7, 100, 120, true);
+    generate_reference_result("blurred_lena_gray.bmp", 5, 100, 120, false);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 150, 220, false);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 70,   71, false);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 70,   71, true);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 90,  125, false);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 90,  130, true);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 100, 120, false);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 100, 120, true);
+    generate_reference_result("blurred_lena_gray.bmp", 3, 150, 220, true);
+    generate_reference_result("blurred_lena_gray.bmp", 5, 100, 120, true);
+    generate_reference_result("blurred_lena_gray.bmp", 7, 100, 120, false);
+
+    generate_reference_result("lena_gray.bmp", 5, 1200, 1440, false);
+    generate_reference_result("lena_gray.bmp", 5, 1200, 1440, true);
+    generate_reference_result("lena_gray.bmp", 7, 16000, 19200, false);
+    generate_reference_result("lena_gray.bmp", 7, 16000, 19200, true);
+    return 0;
+}
diff --git a/test_data_generator/gen_harris_corners/CMakeLists.txt b/test_data_generator/gen_harris_corners/CMakeLists.txt
new file mode 100644
index 0000000..fee8e02
--- /dev/null
+++ b/test_data_generator/gen_harris_corners/CMakeLists.txt
@@ -0,0 +1,31 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+project(gen_harris_corners C CXX)
+set(target gen_harris_corners)
+
+find_package(OpenCV 2.4.7 EXACT)
+
+file(GLOB SOURCES "./*.c" "./*.cxx" "./*.cpp")
+file(GLOB HEADERS "./*.h" "./*.hpp")
+
+include_directories(${OpenCV_INCLUDE_DIRS})
+include_directories(${CMAKE_CURRENT_LIST_DIR})
+
+add_executable(${target} ${SOURCES} ${HEADERS})
+target_link_libraries(${target} opencv_core opencv_highgui opencv_imgproc)
diff --git a/test_data_generator/gen_harris_corners/gen_harris_corners.cpp b/test_data_generator/gen_harris_corners/gen_harris_corners.cpp
new file mode 100644
index 0000000..082fe7c
--- /dev/null
+++ b/test_data_generator/gen_harris_corners/gen_harris_corners.cpp
@@ -0,0 +1,129 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include <iostream>
+#include <fstream>
+
+#include <opencv2/core/core.hpp>
+#include <opencv2/imgproc/imgproc.hpp>
+#include <opencv2/highgui/highgui.hpp>
+
+struct Params
+{
+    double minDistance;
+    double k;
+    int ksize;
+    int blockSize;
+};
+
+static const Params g_cparams[] =
+{
+    { 0.0, 0.04, 3, 3 }, { 0.0, 0.04, 3, 5 }, { 0.0, 0.04, 3, 7 },
+    { 0.0, 0.04, 5, 3 }, { 0.0, 0.04, 5, 5 }, { 0.0, 0.04, 5, 7 },
+    { 0.0, 0.04, 7, 3 }, { 0.0, 0.04, 7, 5 }, { 0.0, 0.04, 7, 7 },
+
+    { 0.0, 0.10, 3, 3 }, { 0.0, 0.10, 3, 5 }, { 0.0, 0.10, 3, 7 },
+    { 0.0, 0.10, 5, 3 }, { 0.0, 0.10, 5, 5 }, { 0.0, 0.10, 5, 7 },
+    { 0.0, 0.10, 7, 3 }, { 0.0, 0.10, 7, 5 }, { 0.0, 0.10, 7, 7 },
+
+    { 0.0, 0.15, 3, 3 }, { 0.0, 0.15, 3, 5 }, { 0.0, 0.15, 3, 7 },
+    { 0.0, 0.15, 5, 3 }, { 0.0, 0.15, 5, 5 }, { 0.0, 0.15, 5, 7 },
+    { 0.0, 0.15, 7, 3 }, { 0.0, 0.15, 7, 5 }, { 0.0, 0.15, 7, 7 },
+
+
+    {3.0, 0.04, 3, 3}, {3.0, 0.04, 3, 5}, {3.0, 0.04, 3, 7},
+    {3.0, 0.04, 5, 3}, {3.0, 0.04, 5, 5}, {3.0, 0.04, 5, 7},
+    {3.0, 0.04, 7, 3}, {3.0, 0.04, 7, 5}, {3.0, 0.04, 7, 7},
+
+    {3.0, 0.10, 3, 3}, {3.0, 0.10, 3, 5}, {3.0, 0.10, 3, 7},
+    {3.0, 0.10, 5, 3}, {3.0, 0.10, 5, 5}, {3.0, 0.10, 5, 7},
+    {3.0, 0.10, 7, 3}, {3.0, 0.10, 7, 5}, {3.0, 0.10, 7, 7},
+
+    {3.0, 0.15, 3, 3}, {3.0, 0.15, 3, 5}, {3.0, 0.15, 3, 7},
+    {3.0, 0.15, 5, 3}, {3.0, 0.15, 5, 5}, {3.0, 0.15, 5, 7},
+    {3.0, 0.15, 7, 3}, {3.0, 0.15, 7, 5}, {3.0, 0.15, 7, 7},
+
+
+    {5.0, 0.04, 3, 3}, {5.0, 0.04, 3, 5}, {5.0, 0.04, 3, 7},
+    {5.0, 0.04, 5, 3}, {5.0, 0.04, 5, 5}, {5.0, 0.04, 5, 7},
+    {5.0, 0.04, 7, 3}, {5.0, 0.04, 7, 5}, {5.0, 0.04, 7, 7},
+
+    {5.0, 0.10, 3, 3}, {5.0, 0.10, 3, 5}, {5.0, 0.10, 3, 7},
+    {5.0, 0.10, 5, 3}, {5.0, 0.10, 5, 5}, {5.0, 0.10, 5, 7},
+    {5.0, 0.10, 7, 3}, {5.0, 0.10, 7, 5}, {5.0, 0.10, 7, 7},
+
+    {5.0, 0.15, 3, 3}, {5.0, 0.15, 3, 5}, {5.0, 0.15, 3, 7},
+    {5.0, 0.15, 5, 3}, {5.0, 0.15, 5, 5}, {5.0, 0.15, 5, 7},
+    {5.0, 0.15, 7, 3}, {5.0, 0.15, 7, 5}, {5.0, 0.15, 7, 7},
+
+
+    { 30.0, 0.04, 3, 3 }, { 30.0, 0.04, 3, 5 }, { 30.0, 0.04, 3, 7 },
+    { 30.0, 0.04, 5, 3 }, { 30.0, 0.04, 5, 5 }, { 30.0, 0.04, 5, 7 },
+    { 30.0, 0.04, 7, 3 }, { 30.0, 0.04, 7, 5 }, { 30.0, 0.04, 7, 7 },
+
+    { 30.0, 0.10, 3, 3 }, { 30.0, 0.10, 3, 5 }, { 30.0, 0.10, 3, 7 },
+    { 30.0, 0.10, 5, 3 }, { 30.0, 0.10, 5, 5 }, { 30.0, 0.10, 5, 7 },
+    { 30.0, 0.10, 7, 3 }, { 30.0, 0.10, 7, 5 }, { 30.0, 0.10, 7, 7 },
+
+    { 30.0, 0.15, 3, 3 }, { 30.0, 0.15, 3, 5 }, { 30.0, 0.15, 3, 7 },
+    { 30.0, 0.15, 5, 3 }, { 30.0, 0.15, 5, 5 }, { 30.0, 0.15, 5, 7 },
+    { 30.0, 0.15, 7, 3 }, { 30.0, 0.15, 7, 5 }, { 30.0, 0.15, 7, 7 },
+};
+
+static void generateHarrisCornerDataSingle(const char * filepath, const char *outprefix, double minDistance, double k, int ksize, int blockSize)
+{
+    const double qualityLevel = 0.05;
+    cv::Mat image = cv::imread(filepath, cv::IMREAD_GRAYSCALE);
+    if (image.empty())
+    {
+        printf("failed to open %s\n", filepath);
+        exit(-1);
+    }
+
+    char outfilename[2048];
+    sprintf(outfilename, "%s_%0.2f_%0.2f_%d_%d.txt", outprefix, minDistance, k, ksize, blockSize);
+    cv::Mat corners;
+    std::ofstream stream(outfilename);
+    cv::goodFeaturesToTrack(image, corners, image.cols * image.rows, qualityLevel, minDistance, cv::noArray(), blockSize, true, k, ksize);
+    float scale = (1 << (ksize - 1)) * blockSize * 255.f;
+    scale = scale * scale * scale * scale;
+    stream << corners.rows << std::endl;
+    for (int i = 0; i < corners.rows; i++)
+    {
+        cv::Point3f *pt = (cv::Point3f *)corners.ptr(i);
+        if ((0 <= pt->x) && (pt->x < image.cols) && (0 <= pt->y) && (pt->y < image.rows))
+            stream << pt->x << " " << pt->y << " " << pt->z * scale << std::endl;
+    }
+}
+
+static void generateHarrisCornerDataSuite(const char * filepath, const char *outprefix)
+{
+    size_t params_count = sizeof(g_cparams) / sizeof(Params);
+    for (size_t i = 0; i < params_count; i++)
+    {
+        generateHarrisCornerDataSingle(filepath, outprefix, g_cparams[i].minDistance, g_cparams[i].k, g_cparams[i].ksize, g_cparams[i].blockSize);
+    }
+}
+
+int main(int argc, char* argv[])
+{
+    generateHarrisCornerDataSuite("harriscorners/hc_fsc.bmp", "harriscorners/hc_fsc");
+    generateHarrisCornerDataSuite("harriscorners/hc_msc.bmp", "harriscorners/hc_msc");
+    return 0;
+}
diff --git a/test_data_generator/gen_harris_corners/opencv_247_patch.patch b/test_data_generator/gen_harris_corners/opencv_247_patch.patch
new file mode 100644
index 0000000..30d3d38
--- /dev/null
+++ b/test_data_generator/gen_harris_corners/opencv_247_patch.patch
@@ -0,0 +1,84 @@
+diff --git a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp
+index 2fcccfe..3e11f9f 100644
+--- a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp
++++ b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp
+@@ -475,7 +475,7 @@ CV_EXPORTS_W void cornerSubPix( InputArray image, InputOutputArray corners,
+ CV_EXPORTS_W void goodFeaturesToTrack( InputArray image, OutputArray corners,
+                                      int maxCorners, double qualityLevel, double minDistance,
+                                      InputArray mask=noArray(), int blockSize=3,
+-                                     bool useHarrisDetector=false, double k=0.04 );
++                                     bool useHarrisDetector=false, double k=0.04, int ksize = 3);
+ 
+ //! finds lines in the black-n-white image using the standard or pyramid Hough transform
+ CV_EXPORTS_W void HoughLines( InputArray image, OutputArray lines,
+diff --git a/modules/imgproc/src/featureselect.cpp b/modules/imgproc/src/featureselect.cpp
+index 827fd40..c018189 100644
+--- a/modules/imgproc/src/featureselect.cpp
++++ b/modules/imgproc/src/featureselect.cpp
+@@ -55,7 +55,7 @@ template<typename T> struct greaterThanPtr
+ void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
+                               int maxCorners, double qualityLevel, double minDistance,
+                               InputArray _mask, int blockSize,
+-                              bool useHarrisDetector, double harrisK )
++                              bool useHarrisDetector, double harrisK, int ksize)
+ {
+     Mat image = _image.getMat(), mask = _mask.getMat();
+ 
+@@ -64,9 +64,9 @@ void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
+ 
+     Mat eig, tmp;
+     if( useHarrisDetector )
+-        cornerHarris( image, eig, blockSize, 3, harrisK );
++        cornerHarris( image, eig, blockSize, ksize, harrisK );
+     else
+-        cornerMinEigenVal( image, eig, blockSize, 3 );
++        cornerMinEigenVal( image, eig, blockSize, ksize );
+ 
+     double maxVal = 0;
+     minMaxLoc( eig, 0, &maxVal, 0, 0, mask );
+@@ -93,7 +93,7 @@ void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
+     }
+ 
+     sort( tmpCorners, greaterThanPtr<float>() );
+-    vector<Point2f> corners;
++    vector<Point3f> corners;
+     size_t i, j, total = tmpCorners.size(), ncorners = 0;
+ 
+     if(minDistance >= 1)
+@@ -163,7 +163,7 @@ void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
+                 //    i,x, y, x_cell, y_cell, (int)minDistance, cell_size,x1,y1,x2,y2, grid_width,grid_height,c);
+                 grid[y_cell*grid_width + x_cell].push_back(Point2f((float)x, (float)y));
+ 
+-                corners.push_back(Point2f((float)x, (float)y));
++                corners.push_back(Point3f((float)x, (float)y, *tmpCorners[i]));
+                 ++ncorners;
+ 
+                 if( maxCorners > 0 && (int)ncorners == maxCorners )
+@@ -179,14 +179,25 @@ void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
+             int y = (int)(ofs / eig.step);
+             int x = (int)((ofs - y*eig.step)/sizeof(float));
+ 
+-            corners.push_back(Point2f((float)x, (float)y));
++            corners.push_back(Point3f((float)x, (float)y, *tmpCorners[i]));
+             ++ncorners;
+             if( maxCorners > 0 && (int)ncorners == maxCorners )
+                 break;
+         }
+     }
+ 
+-    Mat(corners).convertTo(_corners, _corners.fixedType() ? _corners.type() : CV_32F);
++    int rtype = _corners.fixedType() ? _corners.type() : CV_32F;
++    if (2 == CV_MAT_CN(rtype))
++    {
++        vector<Point2f> corners2d;
++        for (vector<Point3f>::iterator it = corners.begin(); it != corners.end(); it++)
++        {
++            corners2d.push_back(Point2f((*it).x, (*it).y));
++        }
++        Mat(corners2d).convertTo(_corners, rtype);
++    }
++    else
++        Mat(corners).convertTo(_corners, rtype);
+ 
+     /*
+     for( i = 0; i < total; i++ )
diff --git a/test_data_generator/gen_optflow_pyrlk/CMakeLists.txt b/test_data_generator/gen_optflow_pyrlk/CMakeLists.txt
new file mode 100644
index 0000000..45bd589
--- /dev/null
+++ b/test_data_generator/gen_optflow_pyrlk/CMakeLists.txt
@@ -0,0 +1,31 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+project(gen_optflow_pyrlk C CXX)
+set(target gen_optflow_pyrlk)
+
+find_package(OpenCV 2.4.7 EXACT)
+
+file(GLOB SOURCES "./*.c" "./*.cxx")
+file(GLOB HEADERS "./*.h" "./*.hpp")
+
+include_directories(${OpenCV_INCLUDE_DIRS})
+include_directories(${CMAKE_CURRENT_LIST_DIR})
+
+add_executable(${target} ${SOURCES} ${HEADERS})
+target_link_libraries(${target} opencv_video opencv_highgui opencv_imgproc)
diff --git a/test_data_generator/gen_optflow_pyrlk/gen_optflow_pyrlk.cxx b/test_data_generator/gen_optflow_pyrlk/gen_optflow_pyrlk.cxx
new file mode 100644
index 0000000..fea29dc
--- /dev/null
+++ b/test_data_generator/gen_optflow_pyrlk/gen_optflow_pyrlk.cxx
@@ -0,0 +1,109 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "opencv2/video/tracking.hpp"
+#include "opencv2/imgproc/imgproc.hpp"
+#include "opencv2/highgui/highgui.hpp"
+
+#include <iostream>
+#include <fstream>
+#include <ctype.h>
+
+using namespace cv;
+using namespace std;
+
+const bool showImages = false;
+const char* windowName = "LK";
+
+const int MAX_COUNT = 100;
+
+static void help()
+{
+    cout <<
+            "\n"
+            "This is a test data generator for Lukas-Kanade optical flow test,\n"
+            "Using OpenCV version " CV_VERSION "\n"
+            "Run generator from \"test_data\" directory\n";
+}
+
+void generate_data(Size winSize, String image0, String image1, String suffix = String(""))
+{
+    cout << winSize << endl;
+
+    TermCriteria termcrit(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03);
+
+    Mat frames[2] = {
+            imread(image0, CV_LOAD_IMAGE_GRAYSCALE),
+            imread(image1, CV_LOAD_IMAGE_GRAYSCALE)
+    };
+
+    ofstream res;
+    res.open(cv::format("optflow_pyrlk%s_%dx%d.txt", suffix.c_str(), winSize.width, winSize.height).c_str());
+
+    if (showImages)
+        namedWindow(windowName, 1);
+
+    Mat prevImage, image, imageShow;
+    vector<Point2f> points[2];
+
+    frames[0].copyTo(image);
+
+    image.copyTo(imageShow);
+    // initialization
+    goodFeaturesToTrack(image, points[0], MAX_COUNT, 0.01, 10, Mat());
+    if (showImages)
+    {
+        for (size_t i = 0; i < points[0].size(); i++)
+        {
+            circle(imageShow, points[0][i], 3, Scalar(255, 255, 255), -1, 8);
+        }
+        imshow(windowName, imageShow);
+        waitKey(0);
+    }
+
+    cv::swap(prevImage, image);
+    frames[1].copyTo(image);
+
+    vector<uchar> status;
+    vector<float> err;
+    calcOpticalFlowPyrLK(prevImage, image, points[0], points[1], status, err, winSize, 3, termcrit, 0, 0.001);
+    size_t i, k;
+    for (i = k = 0; i < points[1].size(); i++)
+    {
+        res << i << " " << (int)status[i] << " " << points[0][i].x << " " << points[0][i].y << " " << points[1][i].x << " " << points[1][i].y << endl;
+        if (showImages)
+            circle(imageShow, points[0][i], 3, Scalar(255, 255, 255), -1, 8);
+
+        if (!status[i])
+            continue;
+
+        if (showImages)
+            circle(imageShow, points[1][i], 3, Scalar(0, 0, 0), -1, 8);
+    }
+    if (showImages)
+    {
+        imshow(windowName, imageShow);
+        waitKey(0);
+    }
+}
+
+int main(int argc, char** argv)
+{
+    help();
+    generate_data(Size(5, 5), "optflow_00.bmp", "optflow_01.bmp");
+    generate_data(Size(9, 9), "optflow_00.bmp", "optflow_01.bmp");
+}
diff --git a/test_engine/CMakeLists.txt b/test_engine/CMakeLists.txt
new file mode 100644
index 0000000..5ab87db
--- /dev/null
+++ b/test_engine/CMakeLists.txt
@@ -0,0 +1,32 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+project(test_engine C)
+
+set(target test_engine)
+file(GLOB SOURCES "./*.c")
+file(GLOB HEADERS "./*.h")
+
+add_library(${target} STATIC ${SOURCES} ${HEADERS})
+target_include_directories(${target} PUBLIC ${CMAKE_SOURCE_DIR})
+target_link_libraries(${target} PUBLIC openvx-interface)
+add_dependencies(${target} generate_version_file)
+
+if (MSVC)
+  target_compile_definitions(${target} PUBLIC _CRT_SECURE_NO_WARNINGS)
+endif()
diff --git a/test_engine/concerto.mak b/test_engine/concerto.mak
new file mode 100644
index 0000000..bc9fa50
--- /dev/null
+++ b/test_engine/concerto.mak
@@ -0,0 +1,25 @@
+# 
+
+# Copyright (c) 2012-2017 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+include $(PRELUDE)
+TARGET      := vx_conformance_engine
+TARGETTYPE  := library
+IDIRS       += $(HOST_ROOT)/include
+CSOURCES    := $(call all-c-files)
+SHARED_LIBS := openvx vxu
+include $(FINALE)
\ No newline at end of file
diff --git a/test_engine/test.h b/test_engine/test.h
new file mode 100644
index 0000000..25f09f2
--- /dev/null
+++ b/test_engine/test.h
@@ -0,0 +1,370 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __VX_CT_TEST_H__
+#define __VX_CT_TEST_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+// calc number of arguments - from 1 to 32
+#define CT_EXPAND(x) x
+#define CT_EXPANDN(...) __VA_ARGS__
+#define CT_VAARG_NUMS(_32, _31, _30, _29, _28, _27, _26, _25, _24, _23, _22, _21, _20, _19, _18, _17, _16, _15, _14, _13, _12, _11, _10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0, ...) _0
+#define CT_VAARG_NUM(...) CT_EXPAND(CT_VAARG_NUMS(__VA_ARGS__, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
+
+// apply macro for every argument
+#define CT_FOREACH0(OP, ...) CT_EXPAND(OP(__VA_ARGS__))
+#define CT_FOREACH1(OP, op_args, x) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x))
+#define CT_FOREACH2(OP, op_args, x, y) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)), CT_FOREACH0(OP, y, CT_EXPANDN op_args (y))
+#define CT_FOREACH3(OP, op_args, x, y, z) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)), CT_FOREACH0(OP, y, CT_EXPANDN op_args (y)), CT_FOREACH0(OP, z, CT_EXPANDN op_args (z))
+#define CT_FOREACH4(OP, op_args, x, y, z, p) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)), CT_FOREACH0(OP, y, CT_EXPANDN op_args (y)), CT_FOREACH0(OP, z, CT_EXPANDN op_args (z)), CT_FOREACH0(OP, p, CT_EXPANDN op_args (p))
+#define CT_FOREACH5(OP, op_args, x, y, ...)        CT_FOREACH2(OP,op_args,x,y),     CT_EXPAND(CT_FOREACH3(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH6(OP, op_args, x, y, z, ...)     CT_FOREACH3(OP,op_args,x,y,z),   CT_EXPAND(CT_FOREACH3(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH7(OP, op_args, x, y, z, p, ...)  CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH3(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH8(OP, op_args, x, y, z, p, ...)  CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH4(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH9(OP, op_args, x, y, z, p, ...)  CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH5(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH10(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH6(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH11(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH7(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH12(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH8(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH13(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH9(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH14(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH10(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH15(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH11(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH16(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH12(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH17(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH13(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH18(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH14(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH19(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH15(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH20(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH16(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH21(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH17(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH22(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH18(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH23(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH19(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH24(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH20(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH25(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH21(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH26(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH22(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH27(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH23(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH28(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH24(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH29(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH25(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH30(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH26(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH31(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH27(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH32(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH28(OP,op_args,__VA_ARGS__))
+#define CT_FOREACH_HELPER2(OP, op_args, qty, ...) CT_EXPAND(CT_FOREACH##qty(OP, op_args, __VA_ARGS__))
+#define CT_FOREACH_HELPER(OP, op_args, qty, ...)  CT_FOREACH_HELPER2(OP, op_args, qty, __VA_ARGS__)
+
+/*
+    CT_FOREACH - appy macro with single arguments to every element in a list
+    Example:
+#define SQR(x, ...) ((x)*(x))
+int squares[] = {CT_FOREACH(SQR, 0, 1, 2, 3, 4, 5)};
+*/
+#define CT_FOREACH(OP, ...) CT_FOREACH_HELPER(OP, , CT_VAARG_NUM(__VA_ARGS__), __VA_ARGS__)
+/*
+    CT_FOREACHN - appy macro with multiple arguments to every element in a list
+    Example (comma after 10 is required):
+#define MULBYN(x, n, ...) ((n)*(x))
+int squares[] = {CT_FOREACHN(MULBYN, (10,), 0, 1, 2, 3, 4, 5)};
+*/
+#define CT_FOREACHN(OP, op_args_with_comma, ...) CT_FOREACH_HELPER(OP, op_args_with_comma, CT_VAARG_NUM(__VA_ARGS__), __VA_ARGS__)
+
+#ifndef NULL
+#define NULL ((void*)0)
+#endif
+#ifndef M_PI
+#define M_PI 3.1415926535897932384626433832795
+#endif
+#define M_PIF   (vx_float32)M_PI
+
+#include "test_utils.h"
+#include "test_image.h"
+
+typedef struct CT_TestCaseEntry* (*CT_RegisterTestCaseFN)();
+
+typedef struct CT_TestEntry* (*CT_TestRegisterFN)();
+typedef void (*CT_TestFn)(void* context_, void* arg_);
+
+struct CT_TestEntry {
+    struct CT_TestEntry*     next_;
+    struct CT_TestCaseEntry* testcase_;
+    CT_TestFn                test_fn_;
+    const char*              name_;
+    void*                    args_;
+    int                      args_count_;
+    int                      arg_size_;
+};
+
+typedef void* (*CT_SetupTestCaseFN)(); // create context
+typedef void (*CT_TeardownTestCaseFN)(void* context); // release context
+
+struct CT_TestCaseEntry {
+    struct CT_TestCaseEntry* next_;
+    const char*              name_;
+    CT_TestRegisterFN*       test_register_fns_;
+    struct CT_TestEntry*     tests_;
+    CT_SetupTestCaseFN       setupFn_;
+    CT_TeardownTestCaseFN    teardownFn_;
+    int                      test_count_;
+};
+
+#define CT_ARRAY_DIM(array) (sizeof(array)/sizeof((array)[0]))
+
+#define CT_MAKE_TEST_FN(fn, testcase, ...) testcase##__##fn
+
+#define CT_TESTCASE(testcase, TypeTestCaseContext, setupTestCaseFn, teardownTestCaseFn)         \
+    typedef TypeTestCaseContext Context_##testcase;                                             \
+    CT_TestRegisterFN testcase##_Tests[];                                                       \
+    struct CT_TestCaseEntry testcase##_TestCase = {                                             \
+            NULL, #testcase, testcase##_Tests, NULL, setupTestCaseFn, teardownTestCaseFn, 0};   \
+    struct CT_TestCaseEntry* testcase##_register() { return &testcase##_TestCase; }
+
+#define CT_TEST(testcase, fn)                                                                   \
+        static void testcase##_##fn##_body(Context_##testcase*, void*);                         \
+        struct CT_TestEntry testcase##_##fn##_entry = {                                         \
+                NULL, NULL, (CT_TestFn)testcase##_##fn##_body, #fn, NULL, 0, 0 };               \
+        struct CT_TestEntry testcase##_##fn##_entry_disabled = {                                \
+                NULL, NULL, (CT_TestFn)testcase##_##fn##_body, "DISABLED_" #fn, NULL, 0, 0 };   \
+        static struct CT_TestEntry* CT_MAKE_TEST_FN(fn, testcase)()                             \
+            { return &testcase##_##fn##_entry; }                                                \
+        static struct CT_TestEntry* CT_MAKE_TEST_FN(DISABLED_##fn, testcase)()                  \
+            { return &testcase##_##fn##_entry_disabled; }                                       \
+        void testcase##_##fn##_body(Context_##testcase* context_, void* nullarg_)
+
+#define CT_TEST_WITH_ARG(testcase, fn, ArgType, ...)                                            \
+        static void testcase##_##fn##_body(Context_##testcase*, ArgType*);                      \
+        static ArgType testcase##_##fn##_args[] = { __VA_ARGS__ };                              \
+        static struct CT_TestEntry testcase##_##fn##_entry = {                                  \
+                NULL, NULL, (CT_TestFn)testcase##_##fn##_body, #fn,                             \
+                testcase##_##fn##_args,                                                         \
+                CT_ARRAY_DIM(testcase##_##fn##_args), sizeof(testcase##_##fn##_args[0])         \
+            };                                                                                  \
+        static struct CT_TestEntry* CT_MAKE_TEST_FN(fn, testcase)()                             \
+            { return &testcase##_##fn##_entry; }                                                \
+        static struct CT_TestEntry testcase##_##fn##_entry_disabled = {                         \
+                NULL, NULL, (CT_TestFn)testcase##_##fn##_body, "DISABLED_" #fn,                 \
+                testcase##_##fn##_args,                                                         \
+                CT_ARRAY_DIM(testcase##_##fn##_args), sizeof(testcase##_##fn##_args[0])         \
+            };                                                                                  \
+        static struct CT_TestEntry* CT_MAKE_TEST_FN(DISABLED_##fn, testcase)()                  \
+            { return &testcase##_##fn##_entry_disabled; }                                       \
+        void testcase##_##fn##_body(Context_##testcase* context_, ArgType* arg_)
+
+#define CT_TESTCASE_TESTS(testcase, ...) CT_TestRegisterFN testcase##_Tests[] = { CT_FOREACHN(CT_MAKE_TEST_FN, (testcase,), __VA_ARGS__), NULL };
+
+#define CT_ARG(...) { __VA_ARGS__ }
+#define ARG_ENUM(val) ARG(#val, val)
+#define DISABLED_ARG_ENUM(val) ARG("DISABLED_" #val, val)
+
+extern char CT_EXTENDED_ARG_BEGIN[];
+extern char CT_EXTENDED_ARG_END[];
+
+#define ARG_EXTENDED_BEGIN() CT_ARG(CT_EXTENDED_ARG_BEGIN,)
+#define ARG_EXTENDED_END() CT_ARG(CT_EXTENDED_ARG_END,)
+
+typedef struct CT_VoidContext_ {
+    int dummy; // nothing, just make MSVC happy
+} CT_VoidContext;
+
+struct CT_GlobalContextBlackBox;
+struct CT_GlobalContext
+{
+    const char*     testname_;
+    uint64_t        seed_;
+    const void*     arg_;
+    void*           user_context_;
+    struct CT_GlobalContextBlackBox* internal_;
+};
+
+struct CT_GlobalContext* CT();
+
+void CT_RecordFailure();
+void CT_RecordFailureAt(const char* message, const char* func, const char* file, const int line);
+void CT_RecordFailureAtFormat(const char* message, const char* func, const char* file, const int line, ...);
+int  CT_HasFailure();
+
+void CT_DumpMessage(const char* message, ...);
+
+typedef void (*CT_ObjectDestructor)(void **);
+typedef enum CT_GCType { CT_GC_ALL=0, CT_GC_OBJECT=1, CT_GC_IMAGE=2 } CT_GCType;
+void CT_RegisterForGarbageCollection(void *object, CT_ObjectDestructor collector, CT_GCType type);
+void CT_CollectGarbage(int type);
+
+#define CT_DO_FAIL /* TODO fail */ return
+#define CT_PASS() return
+
+// TODO: possibly use the trick instead of non-standard ##__VA_ARGS__
+// http://stackoverflow.com/questions/5588855/standard-alternative-to-gccs-va-args-trick/11172679#11172679
+#define CT_FAIL_(ret_error, message, ...)                                                   \
+    do {                                                                                    \
+        CT_RecordFailureAtFormat(message, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \
+        ret_error;                                                                          \
+    } while(0)
+
+#define CT_FAIL_AT_(ret_error, message, func, file, line, ...)                              \
+    do {                                                                                    \
+        CT_RecordFailureAtFormat(message, func, file, line, ##__VA_ARGS__);                 \
+        {ret_error;}                                                                        \
+    } while(0)
+
+#define CT_ASSERT_IMPL(ret_error, expr, exprStr, func, file, line)  \
+    do { if (!!(expr)) { } else { CT_FAIL_AT_(ret_error, "Assertion: %s", func, file, line, exprStr); } } while (0)
+
+#define CT_ADD_FAILURE(message, ...) CT_FAIL_(, message, ##__VA_ARGS__)
+#define CT_FAIL(message, ...) CT_FAIL_(CT_DO_FAIL, message, ##__VA_ARGS__)
+#define CT_FAIL_AT(message, func, file, line, ...) CT_FAIL_AT_(CT_DO_FAIL, message, func, file, line, ##__VA_ARGS__)
+
+#define CT_ASSERT_AT(expr, func, file, line)  CT_ASSERT_IMPL(CT_DO_FAIL, expr, #expr, func, file, line)
+#define CT_EXPECT_AT(expr, func, file, line)  CT_ASSERT_IMPL({}, expr, #expr, func, file, line)
+#define CT_ASSERT_AT_(ret_error, expr, func, file, line) CT_ASSERT_IMPL(ret_error, expr, #expr, func, file, line)
+
+#define CT_ASSERT(expr) CT_ASSERT_IMPL(CT_DO_FAIL, expr, #expr, __FUNCTION__, __FILE__, __LINE__)
+#define CT_EXPECT(expr) CT_ASSERT_IMPL({}, expr, #expr, __FUNCTION__, __FILE__, __LINE__)
+#define CT_ASSERT_(ret_error, expr) CT_ASSERT_IMPL(ret_error, expr, #expr, __FUNCTION__, __FILE__, __LINE__)
+
+#define CT_ASSERT_NO_FAILURE_IMPL(ret_error, statement, message) \
+    do { \
+        int ct_failures_before__ = CT_HasFailure(); \
+        {statement;} \
+        if (ct_failures_before__ < CT_HasFailure()) \
+        { \
+            CT_DumpMessage("FAILED during execution of statement:\n\t%20s:%d:\n\t\t%s", __FILE__, __LINE__, message); \
+            {ret_error;} \
+        } \
+    } while(0)
+#define CT_ASSERT_NO_FAILURE(statement) CT_ASSERT_NO_FAILURE_IMPL(CT_DO_FAIL, statement, #statement)
+#define CT_ASSERT_NO_FAILURE_(ret_error, statement) CT_ASSERT_NO_FAILURE_IMPL(ret_error, statement, #statement)
+
+#define ASSERT_EQ_INT(expected, actual)                                 \
+    do {                                                                \
+        intmax_t s0 = (intmax_t)(expected);                             \
+        intmax_t s1 = (intmax_t)(actual);                               \
+        if (s0 == s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"           \
+                "Actual: %lld != %lld"                                  \
+                , __FUNCTION__, __FILE__, __LINE__,                     \
+                #expected, #actual, (long long)s0, (long long)s1);      \
+            {CT_DO_FAIL;}                                               \
+        }                                                               \
+    }while(0)
+
+#define EXPECT_EQ_INT(expected, actual)                                 \
+    do {                                                                \
+        intmax_t s0 = (intmax_t)(expected);                             \
+        intmax_t s1 = (intmax_t)(actual);                               \
+        if (s0 == s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"           \
+                "Actual: %lld != %lld"                                  \
+                , __FUNCTION__, __FILE__, __LINE__,                     \
+                #expected, #actual, (long long)s0, (long long)s1);      \
+        }                                                               \
+    }while(0)
+
+#define ASSERT_EQ_PTR(expected, actual)                                 \
+    do {                                                                \
+        void* s0 = (void*)(expected);                                   \
+        void* s1 = (void*)(actual);                                     \
+        if (s0 == s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"           \
+                "Actual: %p != %p"                                      \
+                , __FUNCTION__, __FILE__, __LINE__,                     \
+                #expected, #actual, s0, s1);                            \
+            {CT_DO_FAIL;}                                               \
+        }                                                               \
+    }while(0)
+
+#define EXPECT_EQ_PTR(expected, actual)                                 \
+    do {                                                                \
+        void* s0 = (void*)(expected);                                   \
+        void* s1 = (void*)(actual);                                     \
+        if (s0 == s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"           \
+                "Actual: %p != %p"                                      \
+                , __FUNCTION__, __FILE__, __LINE__,                     \
+                #expected, #actual, s0, s1);                            \
+        }                                                               \
+    }while(0)
+
+#define CT_GENERATE_PARAMETERS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName, __VA_ARGS__))
+
+#define ARG_PUT_0(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/0", __VA_ARGS__, 0))
+#define ARG_PUT_1(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/1", __VA_ARGS__, 1))
+#define ARG_PUT_2(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/2", __VA_ARGS__, 2))
+#define ARG_PUT_3(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/3", __VA_ARGS__, 3))
+#define ARG_PUT_4(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/4", __VA_ARGS__, 4))
+
+#define ADD_SIZE_NONE(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName, __VA_ARGS__, 0, 0))
+
+#define ADD_SIZE_SMALL_SET(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=16x16", __VA_ARGS__, 16, 16)), \
+    CT_EXPAND(nextmacro(testArgName "/sz=256x256", __VA_ARGS__, 256, 256)), \
+    CT_EXPAND(nextmacro(testArgName "/sz=640x480", __VA_ARGS__, 640, 480))
+
+#define ADD_SIZE_16x16(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=16x16", __VA_ARGS__, 16, 16))
+
+#define ADD_SIZE_64x64(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=64x64", __VA_ARGS__, 64, 64))
+
+#define ADD_SIZE_256x256(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/sz=256x256", __VA_ARGS__, 256, 256))
+
+#ifndef CT_DONT_DEFINE_PUBLIC_MACROS
+
+#define TESTCASE CT_TESTCASE
+#define TEST     CT_TEST
+#define ARG      CT_ARG
+#define TEST_WITH_ARG  CT_TEST_WITH_ARG
+#define TESTCASE_TESTS CT_TESTCASE_TESTS
+
+#define PASS CT_PASS
+
+#define FAIL  CT_FAIL
+#define FAIL_ CT_FAIL_
+
+#define FAIL_AT  CT_FAIL_AT
+#define FAIL_AT_ CT_FAIL_AT_
+
+#define ADD_FAILURE CT_ADD_FAILURE
+#define ASSERT_NO_FAILURE CT_ASSERT_NO_FAILURE
+#define ASSERT_NO_FAILURE_ CT_ASSERT_NO_FAILURE_
+
+#define ASSERT  CT_ASSERT
+#define EXPECT  CT_EXPECT
+#define ASSERT_ CT_ASSERT_
+
+#define ASSERT_AT  CT_ASSERT_AT
+#define EXPECT_AT  CT_EXPECT_AT
+#define ASSERT_AT_ CT_ASSERT_AT_
+
+#define CT_Immediate_MODE 0
+#define CT_Graph_MODE 1
+
+
+#if defined(_MSC_VER)
+#define CT_INLINE _inline
+#define snprintf(buf, sz, pattern, ...) _snprintf_s(buf, sz, _TRUNCATE, pattern, __VA_ARGS__)
+#else
+#define CT_INLINE inline
+#endif
+
+#endif
+
+#endif // __VX_CT_TEST_H__
diff --git a/test_engine/test_bmp.c b/test_engine/test_bmp.c
new file mode 100644
index 0000000..c641cdc
--- /dev/null
+++ b/test_engine/test_bmp.c
@@ -0,0 +1,563 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test.h"
+#include "test_bmp.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct GrfmtReader;
+typedef unsigned char uchar;
+
+typedef void (*GrfmtReleaseReader)(struct GrfmtReader* reader);
+typedef struct GrfmtReader* (*GrfmtReadHeader)(const uchar* data, int size, int* width, int* height, int* iscolor);
+typedef int (*GrfmtReadData)(struct GrfmtReader* reader, uchar* data, int step, int color);
+
+typedef struct GrfmtReader
+{
+    GrfmtReleaseReader release;
+    GrfmtReadData read;
+}
+GrfmtReader;
+
+typedef struct PaletteEntry
+{
+    uchar b, g, r, a;
+}
+PaletteEntry;
+
+typedef enum BmpCompression
+{
+    BMP_RGB = 0,
+    BMP_RLE8 = 1,
+    BMP_RLE4 = 2,
+    BMP_BITFIELDS = 3
+}
+BmpCompression;
+
+typedef struct GrfmtBmpReader
+{
+    GrfmtReader base;
+    PaletteEntry m_palette[256];
+    const uchar* m_data;
+    int m_datasize;
+    int m_offset;
+    int m_width;
+    int m_height;
+    int m_bpp;
+    int m_origin;
+    BmpCompression m_rle_code;
+}
+GrfmtBmpReader;
+
+
+static void releaseBmpReader(struct GrfmtReader* reader)
+{
+    if(reader)
+        ct_free_mem(reader);
+}
+
+#define GET_DWORD(p) ((p) += 4, ((p)[-4] | ((p)[-3]<<8) | ((p)[-2]<<16) | ((p)[-1]<<24)))
+
+static int isColorPalette(const PaletteEntry* pal, int bpp)
+{
+    int j, clrused = 1 << bpp;
+    for( j = 0; j < clrused; j++ )
+        if( pal[j].b != pal[j].g || pal[j].b != pal[j].r )
+            return 1;
+    return 0;
+}
+
+
+#define  SCALE  14
+#define  cR  (int)(0.299*(1 << SCALE) + 0.5)
+#define  cG  (int)(0.587*(1 << SCALE) + 0.5)
+#define  cB  ((1 << SCALE) - cR - cG)
+
+static void cvtRGBToGray( const uchar* src, uchar* gray, int n, int scn, int blue_idx )
+{
+    int i;
+    for( i = 0; i < n; i++, src += scn )
+    {
+        gray[i] = (uchar)((src[blue_idx]*cB + src[1]*cG + src[blue_idx^2]*cR + (1 << (SCALE-1))) >> SCALE);
+    }
+}
+
+static void cvtRGBToRGB( const uchar* src, uchar* dst, int n,
+                         int scn, int sblue_idx, int dcn, int dblue_idx )
+{
+    int i;
+    for( i = 0; i < n; i++, src += scn, dst += dcn )
+    {
+        dst[dblue_idx] = src[sblue_idx];
+        dst[1] = src[1];
+        dst[dblue_idx^2] = src[sblue_idx^2];
+        if( dcn == 4 )
+            dst[3] = scn < 4 ? 255 : src[3];
+    }
+}
+
+static void fillColorRow8( uchar* data, const uchar* indices, int n,
+                           const PaletteEntry* palette, int dcn, int dblue_idx )
+{
+    int i;
+    for( i = 0; i < n; i++, data += dcn )
+    {
+        const PaletteEntry* p = palette + indices[i];
+        data[dblue_idx] = p->b;
+        data[1] = p->g;
+        data[dblue_idx^2] = p->r;
+        if( dcn == 4 )
+            data[3] = 255;
+    }
+}
+
+
+static void fillGrayRow8( uchar* data, const uchar* indices, int n, const uchar* palette )
+{
+    int i;
+    for( i = 0; i < n; i++ )
+    {
+        data[i] = palette[indices[i]];
+    }
+}
+
+
+static void fillColorRow4( uchar* data, const uchar* indices, int n,
+                           const PaletteEntry* palette, int dcn, int dblue_idx )
+{
+    int i = 0;
+    for( ; i <= n - 2; i += 2, data += dcn*2 )
+    {
+        int idx = *indices++;
+        const PaletteEntry* p0 = palette + (idx >> 4);
+        const PaletteEntry* p1 = palette + (idx & 15);
+        data[dblue_idx] = p0->b;
+        data[1] = p0->g;
+        data[dblue_idx^2] = p0->r;
+        data[dcn + dblue_idx] = p1->b;
+        data[dcn + 1] = p1->g;
+        data[dcn + (dblue_idx^2)] = p1->r;
+        if( dcn == 4 )
+            data[3] = data[7] = 255;
+    }
+
+    if( i < n )
+    {
+        const PaletteEntry* p0 = palette + (indices[0] >> 4);
+        data[dblue_idx] = p0->b;
+        data[1] = p0->g;
+        data[dblue_idx^2] = p0->r;
+        if( dcn == 4 )
+            data[3] = 255;
+    }
+}
+
+
+static void fillGrayRow4( uchar* data, const uchar* indices, int n, const uchar* palette )
+{
+    int i = 0;
+    for( ; i <= n - 2; i += 2 )
+    {
+        int idx = *indices++;
+        data[i] = palette[idx >> 4];
+        data[i+1] = palette[idx & 15];
+    }
+    if( i < n )
+        data[i] = palette[indices[0] >> 4];
+}
+
+
+static void fillColorRow1( uchar* data, const uchar* indices, int n,
+                           const PaletteEntry* palette, int dcn, int dblue_idx )
+{
+    int i = 0, mask = 0, idx = 0;
+    for( i = 0; i < n; i++, data += dcn, mask >>= 1 )
+    {
+        const PaletteEntry* p;
+        if( mask == 0 )
+        {
+            idx = *indices++;
+            mask = 128;
+        }
+        p = palette + ((idx & mask) != 0);
+        data[dblue_idx] = p->b;
+        data[1] = p->g;
+        data[dblue_idx^2] = p->r;
+        data[3] = 255;
+    }
+}
+
+
+static void fillGrayRow1( uchar* data, const uchar* indices, int n, const uchar* palette )
+{
+    int i = 0, mask = 0, idx = 0;
+    for( i = 0; i < n; i++, mask >>= 1 )
+    {
+        if( mask == 0 )
+        {
+            idx = *indices++;
+            mask = 128;
+        }
+        data[i] = palette[(idx & mask) != 0];
+    }
+}
+
+static int readBmpData(struct GrfmtReader* _reader, uchar* data, int step, int dcn )
+{
+    GrfmtBmpReader* reader = (GrfmtBmpReader*)_reader;
+    uchar  gray_palette[256];
+    int result = 0;
+    int color = dcn > 1;
+    int y, src_step, width, height, bpp;
+    const uchar* p;
+    const PaletteEntry* palette = 0;
+
+    if( !reader || !reader->m_data || reader->m_offset <= 0 )
+        return -1;
+
+    width = reader->m_width;
+    height = reader->m_height;
+    bpp = reader->m_bpp;
+    palette = &reader->m_palette[0];
+
+    src_step = ((width*(bpp != 15 ? bpp : 16) + 7)/8 + 3) & -4;
+    p = reader->m_data + reader->m_offset;
+
+    if( reader->m_offset + src_step*height > reader->m_datasize )
+        return -1;
+
+    if( reader->m_origin > 0 )
+    {
+        data += (height - 1)*step;
+        step = -step;
+    }
+
+    if( color == 0 && bpp <= 8 )
+    {
+        cvtRGBToGray(&palette[0].b, &gray_palette[0], (1 << bpp), 4, 0);
+    }
+
+    switch( bpp )
+    {
+    /************************* 1 BPP ************************/
+    case 1:
+        for( y = 0; y < height; y++, data += step, p += src_step )
+        {
+            if( color )
+                fillColorRow1( data, p, width, palette, dcn, 2 );
+            else
+                fillGrayRow1( data, p, width, gray_palette );
+        }
+        result = 0;
+        break;
+
+    /************************* 4 BPP ************************/
+    case 4:
+        for( y = 0; y < height; y++, data += step, p += src_step )
+        {
+            if( color )
+                fillColorRow4( data, p, width, palette, dcn, 2 );
+            else
+                fillGrayRow4( data, p, width, gray_palette );
+        }
+        result = 0;
+        break;
+
+    /************************* 8 BPP ************************/
+    case 8:
+        for( y = 0; y < height; y++, data += step, p += src_step )
+        {
+            if( color )
+                fillColorRow8( data, p, width, palette, dcn, 2 );
+            else
+                fillGrayRow8( data, p, width, gray_palette );
+        }
+        result = 0;
+        break;
+    /************************* 24 BPP ************************/
+    case 24:
+        for( y = 0; y < height; y++, data += step, p += src_step )
+        {
+            if( color )
+                cvtRGBToRGB( p, data, width, 3, 0, dcn, 2 );
+            else
+                cvtRGBToGray( p, data, width, 3, 0 );
+        }
+        result = 0;
+        break;
+    /************************* 32 BPP ************************/
+    case 32:
+        for( y = 0; y < height; y++, data += step, p += src_step )
+        {
+            if( color )
+                cvtRGBToRGB( p, data, width, 4, 0, dcn, 2 );
+            else
+                cvtRGBToGray( p, data, width, 4, 0 );
+        }
+        result = 0;
+        break;
+    default:
+        assert(0);
+    }
+
+    return result;
+}
+
+
+static struct GrfmtReader* readBmpHeader(const uchar* data, int datasize, int* _width, int* _height, int* _iscolor)
+{
+    GrfmtBmpReader* reader = 0;
+    int result = 0;
+    int iscolor = 0;
+    int width = 0, height = 0, bpp = 0;
+    BmpCompression rle_code = BMP_RGB;
+    PaletteEntry palette[256];
+    int offset, size;
+    int j, clrused = 0;
+    const uchar* p = data + 10;
+
+    if( !data || datasize < 56 || !_width || !_height || !_iscolor || data[0] != 'B' || data[1] != 'M' )
+        return 0;
+
+    offset = GET_DWORD(p);
+    size = GET_DWORD(p);
+
+    ct_memset(&palette[0], 0, sizeof(palette));
+
+    if( size >= 36 )
+    {
+        if( (int)((p - data) + size) >= datasize )
+            return 0;
+
+        width = GET_DWORD(p);
+        height = GET_DWORD(p);
+        bpp = GET_DWORD(p) >> 16;
+        rle_code = (BmpCompression)GET_DWORD(p);
+        p += 12;
+        clrused = GET_DWORD(p);
+        p += size - 36;
+
+        if( width > 0 && height != 0 &&
+           (((bpp == 1 || bpp == 4 || bpp == 8 ||
+              bpp == 24 || bpp == 32 ) && rle_code == BMP_RGB) ||
+            (bpp == 16 && (rle_code == BMP_RGB || rle_code == BMP_BITFIELDS)) ||
+            (bpp == 4 && rle_code == BMP_RLE4) ||
+            (bpp == 8 && rle_code == BMP_RLE8)))
+        {
+            iscolor = 1;
+            result = 1;
+
+            if( bpp <= 8 )
+            {
+                clrused = clrused == 0 ? (1 << bpp) : clrused;
+                memcpy(&palette[0], p, clrused*4);
+                p += clrused*4;
+                iscolor = isColorPalette( palette, clrused );
+            }
+            else if( bpp == 16 && rle_code == BMP_BITFIELDS )
+            {
+                int redmask = GET_DWORD(p);
+                int greenmask = GET_DWORD(p);
+                int bluemask = GET_DWORD(p);
+
+                if( bluemask == 0x1f && greenmask == 0x3e0 && redmask == 0x7c00 )
+                    bpp = 15;
+                else if( bluemask == 0x1f && greenmask == 0x7e0 && redmask == 0xf800 )
+                    ;
+                else
+                    result = 0;
+            }
+            else if( bpp == 16 && rle_code == BMP_RGB )
+                bpp = 15;
+        }
+    }
+    else if( size == 12 )
+    {
+        width  = GET_DWORD(p);
+        height = GET_DWORD(p);
+        bpp    = GET_DWORD(p) >> 16;
+        rle_code = BMP_RGB;
+
+        if( width > 0 && height != 0 &&
+           (bpp == 1 || bpp == 4 || bpp == 8 || bpp == 24 || bpp == 32 ))
+        {
+            if( bpp <= 8 )
+            {
+                clrused = 1 << bpp;
+                for( j = 0; j < clrused; j++, p += 3 )
+                {
+                    palette[j].b = p[0];
+                    palette[j].g = p[1];
+                    palette[j].r = p[2];
+                    palette[j].a = 255;
+                }
+                iscolor = isColorPalette( palette, clrused );
+            }
+            result = 1;
+        }
+    }
+
+    if( result == 0 || (bpp == 15 || bpp == 16) || (rle_code != BMP_RGB && rle_code != BMP_BITFIELDS) )
+        return 0;
+
+    reader = (GrfmtBmpReader*)ct_alloc_mem(sizeof(*reader));
+    if( !reader )
+        return 0;
+    ct_memset(reader, 0, sizeof(*reader));
+    reader->base.release = releaseBmpReader;
+    reader->base.read = readBmpData;
+
+    reader->m_bpp = bpp;
+    reader->m_width = width;
+    reader->m_height = height;
+    reader->m_origin = height > 0 ? 1 : 0;
+    reader->m_offset = offset;
+    reader->m_rle_code = rle_code;
+
+    reader->m_data = data;
+    reader->m_datasize = datasize;
+    reader->m_offset = offset;
+
+    if( _width )
+        *_width = width;
+    if( _height )
+        *_height = height;
+    if( _iscolor )
+        *_iscolor = iscolor;
+
+    memcpy(&reader->m_palette[0], &palette[0], sizeof(palette));
+    return (GrfmtReader*)reader;
+}
+
+#define PUT_DWORD(p, val) \
+    (((p)[0] = (uchar)(val)), \
+    ((p)[1] = (uchar)((val) >> 8)), \
+    ((p)[2] = (uchar)((val) >> 16)), \
+    ((p)[3] = (uchar)((val) >> 24)), \
+     (p) += 4)
+
+//////////////////////////////////////////////////////////////////////////////////////////
+static int writeBMP( const char* filename, const uchar* img, int step, int width, int height, int channels0 )
+{
+    int channels = channels0 == 4 ? 3 : channels0;
+    int width3 = width*channels;
+    int i, y, fileStep = (width3 + 3) & -4;
+
+    int  bitmapHeaderSize = 40;
+    int  paletteSize = channels > 1 ? 0 : 1024;
+    int  headerSize = 14 /* fileheader */ + bitmapHeaderSize + paletteSize;
+    int  fileSize = fileStep*height + headerSize;
+    uchar* buf = 0, *p = 0;
+
+    FILE* f = fopen(filename, "wb");
+    if(!f)
+        return -1;
+
+    buf = p = (uchar*)ct_alloc_mem(fileSize);
+    p[0] = 'B';
+    p[1] = 'M';
+    p += 2;
+    PUT_DWORD(p, fileSize);
+    PUT_DWORD(p, 0);
+    PUT_DWORD(p, headerSize);
+    PUT_DWORD(p, bitmapHeaderSize);
+    PUT_DWORD(p, width);
+    PUT_DWORD(p, height);
+    PUT_DWORD(p, 1 | (channels << 19));
+    PUT_DWORD(p, BMP_RGB);
+    ct_memset(p, 0, 20);
+    p += 20;
+
+    if( channels == 1 )
+    {
+        for( i = 0; i < 256; i++, p += 4 )
+        {
+            p[0] = p[1] = p[2] = (uchar)i;
+            p[3] = 255;
+        }
+    }
+
+    for( y = height - 1; y >= 0; y--, p += fileStep )
+    {
+        if( channels0 == 1 )
+            memcpy(p, img + step*y, width);
+        else
+        {
+            const uchar* imgrow = img + step*y;
+            uchar* dst = p;
+            for( i = 0; i < width; i++, imgrow += channels0, dst += 3 )
+            {
+                dst[0] = imgrow[2];
+                dst[1] = imgrow[1];
+                dst[2] = imgrow[0];
+            }
+        }
+        if( fileStep > width3 )
+            ct_memset(p + width3, 0, fileStep - width3);
+    }
+
+    fwrite(buf, 1, fileSize, f);
+    fclose(f);
+    ct_free_mem(buf);
+    return 0;
+}
+
+CT_Image ct_read_bmp(const unsigned char* data, int datasize, int dcn)
+{
+    int w = 0, h = 0, iscolor = 0;
+    GrfmtReader* bmpreader = readBmpHeader(data, (int)datasize, &w, &h, &iscolor);
+    int ok = 0;
+    CT_Image image = 0;
+
+    if( dcn <= 0 )
+        dcn = iscolor ? 3 : 1;
+
+    if( bmpreader )
+    {
+        vx_uint32 width  = w;
+        vx_uint32 height = h;
+        vx_df_image format = dcn == 1 ? VX_DF_IMAGE_U8 : dcn == 3 ? VX_DF_IMAGE_RGB : VX_DF_IMAGE_RGBX;
+
+        image = ct_allocate_image(width, height, format);
+
+        if( image )
+            ok = bmpreader->read(bmpreader, image->data.y, (int)ct_stride_bytes(image), dcn) >= 0;
+        bmpreader->release(bmpreader);
+    }
+
+    if( ok )
+        return image;
+
+    //ct_release_image(&image);
+    return 0;
+}
+
+
+int ct_write_bmp(const char* filename, CT_Image image)
+{
+    if( image )
+    {
+        int channels = ct_channels(image->format);
+        return writeBMP(filename, image->data.y, (int)ct_stride_bytes(image),
+                        (int)image->width, (int)image->height, channels);
+    }
+    return -1;
+}
diff --git a/test_engine/test_bmp.h b/test_engine/test_bmp.h
new file mode 100644
index 0000000..87d3c85
--- /dev/null
+++ b/test_engine/test_bmp.h
@@ -0,0 +1,27 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __VX_CT_TEST_BMP_H__
+#define __VX_CT_TEST_BMP_H__
+
+#include <VX/vx.h>
+#include "test_image.h"
+
+CT_Image ct_read_bmp(const unsigned char* data, int datasize, int dcn);
+int ct_write_bmp(const char* filename, CT_Image img);
+
+#endif
diff --git a/test_engine/test_engine.c b/test_engine/test_engine.c
new file mode 100644
index 0000000..007ffc4
--- /dev/null
+++ b/test_engine/test_engine.c
@@ -0,0 +1,854 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+
+#ifdef _MSC_VER
+#include <direct.h>
+#elif defined __linux__ || defined __CYGWIN__
+#include <unistd.h>
+#endif
+
+
+#define HAVE_TIME_H
+
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#include "test.h"
+
+char CT_EXTENDED_ARG_BEGIN[] = {'\0'};
+char CT_EXTENDED_ARG_END[] = {'\0'};
+
+#ifdef _MSC_VER
+#  undef setenv
+#  define setenv(name, value, overwrite) _putenv_s(name, value)
+#elif defined __linux__
+int setenv(const char* name, const char* value, int overwite);
+#else
+#  define setenv(...)
+#endif
+
+#ifdef CT_TEST_TIME
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h> // gettimeofday
+#endif
+#include <time.h>
+#if defined __MACH__ && defined __APPLE__
+#include <mach/mach_time.h>
+#endif
+
+#if defined WIN32 || defined _WIN32 || defined WINCE
+#include <windows.h> // QueryPerformanceFrequency / QueryPerformanceCounter
+#endif
+
+static int64_t CT_getTickCount(void)
+{
+#if defined WIN32 || defined _WIN32 || defined WINCE
+    LARGE_INTEGER counter;
+    QueryPerformanceCounter(&counter);
+    return (int64_t)counter.QuadPart;
+#elif defined __linux || defined __linux__
+    struct timespec tp;
+    clock_gettime(CLOCK_MONOTONIC, &tp);
+    return (int64_t)tp.tv_sec * 1e9 + tp.tv_nsec;
+#elif defined __MACH__ && defined __APPLE__
+    return (int64_t)mach_absolute_time();
+#else
+    struct timeval tv;
+    struct timezone tz;
+    gettimeofday(&tv, &tz);
+    return (int64_t)tv.tv_sec * 1e6 + tv.tv_usec;
+#endif
+}
+
+static double CT_getTickFrequency(void)
+{
+#if defined WIN32 || defined _WIN32 || defined WINCE
+    LARGE_INTEGER freq;
+    QueryPerformanceFrequency(&freq);
+    return (double)freq.QuadPart;
+#elif defined __linux || defined __linux__
+    return 1e9;
+#elif defined __MACH__ && defined __APPLE__
+    static double freq = 0;
+    if(freq == 0)
+    {
+        mach_timebase_info_data_t sTimebaseInfo;
+        mach_timebase_info(&sTimebaseInfo);
+        freq = sTimebaseInfo.denom * 1e9 / sTimebaseInfo.numer;
+    }
+    return freq;
+#else
+    return 1e6;
+#endif
+}
+
+static double g_tickFreq = 0;
+
+static int g_timeShow =
+#ifdef CT_TIME_SHOW
+        1
+#else
+        0
+#endif
+        ;
+#endif
+
+#define CT_LOGF(...)            \
+    do {                        \
+        printf(__VA_ARGS__);    \
+        fflush(stdout);         \
+    } while(0)
+
+struct CT_GC_Node
+{
+    CT_GCType           type_;
+    void*               object_;
+    CT_ObjectDestructor destructor_;
+    struct CT_GC_Node*  next_;
+};
+
+struct CT_FailedTestEntry
+{
+    struct CT_TestCaseEntry*   testcase_;
+    struct CT_TestEntry*       test_;
+    int                        param_idx_;
+    struct CT_FailedTestEntry* next_;
+};
+
+struct CT_GlobalContextBlackBox
+{
+    int g_quiet;
+    int g_list_tests;
+
+    int num_test_errors_;
+    int g_num_failed_tests_;
+    int g_num_disabled_tests_;
+    struct CT_GC_Node* gc_chain_;
+
+    struct CT_FailedTestEntry* g_failed_tests_;
+    struct CT_FailedTestEntry* g_failed_tests_end_;
+};
+
+// testing context, it might be converted to be thread local some day
+static struct CT_GlobalContextBlackBox g_context_internals = { 0 };
+static struct CT_GlobalContext g_context = { 0, 0, 0, 0, &g_context_internals };
+static int g_has_running_test = 0;
+static int g_option_run_disabled_tests = 0;
+
+struct CT_GlobalContext* CT() { return g_has_running_test ? & g_context : NULL; }
+
+void CT_RecordFailure()
+{
+    if (!CT()->internal_->num_test_errors_)
+        CT()->internal_->g_num_failed_tests_++;
+    CT()->internal_->num_test_errors_++;
+}
+
+void CT_RecordFailureAt(const char* message, const char* func, const char* file, const int line)
+{
+    CT_RecordFailure();
+    printf("\nFAILED at %20s:%d\n\t%s\n\n", file, line, message);
+    fflush(stdout);
+}
+
+void CT_RecordFailureAtFormat(const char* message, const char* func, const char* file, const int line, ...)
+{
+    va_list args;
+
+    CT_RecordFailure();
+
+    printf("\nFAILED at %20s:%d\n\t", file, line);
+    fflush(stdout); // just in case of mailformed "message"
+
+    va_start(args, line);
+    vprintf(message, args);
+    va_end(args);
+
+    printf("\n\n");
+    fflush(stdout);
+}
+
+void CT_DumpMessage(const char* message, ...)
+{
+    va_list args;
+
+    va_start(args, message);
+    vprintf(message, args);
+    va_end(args);
+
+    printf("\n\n");
+    fflush(stdout);
+}
+
+int CT_HasFailure()
+{
+    return CT()->internal_->num_test_errors_;
+}
+
+void CT_RegisterForGarbageCollection(void *object, CT_ObjectDestructor collector, CT_GCType type)
+{
+    struct CT_GlobalContextBlackBox* bb = CT()->internal_;
+    struct CT_GC_Node* node = (struct CT_GC_Node*)ct_alloc_mem(sizeof(struct CT_GC_Node));
+
+    if (!node)
+    {
+        CT_RecordFailure();
+        return;
+    }
+
+    node->type_ = type > 0 ? type : CT_GC_OBJECT;
+    node->object_ = object;
+    node->destructor_ = collector;
+    node->next_ = bb->gc_chain_;
+    bb->gc_chain_ = node;
+}
+
+void CT_CollectGarbage(int type)
+{
+    struct CT_GlobalContextBlackBox* bb = CT()->internal_;
+    struct CT_GC_Node* node = bb->gc_chain_;
+    struct CT_GC_Node stub, *prev = &stub;
+    stub.next_ = node;
+
+    while(node)
+    {
+        struct CT_GC_Node* killme = node;
+        node = node->next_;
+
+        if(type == CT_GC_ALL || (CT_GCType)type == killme->type_)
+        {
+            killme->destructor_(&killme->object_);
+            ct_free_mem(killme);
+            prev->next_ = node;
+        }
+        else
+        {
+            prev = killme;
+        }
+    }
+
+    bb->gc_chain_ = stub.next_;
+}
+
+#ifdef HAVE_VCS_VERSION_INC
+# include "vcs_version.inc"
+#endif
+#ifndef VCS_VERSION_STR
+# define VCS_VERSION_STR "unknown"
+#endif
+
+static void print_version(const char* version_str)
+{
+    printf("VxTests version: %s\n", version_str);
+    printf("VCS version: " VCS_VERSION_STR "\n");
+    printf("Build config: "
+#ifdef DEBUG
+        "Debug"
+#elif NDEBUG
+        "Release"
+#else
+        "unknown"
+#endif
+        "\n\n");
+    fflush(stdout);
+}
+
+
+static int isNameMatches(const char* str, const char *pattern)
+{
+    switch (*pattern)
+    {
+    case '?':
+        return (*str != '\0' && isNameMatches(str + 1, pattern + 1) != 0) ? 1 : 0;
+    case '*':
+        return ((*str != '\0' && isNameMatches(str + 1, pattern) != 0) ||
+                isNameMatches(str, pattern + 1) != 0) ? 1 : 0;
+    case '\0': case ':': case '\n':
+        return (*str == '\0' || *str == '/') ? 1 : 0;
+    default:
+        return (*pattern == *str &&
+                isNameMatches(str + 1, pattern + 1) != 0) ? 1 : 0;
+    }
+}
+
+
+// accepts filters like gtest with some changes for "negative" tests
+static int filterTestName(const char* test_name, const char* fullFilter)
+{
+    const char *cur_pattern = fullFilter;
+    int result = 0;
+    if (fullFilter == NULL)
+    {
+        result = 1; // no filter
+    }
+    else
+    {
+        for (;;)
+        {
+            int negative = 0;
+            if (*cur_pattern == '-')
+            {
+                negative = 1;
+                cur_pattern++;
+            }
+            if (result == 0 || negative == 1)
+            {
+                if (isNameMatches(test_name, cur_pattern) != 0)
+                {
+                    if (negative)
+                        return 0;
+                    result = 1;
+                }
+            }
+
+            cur_pattern = strchr(cur_pattern, ':');
+
+            if (cur_pattern == NULL)
+                break;
+            cur_pattern++;
+        }
+    }
+
+    if (result && !g_option_run_disabled_tests && strstr(test_name, "DISABLED") != NULL)
+    {
+        g_context.internal_->g_num_disabled_tests_++;
+        result = 0;
+    }
+
+    return result;
+}
+
+static uint64_t fnv1a(const char *str)
+{
+    uint64_t hval = 0xCBF29CE484222325ULL;
+    const unsigned char *s = (const unsigned char *)str;
+
+    while (*s)
+    {
+        hval ^= (uint64_t)*s++;
+        hval *= 0x100000001B3ULL;
+    }
+
+    return hval;
+}
+
+extern CT_RegisterTestCaseFN g_testcase_register_fns[];
+static struct CT_TestCaseEntry* g_firstTestCase = NULL;
+static const char* g_test_filter = NULL;
+
+static void* get_test_params(struct CT_TestEntry* test, int param_idx)
+{
+    return test->args_ ? (void*)(((uint8_t*)test->args_) + test->arg_size_ * param_idx) : NULL;
+}
+
+static void get_test_name(char* buf, int bufsz, struct CT_TestCaseEntry* testcase, struct CT_TestEntry* test, void* parg, int param_idx)
+{
+    const char* test_name = test->name_;
+    if (strncmp(test_name, "test_", 5) == 0)
+        test_name += 5;
+    else if (strncmp(test_name, "test", 4) == 0)
+        test_name += 4;
+    if (parg)
+        snprintf(buf, bufsz, "%s.%s/%d/%s", testcase->name_, test_name, param_idx, *(const char**)parg);
+    else
+        snprintf(buf, bufsz, "%s.%s", testcase->name_, test_name);
+}
+
+static int update_extended_flag(void* parg, int* extended_flag)
+{
+    if (parg)
+    {
+        if (*(const char**)parg == CT_EXTENDED_ARG_BEGIN)
+        {
+            *extended_flag = 1;
+            return 1;
+        }
+        else if (*(const char**)parg == CT_EXTENDED_ARG_END)
+        {
+            *extended_flag = 0;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+static int run_test(struct CT_TestCaseEntry* testcase, struct CT_TestEntry* test, int param_idx, int run_tests, int* extended_flag)
+{
+    char test_name[1024];
+    void *parg = get_test_params(test, param_idx);
+    get_test_name(test_name, sizeof(test_name), testcase, test, parg, param_idx);
+
+    if (update_extended_flag(parg, extended_flag))
+        return 0;
+
+    if (*extended_flag && !ct_check_any_size())
+        return 0;
+
+    if (filterTestName(test_name, g_test_filter))
+    {
+        if (g_context.internal_->g_list_tests)
+        {
+            CT_LOGF("%s\n", test_name);
+            return 0;
+        }
+        else
+        {
+            char timestr[256] = {0};
+#ifdef CT_TEST_TIME
+            int64_t timestart;
+#endif
+
+            if (run_tests == 0 && !g_context.internal_->g_quiet)
+                CT_LOGF("[ -------- ] tests from %s\n", testcase->name_);
+
+            // setup global test execution context
+            g_context.testname_     = test_name;
+            g_context.seed_         = fnv1a(test_name);
+            g_context.arg_          = parg;
+            g_context.user_context_ = NULL;
+            g_context.internal_->num_test_errors_ = 0;
+
+            if (g_context.internal_->g_quiet)
+            {
+                CT_LOGF("[ RUN      ] %s ...\n", test_name);
+            }
+            else
+            {
+                CT_LOGF("[ RUN %04d ] %s ...\n", run_tests+1, test_name);
+            }
+
+            g_has_running_test = 1; /* GO! */
+
+#ifdef CT_TEST_TIME
+            timestart = CT_getTickCount();
+#endif
+
+            // test setup
+            g_context.user_context_ = (testcase->setupFn_) ? testcase->setupFn_() : NULL;
+
+            if (!CT_HasFailure()) /* no errors during test setup */
+            {
+                // test body
+                test->test_fn_(g_context.user_context_, parg);
+
+                //test teardown
+                if (testcase->teardownFn_) testcase->teardownFn_(g_context.user_context_);
+            }
+            else
+            {
+                /* do not call teardown if setup is failed*/
+                CT_LOGF("[ !FAILED! ] Test setup\n");
+            }
+
+            // release automatic resources
+            CT_CollectGarbage(CT_GC_ALL);
+
+            g_has_running_test = 0; /* FIN! */
+
+#ifdef CT_TEST_TIME
+            if (g_timeShow)
+                snprintf(timestr, sizeof(timestr), " (%.1f ms)", (CT_getTickCount() - timestart) * 1000. / g_tickFreq);
+#endif
+
+            CT_LOGF("[ %s ] %s%s\n",
+                (g_context.internal_->num_test_errors_) ? "!FAILED!" : "    DONE", test_name, timestr);
+
+            if (g_context.internal_->num_test_errors_)
+            {
+                struct CT_FailedTestEntry* f = (struct CT_FailedTestEntry*)(ct_alloc_mem(sizeof(*f)));
+                f->testcase_ = testcase;
+                f->test_ = test;
+                f->param_idx_ = param_idx;
+                f->next_ = NULL;
+
+                if (g_context.internal_->g_failed_tests_end_)
+                    g_context.internal_->g_failed_tests_end_->next_ = f;
+                else
+                    g_context.internal_->g_failed_tests_ = f;
+                g_context.internal_->g_failed_tests_end_ = f;
+            }
+            return 1; // test was executed
+        }
+    }
+    return 0; // test is skipped
+}
+
+int CT_main(int argc, char* argv[], const char* version_str)
+{
+    const char* testid_str = 0;
+    int arg;
+    int total_tests = 0;
+    int total_testcases = 0;
+    int total_run_tests = 0;
+    int total_run_testcases = 0;
+
+    //================ OpenVX Specific ===================
+    int total_openvx_core_tests = 0;
+    int total_openvx_passed_core_tests = 0;
+    int total_openvx_failed_core_tests = 0;
+#ifdef OPENVX_USE_NN
+    int total_openvx_nn_tests = 0;
+    int total_openvx_passed_nn_tests = 0;
+    int total_openvx_failed_nn_tests = 0;
+#endif
+#ifdef OPENVX_USE_IX
+    int total_openvx_ix_tests = 0;
+    int total_openvx_passed_ix_tests = 0;
+    int total_openvx_failed_ix_tests = 0;
+#endif
+    //====================================================
+
+    int use_global_context = 0;
+
+#ifdef CT_TEST_TIME
+    int64_t timestart_all;
+#endif
+
+    struct CT_TestCaseEntry* testcase = 0;
+
+    for (arg = 1; arg < argc; arg++)
+    {
+        const char* argStr = argv[arg];
+        if (memcmp(argStr, "--filter=", 9) == 0)
+        {
+            if (g_test_filter)
+            {
+                // TODO add message
+                return 1;
+            }
+            g_test_filter = argStr + 9;
+        }
+        else if (strcmp(argStr, "--verbose") == 0)
+        {
+            setenv("VX_ZONE_LIST", "0,1", 1);
+        }
+        else if (memcmp(argStr, "--global_context=", 17) == 0)
+        {
+            use_global_context = atoi(argStr + 17);
+        }
+        else if (memcmp(argStr, "--run_disabled", 14) == 0)
+        {
+            g_option_run_disabled_tests = 1;
+        }
+        else if (memcmp(argStr, "--check_any_size=", 17) == 0)
+        {
+            ct_set_check_any_size(atoi(argStr + 17) != 0);
+        }
+        else if (memcmp(argStr, "--testid=", 9) == 0)
+        {
+            testid_str = argStr + 9;
+        }
+        else if (memcmp(argStr, "--list_tests", 9) == 0)
+        {
+            g_context.internal_->g_list_tests = 1;
+        }
+        else if (memcmp(argStr, "--quiet", 8) == 0)
+        {
+            g_context.internal_->g_quiet = 1;
+        }
+        else if (memcmp(argStr, "--show_test_duration=", 21) == 0)
+        {
+#ifdef CT_TEST_TIME
+            g_timeShow = (atoi(argStr + 21) != 0);
+#else
+            // nothing, ignore option
+#endif
+        }
+        else if (memcmp(argStr, "--help", 7) == 0)
+        {
+            print_version(version_str);
+            printf("Usage:\n");
+            printf("    %s [--filter=<filter>] [--run_disabled] [--global_context=0|1] [--check_any_size=0|1] [--show_test_duration=0|1] [--verbose] [--testid=<testid>] [--list_tests] [--quiet]\n", argv[0]);
+            printf("\n");
+            printf("   <filter> - is GTest like filter, list of patterns separated by colon ':'.\n");
+            printf("              Filter-out tests with '-' pattern's prefix.\n");
+            printf("              Negative patterns have higher priority than positive patterns.\n\n");
+            printf("   <testid> - report custom identifier for tests run\n\n");
+            return 0;
+        }
+        else
+        {
+            printf("ERROR: Unknown option %s\n", argStr);
+            return 1;
+        }
+    }
+
+    if (!g_context.internal_->g_quiet)
+        print_version(version_str);
+
+    {
+        struct CT_TestCaseEntry** ppLastTestCase = &g_firstTestCase;
+        while (g_testcase_register_fns[total_testcases])
+        {
+            *ppLastTestCase = g_testcase_register_fns[total_testcases]();
+            while (*ppLastTestCase)
+                ppLastTestCase = &ppLastTestCase[0]->next_;
+            total_testcases++;
+        }
+    }
+
+    testcase = g_firstTestCase;
+    while (testcase)
+    {
+        struct CT_TestEntry** ppLastTest = &testcase->tests_;
+        int testcase_tests = 0;
+        int test_id = 0;
+        for (; testcase->test_register_fns_[test_id]; test_id++)
+        {
+            *ppLastTest = testcase->test_register_fns_[test_id]();
+            while (*ppLastTest)
+            {
+                if (ppLastTest[0]->args_)
+                {
+                    int extended_flag = 0;
+                    struct CT_TestEntry* test = ppLastTest[0];
+                    int narg = 0;
+                    for (; narg < test->args_count_; narg++)
+                    {
+                        void *parg = get_test_params(test, narg);
+                        if (update_extended_flag(parg, &extended_flag))
+                            continue;
+                        if (extended_flag && !ct_check_any_size())
+                            continue;
+                        testcase_tests += 1;
+                    }
+                }
+                else
+                {
+                    testcase_tests += 1;
+                }
+                ppLastTest[0]->testcase_ = testcase;
+                ppLastTest = &ppLastTest[0]->next_;
+            }
+        }
+        testcase->test_count_ = testcase_tests;
+        total_tests += testcase_tests;
+        testcase = testcase->next_;
+    }
+
+
+    if (!g_context.internal_->g_quiet)
+    {
+        printf("[ ======== ] Total %d tests from %d test cases\n", total_tests, total_testcases);
+        if (g_test_filter)
+            printf("Use test filter: %s\n\n", g_test_filter);
+        printf("Use global OpenVX context: %s\n\n", use_global_context ? "TRUE" : "FALSE");
+        printf("\n");
+    }
+
+#ifdef CT_TEST_TIME
+    g_tickFreq = CT_getTickFrequency();
+#endif
+
+    if (use_global_context)
+        ct_create_global_vx_context();
+
+#ifdef CT_TEST_TIME
+    timestart_all = CT_getTickCount();
+#endif
+
+    for (testcase = g_firstTestCase; testcase; testcase = testcase->next_)
+    {
+        int run_tests = 0;
+        int extended_flag = 0;
+        struct CT_TestEntry* test = testcase->tests_;
+
+#ifdef CT_TEST_TIME
+        int64_t timestart_testCase = CT_getTickCount();
+#endif
+
+        for(; test; test = test->next_)
+        {
+            if (!test->args_)
+                run_tests += run_test(testcase, test, 0, run_tests, &extended_flag);
+            else
+            {
+                int narg = 0;
+                for (; narg < test->args_count_; narg++)
+                    run_tests += run_test(testcase, test, narg, run_tests, &extended_flag);
+            }
+        }
+
+        if (run_tests)
+        {
+            if (!g_context.internal_->g_quiet)
+            {
+                char timestr[256] = {0};
+#ifdef CT_TEST_TIME
+                if (g_timeShow)
+                    snprintf(timestr, sizeof(timestr), " (%.1f ms)", (CT_getTickCount() - timestart_testCase) * 1000. / g_tickFreq);
+#endif
+                printf("[ -------- ] %d tests from test case %s%s\n\n", run_tests, testcase->name_, timestr);
+            }
+
+            //================ OpenVX Specific ===================
+#ifdef OPENVX_USE_NN
+            if (strcmp("TensorNN", testcase->name_) == 0) {
+                total_openvx_nn_tests += run_tests;
+            }
+            else
+#endif
+#ifdef OPENVX_USE_IX
+            if (strcmp("ExtensionObject", testcase->name_) == 0) {
+                    total_openvx_ix_tests += run_tests;
+            }
+            else
+#endif
+            {
+                    total_openvx_core_tests += run_tests;
+            }
+            //====================================================
+
+            total_run_tests += run_tests;
+            total_run_testcases++;
+        }
+    }
+
+    if (!g_context.internal_->g_quiet)
+    {
+        char timestr[256] = {0};
+#ifdef CT_TEST_TIME
+        if (g_timeShow)
+            snprintf(timestr, sizeof(timestr), " (%.1f ms)", (CT_getTickCount() - timestart_all) * 1000. / g_tickFreq);
+#endif
+        printf("[ ======== ]\n");
+        printf("[ ALL DONE ] %d test(s) from %d test case(s) ran%s\n", total_run_tests, total_run_testcases, timestr);
+        printf("[ PASSED   ] %d test(s)\n", total_run_tests - g_context.internal_->g_num_failed_tests_);
+
+        if (g_context.internal_->g_num_failed_tests_ > 0)
+        {
+            struct CT_FailedTestEntry* f = g_context.internal_->g_failed_tests_;
+            printf("[ FAILED   ] %d test(s), listed below:\n", g_context.internal_->g_num_failed_tests_);
+            for(; f; f = f->next_)
+            {
+                char test_name[1024];
+                void *parg = get_test_params(f->test_, f->param_idx_);
+                get_test_name(test_name, sizeof(test_name), f->testcase_, f->test_, parg, f->param_idx_);
+                printf("[ FAILED   ] %s\n", test_name);
+
+
+                //================ OpenVX Specific ===================
+#ifdef OPENVX_USE_NN
+                if (strncmp("TensorNN", test_name, sizeof("TensorNN") - 1) == 0) {
+                    total_openvx_failed_nn_tests ++;
+                }
+                else
+#endif
+#ifdef OPENVX_USE_IX
+                if (strncmp("ExtensionObject", test_name, sizeof("ExtensionObject") - 1) == 0) {
+                    total_openvx_failed_ix_tests ++;
+                }
+                else
+#endif
+                {
+                    total_openvx_failed_core_tests ++;
+                }
+                //====================================================
+
+            }
+        }
+        else
+        {
+            printf("[ FAILED   ] %d test(s)\n", g_context.internal_->g_num_failed_tests_);
+        }
+        printf("[ DISABLED ] %d test(s)\n", g_context.internal_->g_num_disabled_tests_);
+
+        //================ OpenVX Specific ===================
+        printf("\n");
+        printf("=================================\n");
+        printf("OpenVX Conformance report summary\n");
+        printf("=================================\n");
+        printf("\n");
+
+        total_openvx_passed_core_tests = total_openvx_core_tests - total_openvx_failed_core_tests;
+        printf("To be conformant to the OpenVX baseline, %d required test(s) must pass. %d tests passed, %d tests failed. %s.\n",
+               total_openvx_core_tests, total_openvx_passed_core_tests, total_openvx_failed_core_tests,
+               (total_openvx_failed_core_tests==0?"PASSED":"FAILED")
+               );
+#ifdef OPENVX_USE_NN
+        total_openvx_passed_nn_tests = total_openvx_nn_tests - total_openvx_failed_nn_tests;
+        printf("To be conformant to the Neural Network extension, %d required test(s) must pass. %d tests passed, %d tests failed. %s.\n",
+               total_openvx_nn_tests, total_openvx_passed_nn_tests, total_openvx_failed_nn_tests,
+               (total_openvx_failed_nn_tests==0?"PASSED":"FAILED")
+               );
+#endif
+#ifdef OPENVX_USE_IX
+        total_openvx_passed_ix_tests = total_openvx_ix_tests - total_openvx_failed_ix_tests;
+        printf("To be conformant to the Import/Export extension, %d required test(s) must pass. %d tests passed, %d tests failed. %s.\n",
+               total_openvx_ix_tests, total_openvx_passed_ix_tests, total_openvx_failed_ix_tests,
+               (total_openvx_failed_ix_tests==0?"PASSED":"FAILED")
+               );
+#endif
+
+        printf("Note: The %d disabled tests are optional and are not considered for conformance.\n",
+               g_context.internal_->g_num_disabled_tests_);
+
+
+        //====================================================
+    }
+    fflush(stdout);
+    ct_release_global_vx_context();
+
+    if (testid_str == 0)
+    {
+        if (g_test_filter)
+            testid_str = "FILTERED";
+        else
+            testid_str = "ALL";
+    }
+
+    {
+        char timebuf[64] = "YYYYMMDDHHMMSS";
+#ifdef HAVE_TIME_H
+        time_t t = time(NULL);
+        struct tm *tmptr = localtime(&t);
+        if (tmptr != NULL)
+        {
+            sprintf(timebuf, "%04d%02d%02d%02d%02d%02d",
+                    tmptr->tm_year + 1900,
+                    tmptr->tm_mon + 1,
+                    tmptr->tm_mday,
+                    tmptr->tm_hour,
+                    tmptr->tm_min,
+                    tmptr->tm_sec /* [0-60] (1 leap second) */);
+        }
+#endif
+        // <identifier> <time and date> <test identifier> <total number of tests> <total tests disabled> <total tests started> <total tests run to completion> <total tests passed> <total tests failed>
+        fprintf(g_context.internal_->g_quiet ? stderr : stdout,
+                "\n#REPORT: %s %s %d %d %d %d %d %d (version %s)\n",
+                timebuf,
+                testid_str,
+                total_tests,
+                g_context.internal_->g_num_disabled_tests_,
+                total_run_tests,
+                total_run_tests,
+                total_run_tests - g_context.internal_->g_num_failed_tests_,
+                g_context.internal_->g_num_failed_tests_,
+                version_str);
+        fflush(g_context.internal_->g_quiet ? stderr : stdout);
+    }
+
+    return (g_context.internal_->g_num_failed_tests_ > 0) ? 1 : 0;
+}
diff --git a/test_engine/test_image.c b/test_engine/test_image.c
new file mode 100644
index 0000000..7f4eb93
--- /dev/null
+++ b/test_engine/test_image.c
@@ -0,0 +1,1522 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test.h"
+#include "test_bmp.h"
+
+#include <VX/vx.h>
+#include <string.h>
+
+// #define DEBUG_CT_IMAGE
+
+uint32_t ct_image_bits_per_pixel(vx_df_image format)
+{
+    switch(format)
+    {
+        case VX_DF_IMAGE_U8:
+            return 8 * 1;
+        case VX_DF_IMAGE_U16:
+        case VX_DF_IMAGE_S16:
+        case VX_DF_IMAGE_UYVY:
+        case VX_DF_IMAGE_YUYV:
+            return 8 * 2;
+        case VX_DF_IMAGE_U32:
+        case VX_DF_IMAGE_S32:
+        case VX_DF_IMAGE_RGBX:
+            return 8 * 4;
+        case VX_DF_IMAGE_RGB:
+        case VX_DF_IMAGE_YUV4:
+            return 8 * 3;
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            return 8 * 3 / 2;
+        default:
+            CT_RecordFailure();
+            return 0;
+    };
+}
+
+int ct_channels(vx_df_image format)
+{
+    switch(format)
+    {
+        case VX_DF_IMAGE_U8:
+        case VX_DF_IMAGE_U16:
+        case VX_DF_IMAGE_S16:
+        case VX_DF_IMAGE_U32:
+        case VX_DF_IMAGE_S32:
+            return 1;
+        case VX_DF_IMAGE_RGBX:
+            return 4;
+        case VX_DF_IMAGE_RGB:
+            return 3;
+        default:
+            break;
+    };
+    return 1;
+}
+
+uint32_t ct_stride_bytes(CT_Image image)
+{
+    uint32_t factor = 0;
+    switch(image->format)
+    {
+        case VX_DF_IMAGE_U8:
+        case VX_DF_IMAGE_NV21:
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_YUV4:
+        case VX_DF_IMAGE_IYUV:
+            factor = 1;
+            break;
+        case VX_DF_IMAGE_U16:
+        case VX_DF_IMAGE_S16:
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            factor = 2;
+            break;
+        case VX_DF_IMAGE_U32:
+        case VX_DF_IMAGE_S32:
+        case VX_DF_IMAGE_RGBX:
+            factor = 4;
+            break;
+        case VX_DF_IMAGE_RGB:
+            factor = 3;
+            break;
+        default:
+            // error should be already reported by image allocation function
+            break;
+    };
+    return image->stride*factor;
+}
+
+
+static size_t ct_image_data_size(uint32_t width, uint32_t height, vx_df_image format)
+{
+    return (size_t)width * height * ct_image_bits_per_pixel(format) / 8;
+}
+
+#ifdef DEBUG_CT_IMAGE
+static void ct_print_image(CT_Image img)
+{
+    printf("CT_Image 0x%p:\n", img);
+    if (img)
+    {
+        printf("\t width       = %d\n", img->width);
+        printf("\t height      = %d\n", img->height);
+        printf("\t stride      = %d\n", img->stride);
+        printf("\t format      = DF_IMAGE(%.*s)\n", sizeof(img->format), &img->format);
+        printf("\t roi.x       = %d\n", img->roi.x);
+        printf("\t roi.y       = %d\n", img->roi.y);
+        printf("\t roi.width   = %d\n", img->roi.width);
+        printf("\t roi.height  = %d\n", img->roi.height);
+        printf("\t data        = 0x%p\n", img->data.y);
+        printf("\t data_begin_ = 0x%p\n", img->data_begin_);
+        printf("\t refcount_   = 0x%p (%u)\n", img->refcount_, img->refcount_ ? *img->refcount_ : 0);
+    }
+    printf("\n");
+    fflush(stdout);
+}
+#endif
+
+static void ct_image_addref(CT_Image img)
+{
+    if (img->refcount_)
+        *img->refcount_ += 1;
+}
+
+static uint32_t ct_image_removeref(CT_Image img)
+{
+    if (img->refcount_)
+        return --*img->refcount_;
+    else
+        return (uint32_t)(-1);
+}
+
+static void ct_release_image(CT_Image* img)
+{
+    if (!img || !*img) return;
+
+#ifdef DEBUG_CT_IMAGE
+    printf("RELEASING: "); ct_print_image(*img);
+#endif
+
+    if ((*img)->data.u32 && (*img)->refcount_) // if refcount_ is NULL then data is not ours
+    {
+        if (ct_image_removeref(*img) == 0)
+        {
+            ct_free_mem((*img)->data_begin_);
+        }
+        (*img)->data.u32 = 0;
+        (*img)->data_begin_ = 0;
+        (*img)->refcount_ = 0;
+    }
+    ct_free_mem(*img);
+    *img = 0;
+}
+
+static CT_Image ct_allocate_image_hdr_impl(uint32_t width, uint32_t height, uint32_t step, vx_df_image format, int allocate_data)
+{
+    CT_Image image;
+
+    CT_ASSERT_(return 0, step >= width);
+
+    image = (CT_Image)ct_alloc_mem(sizeof(*image));
+    CT_ASSERT_(return 0, image); // out of memory
+
+    image->data.u32    = 0;
+    image->data_begin_ = 0;
+    image->refcount_   = 0;
+    image->width  = width;
+    image->height = height;
+    image->stride = step;
+    image->format = format;
+    image->roi.x = 0;
+    image->roi.y = 0;
+    image->roi.width = width;
+    image->roi.height = height;
+
+    CT_RegisterForGarbageCollection(image, (CT_ObjectDestructor)ct_release_image, CT_GC_IMAGE);
+
+    if (allocate_data)
+    {
+        uint8_t* bytes;
+        size_t memory_size = ct_image_data_size(width, height, format) + sizeof(uint32_t) * 2;
+
+        bytes = (uint8_t*)ct_alloc_mem(memory_size);
+        CT_ASSERT_(return 0, bytes); // out of memory
+        ct_memset(bytes, 153, memory_size); // fill with some "magic" value
+        image->data_begin_ = bytes;
+        image->refcount_ = (uint32_t*)( (((size_t)bytes) + sizeof(uint32_t) - 1) & ~((size_t)(sizeof(uint32_t) - 1)) ); // align ptr to 4 bytes
+        *image->refcount_ = 1;
+        image->data.u32 = image->refcount_ + 1;
+    }
+
+    return image;
+}
+
+CT_Image ct_allocate_image(uint32_t width, uint32_t height, vx_df_image format)
+{
+    CT_Image image;
+
+    switch(format)
+    {
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            CT_ASSERT_(return 0, height % 2 == 0); // height must be even
+            break;
+        case VX_DF_IMAGE_UYVY:
+        case VX_DF_IMAGE_YUYV:
+            CT_ASSERT_(return 0, width % 2 == 0); // width must be even
+            break;
+    };
+
+    image = ct_allocate_image_hdr_impl(width, height, width, format, 1);
+
+#ifdef DEBUG_CT_IMAGE
+    printf("ALLOCATED: "); ct_print_image(image);
+#endif
+
+    return image;
+}
+
+CT_Image ct_get_image_roi(CT_Image img, CT_Rect roi)
+{
+    uint32_t bpp;
+    CT_Image image;
+
+    CT_ASSERT_(return 0, img);
+    CT_ASSERT_(return 0, img->data.u32);
+
+    CT_ASSERT_(return 0, roi.x + roi.width  <= img->width);
+    CT_ASSERT_(return 0, roi.y + roi.height <= img->height);
+
+    switch(img->format) // not sure if roi for multi-plane formats is needed at all
+    {
+        case VX_DF_IMAGE_UYVY:
+        case VX_DF_IMAGE_YUYV:
+            CT_ASSERT_(return 0, roi.width % 2 == 0 && roi.x % 2 == 0); // width must be even
+            break;
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+        case VX_DF_IMAGE_YUV4:
+        case VX_DF_IMAGE_IYUV:
+            // do not support roi on multi-plane formats
+            CT_ASSERT_(return 0, 0);
+            break;
+    };
+
+    bpp = ct_image_bits_per_pixel(img->format);
+    image = ct_allocate_image_hdr_impl(roi.width, roi.height, img->stride, img->format, 0);
+
+    if (image)
+    {
+        image->roi.x = img->roi.x + roi.x;
+        image->roi.y = img->roi.y + roi.y;
+        image->roi.width  = img->roi.width;
+        image->roi.height = img->roi.height;
+
+        ct_image_addref(img);
+        image->data_begin_ = img->data_begin_;
+        image->refcount_   = img->refcount_;
+        image->data.y      = img->data.y + (img->stride * roi.y + roi.x) * bpp / 8;
+    }
+
+#ifdef DEBUG_CT_IMAGE
+    printf("ALLOCATED ROI: "); ct_print_image(image);
+#endif
+
+    return image;
+}
+
+CT_Image ct_allocate_image_hdr(uint32_t width, uint32_t height,  uint32_t stride, vx_df_image format, void* data)
+{
+    CT_Image image = ct_allocate_image_hdr_impl(width, height, stride, format, 0);
+
+    if (image) image->data.y = (uint8_t*)data;
+
+#ifdef DEBUG_CT_IMAGE
+    printf("ALLOCATED HDR: "); ct_print_image(image);
+#endif
+
+    return image;
+}
+
+CT_Image ct_get_image_roi_(CT_Image img, uint32_t x_start, uint32_t y_start, uint32_t width, uint32_t height)
+{
+    CT_Rect roi = { x_start, y_start, width, height };
+    return ct_get_image_roi(img, roi);
+}
+
+void ct_adjust_roi(CT_Image img, int left, int top, int right, int bottom)
+{
+    int new_x, new_y, new_width, new_height;
+    ASSERT(img);
+
+    // not very accurate with overflows, but should work for normal images
+    new_x = img->roi.x + left;
+    new_y = img->roi.y + top;
+    new_width  = img->width  - left - right;
+    new_height = img->height - top  - bottom;
+
+    if (new_x < 0 || new_y < 0 || (uint32_t)(new_x + new_width) > img->roi.width || (uint32_t)(new_y + new_height) > img->roi.height)
+    {
+        FAIL("Invalid ROI adjustment");
+    }
+    else
+    {
+        img->data.y = img->data.y + (img->stride * top + left) * ct_image_bits_per_pixel(img->format) / 8;
+        img->roi.x  = (uint32_t)new_x;
+        img->roi.y  = (uint32_t)new_y;
+        img->width  = (uint32_t)new_width;
+        img->height = (uint32_t)new_height;
+    }
+}
+
+CT_Image ct_read_image(const char* fileName, int dcn)
+{
+    FILE* f = 0;
+    size_t sz;
+    char* buf = 0;
+    CT_Image image = 0;
+    char file[MAXPATHLENGTH];
+
+    if (!fileName)
+    {
+        CT_ADD_FAILURE("Image file name not specified\n");
+        return 0;
+    }
+
+    sz = snprintf(file, MAXPATHLENGTH, "%s/%s", ct_get_test_file_path(), fileName);
+    ASSERT_(return 0, (sz < MAXPATHLENGTH));
+
+    f = fopen(file, "rb");
+    if (!f)
+    {
+        CT_ADD_FAILURE("Can't open image file: %s\n", fileName);
+        return 0;
+    }
+
+    fseek(f, 0, SEEK_END);
+    sz = ftell(f);
+    if( sz > 0 )
+    {
+        buf = (char*)ct_alloc_mem(sz);
+        fseek(f, 0, SEEK_SET);
+        if( fread(buf, 1, sz, f) == sz )
+        {
+            image = ct_read_bmp((unsigned char*)buf, (int)sz, dcn);
+        }
+    }
+
+    ct_free_mem(buf);
+    fclose(f);
+
+    if(!image)
+        CT_ADD_FAILURE("Can not read image from \"%s\"", fileName);
+
+    return image;
+}
+
+void ct_write_image(const char* fileName, CT_Image image)
+{
+    char* dotpos;
+    int result = -1;
+    size_t size;
+    char file[MAXPATHLENGTH];
+
+    if (fileName)
+    {
+        size = snprintf(file, MAXPATHLENGTH, "%s/%s", ct_get_test_file_path(), fileName);
+        ASSERT(size < MAXPATHLENGTH);
+
+        dotpos = strrchr(file, '.');
+        if(dotpos &&
+           (strcmp(dotpos, ".bmp") == 0 ||
+            strcmp(dotpos, ".BMP") == 0))
+            result = ct_write_bmp(file, image);
+        if( result < 0 )
+            CT_ADD_FAILURE("Can not write image to \"%s\"", fileName);
+    }
+    else
+    {
+        CT_ADD_FAILURE("Image name is not specified (NULL)");
+    }
+}
+
+static
+int own_elem_size(vx_df_image format, vx_uint32 plane)
+{
+    int channel_step_x = 0;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+        channel_step_x = 1;
+        break;
+
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+        channel_step_x = 2;
+        break;
+
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGBX:
+        channel_step_x = 4;
+        break;
+
+    case VX_DF_IMAGE_RGB:
+        channel_step_x = 3;
+        break;
+
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY:
+        channel_step_x = 2;
+        break;
+
+    case VX_DF_IMAGE_IYUV:
+    case VX_DF_IMAGE_YUV4:
+        channel_step_x = 1;
+        break;
+
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21:
+        channel_step_x = (0 == plane) ? 1 : 2;
+        break;
+
+    default:
+        channel_step_x = 0;
+    }
+
+    return channel_step_x;
+}
+
+CT_Image ct_image_from_vx_image_impl(vx_image vximg, const char* func, const char* file, int line)
+{
+    vx_uint32      vx_width;
+    vx_uint32      vx_height;
+    vx_df_image    vx_format;
+    CT_Image       ctimg;
+
+    ASSERT_VX_OBJECT_AT_(return 0, vximg, VX_TYPE_IMAGE, func, file, line);
+
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(vximg, VX_IMAGE_WIDTH,  &vx_width,  sizeof(vx_width)),  func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(vximg, VX_IMAGE_HEIGHT, &vx_height, sizeof(vx_height)), func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(vximg, VX_IMAGE_FORMAT, &vx_format, sizeof(vx_format)), func, file, line);
+
+    ctimg = ct_allocate_image(vx_width, vx_height, vx_format);
+    ASSERT_AT_(return 0, NULL != ctimg, func, file, line);
+    return (CT_Image)ct_image_copy_impl(ctimg, vximg, COPY_VX_IMAGE_TO_CT_IMAGE, func, file, line);
+}
+
+vx_image ct_image_to_vx_image_impl(CT_Image ctimg, vx_context context, const char* func, const char* file, int line)
+{
+    int width  = ctimg->width;
+    int height = ctimg->height;
+    int format = ctimg->format;
+    vx_image vximg = NULL;
+
+    vximg = vxCreateImage(context, width, height, format);
+    ASSERT_VX_OBJECT_AT_(return 0, vximg, VX_TYPE_IMAGE, func, file, line);
+
+    return (vx_image)ct_image_copy_impl(ctimg, vximg, COPY_CT_IMAGE_TO_VX_IMAGE, func, file, line);
+}
+
+void *ct_image_copy_impl(CT_Image ctimg, vx_image vximg, CT_ImageCopyDirection dir, const char* func, const char* file, int line)
+{
+    vx_uint32      x;
+    vx_uint32      y;
+    vx_uint32      plane;
+    vx_uint32      ct_nplanes;
+    vx_uint32      ct_elem_size;
+    vx_uint32      ct_width;
+    vx_uint32      ct_height;
+    vx_df_image    ct_format;
+    vx_uint32      vx_width;
+    vx_uint32      vx_height;
+    vx_df_image    vx_format;
+    vx_rectangle_t rect;
+
+    ASSERT_VX_OBJECT_AT_(return 0, vximg, VX_TYPE_IMAGE, func, file, line);
+    ASSERT_AT_(return 0, NULL != ctimg, func, file, line);
+
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(vximg, VX_IMAGE_WIDTH,  &vx_width,  sizeof(vx_width)),  func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(vximg, VX_IMAGE_HEIGHT, &vx_height, sizeof(vx_height)), func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(vximg, VX_IMAGE_FORMAT, &vx_format, sizeof(vx_format)), func, file, line);
+
+    ct_width   = ctimg->width;
+    ct_height  = ctimg->height;
+    ct_format  = ctimg->format;
+    ct_nplanes = ct_get_num_planes(ct_format);
+
+    ASSERT_AT_(return 0, ct_width  == vx_width,  func, file, line);
+    ASSERT_AT_(return 0, ct_height == vx_height, func, file, line);
+    ASSERT_AT_(return 0, ct_format == vx_format, func, file, line);
+
+    rect.start_x = 0;
+    rect.start_y = 0;
+    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir) {
+	    rect.end_x   = ct_width;
+	    rect.end_y   = ct_height;
+    } else {
+	    rect.end_x   = vx_width;
+	    rect.end_y   = vx_height;
+    }
+
+    for (plane = 0; plane < ct_nplanes; plane++)
+    {
+        vx_imagepatch_addressing_t addr = VX_IMAGEPATCH_ADDR_INIT;
+        vx_bitfield flags = VX_NOGAP_X;
+        vx_map_id map_id;
+        void* p_ct_base = ct_image_get_plane_base(ctimg, plane);
+        void* p_vx_base = 0;
+
+        ct_elem_size = own_elem_size(ct_format, plane);
+        vx_enum usage = COPY_CT_IMAGE_TO_VX_IMAGE == dir ? VX_WRITE_ONLY : VX_READ_ONLY;
+        ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxMapImagePatch(vximg, &rect, plane, &map_id, &addr, &p_vx_base, usage, VX_MEMORY_TYPE_HOST, flags), func, file, line);
+
+        for (y = 0; y < addr.dim_y; y += addr.step_y)
+        {
+            for (x = 0; x < addr.dim_x; x += addr.step_x)
+            {
+                switch (ct_format)
+                {
+                case VX_DF_IMAGE_U8:
+                {
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                        vx_ptr[0] = ct_ptr[0];
+                    else
+                        ct_ptr[0] = vx_ptr[0];
+                }
+                break;
+
+                case VX_DF_IMAGE_U16:
+                {
+                    vx_uint16* ct_ptr = (vx_uint16*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint16* vx_ptr = (vx_uint16*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                        vx_ptr[0] = ct_ptr[0];
+                    else
+                        ct_ptr[0] = vx_ptr[0];
+                }
+                break;
+
+                case VX_DF_IMAGE_S16:
+                {
+                    vx_int16* ct_ptr = (vx_int16*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_int16* vx_ptr = (vx_int16*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                        vx_ptr[0] = ct_ptr[0];
+                    else
+                        ct_ptr[0] = vx_ptr[0];
+                }
+                break;
+
+                case VX_DF_IMAGE_U32:
+                {
+                    vx_uint32* ct_ptr = (vx_uint32*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint32* vx_ptr = (vx_uint32*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                        vx_ptr[0] = ct_ptr[0];
+                    else
+                        ct_ptr[0] = vx_ptr[0];
+                }
+                break;
+
+                case VX_DF_IMAGE_S32:
+                {
+                    vx_int32* ct_ptr = (vx_int32*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_int32* vx_ptr = (vx_int32*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                        vx_ptr[0] = ct_ptr[0];
+                    else
+                        ct_ptr[0] = vx_ptr[0];
+                }
+                break;
+
+                case VX_DF_IMAGE_RGB:
+                {
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        vx_ptr[0] = ct_ptr[0];
+                        vx_ptr[1] = ct_ptr[1];
+                        vx_ptr[2] = ct_ptr[2];
+                    }
+                    else
+                    {
+                        ct_ptr[0] = vx_ptr[0];
+                        ct_ptr[1] = vx_ptr[1];
+                        ct_ptr[2] = vx_ptr[2];
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_RGBX:
+                {
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        vx_ptr[0] = ct_ptr[0];
+                        vx_ptr[1] = ct_ptr[1];
+                        vx_ptr[2] = ct_ptr[2];
+                        vx_ptr[3] = ct_ptr[3];
+                    }
+                    else
+                    {
+                        ct_ptr[0] = vx_ptr[0];
+                        ct_ptr[1] = vx_ptr[1];
+                        ct_ptr[2] = vx_ptr[2];
+                        ct_ptr[3] = vx_ptr[3];
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_YUYV:
+                {
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        vx_ptr[0] = ct_ptr[0];
+                        vx_ptr[1] = ct_ptr[1];
+                    }
+                    else
+                    {
+                        ct_ptr[0] = vx_ptr[0];
+                        ct_ptr[1] = vx_ptr[1];
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_UYVY:
+                {
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        vx_ptr[0] = ct_ptr[0];
+                        vx_ptr[1] = ct_ptr[1];
+                    }
+                    else
+                    {
+                        ct_ptr[0] = vx_ptr[0];
+                        ct_ptr[1] = vx_ptr[1];
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_NV12:
+                case VX_DF_IMAGE_NV21:
+                {
+                    vx_uint32 stride = (0 == plane) ? ctimg->stride : ctimg->width / 2;
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * stride + x);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        if (0 == plane)
+                            vx_ptr[0] = ct_ptr[0];
+                        else
+                        {
+                            vx_ptr[0] = ct_ptr[0];
+                            vx_ptr[1] = ct_ptr[1];
+                        }
+                    }
+                    else
+                    {
+                        if (0 == plane)
+                            ct_ptr[0] = vx_ptr[0];
+                        else
+                        {
+                            ct_ptr[0] = vx_ptr[0];
+                            ct_ptr[1] = vx_ptr[1];
+                        }
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_IYUV:
+                {
+                    vx_uint32 stride = (0 == plane) ? ctimg->stride : ctimg->width / 2;
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * stride / addr.step_y + x / addr.step_x);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        vx_ptr[0] = ct_ptr[0];
+                    }
+                    else
+                    {
+                        ct_ptr[0] = vx_ptr[0];
+                    }
+                }
+                break;
+
+                case VX_DF_IMAGE_YUV4:
+                {
+                    vx_uint8* ct_ptr = (vx_uint8*)((vx_uint8*)p_ct_base + y * ctimg->stride * ct_elem_size + x * ct_elem_size);
+                    vx_uint8* vx_ptr = (vx_uint8*)vxFormatImagePatchAddress2d(p_vx_base, x, y, &addr);
+                    if (COPY_CT_IMAGE_TO_VX_IMAGE == dir)
+                    {
+                        vx_ptr[0] = ct_ptr[0];
+                    }
+                    else
+                    {
+                        ct_ptr[0] = vx_ptr[0];
+                    }
+                }
+                break;
+
+                default:
+                    FAIL_(return 0, "unexpected image format: (%.4s)", ct_format);
+                    break;
+                } /* switch format */
+            } /* for tst_addr.dim_x */
+        } /* for tst_addr.dim_y */
+
+        ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxUnmapImagePatch(vximg, map_id), func, file, line);
+    } /* for nplanes */
+
+    return (COPY_CT_IMAGE_TO_VX_IMAGE == dir ? (void*)vximg : (void*)ctimg);
+}
+
+/*
+    wrap_half_modulo: specifies if the smallest value follows the biggest (e.g. 255 + 1 == 0 or not)
+    0            = default - half of data type range
+    (uint32_t)-1 = no wrap
+    otherwise    = half of actual data range
+*/
+int ct_assert_eq_ctimage_impl(CT_Image expected, CT_Image actual, uint32_t threshold, uint32_t wrap_modulo,
+                                const char* expected_str, const char* actual_str,
+                                const char* func, const char* file, int line)
+
+{
+    uint32_t wrap_half_modulo = wrap_modulo/2;
+    uint32_t i,j;
+    uint32_t max_diff, max_x, max_y, vale, vala, diff_pixels;
+    max_diff = max_x = max_y = vale = vala = diff_pixels = 0;
+    if (!expected && !actual) return 1; // NULL == NULL, lets pass
+
+    if (!expected || !actual)
+    {
+        if (actual)
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\tActual: NULL != %p", func, file, line, expected_str, actual_str, actual);
+        else
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\tActual: %p != NULL", func, file, line, expected_str, actual_str, expected);
+        return 0; // fail
+    }
+
+    if (expected->format != actual->format || expected->width  != actual->width || expected->height != actual->height)
+    {
+        CT_RecordFailureAtFormat("Expected: %s\n\t\twhich is %ux%u %.4s image\n\t"
+                                 "Actual:   %s\n\t\tWhich is %ux%u %.4s image",
+                                    func, file, line,
+                                    expected_str, (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                    actual_str, (unsigned)actual->width, (unsigned)actual->height, &actual->format);
+        return 0; // fail
+    }
+
+#define FIND_MAX_DIFF_SIMPLE(eptr, aptr)                                                        \
+    {                                                                                           \
+        for (i = 0; i < expected->height; ++i)                                                  \
+            for (j = 0; j < expected->width; ++j)                                               \
+            {                                                                                   \
+                uint32_t diff = eptr[i * expected->stride + j] > aptr[i * actual->stride + j]   \
+                              ? eptr[i * expected->stride + j] - aptr[i * actual->stride + j]   \
+                              : aptr[i * actual->stride + j] - eptr[i * expected->stride + j];  \
+                if (diff > wrap_half_modulo) diff = (uint32_t)(2 * wrap_half_modulo - diff);    \
+                if (diff > max_diff)                                                            \
+                {                                                                               \
+                    max_diff = diff;                                                            \
+                    max_y = i;                                                                  \
+                    max_x = j;                                                                  \
+                    vale = eptr[i * expected->stride + j];                                      \
+                    vala = aptr[i * actual->stride + j];                                        \
+                }                                                                               \
+                if (diff > threshold)                                                           \
+                    ++diff_pixels;                                                              \
+            }                                                                                   \
+    }
+
+    if (expected->format == VX_DF_IMAGE_U8)
+    {
+        if (!wrap_half_modulo) wrap_half_modulo = 1u << 7;
+        FIND_MAX_DIFF_SIMPLE(expected->data.y, actual->data.y)
+    }
+    else if (expected->format == VX_DF_IMAGE_U16)
+    {
+        if (!wrap_half_modulo) wrap_half_modulo = 1u << 15;
+        FIND_MAX_DIFF_SIMPLE(expected->data.u16, actual->data.u16)
+    }
+    else if (expected->format == VX_DF_IMAGE_S16)
+    {
+        if (!wrap_half_modulo) wrap_half_modulo = 1u << 15;
+        FIND_MAX_DIFF_SIMPLE(expected->data.s16, actual->data.s16)
+    }
+    else if (expected->format == VX_DF_IMAGE_U32)
+    {
+        if (!wrap_half_modulo) wrap_half_modulo = 1u << 31;
+        FIND_MAX_DIFF_SIMPLE(expected->data.u32, actual->data.u32)
+    }
+    else if (expected->format == VX_DF_IMAGE_S32)
+    {
+        if (!wrap_half_modulo) wrap_half_modulo = 1u << 31;
+        FIND_MAX_DIFF_SIMPLE(expected->data.s32, actual->data.s32)
+    }
+    else
+    {
+        // skip check
+    }
+
+    if (expected->format == VX_DF_IMAGE_U8 || expected->format == VX_DF_IMAGE_U16 || expected->format == VX_DF_IMAGE_U32)
+    {
+        if (max_diff > threshold)
+        {
+            if (threshold == 0)
+                CT_RecordFailureAtFormat("Testing (%s) image to be exactly equal to (%s)\n\t"
+                                         "\t%ux%u %.4s images\n\t"
+                                         "Max difference (%u) is found at point [x = %u, y = %u]:\n\t"
+                                         "\tExpected: %u\n\t"
+                                         "\tActual:   %u\n\t"
+                                         "Totally %u pixels with different values",
+                                         func, file, line, actual_str, expected_str,
+                                         (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                         max_diff, max_x, max_y, vale, vala, diff_pixels);
+            else
+                CT_RecordFailureAtFormat("Testing the difference between (%s) and (%s) images to be not greater than %u\n\t"
+                                         "\t%ux%u %.4s images\n\t"
+                                         "Max difference (%u) is found at point [x = %u, y = %u]:\n\t"
+                                         "\tExpected: %u\n\t"
+                                         "\tActual:   %u\n\t"
+                                         "Totally %u pixels exceeding the given error",
+                                         func, file, line, actual_str, expected_str, threshold,
+                                         (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                         max_diff, max_x, max_y, vale, vala, diff_pixels);
+
+            return 0; // fail
+        }
+        return 1; // pass
+    }
+
+    if (expected->format == VX_DF_IMAGE_S16 || expected->format == VX_DF_IMAGE_S32)
+    {
+        if (max_diff > threshold)
+        {
+            if (threshold == 0)
+                CT_RecordFailureAtFormat("Testing (%s) image to be exactly equal to (%s)\n\t"
+                                         "\t%ux%u %.4s images\n\t"
+                                         "Max difference (%u) is found at point [x = %u, y = %u]:\n\t"
+                                         "\tExpected: %d\n\t"
+                                         "\tActual:   %d\n\t"
+                                         "Totally %u pixels with different values",
+                                         func, file, line, actual_str, expected_str,
+                                         (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                         max_diff, max_x, max_y, (int32_t)vale, (int32_t)vala, diff_pixels);
+            else
+                CT_RecordFailureAtFormat("Testing the difference between (%s) and (%s) images to be not greater than %u\n\t"
+                                         "\t%ux%u %.4s images\n\t"
+                                         "Max difference (%u) is found at point [x = %u, y = %u]:\n\t"
+                                         "\tExpected: %d\n\t"
+                                         "\tActual:   %d\n\t"
+                                         "Totally %u pixels exceeding the given error",
+                                         func, file, line, actual_str, expected_str, threshold,
+                                         (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                         max_diff, max_x, max_y, (int32_t)vale, (int32_t)vala, diff_pixels);
+
+            return 0; // fail
+        }
+        return 1;// pass
+    }
+
+    // for now check other formats as binary blobs
+    if (expected->stride != expected->width || actual->stride != actual->width)
+    {
+        // no ROI support for now
+        CT_RecordFailureAtFormat("Can't compare (%s) with (%s) because ROI comparison is not implemented for %.4s image format",
+            func, file, line, expected_str, actual_str, &expected->format);
+        return 0; // fail
+    }
+
+    {
+        uint32_t size = (uint32_t)ct_image_data_size(expected->width, expected->height, expected->format);
+        max_diff = max_x = max_y = vale = vala = diff_pixels = 0;
+        if (!wrap_half_modulo) wrap_half_modulo = 1u << 7;
+        for (i = 0; i < size; ++i)
+        {
+            int val = expected->data.y[i] - actual->data.y[i];
+            if (val < 0) val = -val;
+
+            if ((uint32_t)val > wrap_half_modulo) val = (int)(2 * wrap_half_modulo - val);
+
+            if ((uint32_t)val > max_diff)
+            {
+                max_diff = (uint32_t)val;
+                max_x = i;
+                vale = expected->data.y[i];
+                vala = actual->data.y[i];
+            }
+            if ((uint32_t)val > threshold)
+                ++diff_pixels;
+        }
+
+        if (max_diff > threshold)
+        {
+            if (threshold == 0)
+                CT_RecordFailureAtFormat("Testing (%s) image to be exactly equal to (%s)\n\t"
+                                         "\t%ux%u %.4s images\n\t"
+                                         "Max difference (%u) is found at offset %u:\n\t"
+                                         "\tExpected: %u\n\t"
+                                         "\tActual:   %u\n\t"
+                                         "Totally %u bytes with different values",
+                                         func, file, line, actual_str, expected_str,
+                                         (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                         max_diff, max_x, vale, vala, diff_pixels);
+            else
+                CT_RecordFailureAtFormat("Testing the difference between (%s) and (%s) images to be not greater than %u\n\t"
+                                         "\t%ux%u %.4s images\n\t"
+                                         "Max difference (%u) is found at offset %u:\n\t"
+                                         "\tExpected: %u\n\t"
+                                         "\tActual:   %u\n\t"
+                                         "Totally %u bytes exceeding the given error",
+                                         func, file, line, actual_str, expected_str, threshold,
+                                         (unsigned)expected->width, (unsigned)expected->height, &expected->format,
+                                         max_diff, max_x, vale, vala, diff_pixels);
+
+            return 0; // fail
+        }
+    }
+
+    return 1;
+}
+
+
+uint8_t* ct_image_data_ptr_8u(CT_Image image, uint32_t x, uint32_t y)
+{
+    uint8_t* ptr = &image->data.y[y * image->stride + x];
+    return ptr;
+}
+
+uint8_t ct_image_data_replicate_8u(CT_Image image, int32_t x, int32_t y)
+{
+    uint8_t* ptr = NULL;
+
+    EXPECT(image->width > 0 && image->height > 0);
+    if (x < 0) x = 0;
+    if (x >= (int)image->width) x = image->width - 1;
+    if (y < 0) y = 0;
+    if (y >= (int)image->height) y = image->height - 1;
+    ptr = &image->data.y[y * image->stride + x];
+    return *ptr;
+}
+
+uint8_t ct_image_data_constant_8u(CT_Image image, int32_t x, int32_t y, vx_uint32 constant_value)
+{
+    uint8_t* ptr = NULL;
+
+    if (x < 0 || x >= (int)image->width || y < 0 || y >= (int)image->height)
+        return (uint8_t)constant_value;
+    ptr = &image->data.y[y * image->stride + x];
+    return *ptr;
+}
+
+#ifndef MAX_DUMP_SIZE
+#define MAX_DUMP_SIZE 5
+#endif
+
+void ct_dump_image_info_ex(CT_Image image, int dump_width, int dump_height)
+{
+    int x, y;
+    const char* strend = "\n";
+
+    int max_y = (int)image->height, max_x = (int)image->width;
+    if (dump_height > 0 && max_y > dump_height) max_y = dump_height;
+    if (dump_width > 0 && max_x > dump_width) max_x = dump_width;
+
+    if(dump_width < 0)
+        max_x = CT_MIN(max_x, MAX_DUMP_SIZE);
+    if(dump_height < 0)
+        max_y = CT_MIN(max_y, MAX_DUMP_SIZE);
+
+    if(max_x < (int)image->width)
+        strend = " ...\n";
+
+    printf("CT_Image %p DF_IMAGE(%.*s): %dx%d\n",
+            image, (int)sizeof(image->format), (char*)&image->format,
+            image->width, image->height);
+
+    if (image->format == VX_DF_IMAGE_U8)
+    {
+        for (y = 0; y < max_y; ++y)
+        {
+            for (x = 0; x < max_x; ++x)
+            {
+                uint8_t* ptr = ct_image_data_ptr_8u(image, x, y);
+                printf("%3d ", (int)*ptr);
+            }
+            printf("%s", strend);
+        }
+    }
+    else if (image->format == VX_DF_IMAGE_S16)
+    {
+        for (y = 0; y < max_y; ++y)
+        {
+            for (x = 0; x < max_x; ++x)
+            {
+                int16_t* ptr = CT_IMAGE_DATA_PTR_16S(image, x, y);
+                printf("%6d ", (int)*ptr); // -32768..32767
+            }
+            printf("%s", strend);
+        }
+    }
+    else if (image->format == VX_DF_IMAGE_U32)
+    {
+        for (y = 0; y < max_y; ++y)
+        {
+            for (x = 0; x < max_x; ++x)
+            {
+                uint32_t* ptr = CT_IMAGE_DATA_PTR_32U(image, x, y);
+                printf("%16d ", (int)*ptr);
+            }
+            printf("%s", strend);
+        }
+    }
+    else if (image->format == VX_DF_IMAGE_RGB)
+    {
+        for (y = 0; y < max_y; ++y)
+        {
+            for (x = 0; x < max_x; ++x)
+            {
+                uint8_t* ptr = (uint8_t*)CT_IMAGE_DATA_PTR_RGB(image, x, y);
+                printf("(%3d,%3d,%3d) ", (int)ptr[0], (int)ptr[1], (int)ptr[2]);
+            }
+            printf("%s", strend);
+        }
+    }
+    else if (image->format == VX_DF_IMAGE_RGBX)
+    {
+        for (y = 0; y < max_y; ++y)
+        {
+            for (x = 0; x < max_x; ++x)
+            {
+                uint8_t* ptr = (uint8_t*)CT_IMAGE_DATA_PTR_RGBX(image, x, y);
+                printf("(%3d,%3d,%3d,%3d) ", (int)ptr[0], (int)ptr[1], (int)ptr[2], (int)ptr[3]);
+            }
+            printf("%s", strend);
+        }
+    }
+    else
+    {
+        size_t sz = ct_image_data_size(image->width, image->height, image->format);
+        size_t i = 0, j = 0;
+        sz = CT_MIN(sz, (size_t)(max_x*max_y));
+        for (i = 0; i < sz; i += 16)
+        {
+            for (j = 0; j < 16 && i + j < sz; j++)
+            {
+                printf("%3d ", image->data.y[i + j]);
+            }
+            printf("\n");
+        }
+    }
+}
+
+void ct_fill_ct_image_random(CT_Image image, uint64_t* seed, int a, int b)
+{
+    vx_df_image format = image->format;
+    uint32_t p, x, y, nplanes=1, width[3] = {image->width, 0, 0}, height[3] = {image->height, 0, 0};
+    uint32_t stride[3] = {ct_stride_bytes(image), 0, 0};
+
+    if( format == VX_DF_IMAGE_RGB || format == VX_DF_IMAGE_RGBX || format == VX_DF_IMAGE_YUYV || format == VX_DF_IMAGE_UYVY )
+    {
+        width[0] *= format == VX_DF_IMAGE_RGB ? 3 : format == VX_DF_IMAGE_RGBX ? 4 : 2;
+        format = VX_DF_IMAGE_U8;
+    }
+    else if( format == VX_DF_IMAGE_YUV4 || format == VX_DF_IMAGE_IYUV )
+    {
+        uint32_t scale = format == VX_DF_IMAGE_IYUV ? 2 : 1;
+        nplanes = 3;
+        width[1] = width[2] = width[0]/scale;
+        height[1] = height[2] = height[0]/scale;
+        stride[1] = stride[2] = stride[0]/scale;
+        format = VX_DF_IMAGE_U8;
+    }
+    else if( format == VX_DF_IMAGE_NV12 || format == VX_DF_IMAGE_NV21 )
+    {
+        nplanes = 2;
+        width[1] = width[0];
+        height[1] = height[0]/2;
+        stride[1] = stride[0];
+        format = VX_DF_IMAGE_U8;
+    }
+
+    ASSERT( format == VX_DF_IMAGE_U8 ||
+            format == VX_DF_IMAGE_U16 || format == VX_DF_IMAGE_S16 ||
+            format == VX_DF_IMAGE_U32 || format == VX_DF_IMAGE_S32);
+
+#undef CASE_FILL_RNG
+#define CASE_FILL_RNG(format, type, cast_macro) \
+    case format: \
+    { \
+    uint8_t* ptr = image->data.y; \
+    for( p = 0; p < nplanes; p++ ) \
+    for( y = 0; y < height[p]; y++, ptr += stride[p] ) \
+    { \
+        type* tptr = (type*)ptr; \
+        for( x = 0; x < width[p]; x++ ) \
+        { \
+            int val = CT_RNG_NEXT_INT(*seed, a, b); \
+            tptr[x] = cast_macro(val); \
+        } \
+    } \
+    } \
+    break
+
+    switch( format )
+    {
+        CASE_FILL_RNG(VX_DF_IMAGE_U8, uint8_t, CT_CAST_U8);
+        CASE_FILL_RNG(VX_DF_IMAGE_U16, uint16_t, CT_CAST_U16);
+        CASE_FILL_RNG(VX_DF_IMAGE_S16, int16_t, CT_CAST_S16);
+        CASE_FILL_RNG(VX_DF_IMAGE_U32, uint32_t, CT_CAST_U32);
+        CASE_FILL_RNG(VX_DF_IMAGE_S32, int32_t, CT_CAST_S32);
+    default:
+        break;
+    }
+}
+
+CT_Image ct_allocate_ct_image_random(uint32_t width, uint32_t height,
+                                     vx_df_image format, uint64_t* seed, int a, int b)
+{
+    CT_Image image = ct_allocate_image(width, height, format);
+    if(image)
+        ct_fill_ct_image_random(image, seed, a, b);
+    return image;
+}
+
+
+uint32_t ct_get_num_planes(vx_df_image format)
+{
+    uint32_t nplanes = 0;
+
+    switch (format)
+    {
+    case VX_DF_IMAGE_U8:
+    case VX_DF_IMAGE_U16:
+    case VX_DF_IMAGE_S16:
+    case VX_DF_IMAGE_U32:
+    case VX_DF_IMAGE_S32:
+    case VX_DF_IMAGE_RGB:
+    case VX_DF_IMAGE_RGBX:
+    case VX_DF_IMAGE_YUYV:
+    case VX_DF_IMAGE_UYVY: nplanes = 1; break;
+
+    case VX_DF_IMAGE_NV12:
+    case VX_DF_IMAGE_NV21: nplanes = 2; break;
+
+    case VX_DF_IMAGE_YUV4:
+    case VX_DF_IMAGE_IYUV: nplanes = 3; break;
+
+    default:
+        CT_RecordFailure();
+        break;
+    }
+
+    return nplanes;
+}
+
+
+int ct_get_num_channels(vx_df_image format)
+{
+    switch (format)
+    {
+        case VX_DF_IMAGE_U8:
+        case VX_DF_IMAGE_U16:
+        case VX_DF_IMAGE_S16:
+        case VX_DF_IMAGE_U32:
+        case VX_DF_IMAGE_S32:
+            return 1;
+        case VX_DF_IMAGE_RGBX:
+            return 4;
+        case VX_DF_IMAGE_RGB:
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_YUV4:
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            return 3;
+    };
+    CT_RecordFailure();
+    return 0;
+}
+
+
+int ct_image_get_channel_step_x(CT_Image image, vx_enum channel)
+{
+    vx_df_image format = image->format;
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_U8:
+            return 1;
+        case VX_DF_IMAGE_U16:
+        case VX_DF_IMAGE_S16:
+            return 2;
+        case VX_DF_IMAGE_U32:
+        case VX_DF_IMAGE_S32:
+        case VX_DF_IMAGE_RGBX:
+            return 4;
+        case VX_DF_IMAGE_RGB:
+            return 3;
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            if (channel == VX_CHANNEL_Y)
+                return 2;
+            return 4;
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_YUV4:
+            return 1;
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            if (channel == VX_CHANNEL_Y)
+                return 1;
+            return 2;
+    };
+    CT_RecordFailure();
+    return 0;
+}
+
+
+int ct_image_get_channel_step_y(CT_Image image, vx_enum channel)
+{
+    vx_df_image format = image->format;
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_U8:
+            return image->stride;
+        case VX_DF_IMAGE_U16:
+        case VX_DF_IMAGE_S16:
+            return image->stride * 2;
+        case VX_DF_IMAGE_U32:
+        case VX_DF_IMAGE_S32:
+        case VX_DF_IMAGE_RGBX:
+            return image->stride * 4;
+        case VX_DF_IMAGE_RGB:
+            return image->stride * 3;
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            return image->stride * 2;
+        case VX_DF_IMAGE_IYUV:
+            if (channel == VX_CHANNEL_Y)
+                return image->stride;
+            return image->stride / 2;
+        case VX_DF_IMAGE_YUV4:
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            return image->stride;
+    };
+    CT_RecordFailure();
+    return 0;
+}
+
+
+int ct_image_get_channel_subsampling_x(CT_Image image, vx_enum channel)
+{
+    vx_df_image format = image->format;
+
+    if (channel == VX_CHANNEL_Y)
+        return 1;
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            return 2;
+    }
+
+    return 1;
+}
+
+
+int ct_image_get_channel_subsampling_y(CT_Image image, vx_enum channel)
+{
+    vx_df_image format = image->format;
+
+    if (channel == VX_CHANNEL_Y)
+        return 1;
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            return 2;
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            return 1;
+    }
+
+    return 1;
+}
+
+
+int ct_image_get_channel_plane(CT_Image image, vx_enum channel)
+{
+    vx_df_image format = image->format;
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_RGB:
+        case VX_DF_IMAGE_RGBX:
+            return 0;
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            if (channel == VX_CHANNEL_Y)
+                return 0;
+            return 1;
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_YUV4:
+      switch (channel)
+        {
+        case VX_CHANNEL_Y:
+          return 0;
+        case VX_CHANNEL_U:
+          return 1;
+        case VX_CHANNEL_V:
+              return 2;
+        default:
+          CT_FAIL_(return 0, "Invalid channel");
+        }
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            return 0;
+    }
+
+    CT_FAIL_(return 0, "Not implemented");
+}
+
+
+int ct_image_get_channel_component(CT_Image image, vx_enum channel)
+{
+    vx_df_image format = image->format;
+
+    switch (format)
+    {
+        case VX_DF_IMAGE_RGB:
+        case VX_DF_IMAGE_RGBX:
+        switch (channel)
+        {
+        case VX_CHANNEL_R:
+          return 0;
+        case VX_CHANNEL_G:
+          return 1;
+        case VX_CHANNEL_B:
+          return 2;
+        case VX_CHANNEL_A:
+          return 3;
+        default:
+          CT_FAIL_(return 0, "Invalid channel");
+        }
+        case VX_DF_IMAGE_NV12:
+        case VX_DF_IMAGE_NV21:
+            if (channel == VX_CHANNEL_Y)
+                return 0;
+            else if ((channel == VX_CHANNEL_U && format == VX_DF_IMAGE_NV12) ||
+                     (channel == VX_CHANNEL_V && format == VX_DF_IMAGE_NV21))
+                return 0;
+            else
+                return 1;
+            break;
+        case VX_DF_IMAGE_IYUV:
+        case VX_DF_IMAGE_YUV4:
+            return 0;
+            break;
+        case VX_DF_IMAGE_YUYV:
+        case VX_DF_IMAGE_UYVY:
+            if (channel == VX_CHANNEL_Y)
+                return (format == VX_DF_IMAGE_YUYV ? 0 : 1);
+            else
+                return (format == VX_DF_IMAGE_YUYV ? 1 : 0) + (channel == VX_CHANNEL_U ? 0 : 2);
+    }
+
+    CT_FAIL_(return 0, "Not implemented");
+}
+
+
+uint8_t* ct_image_get_plane_base(CT_Image ctimg, int plane)
+{
+    int format = ctimg->format;
+
+    if (plane == 0)
+        return ctimg->data.y;
+
+    if (format == VX_DF_IMAGE_NV12 || format == VX_DF_IMAGE_NV21)
+    {
+        if (plane == 1)
+            return ctimg->data.y + ctimg->stride * ctimg->height;
+    }
+    else if (format == VX_DF_IMAGE_YUV4)
+    {
+        if (plane == 1)
+            return ctimg->data.y + ctimg->stride * ctimg->height;
+        if (plane == 2)
+            return ctimg->data.y + ctimg->stride * ctimg->height * 2;
+    }
+    else if (format == VX_DF_IMAGE_IYUV)
+    {
+        if (plane == 1)
+            return ctimg->data.y + ctimg->stride * ctimg->height;
+        if (plane == 2)
+            return ctimg->data.y + ctimg->stride * ctimg->height + ctimg->stride * ctimg->height / 2 / 2;
+    }
+
+    return NULL;
+}
+
+
+CT_Image ct_image_create_clone(CT_Image image)
+{
+    CT_Image clone = NULL;
+    size_t sz = 0;
+    ASSERT_NO_FAILURE_(return NULL, clone = ct_allocate_image(image->width, image->height, image->format));
+
+    sz = ct_image_data_size(image->width, image->height, image->format);
+
+    memcpy(clone->data.y, image->data.y, sz);
+
+    return clone;
+}
+
+int ct_image_read_rect_S32(CT_Image img, int32_t *dst, int32_t sx, int32_t sy, int32_t ex, int32_t ey, vx_border_t border)
+{
+    int32_t width = (vx_int32)img->width, height = (vx_int32)img->height;
+    int32_t stride_y = ct_image_get_channel_step_y(img, VX_CHANNEL_0);
+    int32_t stride_x = ct_image_get_channel_step_x(img, VX_CHANNEL_0);
+    vx_df_image format = img->format;
+    const vx_uint8 *ptr = (const vx_uint8 *)img->data.y;
+    vx_int32 x, y;
+    vx_uint32 dest_index = 0;
+    int res = 1;
+
+    ASSERT_(return 0, format == VX_DF_IMAGE_U8); // Only 8U is supported
+
+    if (border.mode == VX_BORDER_REPLICATE)
+    {
+        for (y = sy; y <= ey; ++y)
+        {
+            int32_t y_ = y < 0 ? 0 : y >= height ? height - 1 : y;
+
+            for (x = sx; x <= ex; ++x, ++dest_index)
+            {
+                int32_t x_ = x < 0 ? 0 : x >= width ? width - 1 : x;
+
+                ((int32_t*)dst)[dest_index] = *(vx_uint8*)(ptr + y_*stride_y + x_*stride_x);
+            }
+        }
+    }
+    else if (border.mode == VX_BORDER_CONSTANT)
+    {
+        vx_uint32 cval = border.constant_value.U32;
+        for (y = sy; y <= ey; ++y)
+        {
+            int ccase_y = y < 0 || y >= height;
+
+            for (x = sx; x <= ex; ++x, ++dest_index)
+            {
+                int ccase = ccase_y || x < 0 || x >= width;
+
+                if( !ccase )
+                    ((int32_t*)dst)[dest_index] = *(vx_uint8*)(ptr + y*stride_y + x*stride_x);
+                else
+                    ((int32_t*)dst)[dest_index] = (int32_t)cval;
+            }
+        }
+    }
+    else if (border.mode == VX_BORDER_UNDEFINED)
+    {
+        for (y = sy; y <= ey; ++y)
+        {
+            int ccase_y = y < 0 || y >= height;
+
+            for (x = sx; x <= ex; ++x, ++dest_index)
+            {
+                int ccase = ccase_y || x < 0 || x >= width;
+
+                if (!ccase)
+                {
+                    ((int32_t*)dst)[dest_index] = *(vx_uint8*)(ptr + y*stride_y + x*stride_x);
+                }
+                else
+                {
+                    ((int32_t*)dst)[dest_index] = (int32_t)INT32_MIN;
+                    res = 0;
+                }
+            }
+        }
+    }
+    return res;
+}
diff --git a/test_engine/test_image.h b/test_engine/test_image.h
new file mode 100644
index 0000000..f00d161
--- /dev/null
+++ b/test_engine/test_image.h
@@ -0,0 +1,195 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __VX_CT_IMAGE_H__
+#define __VX_CT_IMAGE_H__
+
+#include <VX/vx.h>
+
+typedef enum CT_ImageCopyDirection_ {
+    COPY_CT_IMAGE_TO_VX_IMAGE = 0,
+    COPY_VX_IMAGE_TO_CT_IMAGE
+} CT_ImageCopyDirection;
+
+typedef struct CT_Rect_ {
+    uint32_t x;
+    uint32_t y;
+    uint32_t width;
+    uint32_t height;
+} CT_Rect;
+
+typedef struct CT_ImageHdr {
+    uint32_t   width;  // in pixels
+    uint32_t   height;
+    uint32_t   stride; // in pixels
+    vx_df_image  format;
+    CT_Rect    roi;    // stores top left corner offset and full size of parent image
+
+    union
+    {
+      uint8_t*  y;
+      uint16_t* u16;
+      int16_t*  s16;
+      uint32_t* u32;
+      int32_t*  s32;
+      struct { uint8_t r,g,b; }*     rgb;
+      struct { uint8_t y,u,v; }*     yuv;
+      struct { uint8_t r,g,b,x; }*   rgbx;
+      struct { uint8_t y0,u,y1,v; }* yuyv;
+      struct { uint8_t u,y0,v,y1; }* uyvy;
+    } data;
+
+    // private area
+    void* data_begin_;
+    uint32_t* refcount_;
+} *CT_Image;
+
+int ct_channels(vx_df_image format);
+uint32_t ct_stride_bytes(CT_Image image);
+uint32_t ct_image_bits_per_pixel(vx_df_image format);
+
+uint8_t* ct_image_get_plane_base(CT_Image img, int plane);
+int ct_image_get_channel_step_x(CT_Image image, vx_enum channel);
+int ct_image_get_channel_step_y(CT_Image image, vx_enum channel);
+int ct_image_get_channel_subsampling_x(CT_Image image, vx_enum channel);
+int ct_image_get_channel_subsampling_y(CT_Image image, vx_enum channel);
+int ct_image_get_channel_plane(CT_Image image, vx_enum channel);
+int ct_image_get_channel_component(CT_Image image, vx_enum channel);
+
+uint32_t ct_get_num_planes(vx_df_image format);
+int ct_get_num_channels(vx_df_image format);
+
+CT_Image ct_allocate_image(uint32_t width, uint32_t height, vx_df_image format);
+CT_Image ct_allocate_image_hdr(uint32_t width, uint32_t height, uint32_t stride, vx_df_image format, void* data);
+CT_Image ct_get_image_roi(CT_Image img, CT_Rect roi);
+CT_Image ct_get_image_roi_(CT_Image img, uint32_t x_start, uint32_t y_start, uint32_t width, uint32_t height);
+void ct_adjust_roi(CT_Image img, int left, int top, int right, int bottom);
+
+#if 1
+#define CT_IMAGE_DATA_PTR_8U(image, x, y_) &(image)->data.y[(y_) * (image)->stride + (x)]
+#else
+uint8_t* ct_image_data_ptr_8u(CT_Image image, uint32_t x, uint32_t y);
+#define CT_IMAGE_DATA_PTR_8U(image, x, y) ct_image_data_ptr_8u(image, x, y)
+#endif
+
+uint8_t ct_image_data_replicate_8u(CT_Image image, int32_t x, int32_t y);
+#define CT_IMAGE_DATA_REPLICATE_8U(image, x, y) ct_image_data_replicate_8u(image, x, y)
+
+uint8_t ct_image_data_constant_8u(CT_Image image, int32_t x, int32_t y, vx_uint32 constant_value);
+#define CT_IMAGE_DATA_CONSTANT_8U(image, x, y, constant_value) ct_image_data_constant_8u(image, x, y, constant_value)
+
+#define CT_IMAGE_DATA_PTR_16S(image, x, y) &(image)->data.s16[(y) * (image)->stride + (x)]
+
+#define CT_IMAGE_DATA_PTR_32U(image, x, y) &(image)->data.u32[(y) * (image)->stride + (x)]
+
+#define CT_IMAGE_DATA_PTR_RGB(image, x, y) &(image)->data.rgb[(y) * (image)->stride + (x)]
+#define CT_IMAGE_DATA_PTR_RGBX(image, x, y) &(image)->data.rgbx[(y) * (image)->stride + (x)]
+
+
+#define CT_FILL_IMAGE_8U(ret_error, image, op) \
+    ASSERT_(ret_error, image != NULL); \
+    ASSERT_(ret_error, image->format == VX_DF_IMAGE_U8); \
+    ASSERT_(ret_error, image->width > 0); \
+    ASSERT_(ret_error, image->height > 0); \
+    { \
+        uint32_t x, y; \
+        for (y = 0; y < image->height; y++) { \
+            for (x = 0; x < image->width; x++) { \
+                uint8_t* dst_data = CT_IMAGE_DATA_PTR_8U(image, x, y); (void)dst_data; \
+                op; \
+            } \
+        } \
+    }
+
+
+#define CT_FILL_IMAGE_16S(ret_error, image, op) \
+    ASSERT_(ret_error, image != NULL); \
+    ASSERT_(ret_error, image->format == VX_DF_IMAGE_S16); \
+    ASSERT_(ret_error, image->width > 0); \
+    ASSERT_(ret_error, image->height > 0); \
+    { \
+        uint32_t x, y; \
+        for (y = 0; y < image->height; y++) { \
+            for (x = 0; x < image->width; x++) { \
+                int16_t* dst_data = CT_IMAGE_DATA_PTR_16S(image, x, y); \
+                op; \
+            } \
+        } \
+    }
+
+#define CT_FILL_IMAGE_32U(ret_error, image, op) \
+    ASSERT_(ret_error, image != NULL); \
+    ASSERT_(ret_error, image->format == VX_DF_IMAGE_U32); \
+    ASSERT_(ret_error, image->width > 0); \
+    ASSERT_(ret_error, image->height > 0); \
+    { \
+        uint32_t x, y; \
+        for (y = 0; y < image->height; y++) { \
+            for (x = 0; x < image->width; x++) { \
+                uint32_t* dst_data = CT_IMAGE_DATA_PTR_32U(image, x, y); \
+                op; \
+            } \
+        } \
+    }
+
+
+CT_Image ct_read_image(const char* fileName, int dcn);
+void ct_write_image(const char* fileName, CT_Image image);
+
+#define ct_image_from_vx_image(vximg) ct_image_from_vx_image_impl(vximg, __FUNCTION__, __FILE__, __LINE__)
+CT_Image ct_image_from_vx_image_impl(vx_image vximg, const char* func, const char* file, int line);
+
+#define ct_image_to_vx_image(ctimg, context) ct_image_to_vx_image_impl(ctimg, context, __FUNCTION__, __FILE__, __LINE__)
+vx_image ct_image_to_vx_image_impl(CT_Image ctimg, vx_context context, const char* func, const char* file, int line);
+
+void *ct_image_copy_impl(CT_Image ctimg, vx_image vximg, CT_ImageCopyDirection dir, const char* func, const char* file, int line);
+
+#define ct_image_copyto_vx_image(vximg, ctimg) ct_image_copy_impl(ctimg, vximg, COPY_CT_IMAGE_TO_VX_IMAGE, __FUNCTION__, __FILE__, __LINE__)
+#define ct_image_copyfrom_vx_image(ctimg, vximg) ct_image_copy_impl(ctimg, vximg, COPY_VX_IMAGE_TO_CT_IMAGE, __FUNCTION__, __FILE__, __LINE__)
+
+#define EXPECT_EQ_CTIMAGE(expected, actual) ct_assert_eq_ctimage_impl(expected, actual, 0, (uint32_t)-1, #expected, #actual, __FUNCTION__, __FILE__, __LINE__)
+#define ASSERT_EQ_CTIMAGE(expected, actual)                                                                                     \
+    do { if (ct_assert_eq_ctimage_impl(expected, actual, 0, (uint32_t)-1, #expected, #actual, __FUNCTION__, __FILE__, __LINE__))\
+        {} else { CT_DO_FAIL; }} while(0)
+
+#define EXPECT_CTIMAGE_NEAR(expected, actual, threshold) ct_assert_eq_ctimage_impl(expected, actual, threshold, (uint32_t)-1, #expected, #actual, __FUNCTION__, __FILE__, __LINE__)
+#define ASSERT_CTIMAGE_NEAR(expected, actual, threshold)                                                                                \
+    do { if (ct_assert_eq_ctimage_impl(expected, actual, threshold, (uint32_t)-1, #expected, #actual, __FUNCTION__, __FILE__, __LINE__))\
+        {} else { CT_DO_FAIL; }} while(0)
+
+#define CTIMAGE_ALLOW_WRAP 0
+
+#define EXPECT_CTIMAGE_NEARWRAP(expected, actual, threshold, modulo) ct_assert_eq_ctimage_impl(expected, actual, threshold, modulo, #expected, #actual, __FUNCTION__, __FILE__, __LINE__)
+#define ASSERT_CTIMAGE_NEARWRAP(expected, actual, threshold, modulo)                                                                \
+    do { if (ct_assert_eq_ctimage_impl(expected, actual, threshold, modulo, #expected, #actual, __FUNCTION__, __FILE__, __LINE__))  \
+        {} else { CT_DO_FAIL; }} while(0)
+
+int ct_assert_eq_ctimage_impl(CT_Image expected, CT_Image actual, uint32_t threshold, uint32_t wrap_modulo,
+                                const char* expected_str, const char* actual_str,
+                                const char* func, const char* file, int line);
+
+void ct_dump_image_info_ex(CT_Image image, int dump_width, int dump_height);
+#define ct_dump_image_info(image) ct_dump_image_info_ex(image, -1, -1);
+
+void ct_fill_ct_image_random(CT_Image image, uint64_t* seed, int a, int b);
+CT_Image ct_allocate_ct_image_random(uint32_t width, uint32_t height, vx_df_image format, uint64_t* rng, int a, int b);
+
+CT_Image ct_image_create_clone(CT_Image image);
+
+int ct_image_read_rect_S32(CT_Image img, int32_t *dst, int32_t sx, int32_t sy, int32_t ex, int32_t ey, vx_border_t border);
+
+#endif // __VX_CT_IMAGE_H__
diff --git a/test_engine/test_list_helper.h b/test_engine/test_list_helper.h
new file mode 100644
index 0000000..5bf7f3e
--- /dev/null
+++ b/test_engine/test_list_helper.h
@@ -0,0 +1,31 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test.h"
+
+#undef CT_TESTCASE
+#define CT_TESTCASE(testcase) struct CT_TestCaseEntry* testcase##_register();
+#include "test_main.h"
+
+#undef CT_TESTCASE
+#define CT_TESTCASE(testcase) testcase##_register,
+CT_RegisterTestCaseFN g_testcase_register_fns[] = {
+    #include "test_main.h"
+    NULL
+};
+
+int CT_main(int argc, char* argv[], const char* version_str);
diff --git a/test_engine/test_mem.c b/test_engine/test_mem.c
new file mode 100644
index 0000000..0e2d86f
--- /dev/null
+++ b/test_engine/test_mem.c
@@ -0,0 +1,60 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <VX/vx.h>
+
+void *ct_alloc_mem(size_t size)
+{
+    void *ptr = NULL;
+
+    if (0 != size)
+    {
+        ptr = malloc(size);
+    }
+
+    return (ptr);
+}
+
+void ct_free_mem(void *ptr)
+{
+    if (NULL != ptr)
+    {
+        free(ptr);
+    }
+}
+
+void ct_memset(void *ptr, vx_uint8 c, size_t size)
+{
+    if (NULL != ptr)
+    {
+        memset(ptr, c, size);
+    }
+}
+
+void *ct_calloc(size_t nmemb, size_t size)
+{
+    void *ptr = NULL;
+
+    if ((0 != nmemb) && (0 != size))
+    {
+        ptr = calloc(nmemb, size);
+    }
+
+    return (ptr);
+}
diff --git a/test_engine/test_utils.c b/test_engine/test_utils.c
new file mode 100644
index 0000000..d302728
--- /dev/null
+++ b/test_engine/test_utils.c
@@ -0,0 +1,1012 @@
+/*
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <math.h>
+#include <string.h>
+#include "test.h"
+
+// As for OpenVX 1.0 both of following defines result in udefined behavior:
+// #define OPENVX_PLANE_COPYING_VARIANT1
+// #define OPENVX_PLANE_COPYING_VARIANT2
+
+#define CT_ENUM_TO_STR(code) case code: return #code;
+
+const char* ct_vx_status_to_str(vx_status s)
+{
+    switch(s)
+    {
+        CT_ENUM_TO_STR(VX_STATUS_MIN)
+        CT_ENUM_TO_STR(VX_ERROR_REFERENCE_NONZERO)
+        CT_ENUM_TO_STR(VX_ERROR_MULTIPLE_WRITERS)
+        CT_ENUM_TO_STR(VX_ERROR_GRAPH_ABANDONED)
+        CT_ENUM_TO_STR(VX_ERROR_GRAPH_SCHEDULED)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_SCOPE)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_NODE)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_GRAPH)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_TYPE)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_VALUE)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_DIMENSION)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_FORMAT)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_LINK)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_REFERENCE)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_MODULE)
+        CT_ENUM_TO_STR(VX_ERROR_INVALID_PARAMETERS)
+        CT_ENUM_TO_STR(VX_ERROR_OPTIMIZED_AWAY)
+        CT_ENUM_TO_STR(VX_ERROR_NO_MEMORY)
+        CT_ENUM_TO_STR(VX_ERROR_NO_RESOURCES)
+        CT_ENUM_TO_STR(VX_ERROR_NOT_COMPATIBLE)
+        CT_ENUM_TO_STR(VX_ERROR_NOT_ALLOCATED)
+        CT_ENUM_TO_STR(VX_ERROR_NOT_SUFFICIENT)
+        CT_ENUM_TO_STR(VX_ERROR_NOT_SUPPORTED)
+        CT_ENUM_TO_STR(VX_ERROR_NOT_IMPLEMENTED)
+        CT_ENUM_TO_STR(VX_FAILURE)
+        CT_ENUM_TO_STR(VX_SUCCESS)
+        default:
+            return "Non-standard VX_STATUS code"; //TODO: append numerical code
+    };
+}
+
+const char* ct_vx_type_to_str(enum vx_type_e type)
+{
+    switch(type)
+    {
+        CT_ENUM_TO_STR(VX_TYPE_INVALID)
+        CT_ENUM_TO_STR(VX_TYPE_CHAR)
+        CT_ENUM_TO_STR(VX_TYPE_INT8)
+        CT_ENUM_TO_STR(VX_TYPE_UINT8)
+        CT_ENUM_TO_STR(VX_TYPE_INT16)
+        CT_ENUM_TO_STR(VX_TYPE_UINT16)
+        CT_ENUM_TO_STR(VX_TYPE_INT32)
+        CT_ENUM_TO_STR(VX_TYPE_UINT32)
+        CT_ENUM_TO_STR(VX_TYPE_INT64)
+        CT_ENUM_TO_STR(VX_TYPE_UINT64)
+        CT_ENUM_TO_STR(VX_TYPE_FLOAT32)
+        CT_ENUM_TO_STR(VX_TYPE_FLOAT64)
+        CT_ENUM_TO_STR(VX_TYPE_ENUM)
+        CT_ENUM_TO_STR(VX_TYPE_SIZE)
+        CT_ENUM_TO_STR(VX_TYPE_DF_IMAGE)
+// #ifdef EXPERIMENTAL_PLATFORM_SUPPORTS_16_FLOAT
+//         CT_ENUM_TO_STR(VX_TYPE_FLOAT16)
+// #endif
+        CT_ENUM_TO_STR(VX_TYPE_BOOL)
+//      CT_ENUM_TO_STR(VX_TYPE_SCALAR_MAX)
+        CT_ENUM_TO_STR(VX_TYPE_RECTANGLE)
+        CT_ENUM_TO_STR(VX_TYPE_KEYPOINT)
+        CT_ENUM_TO_STR(VX_TYPE_COORDINATES2D)
+        CT_ENUM_TO_STR(VX_TYPE_COORDINATES3D)
+        CT_ENUM_TO_STR(VX_TYPE_KHRONOS_STRUCT_MAX)
+        CT_ENUM_TO_STR(VX_TYPE_USER_STRUCT_START)
+        CT_ENUM_TO_STR(VX_TYPE_REFERENCE)
+        CT_ENUM_TO_STR(VX_TYPE_CONTEXT)
+        CT_ENUM_TO_STR(VX_TYPE_GRAPH)
+        CT_ENUM_TO_STR(VX_TYPE_NODE)
+        CT_ENUM_TO_STR(VX_TYPE_KERNEL)
+        CT_ENUM_TO_STR(VX_TYPE_PARAMETER)
+        CT_ENUM_TO_STR(VX_TYPE_DELAY)
+        CT_ENUM_TO_STR(VX_TYPE_LUT)
+        CT_ENUM_TO_STR(VX_TYPE_DISTRIBUTION)
+        CT_ENUM_TO_STR(VX_TYPE_PYRAMID)
+        CT_ENUM_TO_STR(VX_TYPE_THRESHOLD)
+        CT_ENUM_TO_STR(VX_TYPE_MATRIX)
+        CT_ENUM_TO_STR(VX_TYPE_CONVOLUTION)
+        CT_ENUM_TO_STR(VX_TYPE_SCALAR)
+        CT_ENUM_TO_STR(VX_TYPE_ARRAY)
+        CT_ENUM_TO_STR(VX_TYPE_IMAGE)
+        CT_ENUM_TO_STR(VX_TYPE_REMAP)
+        CT_ENUM_TO_STR(VX_TYPE_ERROR)
+        CT_ENUM_TO_STR(VX_TYPE_META_FORMAT)
+        CT_ENUM_TO_STR(VX_TYPE_KHRONOS_OBJECT_END)
+        default:
+            return "Non-standard vx_type_e code"; //TODO: append numerical code
+    };
+}
+
+int ct_assert_reference_impl(vx_reference ref, enum vx_type_e expect_type, vx_status expect_status,
+                             const char* str_ref, const char* func, const char* file, const int line)
+{
+    vx_status s;
+    vx_enum ref_type;
+
+    if (!ref)
+    {
+        if (expect_status != VX_STATUS_MIN)
+        {
+            if (expect_type != VX_TYPE_KHRONOS_OBJECT_END)
+            {
+                CT_RecordFailureAtFormat("Invalid OpenVX object \"%s\""
+                    "\n\t\tExpected: %s object"
+                    "\n\t\tActual:   NULL", func, file, line, str_ref, ct_vx_type_to_str(expect_type));
+            }
+            else
+            {
+                if (expect_status != VX_SUCCESS)
+                {
+                    return 1; // passed (assume NULL ref as any error)
+                }
+                CT_RecordFailureAtFormat("Invalid OpenVX reference \"%s\""
+                    "\n\t\tExpected: valid object reference"
+                    "\n\t\tActual:   NULL", func, file, line, str_ref);
+            }
+            return 0; //failed
+        }
+        else
+        {
+            // if expect_status == VX_STATUS_MIN then we are testing for non-reference
+            return 1; //passed
+        }
+    }
+
+    s = vxQueryReference(ref, VX_REFERENCE_TYPE, &ref_type, sizeof(ref_type));
+
+    if (s == VX_ERROR_INVALID_REFERENCE)
+    {
+        if (expect_status != VX_STATUS_MIN)
+        {
+            if (expect_type != VX_TYPE_KHRONOS_OBJECT_END)
+            {
+                CT_RecordFailureAtFormat("Passed object \"%s\" is not a valid OpenVX reference"
+                    "\n\t\tExpected: %s object"
+                    "\n\t\tActual:   unknown object", func, file, line, str_ref, ct_vx_type_to_str(expect_type));
+            }
+            else
+            {
+                CT_RecordFailureAtFormat("Passed object \"%s\" is not a valid OpenVX object"
+                    "\n\t\tExpected: OpenVX object"
+                    "\n\t\tActual:   unknown object", func, file, line, str_ref);
+            }
+            return 0; //failed
+        }
+        else
+        {
+            // if expect_status == VX_STATUS_MIN then we are testing for non-reference
+            return 1; //passed
+        }
+    }
+
+    if (s != VX_SUCCESS)
+    {
+        CT_RecordFailureAtFormat("Error quering the type of \"%s\""
+            "\n\t\tExpected: VX_SUCCESS"
+            "\n\t\tActual:   %s", func, file, line, str_ref, ct_vx_status_to_str(s));
+        return 0; //failed
+    }
+
+    if (ref_type == VX_TYPE_ERROR)
+    {
+        s = vxGetStatus(ref);
+
+        if (s != expect_status)
+        {
+            CT_RecordFailureAtFormat("Error status of \"%s\" object"
+                "\n\t\tExpected: %s"
+                "\n\t\tActual:   %s", func, file, line, str_ref, ct_vx_status_to_str(expect_status), ct_vx_status_to_str(s));
+            return 0; //failed
+        }
+    }
+
+    if (expect_type != VX_TYPE_KHRONOS_OBJECT_END) // need to verify type
+    {
+        if (expect_type != (enum vx_type_e)ref_type)
+        {
+            CT_RecordFailureAtFormat("Error type of \"%s\" object"
+                "\n\t\tExpected: %s"
+                "\n\t\tActual:   %s", func, file, line, str_ref, ct_vx_type_to_str(expect_type), ct_vx_type_to_str((enum vx_type_e)ref_type));
+            return 0; //failed
+        }
+    }
+
+    if (expect_status != VX_SUCCESS && ref_type != VX_TYPE_ERROR)
+    {
+        // we have expected an error object, but got a valid reference
+        CT_RecordFailureAtFormat("Error status of \"%s\""
+            "\n\t\tExpected: %s"
+            "\n\t\tActual:   valid %s object", func, file, line, str_ref, ct_vx_status_to_str(expect_status), ct_vx_type_to_str((enum vx_type_e)ref_type));
+        return 0; // failed
+    }
+
+    return 1; //passed
+}
+
+void ct_fill_image_random_impl(vx_image image, uint64_t* seed, const char* func, const char* file, const int line)
+{
+    uint64_t rng;
+    vx_status status;
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_size planes = 0;
+    vx_df_image format = VX_DF_IMAGE_VIRT;
+    vx_rectangle_t rect;
+    vx_imagepatch_addressing_t addr;
+    uint32_t x, y, p;
+
+    ASSERT_AT(seed != NULL, func, file, line);
+
+    CT_RNG_INIT(rng, *seed);
+
+    ASSERT_EQ_VX_STATUS_AT_(return, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_WIDTH,   &width,   sizeof(width)),  func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)), func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_PLANES,  &planes,  sizeof(planes)), func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_FORMAT,  &format,  sizeof(format)), func, file, line);
+
+    ASSERT_AT(format != VX_DF_IMAGE_VIRT, func, file, line);
+
+    rect.start_x = rect.start_y = 0;
+    rect.end_x = width;
+    rect.end_y = height;
+
+    for (p = 0; p < planes; ++p)
+    {
+        vx_map_id map_id;
+        void* base_ptr = 0;
+        ASSERT_EQ_VX_STATUS_AT_(return, VX_SUCCESS, vxMapImagePatch(image, &rect, p, &map_id, &addr, &base_ptr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0), func, file, line);
+
+#define SET_PIXELS(data_type, commands)                                     \
+    for (y = 0; y < addr.dim_y; y += addr.step_y)                           \
+    {                                                                       \
+        for (x = 0; x < addr.dim_x; x += addr.step_x)                       \
+        {                                                                   \
+            data_type* data = (data_type*)vxFormatImagePatchAddress2d(base_ptr, x, y, &addr); \
+            commands                                                        \
+        }                                                                   \
+    }
+
+        status = VX_SUCCESS;
+        if (format == VX_DF_IMAGE_U8) // 1 plane of 8-bit data
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_U16) // 1 plane of 16-bit data
+            SET_PIXELS(vx_uint16,
+            {
+                data[0] = (vx_uint16)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_U32) // 1 plane of 32-bit data
+            SET_PIXELS(vx_uint32,
+            {
+                data[0] = (vx_uint32)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_S16) // 1 plane of 16-bit data
+            SET_PIXELS(vx_int16,
+            {
+                data[0] = (vx_int16)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_S32) // 1 plane of 32-bit data
+            SET_PIXELS(vx_int32,
+            {
+                data[0] = (vx_int32)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_RGB) // 1 plane of 24-bit data
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[1] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[2] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_RGBX) // 1 plane of 32-bit data
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[1] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[2] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[3] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_YUV4) // 3 planes of 8-bit data
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_IYUV) // 3 planes of 8-bit data
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        else if (format == VX_DF_IMAGE_NV12) // 2 planes: one of 8-bit data and one of 16-bit data
+        {
+            // width must be multiple of 2
+            if (p == 0)
+                SET_PIXELS(vx_uint8,
+                {
+                    data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                })
+            else if(p == 1)
+                SET_PIXELS(vx_uint8,
+                {
+                    data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                    data[1] = (vx_uint8)CT_RNG_NEXT(rng);
+                })
+            else
+                status = VX_FAILURE;
+        }
+        else if (format == VX_DF_IMAGE_NV21) // 2 planes: one of 8-bit data and one of 16-bit data
+        {
+            // width must be multiple of 2
+            if (p == 0)
+                SET_PIXELS(vx_uint8,
+                {
+                    data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                })
+            else if(p == 1)
+                SET_PIXELS(vx_uint8,
+                {
+                    data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                    data[1] = (vx_uint8)CT_RNG_NEXT(rng);
+                })
+            else
+                status = VX_FAILURE;
+        }
+        else if (format == VX_DF_IMAGE_UYVY) // 1 plane of 16-bit data
+        {
+            // width must be multiple of 2
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[1] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        }
+        else if (format == VX_DF_IMAGE_YUYV) // 1 plane of 16-bit data
+        {
+            // width must be multiple of 2
+            SET_PIXELS(vx_uint8,
+            {
+                data[0] = (vx_uint8)CT_RNG_NEXT(rng);
+                data[1] = (vx_uint8)CT_RNG_NEXT(rng);
+            })
+        }
+        else
+            status = VX_FAILURE;
+#undef SET_PIXELS
+
+        *seed = rng; // return new value of random number generator
+
+        if (status != VX_SUCCESS)
+        {
+            vxUnmapImagePatch(image, map_id); // empty commit to abort transaction
+            FAIL_AT("ENGINE: Unknown or broken vx_image format: %.4s", func, file, line, &format);
+        }
+        ASSERT_EQ_VX_STATUS_AT_(return, VX_SUCCESS, vxUnmapImagePatch(image, map_id), func, file, line);
+    } /* for planes */
+}
+
+vx_image ct_clone_image_impl(vx_image image, vx_graph graph, const char* func, const char* file, const int line)
+{
+#define CLONE_FAILED() CT_RecordFailureAt("ENGINE: Unable to make a clone of vx_image", func, file, line)
+    vx_status status;
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_size planes = 0;
+    vx_df_image format = 0;
+    vx_rectangle_t rect;
+    void *base_ptr_src = 0;
+    void *base_ptr_dst = 0;
+    vx_uint32 p;
+    vx_context context = 0;
+    vx_image clone = 0;
+    int is_virtual = 0;
+
+    if (!image) return NULL; //OK
+    if (vxGetStatus((vx_reference)image) != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+
+    context = vxGetContext((vx_reference)image);
+    if (vxGetStatus((vx_reference)context) != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+
+    status = vxQueryImage(image, VX_IMAGE_WIDTH,  &width,  sizeof(width));
+    if (status != VX_SUCCESS)  { CLONE_FAILED(); return NULL; }
+    status = vxQueryImage(image, VX_IMAGE_HEIGHT, &height, sizeof(height));
+    if (status != VX_SUCCESS)  { CLONE_FAILED(); return NULL; }
+    status = vxQueryImage(image, VX_IMAGE_FORMAT, &format, sizeof(format));
+    if (status != VX_SUCCESS)  { CLONE_FAILED(); return NULL; }
+
+    if (format == VX_DF_IMAGE_VIRT || width == 0 || height == 0) is_virtual = 1;
+
+    // test if still virtual
+    if (!is_virtual)
+    {
+        vx_imagepatch_addressing_t addr_src = VX_IMAGEPATCH_ADDR_INIT;
+        vx_map_id map_id;
+        rect.start_x = rect.start_y = 0;
+        rect.end_x = width; rect.end_y = height;
+        status = vxMapImagePatch(image, &rect, 0, &map_id, &addr_src, &base_ptr_src, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0);
+
+        if (status == VX_ERROR_OPTIMIZED_AWAY)
+        {
+            is_virtual = 1;
+        }
+        else
+        {
+            if (status != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+            status = vxUnmapImagePatch(image, map_id);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+        }
+    }
+
+    if (is_virtual)
+    {
+        if (graph == 0 || vxGetStatus((vx_reference)graph) != VX_SUCCESS)
+        {
+            CT_RecordFailureAt("ENGINE: Unable to make a clone of vx_image without valid graph object", func, file, line);
+            return NULL;
+        }
+
+        clone = vxCreateVirtualImage(graph, width, height, format);
+        if (vxGetStatus((vx_reference)clone) != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+    }
+    else
+    {
+        clone = vxCreateImage(context, width, height, format);
+        if (vxGetStatus((vx_reference)clone) != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+
+        status = vxQueryImage(image, VX_IMAGE_PLANES, &planes, sizeof(planes));
+        if (status != VX_SUCCESS)  { CLONE_FAILED(); return NULL; }
+
+        // TODO: use vxGetValidRegionImage
+        rect.start_x = rect.start_y = 0;
+        rect.end_x = width;
+        rect.end_y = height;
+
+#if defined OPENVX_PLANE_COPYING_VARIANT1
+        for (p = 0; p < planes; ++p)
+        {
+            vx_imagepatch_addressing_t addr_src = VX_IMAGEPATCH_ADDR_INIT;
+            vx_imagepatch_addressing_t addr_dst = VX_IMAGEPATCH_ADDR_INIT;
+            vx_status status1;
+            base_ptr_src = base_ptr_dst = 0;
+            status = vxAccessImagePatch(clone, &rect, p, &addr_dst, &base_ptr_dst, VX_WRITE_ONLY);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+            status = vxAccessImagePatch(image, &rect, p, &addr_src, &base_ptr_src, VX_READ_ONLY);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); vxReleaseImage(&clone); return NULL; }
+
+            // UNDEFINED BEHAVIOR: pass pointer obtained for one image to commit on another image
+            status  = vxCommitImagePatch(clone, &rect, p, &addr_src, base_ptr_src);
+            status1 = vxCommitImagePatch(image, 0, p, &addr_dst, base_ptr_dst);
+            if (status1 != VX_SUCCESS || status != VX_SUCCESS)
+            {
+                CLONE_FAILED(); vxReleaseImage(&clone); return NULL;
+            }
+        }
+#elif defined OPENVX_PLANE_COPYING_VARIANT2
+        for (p = 0; p < planes; ++p)
+        {
+            vx_imagepatch_addressing_t addr_src = VX_IMAGEPATCH_ADDR_INIT;
+            vx_status status1;
+            base_ptr_src = 0;
+            status = vxAccessImagePatch(image, &rect, p, &addr_src, &base_ptr_src, VX_READ_ONLY);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); vxReleaseImage(&clone); return NULL; }
+
+            // 1) passing non-zero address to vxAccessImagePatch means that we ask to use our buffer
+            // 2) UNDEFINED BEHAVIOR: assuming that VX_WRITE_ONLY with external buffer does not modify the buffer data
+            // 3) assuming that addressing structure is not changed or filled with the same values;
+            //    actually existense of vxComputeImagePatchSize almost guarantee that this assumption is correct
+            status = vxAccessImagePatch(clone, &rect, p, &addr_src, &base_ptr_src, VX_WRITE_ONLY);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+
+            // commit using "externally" allocated buffer
+            // implementation has to copy data internally
+            // implementation must not release the buffer
+            status  = vxCommitImagePatch(clone, &rect, p, &addr_src, base_ptr_src);
+
+            // commit with pointer obtained from vxAccessImagePatch for the same image
+            // implementation has to decrement image refcounter and recycle the buffer
+            status1 = vxCommitImagePatch(image, 0, p, &addr_src, base_ptr_src);
+            if (status1 != VX_SUCCESS || status != VX_SUCCESS)
+            {
+                CLONE_FAILED(); vxReleaseImage(&clone); return NULL;
+            }
+        }
+#else
+        for (p = 0; p < planes; ++p)
+        {
+            vx_imagepatch_addressing_t addr_src = VX_IMAGEPATCH_ADDR_INIT;
+            vx_imagepatch_addressing_t addr_dst = VX_IMAGEPATCH_ADDR_INIT;
+            vx_map_id map_id_src;
+            vx_map_id map_id_dst;
+
+            vx_uint32 w, h, x, y, k;
+            vx_uint32 elem_sz = 0;
+            switch(format)
+            {
+                case VX_DF_IMAGE_U8:
+                case VX_DF_IMAGE_YUV4:
+                case VX_DF_IMAGE_IYUV:
+                    elem_sz = 1;
+                    break;
+                case VX_DF_IMAGE_S16:
+                case VX_DF_IMAGE_U16:
+                case VX_DF_IMAGE_UYVY:
+                case VX_DF_IMAGE_YUYV:
+                    elem_sz = 2;
+                    break;
+                case VX_DF_IMAGE_RGB:
+                    elem_sz = 3;
+                    break;
+                case VX_DF_IMAGE_S32:
+                case VX_DF_IMAGE_U32:
+                case VX_DF_IMAGE_RGBX:
+                    elem_sz = 4;
+                    break;
+                case VX_DF_IMAGE_NV12:
+                case VX_DF_IMAGE_NV21:
+                    if (p == 0)
+                        elem_sz = 1;
+                    else if (p == 1)
+                        elem_sz = 2;
+                    break;
+                default:
+                    /* unknown format*/
+                    elem_sz = 0;
+                    break;
+            };
+            if (elem_sz == 0)
+            {
+                CLONE_FAILED();
+                vxReleaseImage(&clone);
+                return NULL;
+            }
+
+            base_ptr_src = base_ptr_dst = 0;
+            status = vxMapImagePatch(clone, &rect, p, &map_id_dst, &addr_dst, &base_ptr_dst, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); return NULL; }
+
+            status = vxMapImagePatch(image, &rect, p, &map_id_src, &addr_src, &base_ptr_src, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); vxReleaseImage(&clone); return NULL; }
+
+            h = addr_src.dim_y / addr_src.step_y;
+            w = addr_src.dim_x / addr_src.step_x;
+
+            if (h != addr_dst.dim_y / addr_dst.step_y || w != addr_dst.dim_x / addr_dst.step_x)
+            {
+                // everything is bad
+                CLONE_FAILED();
+                vxUnmapImagePatch(clone, map_id_dst);
+                vxUnmapImagePatch(image, map_id_src);
+                vxReleaseImage(&clone);
+                return NULL;
+            }
+
+            for (y = 0; y < h; y++)
+            {
+                int j_src = y * addr_src.stride_y * addr_src.step_y * addr_src.scale_y / VX_SCALE_UNITY;
+                int j_dst = y * addr_dst.stride_y * addr_dst.step_y * addr_dst.scale_y / VX_SCALE_UNITY;
+
+                for (x = 0; x < w; x++)
+                {
+                    int i_src = x * addr_src.stride_x * addr_src.step_x * addr_src.scale_x / VX_SCALE_UNITY;
+                    int i_dst = x * addr_dst.stride_x * addr_dst.step_x * addr_dst.scale_x / VX_SCALE_UNITY;
+
+                    vx_uint8 *psrc = (vx_uint8*)(((vx_uint8 *)base_ptr_src) + j_src + i_src);
+                    vx_uint8 *pdst = (vx_uint8*)(((vx_uint8 *)base_ptr_dst) + j_dst + i_dst);
+
+                    for(k = 0; k < elem_sz; ++k)
+                        pdst[k] = psrc[k];
+                }
+            }
+
+            status = vxUnmapImagePatch(image, map_id_src);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); vxReleaseImage(&clone); return NULL; }
+
+            status = vxUnmapImagePatch(clone, map_id_dst);
+            if (status != VX_SUCCESS) { CLONE_FAILED(); vxReleaseImage(&clone); return NULL; }
+        }
+#endif
+    }
+
+    // copy remaining attributes
+    {
+        vx_enum space;
+        if (vxQueryImage(image, VX_IMAGE_SPACE, &space, sizeof(space)) != VX_SUCCESS)
+        {
+            CLONE_FAILED(); vxReleaseImage(&clone); return NULL;
+        }
+        if (vxSetImageAttribute(clone, VX_IMAGE_SPACE, &space, sizeof(space)) != VX_SUCCESS)
+        {
+            CLONE_FAILED(); vxReleaseImage(&clone); return NULL;
+        }
+    }
+
+    return clone;
+#undef CLONE_FAILED
+}
+
+static vx_context g_vx_context = 0;
+
+static void VX_CALLBACK log_callback(vx_context context, vx_reference ref, vx_status status, const vx_char* str)
+{
+#if 0
+    printf("LOG entry for object %p: %s\n", ref, str);
+#endif
+}
+
+static vx_context ct_create_vx_context()
+{
+    if (g_vx_context)
+    {
+        return g_vx_context;
+    }
+    else
+    {
+        vx_context ctx = vxCreateContext();
+        if (vxGetStatus((vx_reference)ctx) == VX_SUCCESS)
+            vxRegisterLogCallback(ctx, log_callback, vx_true_e);
+
+        return ctx;
+    }
+    return g_vx_context;
+}
+
+void ct_create_global_vx_context()
+{
+    g_vx_context = ct_create_vx_context();
+}
+
+void ct_release_global_vx_context()
+{
+    if (g_vx_context)
+    {
+        vxReleaseContext(&g_vx_context);
+        ASSERT(g_vx_context == 0);
+    }
+}
+
+static void ct_teardown_vx_context(void/*CT_VXContext*/ **context_)
+{
+    CT_VXContext* context = (CT_VXContext*)*context_;
+    if (context == NULL)
+        return;
+
+    if (!g_vx_context && context->vx_context_)
+    {
+        if (!CT_HasFailure())
+        {
+            vx_uint32 dangling_refs_count, modules, kernels;
+            EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryContext(context->vx_context_, VX_CONTEXT_REFERENCES, &dangling_refs_count, sizeof(dangling_refs_count)));
+            EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryContext(context->vx_context_, VX_CONTEXT_MODULES, &modules, sizeof(modules)));
+            EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryContext(context->vx_context_, VX_CONTEXT_UNIQUE_KERNELS, &kernels, sizeof(kernels)));
+
+            // The specification needs to be clarified. Implementations may have a different interpretation of what
+            // is an 'active reference'. The number of active references may or may not be 0 just after context creation.
+            dangling_refs_count -= context->vx_context_base_references_;
+
+            // The specification needs to be clarified. An implementation may or may not consider kernel objects
+            // that are not referenced by the application (but that are still alive since a kernels exist until
+            // explicitly removed) as 'active references'. In case the implementation does, an aditionnal subtraction
+            // is needed.
+            if ( ((modules != context->vx_context_base_modules_) ||
+                  (kernels != context->vx_context_base_kernels_)) &&
+                 (dangling_refs_count > 0))
+            {
+                dangling_refs_count -= kernels - context->vx_context_base_kernels_;
+            }
+
+            EXPECT_EQ_INT(0, dangling_refs_count);
+        }
+        vxReleaseContext(&context->vx_context_);
+        ASSERT(context->vx_context_ == 0);
+    }
+
+    ct_free_mem(context);
+}
+
+void* ct_setup_vx_context()
+{
+    CT_VXContext* context = (CT_VXContext*)ct_alloc_mem(sizeof(CT_VXContext));
+    context->vx_context_ = ct_create_vx_context();
+    ASSERT_VX_OBJECT_({ct_free_mem(context); return 0;}, context->vx_context_, VX_TYPE_CONTEXT);
+
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryContext(context->vx_context_, VX_CONTEXT_REFERENCES,
+        &context->vx_context_base_references_, sizeof(context->vx_context_base_references_)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryContext(context->vx_context_, VX_CONTEXT_MODULES,
+        &context->vx_context_base_modules_, sizeof(context->vx_context_base_modules_)));
+    EXPECT_EQ_VX_STATUS(VX_SUCCESS, vxQueryContext(context->vx_context_, VX_CONTEXT_UNIQUE_KERNELS,
+        &context->vx_context_base_kernels_, sizeof(context->vx_context_base_kernels_)));
+
+    CT_RegisterForGarbageCollection(context, ct_teardown_vx_context, CT_GC_OBJECT);
+    return context;
+}
+
+vx_image ct_create_similar_image_impl(vx_image image, const char* func, const char* file, const int line)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_df_image format = VX_DF_IMAGE_VIRT;
+    vx_image new_image = 0;
+
+    vx_context context = vxGetContext((vx_reference)image);
+    ASSERT_VX_OBJECT_AT_(return 0, context, VX_TYPE_CONTEXT, func, file, line);
+
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_WIDTH,   &width,   sizeof(width)),  func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)), func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_FORMAT,  &format,  sizeof(format)), func, file, line);
+
+    new_image = vxCreateImage(context, width, height, format);
+    ASSERT_VX_OBJECT_AT_(return 0, new_image, VX_TYPE_IMAGE, func, file, line);
+
+    return new_image;
+}
+
+vx_image ct_create_similar_image_with_format_impl(vx_image image, vx_df_image format, const char* func, const char* file, const int line)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_image new_image = 0;
+
+    vx_context context = vxGetContext((vx_reference)image);
+    ASSERT_VX_OBJECT_AT_(return 0, context, VX_TYPE_CONTEXT, func, file, line);
+
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_WIDTH,   &width,   sizeof(width)),  func, file, line);
+    ASSERT_EQ_VX_STATUS_AT_(return 0, VX_SUCCESS, vxQueryImage(image, VX_IMAGE_HEIGHT,  &height,  sizeof(height)), func, file, line);
+
+    new_image = vxCreateImage(context, width, height, format);
+    ASSERT_VX_OBJECT_AT_(return 0, new_image, VX_TYPE_IMAGE, func, file, line);
+
+    return new_image;
+}
+
+
+vx_status ct_dump_vx_image_info(vx_image image)
+{
+    vx_uint32 width  = 0;
+    vx_uint32 height = 0;
+    vx_size planes = 0;
+    vx_df_image format = 0;
+
+    VX_CALL_RET(vxGetStatus((vx_reference)image));
+
+    VX_CALL_RET(vxQueryImage(image, VX_IMAGE_WIDTH,  &width,  sizeof(width)));
+    VX_CALL_RET(vxQueryImage(image, VX_IMAGE_HEIGHT, &height, sizeof(height)));
+    VX_CALL_RET(vxQueryImage(image, VX_IMAGE_FORMAT, &format, sizeof(format)));
+    VX_CALL_RET(vxQueryImage(image, VX_IMAGE_PLANES, &planes, sizeof(planes)));
+
+    printf("Image %p DF_IMAGE(%.*s): %dx%d (%d planes)\n",
+            image, (int)sizeof(format), (char*)&format,
+            width, height, (int)planes);
+
+    return VX_SUCCESS;
+}
+
+uint32_t ct_floor_u32_no_overflow(float v)
+{
+    return (uint32_t)(v);
+}
+
+uint8_t ct_clamp_8u(int32_t v)
+{
+    if (v >= 255)
+        return v;
+    if (v <= 0)
+        return 0;
+    return (uint8_t)v;
+}
+
+float ct_log_rng(uint64_t* rng, float minlog2, float maxlog2)
+{
+    float a = (float)CT_RNG_NEXT_REAL(*rng, minlog2, maxlog2);
+    return expf(a*0.6931471805599453f);
+}
+
+int ct_roundf(float val)
+{
+    return (int)floor(val + 0.5);
+}
+
+typedef union ct_scalar_val
+{
+    vx_char   chr;
+    vx_int8   s08;
+    vx_uint8  u08;
+    vx_int16  s16;
+    vx_uint16 u16;
+    vx_int32  s32;
+    vx_uint32 u32;
+    vx_int64  s64;
+    vx_int64  u64;
+    vx_float32 f32;
+    vx_float64 f64;
+    vx_df_image  fcc;
+    vx_enum    enm;
+    vx_size    size;
+    vx_bool    boolean;
+} ct_scalar_val;
+
+
+int ct_scalar_as_int(vx_scalar val)
+{
+    vx_enum sctype = 0;
+    ct_scalar_val scval;
+    int ival = -1;
+
+    vxQueryScalar(val, VX_SCALAR_TYPE, &sctype, sizeof(sctype));
+    vxCopyScalar(val, &scval, VX_READ_ONLY, VX_MEMORY_TYPE_HOST);
+
+    if( sctype == VX_TYPE_CHAR )
+        ival = scval.chr;
+    else if( sctype == VX_TYPE_INT8 )
+        ival = scval.s08;
+    else if( sctype == VX_TYPE_UINT8 )
+        ival = scval.u08;
+    else if( sctype == VX_TYPE_INT16 )
+        ival = scval.s16;
+    else if( sctype == VX_TYPE_UINT16 )
+        ival = scval.u16;
+    else if( sctype == VX_TYPE_INT32 )
+        ival = scval.s32;
+    else if( sctype == VX_TYPE_UINT32 )
+        ival = (int)scval.u32;
+    else if( sctype == VX_TYPE_INT64 )
+        ival = (int)scval.s64;
+    else if( sctype == VX_TYPE_UINT64 )
+        ival = (int)scval.u64;
+    else if( sctype == VX_TYPE_FLOAT32 )
+        ival = ct_roundf(scval.f32);
+    else if( sctype == VX_TYPE_FLOAT64 )
+        ival = ct_roundf((float)scval.f64);
+    else if( sctype == VX_TYPE_DF_IMAGE )
+        ival = (int)scval.fcc;
+    else if( sctype == VX_TYPE_ENUM )
+        ival = ct_roundf((float)scval.enm);
+    else if( sctype == VX_TYPE_SIZE )
+        ival = ct_roundf((float)scval.size);
+    else if( sctype == VX_TYPE_BOOL )
+        ival = scval.boolean == vx_true_e;
+    else
+    {
+        CT_ADD_FAILURE("Can not read int from scalar of type %d", (int)sctype);
+    }
+
+    return ival;
+}
+
+vx_scalar ct_scalar_from_int(vx_context ctx, vx_enum sctype, int ival)
+{
+    ct_scalar_val scval;
+
+    if( sctype == VX_TYPE_CHAR )
+        scval.chr = (char)ival;
+    else if( sctype == VX_TYPE_INT8 )
+        scval.s08 = (vx_int8)ival;
+    else if( sctype == VX_TYPE_UINT8 )
+        scval.u08 = (vx_uint8)ival;
+    else if( sctype == VX_TYPE_INT16 )
+        scval.s16 = (vx_int16)ival;
+    else if( sctype == VX_TYPE_UINT16 )
+        scval.u16 = (vx_uint16)ival;
+    else if( sctype == VX_TYPE_INT32 )
+        scval.s32 = (vx_int32)ival;
+    else if( sctype == VX_TYPE_UINT32 )
+        scval.u32 = (vx_uint32)ival;
+    else if( sctype == VX_TYPE_INT64 )
+        scval.s64 = (vx_int64)ival;
+    else if( sctype == VX_TYPE_UINT64 )
+        scval.u64 = (vx_uint64)ival;
+    else if( sctype == VX_TYPE_FLOAT32 )
+        scval.f32 = (vx_float32)ival;
+    else if( sctype == VX_TYPE_FLOAT64 )
+        scval.f64 = (vx_float64)ival;
+    else if( sctype == VX_TYPE_DF_IMAGE )
+        scval.fcc = (vx_df_image)ival;
+    else if( sctype == VX_TYPE_ENUM )
+        scval.enm = (vx_enum)ival;
+    else if( sctype == VX_TYPE_SIZE )
+        scval.size = (vx_size)ival;
+    else if( sctype == VX_TYPE_BOOL )
+        scval.boolean = ival != 0 ? vx_true_e : vx_false_e;
+    else
+    {
+        CT_ADD_FAILURE("Can not read int from scalar of type %d", (int)sctype);
+        return 0;
+    }
+
+    return vxCreateScalar(ctx, sctype, &scval);
+}
+
+vx_enum ct_read_array(vx_array src, void** dst, vx_size* _capacity_bytes,
+                      vx_size* _arrsize, vx_size* _arrcap )
+{
+    vx_size i;
+    vx_size arrsize_bytes;
+    vx_size arrcap = 0;
+    vx_size arrsize  = 0;
+    vx_size itemsize = 0;
+    vx_size stride   = 0;
+    vx_enum itemtype = 0;
+    vx_map_id map_id;
+    char* ptr = 0;
+
+    vxQueryArray(src, VX_ARRAY_ITEMTYPE, &itemtype, sizeof(itemtype));
+    vxQueryArray(src, VX_ARRAY_CAPACITY, &arrcap, sizeof(arrcap));
+    vxQueryArray(src, VX_ARRAY_NUMITEMS, &arrsize, sizeof(arrsize));
+    vxQueryArray(src, VX_ARRAY_ITEMSIZE, &itemsize, sizeof(itemsize));
+
+    if(_arrsize)
+        *_arrsize = arrsize;
+    if(_arrcap)
+        *_arrcap = arrcap;
+
+    if(arrsize == 0)
+        return itemtype;
+
+    arrsize_bytes = arrsize*itemsize;
+    if( _capacity_bytes == 0 || arrsize_bytes >= *_capacity_bytes )
+    {
+        if(*dst)
+            ct_free_mem(*dst);
+
+        *dst = ct_alloc_mem(arrsize_bytes);
+
+        if (_capacity_bytes)
+            *_capacity_bytes = arrsize_bytes;
+    }
+
+    vxMapArrayRange(src, 0, arrsize, &map_id, &stride, (void**)&ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, 0);
+
+    if( stride == itemsize )
+        memcpy(*dst, ptr, arrsize_bytes);
+    else
+    {
+        for( i = 0; i < arrsize; i++ )
+            memcpy((char*)(*dst) + i*itemsize, ptr + i*stride, itemsize);
+    }
+
+    vxUnmapArrayRange(src, map_id);
+
+    return itemtype;
+}
+
+void ct_update_progress(int i, int niters)
+{
+    if( i == 0 )
+    {
+        printf("[ ");
+    }
+    if( (i+1)%(niters/8) == 0 )
+    {
+        putchar('*');
+        fflush(stdout);
+    }
+    if( i == niters-1 )
+    {
+        printf(" ]\n");
+    }
+}
+
+
+static int check_any_size = 0;
+int ct_check_any_size()
+{
+    return check_any_size;
+}
+
+void ct_set_check_any_size(int flag)
+{
+    check_any_size = flag;
+}
+
+void ct_destroy_vx_context(void **pContext)
+{
+    vxReleaseContext((vx_context *)pContext);
+    *pContext = NULL;
+}
+
+char *ct_get_test_file_path()
+{
+    char *env = getenv("VX_TEST_DATA_PATH");
+    if (env == NULL)
+    {
+        /* Look in the current directory */
+        env = ".";
+    }
+    return env;
+}
diff --git a/test_engine/test_utils.h b/test_engine/test_utils.h
new file mode 100644
index 0000000..d7dbf8f
--- /dev/null
+++ b/test_engine/test_utils.h
@@ -0,0 +1,227 @@
+/* 
+
+ * Copyright (c) 2012-2017 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __VX_CT_TEST_UTILS_H__
+#define __VX_CT_TEST_UTILS_H__
+
+#include <VX/vx.h>
+#include <VX/vx_compatibility.h>
+
+#define MAXPATHLENGTH           (512u)
+
+#define VX_CALL(fn_call) ASSERT_EQ_VX_STATUS(VX_SUCCESS, fn_call)
+#define VX_CALL_(ret_code, fn_call) ASSERT_EQ_VX_STATUS_AT_(ret_code, VX_SUCCESS, fn_call, __FUNCTION__, __FILE__, __LINE__)
+#define VX_CALL_RET(fn_call) ASSERT_EQ_VX_STATUS_AT_(return VX_FAILURE, VX_SUCCESS, fn_call, __FUNCTION__, __FILE__, __LINE__)
+
+const char* ct_vx_status_to_str(vx_status s);
+const char* ct_vx_type_to_str(enum vx_type_e type);
+
+int ct_assert_reference_impl(vx_reference ref, enum vx_type_e type, vx_status expect_status, const char* str_ref, const char* func, const char* file, const int line);
+
+#define EXPECT_VX_REFERENCE(ref) ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, VX_SUCCESS, #ref, __FUNCTION__, __FILE__, __LINE__)
+#define ASSERT_VX_REFERENCE(ref) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, VX_SUCCESS, #ref, __FUNCTION__, __FILE__, __LINE__)) {} else {CT_DO_FAIL;}}while(0)
+#define ASSERT_VX_REFERENCE_(ret_error, ref) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, VX_SUCCESS, #ref, __FUNCTION__, __FILE__, __LINE__)) {} else {ret_error;}}while(0)
+
+#define EXPECT_VX_REFERENCE_AT(ref, func, file, line) ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, VX_SUCCESS, #ref, func, file, line)
+#define ASSERT_VX_REFERENCE_AT(ref, func, file, line) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, VX_SUCCESS, #ref, func, file, line)) {} else {CT_DO_FAIL;}}while(0)
+#define ASSERT_VX_REFERENCE_AT_(ret_error, ref, func, file, line) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, VX_SUCCESS, #ref, func, file, line)) {} else {ret_error;}}while(0)
+
+#define EXPECT_VX_OBJECT(ref, type) ct_assert_reference_impl((vx_reference)(ref), (type), VX_SUCCESS, #ref, __FUNCTION__, __FILE__, __LINE__)
+#define ASSERT_VX_OBJECT(ref, type) do{ if (ct_assert_reference_impl((vx_reference)(ref), (type), VX_SUCCESS, #ref, __FUNCTION__, __FILE__, __LINE__)) {} else {CT_DO_FAIL;}}while(0)
+#define ASSERT_VX_OBJECT_(ret_error, ref, type) do{ if (ct_assert_reference_impl((vx_reference)(ref), (type), VX_SUCCESS, #ref, __FUNCTION__, __FILE__, __LINE__)) {} else {ret_error;}}while(0)
+
+#define EXPECT_VX_OBJECT_AT(ref, type, func, file, line) ct_assert_reference_impl((vx_reference)(ref), (type), VX_SUCCESS, #ref, func, file, line)
+#define ASSERT_VX_OBJECT_AT(ref, type, func, file, line) do{ if (ct_assert_reference_impl((vx_reference)(ref), (type), VX_SUCCESS, #ref, func, file, line)) {} else {CT_DO_FAIL;}}while(0)
+#define ASSERT_VX_OBJECT_AT_(ret_error, ref, type, func, file, line) do{ if (ct_assert_reference_impl((vx_reference)(ref), (type), VX_SUCCESS, #ref, func, file, line)) {} else {ret_error;}}while(0)
+
+#define EXPECT_VX_ERROR(ref, error) ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, (error), #ref, __FUNCTION__, __FILE__, __LINE__)
+#define ASSERT_VX_ERROR(ref, error) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, (error), #ref, __FUNCTION__, __FILE__, __LINE__)) {} else {CT_DO_FAIL;}}while(0)
+#define ASSERT_VX_ERROR_(ret_error, ref, error) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, (error), #ref, __FUNCTION__, __FILE__, __LINE__)) {} else {ret_error;}}while(0)
+
+#define EXPECT_VX_ERROR_AT(ref, error, func, file, line) ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, (error), #ref, func, file, line)
+#define ASSERT_VX_ERROR_AT(ref, error, func, file, line) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, (error), #ref, func, file, line)) {} else {CT_DO_FAIL;}}while(0)
+#define ASSERT_VX_ERROR_AT_(ret_error, ref, error, func, file, line) do{ if (ct_assert_reference_impl((vx_reference)(ref), VX_TYPE_KHRONOS_OBJECT_END, (error), #ref, func, file, line)) {} else {ret_error;}}while(0)
+
+#define ASSERT_NE_VX_STATUS(val1, val2)                                 \
+    do {                                                                \
+        vx_status s0 = (vx_status)(val1);                               \
+        vx_status s1 = (vx_status)(val2);                               \
+        if (s0 != s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s != %s\n\t"           \
+                "Actual: %s vs %s"                                      \
+                , __FUNCTION__, __FILE__, __LINE__, #val1, #val2,       \
+                ct_vx_status_to_str(s0), ct_vx_status_to_str(s1));      \
+            {CT_DO_FAIL;}                                               \
+        }                                                               \
+    }while(0)
+
+#define ASSERT_EQ_VX_STATUS(expected, actual)                           \
+    do {                                                                \
+        vx_status s0 = (vx_status)(expected);                           \
+        vx_status s1 = (vx_status)(actual);                             \
+        if (s0 == s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"           \
+                "Actual: %s != %s"                                      \
+                , __FUNCTION__, __FILE__, __LINE__, #expected, #actual, \
+                ct_vx_status_to_str(s0), ct_vx_status_to_str(s1));      \
+            {CT_DO_FAIL;}                                               \
+        }                                                               \
+    }while(0)
+
+#define ASSERT_EQ_VX_STATUS_AT_(rexpr, expected, actual, func, file, line)  \
+    do {                                                                    \
+        vx_status s0 = (vx_status)(expected);                               \
+        vx_status s1 = (vx_status)(actual);                                 \
+        if (s0 == s1) {/*passed*/} else                                     \
+        {                                                                   \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"               \
+                "Actual: %s != %s"                                          \
+                , func, file, line, #expected, #actual,                     \
+                ct_vx_status_to_str(s0), ct_vx_status_to_str(s1));          \
+            {rexpr;}                                                        \
+        }                                                                   \
+    }while(0)
+
+
+#define EXPECT_NE_VX_STATUS(val1, val2)                                 \
+    do {                                                                \
+        vx_status s0 = (vx_status)(val1);                               \
+        vx_status s1 = (vx_status)(val2);                               \
+        if (s0 != s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s != %s\n\t"           \
+                "Actual: %s vs %s"                                      \
+                , __FUNCTION__, __FILE__, __LINE__, #val1, #val2,       \
+                ct_vx_status_to_str(s0), ct_vx_status_to_str(s1));      \
+        }                                                               \
+    }while(0)
+
+#define EXPECT_EQ_VX_STATUS(expected, actual)                           \
+    do {                                                                \
+        vx_status s0 = (vx_status)(expected);                           \
+        vx_status s1 = (vx_status)(actual);                             \
+        if (s0 == s1) {/*passed*/} else                                 \
+        {                                                               \
+            CT_RecordFailureAtFormat("Expected: %s == %s\n\t"           \
+                "Actual: %s != %s"                                      \
+                , __FUNCTION__, __FILE__, __LINE__, #expected, #actual, \
+                ct_vx_status_to_str(s0), ct_vx_status_to_str(s1));      \
+        }                                                               \
+    }while(0)
+
+
+typedef struct CT_VXContext_ {
+    vx_context vx_context_;
+    vx_uint32  vx_context_base_references_;
+    vx_uint32  vx_context_base_modules_;
+    vx_uint32  vx_context_base_kernels_;
+} CT_VXContext;
+
+void* ct_setup_vx_context();
+void ct_create_global_vx_context();
+void ct_release_global_vx_context();
+
+#define ADD_VX_BORDERS(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_UNDEFINED", __VA_ARGS__, { VX_BORDER_UNDEFINED, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_REPLICATE", __VA_ARGS__, { VX_BORDER_REPLICATE, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=0", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=1", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 1 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=127", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 127 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_CONSTANT=255", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 255 }} }))
+
+#define ADD_VX_BORDERS_REQUIRE_UNDEFINED_ONLY(testArgName, nextmacro, ...) \
+    CT_EXPAND(nextmacro(testArgName "/VX_BORDER_UNDEFINED", __VA_ARGS__, { VX_BORDER_UNDEFINED, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/DISABLED_VX_BORDER_REPLICATE", __VA_ARGS__, { VX_BORDER_REPLICATE, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/DISABLED_VX_BORDER_CONSTANT=0", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 0 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/DISABLED_VX_BORDER_CONSTANT=1", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 1 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/DISABLED_VX_BORDER_CONSTANT=127", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 127 }} })), \
+    CT_EXPAND(nextmacro(testArgName "/DISABLED_VX_BORDER_CONSTANT=255", __VA_ARGS__, { VX_BORDER_CONSTANT, {{ 255 }} }))
+
+void ct_fill_image_random_impl(vx_image image, uint64_t* seed, const char* func, const char* file, const int line);
+#define ct_fill_image_random(image, seed) ct_fill_image_random_impl(image, seed, __FUNCTION__, __FILE__, __LINE__)
+
+vx_image ct_clone_image_impl(vx_image image, vx_graph graph, const char* func, const char* file, const int line);
+#define ct_clone_image(image, graph) ct_clone_image_impl(image, graph, __FUNCTION__, __FILE__, __LINE__)
+
+vx_image ct_create_similar_image_impl(vx_image image, const char* func, const char* file, const int line);
+#define ct_create_similar_image(image) ct_create_similar_image_impl(image, __FUNCTION__, __FILE__, __LINE__)
+
+vx_image ct_create_similar_image_with_format_impl(vx_image image, vx_df_image format, const char* func, const char* file, const int line);
+#define ct_create_similar_image_with_format(image, format) ct_create_similar_image_with_format_impl(image, format, __FUNCTION__, __FILE__, __LINE__)
+
+struct InputGenerator
+{
+    const char* fileName; // and testArgName;
+    vx_image (*generator)(vx_context context, const char* fileName);
+};
+
+
+vx_status ct_dump_vx_image_info(vx_image image);
+
+uint32_t ct_floor_u32_no_overflow(float v);
+
+#define CT_RNG_INIT(rng, seed) ((rng) = (seed) ? (seed) : (uint64_t)(int64_t)(-1))
+#define CT_RNG_NEXT(rng) ((rng) = ((uint64_t)(uint32_t)(rng)*4164903690U + ((rng) >> 32)))
+#define CT_RNG_NEXT_INT(rng, a, b) (int)((uint32_t)CT_RNG_NEXT(rng) % ((b) - (a)) + (a))
+#define CT_RNG_NEXT_BOOL(rng)      CT_RNG_NEXT_INT(rng, 0, 2)
+#define CT_RNG_NEXT_REAL(rng, a, b) ((uint32_t)CT_RNG_NEXT(rng)*(2.3283064365386963e-10*((b) - (a))) + (a))
+
+#define CT_CAST_U8(x)  (uint8_t)((x) < 0 ? 0 : (x) > 255 ? 255 : (x))
+#define CT_CAST_U16(x) (uint16_t)((x) < 0 ? 0 : (x) > 65535 ? 65535 : (x))
+#define CT_CAST_S16(x) (int16_t)((x) < -32768 ? -32768 : (x) > 32767 ? 32767 : (x))
+#define CT_CAST_U32(x) (uint32_t)((x) < 0 ? 0 : (x))
+#define CT_CAST_S32(x) (int32_t)(x)
+
+#define CT_SATURATE_U8(x) CT_CAST_U8(x)
+#define CT_SATURATE_U16(x) CT_CAST_U16(x)
+#define CT_SATURATE_S16(x) CT_CAST_S16(x)
+#define CT_SATURATE_U32(x) CT_CAST_U32(x)
+#define CT_SATURATE_S32(x) CT_CAST_S32(x)
+
+#define CT_MIN(a, b) ((a) < (b) ? (a) : (b))
+#define CT_MAX(a, b) ((a) > (b) ? (a) : (b))
+
+void ct_update_progress(int i, int niters);
+
+// generates random number using logarithmic scale (convenient for image size)
+float ct_log_rng(uint64_t* rng, float minlog2, float maxlog2);
+int ct_roundf(float val);
+int ct_scalar_as_int(vx_scalar val);
+vx_scalar ct_scalar_from_int(vx_context ctx, vx_enum valtype, int val);
+
+vx_enum ct_read_array(vx_array src, void** dst, vx_size* _capacity_bytes,
+                      vx_size* _arrsize, vx_size* _arrcap);
+
+uint8_t ct_clamp_8u(int32_t v);
+
+int ct_check_any_size();
+void ct_set_check_any_size(int flag);
+
+void ct_destroy_vx_context(void **pContext);
+
+char *ct_get_test_file_path();
+
+void *ct_alloc_mem(size_t size);
+
+void ct_free_mem(void *ptr);
+
+void ct_memset(void *ptr, vx_uint8 c, size_t);
+void *ct_calloc(size_t nmemb, size_t size);
+
+#endif // __VX_CT_TEST_UTILS_H__